Tekniken bakom Jullunchen
OBS! Ovanligt mycket tekniksnack i denna bloggpost, sådant som vi tycker är extra roligt :)
Vi har utvecklat ett antal skräddarsydda applikationer för Jullunchen, det handlar både om några webbapplikationer och en nativ (iOS) applikation.
Koden för dessa ligger självklart tillgänglig på vårt GitHub-konto.
athega-jullunch
Applikationen som hanterar inbjudningar, incheckningar och bildspelet har vi driftsatt på Heroku. Vi använder oss av ramverken Sinatra och Backbone.js (Det senare används främst för bildspelet).
Språken vi använt oss av är Ruby och CoffeeScript.
Epost hanteras av tjänsten MailGun (Genom deras enkla Heroku Add-on).
Bildspelet
Koden för bildspelet ligger i filen application.coffee
Ett exempel på hur trevligt CoffeeScript är att jobba med:
class window.PresentationLoop
constructor: (ms) ->
@delay = ms
@iteration = 0
window.loop = @
window.loop.run()
tweets: ->
tweets.fetch()
setTimeout 'tweets.fetch()', @delay/2
setTimeout 'window.loop.check_ins()', @delay
check_ins: ->
check_ins.fetch()
setTimeout 'window.loop.images()', @delay
images: ->
images.fetch()
setTimeout 'images.fetch()', @delay/2
setTimeout 'window.loop.ads()', @delay
ads: ->
ads.fetch()
setTimeout 'window.loop.iterate()', @delay
iterate: ->
@iteration += 1
console.log('iteration: ' + @iteration)
setTimeout 'window.loop.tweets()', 0
run: ->
setTimeout (=> @tweets()), 0
jullunch_daemon
På en av våra servrar (Virtuell maskin, hostad av GleSYS) kör vi en bakgrundsprocess som hämtar ner nya tweets, kollar om det finns några nya bilder, etc. Ett antal JSON-dokument skrivs ner på disk med jämna mellanrum (vi pratar sekunder). Dessa filer används sedan som datakällor i bildspelet (Backbone.Collection).
Ramverket Foreverb används för att köra bakgrundsprocessen (schemaläggning, loggning, etc.).
tomtelizer
Nativ iOS applikation för att ta bilder och lokalisera ansikten (CIFaceFeature och CIDetector).
tomtelizer-server
Serversidan av tomtelizern är utvecklad med ramverket Ruby on Rails.
Den använder sig av Delayed Job för att köa upp inkommande bilder för processning. De slutgiltiga bilderna genereras med hjälp av RMagic.
/ Peter