Even tussendoor

De leukste momenten in development zijn die waarin je met een minimum aan code een maximum aan impact kan genereren.


E-voting… moeilijk?

Minister van Binnenlandse Zaken De Padt komt op de proppen met een nieuw (al wat gedateerd) idee: online stemmen, of zoals de media het blijkbaar het liefst zien: e-voting. De minister ziet vooral problemen op het vlak van beveiliging en de geheimhouding van de stemming. Ik vraag me ondertussen al jaren af waar het probleem zit. Want als ik er even over nadenk… Eens zien.

Via internet of IRL

Het systeem moet vermijden dat een kiezer eerst het stemhokje opzoekt om daarna via het internet nog eens te stemmen. Of omgekeerd. Zorg er dus voor dat de bijzitters in het stemlokaal de kiezers kunnen registreren in het systeem (of nakijken of die al gestemd heeft). Andere oplossing: zorg ervoor dat mensen op voorhand aangeven op welke manier ze hun stem willen uitbrengen.

Beveiliging

Alle verkeer verloopt over SSL. De kiezer logt thuis in met zijn e-ID apparaat (als we het toch hebben kunnen we er net zo goed gebruik van maken) op de website. Tenzij de implementatie van de authenticatie via e-ID gebrekkig is zie ik geen probleem op de verbinding tussen kiezer en website. Natuurlijk moet die website niet gehost worden vanop een server die in het midden van de Grote Markt staat. Nee, de server wordt bewaakt. Uzi’s, bazooka’s, tanks. Dat soort beveiliging.

Le database

België telt een dikke tien miljoen inwoners. Dat is al voldoende reden om een beetje na te denken over het database model. Eerste onderdeel: verkiezingen. Gaat het om Vlaamse, Europese, Belgische of gemeenteraadsverkiezingen? Komend weekend gaat het om Vlaamse en Europese, dus moet de kiezer bij beide één of meerdere bolletjes kleuren.

Zo komen we meteen bij de vier volgende onderdelen: lijsten, kiescolleges, kieskringen en kieskantons. Lijsten met kandidaten zijn gebonden aan een kieskring. Kiescolleges lijken niets meer te zijn dan een superset van kieskringen. Kieskantons zijn, volgens Wikipedia, een groep van gemeenten binnen een kieskring met een kantonhoofdbureau. Gemeenten dus. Iedere Belg moet in een bepaalde gemeente stemmen. Belgen in het buitenland vormen een uitzondering, maar kunnen we classificeren onder een gemeente “buitenland” binnen een bepaalde kieskring en kiescollege.

Mijn excuses voor het aframmelen van de verschillende entiteiten, maar hier zitten geen problemen. Op enkele dagen tijd heb je een applicatie waarin je die data perfect kan beheren. Akkoord?

Het stemmen

Nadat de kiezer aangemeld is, kan hij kiezen voor welke verkiezing hij zijn stem wil uitbrengen. Hier krijgt hij dan een overzicht van alle lijsten van zijn kieskring te zien, met de optie om op de lijst te stemmen of om de lijst in detail te bekijken om zo te kunnen stemmen voor één of meerdere kandidaten. Wanneer hij klaar is wordt hij teruggebracht naar het overzichtsscherm om zijn keuze te maken voor de andere verkiezingen.

Eens voor alle verkiezingen een keuze is gemaakt (waarbij we de optie blanco niet vergeten) kan hij zijn stem bevestigen. Op dat moment worden zijn keuzes opgeslagen (zonder link naar de kiezer - wegens geheimhouding van de stemming) en wordt in de tabel “kiezers” de flag “gestemd” gezet. Als hij zich nu opnieuw aanbiedt op de site zal het systeem dit weigeren. In het stemlokaal zal de bijzitter kunnen zien dat hij reeds gestemd heeft - desnoods omdat het systeem het duidelijk maakt wanneer de kiezer geregistreerd wordt.

Zo kan iedereen zijn stem dus 1 maal uitbrengen op de gewenste manier.

Sca-a-a-aling

Het grootste probleem: hoe zorg je ervoor dat het systeem het niet begeeft wanneer iedereen massaal zijn stem begint uit te brengen?

  1. Spreid de periode waarbinnen gestemd kan worden. Waarom zou je niet vanaf maandag kunnen stemmen?
  2. Spreid de servers: zorg ervoor dat er “eentje” is per kiescollege, -kring of -kanton.

Stemmen tellen

SQL. Export naar CSV? Excel? XML? You name it.

Conclusie

Behalve de scaling… toch niet zo moeilijk lijkt me? Voor een uitgebreid gesprek en analyse mag het ministerie altijd contact opnemen met ons. Dan zullen we ongetwijfeld te weten komen waar de echte problemen zich bevinden, want ik kan me niet voorstellen dat het zo eenvoudig is als het hier lijkt.

Dit artikel werd opgenomen in ontwikkeling.


Morse 1.0

Het heeft lang geduurd, en eigenlijk is er de afgelopen maanden weinig aan veranderd, maar Morse 1.0 is klaar.

Mijn oprechte dank aan de testers. Het is laat en ik heb even geen zin om alle namen te verzamelen, maar als je dit leest mag je altijd even roepen en dan ik voeg je naam en URL toe op de site.

Dit artikel werd opgenomen in ontwikkeling, software.


Zo mini

Mijn Mac Mini staat hier nu al een tijdje. In stilte. Werkend, maar o zo stil.

Het is leuk werken en leuk spelen. Het meest bizarre speelgoed is Objective-C; de eerste C-gebaseerde taal die me bij momenten ontzettend vreemd voorkomt, om dan plotseling weer haar intrigerende zijde te tonen. Vreemd en intrigerend. Ik ben er nog niet uit of dat goede eigenschappen zijn van een programmeertaal.

