vrijdag, december 23, 2005

Hacker Proof

Surfend over het web kwam ik een website tegen met het volgende plaatje:

En die linkt naar deze site: https://www.scanalert.com/RatingVerify?ref=www.mindconnection.com. Vet hoor! de website die ik bezoek is 99,9 % hackersafe!

Grappig initatief maar volgens mij volkomen nutteloos. Ik geloof het namelijk niet.. Hoe kunnen ze dagelijks testen dat een site save is? Hoe weten ze dat ze alles dicht hebben zitten? Welke tests voeren ze uit? Op welke punten testen ze?

Het ziet er vooral uit als een marketingtruck ipv een serieus beveiligingsinitatief. Overigens ga ik er vanuit dat een site hacker safe is. En niet omdat er een logo op staat, maar omdat men anders de tent wel kan opdoeken..

donderdag, december 22, 2005

Mooie plaatjes

23-5-2003 schreef ik op wasigh.com:
"Concept: digitaal foto-lijstje
Even doorgedacht op de digitale MP-3 speler gebouwd uit een laptop. De helft van de tijd hangt dat scherm aan de muur niets te doen. En dat is natuurlijk erg jammer.

Wat zou er dan mooier zijn als een soort digitaal fotolijstje? Via de ethernet verbinding upload je de foto's. Met de webbased interface kun je de volgorde aangeven en de overgangen opgeven en als een soort Digiporama worden de foto's 1 voor 1 getoond.

Je zou natuurlijk ook kunnen kiezen voor een diashow met afstandsbediening, of een vast foto, schilderij. Evt. kun je het nog koppelen aan een webcam en de mensen bij de deur opnemen. The sky is the limit! Ik heb nu al zin om te gaan knutselen!
23-05-2003"


En absoluut niet verbaasd ontdekte ik dit apparaat in de collectie van Philips.

Mooi, strak, simpel en van Philips mooier kan niet! Tja, Eindhoven he!

woensdag, december 14, 2005

De rust van een goede planning

Deadlines, een bron van veel spanning en stress. En morgen is er zo'n deadline

Het is nu 15:20 en ik ben klaar. Ik heb het op mijn sloffen gehaald. En weet je waarom? er lag een goede planning. Een planning die realistisch en goed was. Een planning die rust brengt in plaats van stress en dat is de enige goede planning.

Hoe kwam die planning zo goed?
- Voordat er een requirement geimplementeerd gaat worden wordt een gedegen tijdsinschatting gemaakt.
- Voordat een defect wordt opgelost wordt hij geanalyseerd
- Voordat je code opgeleverd wordt, wordt ie gerevieuwed (2 weten meer dan 1!)
- Voordat ik code mag wijzigen, moet ik eerst de requirements en de usecases wijzigen indien nodig.
- Voordat ik code mag opleveren Unittesten, unittesten, unittesten
- Voordat ik ook maar iets mag: testcase schrijven voor het testplan

En dat heeft tot gevolg dat ik max 50% van mijn tijd programmeer. Maar dan wel in 1 keer
goed zonder dat ik een ander deel van de code omvertrap.

Morgen is de MileStone af. Dan wordt de code bevroren, wordt er een build gemaakt en wordt er getest. Niet zomaar willekeurig, nee de testcases (+/- 500) worden uitgevoerd. Alle testen die falen worden toegewezen aan een programmeur en als daarna die fouten zijn opgelost wordt de volgende Milestone gemaakt. En dan? dan is het programma in Beta en gaat het naar een klant voor validatie testing.

Geen stress, deadline gehaald en een goed product.
Wie kan dat nou zeggen in de software wereld?

maandag, december 12, 2005

Leuk unittesten! totdat NUnit crashed!

Zoals het een goede SE-er betaamt doe ik aan unittesten. Nu had ik echter 1 probleempje. Mijn NUnit applicatie klapte er steeds uit met een:

"Fatal Execution Engine Error" van de CLR.
En dat is niet grappig. Die foutmelding betekent zoveel als: Hey er is iets misgegaan ergens in de CLR ik kap ermee!

