Mitch Richling: Software Resources
1. Introduction
I use a large number of software tools in my daily work as a programmer, data analyst, and system architect. My philosophy is to use a variety of very
powerful, dedicated tools together in a flow instead of using large, monolithic, "all in one" solutions. Listed on this page are some of the more
important tools I use. Due to popular demand, most of the links are annotated – with a few rants included for free… :)
1.1. Mathematics & Statistics
1.1.1. Statistics
1.1.2. Interactive Math
1.1.2.1. General Computer Algebra
- Maxima – My favorite free symbolic algebra package.
- Maple – My favorite commercial symbolic algebra package.
- Mathematica – A commercial symbolic algebra package that I don't use anymore.
1.1.2.2. Specialized Computer Algebra
1.1.2.3. Numerical Computation (Especially Numerical Linear Algebra)
- MATLAB – A good (expensive) environment for numerical linear algebra.
- Octave – A good (free) environment for numerical linear algebra.
- Julia Programming Language – A fantastic environment for numerical computation.
1.1.2.4. Desktop Calcualtors
- HP-15C Simulator – A high fidelity simulation of the HP-15C with several nice improvements.
- Free 42 & Plus 42 – A very nice reimagining of the HP-42S.
1.1.3. Document preparation
1.1.4. Misc
- NIST – Home of GAMS, the matrix market, and a ton of other great stuff.
- UoF Matrix Collection – The University of Florida Sparse Matrix Collection.
1.2. Visualization and Graphics Packages
1.2.1. 3D Modeling & Rendering
- Povray – Povray is one of the oldest, and best, ray tracing programs available.
- Renderman (Aqsis) – Popular procedural rendering spec.
- Radiance – A nice radiosity based rendering tool.
- Blender – A nice interactive environment for 3D artists.
- meshlab – A nice tool for interactive visualization and modification of 2D meshes
1.2.2. Photo & 2D Art
- ImageMagick – A fantastic command line based image processing tool (photoshop without a GUI)
- gimp – Powerful image processing package – free Photoshop replacement.
- inkscape – Nice vector drawing package – free Illustrator replacement.
1.2.3. Science & Medical
1.2.4. Scientific Visualization
- SCIRun – Sports a sophisticated data model and visual programming interface.
- VisIt – A turnkey solution for many visualization problems. Fast. Scalable. Flexible. Easy.
- GNUplot – A great, and free, tool for simple, quick graphs (2D & 3D).
- ParaView – More of a geometry viewer than a visualization tool, but it is getting better.
- Graphviz – A very nice, and free, graph layout package. Very useful.
1.3. CAD
- LibreCAD – My favorite 2D CAD package. Works on Linux & Windows.
- FreeCAD – My favorite free 3D interactive CAD package. Works on Windows & Linux.
- OpenSCAD – My favorite free 3D non-interactive 3D CAD package. Works on Linux & Windows.
- xcircut – A robust 2D CAD tool for electronics. It's super clean & efficient user interface. Works on Linux.
- See the EDA Section below!
1.4. EDA
- KiCad EDA – My main tool for schematic capture & PCB work. Completely free. Works on Linux & Windows.
- LTspice – The legendary, free Spice simulator from LT/ADI. Windows only.
- QSPICE – Qorvo’s QSPICE is quite good. Windows only.
- ngspice – Open source spice simulator with tons of features.
- Xyce – A distributed parallel processing spice from Sandia. Source on github
- SIMetrix – A powerful simulation environment. The provide a useful, but limited version for free.
1.5. Database Tools
1.5.1. Databases
- SQLite – Embeddable, fast, small, server-less, light weight, file based database.
- PostgreSQL – My choice for all small database work.
1.6. Programming languages I use frequently
1.6.1. C & C++
1.6.2. Scripting
- Zsh – The best shell ever…
- Bash – The second best shell ever…
- GNU sed – One of the best sed's available.
- GNU awk – This is one of the best awk's available
- Perl – The original scripting language that changed the game. Get modules at CPAN
- Ruby – All the good bits of Perl & lisp rolled into an elegant little language.
- Expect – Great little scripting tool and library for interacting with terminal based programs.
1.6.3. Java & JVM
- ABCL – Armed Bear Common Lisp runs inside a JVM.
- Processing – neat little Java based language for simple graphics programs
1.6.4. Javascript
- jqPlot – Client side plotting with a clean look and nice API.
- dygraphs – A fantastic time series plotting tool.
- ProcessingJS – A javascript version of Processing!
1.6.5. Fortran
- GNU gfortran – This is a good Fortran compiler considering the price.
- Intel – Good compilers for x86 Linux and Windows
1.6.6. LISP
- SBCL – Steel Bank Common Lisp is very robust and FAST – My favorite LISP!!
- ECL – An easily embedable Common Lisp that can produce standalone compiled binaries.
- CMUCL – A full featured Common Lisp, but not very portable.
- SLIME – Fantastic Lisp environment for Emacs.
- ASDF – Another System Definition Facility – A great way to load packages.
- Quicklisp – Best thing to happen to LISP in years – think rubygems/pip/CPAN for LISP.
1.7. Programming Tools
1.7.1. Editors
- GNU Emacs – The gold standard in editors. :)
- Visual Studio Code – If you can't use Emacs, then …
- VIM – The ultimate incarnation of VI.
1.7.2. Formatting
- GNU indent – Re-indent all the horrible code other people send you! Yippie!!!
- GNU Enscript – Transform code into a form suitable for publication as HTML, PDF, and PS.
- Highlight – Transform code into a form suitable for publication as HTML.
1.7.3. Documenting
- Doxygen – The best looking code documentation generator I have ever found.
1.7.4. Building & Portability
- GNU make– Old reliable in the UNIX software development world.
- GNU Autoconf – One way to make sure your project will work on various UNIX-ish platforms.
- CMake – More of a "make maker" than a build tool – like GNU Autoconf above. Good Windows and UNIX-ish support.
1.7.5. Lexers & Parsers
- Flex & Bison– Reliable GNU versions of the good old Lex & Yacc tools
- ANTLR – ANTLR is a modern, popular, and full featured parser with a good guide book.
- re2c – re2c is a very fast, simple, easy to use, and well implemented parser.
1.8. Libraries
1.8.1. MPI
1.8.2. Linear Algebra Libraries
- ATLAS – Tuned BLAS
- NetLib – LAPACK, BLAS, etc.. (netlib handbook)
- OSKI – Optimized Sparse Kernel Interface (BTW, bebop has a ton of good stuff)
- Yousef Saad's home page – (The home of SPARSKIT)
- eigen – A very nice C++ library.
1.8.3. Scientific Libraries
1.8.4. Random Numbers for Simulation
- BOOST – The C++ library has a nice random number generator.
- GSL – The GNU Scientific Library has a nice random number generator API
- Mersenne Twister – Makoto Matsumoto's very nice random number generator
1.8.5. Scientific Data Libraries
1.8.6. 2D & 3D Visualization
- Cairo – Not a visulization tool, but a very nice raster graphics library.
- Coin3D – An open source implementation of SGI's Open Inventor.
- VTK – High level visualization library. One of my favorite tools for high level work.
- OpenSceneGraph – A very nice C++ scene graph (much like SGI's Performer)
1.8.7. GUIs with C & C++
- FLTK – Very fast, small, portable GUI toolkit with good GLUT and OpenGL support.
- wxWidgets – A well organized application framework, with a few ugly code metaphors.
- Fox Toolkit – A small and well organized application framework with a great Ruby framework.
1.8.8. Other Libraries
- GNU readline – Provides much of the command line awesomeness of great tools like bash.
- zlib – The original, free compression library for UNIX.
- bzip2 – A command line tool, but also a very nice compression library
- ICU – Comprehensive Unicode library
1.9. Misc
1.9.1. Astronomy
- stellarium – Simple planetarium program
- xephem – Sophisticated planetarium program with many more advanced features.
- sofa – Software for various astronomy calculations