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

Upload: felix-geisendoerfer

Post on 15-Jan-2015

6.211 views

Category:

Technology


1 download

DESCRIPTION

My Sep 29 2011 talk at RejectJS.

TRANSCRIPT

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