Independence from Old Code

It’s the Fourth of July again, which is America’s independence day for my non-US friends, and it’s time for some code cleaning.  I’ve built several open source projects over the last year and it’s time to shut some of them down.  Out with the old to make way for the new. Let’s review, shall we?

Electron IDE

Electron is the new Arduino IDE I started last summer. While the initial progress was good, I was never able to get to a 1.0 version due to conflicts between the serial port library and Atom Shell, the native packager I was using.  The underlying problem is that all of the webkit packagers use custom versions of NodeJS which conflict with some native modules.  In the end I was spending far too much time on packaging and not making any progress on building a usable tool.  

Then the world caught up.  Arduino announced their new web-based IDE as well as updating their existing Java one with new extensibility features.  I started to think that maybe no one needed Electron anymore. The final straw was when the Atom project renamed AtomShell to Electron.  The time has come to shut it down.

Amino

Amino is a graphics API in Javascript backed by OpenGL ES native code. I still find it useful for prototyping on the desktop, but all of my work lately has been web-based or with headless Raspberry Pis.  Code not used is code that doesn’t improve, so I’m putting it on hiatus for a while. I’ll start working on it more if I find I need it again. If you were using Amino for HTML canvas then I suggest using D3 or Paper.js.

Photon Shell

Photon is a simple command line shell written in pure Node JS as an exercise. I basically wrote it on a dare when I was frustrated with the current state of CLIs for Windows.  It’s useful for learning but I wouldn't use it as your main shell. I’m not going to do any more work on Photon.

Leonardo Sketch

Leo Sketch is officially dead. I haven’t worked on it in three years and it was built on a custom Java UI toolkit that I haven’t maintained. No one ever used it anyway, so it’s existence will not be missed.

Now on to some new stuff.

AMX

AMX is a new Node based tool I started. Much like PM2 and Forever it manages server processes.  The difference between AMX and the others is its focus on ease of use.  You can create a new process with "amx make my project", then start it with "amx start my project".  Logging, stopping, and listing are done with similar simple commands.  AMX also supports web-hooks for github projects, all with simple and straightforward config files. Most importantly, it does all of this without any extra dependencies. As in none. You should be able to run it on anything that has Node with a simple "npm install -g amx".

AMX will remain simple, so I don’t plan to ever include plugins, scripting, or build systems. If you want those there are other options available. AMX will stay focused on simple executing processes on demand, and keeping them up.

RazzMaster

RazzMaster is another new tool I’ve built for my RaspberryPI work. Based on Adafruit’s awesome PiFinder, this commandline program will scan your network for available Raspberry Pis, then let you set them up with any defaults you need over SSH. It can even blink the Pi’s green LED so you will know you are really connected to the device you think you are.  If you need to repeatedly set up a Pi (or multiple Pis) this tool will make your life a lot easier.

RazzMaster will soon support wifi settings and changing the default password. Then possibly some prefab configs for common Raspberry Pi setups like media servers and web kiosks. Let me know what you’d like to see.

Useful Node Streams

You may have noticed that almost all of my work lately has been in NodeJS.  Since I often create custom streams for common tasks, I decided to put them in a new repo creatively called "useful-node-streams".  It currently has object streams for logging, writing to newline delimited JSON files, a realtime stream of a twitter #hashtag, a stream to fetch your follower count periodically, and finally a websocket server stream that repeats anything sent to it over the wire to all connected websocket clients.    

If you have any streams that you use over and over please let me know and I’ll include it.

PureImage

PureImage is a 100% pure Javascript in-memory implementation of HTML Canvas for Node. It is woefully incomplete with only the ability to draw simple antialiased lines, shapes, and text and images. It is also extremely slow. And buggy. 

So why would you want to such a horrible piece of software? Because it has no native dependencies and will run on anything. It can read and write PNGs and JPGs without any native code as well (thanks to some other amazing open source node projects).  It can even load and render text with custom truetype fonts. 

PureImage is useful for command line scripts on servers that don’t have X windows or that you can’t get the native Cairo libraries compiled on (which are surprisingly hard to compile, especially on limited hardware).  You could also use PureImage for webserver apps when you want to do server side rendering, again without messing with native dependencies. If you can take the speed hit, then PureImage might be right for you.

Talk to me about it on Twitter