Digicted

Archief voor Leven

Goede voornemens voor 2008

Monday, December 31st, 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.

Verjaardaag 2007 (of: ik ben 20)

Sunday, October 14th, 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.

Een huwelijksaanzoek via Ruby

Saturday, October 13th, 2007

Een uit de hand gelopen grap waarbij ik iemand ten huwelijk heb gevraagd resulteerde dit keer in het schrijven van een Ruby-script. Het hele verhaal is iets te veel om hier te plaatsen, maar de korte versie is dat mijn eerste aanzoek mislukte en ik daarom een tweede zou proberen. Omdat deze persoon ook wel iets met code heeft (niet met Ruby helaas) besloot ik dit in Ruby te schrijven. Huwelijksaanzoeken gaan ten slotte om liefde en dat ik van Ruby houd zal geen geheim zijn…

De vorm van het hart komt van een soortgelijk Perl-script, maar de code is geheel zelf geschreven.

Dit zou natuurlijk nooit gebruikt mogen worden in een “productie”-omgeving, maar voor een grap is het wel eens leuk om je code wat vorm te geven.

De code is op deze blog niet helemaal mooi zo op de weblog, misschien kan ik hier later nog wat aan doen.

Hoe dan ok, laten we maar beginnen:

#!/usr/bin/env ruby -W0
@y = ""
you = "Susan"
love = you

     def i           (a,b)
   puts @y         end;str =
 "Rtrzm, " + "vhk id zkridakh"
str.concat("des lds ld sqntvd")
str += "m"; str.split(//).each{
 |bfiwdl| @y << bfiwdl.succ };
  @y.split("").each{|qjwciqb|
   @you = @y.gsub(/\!/," ")}
    @you.gsub!("aa","a");id
      @y = @you.gsub("-",
        ",");@y += "?";
          @y.gsub!(#q
            /\s+/,#
             " ");
              you
               p

         i love, you

Voor we aan de uitleg beginnen zal ik de code eerst wat opsplitsen in een leesbare structuur.

#!/usr/bin/env ruby -W0
@y = ""
you = "Susan"
love = you

def i (a,b)
   puts @y
end

str = "Rtrzm, " + "vhk id zkridakh"
str.concat("des lds ld sqntvd")
str += "m"
str.split(//).each{ |bfiwdl|
  @y << bfiwdl.succ
}

@y.split("").each{ |qjwciqb|
  @you = @y.gsub(/\!/," ")
}

@you.gsub!("aa","a")
id
@y = @you.gsub("-", ",")
@y += "?"
@y.gsub!(#q
/\s+/,#
" ")
you
p
i love, you

Nu zal het ook duidelijk zijn dat er heel wat “overbodige” code in zit, maar die was soms nodig om de vorm succesvol te krijgen.

Regel voor regel er maar weer even door dan:

De eerste regel vertelt Ruby geen warnings te tonen door het gebruik van -W0. Dit voorkomt een warning over de methode id die eigenlijk niet meer gebruikt zou moeten worden. Op die plek had ik echter gewoon eventjes twee tekens nodig…

Daarna maken we de variable @y die in de hele class beschikbaar is, deze gebruiken we uiteindelijk om de output in op te slaan. De naam Susan wijzen we toe aan de variable you en you weer aan love.. We kunnen elke waarde in deze variablen stoppen, het gaat er om dat we ze nodig hebben aan het einde.

Dan begint het hart van de code, wat geopend wordt met een simpele methode die we i noemen en 2 parameters accepteer: a en b. Eigenlijk doen we niets met deze parameters, maar op deze manier kunnen we het later aanroepen als i love, you waarbij i gewoon een call is naar de methode en love en you de parameters zijn.

Alles wat we binnen deze methode doen is het printen van de waarde van @y.

De volgende stap is het aanmaken van de string die we willen printen. Normaal gesproken hadden we hier iets kunnen doen als @y = "Susan, wil je alsjeblieft met me trouwen?", maar het moest natuurlijk wat cryptisch zijn en het hart opvullen. De string maken we dan ook in een aantal stappen.

