Blog archives

De mafste platenhoezen uit Nederland

Hommy Klein en vele anderen zien u graag tegemoet op dit prachtige weblog. Niet alleen voor de plaatjes maar ook voor het geweldige commentaar:

Dit is de eerste hoesfoto in de geschiedenis van de vaderlandse plaat, waarvan het belangrijkste deel wordt ingenomen door een blinde muur van een seinhuis.

Blog archives

Transpair: tien dagen lang een ruimte hacken

De theaterzaal van de vechtclub in Utrecht is de komende tien dagen het toneel van een experiment van interieurarchitect Loes Glandorff: Transpair. In die ruimte heeft ze een complete woning neergezet waar ze tien dagen gaat wonen, terwijl ze samen met bezoekers meegebrachte spullen repareert en ze een nieuwe functie geeft: transparing.

Tegenwoordig is het zo dat spullen als ze kapot gaan meestal weggegooid worden, met dit project wil Loes laten zien dat het einde van een ding juist een nieuw begin kan betekenen, en een mogelijkheid tot herinterpretatie.

Tijdens de tiendaagse bewoning is er een livestream te zien van de gebeurtenis, hier beneden. Meer informatie op de website. Woensdag 14 juli en zondag 18 juli zijn er open dagen, donderdag 22 juli is er een borrel en veiling van de objecten.

Blog archives

Dé finale

Op het Vrijthof in Maastricht wordt tijdens de WK-finale morgen geen alcohol geschonken. In Utrecht hebben ze besloten om uiteindelijk wel een groot scherm neer te zetten, maar dan wel op een industrieterrein. Tot overmaat van ramp heeft de gemeente Utrecht ook nog een prachtige ‘tip’ gegeven op haar website:

Na de wedstrijd kan er sprake zijn van een euforische, of van een teleurgestelde stemming. In beide gevallen geldt: laat het niet uit de hand lopen en houd uw hoofd koel!

Op naar het museumplein in Amsterdam dus morgen.

(foto Darwinist / CC-BY)

Blog archives

jsDynaLoad: Dynamic Javascript loader with multi-file support

I wrote a (very) small Javascript function to dynamically load Javascript files. In modern Javascript development you usually have more than one Javascript file in your page (e.g. jQuery, a few plugins, a main javascript file) that depend on each other. Loading them using the <script> tag works, but sometimes you get a dependency problem because scripts are not guaranteed to load from top to bottom in the order they appear in on the page.

The script is based on this version by Nicholas C. Zakas but adds an extra option to load an array of Javascript files.

Fork it on Github or get a minified version.

Here’s how  you use it:

// Loading a single file
jsDynaLoad("single.js", function() {
    alert("callback after the single file");
});

// Loading an array of files
var files = ["1.js", "2.js"];
jsDynaLoad(files, function() {
    alert("callback after the array of files");
});

// A callback is not required
jsDynaLoad("nocallback.js");

To get a better performance remember to place your scripts at the bottom of your page, close to the closing </body> tag. You can also include the minified version of loadScript inline in a <script> tag to save a HTTP request.

Blog archives

How to use Javascript to make Freemarker errors less intrusive

When using Freemarker in Magnolia, you often get errors. For example, because you tried to use an undefined value and didn’t add the required ‘!’ symbol. When that happens you see the infamous red-on-yellow “FreeMarker template error!”. During development, that’s not a problem, but on a production site you don’t want to confuse your visitors with cryptic Java errors.

Unfortunately, it’s not that easy to turn those errors off, and you probably do want people to report these errors because they might indicate a serious bug in your website.

For this purpose i wrote a small Javascript function that you can use to ‘prettify’ the Freemarker error. It replaces the stacktrace with a general error message, but the user can still see the original error by clicking on a link. The script requires jQuery, which is included in the STK or can be downloaded from jQuery.com. To run in, just add it to your $(document).ready() function.

To view the script read the Magnolia wiki page.

Blog archives

Easy concatenation in Javascript

When developing stuff in Javascript and jQuery you often need to concat lots of HTML for output. That gets ugly pretty fast.

$("#mydiv").html('<div id="lightbox-container-image-data-box">' +
this.something + '<div id="lightbox-container-image-data"><div' + 
'id="lightbox-image-details"><span id="lightbox-image-details-caption">' +
v + '</span><span id="lightbox-image-details-currentNumber"></span>' + 
'</div><div id="lightbox-secNav"><a href="#" id="lightbox-secNav-btnClose">' + 
'<img src="'+settings.imageBtnClose+'">');

There are a few different ways to concat strings in Javascript and make your code more readable.

Using the + operator:

