My name is Ian, I'm currently a software engineer in in Dunedin, New Zealand. Over the last year or so, I've had periods with a fair bit of free time to contribute to FreeCAD.
I like making things, and have occasionally been in situations where a decent 3D CAD program would be nice to have for drawing up plans or ideally running finite-element simulations (mainly for thermal models, but mechanical or electromagnetic would be great too). Especially with the proliferation of 3D printers, I imagine that an open source 3D CAD program could be quite useful, so I think the audience for a program like FreeCAD is rapidly growing.
Non-computer experience is mainly with manual machine tools, but some homebrew and commercial CNC. I like bikes (mainly without motors) a lot, can TIG weld to a degree, and have some interest in renewable energy. I am interested in design; in the sense of making computer interfaces work well with people, and in presenting information as meaningfully as possible. Design of Everyday Things and The Visual Display of Quantitative Information are two great books that might explain my taste in design.
Computer experience is fairly wide-ranging, but not terribly deep in any particular area. I like Python and sometimes like C++, and have written a fair bit of code in both. Have worked in a range of roles from designing power electronics up through systems administrator roles. I'm currently employed working on embedded "bare metal" and Linux firmware, mainly in C for a VoIP company. My personal machine is a Mac laptop running OS X, and I've spent more time than I care to admit fixing Windows problems.
This is intended to eventually either become it's own page or get merged into an existing page. I'm learning git as I go, so there's a good chance that this stuff is only very vaguely correct. It works for me, except when it doesn't.
Link is of a format like https://github.com/someuser/somerepository/tree/somebranch , and may or may not point directly to the branch of interest. If not, it'll hopefully be clear from the forum post. Go to that github page, and you'll see a link on the right side with a header like "HTTPS clone URL". Click the SSH link below that to turn the link protocol into SSH, copy the address.
Now, in your local command line, cd to your FreeCAD source directory. We're going to check out the master branch, add that user's github repository to your local git repository as a "remote", fetch a list of their branches, then check out a local copy of the interesting branch.
freecad-src-dir $ git checkout master (probably not necessary, but I do this as a habit to remind myself that any changes in the working directory need to be committed) freecad-src-dir $ git remote add your_nickname_for_remote_repo <paste SSH link here, eg email@example.com:someuser/somerepository.git> (I tend to use the author's username as the local repository name) freecad-src-dir $ git fetch your_nickname_for_remote_repo (at this point, a "git branch" will show your local branches, "git branch -a" will show all available remote branches too!) freecad-src-dir $ git checkout remotes/your_nickname_for_remote_repo/branch_name (you'll hopefully get a message about being in 'detached HEAD' - see stackexchange if this concerns you) freecad-src-dir $ git checkout -b todays_date_forum_test_N (reattach your head, not strictly necessary, but can be handy to have a proper branch)
At this point, you've hopefully not run into any real problems, and have a FreeCAD source tree that's functionally identical to the one shared on the forum! When you're done, a "git checkout master" should get back to the last master you've fetched into your local repository.
Discover it. Don't modify history of a repository that has been shared with others, except with their understanding and consent.
This is just a scratch space - don't take anything here too seriously.
Anti-aliasing should be at least supported everywhere, and enabled by default.
Visible controls that toggle between two states should be indicated in a way that shows their current state. Eg, rather than a button "Toggle axis cross", a checkbox for "show axis cross" is much better.
Tools that are relevant to several workspaces (eg the measurement tool) should be pushed up into a set of general tools. This way, we'll have less work in implementing new workspaces and in updating tools, and we'll create more uniformity in the user interface across different workspaces.
Adding menu items - see Stack Overflow
There needs to be more uniformity in which libraries get used for what. Eg: there seem to be at least 4 types of strings in common use. I'd propose sticking with QStrings, and Qt's signal-slot (rather than Boost's) as the default.
Personally, I don't think new code should be merged until it includes Doxygen-formatted comments!
We should come up with a FreeCAD style guide for each language in use, especially C++. google's might be a good starting point?
There's a good start to a "FreeCAD Architecture" wiki page, in a forum post by Werner at  .
A summary of the FreeCAD Unit test framework:  .
Currently, the FCStd opening process is a bit finicky and fragile, I've put some more thoughts at  and some code that may, or may not, be useful at  . Short version is to re-work Base::Reader into something that holds onto a file handle and doles out istreams to specific files, rather than the current approach where it just holds one particular istream.
To use precompiled headers in FreeCAD: at the top of .cpp files (NOT HEADERS) include #include"PreCompiled.h" , then an #ifndef _PreComp_ block with header files that need to be included, but are not part of FreeCAD. Also make sure each precompiled header exists at least once in the PreCompiled.h within the same directory as the cpp file.
If, while adding Qt slots, "public slots:" gives you a bunch of errors: remember that in FreeCAD land, we use "public Q_SLOTS:" instead.