Eerst maken we simpelweg het eerste deel van de string aan, gebruiken we concat() om er nog een stukje aan toe te voegen en ten slotte += om de laatste letter toe te voegen.

Vervolgens doen we een split op de string, met als argument een lege regular expression. Het resultaat hiervan is dat we een array hebben waarin alle letters van de string afzonderlijk zijn opgeslagen. Met een each-block lopen we door de array heen en hebben we in de variable bfiwdl steeds de volgende letter van de string zitten.

Bij de eerste iteratie is dat dus een R, vervolgens een t etc. De naam bfiwdl is gekozen omdat dat het aantal karakters was wat ik nodig had om die regel op te vullen. Hier beginnen we ook de @y-string te vullen. @y << bfiwdl.succ is gewoon een andere schrijfwijze voor bijvoorbeeld @y += bfiwdl.succ. Zoals wel vaker kent Ruby gewoon verschillende methodes om iets uit te voeren.

De methode succ pakt steeds het volgende karakter, zoals dat voor een mens ook enigszins logisch zou zijn. Na een ‘a’ komt dus een ‘b’ en na een ‘c’ een b. Als we nu terugkijken naar de string die in str zit (Rtrzm, vhk id zkridakh des lds ld sqntvdm) zal het misschien ook opvallen dat we dus steeds een letter “terug” in het alfabet zijn gegaan.

Door de functie succ pakken we steeds de volgende waardoor we iets leesbaars krijgen. Als dit gebeurt is splitten we op onze nieuwe string. Dit keer geven we een lege string mee als argument aan split, wat hetzelfde resultaat geeft als een lege regular expression. Wederom een voorbeeld hoe je een probleem soms op meerdere manieren kan oplossen: iets wat erg handig kan zijn als je een stukje code schrijft wat enigszins cryptisch moet zijn.

De naam qjwciqb is weer puur gekozen vanwege lengte, deze variable gebruiken we verder ook niet in het blok. Wel gaan we de nieuwe variable @youineens gebruiken. Hier komt een string in te zitten die lijkt op de string in @y, maar een verbeterpunt heeft. Door het gebruik van .succ zijn de spaties in de string vervangen door uitroeptekens. Met gsub (een methode om tekst in een string te vervangen), zetten we de uitroeptekens terug om naar spaties.

Ook de dubbele a gaan we vervangen. Ruby vindt dat de ‘z’ opgevolgd moet worden door ‘aa’, iets waar ik het niet mee eens ben. Met @you.gsub!("aa","a") zet ik dit weer “goed”. Iets verder doen we een dergelijke replace als de vorige twee om van een - terug een komma te maken.

Voor die regel zien we echter nog een (nutteloze) call naar de functie id. Zoals gezegd bij de bespreking van regel 1 is deze niet nodig en puur voor opvulling van het hart.

We zijn weer terug aan het werk in @y en voegen nu het vraagteken toe aan het eind van de string. Het is ten slotte een verzoek, geen opdracht. Of dat is op z’n minst wat ik wil dat zij denkt. ;-)

Om het af te maken vervang ik dubbele spaties met een regular expression nog door een enkele spatie. Dit werkt als volgt: \s is het teken voor een spatie in regular expressions. \s+ Wil zeggen: één of meer spaties achter elkaar. Door deze te vervangen door een enkele spatie werd een probleem wat ik eerder had opgelost. Bij een latere iteratie van de code was de string eigenlijk al gelijk goed, maar toch heb ik het laten staan.

De # staan er weer voor … opvulling.

De laatste twee regels: you en p doen eigenlijk niets. Tegen het einde van zo’n hart wordt het erg smal en heb je gewoon wat korte namen nodig…

De i love, you op de laatste regel heb ik al uitgelegd in het begin: dit roept gewoon de functie i aan met parameters love en you.

Uiteraard is dit geen code die ooit in productie zo geschreven zou mogen worden, maar toch zitten er dingen in die ook in productie gebeuren:

  • Code die niet meer gebruikt wordt laten staan in plaats van verwijderen
  • De waarde van een variable in een andere stoppen en dan weer terug. Gelukkig zie ik dit weinig, maar ik heb het al meegemaakt…
  • Functies die eigenlijk geen nut hebben in de code zetten
  • Onduidelijke variabelenamen (zoals bfiwdl)
  • En natuurlijk: 15 regels code gebruiken voor iets wat ook in één regel opgelost had kunnen worden.