Dit artikel werd opgenomen in ontwikkeling, software.


Even tussendoor

*tumbleweed*


De lelijke Linux interface

Ik ben een oppervlakkig mens. De belangrijkste reden waarom ik wegblijf van Linux is de interface. Al sinds de eerste keer dat ik met Linux in aanraking kwam zat er iets grondigs fout met de fonts: het was alsof Comic Sans het standaard lettertype was. De window decorators in KDE lieten het trouwens alleen maar meer lijken op een OS dat ontworpen was door een bende kleuters.

Dat ik toen KDE verkoos boven Gnome zal je duidelijk maken wat ik daar van dacht. Oh ja, er waren en zijn nog een dozijn andere window managers waarvan de default themes werden ontworpen door fanaten van B-films in het scifi-genre. Het was allemaal onvoldoende om mij te overtuigen van de meerwaarde.

Dat was toen

Nu ik een nieuwe job heb bij een nieuwe werkgever, heb ik ook een nieuwe laptop met een nieuw besturingssysteem: Windows Vista. De meningen over Vista zijn vooral negatief, maar ernstige problemen zijn mij tot nu toe bespaard gebleven. De problemen die ik heb vragen echter om een ander besturingssysteem. Het was tijd om - enigszins met tegenzin - Ubuntu nog eens boven te halen.

De interface blijft standaard nogal uit de kluiten gewassen, opgeblazen, onevenwichtig. En het standaard lettertype is gewoon verkeerd: de breedte en hoogte van de letters wijken stevig van elkaar af. Hoog tijd om wat anders te voorzien.

Gnome opwaarderen

Gnome on Dust

Bij Gnome Look vind je voldoende themes maar de algemene kwaliteit blijft vrij pover. Gelukkig is er het Dust theme. Koppel daar dan nog eens een beter font aan - een Lucida Grande bijvoorbeeld - en je krijgt een UI die qua lickability moeilijk te overtreffen valt met Windows Vista.

Ik ben echter totaal verloren als mijn Alt + Spatie in het luchtledige eindigt. Launchy is mijn must-have tool op Windows die me toelaat om snel applicaties te starten. Aangezien de Linux-versie nog niet op punt staat, doe ik het voorlopig met Deskbar-Applet. Oh, en Morse. Morse moet ik hebben. De AIR runtime voor Linux is nog niet helemaal in orde, maar het werkt grotendeels zoals op Windows en OS X.

Et alors?

Hoe zit het met de andere applicaties die ik vaak gebruik op Windows?

  • Firefox: check
  • VLC: check
  • FileZilla: check
  • Komodo Edit: check
  • Eclipse, IntelliJ, Tomcat, Maven en Ant: c-c-c-c-check
  • Notepad++: euh, nee. Maar deze heb ik niet nodig aangezien gedit ruimschoots volstaat en ik Komodo Edit heb voor al het andere.

Windows 7 mag zich reppen.

Dit artikel werd opgenomen in usability.


Even tussendoor

Ceci n’est pas un original.

Ik wacht op een nieuw product van Google dat gelijkaardige sites toont. Niet op basis van inhoud maar op basis van styling. That ought to be fun!


Even tussendoor

Ok, one more time: sites kopiëren doen we niet! Knoop het in uw oren, daar bij Ghibli in Rillaar.


PHP, PDO en geen resultaten

Verschillende versies, verschillende kenmerken. Verschillende redenen tot frustratie. Neem aan dat de volgende query voor de juiste waarde van :x (bijvoorbeeld 10) drie rijen teruggeeft.


SELECT a, b, c FROM Abc WHERE a < :x AND b > :x

Neem nu aan dat je volgende code gebruikt om die rijen op te halen in PHP, met behulp van PDO:


$sql = "SELECT 'AbcClass', a, b, c FROM Abc WHERE a < :x AND b > :x";
$statement = $pdo->prepare($sql);
$statement->bindParam(':x', 10);
$results = array();
if ($statement->execute()) {
    while ($result = $statement->fetch(PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE)) {
        $results[] = $result;
    }
}

Hoeveel rijen zal je terugkrijgen? Het antwoord: het hangt af van de versie van PHP die je gebruikt. Op mijn computer is dat 5.2.0 en daar krijg ik de 3 rijen terug die ik verwacht. Op de server die me met het probleem confronteerde is dat echter 5.2.6 (rejoice: een betaalbare Belgische host met een degelijke PHP 5 installatie; pigs do fly). En wat blijkt, sinds PHP 5.2.1, wordt in dit voorbeeld 10 enkel de eerste keer aan :x gebonden.

Dus moet het dit worden:


$sql = "SELECT 'AbcClass', a, b, c FROM Abc WHERE a < :x AND b > :y";
$statement = $pdo->prepare($sql);
$statement->bindParam(':x', 10);
$statement->bindParam(':y', 10);
$results = array();
if ($statement->execute()) {
    while ($result = $statement->fetch(PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE)) {
        $results[] = $result;
    }
}

Misschien zal ik toch eens de tijd moeten nemen om PHP op mijn computer te updaten om dit soort toestanden in de toekomst te vermijden.

Dit artikel werd opgenomen in ontwikkeling.


Even tussendoor

Werken met HTML en JavaScript in Adobe AIR heeft alvast één fantastisch voordeel: je moet rekening houden met WebKit en enkel WebKit. Denk dus lekker aan volledige ondersteuning voor transparante PNGs, meerdere achtergrondafbeeldingen en border-radius. Oh, en dat alle mogelijke selectors in CSS werken — van attribute selectors tot adjacent sibling selectors — zorgt ervoor dat ik ze eens kan gebruiken buiten jQuery.

Maar vergeet voorlopig text-shadow maar als je op Windows werkt.