James Carlson: @jxxcarlson on elmlang.slack.com, or at gmail

STEAM Factory Elm Meetup | Jim's Elm Meetup Page


MiniLatex is an experimental project to render a subset of LaTeX in browser. It relies on MathJax to render matheamtical text — $ .. $ and $$ .. $$ — and adds constructs such as section numbers, a set of macros, e.g., \emph, and a variety of environments e.g., theorem, equation, align, tabular, and verbatim. The aim is to be able to write things like lecture notes that can rendered in the browser by processing with MiniLatex or into PDF by standard tools such as pdflatex.

Some links (1) a web app, www.knode.io, where you can create, edit and distribute MiniLaTeX documents, (2) A fuller description of MiniLaTeX, (3) A demo app for trying out MiniLatex, (4) open-source code.

  1. www.knode.io
  2. MiniLatex on the web
  3. Demo App
  4. Demo App Code

Although it is still under development, the site at www.knode.io is working pretty well — I've been using it on a daily basis for both long and short writing projects.

The Demo App and the MiniLatex Library are written in Elm. Code is open source and contributions to it are welcome. See Towards LaTeX in the Browser for more information.

Elm demo apps and code

Physics Simulations

Bouncing Ball

In the Bouncing Ball demo, a particle is set in motion and is then left to move under the influence of two forces. The first is the downward force of gravity. The second is a short range repulsive force exerted by the floor. Think of an elastic surface such as wood. We model this by an upward force which decays exponentially with height.

The idea here is not to cheat by just reflecting the velocity vector when the ball hits the floor, but rather to use forces. The force should have very short range, since the ball does not "feel" the floor until it is very, very near. Exponential decay of the repulsive force models the idea of "short range."


Brownian Motion

Simulate Brownian motion. A particle, represented by a colored disk, takes random steps to the left and right, up and down. Its color also varies randomly, with the red and blue values changing by small random increments. Thus the underlying process is really a 4-dimensional random walk with two spatial dimensions and two color dimensions. A little bit like string theory, since the color dimensions are small compared to the spatial ones. Code


Watch billiard balls bounce off walls of a rectangular container and occasionally off each other: angle of reflection equals angle of incidence. Code

Random Walk

Simulate one of the simplest (and fairest) gambling games. You start of with a stake of $4. Then you roll a die. If it is even, you win one dollar. If it is odd, you lose one dollar. You repeat this process until either you go broke or you decide to stop. See how long you can play before going broke! Code

Game of Life


Click on app image to run it.


Code I, Code II


Caesar Cipher

Play with the Caesar Cipher at Ellie


Vigenere App

Make the key longer for more security, as in the images below. Or make it as long as the message. Then each letter of the message is shifted independently, making the Caesar cipher into a one-time pad. See Elm by Example, Caesar Code and the section following it.




You will need to get a free API key from openweathermap.org to use this app.

Click on app image to run it.