Building an alarm clock with node.js

47
Building an alarm clock with node.js or Hacking vs. Engineering Felix Geisendörfer 29.09.2011 (v1) Donnerstag, 29. September 2011

description

My Sep 29 2011 talk at RejectJS.

Transcript of Building an alarm clock with node.js

Page 1: Building an alarm clock with node.js

Building an alarm clock with node.js

or

Hacking vs. Engineering

Felix Geisendörfer 29.09.2011 (v1)Donnerstag, 29. September 2011

Page 2: Building an alarm clock with node.js

TextWelcome to the Siesta

right-after-lunch Session!Donnerstag, 29. September 2011

Page 3: Building an alarm clock with node.js

Building an alarm clock with node.js

or

Hacking vs. Engineering

Felix Geisendörfer 29.09.2011 (v1)Donnerstag, 29. September 2011

Page 4: Building an alarm clock with node.js

@felixge

Twitter / GitHub / IRC

Donnerstag, 29. September 2011

Page 5: Building an alarm clock with node.js

My Problem

• Getting up early in the morning

• That means before 12:00 (noon)

Donnerstag, 29. September 2011

Page 6: Building an alarm clock with node.js

This talk

• How I solved this problem

• Hacking vs. Engineering the solution

Donnerstag, 29. September 2011

Page 7: Building an alarm clock with node.js

Patient History

• 23 years

• Working from home

• Can work any hours

Donnerstag, 29. September 2011

Page 8: Building an alarm clock with node.js

So why get up early?

• To get more stuff done ...

Donnerstag, 29. September 2011

Page 9: Building an alarm clock with node.js

Previous attempts

Donnerstag, 29. September 2011

Page 12: Building an alarm clock with node.js

Text

Circadian rhythm app (Sleep Cycle)Donnerstag, 29. September 2011

Page 14: Building an alarm clock with node.js

Nothing was working

Donnerstag, 29. September 2011

Page 15: Building an alarm clock with node.js

Text

Donnerstag, 29. September 2011

Page 16: Building an alarm clock with node.js

Donnerstag, 29. September 2011

Page 17: Building an alarm clock with node.js

Donnerstag, 29. September 2011

Page 18: Building an alarm clock with node.js

Donnerstag, 29. September 2011

Page 19: Building an alarm clock with node.js

Donnerstag, 29. September 2011

Page 20: Building an alarm clock with node.js

VLCDonnerstag, 29. September 2011

Page 21: Building an alarm clock with node.js

pmsetDonnerstag, 29. September 2011

Page 22: Building an alarm clock with node.js

The Script

https://gist.github.com/1a40a207cf6132f77efa

Donnerstag, 29. September 2011

Page 23: Building an alarm clock with node.js

sudo ./alarm.js 7 30

Donnerstag, 29. September 2011

Page 24: Building an alarm clock with node.js

Donnerstag, 29. September 2011

Page 25: Building an alarm clock with node.js

Result

• Reliably waking up at any time

• Get to choose different music every night

Donnerstag, 29. September 2011

Page 26: Building an alarm clock with node.js

Hacking vs. Engineering

Donnerstag, 29. September 2011

Page 27: Building an alarm clock with node.js

(Software) Engineering

“Rigorous application of science”

Donnerstag, 29. September 2011

Page 28: Building an alarm clock with node.js

Hacking

“Playful cleverness”

Donnerstag, 29. September 2011

Page 29: Building an alarm clock with node.js

Hacking vs. Engineering this project

Donnerstag, 29. September 2011

Page 30: Building an alarm clock with node.js

Tests?

Engineering: Yes

Hacking: Maybe

Donnerstag, 29. September 2011

Page 31: Building an alarm clock with node.js

Airtunes?Engineering:

Implement protocol

Hacking:

Piggyback on iTunes or VLC

Donnerstag, 29. September 2011

Page 32: Building an alarm clock with node.js

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

Page 33: Building an alarm clock with node.js

Wakeup from Sleep?

Engineering:

pmset schedule wakeorpoweron <datetime>

Hacking:

pmset schedule wakeorpoweron MTWRFSU <time>

Donnerstag, 29. September 2011

Page 34: Building an alarm clock with node.js

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

Page 35: Building an alarm clock with node.js

Turn off speakers?

Engineering:

Install speakers in unreachable place.

Hacking: ?

Donnerstag, 29. September 2011

Page 39: Building an alarm clock with node.js

Why am I talking about this?

Donnerstag, 29. September 2011

Page 40: Building an alarm clock with node.js

JS has a very hacker-driven culture

Donnerstag, 29. September 2011

Page 43: Building an alarm clock with node.js

• 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

Page 44: Building an alarm clock with node.js

Where we need more engineering:

• Libraries

• Domain logic

• Performance

Donnerstag, 29. September 2011

Page 45: Building an alarm clock with node.js

TL;DL

• Hack when in doubt

• Engineer when clear

Donnerstag, 29. September 2011

Page 46: Building an alarm clock with node.js

EngineeringHacking

Donnerstag, 29. September 2011

Page 47: Building an alarm clock with node.js

Questions?

☝@felixge

Donnerstag, 29. September 2011