On this blog, we talk about various types of software, electronics, and development tools to make neat things!
And when we're too tired to work, we talk about neat places to go.
(Once there are enough articles to justify it, I'll create a nice categorized index. For now, they're listed in the order written.)
- Article 1: What is Version Control and Why You Need It (a work in progress, last updated November 18, 2018)
- Article 2: TM4C129ENCPDT, TivaWare, and lwIP in a Polled Superloop (added November 11, 2018)
- Article 3: Good, Fast, Cheap? Choose any two. (added January 8th, 2019)
- Article 4: Categorized Index of Great Videos (and Channels) (updated November 25th, 2019)
- Article 5: The Double Slit Experiment -- What's going on? (added on The Fourth of July, 2019)
- Article 6: Adventures with NuttX (added on July 11th, 2019 and last updated on May 13th, 2020)
Tools (free software) and learning materials
In this section, we'll curate a list of useful free software, documentation, and other learning materials available from around the world.
My personal favorites
- Version control with Subversion. When you develop your projects and accumulate files that you work on, evolve, and morph over time, you need a place to keep those files and you need a system to keep track of all the changes and versions you create. This is true whether you're a lone developer or a large team. In fact, the larger the team, the more true it is! Subversion is my favorite tool for the task! If you've heard that it isn't very capable, you've likely heard outdated information. Subversion is simple, easy to use, and reliable. It scales up from a single individual to large teams. It can run on your laptop, on a server, or in the cloud. It keeps everything in one central location so that you have Single Source of Truth and one consolidated place to back up regularly. Read my article What is Version Control and Why You Need It. That article doesn't really say much about Subversion specifically. It just talks about Version Control in general. I plan to write articles specific to Subversion, why it's so great, strategies for managing your information with it, how to do cool things with it, and much more, Real Soon Now (tm)!
- Keep track of your electronic components with PartKeepr. Electronic components tend to be very tiny, and as you start buying them for your projects, they will grow from filling a shoebox to taking up an entire wall of shelves. It quickly becomes impossible to keep track of what parts you have and what parts you don't have, and you'll find yourself ordering parts you already have and forgetting to order the ones you actually need to order! Worse, sometimes the cost of postage and shipping is much greater than the cost of the parts themselves, and so you'll want to minimize that. PartKeepr to the rescue! It's an inventory control system specifically designed for keeping track of electronic components. It installs as a server and is accessed via a web browser. Some people have even turned tiny computers like the Raspberry Pi 3 into their PartKeepr server! I'll be writing more about PartKeepr in the near future.
- Doxygen document generator. I document all my source code with special comment blocks that Doxygen recognizes. Run Doxygen and it can generate HTML, LaTeX, Windows Help, and other formats, complete with include graphs, call graphs, called-by graphs, cross references, an index, built-in-search... It can even output warnings, similar to compiler warnings, when you forget to document a function parameter or document one that doesn't actually exist. Because the documentation gets written with the code, Doxygen performs various checks, and the generated documentation actually provides insight for the programmer, this tool provides incentive for programmers to actually document things properly.
User Interface Toolkits
wxWidgets (formerly wxWindows), a cross-platform toolkit to build user interfaces (and other parts of complete applications) for Windows, Mac, *NIX/Linux/BSD. Its claim to fame is that wxWidgets utilizes the native user interface elements of the operating system on which it runs, which means that applications built with it get a native "look and feel," in contrast to toolkits that do all GUI drawing themselves and therefore may not look "native" under some platforms. wxWidgets has been around for many years and development continues. Many applications, both free software and proprietary, are built with wxWidgets, including a few you may have heard of or used:
- KiCAD, a free open-source cross-platform PCB EDA (Printed Circuit Board Electronic Design Automation) suite for designing electronic circuit boards.
- Audacity, a free open-source cross-platform audio editing application.
- Code::Blocks, a free open-source cross-platform C, C++, Fortran IDE (Integrated Development Environment).
- FileZilla, a free FTP (File Transfer Protocol), FTP over TLS (FTPS), and SFTP client.
Ever run into Greek letters when you're trying to understand some math and you don't know what they are or what they mean? Here's my go-to page to help with that: Greek letters used in mathematics, science, and engineering on Wikipedia
Theorem of the Day. 'Nuf said.
Software and Documentation
Maxima is a free (GPL-licensed) Computer Algebra System (CAS).
For a ten-minute tutorial of Maxima, see: this very useful article.
For some more in-depth treatment of Maxima, see the homepage of Edwin L. (Ted) Woollett, Ph.D., Professor Emeritus CSULB, for Maxima by Example and Computational Physics with Maxima or R.
R is a free (GPL-licensed) numerical system for statistics and data science.
For some more in-depth treatment of R, see the homepage of Edwin L. (Ted) Woollett, Ph.D., Professor Emeritus CSULB, for Maxima by Example and Computational Physics with Maxima or R.
Possibly the king of all mathematics software, SageMath incorporates both Maxima and R, as well as countless other free software packages written in C, C++, Python, Cython, and even Fortran, while gluing it all together and providing a unified interface language based on Python with some added features. If you really want to go nuts with computational math, this package can take you there.
To learn SageMath, there is the Peering into Mathematics through Sage-colored Glasses (a.k.a., "Don't Panic!" or "Panic!" depending on your point of view) book at the University of Southern Mississippi, Computational Mathematics with SageMath, and many other resources. You could, for example, look at the project's official documentation and tutorials.
- For a mathematics, physics, and geometry library in C++ with a Boost license, see Geometric Tools by David Eberly. The site also contains numerous PDFs on various areas of graphics, imagics, mathematics, and physics.
- MacTutor History of Mathematics
- Trig without Tears (or, How to Remember Trigonometric Identities) by Stan Brown.
- Stats without Tears, the Statistics counterpart to Trig without Tears, by the same author.
- Sam's Laser FAQ, A Practical Guide to Lasers for Experimenters and Hobbyists (with safety info, links, parts, suppliers, etc).
- elm-chan.org, "Electronic Lives Mfg", of FatFs fame. Besides FatFs and its more compact cousin PetitFs, this site includes a plethora of electronics projects, technical notes, and other software for embedded systems.
- Matt's Tech Pages, information and tools regarding LCD display controllers, in addition to a general blog on various subjects in electronics and programming.
- The C++ tutorial at LearnCpp.com is a fabulous resource for learning what is perhaps the most complex and, more importantly, most powerful programming language of them all.
- And when you need reference material on C++, this is the place to go! Pun intended! (The C++ "this" pointer lol.)
- Beej's Guide to Network Programming by Brian "Beej" Hall and its GitHub repo (for translaters). This guide has been invaluable to me in learning network sockets programming. It got me up and running from practically zero knowledge. Today, I write some pretty high-performing networking programs. Mr. "Beej" has several other guides as well, including Beej's Guide to C Programming, Beej's Guide to the GNU Debugger (GDB). Also, see Beej's blog: Beej's Bit Bucket.
- NuttX Real-Time Operating System (RTOS)—I think this one is quickly becoming one of my favorites. This is a RTOS for embedded environments that differs from most other RTOSes out there in that it seeks to be as close to POSIX and ANSI compliance as is reasonable while maintaining a small footprint, and runs on numerous 8- to 32-bit microcontrollers, and is permissively licensed. I'm documenting my Adventures with NuttX in "Real Time" as I learn more about it.
- Nine ways to break your systems code using volatile, a very good article by University of Utah Computer Science Professor John Regehr. This one is particularly important if you're writing embedded code. Professor Regehr's archive of articles contains other gems, too. Worth a look!
- Haxe. This one looks very interesting but I haven't gotten much into it. Perhaps that will be coming soon!
Questions? Comments? Corrections? Criticisms? Something you'd like to see covered here? Send feedback to: the name of this blog at mail dot com.
Much more to follow soon!
Stay posted as this blog gets going!