Na veel gevloek en gezoek (ja verkeerde volgorde ;) ) ben ik achter het probleem gekomen. De foutmelding wordt gethrowed als de applicatie af wil sluiten en er nog user threads in blocked state zijn. Java killed die gewoon, .NET gooit een cryptische foutmelding. mmmm

Even een Thread.wait(0); op de juiste plaats en het probleem (lijkt?) opgelost. Mijn NUnit doet het weer :) en wat nog mooier is: door die Thread.wait(0) rond ie ineens ook al mijn testen succesvol af.
Ik ben een blije programmeur weer!

vrijdag, december 09, 2005

Vage Bug in .net Framework

Mijn collega kwam vandaag achter een vage bug in het .NET framework.

De volgende code:

Double.Parse(Double.MaxValue.ToString());


Geeft een error:
System.OverflowException : Value was either too large or too small for a Double.


Toch wel apart ;)

Hier staat een oplossing. Nee, geen familie ;)

woensdag, december 07, 2005

Philips, Eindhovens trots

Het overlijden van een 100-jarige. Het winnen van een voetbalwedstrijd. Het lijkt niet verbonden met elkaar. Maar dat wordt anders als je aan beide de naam Philips kunt verbinden. Frits Philips, meneer Frits, is helaas overleden.
Philips heeft Eindhoven gemaakt tot wat het nu is. En hoewel ik eigenlijk nooit in Eindhoven gewoond heb, voelt het toch als mijn stad. Een stad waar ik trots op ben. En ook trots ben ik op Philips, op meneer Frits en wat hij voor Eindhoven betekend heeft.
Mijn opa heeft bij Philips gewerkt, mijn vader heeft bij Philips gewerkt en ik heb bij Philips gewerkt. En van iedereen die in of rond Eindhoven woont heeft wel een vader, opa, oom of tante bij Philips gewerkt. Eindhoven is Philips, Philips is Eindhoven.
De mantra: "als het geen Philips is, kan het nooit iets zijn" zit er nog goed in. En zo is bijna alle apparatuur hier in mijn huis van Eindhovense makelij.

Eindhoven, de mooiste stad van Nederland. Een stad zonder opsmuk of mooi makerij. Een stad die zich laat zien zo als het leven is. Puur, hard en gemoedelijk. Nee voor Eindhovenaren zijn geen middeleeuwse vestigingswerken nodig om zicht iets te voelen. Geen grachten, geen duur doenerij. Doe maar gewoon, dat is voor Eindhoven genoeg.

Guus Meeuwis zong al: "Dan denk ik aan brabant, want daar brand nog licht". En dat licht? dat komt uit Eindhoven, daar stonden de fabrieken de oorsprong van de groei van de mooiste stad. de stad waar in het licht in de lichttoren nooit uit zal gaan.

En juist in die stad weet PSV in een voetbalwedstrijd te winnen en de 2e ronde Champions League te halen. En weer vult mijn hart zich met trots!

En eens te meer weet ik: Eindhoven en Philips dat is iets om trots op te zijn!

maandag, december 05, 2005

Veenendaal

Door een oude bekende is mij gevraagd iets moois te schrijven over Veenendaal.
En geloof me dat zou ik dolgraag willen. Echter heb ik niets gezien van Veenendaal.
Ja een stukje N233 een paar rotondes, een paar verkeerslichten, een spoorwegovergang en een industrieterrein. Vanuit het kantoor kijk op een weiland met een paar paarden en op de A12. Ik denk dat je zelf wel voor kunt stellen hoe mooi dat is :)

Daarnaast weet ik helemaal niets van Veenendaal. En ik kan ook niets opzoeken. Het internet is hier goed afgeschermd. Ik mag niet hotmailen, niet gmailen, niet marktplaatsen en niet frooglen.
Ach ja, dan kom ik iig toe aan waar ik voor betaald wordt: werken...

Saai hoor!

dinsdag, november 29, 2005

06:00

Zes uur, zo laat sta ik elke dag op. Als ik ergens aan moet wennen in mijn nieuwe baan is het dat wel. 5:25 gaat de wekker. Ik stel het moment nog een half uur uit, dan: douchen, aankleden, ontbijten en hup de auto in!

