Introduction

This page catalogues software projects and other useful resources on the web, especially those that I have personally found to be useful or interesting.

Much of the software listed here is free and open source with major contributions from - or developed entirely by - dedicated community members. These efforts have resulted in a vast selection of reliable, high quality, and readily-available software.

1 The R Project

  • R The R Project for Statistical Computing.

  • CRAN A major repository of contributed R packages.

  • Rstudio An integrated development environment (IDE) for R users. An open source project maintained by the Posit company.

  • sf A comprehesive package for working with shapefiles and other geographic objects.

  • tidyverse Packages for data wrangling, plotting, and other fundamental data science tasks.

  • pbdR Packages for high-performance computing, including a Message Passing Interface (MPI) for R.

  • Rcpp Framework for integrating C++ into R.

  • Rcpp API This project documents the API in a human-readable way. Appears to be curated manually by the author and not auto-generated.

  • R-Nimble Framework for constructing hierarchical models with compiled code for high performance.

  • LaplacesDemon Full-featured library for Bayesian computation.

  • Roxygen2 Tool for documenting R packages by adding comment blocks with markup.

2 Platforms for Statistical and Scientific Computing

  • Stan Declare Bayesian models using a high-level modeling language. Models compile into fast executable programs which generate samples from posterior distribution using Hamiltonian Monte Carlo. Integrates with several other programming languages including R via the rstan package.

  • MultiBUGS An actively maintained BUGS platform for Bayesian modeling, which automates MCMC sampling given a user’s model specification. Other BUGS variants are OpenBUGS and WinBUGS. JAGS also follows a similar paradigm.

  • Julia A high-level and high-performance language for technical computing.

  • Python High-level language for data science and general computing.

  • Octave A scientific computing platform that is largely compatible with MATLAB syntax, but is open source.

  • Wolfram Alpha Search engine that can compute integrals, limits, etc.

3 Software Libraries

  • GSL The GNU Scientific Library. Implements a number of numerical methods including integration, optimization, and root-finding.

  • Netlib A repository of code and documentation for numerical methods. A good place to find definitions of standard FORTRAN codes for standards such as BLAS and LAPACK.

  • Armadillo A matrix algebra library for C++. Its interface is intuitive and well-documented. The library is accessible to Rcpp users through the package RcppArmadillo.

  • Eigen Another matrix algebra library for C++. It is also available to Rcpp users through the package RcppEigen. I find this one more difficult to use than Armadillo.

  • STL The C++ Standard Template Library provides a number of data structures, iterators, and algorithms for C++ programs.

  • Boost Provides a suite of data structures, iterators, and algorithms like the STL. However, the STL is typically installed on machines with C++ compilers while Boost seems to be less standard.

  • autodiff Automatic differentiation (AD) in C++. Using special variables and operations to code functions, analytical derivatives may be calculated automatically. Helps to avoid tedious hand calculations and numerical accuracy issues in numerical derivatives, Implements a reverse mode and forward mode algorithm. Stan also has a library for AD which can be accessed in C++ with some work. A list of many other AD tools for various programming languages are listed at autodiff.org.

4 Document Authoring Tools

  • Latex System for preparing high quality documents. Especially useful for typsetting mathematics. A large selection of contributed packages is available on CTAN.

  • Quarto System for preparing articles, websites, books, and other documents with markdown and embedded R, Python, or Julia code. Code can be displayed with syntax highlighting and run dynamically as documents are compiled to facilitate reproducibility. Supports embedded Latex for typesetting math, BibTeX for references, and many other conveniences.

  • Beamer Package for making slides with Latex.

  • UMBCposter A Latex package for making posters. Developed and maintained by Dr. Rouben Rostamian at UMBC. Some alternatives are beamerposter and tikzposter.

  • TeXstudio IDE for authoring Latex documents.

  • Tikz Extensive Latex package for technical graphics such as diagrams and plots. Also see PGF and see PGFPlots.

5 Collaboration

  • Git Tool for source control management. Especially suitable for text-oriented material such as source code.

  • Codeberg a free hosting service for Git projects which is maintained by a non-profit organization in Berlin.

  • Bitbucket, Github, GitLab Paid services that host Git projects. They each have a free tier with limited hosting of private projects and use of large file storage, but are a good option for enlisting collaborators who do not otherwise have an account.

  • Overleaf Collaboration environment for writing Latex documents. Provides a browser-based editor, and also supports Git to work outside of the editor.

  • Box, DropBox, Google Drive Shared storage, for files other than source code

