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 March 16th, 2022)
- 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 15th, 2022)
- Article 7: Optimizations on Embedded Microcontrollers (added on February 28th, 2022)
- Article 8: Adventures with Emacs (added on April 20th, 2022 and last updated on August 10th, 2022)
There's also the Miscellaneous Notes page (added on March 1st, 2022 and last updated on March 15th, 2022).
In this section, we'll curate a list of useful free software, documentation, and other learning materials available from around the world.
Most of what follows are links to other sites. Throughout the high12noon blog, all links to other sites, including the ones below, are purely informational and do not imply that we agree with or endorse anything expressed there.
Tools (free software) and learning materials
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:
- 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.
- KiCAD, a free open-source cross-platform PCB EDA (Printed Circuit Board Electronic Design Automation) suite for designing electronic circuit boards.
- wxMaxima, a free (under the GPL) document-based GUI for Maxima, a Computer Algebra System.
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.
Version 5.46.0 released on April 13th, 2021.
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.
Version 4.2.1 released on June 23, 2022.
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.
Version 9.6 released May 15th, 2022.
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.
Version 6.4 released on June 8th, 2022.
- 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.
- Calculus Made Easy by Silvanus P. Thompson, originally published in 1911 and public domain in the USA, available as PDF and LaTeX source at Project Gutenberg.
- 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 Scots Guide to Electronics, information about signal processing, radio, and measurement. (The radio section, Radio Techniques and Coherence, or RadCom, is especially interesting.
- 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.
- For a combination of math, computer graphics, computer vision, projection, and general technical fun, see the homepage of Paul Bourke. You can thank me later.
- Build Your Own Lisp walks you through learning C programming and building a Lisp interpreter in 1000 lines of code (utilizing the author's also-interesting MPC (Micro Parser Combinators) library).
- 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!
- The homepage of Akos Pasztor. Neat electronics and firmware projects built with STmicro's STM32 family of microcontrollers.
- ROS - Robot Operating System. Not really an "operating system" in the general sense, ROS is a collection of programs, libraries, and tools to help control robots, from toys to industrial to maritime to autonomous mobile robots to drones etc. Some articles about ROS coming to this blog soon...
This is a listing of projects I have come across which look interesting. I have not spent much time with them other than taking some cursory glances and perhaps reading some documentation and watching videos about them. Nevertheless they seem interesting enough to mention here, at least in passing, and perhaps I will have the time to investigate them more fully in the future. Check back often for new additions!
- Haxe. An open source programming language that cross-compiles to other programming languages, allowing you to target multiple platforms, languages, and tools.
- Kaitai Struct. A declarative programming language for describing binary data formats, allowing to generate parsers/decoders/deserializers (or whatever you want to call them), making those binary formats available to your software.
- Raylib. Video game development library with 2D and 3D graphics, fonts, textures, immediate mode GUI, audio, keyboard, mouse, joystick, math, physics, and lots more. Open source, self-contained, no dependencies, and supports numerous operating systems, programming languages, and target platforms.
Other People's Blogs
This is a listing of blogs I've found useful or interesting in some way. These are in alphabetical order by last name or the name of the blog itself:
- Alan C. Assis's blog "about computers and other funny things" (2005 thru present) — NuttX real-time embedded operating system, 3D printing, CNC, KiCad, STM32, and many other subjects in embedded development.
- Christian's Blog (2011 through 2015). Real-time embedded development, electronics, Linux, Python, etc.
- mbork.pl (Marcin Borkowski's blog, 2009 thru present) — a blog with some articles in English, others in Polish, about Math, Unix command line tips and tricks, Emacs, LaTeX, SQL, and other good stuff.
- Sacha Chua's blog (2001 thru present) — Emacs-centric blog with numerous other useful subjects mixed in. The approximately weekly Emacs News posts are a good source of information about the editor and related recent developments.
- Jack Ganssle's blog (2018 to present) — topics in embedded systems, electronics, firmware, and even sailing, from the author of myriad magazine articles and several books.
- Paul Hammant's blog (2002 to present) — topics in version control systems, DevOps, continuous delivery, etc.
- irreal.org/blog (April 2011 thru present; see also the old blog covering 2009 thru April 2011) — topics in Unix (and Unix history), Emacs, Lisp, LaTeX, and occasionally controversial issues.
- jsomers.net (2009 thru present) — topics in writing, coding, and philosophy.
- Dan Langille's Other Diary (2005 thru present) — topics in FreeBSD, Unix, security, file systems, hardware, and open source.
- LEE Lup Yuen's blog (2014 thru present) — an IoT educator by trade, this blog contains numerous very well-written and illustrated articles in embedded systems, Apache NuttX and other RTOSes, programming in new languages such as Zig and Rust on NuttX, and much more.
- liquidsdr.org/blog (2013 thru present) — signal and filter processing, math, and Raspberry Pi projects.
- nullprogram.com (2007 thru present) — topics in C/C++, Unix, GNU Octave, and others, with wonderful illustrations made with Graphviz, gnuplot, and SVG.
- Orange Duck (2011 thru present) — topics in machine learning, computer graphics and animation, programming, and philosophy.
- scripter.co (2014 thru present) — topics in Emacs, Unix scripting, and text processing.
- Steve's Toolbox (2016 thru present) — topics in Python, Subversion (SVN) version control, embedded development, gardening, and other fun stuff.
Check back 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!