Newsletter #5



Dit is issue #5 van een semi wekelijkse email die ik wat mensen stuurde om wat irritatie af te reageren. Gelijkenis met waargebeurde situaties en bestaande personen zijn opzettelijk en correct. (Als je de hitte niet aan kunt, verlaat dan de keuken).



Code en Comments, zoals gevonden in het wild




Perl
print `cat $wpath/kop.html`;
eval "\&$Q{'a'}";
print `cat $wpath/staart.html`;


$qr=$DB->query("SELECT NOW()");
$time=$qr->fetchrow;
print "Begin : $time\n";


PHP
define("COMMAND", "/vacaturebank/vbmain.php");
define("CGI", "vbnew.php");
$INHOUD[COMMAND]=COMMAND;
$INHOUD[CGI]=CGI;


$count=count($fcode);
if ($count ==1) {
} elseif ($count ==2) {
} elseif ($count ==3) {
...



Vacaturebank



Op de website ziekenhuis.nl staat een vacaturebank voor medisch personeel. Dat is natuurlijk handig als je een baan zoekt in de zorg. Wat natuurlijk minder handig is dan gewoon op de site van het ziekenhuis waar je wilt werken de vacatures te bekijken. Daar heeft men natuurlijk wat op gevonden. Per slot van rekening hebben we die database al en ook draaien de websites van vrijwel alle ziekenhuizen op dezelfde server. Dus het is een kwestie van even zo'n frisse Perljongen aan z'n oren trekken en dan is dat klusje zo geklaard.

Die Perljongen heeft het natuurlijk erg druk en kan niet programmeren, dus die maakt even snel een file aan genaamd 'vb' en gaat aan de slag. In zo'n vacaturebank kun je maar een beperkt aantal dingen doen:
- CVs bekijken
- CV plaatsen
- vacature plaatsen
- CVs zoeken op (functie,plaats,soort ziekenhuis)

Juist. Met een hele hoop

if ($Q{'v'} eq 'functie')
} elsif ($Q{'v'} eq 'functiegroep') {
} elsif ($Q{'v'} eq 'soortinstelling') {
...

is dat varkentje natuurlijk snel gewassen.
En voor een lijst van de functiegroepen voor het zoeken, doen we even dit:

select distinct FUNCTIEGROEP from vacatures_vacatures where display='yes' order by FUNCTIEGROEP"

print <<EOT;
<b>Zoeken op functiegroep</b></font>
...
EOT
foreach (@list) {
print "<option>$_";
}

Nouja, dat werkt natuurlijk voor alle onderdelen min of meer hetzelfde, en ik weet niet eens wat functies zijn, dus na een paar uurtjes copy-pasten staat er dus overal van dat soort ongein. Wat alles voor de luie typist trouwens ook veel makkelijker maakt is dat alle velden in database tabellen in HOOFDLETTERS zijn.

Verder is er het uiterst nuttige veld DISPLAY varchar(4), die gevuld is met waarden 'A' 'yes' 'no' 'true' 'false' 'flase'. Gelukkig worden alle CVs na 2 maanden verwijderd om alles een beetje actueel te houden. Sinds deze vacaturebank bestaat zijn er 421 CVs ingevoerd waarvan er nu 14 actief. Geweldig. Wat verder wel heel knap is, alle CVs en vacatures hebben velden als 'functie','soort ziekenhuis','afdeling' enzovoort. En al deze dingen staan allemaal in een tabel. Echt waar. Dus als je (uit masochisme) naar http://diac-leiden.ziekenhuis.nl/cgi/vacaturebank/vb gaat en daar je CV en/of vacature invoert dan zijn dropdowns als 'functie' gewoon lekker ouderwets textvelden. Toen ik hier overigens een opmerking over maakte werd mij meegedeeld dat het juist heel nuttig was ivm 'de performance', want de database server heeft al zo'n hoge load. Dat ligt enerzijds aan zulke onzintabellen, en anderzijds aan de 200+ sites die op een pentium II met 64 MB RAM draaien. En zoals je begrijpt is het goedkoper om programmeurs geoptimaliseerde code te laten schrijven dan een beetje nieuwere server aan te schaffen. Helaas kunnen die programmeurs niet coden, en zij niet rekenen.

En ik moet dus voor de 'hoofdsite' die vacaturebank opnieuw maken, maar wel met dezelfde database. *zucht*



Uit mn job



De twee mensen tegenover mij zitten al een half uur stukjes ActionScript te downloaden omdat ze een stukje flash willen laten scrollen als je er met je muis overheen gaat. Ik zou normaalgesproken even zeggen hoe dat moet, maar in dit geval houd ik mijn mond maar. Zodra namelijk blijkt dat je iets van Flash weet gaat iedereen namelijk constant dingen aan je vragen die ook letterlijk in TFM staan. Business as usual zal je nu denken, en dan heb je helemaal gelijk. Ondertussen wordt er natuurlijk een beetje gekletst over de nieuwste ontwikkelingen op computer en internet gebied. Zo wordt er ondermeer even uitgelegd hoe het wonder van een desktop over twee monitoren werkt. Echt :)

Weet je wat ik trouwens laatst ook zag?
Nou?
Dat is een nieuwe techniek, dat als je aan het browsen bent je op een knop drukt, en dan kan je die pagina editten, saven en dan is ie dus upgedate!
Echt waar!?
Ik zweer het je, echt waar.
Dat soort dingen moet natuurlijk niet te ver gaan, straks ben ik uit m'n job.
Jemig zeg, dat kan toch niet zomaar?
Tsja, als iedereen zomaar HTML kan leren, heb ik straks geen werk meer.
Echt?
Gelukkig ben ik heel goed in Flash-scripting dus hoef ik nooit bang te zijn om geen werk te hebben.
Oh, da's mooi dus.