Kleine note nog: ik heb nog geen ja of nee gehoord van het bewuste meisje. Iemand tips om er een ‘ja’ uit te krijgen? ;-)

Mijn hardware: een overzicht

Saturday, October 6th, 2007

Op veler verzoek is het hier dan eindelijk: een lijst met mijn hardware. De belangrijkste in ieder geval, ik heb dingen als m’n Mac SE II er af gelaten.

Ik hoop dat mensen hier tevreden mee zijn en me nu niet meer blijven vragen wat ik heb staan… ;-)

Puppis (MacBook)

CPU
1.83GHz Intel Core 2 Duo
Geheugen
2GB 667 MHz DDR-II (2x 1GB PQI)

Operating System
Mac OS X Tiger
Harde schijven
Toshiba 60GB
Een 7200RPM, externe USB-disk (eigenlijk een interne disk ingebouwd in zo’n kastje..)
Grafische kaart
GMA 950
Netwerk
10/100mbit LAN
Airport (draadloos netwerk)
CD-Brander / DVD Speler
MATSHITACD-RW CW-8221
Monitor
Ingebouwd scherm en Samsung 205BW (Samsung 205BW review)

Zie ook mijn MacBook review en mijn eerdere mening over de MacBook.

Orion (Windows/Linux workstation)

CPU
Intel PentiumD 930 (P) DC 3.0GHz
Moederbord
Asus P5LP-LE
Geheugen
2GB DDR-II (2x 1GB Micron)
Operating System
Windows XP
Ubuntu Linux
Harde schijven
2x Seagate Barracuda 7200.8 SATA NCQ 200826, 200GB
Western Digital 160GB, 7200RPM, externe USB-disk
Grafische kaart
Radeon X1300
Netwerk
10/100mbit LAN
Ook een draadloos dingetje.. Niet in gebruik.
Geluid
Intel 82801GB ICH7 - High Definition Audio Controller
Brander
HP DVD Writer 740b
Speler
TSSTcorp DVD-ROM TS-H352C
Monitor
Samsung 173P

Libra (server)

CPU
Intel Celeron D 331 2.6 GHz, 533 MHz
Moederbord
Asus P5VDC-X
Geheugen
512MB
Operating System
FreeBSD
Harde schijven
3x 300GB in RAID5, een vierde ligt klaar
Western Digital Elements 500GB
Netwerk
10/100mbit LAN

Speler
Merkloos DVD-spelertje.
Monitor

Deelt de Samsung 205BW, via de VGA-poort. Meeste werk via SSH.

Dit zijn mijn belangrijkste computers. Ik heb ook nog een testbakje naast me staan en wat andere hardware zoals een iPod Nano, HTC S710, printers (inkjet en laser), scanner etc. Alle “nuttige rommel” die er nog op zolder ligt (cd-romdrives, floppydrives, oude hdds, netwerkkabels etc.) heb ik hier ook maar niet op het lijstje gezet.

Problemen met RSS-feed

Tuesday, September 25th, 2007

Gisteren ontdekte ik dat er een probleem was met de link van de RSS-feed en sommige mensen nog steeds een oude versie in de pagina kregen. Dit is nu opgelost en dat was ook gelijk te zien aan het aantal subscribers op de feed in Feedburner. Excuses voor mensen die hier last van ondervonden hebben.

Nieuwe hardware deel 5: Macbook(2)

Wednesday, September 5th, 2007

Sommige mensen wisten het al: de MacBook Pro van Silverware is naar een partner in dat bedrijf en ik heb een “gewone” MacBook gekocht. Voor sommige mensen misschien een verrassing, aangezien ik niet heel erg positief was toen ik voor het laatst een MacBook had.

Ze is echter zeer mobiel qua formaat en gewicht en nu er 2GB geheugen in zit (de vorige die ik tijdelijk had, had slechts 512MB geheugen) draait ze geweldig! Op toekomstige afspraken met klanten van Crystal Labs zal ik dus met notebook verschijnen. En uit ervaring kan ik zeggen dat dat toch wel erg makkelijk is.

