Archive for August, 2009

¾

Wednesday, August 26th, 2009

Het is kwart voor zeven als ik de oto het parkeerterein op rijd. Drie kwartier voor de start. Voetbaljeugd wordt naar de training gebracht, en oudere jongeren (of was het nu andersom) beginnen hun hardlooptraining. Ik laad mijn monster uit. Mijn disk die ik gisteren terug kreeg na een reparatie en in allerijl nog van een nieuwe tube kon laten voorzien (via deze weg, mijn dank is groot) kan eindelijk weer door mijn monster worden aangevuurd.

Het is niet alleen de snelheid, maar ook vooral het aangezicht van mijn monster. Zonder disk lijkt ze op een model op leeftijd in een te kort rokje,  zonder make-up. Mét is ze de femme fatale die met je kloten speelt en je reduceert tot een testosteronbom die tot alles bereid is om maar in haar nabijheid te mogen zijn. Een verschil van dag en nacht dus.

Terwijl ik haar zo sta te bewonderen krijgen we gezelschap. Een bekende (ken je iemand als je alleen internetcontact hebt?) parkeert naast ons. Hij is een monstertje voor zichzelf  aan het bouwen en is nu voor driekwart klaar: alleen nog trappers en een stuur. Met dat laatste kan ik hem helpen. En ik ben de beroerdste niet, dat doe ik dan ook.

Maar genoeg gepraat, er moet getrapt worden. Het tijdritmantra begint in het hoofd te malen en ik rijd warm. De disk houd zich goed, en het voelt geweldig. Ik ga knallen en een dik p.r. rijden, ik weet het zeker.

Vier, drie… Start! Daar gaan we weer. Trappen, trappen, trappen. De meters geven rode en soms okerkleurige waarden aan, alles doet pijn en het landschap schiet voorbij. Net als een paar toerrijders, een vrouw met een hond, en een paaltje langs de weg. Je laat het allemaal achter je. Gunt het geen blik waardig. Zonde van de tijd. Kostbare tijd.

Na het keerpunt gaat de snelheid omhoog. De wind kent vele gezichten. Nu is het mijn vriend. De vijftig wordt even aangetikt. De hartslagmeter knippert. Meer dan tien slagen boven omslag. Zoef, zoef, zoef. Het vurrukkulluke gevoel dat je krijgt als het écht hard gaat. Het maakt zich meester van mij.

BANG! Bonk, bonk, bonk, bonk. Een steen lijkt in mijn ooghoek weg te schieten. De hersenen registreren heeeeel langzaaaaaam dat er iets mis is. Lek. Shit. Op driekwart van de route sta ik met mijn goede gedrag en een lekke band om mijn net gerepareerde disk aan de kant. Einde oefening.

Zo’n hekel als windsurfers aan zwemmen hebben, zo’n hekel hebben wielrenners aan lopen. Toch zit er niet anders op. Blootsvoets over het ruwe asfalt. Gelukkig komt op driekwart mijn voettocht de bekende aangereden. We leggen mijn gewonde monster achterin en rijden richting finish.

Mijn eerste DNF tijdens een tijdrit. Het voelde naar. Gelukkig lag er thuis een hele kaaspizza op me te wachten. Totdat m’n liefje me vragend aankeek: mag ik ook een kwart?

Roman numerals

Thursday, August 20th, 2009

Sometimes, you write a piece of code you’re proud of. Because it’s a clever, elegant, or just fun. The snippet I post here is a bit of all, at least in my opinion.

