Digicted

Een patch voor het cache path probleem in PHPDelicious

24-12-2008

Voor mijn stage bij Bemba was ik bezig met de del.icio.us API in PHP, waardoor ik natuurlijk koos voor de PHPDelicious library. Helaas zat er een foutje in de originele library, waardoor er niet gecached kon worden als het cache path niet expliciet werd meegegeven aan de constructor.

De fix voor dit probleem is gelukkig erg simpel. In cache.inc.php zoek je naar de volgende regel:

public function __construct($sKey, $iCacheTime, $sPrefix='', $sCachePath = CACHE_PATH) {

Dit zou normaal regel 44 moeten zijn. Het probleem zit ‘m in CACHE_PATH, wat eigenlijk PHP_DELICIOUS_CACHE_PATH zou moeten zijn. De nieuwe regel wordt dus:

public function __construct($sKey, $iCacheTime, $sPrefix='', $sCachePath = PHP_DELICIOUS_CACHE_PATH) {

Na deze kleine wijziging is alles ok. Ik heb een patch gestuurd naar de auteur, en naar mijn ervaring wordt de library wel gepatched.

De patch kan toegepast worden door de patch-file in dezelfde directory te plaatsen als PHPDelicious en dan patch -p0 -i fix_default_cache_path.patch te typen op je terminal.

UPDATE: ik bedacht me dat wij intern eigenlijk nog een extra patch gebruiken. Als er geen verbinding gemaakt kan worden met del.icio.us (zoals in de trein kennelijk.. duurde even voordat ik dat door had) is een duidelijke foutmelding wel handig. Hiervoor heb ik deze patch gemaakt.

Als de curl_exec() faalt, krijg je nu een PHP_DELICIOUS_ERR_CONNECTION_FAILED te zien.

UPDATE 2: inmiddels heb ik een email gehad van de auteur, waarin staat dat de CACHE_PATH-patch zal mee worden genomen in de nieuwe versie van PHPDelicious.

Nieuwe Wordpress plugin: Title Defaults to Date

14-12-2008

Voor een nieuwe experimentje heb ik een lokale Wordpress blog geïnstalleerd. Deze blog ga ik schrijven in een soort dagboek-vorm, wat betekent dat de titels eigenlijk altijd gewoon simpelweg de datum en tijd van vandaag zullen zijn.

Aangezien ik niet de eerste persoon ben die Wordpress gebruikt alsof het een dagboek is, heb ik gezocht naar een plugin waarmee ik automatisch de huidige datum als titel kon gebruiken. Enige verbazing was dan ook wel aanwezig toen ik opmerkte dat deze functionaliteit wel gewenst was door andere gebruikers, maar nog niet geïmplementeerd.

En toen was Title Defaults to Date geboren. Deze plugin zet de titel automatisch naar de huidige datum als er geen titel is ingevuld.

Het datum formaat is gemakkelijk in te stellen in de plugin, via de instellingen onder ’settings’ -> ‘Title Defaults to Date’.

Als deze instelling niet wordt ingevuld wordt het datumformaat van Wordress gebruikt (in te stellen onder ’settings’ -> ‘general’).

Veel doet deze plugin dus niet, maar het doet wel genoeg om aan mijn wensen te voldoen. Hij is vrij te gebruiken onder de Creative Commons 3.0 license en te downloaden op de scripts-pagina.

Feedback is altijd welkom op martijn@digicted.nl of in de comments onder deze post.

Shared items van Google Reader automatisch naar del.icio.us sturen

14-01-2008

De shared items feature van Google Reader is de laatste tijd veel in het nieuws geweest. En hoewel niet alle verhalen positief waren, zijn er nog steeds genoeg mensen die dankbaar gebruik maken van de shared items.

Zelf ben ik er nooit echt mee aan de slag geweest, toen ik er gisteren naar keek zag ik dat ik in totaal twee items geshared heb. Dit was waarschijnlijk meer om te testen, dan dat ik het echt nuttig vond.

Meestal bookmark ik links gewoon naar del.icio.us, waar ze ook voor iedereen beschikbaar zijn.

Ook @Polledemaagt en @frankmeeuwsen delen hun items via del.icio.us, maar Polle gaf zaterdag op Twitter aan op zoek te zijn naar een methode om zijn shared items in Google Reader naar del.icio.us te krijgen.

Mijn eerste idee was het gebruik van een Greasemonkey script, maar dit betekent nog steeds handmatig werk - het maakt het proces hooguit iets gemakkelijker.

Daarom besloot ik om een eigen script te schrijven met de RSS-feed van Google Reader shared items en de API van del.icio.us, het resultaat: gr2dic.

Het principe is simpel: je vult je Google Shared items feed URL in (zie deze screenshot), je del.icio.us-username en je del.icio.us-password. Vervolgens worden al je shared items elke dag om 9 uur naar del.icio.us gepost en automatisch getagged met “gr2dic”.

De source code zal ik waarschijnlijk binnenkort beschikbaar maken in een andere post. Wel wil ik alvast een patch delen die ik geschreven heb voor PhpDelicious: addpost_and_deletepost_fix.patch. Zonder deze patch zullen addPost() en deletePost() altijd false returnen en een notice geven.

De auteur van PhpDelicious heb ik ook op de hoogte gesteld van deze patch, dus wellicht zal het binnenkort ook goed zijn in de officiële release.

Inmiddels een email terug van de developer, hij gaat de patch toepassen en opnieuw uploaden.

Update: Op lifehacking.nl schreef Frank meeuwsen al over mijn “oude oplossing” in het artikel Google Reader en del.icio.us Samenvoegen. De methode hierboven beschreven is dus een handigere methode dan op LH.nl gepost is.

Update 2: Er zijn vandaag wat problemen geweest met het script, maar die zouden inmiddels opgelost moeten zijn.

Nieuwe pagina: scripts

03-01-2008

Om dingen wat overzichtelijk te maken heb ik een extra pagina toegevoegd aan deze website: scripts.

Hier komen verschillende scripts te staan die ik door de tijd heen heb geschreven voor deze blog. Alles is onder een open source licensie en mag daardoor vrij gebruikt worden.

Nieuwe scripts zullen aan de lijst toegevoegd worden en ook updates van de huidige scripts zullen daar vermelden worden.

Binnenkort een nieuwe toevoeging!

Goede voornemens voor 2008

31-12-2007

Het is weer die tijd van het jaar: goede voornemens en nieuwe doelen.

Dit jaar wil ik ze hier delen op mijn weblog (net als Mijndert), zodat iedereen ze kan lezen en kan zorgen dat ik me er netjes aan ga houden.

In willekeurige volgorde hier mijn voornemens:

  • Wat boeken lezen;
  • Minder tijd op internet doorbrengen (zodat ik meer heb om over te bloggen en Twitteren);
  • Een vast schema voor fitness opzetten en me er aan houden;
  • De jaaromzet van Crystal Labs verdubbelen*;
  • Getting Things Done lezen en meer toepassen;
  • Ook buiten Flickr, Hyves, Jaiku, Twitter, Last.FM en andere online diensten vrienden maken. Zie ook het tweede punt in deze lijst;
  • Proberen minder geld uit te geven aan hardware. Met name spullen die ik eigenlijk niet nodig heb.
  • En met het zich op de laatste paar weken: meer productiviteit. Door allerlei omstandigheden heb ik de laatste paar weken weinig gedaan en in januari moet daar echt weer verandering in komen. Punt 4 en 5 hebben hier ook mee te maken.

Zoals altijd ben ik ook geïnteresseerd in jullie goede voornemens, doelen en andere plannen voor 2008.

* = De huidige jaaromzet ga ik hier niet delen, maar er zijn mensen met wie ik dat wel bespreek die me hier aan het eind van volgend jaar kunnen herinneren.

Wordpress Plugin: Bulk Tag Renamer

09-12-2007

Naar aanleiding van een gesprek met een vriendin heb ik mijn eerste Wordpress-plugin geschreven.

Het was haar opgevallen dat het niet mogelijk is de naam van een tag te veranderen. Bijvoorbeeld alles wat getagged is met “appel” wijzigen naar “apple”.

Omdat ik al langer een Wordpress-plugin wilde schrijven en deze plugin niet al te moeilijk leek (dat viel nog wat tegen, omdat ik eerst moest leren hoe Wordpress-plugins werken) nam ik de taak op mij. Het resultaat is een plugin waarmee je snel de naam van een tag kunt wijzigen en nog een klein beetje andere functionaliteit.

Aangezien ik er een voorstander van ben om dingen één ding te laten doen, en dat ene ding dan gelijk goed, wordt het geheel mogelijk nog gesplitst naar twee plugins.

De huidige feature-list:

  • Tag hernoemen
  • “Slug” (permalink) wel of niet updaten
  • Categorieën met dezelfde naam wel of niet updaten
  • Bestaande tags aanklikken en zo in het “tagveld” zetten bij post schrijven

Installatie is simpel:

  1. Extract het zipbestand
  2. Upload de map naar wp-content/plugins/
  3. Activeer de plugin via het plugins-menu in de admin

Dat is alles! Vervolgens kun je het een link vinden in het menu manage.

Download de plugin.

Perl warnings op Leopard oplossen

11-11-2007

Voor mensen die Leopard gebruken en het volgende probleem hebben met Perl:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
   LC_ALL = (unset),
   LC_CTYPE = "en_US.UTF-8",
   LANG = "UTF-8"
   are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").

Zet dit in je .profile:

# This setting is for the new UTF-8 terminal support
export LC_CTYPE=en_US.UTF-8
export LC_ALL=en_US.UTF-8

En de warnings zijn weg…

Oplossing gevonden via Rubify.

HOWTO: Bash terminal in Mac OS X afstellen

30-10-2007

Toen ik gisteren echo $PATH typte om te zien hoe m’n path er uit zag schrok ik toch wel een beetje van de vele regels die over m’n scherm heen scrollde. Ik heb ze niet geteld, maar het waren er veel meer dan ik nodig acht.

Voor de mensen die niet zo bekend zijn met de commandline: in de variable PATH staan paden naar directories waar automatisch in gezocht wordt als je een bepaald commando typt. Een bekend commando is bijvoorbeeld cd wat gebruikt wordt om naar een andere directory te gaan. Dit kleine programma’tje staat in de directory /usr/bin. Doordat /usr/bin in het path staat kun je gewoon cd typen in plaats van elke keer volledig /usr/bin/cd te moeten typen.

In je path kun je meerdere directories opgeveven, gescheiden door een :, die één voor één doorzocht worden naar het ingetypte commando tot het commmando gevonden is.

Nu moet het voor de niet-zo-commandline-freakigere lezers ook duidelijk zijn dat ik het niet zo leuk vond dat dit path vele regels in beslag nam en dezelfde directories vaak terugkwamen waardoor het ook lastig was om uit te zoeken welke directory voorrang had.

Omdat ik toen toch wilde opruimen (en het is gelukt, het path is nu nog maar twee regels) heb ik gelijk heel mijn .profile maar eens goed doorgenomen en georganiseerd. En omdat ik vast niet de enige ben die bepaalde dingen uit mijn .profile kan gebruiken heb ik besloten het hier te delen.

Voor de mensen die ervaren zijn met de terminal en gewoon mijn .profile willen zien: download mijn .profile of ga direct naar de uitleg van de inhoud.

Andere mensen kunnen even rustig doorlezen om te zien wat .profile nu eigenlijk is en wat de inhoud in mijn geval doet.

En hoewel dit artikel is geschreven naar aanleiding van mijn ervaring op Mac OS X geldt dit natuurlijk ook gewoon voor Linux, BSD en andere systemen waarop bash in gebruik is.

Dus eh, .profile, wat is dat nou eigenlijk?

Waarschijnlijk zijn er inmiddels een aantal mensen die zich afvragen wat .profile nu eigenlijk is. Het is eigenlijk niet meer dan een simpel tekstbestand.

Maar zoals wel vaker in de UNIX-wereld is het wel een krachtig tekstbestand.

In dit bestand kun je namelijk commando’s plaatsen die worden uitgevoerd op het moment dat je inlogt op de terminal. Dit kan bijvoorbeeld iets zijn om het uiterlijk van je terminal aan te passen of om aliassen te maken voor commando’s die je veel gebruikt.

De rest van dit artikel zal praktische voorbeelden laten zien om te illustreren wat ik bedoel.

Eigenlijk zijn er een aantal verschillende bestanden die gebruikt worden om je terminal aan te passen. In het geval van bash hebben we het dan meestal over /etc/profile, /etc/bash.bashrc, ~/.bashrc, ~/.bash_profile en natuurlijk ~/.profile.

Deze hebben allemaal een eigen functie en roepen elkaar vaak aan, of ze overschrijven elkaar. Eigenlijk is het dan ook niet helemaal correct van mij om alles in ~/.profile te zetten, maar ik heb er niet zo’n probleem mee.

Voor de mensen die het wel graag 100% correct aanpakken is /etc/profile V.S. /etc/bashrc op LinuxQuestions.org waarschijnlijk interessant.

Hoe maak ik een .profile?

Je .profile plaats je in je home directory. Er is een goede kans dat je nog geen .profile hebt en dit bestand eerst moet aanmaken. Omdat het begint met een . is het een verborgen bestand, waardoor het misschien niet met elke editor te zien is. Wel kun je het aanmaken met iedere editor die gewoon platte tekst ondersteunt. Zelf gebruik ik meestal VI Improved (één van mijn favoriete editors, hier schrijf ik mogelijk later nog over) of Textmate.

Als je editor het opslaan van verborgen bestanden niet gemakkelijk ondersteunt kun je dit doen via een omweggetje:

  1. Maak het bestand aan en sla het op als profile.txt in je home directory;
  2. Start een terminal op (via Applications > Utilities > Terminal.app);
  3. Typ cd ~ om zeker te zijn dat je in je home directory zit;
  4. Typ mv profile.txt .profile;
  5. Klaar, je kunt nu weer de rest van de gewone stappen volgen.

Wijzigingen in je .profile worden pas zichtbaar nadat je opnieuw bent ingelogd of het volgende commando intypt: . ~/.profile.

En wat staat er nou in zo’n profile?

Het beruchte path

We beginnen met het beruchte path, wat bij mij nu netjes op twee regels staat en er zo uitziet:

export PATH=/opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/local/sbin/:/usr/local/mysql/bin
export PATH=$PATH:/usr/bin:/bin:/usr/sbin/:/usr/local/sbin/:/sbin:/usr/X11R6/bin/:/Users/martijnengler/scripts/

Neem dit niet zomaar over, maar ik wil het even gebruiken als voorbeeld. Als ik nu dus bijvoorbeeld cd intyp wordt er eerst gezocht of er een programma met de naam cd in /opt/local/bin staat, vervolgens /opt/local/sbin, etc. .. Net zo lang tot het gevonden is. cd Staat overigens in /usr/bin. Als je je afvraagt waar een programma staat kun je dat bekijken met whereis.

Typ bijvoorbeeld whereis bash om te zien waar bash staat of whereis whereis om te zien waar whereis zelf staat.

Geschiedenis

De volgende paar regels bepalen hoe bash moet omgaan met de geschiedenis van ingetypte commando’s. Zelf kies ik er voor om mijn laatste 999 commando’s te bewaren zodat ik een uitgebreidde geschiedenis heb om door heen te gaan en herhaalde commando’s niet te laten zien. Dit doe ik met de volgende regels:

export HISTCONTROL=erasedups
export HISTFILESIZE=999

De eerste regel zorgt er voor dat commando’s die ik meerdere keren invoer maar één keer terugkomen in de geschiedenis. Laten we zeggen dat dit een reeks commando’s is die ik invoer:

cd /tmp
ps
vi
ps
top
vi

Als ik vervolgens met cursor-omhoog door mijn history loop zou ik normaal de commando’s in omgekeerd chronologische volgorde terugzien. Door het gebruik van erasedups zie ik: vi, top, ps, /tmp. Zowel vi als ps worden allebei dus één keer getoond in plaats van meerdere keren. Als je veel door je geschiedenis heen gaat is dit erg prettig.

Door de tweede regel heb ik een geschiedenis van 999 commando’s.

Het uiterlijk

Waar sommige mensen hun terminal op die van Lost willen laten lijken (zie ook deze reactie) ben ik meer voor een informatieve prompt met een lichte achtergrond.

Daarom kies ik voor de volgende regels in mijn bestand:

export CLICOLOR=1
export TERM=xterm-color
export LSCOLORS=ExFxCxDxBxegedabagacad

PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

De eerste drie regels zijn er om kleuren in te stellen. Als je liever een standaard zwart/wit hebt kun je dat dus gerust weglaten.

Het meest interessant is hier de laatste regel, deze bepaalt namelijk hoe je prompt er uit ziet. Op een Mac ziet de standaard opdrachtprompt er uit als hostname:dirnaam gebruikersnaam$ .

In mijn geval is dat bijvoorbeeld: puppis:ruby martijnengler$ als ik me in de directory ~/Documents/code/ruby bevind en ben ingelogd als martijnengler op mijn laptop, puppis.

Zelf zie ik echter liever het volledige path naar de directory waar ik me bevindt en mijn prompt ziet er dan ook zo uit: martijnengler@puppis:~/Documents/code/ruby$ .

Uiteraard zullen we allemaal onze eigen mening hebben hoe zo’n prompt er uit moet zien, daarom raad ik aan de documentatie van bash door te nemen om te zien welke variablen er allemaal beschikbaar zijn.

Een paar voorbeelden:

#volledige path naar de huidige directory
PS1='\w$ '

#computernaam:volledige path gebruikersnaam
PS1='\h:\w \u$ '

#voor de minimalisten: alleen een $
PS1='$ '

#een erg lange, als dat je ding is: de datum, tijd (HH:MM:SS in 24-uurs formaat) username@hostname : het volledige path naar de huidige directory
PS1='\d \t \u@\H : \w$'

#dezelfde lange prompt als net, nu verdeeld over twee regels
PS1='\d \t\n\u@\H : \w$'

Alles eindigt met een $, dit is gebruikelijk als je bent ingelogd als een “normale” user. Een # wordt gebruikt bij root (de beheerder van de computer) om zo snel te kunnen zien als wat voor user je bent ingelogd.

Uiteraard zijn er vele variaties te bedenken, expirimenteer hiermee totdat je iets hebt gevonden wat goed werkt voor jou. Een volledig overzicht van de variablen is beschikbaar in de handleiding.

Aanvullen van commands

Men zegt altijd “een goede ICT-er is lui”, waarmee bedoelt wordt dat ICT-ers graag zo min mogelijk doen om zoveel mogelijk werk klaar te krijgen. Wat daar bij helpt is het aanvullen van commando’s door slecht een paar karakters te typen en dan op tab te drukken.

Omdat ik ook een (goede) ICT-er ben heb ik dan ook de volgende regels opgenomen:

set show-all-if-ambiguous On
bind "set completion-ignore-case on"
complete -A user       su sudo
complete -A hostname   rsh rcp telnet rlogin r ftp ping disk ssh

Deze regels zorgen er voor dat:

  1. Alle mogelijke commands getoond worden als er meerdere mogelijkheden zijn. Typ ik bijvoorbeeld cl[tab] krijg ik cleanlinks, clear en clri te zien;
  2. Het aanvullen niet hoofdlettergevoelig is, wat erg handig is als je niet zeker bent over het hoofdlettergebruik;
  3. Usernames worden aangevuld na de commando’s su en sudo;
  4. Hostnames (zoals gevonden in /etc/hosts) worden aangevuld na het intypen van bijvoorbeeld ftp of ssh.

Aliassen

Hoewel het aanvullen van commando’s erg handig is, is het soms handiger om gewoon een korte alias te hebben voor een lang commando wat verschillende parameters accepteert. Gelukkig kan dit ook met alias aliasnaam commando in de file. Hieronder mijn aliassen:

alias ll='ls -hlA' 

alias irb='irb -r irb/completion'

alias cp='cp -i'
alias mv='mv -i'

alias st="svn st -u"
alias chi="svn ci *"
alias up="svn up"
alias di="svn diff"
alias rv="svn revert"

alias profileme="history | awk '{print \$2}' | awk 'BEGIN{FS=\"|\"}{print \$1}' | sort | uniq -c | sort -n | tail -n 20 | sort -nr"

alias e=mate

alias grip="grep -i"

alias sthrn="ruby /Users/martijnengler/code/ror/hrn/script/server webrick -p 3002"
#... zo nog een aantal voor RoR

Op deze manier kan door het typen van ll een lijst met bestanden in de directory krijgen, onder elkaar, met leesbare groottes (in kilobytes, megabytes, gigabytes etc.) inclusief verborgen bestanden. Als ik altijd het volledige ls -hlA zou moeten typen zou ik dit handige commando veel minder gebruiken.

De alias voor irb heb ik al eerder over geschreven, dit zorgt voor tab completion in de Interactive RuBy shell.

Ook de commando’s cp en mv overschrijf ik. Op deze manier komt er een prompt als je op het punt staat een file te overschrijven, net als in Mac OS X of Windows. Dit voorkomt het per ongeluk overschrijven van files.

De aliassen voor svn zijn handig voor mensen die hiermee werken. Deze hebben geen uitleg nodig voor SVN-gebruikers en zijn niet interessant voor mensen die dit toch niet gebruiken. ;)

De profileme-alias werkt niet samen met export HISTCONTROL=erasedups, maar geeft anders wat statistieken over de commando’s die je gebruikt. Best grappig dus, als je erasedups niet gebruikt.

e=mate maakt het commando om Textmate te openen nog korter. Vaak zit ik in een directory en wil ik die openen als project in Textmate om er aan te gaan werken. Ik typ dan simpelweg e . om te beginnen.

De grip-alias is een kortere manier om een grep uit te voeren die niet hoofdlettergevoelig is. Je kunt eventueel ook de alias grep noemen als je grep nooit hoofdlettergevoelig wilt gebruiken.

De laatste alias, sthrn, he ik er een aantal van. Hiermee kan ik snel een Rails-server starten zonder het hele path te moeten kennen, te weten op welke poort ik het wil draaien en expliciet aan te geven dat ik webrick wil gebruiken in plaats van Mongrel.

Overig

En dan zijn er nog wat dingetjes die ik gewoon graag neerzet:

export EDITOR=vi

export LC_CTYPE=en_US.UTF-8

export set CLASSPATH=/usr/local/lib/mysql/mysql-connector-java.jar:. 

export RUBYOPT=rubygems

set -o vi

set bell-style none

Dit maakt vi de standaard editor, zet de encoding op UTF-8, voegt de MySQL-connector toe aan mijn classpath voor Java, zorgt er voor dat rubygems automatisch geladen worden en maakt vi ook de editor die gebruikt wordt op de commandline zelf. En natuurlijk schakelen we die irritante beep uit…

Wil je ook alles hebben? Download mijn .profile!

Een makkelijke en snelle manier om dat te doen is door dit in te typen op de terminal: cd ~; curl -o .profile http://digicted.nl/uploads/.profile; . .profile

Dit verandert de huidige directory naar je homedirectory, download de .profile van Digicted en activeert ‘m.

Vragen, tips of opmerkingen?

Als altijd: de reacties staan open, want ik ben voor open communicatie. Behalve spam worden reacties nooit in de prullenbak gegooid.

Toch raad ik aan eventuele liefdesbrieven of huwelijksaanzoeken via email te doen of anoniem te posten. Uiteraard ben je hier echter ook vrij in, dus post ze gerust in de comments.

Wat voor blogger ben jij?

18-10-2007

What Kind of Blogger Are You?

Zelf ben ik in ieder geval een Purist Expert Socialite:

Of ik echt een expert ben weet ik niet, maar een purist ben ik zeker. En sociaal? Ik gebruik sites als Reddit, Digg, del.icio.us e.d., dus volgens de test wel.

De grote vraag is nu natuurlijk: wat voor blogger ben jij? Take the test!

Via Gigadesign.

Verjaardaag 2007 (of: ik ben 20)

14-10-2007

Hoewel ik geprobeerd heb m’n verjaardag over te slaan (ben niet zo’n verjaardagsmens) zijn er al zoveel mensen achter gekomen dat ik het maar net zo goed kan posten: vanaf vandaag, 14 oktober 2007, ben ik 20.

Voor de duidelijkheid: ik was dus 19, geen 20 en ook geen 21. En voor de paar mensen die me echt niet kennen: ik ben ook niet boven de 30.

E-cards, gewone kaartjes, telefoontjes en dat soort dingen kunnen mij ook vandaag via de normale weg bereiken.

Foto’s van de verjaardag volgen vast nog wel, hoewel ik het voor elkaar heb gekregen te zorgen dat er bijna niemand komt. Eigenlijk alleen een heel klein beetje familie. Of er moet weer zoiets gebeuren als drie jaar geleden… Veel foto’s zullen er dus niet zijn naar ik hoopverwacht.

Update: er zijn bijna geen foto’s gemaakt, vandaar dat er niets gepost is. Foto’s die er wel zijn uiteraard te vinden op Flickr.