Main Page
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.
This blog is part of the old-school Internet: Everything you see here is written by a good old-fashioned human and not by some regurgitron, a.k.a., artificial "intelligence" (AI). |
What's New?
These are the latest updates:
- December 5th, 2024: Adventures with NuttX: A Worldwide Distributed Embedded Build Farm? (Part 1)
Articles
(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 December 12th, 2023)
- 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 December 5th, 2024)
- 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 December 5th, 2024)
- Article 9: Building the KiCad EDA Suite from Sources (added on June 6th, 2023)
- Article 10: Why C? (added on March 24th, 2024 and last updated on April 8th, 2024)
There's also the Miscellaneous Notes page (added on March 1st, 2022 and last updated on March 15th, 2022).
Useful links...
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.
Mathematics
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.
Math Software and Documentation
-
If you use GNU Emacs, it has a built-in calculator called Calc, which you can call up at any time with C-x * c.
Calc, it turns out, is much more capable than what one might expect of a calculator built into an editor. It can work with huge or arbitrary precision numbers (including rational and complex). It can accept RPN and algebraic data entry. It can do a lot of convenient calculations, including just about any function you'd find on a scientific or financial calculator; it can do unit conversions and date arithmetic; it can solve algebraic equations and provide output in various notations, including (among others) C language, TeX or LaTeX; it can easily grab numbers or lists/tables of numbers from any buffer. This is only a very abridged list of Calc's capabilities.
The Calc manual is excellent and a real pleasure to read. In addition to teaching the system, it also contains exercises (and answers) and has a certain something nostalgic about it.
-
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.47.0 released on May 31st, 2023.
-
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.4.2 released on October 31st, 2024.
-
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 10.4 released July 19th, 2023.
If you use GNU Emacs, you may be interested in sage-shell-mode.
-
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 7.2 released on November 14th, 2024.
Math Learning
- 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.
Sciences
Engineering
- 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.)
Computer 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 Interprocess Communication, and 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).
Embedded Development
- 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 64-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.
Robotics
- 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...
Interesting Projects
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.
Free educational textbooks and course materials
- openstax.org: "Free and flexible textbooks and resources."
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:
- Abort Retry Fail, Bradford Morgan White's attempt "to chronicle the history of the computing industry." This Substack-based blog contains articles about notable people, companies, hardware, and software, some of which led to the successes of today's tech behemoths, others of which were greatly successful for a while only to eventually fall out of favor, and some perhaps lesser known corners of computer history that nevertheless were instrumental in some way or another./li>
- ASCII, a.k.a., TEXTFILES.COM (1998 thru present), Weblog of Jason Scott Sadofsky, prolific writer and creator of documentaries about the dial-up Bulletin Board Systems (BBS) that were the predecessors of the modern-day Internet, the creation of the text-based adventure game (GET LAMP), and other cool things.
- 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.
- Beej's Bit Bucket (2009 through present). All sorts of technical and programming topics from the author of Beej's Guide to Network Programming and other fine works I mention elsewhere on this site (see the section Computer Programming above).
- 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.
- John D. Cook's blog (2008 thru present) — a blog about solving "hard problems" in "mathematics, statistics, and computing." The author has also published technical articles in various publications.
- 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.
- Kristian Köhntopp's blog (2007 thru present) — MySQL, file systems, programming, and other commentary. The 50 Years In Filesystems series is what got me interested in this blog. At this writing (May 2023) there are five articles in the series:
- 1974 - The traditional Unix filesystem,
- 1984 - The BSD fast file system,
- 1994 - SGI XFS,
- 1994 - a detour about Vnodes and multiple filesystems in Unix,
- Towards 2004.
- 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.
- Xah Lee's blogs (1995 thru present) — including topics in GNU Emacs, efficient use of computers, avoiding Repetitive Strain Injury (RSI), keyboard reviews, programming, mathematics, and other commentary.
- 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.
- The home page and blog of Orson R. L. Peters. At this writing (May 2023), this is a relatively new blog (since January 2023) but the articles are very well-done, professional, and in-depth. Topics revolve around algorithms, mathematics, and their implementation in a computer.
- 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.
- Protesilaos Stavrou's site (2011 thru present) — topics in philosophy, politics, Linux, and Emacs, from the creator of the Emacs Modus themes and numerous other packages.
- Daniel Stenberg's blog (2007 thru present) — from the creator of the ubiquitous Curl utility and LibCurl.
- Steve's Toolbox (2016 thru present) — topics in Python, Subversion (SVN) version control, embedded development, gardening, and other fun stuff.
- Christopher Wellons's (a.k.a. skeeto's) blog (2007 thru present) — topics in C/C++, Unix, GNU Emacs, GNU Octave, and others, with wonderful illustrations made with Graphviz, gnuplot, and SVG.
- C'est la Z (2010 thru present), the blog of Mike Zamansky, a recently (as of 2023) retired teacher from Hunter College. The blog includes numerous subjects on computer science, education, writing, etc. There is an excellent series of videos, about 80 so far, to teach GNU Emacs. (Link to YouTube playlist. See other videos on Mike's channel also.)
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!