There are a million ways to do CI.  My goal is to keep it as simple as possible.  Concepts:

  • My target projects include multi-platform C++ applications, Firefox addons, cross-platform desktop apps, mobile apps, and web apps with lots of JavaScript and JavaScript libraries.
  • I want to use a simple-to-use very-capable cross-platform scripting language.  I’ve concluded that I will use JavaScript via Node.js.  It is async and portable from the day it was born.  Installing a node.js module for scripts means they are available from any path on any platform’s command line.
  • For CI tasks, I will avoid dependencies on anything else.  The core Node.js API is very capable.  Modules are available if needed (eg the amazing aws-sdk) but will be avoided whenever possible.
  • I need intelligent placement of CI windows (eg a popup shell for build-on-save).  My Ubuntu i3 window manager is capable of this, as is Autohotkeys under Windows.  These auto-placed windows will always run cross-platform node scripts.
  • If you want to use Powershell, for the love of all that’s holy, make sure you fix its terrible default of hiding debug output with:
       $global:DebugPreference = "Continue"
  • Goals:
    • on code save: automatically build
    • on code commit: automatically build, do any custom build steps, run any unit tests, run any end-to-end tests, and report results dynamically
    • on app production release: compile artifacts, assist in automatic versioning

See the wiki for details.

I’m writing trading software called A better Trader.  For the web UI, I started using some basic JQuery and JQuery UI, with a mind to kick the tires on Bootstrap.  I dug in and after looking at a  bazillion frameworks and libraries (some fading, some up and coming, NONE really owning it)… K.I.S.S. is ruling the day.  I’m finding myself happy with the following:

  • HTML5 with support for multimedia, flexboxes, dragon droppings, etc.
  • JQuery && (JQuery UI || bootstrap)
  • D3 for all things visual… so good…
  • iframes!  Yep!  API calls typically return SVG-based graphic components in iframes, and API parent pages combine them into application-like views.

On the back end, I’m doing RESTful services with boost ASIO.  It’s a light clean set of tools.  I will probably stand up bootstrap on the front end, and node.js on the back end, for comparison.  We’ll see how it goes.