Normaliseren



Even wat korte uitleg, om alles goed duidelijk te maken. Als je een database hebt, dan wil je het liefst zo weinig mogelijk redundantie. Ten eerste omdat dat bakken efficienter is, maar ten tweede (en veel belangrijker) zodat de kans op fouten afneemt. Daarom gaan we normaliseren. Ik krijg altijd een beetje een warm gevoel van normaliseren. Volgens mij is normaliseren voor databases wat full body contact thaise massage is voor mensen. Maar ik dwaal af. Een voorbeeld:


id    naam        hobby
--    ----        -----
1     chris       lezen
2     chris       snowboarden
3     chris       normaliseren
4     sinterklaas paardrijden
5     sinterklaas waterski-en aan de costa brava

Dit is dus redundantie. En als je nu bijvoorbeeld een tiepfoutje maakt zit je straks met dingen als

234 sinterkaals zwartepieten

Dus normaal zie je het volgende:

Mensen
id naam
-- ----
1 Chris
2 Sinterklaas

Hobbies
id naam
-- ----
1 lezen
2 normaliseren
3 paardrijden

Mensen_Hobbies
mens_id hobby_id
1 1
1 2
2 3

Als je wel de rand van de klepel op de hoed hebt zien vallen, maar niet weet waar de bel is, dan is de kans groot dat je het volgende doet:

+----------+-------------------+
| email_id | functiecode       |
+----------+-------------------+
|        2 | 1,2,3,4,5,6,7,8,9 |
|      968 | 1,2,4,5,6,7,8,9   |
|        9 | 1,7,8,9           |
|       23 | 1,2,5,6,8,9       |
|     1440 | 1,2,8,9           |
|       36 | 2,4,8,9           |
|     1020 | 4,7,8,9           |
|       45 | 2,6,8,9           |
|       49 | 6,7,8,9           |
...

Soms wordt ik daar wel een beetje moedeloos van.



Development server



Vandaag besteed ik de ochtend aan het fixen van schoonheidsfoutjes op de website van achmeahealth. Dat doe ik elke disdagochtend. Bij achmea werkt namelijk iemand die niets beters te doen heeft dan mij lastig vallen met 'bugs', of, zoals ik dat liever noem 'pixelneuken'. Ik ben dus een beetje witruimte tussen textjes aan het zetten en wat lijntjes aan het verschuiven enzo. Op zich redelijk rustig, en dus bloeddrukverlagend. Dat kan natuurlijk nooit lang duren. Mijn oog valt op bug #29: dwarslijnen zijn dikker dan horizontale lijnen. Even zoeken op de site (www.achmeahealth.nl, die grijze lijntjes). Op mijn monitor niet anders. Kan zijn, want mijn resolutie staat vrij hoog. En ik heb vorige week die lijntjes daar juist neergezet in de vorm van een stylesheet border gebeuren zodat ik van een paar K aan tables met gestrechte images af kwam. Ik zou zweren dat het goed was. Een beetje prutten met stylesheets en gekleurde borders, source bekijken op dubbele borders. Niks. En ik zie ook nog steeds niks. Zal wel een visueel ge-challanged persoon zijn daar. Klaar. Snel even af laten checken bij de persoon die hier intern de 'bugs' verwerkt tot 'actielijsten'.

Ok, ik heb alles gedaan, behalve dit, want dat is niet waar. zeg ik, wijzend op bug #29.
Oh nee? Laat me eens kijken dan.
Op 640x480 met Internet Explorer 5.0, geen Service Packs, zijn de dwarslijnen inderdaad dikker.
Hmm, dat ligt of aan je monitor, of aan je resolutie of het is een optische illusie. Die lijntjes zijn in ieder geval 1 pixel dik.
Nou ja, prima hoor.
Dat was het. Hoopte ik. Dacht ik.
Oja! Er was toch nog een puntje met de templates voor Ilse.nl? (red: de site is ook via ilse te bereiken, onder 'topsites' ofzo)
Zal best. Wat is daar mee?
Ik hoorde dat als ik wijzigingen maak, ik die ook moet uploaden naar ilse. Of zoiets.
Eh, ja, gewoon in de _templates_ilse directory.
Ik weet niet eens waar die is!
Die staat onder de _templates directory.
Misschien moeten we hier een soort van systeem van maken, of een handleiding. Ik onthou al dat soort details allemaal niet hoor.
Eh.
Ik weet niet eens wat templates zijn! Ik moet gewoon af en toe iets updaten, en doe verder helemaal geen hardcore programmering, dus ik kan echt niet allerlei mappen uit elkaar halen.
Ach, dat valt best mee. Als je iets wijzigd, kopieer je het van de development site gewoon naar _templates en naar _templates_ilse.
De development site?
...
Ik weet niet eens wat dat is!
Dat is de site waarop we dingen testen voordat we ze live zetten.
Oja? Ik wijzig altijd gewoon op de echte site, ik weet niet eens wat het adres van de develop site is!
Die is achmea.de_hel_waar_ik_werk.nl, zoals alle development sites.
Oh.
Wat doe je dan normaal als je iets veranderd, en het gaat fout?
Dan denk ik Shit! Het is verkeerd!, en dan ga ik snel net zolang dingen veranderen totdat het weer goed is.

Het einde van het verhaal is dus dat ik zonet een document gemaakt heb getiteld Procedure wijzigen templates voor achmeahealth.