6 General Computing

  • The GNU Project hosts a number of open source software projects, including the gcc compiler, make and autoconf build tools, as well as some of the other tools listed on the present page.

  • suckless projects are open source and follow the suckless design philosophy. These are usually written in C and consist of a core codebase with a minimal set of features. Additional features may be added by applying patches (supplied by the community) and/or directly modifying the code. Configuration is done by editing a header file and recompiling. Use of such software usually requires maintaining one’s own version of the code base with any customizations and managing conflicts when incorporating new code. Some folks enjoy curating their own curated repo of an application with minimal bloat. However, most will prefer using more immutable programs which are configured through external configuration files or scripts.

  • Slurm A scheduler to queue up computing jobs and run them as processors become available. Useful for running large simulations which can require hours or days. Most commonly used on multi-user systems and distributed computing clusters, but also useful on a PC.

6.1 Linux

Linux is an operating system (OS) started as a personal project by Linus Torvalds, who also created Git. An open source approach was taken in its development, allowing contributions from collaborators around the world, to become a viable alternative to corporate OS such as Microsoft Windows, Mac OS X, and Unix which was developed at Bell Labs. Linux is bundled in various distributions (distros), which typically include a desktop environment, service manager, package manager, and prepackaged software. Users can select a distro which best meets their needs. The Linux kernel is the basis of all Linux distros.

For Windows and Mac users looking to try Linux, I recommend starting with a mainstream Linux distro such as Debian or Ubuntu that includes a desktop environment (e.g., Xfce, KDE, or Gnome). This should provide a usable OS upon successful installation. There are several possible installation procedures to consider. To try Linux without making permanent changes to your computer, you can create a live USB and boot into it; this environment resets each time it is booted. A more persistent option is to install Linux to a virtual machine. When ready to set up Linux to boot as the computer’s actual OS, most installers include tools to set up dual boot so you can select between Linux and your original OS at boot time. If you happen to have an older PC or laptop lying around, it can serve as an excellent platform for trying Linux.

  • Debian A community-maintained Linux distro. Distros such as Ubuntu, Linux Mint are based on Debian. Debian may be prefered over Ubuntu, for example, if you prefer not to use Snap, to start with a more minimal initial installation, or to use something maintained by a community rather than a company.

  • Arch Linux A community-maintained Linux distro that follows a rolling release model. Good for keeping up with the most recent versions of packages. Also good for customization because the initial installation is minimal. Not ideal for new Linux users because the installation process involves some command line work.

  • Linux The Linux kernel.

6.2 Window Managers and Tools

Window managers (WMs) are components of desktop environments (DEs) that control how windows are displayed and how users navigate them. DEs such as Gnome, KDE, and XFCE in Linux include window managers and suites of graphical applications. Operating systems such as Microsoft Windows and Mac OS X include proprietary DEs. In some operating systems (especially Linux) it is possible to select your own WM and set of graphical applications for a completely customized experience.