Voor de technici onder ons: een 1.83GHz Intel Core 2 Duo, 2GB 667 MHz DDR2 SDRAM (geleverd door PC Megastore en keurig afgehandeld), 60GB 5400RPM harde schijf.

Voor de a-technici: het is een witte laptop.

Zie ook de foto’s van de Macbook op Flickr (in omgekeerd chronologische volgorde).

Rubyscript om Google-positie te zien

Saturday, August 18th, 2007

Gisteren was ik in Amsterdam met Sanne Roemen en Daan Kortenbach, voor een erg leuk gesprek.

We hebben het ook even over zoekmachines gehad, waarbij Daan vertelde dat hij op pagina 1 kwam voor een goed trefwoord. Uiteraard heb ik zelf ook even gekeken of ik op één van de eerste pagina’s kom, wat helaas niet zo is.

Maar dit gaf me wel een idee: het komt best veel voor dat ik even wil weten of ik voor bepaalde trefwoorden in de eerste 3 of 5 pagina’s sta. Nu zijn er natuurlijk programma’s om dit te doen, maar voor mij betekent dit toch meestal het trefwoord intypen in Google en dan pagina 1, 2, 3, 4 en 5 aanklikken, zoeken naar mijn domeinnaam en hopen dat ik er bij sta.

Nu had ik natuurlijk op zoek kunnen gaan naar zo’n programma, maar in plaats daarvan automatiseerde dit proces zelf door een stukje Ruby.

Zoals gewoonlijk beginnen we eerst met de volledige code en gaan we het vervolgens analyseren:

#!/usr/bin/env ruby -w
require 'net/http'

class GooglePage
  attr_reader :keyword, :pageNumber, :url, :googleResultPage, :maxPages, :position

  def initialize(keyword, url, googleUrl = "www.google.com", maxPages = 10, perPage = 10 )
    @keyword = keyword
    @googleUrl = googleUrl
    #om te voorkomen dat het script niet werkt als mensen de www. vergeten te vermelden in de URL zetten we deze er zelf in
    @googleUrl = "www." + googleUrl unless @googleUrl =~ /^www\.$/
    @url = url
    @perPage = perPage
    @maxPages = 2
    @pageNumber = 1
  end

  def checkGoogle
    getPage
    if @body.include?( @url )
      @position = getPosition
      return @pageNumber
    else
      @pageNumber += 1
      checkGoogle unless @pageNumber >= @maxPages
    end
  end

  def getPage
    @body = ""
    Net::HTTP.start( @googleUrl, 80 ) {|http|
      start = (@pageNumber - 1) * @perPage
      resultPage = "/search?q=#{@keyword.gsub( "\s", "+" )}&start=#{start}"
      @googleResultPage = "http://" + @googleUrl + resultPage
      req = Net::HTTP::Get.new( resultPage )
      @body += http.request( req ).body
    }
  end

  def getPosition
    position = 0
    @body.scan( /span class=a>(.*?)<\/span>/ ).each{ |w|
      position += 1
      return position if w[ 0 ] =~ /^#{@url}/
    }
  end
end

Goed, laten we eens gaan kijken wat dit allemaal betekent.

We beginnen met het maken van een class, GooglePage. Daarna gebruiken we attr_reader, om als het ware automatisch getters te genereren. Waarom dit handig is zullen we later zien.

Met def initialize maken we de constructor aan, deze methode wordt dus aangeroepen als we een nieuw object maken met deze klasse door GooglePage.new.

De rest van deze methode is weinig over te zeggen denk ik, gewoon wat variablen toewijzen lijkt me aardig duidelijk.

De methode checkGoogle wordt al wat spannender. Eerst vragen we de inhoud van de pagina op via getPage (hier over later meer), en daarna kijken we of de opgegeven URL voorkomt in de resultatenpagina. Zo ja, zoeken we de positie binnen de pagina op met getPosition wat ook gelijk de returnvalue is.

