I have started work on a project to give a demo of a domain model in Elixir. The domain is the board game Pandemic.
The starting point is a model of the board.
Random outpourings of a software developer
I have started work on a project to give a demo of a domain model in Elixir. The domain is the board game Pandemic.
The starting point is a model of the board.
I have been investigating category theory. I find the Elixir pipeline operator a|> b to be far more readable than the Haskell equivalent b ° a
This is the trick to get this started:
docker run –name postgres \
-e POSTGRES_PASSWORD=postgres \
-p 5432:5432 -d –rm postgres
Also
docker run -d –name postgres -v my_dbdata:/var/lib/postgresql/data -p 5432:5432 -e POSTGRES_PASSWORD=”postgres” postgres:11
I am working on my book Elixir Function Guide
. Having noticed that there are a lot of mix tasks that I did not know about (and some that my exercism.io students don’t) then I thought that I would add some details at the start of the book.
I started using mix help
to list the available functions:
mix # Runs the default task (current: "mix run") mix app.start # Starts all registered apps mix app.tree # Prints the application tree mix archive # Lists installed archives mix archive.build # Archives this project into a .ez file mix archive.install # Installs an archive locally mix archive.uninstall # Uninstalls archives mix clean # Deletes generated application files mix cmd # Executes the given command mix compile # Compiles source files mix credo # Run code analysis (use `--help` for options) mix credo.gen.check # Generate a new custom check for Credo mix credo.gen.config # Generate a new config for Credo mix deps # Lists dependencies and their status mix deps.clean # Deletes the given dependencies' files mix deps.compile # Compiles dependencies mix deps.get # Gets all out of date dependencies mix deps.tree # Prints the dependency tree mix deps.unlock # Unlocks the given dependencies mix deps.update # Updates the given dependencies mix do # Executes the tasks separated by comma mix escript # Lists installed escripts mix escript.build # Builds an escript for the project mix escript.install # Installs an escript locally mix escript.uninstall # Uninstalls escripts mix format # Formats the given files/patterns mix help # Prints help information for tasks mix hex # Prints Hex help information mix hex.audit # Shows retired Hex deps for the current project mix hex.build # Builds a new package version locally mix hex.config # Reads, updates or deletes local Hex config mix hex.docs # Fetches or opens documentation of a package mix hex.info # Prints Hex information mix hex.organization # Manages Hex.pm organizations mix hex.outdated # Shows outdated Hex deps for the current project mix hex.owner # Manages Hex package ownership mix hex.publish # Publishes a new package version mix hex.repo # Manages Hex repositories mix hex.retire # Retires a package version mix hex.search # Searches for package names mix hex.user # Manages your Hex user account mix loadconfig # Loads and persists the given configuration mix local # Lists local tasks mix local.hex # Installs Hex locally mix local.phx # Updates the Phoenix project generator locally mix local.public_keys # Manages public keys mix local.rebar # Installs Rebar locally mix new # Creates a new Elixir project mix phx.new # Creates a new Phoenix v1.4.0 application mix phx.new.ecto # Creates a new Ecto project within an umbrella project mix phx.new.web # Creates a new Phoenix web project within an umbrella project mix profile.cprof # Profiles the given file or expression with cprof mix profile.eprof # Profiles the given file or expression with eprof mix profile.fprof # Profiles the given file or expression with fprof mix release # Assembles a self-contained release mix release.init # Generates sample files for releases mix run # Starts and runs the current application mix test # Runs a project's tests mix xref # Prints cross reference information iex -S mix # Starts IEx and runs the default task
It was only then that I realised that I have a number of mix extensions installed.
I need to start with what comes out of the box.
At this point I have three choices:
The docker option is appealing as it will allow me to test using different versions of Elixir.
Here is the simple option that allows the use of docker:
docker run -it elixir:1.10 /bin/bash
This downloads the image and runs up the container. Note that this starts with bash, rather than the default iex.
From this mix help gives the more useful list:
mix # Runs the default task (current: "mix run") mix app.start # Starts all registered apps mix app.tree # Prints the application tree mix archive # Lists installed archives mix archive.build # Archives this project into a .ez file mix archive.install # Installs an archive locally mix archive.uninstall # Uninstalls archives mix clean # Deletes generated application files mix cmd # Executes the given command mix compile # Compiles source files mix deps # Lists dependencies and their status mix deps.clean # Deletes the given dependencies' files mix deps.compile # Compiles dependencies mix deps.get # Gets all out of date dependencies mix deps.tree # Prints the dependency tree mix deps.unlock # Unlocks the given dependencies mix deps.update # Updates the given dependencies mix do # Executes the tasks separated by comma mix escript # Lists installed escripts mix escript.build # Builds an escript for the project mix escript.install # Installs an escript locally mix escript.uninstall # Uninstalls escripts mix format # Formats the given files/patterns mix help # Prints help information for tasks mix loadconfig # Loads and persists the given configuration mix local # Lists local tasks mix local.hex # Installs Hex locally mix local.public_keys # Manages public keys mix local.rebar # Installs Rebar locally mix new # Creates a new Elixir project mix profile.cprof # Profiles the given file or expression with cprof mix profile.eprof # Profiles the given file or expression with eprof mix profile.fprof # Profiles the given file or expression with fprof mix release # Assembles a self-contained release mix release.init # Generates sample files for releases mix run # Starts and runs the current application mix test # Runs a project's tests mix xref # Prints cross reference information iex -S mix # Starts IEx and runs the default task
Lumen is an alternative BEAM Implementation.
Warning that this is still at a very early stage. It promises the ability to build WebAssembly
I am not currently interested in using Rust to build it from sources, but there are now images published here
https://github.com/lumen/lumen/releases
I used the following to install the tarball (I use a mac):
sudo tar xf lumen-0.1.0-nightly-x86_64-apple-darwin.tar.gz -C /opt
This deploys the bundle to: /opt/lumen
The compiler is now available at: /opt/lumen/bin/lumen
Here are more details on lumen: https://getlumen.org/