There are two major windowing systems for Linux: X11 and Wayland. X11 has been the standard for many years, while Wayland is maturing in recent years and becoming more widely adopted. There is an X11 compatibility layer in Wayland, but window managers generally seem to be intended for one or the other.

  • dwm A suckless tiling window manager for X11. Has inspired - or been used as a basis for - a number of other tiling window managers.

  • slstatus A suckless status bar for X11. Pairs well with dwm for a suckless DIY setup.

  • slock An extremely minimal suckless screen locking tool for X11.

  • Awesome WM A window manager for X11 started as a fork of dwm that is non-suckless. Includes many features in the main code base and is highly configurable and extensible via Lua scripting.

  • OXWM A window manager for X11 inspired by dwm which is written in Rust. Like Awesome WM, it non-suckless and configured via Lua. OXWM seems geared toward preserving the minimalist tiling experience of dwm, in contrast to Awesome, but includes sensible functionality that would require patches in dwm.

  • Xmonad Another non-suckless window manager for X11 which was inspired by dwm. Highly regarded in the online Linux community. Is written in the functional language Haskell; configuration is also done via Haskell.

  • dwl A port of dwm for Wayland.

  • Niri A scrolling window manager for Wayland that supports some aspects of tiling. I find this one to be very natural and intuitive. Here, each workspace is a row of windows where the windows may be spawned and removed as needed. One or more columns of the workspace can be on screen at a time. Users can navigate within and between workspaces, and dynamically rearrange the layout as desired.

  • dmenu A suckless X11 menu tool. Can readily be leveraged in scripts to create user defined menus. Menus can be quickly traversed using a fuzzy search. Something similar can be accomplished on the command line with fzf.

  • rofi A more sophisticated menu tool with support for both X11 and Wayland. Features a “dmenu emulation” mode allowing it to be used as a drop-in replacement for dmenu.

  • waybar A highly customizable status bar for use with Wayland window managers.

  • Awesome Wayland A curated list of tools for Wayland.

  • Xfce A desktop enviroment that is fully featured and intuitive while relatively light on system resource. Is visually pleasing while avoiding unnecessary graphical effects.

6.3 Graphical Programs

  • Firefox A popular open source web browser.

  • Chromium The open source web browser on which Google Chrome is based.

  • qutebrowser A minimalist open source web browser which is primary controlled by the keyboard. Uses Vim-style keybindings.

  • Virtual Machine Manager An application to run and manage virtual machines. Uses the libvirt virtualization API. Both of these are open source.

  • OBS Studio Capture your PC’s display, audio, and video for recording or streaming.

  • Audacity Audio recording, editing, and processing.

  • Flowblade Video editing.

  • GIMP Image editing.

  • VLC a media player for audio and video.

  • Xournalpp Take handwritten notes on your computer which can be edited and maintained as files. Especially useful with a writing tablet such as the Wacom Intuous.

  • Write Another excellent program for handwritten notes by Stylus Labs. Appears to be free but not completely open source like Xournal.

  • Dia Open source tool for drawing diagrams.

6.4 Terminal Programs

  • Cygwin A collection of open source tools that provide a Linux-like experience in Windows, especially through the command line.

  • tmux Persistent terminal sessions that can be detached/attached and split into multiple panes. Here is a cheat sheet with some useful commands and keybindings.

  • screen An alternative to tmux; also provides persistent terminal sessions.

  • Vim Visual text editor for the terminal. Does not require a graphical environment. It is a “modal” editor because usage involves switching between several modes. There is a learning curve to become comfortable with basic use and then incorporate more advanced capabilities. Here is a browsable version of the internal quick reference. Here is a more condensed cheat sheet that is suitabe for printing. There is also a universe of plugins to add functionality and customize the look and feel.

  • Emacs The traditional alternative to Vim which is just as extensive has has an equally dedicated user base. Emacs has a different feel which makes use of chord-style commands.

  • Nano A user-friendly text editor for the terminal. Recommended over Vim and Emacs for new terminal users.

  • Bash One of the standard shells for Linux-based systems. Supports scripting which can be used to automate tedious tasks.

  • Mutt A well-established email client for the terminal. Also see NeoMutt which is a fork of Mutt that supports some additional features.

  • Alpine The successor of Pine which was another widely used email client for the terminal.

7 Professional Associations

8 U.S. Census Bureau

  • Center for Statistical Research and Methodology Information about the center and technical reports.

  • Census Data Explorer Explore and download data from the decennial census, American Community Survey, and other public data releases.

  • TIGER/Line Shapefiles Shapefiles for states, counties, and other geographic entities in the United States. Useful for plotting and spatial statistics.

  • 2020 Census Data Products Description of data products from the 2020 Decennial Census which make use of new methods to protect confidentiality. The release status for each product is given here.

9 University of Maryland, Baltimore County

10 Nostaglia

  • GeoCities A service that provided free hosting for personal websites.

  • Gopher An early protocol for browsing the web through a system of terminal-based menus. It lost traction as graphical HTTP-based browsers such as NCSA Mosiac became widely used.

  • Internet Archive An extensive non-profit digital library of texts, movies, software, music, and more.

  • M-Net One of the first public-access UNIX systems. Hosted by the Arbornet organization in Ann Arbor, Michigan.