Tekniken bakom Jullunchen

Postad

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).

jullunch.athega.se tweets

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