Als het niet zo is, gaan we naar de volgende pagina kijken en beginnen we gewoon overnieuw totdat we de site in de resultaten gevonden hebben of we voorbij pagina 10 zijn. Als je niet in de eerste 10 pagina’s staat, is het vaak toch al niet interessant meer. Dit nummer is echter aan te passen bij het aanmaken van het object.

getPage, deze methode opent een connectie met Google.nl en haalt de code op. Eventuele spaties in de keywords worden vervangen met een + om errors te voorkomen. ;)

Ten slotte getPosition. Hier proberen we te bepalen op welke positie op de pagina je ongeveer staat, het is wat buggy (met name als er meer resultaten van één site zijn), maar het geeft wel een indruk of je bovenin of onderin staat. We doen dit door te zoeken naar een bepaald stukje HTML (<span class a>) en de URL binnen deze span te bekijken. Komt deze niet overeen met de URL die we zoeken tellen we 1 op bij de positie en gaan we door tot we ‘m gevonden hebben.

Dan nog even een volledig voorbeeld met een paar leuke keywords genomen en ze in een hash gezet waar we vervolgens één voor één doorheen lopen. Ik zoek naar de URL digicted.nl, en gebruik Google.nl.

#!/usr/bin/env ruby -w
require 'net/http'

class GooglePage
  attr_reader :keyword, :pageNumber, :url, :googleResultPage, :maxPages, :position

  def initialize(keyword, url, googleUrl = "www.google.com", maxPages = 10, perPage = 10 )
    @keyword = keyword
    @googleUrl = googleUrl
    #om te voorkomen dat het script niet werkt als mensen de www. vergeten te vermelden in de URL zetten we deze er zelf in
    @googleUrl = "www." + googleUrl unless @googleUrl =~ /^www\.$/
    @url = url
    @perPage = perPage
    @maxPages = maxPages
    @pageNumber = 1
  end

  def checkGoogle
    getPage
    if @body.include?( @url )
      @position = getPosition
    else
      @pageNumber += 1
      checkGoogle unless @pageNumber >= @maxPages
    end
  end

  def getPage
    @body = ""
    Net::HTTP.start( @googleUrl, 80 ) {|http|
      start = (@pageNumber - 1) * @perPage
      resultPage = "/search?q=#{@keyword.gsub( "\s", "+" )}&start=#{start}"
      @googleResultPage = "http://" + @googleUrl + resultPage
      req = Net::HTTP::Get.new( resultPage )
      @body += http.request( req ).body
    }
  end

  def getPosition
    position = 0
    @body.scan( /span class=a>(.*?)<\/span>/ ).each{ |w|
      position += 1
      return position if w[ 0 ] =~ /^#{@url}/
    }
  end
end

["macbook pro review", "ruby", "macbook", "samsung 205bw", "er is er een jarig", "martijn engler", "weblog" ].each do |keyword|
  gp = GooglePage.new( keyword, "digicted.nl", "google.nl", 10 )
  if gp.checkGoogle
    puts "#{gp.url} gevonden op pagina #{gp.pageNumber} (positie #{gp.position}) voor keyword '#{gp.keyword}': #{gp.googleResultPage}"
  else
    puts "#{gp.url} staat niet in de eerste #{gp.maxPages} pagina's van Google voor het keyword '#{gp.keyword}'"
  end
end

De output is op het moment van schrijven als volgt:

digicted.nl gevonden op pagina 1 (positie 6) voor keyword 'macbook pro review': http://www.google.nl/search?q=macbook+pro+review&start=0
digicted.nl staat niet in de eerste 10 pagina's van Google voor het keyword 'ruby'
digicted.nl gevonden op pagina 5 (positie 6) voor keyword 'macbook': http://www.google.nl/search?q=macbook&start=40
digicted.nl gevonden op pagina 1 (positie 11) voor keyword 'samsung 205bw': http://www.google.nl/search?q=samsung+205bw&start=0
digicted.nl gevonden op pagina 4 (positie 11) voor keyword 'er is er een jarig': http://www.google.nl/search?q=er+is+er+een+jarig&start=30
digicted.nl gevonden op pagina 1 (positie 1) voor keyword 'martijn engler': http://www.google.nl/search?q=martijn+engler&start=0
digicted.nl staat niet in de eerste 10 pagina's van Google voor het keyword 'weblog'

