An Introduction to ‘av’

Tue, Dec 22, 2015

I’ve been grappling with this project for years now and figured I would share the progress so far.  We will leverage this work as we tackle Deep Learning over the course of 2016.  Ever have a project with stuff everywhere?  Some java stuff, a go application that was hacked up on a half-day, some mysql shortcut commands in the readme, a superfast CUDA library with test apps, etc… all in one git repo?  Totally confusing for new team members?  I think every software dev has experienced this type of project…cause __every__ project is like this.

Idea: domain specific shell.  There are domain specific languages that provide quick and convenient access to fundamental constructs within a domain of knowledge with minimal code compared with generic languages.  Why can’t there be a shell that does the same for your project?  Links together all the pieces of your project and gives you access directly from the command line.  When you cd to your project directory, you type av and a shell launches with all the project necessities on the PATH and nothing else.

Example: Lets say you have a Dropwizard project which uses maven to build the jarball.  Within that jarball is the web application, a command that injects test data, and your test data is on Amazon s3 because putting it into git doesn’t make sense.  (two reasons: 1. doesn’t change often 2. its more than 10MB).  Every time you want to inject test data, you have to: download the test data, build the application, run the test injector command (remembering the 5 variables that don’t change often), and then start the web application to evaluate the test data.  Not too bad but there is a lot of remembering / reading / finding that email or Slack message where updates were announced.  (It should have been in the README!!!).  With av this gets really, really, easy…it looks like this:

$ cd project

$ av

project> help

project> gettestdata

project> inject

project> run

Each step is a script that encapsulates the knowledge & context and each command is self documenting so the help command is really useful.  Its all written in bash so everyone should be able to create new commands and understand existing ones.  Its a bit hacky but works.  I have written commands in node recently with much success.  If you use docker, there is a av-docker plugin that really shaves time in creating, running, and testing docker images for your project.

Just to give some color…

See more at: