In my first update in a long time (April of 2012!) I thought I’d go over a few of the tools/technology I’ve been exploring. These aren’t in any specific order..
AngularJS (http://angularjs.org/)
This has turned in to one of my favorite front-end tools. Add in Yeoman (http://yeoman.io/) for scaffolding, running tests, managing dependencies, etc. and you have something that makes building front-ends easy. After using it for a while and then using jQuery again it made me realize how much more fun it is to not have to do direct DOM manipulation for most simple activities.
I did end up learning a lot about CORS because I ended up deploying my Angular apps as standalone HTML5 static applications that then just talked to REST APIs on the backend implemented in Java. This made development super easy but I did have to dig in to the CORS stuff to make this work well. Once it was working, though, it was pretty transparent. That’s another post to go into those details, though.
Arduino (http://www.arduino.cc/)
I picked up a starter kit off of SparkFun to work with my daughter on a few projects to see if it would spark her enjoyment in development. It turns out that visual feedback ala Python was more her thing but it was still fun to play around with the tools. I also did some experimentation with this to see about integrating it with RFID tracking tools that I was building for an idea my wife and I had about a possible business startup. This didn’t end up bearing fruit but that leads me to…
Raspberry Pi (http://www.raspberrypi.org/)
These little devices have been fun to play with. For the RFID tracking tools I was talking about I ended up getting a USB based RFID sensor that plugged in to the Raspberry Pi and then utilized a small Python based program to read the RFID tags from the USB port and then post it to a REST based API that I had built that was running on a server. Clients built using AngularJS that I mentioned above would then use a WebSocket to subscribe to these tag events and display them in a browser page that would have been used in a tablet. I’ll put together a more comprehensive post about this side project later but it ended up being a very cool architecture to support having independent RFID trackers feed events into a centralized bus and have clients subscribe to the trackers they were interested in.
I also used the Raspberry Pi as a media center for our mini-van on long trips but honestly this solution was pretty clunky. I ended up dropping that in favor of a wireless Seagate drive that our iPads could connect directly to for video content. That’s for another post as well.
Rails 4 (http://rubyonrails.org/)
I had resisted using Rails for a while. But I decided to dig in and give it a try on a side project I’m working on at the time. It’s been mixed so far. I really like some of the practices that Rails introduces but the “magic” that happens under the covers can be too mysterious at times. I know that as I get to understand it more this will be less of an issue but coming from the Java world I know all those tips/tricks and exactly how things get from A-Z so I know where to look when things aren’t working right.
I’ve also taken this opportunity to learn more Postgres by using Postgres over MySQL for my database. So far no real issues. I’m just getting used to its tools and CLI commands now.
NodeJS (http://nodejs.org/)
Initially I was pretty excited about this project. Being able to use the same language on the front-end and back-end could lead to a lot of potential benefits. Plus, with it being event based it seemed liked it could be pretty performant. In the end I just didn’t get enough enjoyment out of developing server-side apps in this manner. Granted I was using this a year or so ago and the pace of change was just dizzying. Finding stable and maintained database drivers was a PITA as well. For little tools and sites it seemed like it could be pretty fast to develop but in the end I went back to using Java based back-ends and if I really want non-thread based scalability there are plenty of options on the Java stack for that now (Akka, NIO, etc.).