/// <summary>Converts an System.Int32 to Roman number strings.
/// <remarks>http://en.wikipedia.org/wiki/Roman_numerals</remarks>
/// </summary>
/// <param name="number">Number to convert.</param>
/// <returns>Formatted Roman number.</returns>
public static string ToFormattedRomanNumber(int number)
{
	if (number <= 0 || number > 3999)
	{
		throw new ArgumentOutOfRangeException("With the default ASCII set only Roman numerals between 1 and 4000 can be represented.");
	}
	//                 1,   5,   10,  50,  100, 500, 1000.
	string[] order = { "I", "V", "X", "L", "C", "D", "M" };
	int pointer = 0;
	int digits = number;
	string result = string.Empty;

	while (digits > 0)
	{
		int digit = digits % 10;
		switch (digit)
		{
			case 0: break;
			case 1: result = string.Format(
				"{1}{0}", result, order[pointer]);
				break;
			case 2: result = string.Format(
				"{1}{1}{0}", result, order[pointer]);
				break;
			case 3: result = string.Format(
				"{1}{1}{1}{0}", result, order[pointer]);
				break;
			case 4: result = string.Format(
				"{1}{2}{0}", result, order[pointer], order[pointer + 1]);
				break;
			case 5: result = string.Format(
				"{1}{0}", result, order[pointer + 1]);
				break;
			case 6: result = string.Format(
				"{2}{1}{0}", result, order[pointer], order[pointer + 1]);
				break;
			case 7: result = string.Format(
				"{2}{1}{1}{0}", result, order[pointer], order[pointer + 1]);
				break;
			case 8: result = string.Format(
				"{2}{1}{1}{1}{0}", result, order[pointer], order[pointer + 1]);
				break;
			case 9: result = string.Format(
				"{1}{2}{0}", result, order[pointer], order[pointer + 2]);
				break;
		}
		digits = digits / 10;
		pointer = pointer + 2;
	}
	return result;
}

Paranoia

Wednesday, August 19th, 2009

Wanneer ik als kind alleen op de fiets zat, fantaseerde ik dat ik vooruit was in koers, en het peloton me op de hielen zat. Het besef dat ik geen sprinter was zat er vroeg in dus ik móest mijn uit de duim gezogen opponenten voorblijven. Nu weerhield niets of niemand me er van om mijn peloton op zoveel afstand fietsen als ik zelf wilde. En om misverstanden te voorkomen: het was niet Miguel Indurain, maar ik die in 1991 het geel Parijs binnenbracht. Met een ronde voorsprong op het peloton finishde hij op de Avenue des Champs-Élysées. En dat al elfjarige leeftijd.

Het is een warme woensdagavond. Ik laad mijn tt-monster uit. Gelukkig deed m’n TomTom het, want een kompas zal hier niet werken. Ik kijk om me heen. Mijn ogen speuren naar de beer zonder elleboog. Een doorgaans zachtaardig exemplaar, maar je weet maar nooit. Het blijft een roofdier.

Er zijn veel bekende gezichten en grote namen. Zoveel dat ik ze bijna uit mijn handen zou laten vallen, ware het niet dat het niet mijn stijl is dat te doen. Ik word meerdere malen gegroet door mensen van wie ik geen idee hebben wie ze zijn. Ik groet vriendelijk terug. Af en toe kijk ik om? Ze zullen toch wel mij bedoelen? Of zou hier nog een andere Corniel rondlopen?

Met de beer en een zelfbenoemd onderpresterend windscherm rijd ik in. Geen idee waarom. De motor kookt als vanzelf met deze hitte. Aan de andere kant: de rijwind geeft weer enige verkoeling. Na het inrijden ga ik over op Spaanse opwarmtechnieken. Voor mij voldoet het. Relaxt kijk in naar de dwazen op hun rollerbanken en Tacxen.

Als mijn naam door de speaker wordt omgeroepen meld ik me aan de start. Voor me staan twee Swabo-klasbakken. Die ga ik niet inhalen. Achter me sluiten mensen aan die ik hoop achter mij te kunnen houden. Ik kijk nog eens, en prent ze goed in mijn geheugen. Noway zeg ik tegen mezelf.

Vijf, vier, drie, twee, een, go! Met de duivel op mijn hielen neem ik de benen. De hitte slaat me hard in het gezicht. De hartslag loop bijna direct op tot boven het omslagpunt.

Realiteitszin komt met de jaren – zeg men – dus inmiddels weet ik dat achter­volgings­waanzin niet betekend dat ik níet achtervolgd wordt. Nadat ik de eerste bocht heb genomen wordt het gevoel dat ik word achtervolgd zo sterk, dat ik kort achterom kijk. Een halvegare wielertoerist zit fluitend in mijn wiel. De duivel in z’n zwarte snelpak.

