Semira sings songs

Published at: 4.IX.2012 23:40 CEST

My pet store application is a music streaming website and has been so for over 15 years. Every 3 to 4 years I rebuild it using whatever tool is the sharpest in my shop at that time. I’ve build it using Perl, Java, Ruby and (the most recent incarnation) Clojure.

The feature set changed a lot over time; the early versions simply browsed directory structures, later versions extracted meta data from the audio files and, later on, used that to provide structure. Some versions had playlists, a news sections and even downloads. The latest version goes back to the basics; being able to search, browse and play music. But it does a bit more than that: it works on Android and iOS too.

So please welcome Semira to the world of Open Source Software!

source on github

EXIFR 1.1.1

Published at: 12.IX.2011 09:00 CEST
Categories: english, exifr, programming, ruby

I’ve added some convenience methods to access GPS because people really seem to want it. Is should be fully backward compatible with earlier versions;

EXIFR::JPEG.new('enkhuizen.jpg').gps.latitude  # => 52.7197888888889
EXIFR::JPEG.new('enkhuizen.jpg').gps.longitude # => 5.28397777777778

Enjoy!

Partial content for ring

Published at: 9.III.2011 21:25 CET

When streaming audio or video or serving largish files over HTTP you’ll eventually want to provide seeking resp. continue download capabilities to your application. I’ve cooked up some ring middleware to respond to partial content requests and mangle your application responses accordingly. It works well with the commonly used ring.middleware.file wrapper but do read the fine print.

Et voilá: ring-partial-content

Basic authentication for ring (and compojure etc.)

Published at: 23.VIII.2010 21:26 CEST

I’ve always liked HTTP authentication (like basic and digest) over login pages because they look so.. technically savvy. Finally somebody who bothered to read an RFC to implement it and make me feel warm and welcome like peers do.

Okay, I must admit, it takes a customer just a couple of moments to request a logout button, which is a real pain to implement, if possible at all. And I wouldn’t want to login on something I care about from a public computer either. But it is very nice for web services!

Anyway here’s my implementation as ring middleware: ring-basic-authentication

EXIFR 1.0.0

Published at: 7.IV.2010 22:11 CEST
Categories: english, exifr, programming, ruby

After 4 years EXIF Reader finally reaches it’s first major-version-day. It has been pretty stable for a while now and the API didn’t change in any painful way since the first release.

So here it is: version 1.0.0.

  gem install exifr

Enjoy!

Thanks to Makoto Kishimoto, Mark Lundquist, Victor Bogado, Forian Munz and other people I forgot to record in the CHANGELOG for sending me patches and test images.

(.setText tv "Hello Android from Clojure!")

Gepubliceerd op: 18.I.2009 07:23 CET
Categorieën: android, clojure, java, programming
Reacties: 1 stuk

Ongeduldig heb ik met de Android emulator zitten spelen. M’n dev phone is onderweg en ik kan natuurlijk niet wachten tot ik ermee aan de slag kan.

Aardig aan het Android platform is dat het gebruik maakt van Java. Wat is jammer aan Android is dat het geen gebruik maakt van een JVM maar van de Dalvik VM. Klinkt rampzalig maar valt erg mee, Android blijkt een heel groot deel van het Java Standard Edition class libraries te implementeren. Dat stemt hoopvol en geeft het gevoel dat, in theorie, alle andere JVM talen (zoals Groovy, JRuby, Kawa en Clojure) ook te gebruiken zijn op z’n Android telefoon.

Natuurlijk is het allemaal maar theorie en in wat voor bizarre wereld zouden we leven als dat ook echt zou kunnen?! :) Toch maakte Per Bothner me nieuwsgierig met zijn AndroidHelloScheme post en ben ik aan de slag gegaan om ook een Clojure variant te maken.

Lees verder →

Laat je JavaScript zichzelf schrijven

Gepubliceerd op: 20.I.2008 03:46 CET
Categorieën: javascript, programming
Reacties: 3 stuks

Laatst werd me gevraagd wat mooier of beter is:

obj.getItem('Status')
obj.getItem('Status') == 'Completed'

of

obj.getStatus()
obj.isStatusCompleted()

Het laatste voorbeeld is beter omdat het minder foutgevoelig is; een tiepfoutje in het eerste geval kan heel lang blijven sluimeren terwijl in de tweede versie de foutmeldingen meteen om je oren vliegen. Daarbij vind ik de tweede variant ook beter leesbaar.

Drawing Hands, 1948, M.C. Escher De degene die de vraag stelde, gaf me schoorvoetend gelijk. Maar zou dit niet betekenen dat hij deze methoden voor alle 10 statussen uit zou moeten schrijven en is dat dan niet ook weer foutgevoelig? Voorzichtig vroeg ik om welke taal het eigenlijk ging; “JavaScript”. Maar natuurlijk hoef je dat niet helemaal zelf uit te schrijven! JavaScript is, net als Ruby, Lisp en vele andere, een moderne taal en stelt je in staat te meta-programmeren, ofwel programma’s zichzelf te laten schrijven.

Dus geen gedonder met een preprocessor en/of rare annotaties meteen aan de slag met de programmeertaal waar je toch al mee bezig was!

Lees verder →