6:45 zit ik in de auto en elke dag rijd ik langs mijn oude werk. Waar alle lampen nog uit zijn: luiaards! om 8:00 uur ben ik op mijn werk. Om 12:00 een half uurtje pauze en om 17:30 stap ik weer in de auto om rond 18:30 mijn lieve vriendin weer te begroeten.
Koken, eten, charmed kijken en het is al weer 20:00! Nog 2 uurtjes te gaan voordat ik weer ga slapen.

Had me een paar jaar geleden verteld dat mijn week er zo uit zou zien en ik had je voor gek verklaard ;)

dinsdag, november 22, 2005

Software maken, zo moet het!

Ik zit nu vier dagen bij een klant en nu weet ik weer hoe je software moet maken. Ik ben via mijn werk gedetacheerd bij een klant die medische apparaten maakt. En het zal niemand verbazen dat er strenge eisen aan hun producten zitten. Een gigantisch programma, met 10 man wordt er aan gewerkt. En toch wordt de deadline zonder stress gehaald. Dat noem ik nog eens projectmanagement!

Hoe doen ze dat? Heel simpel: ze hebben een lijst opgesteld met requirements, en hebben heel veel use-cases beschreven. Bij een use-case kunnen weer supplemental requirements horen. Elke milestone worden een aantal requirements geimplementeerd met de bijbehorende use-cases. Hiervoor wordt via de "delphi" manier een requirement ingepland: een aantal mensen schatten onafhankelijk een requirement in. Deze worden naast elkaar gelegd en beschreven. Tijdens het programmeren heeft iedereen een takenlijst. Als je een taak af hebt bied je hem ter revieuw aan aan een andere programmeur. Als hij hem geodkeurt komt hij pas in de hoofd release.

Elke nacht wordt de laatste versie uitgebracht en automatisch gebuild en ge-unit test. Lukt het builden en lukken de Unit testen dan wordt dat de nieuwe versie. Mislukt het dan blijft de versie zoals het was. Zo heb je altijd een buildende en unit-geteste versie in je source control. Daarnaast hebben ze issues, die worden toegewezen aan programmeurs voor analyse. Bij de analyse wordt bepaald wat het probleem precies is en wat er moet gebeuren om het op te lossen. Daarna wordt pas besloten of en wanneer het probleem opgelost wordt (in welke milestone).

Per usecase zijn ook testcases gedefinieerd die alle requirements afdekken. Bij elks milestone release wordt de applicatie volgens die testcases getest. Het kan zijn dat je een change request krijgt en dan moet je eerst de requirements en use-cases aanpassen. Ook dat wordt gereviewed en moet goed gekeurd worden.

Het klinkt heel ingewikkeld, maar het werkt erg soepel. Alles is vooraf gespecificeerd. Alles wordt goed getest. En zomaar wijzigen is er niet bij. Alle issues worden bijgehouden en ingepland. Zo is het project managable en enige vorm van stress heb ik nog niet gezien :) en dat terwijl de volgende milestone over 4 weken af moet zijn en het geen simpel applicatie en wijzigingen zijn. Software maken? zo moet het!

(en ja een website is ook software ;) )

Website development

Als je ergens midden in zit zie je vaak goed de details. Maar je moet afstand nemen om de grote lijnen te zien. En op die manier heb ik na kunnen denken over het maken van een websites, maar nu van een afstand ;)

Hoewel UML prima geschikt is voor OO ontwikkeling is er geen model specifiek voor web-development. Terwijl er toch een groot aantal webapplicaties ontwikkeld worden. Een van de grootste krachten van UML zijn de use-cases. Samen met de klant kun je zo op een hoog abstract niveau de functionaliteit van een systeem bepalen. En als je eenmaal die overeenstemming hebt weet je iig dat je het over hetzelfde hebt.

Nu zijn use-cases voor een website niet erg handig, het gaat vaak niet alleen om wat een gebruiker kan, maar ook waar en hoe het eruit ziet. Daarom wordt er vaak een design gemaakt. En wordt het design leidend gemaakt in het ontwikkel proces. Echter is een design vaak toereikend. Uitzonderingssituaties worden vaak niet gevonden of ontworpen. Eigenlijk zou je het moeten combineren met use-cases. En zo blijf je bezig. Er zijn verschillende tools die het mogelijk maken om een website te ontwerpen. Maar die gaan vaak uit van een statische boomstructuur waarop je componenten als tekst, plaatjes, javascript en formulieren kunt zetten. Vaak hebben ze nog een optie om onderlinge links aan te geven. Maar daar houd het al snel op. Veel te gedetailleerd en absouluut niet flexibel of handig voor dynamische sites.

