Building an alarm clock with node.js
or
Hacking vs. Engineering
Felix Geisendörfer 29.09.2011 (v1)Donnerstag, 29. September 2011
TextWelcome to the Siesta
right-after-lunch Session!Donnerstag, 29. September 2011
Building an alarm clock with node.js
or
Hacking vs. Engineering
Felix Geisendörfer 29.09.2011 (v1)Donnerstag, 29. September 2011
@felixge
Twitter / GitHub / IRC
Donnerstag, 29. September 2011
My Problem
• Getting up early in the morning
• That means before 12:00 (noon)
Donnerstag, 29. September 2011
This talk
• How I solved this problem
• Hacking vs. Engineering the solution
Donnerstag, 29. September 2011
Patient History
• 23 years
• Working from home
• Can work any hours
Donnerstag, 29. September 2011
So why get up early?
• To get more stuff done ...
Donnerstag, 29. September 2011
Previous attempts
Donnerstag, 29. September 2011
Text
Behavioral ConditioningDonnerstag, 29. September 2011
Text
Flying alarm clockDonnerstag, 29. September 2011
Text
Circadian rhythm app (Sleep Cycle)Donnerstag, 29. September 2011
Text
Many alarmsDonnerstag, 29. September 2011
Nothing was working
Donnerstag, 29. September 2011
Text
Donnerstag, 29. September 2011
Donnerstag, 29. September 2011
Donnerstag, 29. September 2011
Donnerstag, 29. September 2011
Donnerstag, 29. September 2011
VLCDonnerstag, 29. September 2011
pmsetDonnerstag, 29. September 2011
The Script
https://gist.github.com/1a40a207cf6132f77efa
Donnerstag, 29. September 2011
sudo ./alarm.js 7 30
Donnerstag, 29. September 2011
Donnerstag, 29. September 2011
Result
• Reliably waking up at any time
• Get to choose different music every night
Donnerstag, 29. September 2011
Hacking vs. Engineering
Donnerstag, 29. September 2011
(Software) Engineering
“Rigorous application of science”
Donnerstag, 29. September 2011
Hacking
“Playful cleverness”
Donnerstag, 29. September 2011
Hacking vs. Engineering this project
Donnerstag, 29. September 2011
Tests?
Engineering: Yes
Hacking: Maybe
Donnerstag, 29. September 2011
Airtunes?Engineering:
Implement protocol
Hacking:
Piggyback on iTunes or VLC
Donnerstag, 29. September 2011
Codevar file = '/my/music/file.mp3';var vlcPath = '/Applications/VLC.app/Contents/MacOS/VLC';var vlc = spawn(vlcPath, [ '-R', '--sout=#transcode {acodec = alac channels = 2, samplerate = 44100}: raop{host=10.0.1.13,volume=255}', file]);
vlc.stdout.setEncoding('utf8');vlc.stderr.setEncoding('utf8');vlc.stdout.on('data', process.stdout.write);vlc.stderr.on('data', process.stderr.write);
vlc.on('exit', function(code, signal) { console.log('vlc exit: %i %s', code, signal);});
Donnerstag, 29. September 2011
Wakeup from Sleep?
Engineering:
pmset schedule wakeorpoweron <datetime>
Hacking:
pmset schedule wakeorpoweron MTWRFSU <time>
Donnerstag, 29. September 2011
Code
var powerCmd = sprintf( 'pmset repeat wakeorpoweron MTWRFSU %02d:%02d:00', powerHour, powerMinute);
exec(powerCmd, function(err) { if (err) throw err; process.setuid('felix');});
Donnerstag, 29. September 2011
Turn off speakers?
Engineering:
Install speakers in unreachable place.
Hacking: ?
Donnerstag, 29. September 2011
Text
Duct TapeDonnerstag, 29. September 2011
Duct Tape of Concurrent I/ODonnerstag, 29. September 2011
Engineering Solution for ConcurrencyDonnerstag, 29. September 2011
Why am I talking about this?
Donnerstag, 29. September 2011
JS has a very hacker-driven culture
Donnerstag, 29. September 2011
Text
Duct tape of the webDonnerstag, 29. September 2011
Text
Duct tape of the DOMDonnerstag, 29. September 2011
• Hacking is lots of fun, go do it!
• Hacking can be a good solution!
• But be aware that many problems call for an engineering approach.
Donnerstag, 29. September 2011
Where we need more engineering:
• Libraries
• Domain logic
• Performance
Donnerstag, 29. September 2011
TL;DL
• Hack when in doubt
• Engineer when clear
Donnerstag, 29. September 2011
EngineeringHacking
Donnerstag, 29. September 2011
Questions?
☝@felixge
Donnerstag, 29. September 2011