Blog archives

Het lijstje van 2011

Jep, het is weer zover. Geen jaar gaat voorbij zonder dat de muziekliefhebber zich wijd aan het maken van het lijstje. Het beste, mooiste, bijzonderste van 2011.

Over het algemeen vond ik 2011 wat tegenvallen. Weinig wat er echt heel erg uitsprong, geen grote klassiekers. Desondanks genoeg platen om een top 20 mee te vullen.

Zoals ik vorig jaar al schreef is de introductie van Spotify een bijzonder evenement geweest. Alle albums op mijn lijstje van dit jaar zijn dan ook te luisteren op Spotify door te klikken op het  icoontje.

Verder heb ik ook een YouTube-mix gemaakt met van elke plaat mijn favoriete nummer. En ook die playlist (met wat aanvullingen) kun je beluisteren via Spotify.

YouTube Mix

Hay’s 20 platen van 2011

1. James Blake – James Blake

Nee, geen grote verrassing, en soms is James wat saai. Maar 2011 is het jaar van dubstep, en James is de koning. Toch wel heel erg goed.

Ideale combinatie: luister na James Blake z’n twee EP’s uit 2009: CMYK en Klavierwerke.

2. Oneohtrix Point Never – Replica

Superabstracte bizarre instrumentale muziek, maar toch prettig in het gehoor. Op elk nummer lijkt er een nieuwe plaat te beginnen. Muziek voor de 21ste eeuw.

3. The Field – Looping State of Mind

Nog steeds: oneindig rekken van ultrakorte samples met een simpele 4-to-flour beat, maar waarom ook niet? The Field klinkt op deze plaat warmer dan ooit. Ideale muziek voor als je ‘in de zone’ bent.

4. Cut Copy – Zonoscope

Cut Copy is volwassen geworden. Heerlijk aanstekelijke electropop met een dansbaar randje.

5. Wilco – The Whole Love

Verrassende nieuwe plaat van een band die alles al eens gedaan heeft. En dat nu allemaal op één plaat doet. Supergoed.

6. araabMUZIK – Electronic Dream

Het lijkt een goedkoop concept: pak een hoop foute househits uit de jaren negentig, remix ze een beetje en hoppa: een plaat. Saai? In tegendeel. Heel goed. Het werkt.

7. Bon Iver – Bon Iver

De intimiteit van zijn eenzame-man-op-een-gitaar debuutalbum is hij kwijt, maar het geluid is wel veel rijker geworden. Heel mooi. Toch, ietwat degelijk en niet zo spannend.

8. The War on Drugs – Future Weather

9. The Weeknd – House of Balloons Gratis Downloaden!

10. Alamo Race Track – Unicorn Loves Deer

11. The Streets – Computers and Blues

12. Tune-Yards – W H O K I L L

13. Gang Gang Dance – Eye Contact

14. St. Vincent – Strange Mercy

15. Unknown Mortal Orchestra – Unknown Mortal Orchestra

16. Little Dragon – Ritual Union

17. Washed Out – Within and Without

18. Azari & III – Azari & III

19. Gorki – Research & Development

20. Kate Bush – 50 Words for Snow

Concert van het jaar

Simpel: Sufjan Stevens in het muziekgebouw in Eindhoven, begin dit jaar. Misschien wel het beste concert wat ik de afgelopen vijf jaar heb gezien. Kippenvel, de hele tijd. Ook al speelde Sufjan slechts één nummer van zijn beste plaat Illinois toch kon hij de hele zaal urenlang ontroeren en boeien met zijn folkpop met een elektronisch randje.

Ook erg goed dit jaar: dEUS op Lowlands (hele concert op 3voor12) en natuurlijk Kap Bambino op De-Affaire!

Meer lijstjes

Uiteraard zijn er meer lijstjes. Ik verwijs u graag door naar Pitchfork, Best Ever Albums, Metacritic, Kindamuzik, Tiny Mix Tapes, NME, The Guardian, Nils Breunese, Menni en Sander Spek.

En wie smult van archieven (ik ken er wel een paar): hier zijn mijn lijstjes van 20102009, 2008, 2007, 2006, 2005 en 2004.