Soms moet je iets simpels maken om het beheersbeer te maken. Als je op een hoog niveau naar een website kijkt is het niets anders dan een aaneenschakeling van pagina's. En elke pagina heeft content en acties die de gebruiker op deze pagina uit kan voeren. Elke actie heeft een reactie op het systeem (anders is het geen actie).

Als je op deze manier met een klant om tafel gaat zitten kun je per pagina bepalen wat er op moet komen en wat welke acties de gebruiker kan doen. Per actie beschrijf je kort wat er gebeurd. Daarna kan dit model dienst doen als bron voor het design, als uitgangspunt bij bepalen van de usecases en calculatie van de kosten.

woensdag, november 16, 2005

Wisten jullie dat?

Ja ik blijf posten vandaag ;)

Maar wisten jullie dat design patterns eigenlijk gebaseerd zijn op de idee-en van een echte architect?

Vast niet ;).
Zijn motto: "Je moet een gebouw laten ontwerpen door de mensen die er in moeten wonen/werken."
Ik kom hier later nog uitgebreid op terug.

'SQL' in je code, wel doen!

Ondanks dat ik grote tegenstander ben van het opbouwen van SQL strings in je code door een hoop string concats. En een groot voorstander van OR mappers zoals NHibernate schrijf ik nu toch een blog met de titel: "'SQL' in je code wel doen!" raar he ;)

Maar kijk eens naar deze code:

public void Linq1()
{
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
var lowNums =
from n in numbers
where n < 5
select n;

Console.WriteLine("Numbers < 5:");
foreach (var x in lowNums) {
Console.WriteLine(x);
}
}
ResultNumbers < 5:
4
1
3
2
0


Vaag he, maar wel mooi! Niet meer handmatig door je array lopen, maar gewoon zeggen wat je wilt! In C# statements.. Nu is dit nog een simpel voorbeeld maar hier: http://msdn.microsoft.com/vcsharp/future/linqsamples/ staan er nog 100 meer.

We noemen het: Linq hou het in de gaten!

Blog comments

Vanwege blog spamming heb ik een image check aangezet op het plaatsen van commentaar. Dat neemt niet weg dat ik de vele reacties niet waardeer! Ik waardeer het zelfs heel erg!

Blijf je commentaren, suggesties en tips plaatsen!
Mocht je interressante onderwerpen voor een blog hebben, kun je me natuurlijk ook altijd mailen :)

edit: typo, tnx Jeroen ;)

Refactoring in Visual Studio 2005

We kennen het allemaal wel, je krijgt code van iemand anders die je aan moet passen. Of misschien wel code van jezelf van een tijdje terug en je schrikt je helemaal lam. Naamgeving van variabelen waar je niets mee kunt. Method body's die meerder a4-tjes beslaan. Slecht gebruik van interfaces en OO design.

Nu kun je met find & replace een boel rechttrekken, echter ben je dan nooit zeker dat je alles te pakken hebt en of de code nog goed werkt. Als je dan compiled en je krijgt 150 compile erros zakt de moed je in de schoenen. Nu heeft 1 van de grootste in de OO wereld dit probleem ook onderkend en refactoring bedacht.

En wat doet Microsoft heel slim? Ze bouwen refactoring in in Visual Studio.net 2005. In VS2005 kun je nu met een paar muisklikken bijvoorbeeld: method signatures veranderen; methods extraheren (selecteer een aantal regels code in een method, maak daar automatisch een andere method van en vervang die regels code in de originele method voor de aanroep naar de nieuwe method); variabelen hernoemen en interfaces extraheren.

Al met al een grote stap voorwaarts. Met alle andere verbeteringen van C# 2.0 kan ik alleen maar zeggen: Snel overstappen je bent het waard!

dinsdag, november 15, 2005

Attributes de verborgen kracht van C#