Hyves opgeruimd

Monday, August 13th, 2007

Geïnspireerd door Social Networking, een update (volgens mij ben je echt een onuitputtelijke bron van inspiratie Sanne ;)) heb ik mijn Hyves eens goed opgeruimd. Andere sociale netwerken als Facebook, LinkedIn, Xing en Ecademy ben ik niet te vinden. Nou ja, Facebook wel, maar dat was eigenlijk alleen maar om één en ander over de API te kunnen bekijken.

De mensen die nu dus nog in mijn vriendenlijst op Hyves staan zijn mensen die ik ook echt daadwerkelijk volg (door face to face meetings, weblogs, IM-gesprekken etc.) en waarvan ik dus weet dat ze “OK” zijn.

Als je dus niet meer in mijn vriendenlijst staat, terwijl dat eerst wel zo was, kun je jezelf eens afvragen wanneer we elkaar voor het laatst gesproken hebben. Hebben we nog wel contact? Geef je me anders andere mogelijkheden om te weten dat je nog “OK” bent?

Dingen hoeven niet van één kant te komen, dus ik verwacht niet dat iedereen het contact met mij onderhoudt zonder dat ik er iets voor doe. Maar er waren gewoon veel mensen van wie ik niks meer hoor, gewoon omdat we bijvoorbeeld uit elkaar gegroeid zijn. Van deze mensen weet ik vaak ook niet waar ze tegenwoordig mee bezig zijn en of ze (nog) “OK” zijn.

Vanaf nu blijft mijn vriendenlijstje dan ook “clean” en komen er geen mensen in die ik niet kan “controleren” (dat klinkt enger dan het is, ik ga niemand stalken).

P.S. Kennelijk ben ik gelukkig wel “OK”, want ik zie mezelf nog in het lijstje van Sanne Roemen… ;)

Skaten op woensdagavond: Wednesday Night Skate

Thursday, August 9th, 2007

Nick op skates

Gisteren heb ik voor het eerst meegereden in de Wednesday Night Skate. Vorig jaar was ik ook al uitgenodigd door Nick (directeur en eigenaar van New Visual), maar werden er geen skates uitgeleend. En omdat ik ze zelf niet meer heb…

Dit keer was het echter droog en was ik ruim op tijd aanwezig (rond half 6 stonden we er, 6 uur ging het uitdelen beginnen) en wist ik mooi een maatje 43 te bemachtigen.

De eerste “stappen” op die dingen waren weer even wennen, ik heb de afgelopen 5 jaar namelijk niet meer op wieltjes gestaan. Niet veel later ging ik echter al aardig lekker (hoewel ik dat hobbeltje bij de Koopgoot even niet zag… ;-)) en heb ik de 17 kilometer mee kunnen rijden op de dingen.

Een paar opmerkingen:

  1. Het zou prettig zijn als er op één of andere manier aangegeven zou worden dat mensen plots gaan afremmen, dat heeft mij namelijk de meeste “oh, daar ging ik bijna”-situaties opgeleverd;
  2. Rijd een beetje door! ;-);
  3. Geef wat ruimte;
  4. Probeer elkaar niet te veel af te snijden;
  5. Waarom een pauze? Dat werkt alleen maar vermoeiend als je vervolgens door moet;
  6. Erg leuk om mee te rijden, gezellige sfeer over het algemeen en gewoon heerlijk om zo bezig te zijn!

Volgende week is de laatste avond van dit jaar en ik hoop er zeker weer bij te zijn. Als je een beetje in de buurt van Rotterdam woont raad ik je zeker aan te komen (en als je skates wilt lenen, wees echt daar rond 17.30/17.45) en ping me even van te voren of als je me ziet. :)

Eerst wat foto’s zien? Kijk op één van de links die op WNS staan.

Nummer 1 op technorati!

Sunday, August 5th, 2007

Op 1 staan in Technorati heeft toch wel iets moet ik zeggen.. En vandaag mag ik even meemaken hoe dat voelt! :-)

Digicted op nummer in Technorati

En andere mensen ook volgens about:blank en Foobr.

Ach, de schoonheid van falende techniek