Jump to my Home Page Send me a message Check out stuff on GitHub Check out my photography on Instagram Check out my profile on LinkedIn Check out my profile on reddit Check me out on Facebook

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

  • R – The environment used by most research statisticians I know.
  • Root – A nice C++ interpreter (CINT) combined with analysis tools for large data sets.

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
  • Macaulay2 – My first stop for computational commutative algebra problems.
  • GAP – Great for groups and computational discrete 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

1.1.3. Document preparation

  • LaTeX – My favorite document preparation system.
  • aspell – Great replacement for ispell (knows about LaTeX and Emacs).

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

  • ImageJ – The new, and sorta improved, java implementation of an NIH Image work-alike.
  • fiji – Nicely packaged version of ImageJ.
  • MultiSpec – A free multispectral image data analysis system

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.2.5. Molecular

  • RasMol – This is "old faithful" in the molecular visualization game.
  • Avogadro – Visualization, molecular construction, and hooks to computational tools.

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++

  • GCC – Free C/C++ compiler (and a lot more)
  • clang – Another free C/C++ compiler (and a lot more).
  • BOOST – Good source of high quality C++ goodies.

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

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

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.7.6. SCM

  • RCS – This old gem is still useful for small, single developer projects.
  • GIT – My favorite for traditional (C/C++/Java) software development.

1.8. Libraries

1.8.1. MPI

  • OpenMPI – This is one of the best MPI implementations around.
  • MPICH – A very frequently used, and free, implementation.

1.8.2. Linear Algebra Libraries

1.8.3. Scientific Libraries

  • GMP – The GNU arithmetic library is very capable and robust (it is GPL)
  • Ginac – A C++/CAS library
  • GSL – GNU Scientific Library (it is GPL)
  • petsc-2 – Numerical linear algebra, PDEs, random numbers, etc…

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

  • NetCDF – A very nice file format and API (very easy to use) from UNIDATA.
  • NCO & NCView – Great tools for working with NetCDF files at the command line.
  • HDF5 – HDF5 is a very nice file format and API.

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

1.9.2. UNIX Network Tools

  • OpenSSL – Swiss army knife for encryption.
  • OpenSSH – Best SSH client and server available.
  • netcat – Move bits around a network.
  • nmap – Network scanning and system finger printing tool
  • fping – Parallel ping tool.
  • TCPdump – Snoop network traffic.

1.9.3. UNIX User Productivity

  • tmux – Terminal abstraction tool allowing terminal disconnect and reconnect.
  • fvwm2 – Best X11 window manager ever.

1.9.4. Internet Tools

  • mairix – E-mail folder search tool.
  • procmail – Filter and process e-mail messages.
  • fetchmail – POP3/IMAP client that can run in daemon mode and pass off messages to MDAs.
  • mutt – Very nice text based e-mail client.