Iedereen die programmeert in C# heeft ze vast wel gezien: attributes. Stukjes metadate bij methods om bepaalde functionaliteit aan te geven. Of om bepaalde zaken mogelijk te maken bijvoorbeeld [dllImport("kernel32.dll")] [browsable(true)] en nog meer dat soort zaken.

Via NUnit kwam ik erachter dat je ook zelf attributes kunt maken en gebruiken in je code. Zo gebruikt NUnit [TestCase] en [Test] om aan te geven dat een bepaalde class testen bevat. En welke methodes dan deze testen zijn. Maar door een gebrek aan tijd heb ik nooit meer naar gekeken. Tot nu. Bij het doorlezen van de features van C# 2.0 kwam ik deze link tegen:
http://msdn2.microsoft.com/en-us/library/z0w1kczw(en-US,VS.80).aspx

Wat blijkt, eigenlijk is het heel erg simpel. Je kunt je eigen types aanmaken en plaatsen in je code. Daarna kun je via Reflectie de attributen van een class of een method uitlezen. Wat dus erg handig is voor late-binding van code. Zo kun je makkelijk een framework maken en zorgen dat het met toekomstige DLL's kan werken zonder dat je een bepaalde interface afdwingt een erg flexibel en krachtige oplossing is. Nee zo dom zijn ze nog niet bij Microsoft ;)

Overigens vind ik de generics implementatie van C# 2.0 ook erg krachtig. Doordat je af kunt dwingen dat een Object die je gebruikt van een bepaalde base class moet zijn heb je toch de beschikking over de methods van die baseclass. Nu kun je natuurlijk zeggen dat je daar geen generics voor nodig hebt. Inderdaad door een class te maken die de baseclass gebruikt dwing je dat ook af en heb je ook beschikking over de methods van de baseclass. Echter verlies je dan weer het grote voordeel van Generics: het niet meer hoeven casten van objecten naar het juiste type (en daarmee @ runtime moet controleren of de cast valid is) Met generics kan dat allemaal @ Compiletime waarmee je fouten eerder zult zien :)

BruuD goes Vegas!

Jaja,

Goed voorbeeld doet goed volgen: mijn ex-collega BruuD is ook aan het bloggen geslagen: http://bruud.blogspot.com/

Graag horen we al je succesverhalen Ruud!

maandag, november 14, 2005

De frustratie van een workaround..

Afgelopen weekend ben ik druk bezig geweest met het programmeren in Delpi, en hoewel het niet mijn "moedertaal" is. Kan ik er toch redelijk mee uit de voeten al zeg ik het zelf...

Het enige wat ik niet voor elkaar kreeg was het omzetten van een Single (zeg maar float) naar een integer. Uiteindelijk na heel veel denken en googlen heb ik maar een workaround geimplementeerd: Ik converteer de single naar een string. Daarna zoek ik de punt en kap alles na de punt eraf. Tot slot converteer de string naar een int. Werkte perfect totdat...

Totdat ik het programma op een andere pc ging testen. Elke keer kreeg ik de foutmelding: '"40,0000033" could not be converted to an integer'. Na ruim een uur zoeken zag ik het. Ipv een punt werd er hier een komma gebruikt als decimaal scheidingsteken. Na de method aangepast te hebben zodat hij of zocht op een punt of op een komma. Werkte alles naar behoren... Hoe een workaround frustrerend kan zijn...

p.s. Ik ben nog steeds op zoek naar een goede manier op van single naar een int te gaan...

vrijdag, november 11, 2005

C#? F#!

Altijd druk bezig met het bijhouden van de nieuwste trends:
F# http://blogs.msdn.com/dsyme/ een nieuwe krachtige taal voor het .NET platform. Wat je ermee kan? Geen idee! Maar daar komen we wel achter!

Op je handen tellen voor gevorderden.

Tot 5 tellen op 1 hand kunnen we allemaal.
Tot 10 tellen op 2 handen kunnen we ook.
Maar tot 32 op 1 hand en tot 1024 op 2 handen?

Dat is op je handen tellen voor gevorderden... Rara hoe doe je dat?

(hint)

Tijd voor Tijd

Kortgeleden ben ik mijn nieuwe baan begonnen bij een detacheerder in de techniek branche. Leuke baan, veel verschillende klanten & veel verschillende kansen om bij te leren zowel op technisch als op persoonlijk vlak.