var html = "<table>" + 
    "<tr>" + 
    "<td>" +
    "</td>" + 
    "</tr>" + 
    "</table>";

I don’t like this notation. To make it readable you need an extra space after the closing " and you can’t nicely line up all the strings.

Another way is using the Array.join("") method:

var html = [
    "<table>",
    "<tr>",
    "<td>",
    "</td>",
    "</tr>",
    "</table>"
].join("");

This has the disadvantage that you need a method at the end of the array, and in modern browsers it is a little slower than native concatting.

Another way is using the String.concat() method

var html = (new String("")).concat(
    "<table>",
    "<tr>",
    "<td>",
    "</td>",
    "</tr>",
    "</table>"
);

I especially like this last method. Unfortunately the syntax is a little clunky. My colleague Frank suggested a slightly different notation

var html = ''.concat(
    "<table>",
    "<tr>",
    "<td>",
    "</td>",
    "</tr>",
    "</table>"
);

This is valid because '' is equivalent to (new String(“”)). This works great and makes passing HTML as an argument to jQuery methods a lot more readable:

$("#mydiv").html(''.concat(
    '<table>",
    '<tr><td>',
    '</td></tr>',
    '</table>'
));
Blog archives

Het lijsttrekkersdebat

Vier jaar geleden schreef ik op deze plek een evaluatie van het lijsttrekkersdebat. Het is interessant om te zien hoe het politieke landschap zich nu manifesteert. Balkenende, Rutte en Wilders zitten nog steeds op hun plek, maar de verhoudingen zijn veranderd, ten gunste van de VVD, ten nadele van het CDA. Een evaluatie van de lijsttrekkers.

Het blijft knap hoe Emile Roemer zich in acht korte weken heeft geprofileerd als de opvolger van Jan Marijnissen. Zijn taal was duidelijk, eenvoudig en vaak origineler dan de andere deelnemers. Van de andere kant: zijn betoog over ‘de uitverkoop van de sociale sector’ werd wel erg vaak herhaald, misschien nog wel vaker dan de moslims van Wilders.

Femke Halsema positioneerde zich als het ultieme alternatief voor linkse besluitelozen. Voor sommige zwevers werkte dat misschien, maar ik kan me ook voorstellen dat kiezers dat juist een teken vinden van besluiteloosheid van haar kant.

André Rouvoet en Alexander Pechtold waren zo goed als onzichtbaar. Dat is vreemd, want beide zijn goede debaters.

Pechtold probeerde op te vallen door grappen te maken die geen van allen aankwamen. En de laatste oproep aan Rutte om toch vooral duidelijkheid te scheppen over Wilders als vice-premier was ook geen succes.

Jan Peter Balkenende zal zijn achterstand met dit debat niet goedmaken. Het enige wat een beetje aankwam was zijn verhaal over ‘wat een goede premier maakt’, de rest was zijn eeuwige stroom van verhaspelde woorden en dooddoeners als ‘u zegt het wel, maar het is niet zo’. Balkenende kan na dit debat definitief de handdoek in de ring gooien.

Geert Wilders was als altijd verbaal sterk, maar na 4 jaar alles te hebben gezegd wat er te zeggen valt over wat er fout is aan moslims is het een grijsgedraaide plaat geworden. Voor de eerste keer deed Wilders zenuwachtig aan, Rutte was hem op alle momenten de baas. En of het nou zo’n slim idee was om te zeggen dat hij als Minister-President als eerste naar Israël zou gaan?

Ondanks dat Job Cohen claimt dat hij ‘van zijn eerdere fouten in de campagne heeft geleerd’ was dat vanavond niet te merken. Wat hij zegt lijkt op de taal van Wouter Bos, maar hij doet het lang niet zo charismatisch en overtuigend. Hij klonk af en toe bijna, en dat is wel heel pijnlijk, als Ad Melkert, die zinnetjes opdreunde van zijn voorlichters. Dat is jammer, want op de momenten dat hij wat meer improviseerde was het een stuk beter. Hoe dan ook, met dit slappe optreden is Cohen naar mijn mening de verliezer van het debat.

Mark Rutte heeft de afgelopen vier jaar veel geleerd en was ontzettend kalm en duidelijk in het uitleggen van zijn standpunten.Het is knap hoe Rutte zijn VVD neerzet als een sociale partij die er ook voor de minder bedeelden is (of dat nou waar is of niet). Alleen de ‘morele oproep’ van Femke Halsema om aan te geven waar de pijnpunten van zijn programma zitten liet dat beeld even verwateren. Toch bleef het beeld overeind, en Rutte is daarom de winnaar van het debat.