Learn programming for CnC lathes - functional-programming

I would like to learn programming for CNC lathes.
First, what open-source programs (similar BobCAD-CAM) would be best?
Second, what is the best way to proceed in learning to use the programs?
I look forward to learning the answers to my questions. Thank you!

There are a few good free CAD/CAM programs you can get off the net, just look on google. Personally, I recommend using Featurecam or Mastercam ( although neither are free, but they are good programs.)
As for learning to program, this website has a lot of useful information http://cnc-programming-by-gord.blogspot.com/2012_07_01_archive.html
I hope it helps you like it helped me.

Autodesk Fusion is free for hobby users. It allows you a full CAD/CAM package with loads of tutorials online and on Youtube. for simulation OpenSCAM will allow you to check on your code. Some of the fancier live tooling lathes have some machine specific stuff on them but in the end a solid knowledge of G-code will help decipher it.

#1, you need to know which lathe & which controller you want to program. Then get the manuals for it. Some G & M codes are similar across many machines, but not all of them. So, get the proper programming manual for the exact machine.
#2, research the CAM software you want to learn. Are there certain shops you want to work at? Well then, what do they use? Research the most popular packages in your area. Figure that out & then learn the specific software. Otherwise, you're wasting your time.
Depending on what you pick, there are videos out there to give you a good idea of how they work. Re-sellers offer classes. Some websites have tutorials & manuals. Again, don't waste your time learning something you might not even use. Even after you pick something, the different versions of it have proven to be very different. So be sure you're learning the right software & the right version.

Related

What are the best resources to learn JuMP?

I am new to JuMP / Julia. Do you have some suggestions or advice about how to learn it given that there are so few resources on the internet ?
Go to the fore mentioned quick start guide and run the examples.
JuliaCon lectures are also a good source of information and can be found on YouTube.
Once you get through there is a collection of JuMP notebooks at JuliaOpt.
Using JuMP is simple. However, difficulty might arise due to frequent changes to APIs and interoperability between versions (sometimes you will come across an example that just does not work).

What is a good language to develop in for simple, yet customizable math programs?