Ik weet niet wat ik van moet en wil denken. Denken gaat sowieso niet zo goed. Ik besluit hem te negeren. Het tijdritmantra neemt bezit van me: trappen, trappen, trappen, trappen (bis).

Zou hij pijnlijden? Ik ga toch best hard? Hij is vast alleen aan het warmrijden. De duivel lacht me vast uit. Vindt me een stumper, met een armzalig lage snelheid. Hij zag ook hoe ik door een renner werd ingehaald alsof ik stil stond. Negeer de duivel. Negeer de duivel.Trappen, trappen, trappen, trappen (bis).

De bochten gaan prima. Ze zijn allen ruim en liggend te nemen. Tussen mijn benen door en aan mijn slagschaduw zie ik dat de duivel nog steeds in mijn wielen zit. Eenmaal hoor ik hem hardop iets zeggen. Ik versta het niet. Ik wens er niet naar te luisteren: stay away from the dark side (..)

De benen doen pijn en mijn hoofd is defintief met mijn verstand aan de haal. Ik smacht naar de finish streep. Is het nog ver? Mijn hartslag klimt op naar tien slagen boven omslag. Ik voel me opgejaagd, dat is positief. Hè? De duivel is verdwenen. Mijn slagschaduw wordt niet meer vergezeld. Ik had het nog niet gemerkt. Ik heb geen tijd om er over na te denken. De finish wacht op niemand, en de stopwatch van de tijdwaarnemer al helemaal niet. Medogenlozer dan Christian Prudhomme en zijn entourage.

De teller voor mijn snuffert nadert de dertig minuten. Daaronder blijven zou een presatie zijn voor me. Het lukt niet. Negentien tellen. Ik rijd uit. Probeer uit te rekenen hoe snel ik ben gegaan: Het parkoers was, euh, 22 km. Toch? Met 30 minuten dus 44 km/u. Dat gaat. Die 19 seconden is een derde van een minuut en dat is dan weer een dertigste van de uitgangsnelheid dus een negende. Dus een negende van 44 km/u, dat is 39 km/u. Hmm, da klopt niet. wat Doe ik fout. Het zal wel 43,5 km/u zijn dan, maar dat is te hard. Klot het rondje dan niet? Mijn hoofd kookt. Het lukt me niet. (Weer bij zinnen: 21 km in 30:19 is 1/90e minder dan 42 km/u is dus ongeveer 41,5 km/u)

Ik fiets terug. Als ik mijn rugnummer inlever wordt er gevraagd:
– ben je junior?
Verschrikt kijk ik achterom. Er moet een vergissing in het spel zijn. Er staat niemand.

WTF (2)

Friday, August 14th, 2009

While reviewing some code for a project of our company I found this:

public override void Redirect(PipelineContext pipelineContext)
{
	string linkcp = "";
	if (linkcp == null || linkcp == "" || linkcp.Length == 0)
		linkcp = "default.aspx";

	pipelineContext.Response.Redirect(linkcp);
}

It first drew my attention because of the if-statement (testing a string being not null or string.Empty three times) and its missing brackets. But it surprised – well, shocked – me because the variable that was assigned, and validated afterwords directly. The writer of this piece of WTF declared that it was generated, and needed some custom implementation…

I couldn’t help, but think why not – in that case – do it this way:

public override void Redirect(PipelineContext pipelineContext)
{
	string linkcp = string.Empty;
	// TODO: implement logic.
	if (string.IsNullOrEmpty(linkcp))
	{
		linkcp = "~/default.aspx";
	}
	pipelineContext.Response.Redirect(linkcp);
}

or, if should fail while not implemented yet

public override void Redirect(PipelineContext pipelineContext)
{
	public override void Redirect(PipelineContext pipelineContext)
	{
		throw new NotImplementedException("TODO: implement logic.");
		//string linkcp = string.Empty;
		//if (string.IsNullOrEmpty(linkcp))
		//{
		//	linkcp = "~/default.aspx";
		//}
		//pipelineContext.Response.Redirect(linkcp);
	}
}

What is it about writing comments that my fellow developers seems to dislike that much? It would make reading and understanding code so much easier…