As promised, a long list of resources I’ve found useful while starting off with HouseMon:
JavaScript – The core of what I’m building now is centered entirely around “JS”,
the language behind many sites on the web nowadays. There’s no way around it: you
have to get to grips with JS first. I spent several hours watching most of the
videos on Douglas Crockford’s site. The big
drawback is the time it takes…
Best book on the subject, IMO, if you know the basics of JavaScript, is
“JavaScript: The Good Parts” by the same author, ISBN 0596517742. Understanding
what the essence of a language is, is the fastest way to mastery, and his book
does exactly that.
CoffeeScript – It’s just a dialect of JS, really – and the way HouseMon uses it, “CS”
automatically gets compiled (more like “expanded”, if you ask me) to JS on the server, by SocketStream.
The most obvious resource, http://coffeescript.org/, is also one
of the best ways to understand it. Make sure you are comfortable with JS, even if
not in practice, before reading that home page top to bottom. For an intruiging
glimpse of how CS code can be documented, see this example
from the CS compiler itself (pretty advanced stuff!).
But the impact of CS goes considerably deeper. To understand how Scheme-like
functional programming plays a role in CS, there is an entertaining (but fairly
advanced) book called CoffeeScript Ristretto
by Reginald Braithwaite. I’ve read it front-to-back, and intend to re-read it in
its entirety in the coming days. IMO, this is the book that cuts to the core of how
functions and objects work together, and how CS lets you write on a high
conceptual level. It’s a delightful read, but be prepared to scratch your head at times…
For a much simpler introduction, see The Little Book on CoffeeScript
by Alex MacCaw, ISBN 1449321046. Also available on GitHub.
Node.js – I found the Node.js in Action book
by Mike Cantelon, TJ Holowaychuk and Nathan Rajlich to be immensely useful, because of how it
puts everything in context and introduces all the main concepts and libraries one
tends to use in combination with “Node”. It doesn’t hurt that one of the most
prolific Node programmers also happens to be one of the authors…
Another useful resource is the API documentation of
Node itself.
SocketStream – This is what takes care of client-server communication,
deployment, and it comes with many development conveniences and conventions. It’s
also the least mature of the bunch, although I’ve not really encountered any
problems with it. I expect “SS” to evolve a bit more than the rest, over time.
There’s a “what it is and what it does” type of
demo tour,
and there is a collection on what I’d call
tech notes,
describing a wide range of design docs. As with the code, these pages are bound to
change and get extended further over time.
Redis – This a little database package which handles a few tasks for HouseMon.
I haven’t had to do much to get it going, so the README
plus Command Summary were all I’ve needed, for now.
AngularJS – This is the most framework-like component used in HouseMon, by far.
It does a lot, but the challenge is to understand how it wants you to do things, and
altough “NG” is not really an opinionated piece of software, there is simply no
other way to get to grips with it, than to take the dive and learn, learn, learn…
Let me just add that I really think it’s worth it – NG can be magic on the client side,
and once you get the hang of it, it’s in fact an extremely expressive way to
create a responsive app in the browser, IMO.
There’s an elaborate tutorial on the
NG site. It covers a lot of ground, and left me a bit overwhelmed – probably
because I was trying to learn too much as quickly as possible…
There’s also a video, which gives a very clear idea of NG, what it is, how it is used, etc. Only downside is that it’s over an hour long. Oh, and BTW, the NG FAQ is excellent.
For a broader background on this sort of JS frameworks, see
Rich JavaScript Applications
by Steven Sanderson. An eye opener, if you’ve not looked into RIA’s before.
Arduino – Does this need any introduction on this weblog? Let me just link to the
Reference and the
Tutorial here.
JeeNode – Again, not really much point in listing much here, given that this
entire weblog is more or less dedicated to that topic. Here’s a
big picture
and the link to the hardware
page, just for completeness.
RF12 – This is the driver used for HopeRF’s wireless radio modules, I’ll just
mention the internals
weblog posts, and the reference
documentation page.
Vim – My editor of choice, lately. After many years of using
TextMate (which I still use
as code browser), I’ve decided to go back to MacVim, because of the way it
can be off-loaded to your spine, so to speak.
There’s a lot of personal preference involved in this type of choice, and there are
dozens of blog posts and debates on the web about the pro’s and con’s.
This one by Steve Losh
sort of matches the process I am going through, in case you’re interested.
Best way to get into vim? Install it, and type “vimtutor
“. Best way to learn more?
Type “:h<CR>
” in vim. Seriously. And don’t try to learn it all at once – the goal is
to gradually migrate vim knowledge into your muscle memory. Just learn the base
concepts, and if you’re serious about it: learn a few new commands each week. See
what sticks.
To get an idea of what’s possible, watch some videos – such as the vim entries on the
DAS site by Gary Bernhardt
(paid subscription). And while you’re at it: take the opportunity to see what
Behaviour Driven Design is like, he has many fascinating videos on the
subject.
For a book, I very much recommend Practical Vim
by Drew Neil. He covers a wide range of topics, and suggests reading up on them
in whatever order is most useful to you.
While learning, this cheatsheet
and wallpaper may come in handy.
Raspberry Pi – The little “RPi” Linux board is getting a lot of attention lately.
It makes a nice setup for HouseMon.
Here are some links for the hardware
and the software.
Linux – Getting around on the command line in Linux is also something I get
asked about from time to time. This is important when running Linux as a server –
the RPi, for example.
I found the linuxcommand.org resource which appears to do a good job of explaining all the basic
and intermediate concepts. It’s also available as a book, called “The Linux Command Line”
by William E. Shotts, Jr.
(PDF).
There… the above list ought to get you a long way with all the technologies I’m currently
messing around with. Please feel free to add pointers and tips in the comments,
if you think of other resource which can be of use to fellow readers in this context.