I'm writing to ask for some guidance on choosing a language and course of action in learning programming. I apologize if this type of question is inappropriate for Cross Validated, please advise me to another forum if that is the case.
I've seen thread after thread with questions from newbies, asking, "What is the best language to start with?" and then it always starts a flame war or someone just answers, "There's no best language, it's best to pick one and start learning it." My question is a little bit more focused than that.
First off, I've been programming my whole life, in very limited capacities. My deepest training was in C++. Whilst in my EECS degree program, I resolved to never be a software developer because I couldn't stand not interacting with people for such long periods of time. Instead I realized I wanted to be a math teacher, and so that is the path I have taken.
But now that I'm well down that path, I've started to realize that perhaps I could develop my own software to help me in the classroom. If I want to demonstrate the Euclidean algorithm, what better way than to have a piece of software that breaks down the process? Students could run that software as part of their studies, and the advanced students might even develop programs for themselves. Or, with an Ipad in hand, why not have an app that lets students take their own attendance? It would certainly streamline some of the needs of classroom management.
There's obviously a lot of great stuff already out there for math, and for education, but I want a way to more directly create things specific to my lectures. If I'm teaching a specific way of calculating a percent, I want to create an app that aligns with my teaching style, not just another calculator app that requires the student to learn twice.
The most I use in class right now is iWork Numbers/Microsoft Excel for my stats class. Students can learn the basic statistical functions, and turn some of their data into graphs.
I have dabbled a bit with R, and used Maple in college. I've started the basic tutorials for OS X/iOS development and have actually made good progress making an OS X app that takes a text string, converts it to numbers, and performs encryption using modular addition and multiplication. I sometimes use Wolfram|Alpha to save myself some time in getting quick solutions to equations or base conversions. I know of MatLab, Mathematica, and recently people have been telling me to check into Python or Ruby. I also know basic HTML, and while it's forgotten now, learned Javascript and PERL in college.
If I keep on the path of Obj-C/Cocoa, I think it will have great benefits. Unfortunately, anything I produced for Mac would only be usable on a Mac, so it wouldn't be universal for all of my students. Perhaps then learning a web language would be better. Second, I'm wondering if the primary use is mathematical, then perhaps my time would be better spent learning Mathematica Programming Language, or R, or something based less on GUI and more on simple coding of algorithms, maybe Python or Ruby?
It seems that Mathematica already has a lot of demos for different math concepts, so why reinvent the wheel is also a question I have. I think overall, it would be good to have more control and design things the way I need. And then, if I do want to make an "Attendance" app or something else, I would already have the programming experience to more easily design something for my iPad or MacBook.
The related question to this is what is a good language to teach to my students? In his TED talk, Conrad Wolfram says one of the best ways to check the understanding of a student is have them write a program. But if Mathematica does the math virtually automatically for them, then I'm not sure that will get the deeper experience of working out logic for themselves, like you do when you're writing C, or a traditional procedural language.
I know that programming takes time to learn, but I also know that at this point, my goal is not to be able to make an app like "Tiny Wings." With the app store ease, some of my work may be an extra revenue stream, but I see myself as more of a hobbyist, and now teacher looking to software development specifically for its ability to help me demonstrate mathematical concepts.
I think I will push ahead with Obj-C/Cocoa for OSX/iOS, but if anyone has some better guidance regarding all of the other available stuff, it would be much appreciated. I don't think I would want to go fully to the web (I like apps), but perhaps someone could suggest a nice way of bridging what I produce in XCode to a universal web version. For example, if you come up with an algorithm in obj-c is it easiest to transition that to ruby and run it online, or is there another approach that works better?
Mathematica is pretty awesome for the first part of your question. I've used the interactive mode (Manipulate[]) for explaining things to my colleges (and myself). It makes really nice dynamic figures and is fairly expressive (although your code can end up looking like line noise). It is very powerful, but it does far less for you than you might think. It's pretty intuitive, which is a good thing for teaching.
You could use Scala if you want an "easy" way to make a domain specific language for teaching. Python seems to confuse people as a first programming language. Objective C seems like a completely random choice to me.
Mathematica then. It's worth the price. But anything that is interpreted and has an interactive shell is probably better than a compiled language. BBC BASIC?
Nothing beats Haskell for general-purpose mathematical programming. The wiki's quite extensive and the IRC channel (#haskell on Freenode) is great for asking questions. If you statically link your binaries on compilation, you should be able to run your programs on just about any system (with a few exceptions, e.g., libgmp).
Haskell code reads (roughly) like mathematical notation once you get the hang of it, so it can really help to tie things together for your students who are motivated to write their own programs. The purely functional style can be beneficial, as well, since it focuses less on I/O and the marshalling of data (perfectly useful in applications, perhaps less so in pure math), and more on the actual creation and refinement of functions and algorithms. You can even compose functions just as you would on paper.
If you want to get really serious, you could also look into Coq or Agda, but those might be a bit much for most classes.
For a Haskell program idea for an educator, check out this link.
A nice list of arguments can also be found at:
Eleven Reasons to use Haskell as a Mathematician and the book The Haskell Road to Logic, Maths and Programming

What do I need to do to get paid to Scheme?

I'm a big fan of functional programming in general, Schemes in particular, and PLT-Racket ideally. I am wondering what concrete steps are likely to get me into a position where coding Scheme (or some functional language) is the bulk of the work.
I'm actually quite interested in academia, but on the other hand, I don't feel like I necessarily have what it takes (at least not at the moment) to do a top-tier Ph.D in CS. I definitely would prefer to have some real-world experience putting complex systems together in Scheme either way. Does anyone have any advice for an aspiring Schemer?
Start writing some Scheme libraries, then blog about the libraries you've wrote, get noticed in the community.
This will always give you leverage when applying for a position, employers like to have some evidence of what you can do.
dalton has the right idea; you want to build something you can show off. To find out about needs, you could go to http://srfi.schemers.org/, which is an archive of proposals for Scheme libraries and other improvements to Scheme, and see what you think you can contribute to. Or make contact with the Racket team; you may be able to contribute to Racket directly.
If you want to leverage something popular and in the news: App Inventor is based on Google Blocks, which are in turn based on Kawa, which is a Scheme dialect [*].
If you can show off your skills by putting together blocks and making them available for the community...it's a natural way to take advantage both of your multi-language skills and something currently getting press coverage.
Regards,
Dak
[*] and I forgot to say that earlier, mea culpa!
Not going to accept my own answer because it is, in general, worse than the one #dalton gave, but!
I got a grant through Turbulence.org to write an art and thus was paid to scheme! Or racket, if you want to be a pedant. repo here...
F# is getting popular in the finance sector:
http://cs.hubfs.net/forums/thread/16004.aspx