Waar ik echter niet bij stil heb gestaan: soms heb je geen job. En toch moet je je tijd nuttig besteden. Na alle nieuwsites, alle strips, online games en forums bezocht te hebben wil je toch iets nuttigs doen. En wat blijkt de wereld van de informatica heeft niet stilgestaan. In de 2 jaar dat ik van school ben is er veel veranderd. Zoals de introductie van UML 2.0 en CMMi. Om nog maar te zwijgen van .NET 2.0 en Java 1.5.

Daarnaast heb ik flink veel tijd om domein kennis op te doen, en nieuwe collega's te leren kennen. Ik moet wel toegeven het vraagt een hoop discipline om bezig te blijven. Maar met een beetje geluk heb ik binnenkort een job en kan ik weer doen waar ik voor aangenomen ben: programmeren.

In de tussentijd kan ik in mijn hoofd rustig de applicaties analyseren die ik nog wil bouwen en denken aan "the movies" die vandaag in de winkel ligt (Kopen!). En natuurlijk mijn blog vullen met posts als deze ;)

maandag, november 07, 2005

Mindmapper

Al langer loop ik met een idee in mijn hoofd. Ik wil een tool maken waarmee je idee-en in je hoofd kunt uittekenen, opslaan, aanpassen en kunt doorgeven aan iemand anders. Maar bij gebrek aan zo'n tool zal het me niet lukken een dergelijke tool te maken! ziehier een klassiek voorbeeld van het kip-ei probleem.

Surfend over het internet kwam ik echter op dit tooltje uit: http://www.mindjet.com/eu/products/index.php MindMapper! Hiermee kun je je gedachten en brainstorm sessies visualiseren! Ik moet zeggen het ziet er interressant uit. Ik ga het zeker proberen!

donderdag, oktober 20, 2005

Let's go to the movies

Binnenkort kom er een briljant spel op de markt. En omdat ik bang ben dat ik niet iedereen er genoeg mee lastig gevallen heb ga ik er toch ook maar even over bloggen.

De naam: “the movies” een echte “the sims” killer. Je begint in de jaren 20 van de vorige eeuw en je speelt de baas over een filmstudio. Daar het schrijven van scripts, het bouwen van sets en het aannemen van mensen maak je films. Met deze films verdien je respect en als het goed is ook geld. Daarmee kun je je studio verder uitbreiden. Tot en met het jaar 2005.

Je kunt de scripts automatisch laten genereren maar je kunt ze ook zelf maken, en het mooiste: inclusief lip-sync en ondertiteling. Daarna kun je ze als avi exporteren en op het web zetten. Zie hier: armed and rabid. Daarnaast hebben ze een leuk tooltje uitgebracht om alvast acteurs te ontwerpen: starmaker. Erg grappig om daar mee aan de gang te gaan.

Ik kan iig niet wachten

donderdag, september 15, 2005

Linkmania

Hier een overzicht van andere links die ik tegenkwam de afgelopen dagen:


Lego

Heb jij het kind nog in je? Was jij vroeger al de lego-koning van de klas? Dan is dit echt iets voor jou!: www.legofactory.com. Je download het 3D lego bouw programma . Je klikt en sleept een prachtig bouwwerk bij elkaar, met alle mogelijke blokjes die je maar kunt verzinnen, en daarna bestel je het! Je krijgt de steentjes thuis gestuurd en de bouw instructie is te downloaden in PDF formaat. Dat noem ik nog eens een service! En iedereen kan daarna je model downloaden. Wat dacht je bijvoorbeeld van de BigBen?

De mooiste ontwerpen worden als lego doos ontsterfelijk. Doe het niet voor jezelf! doe het voor je kinderen!

zaterdag, september 03, 2005

blogverslaafd

he hallo!

Welkom bij mij 1e blog op blogger.com. Hoewel dit mijn 1e post is hier ben ik ondertussen al redelijk blogverslaafd. Bij mijn huidige werkgever heb ik het record. En de nummer 2 is mijlenver verwijderd. Echter ga ik wisselen van werkgever en ik wil toch blijven bloggen.

Daarom deze nieuwe blog.
Come back anytime!