Blog archives

logrotate, virtual hosts on Apache and 100% CPU

I got a typo in my logrotate config which pretty much killed my VPS.

My Apache server runs a lot of virtual hosts, i didn’t want to type them all out for logrotate, so i created something like this to handle it:

/var/www/*/logs/*.lo* {
        daily
        missingok
        rotate 7
        compress
        delaycompress
        notifempty
        create 640 root adm
        sharedscripts
        postrotate
                if [ -f "`. /etc/apache2/envvars ; echo ${APACHE_PID_FILE:-/var/run/apache2.pid}`" ]; then
                        /etc/init.d/apache2 reload > /dev/null
                fi
        endscript
}

Note the ending * at the first line. I didn’t know what got into me, but this caused logrotate to rotate the rotated logfiles, hence 100% CPU and hence, a broken system.

I fixed it (by replacing the ‘*’ with a ‘g’), but logrotate still didn’t work. CPU stayed at 100%, logs didn’t rotate. So i ran a strace -f logrotate and got lots of these:

stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2917, ...}) = 0
stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2917, ...}) = 0
stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2917, ...}) = 0

A little bit of Googling turned up this blogpost: apparently lograte‘s own log got corrupted. A simple rm /var/lib/logrotate/status did the trick and everything worked perfectly again.

Blog archives

Using the :first-of-type pseudoselector instead of :first-child

Consider this case: you have a blogpost with an image, a heading, and some text. You want a little margin on the top of every heading to divide the different sections. Your HTML might look like this:

<article>
    <img src="photo.jpg" alt="A nice photo" />
    <h3>My heading</h3>
    <p>Text. Bla bla bla</p>

    <h3>Another heading</h3>
    <p>Even more bla bla</p>
</article>

Your CSS might looke like this:

img {
    float: right;
    margin: 0 0 10px 10px;
}

h3 {
    font-size: 24px;
    margin-top: 24px;
}

p {
    font-size: 16px;
    margin: 12px 0;
}

Now here’s a problem. The very first <h3> will have an ugly margin at the top, so it doesn’t line up with the image. How would you style it so that it won’t have a margin at the top? My first guess was to use the :first-child selector:

article h3:first-child {
    margin-top: 0;
}

However, that doesn’t work. The spec is not very clear about it: but here’s the problem: :first-child only selects the very first element and doesn’t care about the element you give it. That’s great if all your elements are the same (such as <li> elements in a list) but it sucks when having a case like this.

Fortunately, there’s a new CSS3 property that’s perfect for this case. It’s called :first-of-type and does exactly what you want.

article h3:first-of-type {
    margin-top: 0;
}

Browser support is mostly pretty good, although you’re out of luck on Internet Explorer 8 and earlier.

Blog archives

Fixing ‘OS Process Error’ in CouchDB Single Server for Mac OS X

When i downloaded the Couchbase Single Server 1.1.2 for Mac OS X i tried replicating a database and tried to view a view. Unfortunately all i got was endless errors in my log:

[error] [<0.159.0>] OS Process Error <0.17372.0> :: {os_process_error,{exit_status,1}}
[error] [<0.159.0>] OS Process Error <0.17375.0> :: {os_process_error,{exit_status,1}}
[error] [<0.159.0>] OS Process Error <0.17378.0> :: {os_process_error,{exit_status,1}}

When i looked in the configuration i noticed this value in my ‘query_servers’:

bin/couchjs /Users/dustin/tmp/master/build/share/couchdb/server/main.js

When you change this to:

bin/couchjs share/couchdb/server/main.js

Everything works again.

Vote on the ticket to get it fixed for the next release :)

Blog archives

Loopcam

Loopcam is een leuke nieuwe iPhone app waarmee je heel makkelijk stop-motion GIF animaties kan maken. Zie hieronder wat eerste experimenten.

Ze zijn een beetje groot, dus laden kan even duren.

Met dank aan al mijn vriendelijke collega’s die proefkonijn wilden spelen.

Blog archives

De piraten van Pfeijffer

Originele foto: magali veldhuis / CC-BY-NC-SA

Je kon er op wachten. Eerst werd de muziek vermoord. Toen de film. En nu is het de beurt aan het boek. Door wie? Natuurlijk, de asociale stelende jeugd die niet meer wil betalen voor content. Aldus schrijver Ilja Leonard Pfeijffer in een column in het NRC.

Dat is natuurlijk allemaal flauwekul. ‘Niemand betaalt meer’ horen we al sinds 1999, toen Napster het als eerste mogelijk maakte om gratis muziek te downloaden. Het zou afgelopen zijn met de muziek: artiesten verdienen geen geld meer en je kunt straks alleen nog muziek horen in het museum.

Het is 2011 en er komt meer muziek uit dan ooit. De filmindustrie kwam met dezelfde argumenten en toch zijn er nog steeds films. Je zou denken dat mensen ondertussen een patroon ontdekken, maar Pfeijffer herhaalt dezelfde onheilsvoorspellingen als tien jaar geleden.

Wat zijn die voorspellingen? Ik zet ze voor u op een rijtje:

  • Niemand wil meer betalen voor content.
  • Makers krijgen geen geld meer. Einde van kunst en cultuur!
  • Ellende en verdoemenis. Wereldoorlog III. De wereld vergaat. Jezus komt terug op aarde.

Goed, die derde misschien niet. Wat betreft die eerste twee:

Niemand wil meer betalen voor content

Als de opkomst van het internet één ding heeft aangetoond is het wel dat mensen graag betalen voor content. Alleen niet zo graag voor de dragers. Twintig jaar geleden had je geen andere keuze dan een CD te kopen om je favoriete nummer te horen (en heel veel andere nummers waar niks aan was). De muziekindustrie dacht dat ze geen muziek verkochten maar plastic schijfjes en dus konden de prijzen lekker hoog worden gehouden.

Geen wonder dat de muziekindustrie helemaal geen zin had om iets aan die situatie te veranderen. De eerste digitale muziekkanalen waren dus allemaal illegaal: Napster, Kazaa, BitTorrent. Noem maar op. Waarom gebruikten mensen die diensten? Omdat ze graag muzikanten willen bestelen? Natuurlijk niet. Omdat er geen andere fatsoenlijke manier is om je iPod vol te krijgen. Een beetje iPod kan 5000 liedjes bevatten. Om die helemaal legaal vol te krijgen hoef je slechts 10 jaar lang een krantenwijk te lopen. En van dat geld kun je dan geen bier en sigaretten kopen. Geen wonder dat je liever download.

Voor die illegale kanalen is nu een alternatief: legale streaming diensten als Spotify en Netflix zijn enorm succesvol. Zo succesvol dat piraterij afneemt. Iets wat campagnes met artiesten met dichtgenaaide monden en idiote plannen waarin je internet afgesloten wordt als je een liedje download nooit is gelukt.

De boodschap is simpel: maak het voor de consument makkelijker dan de illegale alternatieven om aan content te komen. Ik betaal met liefde 5 euro per maand voor Spotify om geen gedoe te hebben met torrents en vage downloadsites met pornobanners.

Makers krijgen geen geld meer. Einde van kunst en cultuur!

Gelukkig gaat het de meeste kunstenaars niet om geld, maar om wat ze maken. Hoeveel muzikanten zijn er die hun muziek gratis op het internet zetten? Hoeveel filmmakers zetten hun filmpjes gratis op YouTube? Hoeveel schrijvers sturen hun schrijfsels gratis en voor niets de wereld in?

Het aantal mensen wat echt aan kunst kan verdienen is altijd heel erg klein geweest. Kunst is sappelen. En soms heb je geluk en kun je er wel een (mager belegde) boterham aan verdienen.

En dat verdorven internet kan je daar goed bij helpen. Ik ben de afgelopen jaren nog nooit zo veel naar (dure!) concerten geweest. Waarom? Omdat ik de muziek allemaal (bijna) gratis heb kunnen luisteren. Ik ben de afgelopen maanden nog nooit zoveel naar de bios geweest dankzij Cineville, waarmee je voor een vast bedrag per maand zo vaak naar de film mag als je wilt.

Dus lieve schrijvers: ga vooral door met schrijven. Bedenk nieuwe manieren om je publiek er kennis mee te laten maken. Gebruik het internet om er geld mee te verdienen. Onderzoek wat je publiek mist en speel daar op in.

En luister vooral niet naar mensen die zure stukjes schrijven in het NRC.

Meer over dit onderwerp:

Blog archives

HOWTO run multiple versions of Firefox side-by-side on Mac OS X Lion

Cross-browser testing is pretty essential when developing web sites. Most of the bugs you need to fix are probably in older versions of Internet Explorer. Both Chrome and Firefox have a very fast release cycle, where new versions are released every six weeks or so.

However, there are still many people using the older 3.6 version of Firefox. Firefox 3.6 has a few bugs, and because of its big installed base you probably need to run some tests on it as well.

There’s a problem here: Firefox doesn’t like it when two different versions are run side-by-side. Fortunately there are a few tricks you can use to make this happen. This should also work on Snow Leopard, provided you have at least 10.6.2, because the --args parameter was introduced in that version.

  1. Download the Firefox 3.6 release from Mozilla.com.
  2. Unzip and mount the DMG file.
  3. Drag the file from the DMG to your Desktop instead of to the Applications folder.
  4. Rename the .app to ‘Firefox36.app’ and move it to your /Applications folder
  5. Run this command from a Terminal (found in /Applications/Utilities):
    /Applications/Firefox36.app/Contents/MacOS/firefox-bin -ProfileManager
  6. Add a new account. Call it ‘test’.
  7. Run Automator. From the ‘Choose a type for your document’ menu, select ‘Application’.
  8. Drag ‘Run Shell Script’ to the action area.
  9. In the content area (where ‘cat’ is displayed) copy-paste this line:
    open /Applications/Firefox36.app --args -P test
  10. Save the document to /Applications as ‘Firefox 3.6’
  11. Drag ‘Firefox 3.6’ application from the Applications folder to your dock for fast access.
  12. You’re done!

For a nice icon to differentiate your current Firefox version with the old one get the full resolution PNG from above this article right here. Open it in preview, select all (Cmd-A) and press copy (Cmd-C). Open up the Automator .app by right-clicking and selecting ‘Get info’ or hitting Cmd-I. Select the icon in the topleft corner so that it is outlined and press Paste (Cmd-V).

Blog archives

Git: merging specific files from another branch

Jason Rudolph has a great blog post on merging files from one branch to another in git. In most cases you probably want to cherry-pick commits, however for a quick and fast solution this is pretty cool:

$ git branch
* master
  twitter_integration
$ git checkout twitter_integration app/avatar.rb
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   app/models/avatar.rb
#
$ git commit -m "'Merge' avatar code from 'twitter_integration' branch"
[master]: created 4d3e37b: "'Merge' avatar code from 'twitter_integration' branch"
1 file changed, 72 insertions(+), 0 deletions(-)

Two things i noticed about this method:

  • Wildcards and directories work too. So instead of getting a single file from another branch you can also do a git checkout branch * or git checkout branch path/to/directory
  • All paths are relative, so if you’re not in the root of a repo, you need to give the relative path to your file(s).
Blog archives

Basic HTTP authentication in Node.js using the request module

Here’s an easy way to use basic authentication while using the request library for Node.js.

Unfortunately request doesn’t come with an easy convenience parameter you can use, so you need to provide it by yourself. The common way is to add it as an extra HTTP header.

Let’s say you need to login to example.com using user and pass as your username/password.

    
var request = require('request'),
    username = "john",
    password = "1234",
    url = "http://www.example.com",
    auth = "Basic " + new Buffer(username + ":" + password).toString("base64");

request(
    {
        url : url,
        headers : {
            "Authorization" : auth
        }
    },
    function (error, response, body) {
        // Do more stuff with 'body' here
    }
);

This is pretty verbose. Fortunately, you can use a trick using the URL itself, as specified in RFC 1738. Simply pass the user/pass before the host with an @ sign.

var request = require('request'),
    username = "john",
    password = "1234",
    url = "http://" + username + ":" + password + "@www.example.com";

request(
    {
        url : url
    },
    function (error, response, body) {
        // Do more stuff with 'body' here
    }
);

Nice one huh?

Blog archives

Koffie + Wifi: de Openbare Bibliotheek (OBA) in Amsterdam

Foto: Ceinturion / CC-BY-SA

De zogenaamde digitale nomade is in opkomst: geen kantoor meer nodig, je werkt op je laptop vanuit een koffiebar. Of zoiets. Nu zou ik mezelf helemaal geen digitale nomade willen noemen, maar ik vind het wel fijn om af en toe wat mails weg te werken op een andere plek dan mijn eigen huis.

De eisen zijn simpel: koffie en wifi. Maar dat te vinden is nog niet zo makkelijk. Ik probeer af en toe een locatie uit en ik blog hier mijn bevindingen.

Deze keer: de OBA in Amsterdam.

Update: sinds 4 februari 2013 is het niet meer mogelijk om gratis te internetten in de OBA. Je betaalt 2 euro per uur of je moet een ledenpas voor € 17,50 per jaar kopen.

Wifi

Meestal goed. Voordat je kan internetten als niet-bieblid moet je eerst een account aanmaken. Zo’n beetje al je persoonsgegevens dien je te overhandigen, inclusief je paspoortnummer. Je account moet je laten goedkeuren bij de balie, en je paspoort moet je dan ook laten zien. Er zal vast een goede reden voor zijn, maar ik vind het wel heel heftig dat je zonder het overhandigen van al die gegevens niet kan internetten in de OBA.

Als je eenmaal een account heb kun je inloggen via ‘OBA-easynet’ met je wachtwoord en gebruikersnaam. Het netwerk is meestal goed, maar soms zijn er (tijdelijke) dipjes waardoor dingen tergend traag gaan. Het zal vast te maken hebben met de populariteit: op een gemiddelde dag zitten er heel wat mensen met laptops te werken.

Als het echt heel traag is: soms kun je ook de gratis wifi ontvangen van het naastgelegen Vapiano restaurant. Ook veranderen van plek heeft wel eens zin: het internet kan bijvoorbeeld een paar verdiepingen hoger opeens prima zijn, terwijl het bij de koffiecorner ontzettend traag is.

Op het eerste oog zijn er geen poorten geblokkeerd: Spotify, SSH, secure mail en IRC werken prima.

Koffie

Tot een uur of 18.00 is er een koffiebar open op de eerste etage, in de ‘leeszaal’ met kranten en dergelijke. De bar wordt gerund door La Place wat de forse prijzen verklaart: 2,20 voor een normale koffie, 2.60 voor een cappucino of latte. Die koffie komt dan uit een (weliswaar goede) automaat.

Stroom

In de leeszaal bij de koffiebar zijn bij alle tafels (wel enigszins onhandige geplaatste) stekkerdozen. Hoera!

Toilet

Op de begane grond is een toilet met een ouderwetse toiletjuffrouw. 30 cent per keer.

Omgeving en locatie

De OBA zit in een prachtig gloednieuw pand van de hand van architect Jo Coenen op het Oosterdokseiland. Het is ongeveer een kwartiertje lopen vanaf Amsterdam CS. Wel een klein beetje uit de richting van het centrum, en de route wordt op het moment van schrijven hevig verbouwd, dus het is een beetje behelpen.

Als u honger heeft: op de bovenste etage zit een La Place met mooi dakterras (goede plek ook om afspraken te maken) en op de begane grond zit een prima betaalbare Italiaan.

Openingstijden

Elke dag, van 10.00 tot 22.00. Ook op zondag. Speciale openingstijden op feestdagen en dergelijke.

Oordeel

De verplichte paspoortcheck, dure koffie en wisselend netwerk zijn minpuntjes. Maar: het pand is prachtig, de sfeer is prettig en het is zeer aan te prijzen dat de bieb, ook op zondag, tot 22.00 open is.

Cijfer: 8-

Locatie: Oosterdokskade 143, Amsterdam.