Advice me what to do with large project when you work alone !

I bet many of you were in such situations in the past.
I'm currently working on huge ASP.NET web project. Ad management system of some kind. My boss doesn't want to get more professionals to help me but gives me inexperienced staff that don't even know to program on ASP.NET and think it is an easy task. I deal with programming and design
What advices do you have to handle the boss ?
What tools can help me to ease with this task ( except usage of this very website )?
Thanks
I would hope good source control is something you already haev on your list but I think its always the best thing for any big project. Keeps your code safe and has the added advantage of allowing easy review of what your team are checking in if you feel the need for oversight.
Other than that just make sure you give your boss a realistic understanding of the time taken for various tasks and if he complains make it clear that your team needs more training if he wants stuff done faster.
P.S. [Edit: removed as no longer relevant]
You could ask him for a raise from getting rid of the people who are not helpful. that might actually save him money and make your time more worthwhile.
What advices do you have to handle the boss ?
First make sure you have a good analysis document and that you have for every dependency a spoc (single point of contact). Make sure the people who you're making this application for are integrated into the process. I suggest using something like scrum but certainly daily standup meetings.
Use a good system to follow up on everyone like for example TFS2010 which has also testing capabilities integrated so your testing team can be better integrated.
Have a bug tracking tool and source safe handy. Continuous integration is also an asset.
but gives me inexperienced staff that don't even know to program on ASP.NET
It's your boss intention to upgrade his people to a level where they are capable of programming ASP.NET applications in the end. What way to better learn it than hands on experience from a dedicated professional like you?
Be aware: you're dealing with people now, not just code. They get sick, have their strenghts and weaknesses just like you. And believe me, it can be a challenge sometimes to deal with the human part of a project. Especially when there's pressure due to release dates.
Perhaps you can convince him to distribute some (technical...) parts of the project to RentAcoder.com or getAfreelancer.com? It will be cheaper than getting more manpower..
Use a decent workitem/bugtracking system. This won't turn your 'inexperienced devs' into experts but at least you'll be able to see what progress they are making(or not making as the case may be)

How do you learn a new skill/framework/technology?

I need to be able to contribute to a relatively large Adobe AIR project and I'm starting from scratch with this technology. What's the best way to go about it?
I usually get a good book/tutorial and work my way through it but this time it seems there's just too much to learn for this to be feasible within a reasonable time frame. I would need books on Actionscript, FLEX, etc...
Do you know of any good resources that might be useful for this particular case?
How would you go about it if you were in my shoes?
I just had to do something similar. If you can afford it (or, get your company to pay for it), try doing a training class. I did one by Figleaf software a couple months ago and it really helped.
As for books, I hear the Essential Actionscript 3 book is good (I have the one for AS2 and it's quite good). Flex is really just the SDK. You'll be doing most of your work in AS3 and MXML.
Another really good thing to do is download the SDK and start playing with it. Think of a couple small apps to do, then write them in Flex. I did this at work (wrote a couple util Apps in Flex to learn it). I find the best way to learn is to do it, and the SDK is free so there shouldn't be anything stopping you.
Hello World for AIR, then progressively add detail.
Aggressively use any communities out there.
Blog about your experience. One day you will help someone else.
Today you are learning, tomorrow you are teaching.
I download samples from the Internet, and run them, mess with them, try to change them and understand how they work.
I subscribe to blogs on the topic and do samples, try to understan the stuff people write about.
And I do samples :)
So I basically learn from the top - down. First I get the general sense of the technology, and then I drill down with the samples to the parts that I find interesting. Works pretty well. :)
I usually find online tutorials are the best way to go. They are more to the point than books, so it's usually quicker to get up to speed. And don't limit yourself to a single resource. I've never had problems finding enough tutorials through our friend google.
I have no knowledge about Adobe AIR though. I assume your customer knows you're a noob too? ;D
I'm a big advocate of active learning, which is described in detail, here. Essentially, when you are trying to learn a new technology: read about it, discuss it with your peers, teach it to people who are even newer to the technology, and most importantly, get your hands dirty.
A perfect example of how you can learn new things is by getting involved with a community such as stackoverflow, or a discussion forum based around what you would like to learn (http://www.adobe.com/devnet/air/), or even by contributing to an open-source project.
Of course, none of the above is as effective as trying new things out. In order to learn new technologies (in my honest opinon), it is best to dive in "head-first" and try things out.

Resources