dinsdag 31 juli 2012

JavaScript voor mensen, hobbits en elven - Deel 20: Het magische schild Try-Catch


Het eerste slagveld

“Verdedigen is de sleutel passend op het slot van een overwinning.”
                                                                                                - Sam Rain
Vechten met het zwaard van Function objecten en gooien met fruit van variabelen voldoet in de meeste situaties. Echter zijn mensen, hobbits, elven en andere wezens uit Midden-Aarde niet onoverwinnelijk. Een goede verdediging weert slagen af – en met de elvenmagie van JavaScript is dat nog eens heel gemakkelijk met try-catch.
Een Orcse tegenaanval (door tovenaars systeemfouten of ‘errors’ genoemd) geschied vaak wanneer de optimistische hobbit het niet verwacht. Zelfs het onneembare fort van Rohan kent een zwakke schakel, en menig wezen weet hoe tragisch het had kunnen aflopen zonder de try-catch van de mensen. Het enige wat een hobbit hoeft te doen is de potentiële zwakke punten te verdedigen met het schild van try-catch.
‘zonder try-catch’                                    ‘met try-catch’
funtion optellen(a,b){                               function verdedigen(a,b){
var c;                                                         var c;
return (c=a+b)                                           try{ /*wordt altijd uitgevoerd*/
}                                                                 c=a+b;
                                                                   }
                                                                  catch(fout){
                                                                  c=0; /*wordt alleen uitgevoed bij een fout*/
                                                                  }
                                                                 {
Hoewel er niet zomaar iets fout zal gaan ‘zonder’ try-catch, ligt de val van een fort op een zwak punt. Stel als een ijverige elf de ‘optellen’ functie gebruikt voor een cruciale muur, en dat één van de variabelen een waarde bevat, die niet verwacht wordt elders in het magische script, dan zijn de gevolgen desastreus. Een fout kan zorgen dat een script stopt – en dat is dus meteen het einde van een slag. De try-catch ‘verwacht’ dat er een potentieel gevaar kan zijn en slaat de gegevens van de fout op in de variabele tussen de haakjes van catch, waar je als hobbit een alternatief ‘plan’ kunt plaatsen tussen de accolades. Omdat alles een object is in JavaScript –net als fouten dus- is een enkele variabele voldoende om de fout te ‘vangen’.
Wanneer gebruikt de moedige hobbit try-catch? Uiteindelijk gaat het om te anticiperen op een mogelijke Orcse aanval, dus:
·      wanneer je functies zeer precies zijn bedacht met een bepaald soort gegevenstype als resultaat;
·      alle gegevens en informatie waar je als hobbit geen controle over hebt, zoals gebruikers invoer of uitwisseling met andere programma’s;
·      wanneer een functie een specifiek ‘formaat’ van gegevens verwacht.
Het is ook mogelijk het schild van try-catch te gebruiken als wapen met de ‘throw’-spreuk. Met ‘throw’ maak je bewust een fout, waardoor de magie binnen de ‘catch’ wordt uitgevoerd.
function verdedigen(orcAanval) { var x;
 try {
  if (orcAanval==”super groot zwaard”){
   throw “rent hard weg!”; /*maakt een systeemfout aan en stopt het script hierop*/
  }
else{
 x=”verdedigd dapper de aanval af”;
}
catch(engeAanval) { /*enge aanval bevat*/
 x = engeAanval;
}
return x;
}
Als we de bovenstaande magie zouden uitspreken met:
var strijd = verdedigen(“bijl”);
dan zou de variabele strijd de tekenreeks “verdedigd dapper de aanval af” krijgen. Echter met:
var strijd = verdedigen(“super groot zwaard”);
wordt alles onder ‘throw’ genegeerd en vliegt de elvenmagie meteen naar ‘catch’, waardoor de variabele strijd het ‘throw’ object bevat (de tekenreeks: “rent hard weg!”).
Met het schild van try-catch hoeven hobbits zich minder zorgen te maken voor grote enge Orcs die boven hun uitpuilen; de magie in het schild kan bijna alles tegenhouden – indien goed ‘getimed’.
Meer lezen over Programmeren? Klik hier voor de inhoudsopgave van alle artikelen!

©SamRain
JavaScript - 20

maandag 30 juli 2012

JavaScript voor mensen, hobbits en elven - Deel 19: Functies als wapens


Het eerste slagveld

“Een functie object is als een kanon bij een zwaardgevecht.”
                                                                                                - Sam Rain
Functies zijn óók objecten; samen met de datastructuren zorgen zij voor nodige elvenmagie. Het gebruiken van functies hangt samen met de kennis die je er van hebt; hobbits zullen meer gecharmeerd zijn van de functies die werken als ‘klasse methoden’, terwijl elvenkrijgers en mensenridders graag Orcs onderwerpen met de kracht die Javascript functies hebben als object. Voor alle wezens, onervaren of geduchte krijgers, begint het altijd bij de basis – wat zijn functies als object?
Er zijn twee soorten functies in JavaScript: de standaard functie en de ‘anonieme’ functie (door tovenaars vaak ‘anonymous’ genoemd). Anonieme functies zijn als de standaard functies zonder, zoals de naam al zegt, een naam. Het nut van anonieme functies zit in twee factoren verborgen, namelijk daadkracht en simpliciteit.
Standaard functie                                    Anonieme functie
function zwaardslag(schade)                  var zwaardslag = new Function (“schade”,
{ schade + = 10; /*de += telt de            “return(schade+10)”);
waarde rechts op bij de linker*/
}
Zowel beide functies werken door een getal (de kracht van een zwaardslag) mee te geven zoals je zou verwachten: zwaardslag (10) levert 20 op als resultaat. Een anonieme functie is qua geheugenefficiëntie veel ‘slimmer’; het functie object ‘leeft’ net zo lang als de variabele deze nodig heeft om een waarde aangewezen te krijgen. Daarnaast kun je met anonieme functies binnen een functie een oneindige soep van complexiteit breien, zonder deze te ‘verlaten’. Voor hobbits kunnen anonieme functies intimiderend zijn, maar wees niet gevreesd – ze zijn simpeler dan acrobatische elven je willen doen geloven! Een functie, anoniem of niet, bestaat altijd uit twee delen: de argumenten en het blok elvenmagie.
Functies, net als andere objecten, hebben allemaal eigenschappen die ze ‘erven’ van hun klasse (Function). Eén bijzondere is ‘arguments’ – een array die alle parameters opvangt. Iedere functie heeft een array ‘arguments’, die op zijn beurt weer alle eigenschappen geërfd heeft van de lijst klasse (Array) – en dus de lengte eigenschap (length).
function aanvallen() {{ var aanval=”aanval op”; var i;
 if (aanvallen.arguments.length <1) /*een vergelijking om te bepalen of er argumenten zijn meegegeveb*/
 {
 aanval = “niemand om aan te vallen.”;
 }
 else
 {
 for (i=0; i<aanvallen.arguments.length; i++) /*zoals elke genummerde lijst, een for-lus gebruiken*/
 {
 aanval += aanvallen.arguments[i]+”,”;
 }
 aanval += “.”;
 }
 return aanval;
}
Wanneer we de bovenstaande toverspreuk uitvoeren met elvenmagie:
var uitslag = aanvallen(“Orc”, “Trol”, “Olifant”); /*uitslag heeft nu de waarde “aanval op Orc, Trol, Olifant.”*/
uitslag = aanvallen(); /*uitslag is nu “niemand om aan te vallen.”*/
Hoewel het nu praktisch aanvoelt voor elven om de ‘arguments array’ te gebruiken, blijft het handiger om parameters tóch te definiëren; wanneer we een functie op zo’n wijze opbouwen, werken deze als referenties, zonder de nummer-volgorde van de ‘arguments array’ te kennen:
function aanvallen(wezen, schade)
{
var aanval = “aanval op” + wezen + “met” + schade + “krachtpunten!”;
return aanval;
}
Functie objecten hebben veel eigenschappen, maar zelfs Tovenaars en Orcs zullen er mee eens zijn dat deze beschreven werking de eerste stap is naar overwinning op het slagveld van Midden-Aarde!

Meer lezen over Programmeren? Klik hier voor de inhoudsopgave van alle artikelen!

©SamRain
JavaScript - 19

zondag 29 juli 2012

JavaScript voor mensen, hobbits en elven - Deel 18: Vechten met variabelen


Het eerste slagveld

“Zien; het meest veelzijdige vaardigheid van bewust zijn.”
                                                                                    - Sam Rain
Tijd voor een paar lesjes met het Elvenzwaard van Aragon – de variabelen. De ijverige elf zal inmiddels het één en ander doorhebben, maar voor de hobbits die voor het eerst buiten de Shire treden is het onderwerp vast nog redelijk abstract. Variabelen zijn referenties naar plaatsjes in het geheugen – en geheugen is heel belangrijk voor snelle elvenmagie.
De tovenaarsfilosofie dat meer geheugengebruik de boel langzamer maakt, is voor de hand liggend. Tovenaars die draken moeten verslaan hebben het liefst korte spreuken, dan dat ze een heel spreukenboek moeten voorlezen. Iedere keer dat er een variabele wordt ‘gebruikt’ neemt dat al tijd in beslag en ‘nieuwe’ variabelen nemen geheugen in beslag.
Er zijn twee soorten opslaggegevens voor JavaScript: een referentie en een daadwerkelijk stuk geheugen. Om met variabelen te kunnen rekenen is JavaScript een brave Kobold – nummers, booleans en datum primitieven ‘schrijft’ JavaScript over; alsof het een kopie betreft. Tovenaars noemen dit letterlijk overnemen ‘copy by value’. Arrays, Strings en Functies worden door JavaScript aangestipt met een voetnoot, die verwijst naar een ander hoofdstuk. Tovenaars, zoals altijd, hebben ook hier een term voor, namelijk ‘copy by reference’.
Hoe vaker een toverspreuk een letterlijke kopie maakt, hoe meer geheugen er wordt gebruikt. Nu doet JavaScript het meeste ‘werk’ zelf, maar ijverige elven zullen toch wat bewuster moeten zijn. Neem de volgende functie eens als voorbeeld:
function optellen (a,b,c,d,e,f,g,h,i)
{ var oplossing = a+b+c+d+e+f+g+h+i;
a -
return oplossing;
}
Als alle variabelen nummers zouden zijn, worden er een hoop variabelen gemaakt. Praktischer is het om een lijst te maken en deze door te geven:
var nummers AtotI = new Array (1,5,3,12,5,30,7,77,4); /*een genummerde lijst*/
function optellen(lijst) { var som;
for (var i=o; i <l ijst.length; i++) /*’i’ is onze ‘tellende’ variabele*/
{ som + = lijst[i]; /*de + = operator telt de waarde rechts op bij de waarde die al aanwezig is in de linker */
}
return som;
}
var totaal = optellen (nummers AtotI);
Hoewel deze functie meteen overweldigend is, werkt deze efficiënter dankzij referenties. Als we 10000 woorden willen optellen, zou de functie beschrijving een leven in beslag nemen met het 1e voorbeeld al – laat staan het aantal variabelen die per optelsom aangemaakt zouden moeten worden.
JavaScript doet het moeilijke en zware werk voor alle wezens van Midden-Aarde; wanneer een variabele zijn levensduur heeft ‘opgebruikt’, dan worden deze verwijderd. Om dit te kunnen doen, hoeft de ijverige elf alleen maar goed gebruik te maken van het ‘zicht’ – door de Tovenaars en Orcs de ‘scope’ genoemd. Alle variabelen tussen de accolades en haakjes ‘leven’ tot het laatste haakje. Daarnaast kunnen variabelen tussen de accolades niet naar variabelen kijken in andere accolades. Kijk eens naar de volgende toverspreuk:
var meesterRing = “Sauron”; /*deze variabele is een ‘global’, dat wil zeggen dat deze ‘leeft’ tot het eind van de toverspreuk.*/
function draagRing(ring)
{ /*de ‘ring’ variabele is binnen deze accolades te gebruiken omdat deze een ‘parameter’ is van de functie*/
if (ring==”Sauron”) /*met de == operator kun je variabelen vergelijken*/
{
var gewonnen = true; /*de variabele ‘gewonnen’ is aangemaakt, meer leeft niet verder dan deze accolades!*/
}
meesterRing=”Frodo”;
/*hoewel meesterRing binnen deze accolades staat, wordt deze toch in het hele script aangepast, omdat deze al bestond vóór de andere accolades*/
}
var eigenaar = draagRing (meesterRing);
/*eigenaar is “Frodo”*/

Meer lezen over Programmeren? Klik hier voor de inhoudsopgave van alle artikelen!

©SamRain
JavaScript - 18

zaterdag 28 juli 2012

JavaScript voor mensen, hobbits en elven - Deel 17: Van Tolkien naar Tolk - De Interpreter


Een hapje elvenbrood

“Beter 2 goede vaardigheden dan 200 gebrekkige.”
                                                                        - Sam Rain
Zo. Dappere hobbits moeten zo nu en dan eens even bezinnen; de weg naar Mordor zit vol gevaren – maar Aragon, met jaren ervaring als Strider, weet hoe hobbits, mensen en elven niet snel het slachtoffer worden van vleeshongerige orcs of geobsedeerde ex-hobbits.
Het wordt nu tijd om een ‘interpreter’ ter beschikking te hebben – een programma dat toegang geeft om JavaScript te gebruiken met een bepaalde implementatie. Hoewel de meeste webbrowsers JavaScript magie ondersteunen, hebben ze niet standaard een ‘interpreter’ bestemd voor Elven. Daarnaast zijn webbrowsers als Sauron – met weinig vaardigheden te werk gaan is het vragen om een nederlaag. Het is de moeite echt waar om Mozilla Rhino te onderzoeken – JavaScript in deze implementatie werkt naast in hun Firefox webbrowser ook in vele andere software met JavaScript ondersteuning. Het zal overweldigend zijn, maar probeer de ‘interpreter’ te installeren en werkend te krijgen.
Als je de interpreter aan de praat krijgt, dan zie je: >>
Achter de ‘prompt’ (>>) kun je Elvenmagie invoeren (en extra commando’s, zoals ‘exit’ om de interpreter te verlaten). Alle elvenmagie wordt meteen uitgevoerd en je kunt zonder te veel gepruts spelen op je gemak. Wanneer je de ‘interpreter’ verlaat, gaan alle ingevoerde gegevens verloren – maar dit is geen ramp. Interactief leren zwaardvechten is voor hobbits geen onoverkomelijke taak; wanneer je weet hoe JavaScript op magie reageert, zul je steeds beter bevatten wat je toverspreuken teweeg brengen. Ook kun je zo magische spreuken eerst ‘proef’ uitspreken!
Het wordt in de interpreter veel simpeler om de werking van functies, arrays en lussen te begrijpen. Kijk eens naar het volgende voorbeeld: (alles achter de >> is ingevoerd)
>> var c = 5; var d =5;
>> c+d;
10
>> var hobbits = new Array ();
>> hobbits.length;
0
>> hobbits[“Frodo”] = “zwaard”;
>> hobbits[“Sam”] = “knots”;
>> hobbits [“Frodo”];
“Zwaard”
>> hobbits.length;
2
>> function aanvallen(wapen) { print “De Orc wordt geraakt door een” + wapen + “.” ; }
>> aanvallen (hobbits[“Frodo”]);
“De Orc wordt geraakt door een zwaard.”
>> for w in hobbits { aanvallen (hobbits[w]); }
“De Orc wordt geraakt door een zwaard.”
“De Orc wordt geraakt door een knots.”
>> var fruit = {“a”: “appel”, “b”: “banaan”};
>> fruit [0];
Appel
>> fruit [“b”];
Banaan
Met de interpreter kun je tekenreeksen naar het scherm toveren met de print-functie, zodat je de waardes van variabelen kunt zien of hoe de lussen hun werk systematisch doen. Het grootste voordeel van de interpreter is dat je de magie van deze artikelen serie kan uitproberen zonder enge tovenaarspraktijken, of te verdrinken in het moeras der Webtechnologieën.
Meer lezen over Programmeren? Klik hier voor de inhoudsopgave van alle artikelen!

©SamRain
JavaScript - 17

Oom Rob, U had vast gelijk


“Onze helden blijken vaak het tegenovergestelde.”
                                                                        - Sam Rain
‘Jongen, roken is slecht,
het is duur en uiteindelijk,
dan ga je dood aan kanker’
zegt Oom Rob tegen mij
met een sigaret in de hand.
‘Jongen, drank maakt kapot,
het bedwelmd je en uiteindelijk,
dan begeeft je lever het’
zegt Oom Rob tegen mij
terwijl hij nog eentje schenkt.
‘Jongen, trouw met een vrouw,
een nette, goede en slimme,
want dan ben je pas gelukkig’
zegt Oom Rob tegen mij
boos kijkend naar tante op de bank.
‘Jongen, geld maakt je een vent,
dan krijg je respect en aanzien,
en koop je alles wat je wilt’
zegt Oom Rob tegen mij
vanachter de stapel rekeningen.
‘Jongen, lieg en bedrieg niet,
want wat ben je zonder waarheid,
behalve dan een leugenaar’
zegt Oom Rob tegen mij
net terug uit de gevangenis.
‘Jongen, wees goed voor iedereen,
ga naar school en vecht niet,
en wordt iemand van staat’
zegt Oom Rob tegen mij
zonder diploma’s of ander papier.
‘Jongen, leef voor God,
en dien Hem met heel je hart,
laat je niet verleiden’
zegt Oom Rob tegen mij
vanachter de gokkast.
‘Jongen, breng geen schande,
niet voor jezelf, niet voor je ouders,
wees oprecht en integer’
zegt Oom Rob tegen mij
na het draaien van een plof.
‘Jongen, steel niet van anderen,
wees niet jaloers op bezit,
werk er zelf eerlijk voor’
zegt Oom Rob tegen mij
terwijl hij de belasting oplicht.
‘Oom Rob’ – zeg ik vandaag,
‘uw woorden waren waar -
maar als voorbeeld
heeft u ernstig verzaakt’
sprekend bij zijn uitvaart.
©SamRain
Oom Rob

Waarom privatisering van gevangenissen een ramp zal zijn


“Wie winst wil maken op sociaal zwakkeren is een lul.”
                                                                                    - Sam Rain
Als er één strategie in Den Haag altijd opblaast in het eigen gezicht is het wel privatiseren. ProRail. Kuch. PostNL. Kuch. De rest. Hoestbui.
Nederland is klein – dat is een voordeel als een nadeel. Het voordeel ligt in het feit dat we minder beheer hoeven te doen en het nadeel is dat we vaak dezelfde mensen krijgen die dat beheer moeten gaan doen. Nieuwste idee van bezuinigen: alle penitentiaire inrichtingen privatiseren. Zou geld opleveren ofzo. Naar boven afgerond: 600 miljoen per jaar.
De DJI is een mega-geldversnipperaar. Feit. Een logge, achterhaalde organisatie. Feit. Inrichtingen de grootste kostenpost. Fictie.
Menig politicus die over privatiseren praat, begint vrijwel meteen over andere landen – Duitsland, Zwitserland zijn wat dat betreft in de ‘gevangenissector’ de absolute paradepaardjes. Dat zou professioneler gaan enzo. HTM. Kuch. KPN. Kuch. Sorry, maar Nederland is klein en kartelgevoelig. Geef het twee jaar voor het eerste schandaal; tien jaar om echt te falen.
Er moet wél een hoop veranderen qua gevangenissen; qua kostenbesparing zou kwart Nederland op een gouden wc-bril kunnen zitten. En betalen zullen we toch; privatiseren betekent simpelweg uitbesteden, en dat terwijl de kosten voornamelijk zitten in het beleid van buiten de gevangenissen. Wie alleen maar denkt dat de gevangenis boefjes bevat en wie de organisatie niet kent qua uitvoering, gaat voor privatiseren. Nee – optimaliseren.
Zo heeft iedere inrichting een Commissie van Toezicht als een kwaliteitsmonitor aangesteld. ‘Gedetineerden’ hebben rechten (wel eens waar zeer beperkte rechten) en mogen in Nederland gebruik maken van het ‘beklagrecht’. Privatiseren zal deze appendix niet verwijderen, waarin een som van 90 miljoen op jaarbasis linea recta de verbrandingsoven ingaat. In plaats van een efficiënter proces of de inperking van het beklagrecht voor bijvoorbeeld ‘contrabande’ (smokkelwaar, drugs, etc.), kiest de overheid om deze bureaucratie in leven te houden in plaats van optimaliseren. Alleen op dit organisatorische vlak ligt een ‘half miljard’ verscholen binnen 5 jaar, een ‘bijna miljard’ in tien jaar en dus twee miljard in 20 jaar tijd. Waar centralisatie de eerste oplossing biedt, heeft de overheid daar opeens níet het gevoel om in ‘eigen vet’ te snijden!
De grootste kostenpost voor penitentiaire inrichtingen zit in de ‘passanten’ stroom. Passanten zijn tijdelijke gevangenen die vanwege een openstaande boete een maand of twee mogen verblijven in het ‘staatshotel’ en maken ¼ deel uit van de ‘recidivisten’. Kort ‘verblijf’ kost veel, maar levert weinig op. Het traject is te kort voor de plicht van penitentiaire inrichtingen om recidive te voorkomen en werkt eigenlijk ‘tegen’ het realiteitsbeeld van de gevangenis. Het zijn deze passanten die het maatschappelijk beeld ook verstoren – een dief die voor €1000,- heeft ‘gestolen’ zonder geweld, zit ongeveer 30 dagen boete uit tot ongeveer 6 weken. Dezelfde middelen, maar zònder resultaten. Maakt de inrichting deze kosten óf maakt het Openbaar Ministerie deze kosten? Want àl privatiseert de inrichting, het OM blijft immers even inefficiënt!
Als we kijken naar personeel, dan zal ‘performance management’ in een private inrichting geen winst opleveren; inrichtingsmedewerkers zijn de kleinere ‘kosten’ van een inrichting. Het onderlinge ‘detacheringmodel’ voor ‘Terugdringen Recidive’, ‘Dienst Geestelijke Verzorging’ of ‘afdelingspersoneel voor objectbeveiliging’ komen uit een ‘ander’ potje. Komt dat wel weer qua wetgeving op het bordje van de inrichting, maar heeft níets met het budget te maken.
Waarschijnlijk hebben ministers weer mogen smullen van de Duitse lobby – want via Europese gelden kunnen ministers lekker blijven vliegen van Rotterdam-Amsterdam. Geloof niet de leugen!

vrijdag 27 juli 2012

Praktisch managen: Een beetje Prince Project Management


“Wie te veel documenteert, verspild tijd.”
                                                            - Sam Rain
Wie in een ‘multinational’ of een gazelle-op-steroiden de boel moet beheren krijgt de nodige papierwinkel voor de bakkes. Prince2™, de overheidsstandaard van de eilandbewoners, is de trilogie van befaamde novellisten om ieder stuk te omschrijven alsof het over 1000 jaar de jeugd moet inspireren tot religieuze perikelen van een komende eindtijd. Overal waar té voor staat, moet je allergisch voor worden – Rosé uitgezonderd natuurlijk.
Zoals ieder goed plan, moet er eerst nagedacht worden. Het idee van Prince2™ is dat het nodige denken in een structuur het beste is. Helemaal mee eens. Dat dit minimaal 150+ aan bomenmoorden betekent, daar heb ik wel de nodige moeite mee. Tijd om eens flink te snoeien – of in dit geval, door naar een ovaal wiel te kijken, een rond wiel te maken.
Het project document is eigenlijk het beste te organiseren als een boomstructuur; belangrijke delen kunnen we naar believen toevoegen en ieder onderdeel is werkzaam als een module, waardoor we rot-taken (documenteren, uitzoeken, etc.) makkelijk kunnen ‘delegeren’. Het blijft een aardige rits, maar het scheelt enorm met traditioneel ‘princen’.
Project document
                        + inhoudsopgave
(waarom)            + project beschrijving (globaal)
                                     + het probleem
                                     + probleemsituaties
            ‘manifest’           + de oplossing(en)
                                       +’case studies’
(waar)                             + omgeving/analyses
                                       + afdelingen met het probleem
            topology           + oorzaken/situaties
                                    + processen (oud)
                                    + processen (nieuw)
(wie)                            + rollen/verantwoordelijkheden
                                    + rolspecificaties
                                    + taakomschrijvingen
(wat)                        + middelen/budget
                                    +benodigdheden
            begroting         +prognoses
                                    + risico’s
(wanneer)            + planning
                                    + strategie
            tijd/kwaliteit   + agenda/flexibiliteit
                                    + evaluaties
                        + appendixes
                        + begrippenlijst
                        + over uitvoerder
Een document voor projecten is een levend organisme; ik heb meer revisies gezien dan ik kan knipperen met m’n ogen, en de ervaring leert dat een ‘niet-modulair’ document onpraktisch is. De belangrijkste zaken – waarom, waar, wie, wat en wanneer – zijn de zaken die de ‘top’ wilt weten. Daarnaast biedt uniformiteit een rust voor de directie kamer; visionairen willen alleen de waarom begrijpen en de ‘potloodgum’ is geïnteresseerd in wat de boel gaat kosten. De afdeling ‘sales’ is zelden geïnteresseerd wat er gaat gebeuren bij ‘HR’ en vice versa. Uniformiteit in documentatie maakt pragmatisch.
Het andere handigheidje is ‘versionering’. Een structuur die globaal is ingevuld mag zich pas een ‘1.0’ noemen; iedere ‘tak’ verdient een ‘0.1’ waarde voor de inhoudelijke informatie en nog eens ‘0.1’ bij de vormgeving zoals deze bedoelt is voor de ‘grote versie’. Door inhoud en vormgeving te splitsen, wordt het document ook meteen robuust – opmaak sjablonen maken dit proces in de toekomst sneller.
Documenteer beschrijvend vanuit een kernzin; project documenten zijn zakelijk van natuur. Start een paragraaf met de zaak waar de rest van tekst over gaat. Gebruik grafieken voor cijfermatige informatie, gebruik voetnoten voor bronvermeldingen of verwijzingen naar case studies. Laat zoveel mogelijk plaatjes achterwege – het is geen brochure – en werk met het ‘four eyes’ principe door collega’s onder elkaar te laten ‘testlezen’.
Project documenten zijn méér dan een visitekaartje; ze laten de competenties zien in aanpak, maar worden vanzelf, indien goed uitgewerkt, een belangrijke bron van je kenniscentrum. Zoals iedere efficiënte ontwikkeling, zou deze incrementeel moeten zijn – hoe minder je doet, hoe meer tijd je overhoud!

Meer lezen over het onderwerp Management? Klik hier voor de inhoudsopgave van alle artikelen!

woensdag 25 juli 2012

Praktisch managen: Agile taken beheren


“Het verschil tussen post-its en tablets is een verlicht scherm.”
                                                                                    - Sam Rain
Doelen halen bereik je door taken uit te voeren. Wie zich laat meeslepen door een manifest van superflexibel zijn, ziet zijn ‘velocity’ grafiek even gracieus flatlinen. Productiviteit is als vector bij voorkeur op 90° en ver voorbij de axis. Hoewel dit utopisch doel verreweg van haalbaar is, zijn er mooie bevindingen in de Agile-dojo te vinden – plannen in ‘stories’ bijvoorbeeld.
De Kumbaya-manager, die tijdens het zoveelste snoepreisje aangestoken is door zogenaamde ‘toppers’, zal de ‘verhalende’ lijn van Agile project management het meest belichten. Hoewel een ‘story’ vertaald wordt als een verhaal, kun je het beter beschouwen als een ‘oneliner’. Een ‘story’ is een 3-delig component, die bestaat uit een beschrijving, een puntenwaarde en een eigenaar. De beschrijving is een recht toe, recht aan no-nonsense ‘taak’-omschrijving. Een zwabberjongen zou het moeten kunnen begrijpen. De puntenwaarde is traditioneel tussen 1 en 3, waarvan de laagste makkelijk en de hoogste moeilijk. De eigenaar is degene die deze story gaat uitvoeren en dus verantwoordelijk is voor het eindresultaat.
Het beheren gaat in segmenten van status: stories die nog niet een eigenaar hebben, stories waar aan gewerkt wordt en stories die zijn afgerond. Afgeronde ‘stories’ geven de ‘snelheid’ weer – hoe meer er ‘voltooid’ zijn, hoe meer punten er verdiend zijn om een ‘project’ of ‘kwartaal’ met succes af te ronden (ook wel de ‘velocity’ genoemd). Stories waar aan gewerkt worden geven een moment opname weer van wat er gebeurd en door wie het wordt gedaan. Het totaal aantal stories min de anonieme stories maakt zichtbaar of de ‘koers’ gelijk staat aan de verwachting. Kortom, de cruciale informatie voor de manager! Dergelijke foefjes om dit te bewerkstelligen hoeven niet perse ‘hightech’ te zijn: twaalf jaar geleden ging dit prima op een kartonnen plaat met Post-It™ en er zijn een overschot van web- en tabletapplicaties voor nul euro.
Deze prachtige oplossing kent een duistere kant, die voor de turbo-manager vraagt om een remschijf en de nodige bekering: vooraf plannen en analyseren. Vaak worden de verkeerde ‘experts’ geraadpleegd om stories op punten te waarderen of relationele taken samen te voegen. Denk daarom in processen, activiteiten én taken; een ‘global’ omschreven story zou 100 andere stories kunnen inhouden, waardoor met te weinig realisme op niveau stories verdeelt kunnen worden. Ook de afhankelijkheid (of juist onafhankelijkheid) kunnen roet op een mooi ‘sotryboard’ gooien. Weet wie dus realistisch kan inschatten – en vermijd koste wat het kost overoptimisme!
Een paar handigheidjes om de boel ‘super’ efficiënt te maken zijn de volgende tips:
·      voorzie stories van twee datums: de eerste voor wanneer deze een eigenaar krijgt en de tweede bij afronding. (taken komen vaak terug en einddatum min begindatum betekent weten hoe lang deze taak heeft gekost)
·      een extra statussegment als ‘ijskast’ (soms zijn bepaalde taken niet meteen essentieel, of zijn ze qua middelen niet haalbaar)
·      documenteer het totaal behaald aantal punten per eigenaar (die gegevens zijn weer handig voor evaluatie- of functioneringsgesprekjes)
·      combineer taken als één grotere taak – maak altijd taken die een uur, zowel minimaal als maximaal in beslag nemen)
·      maak ‘story’ beschrijving kort en krachtig – ‘one liners’ (voor de logische redenen natuurlijk).

Meer lezen over het onderwerp Management? Klik hier voor de inhoudsopgave van alle artikelen!

©SamRain
Taken beheren

Praktisch managen: Scrum Cocktail


“Werk altijd vanuit je eigen kracht en competenties.”
                                                                                    - Sam Rain
Een team leiden van vijf tot tien man brengt de nodige overvloed van informatie met zich mee. Misschien ben ik ‘te’ autistisch of heb ik een hypergevoeligheid ontwikkeld voor onnuttige informatie – maar voor mij ligt de voorkeur in ‘less is more’. Scrumming is geen nieuw fenomeen; de ene manager doet het te weinig en de ander produceert te veel ‘biggen’. Een beetje scrum is voor iedereen wel verfrissend – vooral met een schijfje limoen en ijsblokjes.
Wat gebeurd er, wat moet er gebeuren en waarom gebeurd dat niet? Als je alle theo-en-thea filosofie wegsnoeit is dit het motto van een manager tijdens een overleg. Het probleem is dat je als manager behoorlijk bij moet sturen – iedereen vindt zijn probleem het meest belangrijk, óf erger, wil even belangrijk doen. De 20 minuten die je hoopte dat het zou kosten, eet uiteindelijk een uur – of twee, wanneer je nog eens tot actie moet overgaan. Nee, nee, nee. Dat wil je niet.
Een ‘Scrum meeting’ zou volgens Agile guru’s (sukkels) iedere dag moeten plaatsvinden, waar er bij voorkeur gestaan wordt. Reality-check: de meeste managers veranderen zo’n moment om hun evangelie te verkondigen en een planning zonder ‘redelijke cafeïne bezinning’ is vaak even waardeloos. Schrappen dus.
Rolverdeling waarbij de één wel mag spreken en de ander niet – en waarbij boerderijdieren als classificatie worden gebruikt – is evenmin bevorderlijk. Een vergadering is géén presentatie, géén teambuilding en al helemaal geen crèche. Wie overlegt in een team, overlegt in een team. Zelfs koning Arthur was gelijk aan de ronde tafel. Door de ‘shredder’ dus.
Pfoe, zo blijft er van het Scrummen niet veel over zou je denken. Nee, conventioneel scrummen is inderdaad niet de bedoeling. De filosofie achter ‘scrum’ is echter tijdloos: dagplanning, rolverdeling, taakverdeling en problemen oplossen. De Nederlandse werkcultuur is niet de Engelse (afzeiken), de Amerikaanse (onnodig hypen), de Duitse (volle kracht vooruit), de franse (zwarte pieten), de Italiaanse (onder het tapijt vegen), de Spaanse (rennen voor de stieren komen) of de Zweedse (op detail analyseren om daarna in stukjes te snijden). De Nederlandse werkcultuur is nuchter (ik werk voor geld), praktisch (ik doe wat ik kan), realistisch (ik doe tot daar) en sociaal (al doe je tof, je bent en blijft een mens).
Zorg daarom ervoor dat iedereen duidelijk weet wat van hem of haar verwacht wordt – pak de functiebeschrijving erbij en maak er een fact-sheet van. Zo voorkom je antwoorden als ‘dat is niet mijn taak’. Iedere rol heeft een vaste planning óf een ‘eigen’ planning – verplicht mensen om hun werk realistisch te plannen, met nadruk op een maximum van 6 uur (echt waar). Deze planning voor de week mondt zich uit in een dagplanning. Tegen het laatste uur van de ‘werkdag’ vult men (via een applicatie, e-mail of formulier) de evaluatie in:
-       is mijn planning voltooid (ja/nee)
-       zo nee, welke delen zijn niet voltooid:
-       zo nee, waarom niet:
Wil je dagelijks of tweedagelijks een snel overleg? Plan deze 15 minuten nà de middag pauze. Wil je mensen het één en ander mededelen? Doen dan voor de korte pauze. Gebruik niet meer dan 5 a 10 minuten voor beide momenten en zie de resultaten binnen een week: indicaties van vooruitgang, patronen in problematiek en productiviteit door bewustwording.

Meer lezen over het onderwerp Management? Klik hier voor de inhoudsopgave van alle artikelen!

©SamRain
Scrum

maandag 23 juli 2012

Geloven en wat we er niet over begrijpen


Innerlijke vrede

“Onze unieke intelligentie maakt ons verantwoordelijk voor hetgeen wat we doen.”
                                                                                                                        - Sam Rain
Wanneer je spreekt met iemand die geen godsdienst kiest binnen zijn of haar levensbeschouwing, komt vroeg of laat het pleidooi dat ‘geloof’ de oorzaak is van oorlogen. ‘Nee,’ antwoord ik dan ‘het is wel zo dat het de meest gebruikte smoes is.’
Waarom geloven mensen? Of je nu Krishna verkiest boven Jezus, aan Allah om genade smeekt of gelooft in een roze eenhoorn – iedereen gelooft iéts (al is het niets). We geloven, volgens de wetenschappers in witte jassen, omdat we zo onverklaarbare dingen kunnen bevatten. We geloven, volgens humanistische filosofen, omdat we kosmologisch verbonden zijn om onze dierlijke natuur te overstijgen. We geloven, volgens religieuze leiders, om het ‘einde’ niet te zien als finishlijn en dat al ons lijden een doel dient. Wij geloven, volgens mij, om ons leven nu vorm te geven.
Religie geeft ons een moreel anker – de één kent geboden of leefregels, de ander een levensfilosofie of motto. Karmisch denken is erin verweven; wie goed doet, goed ontmoet – al komt het later. Mystici en esoterie geeft ons macht – wie de juiste spreuken kent, kan zijn of haar leven beïnvloeden. Deel zijn van een aparte en vooral ‘verheven’ klasse werkt bijzonder aantrekkelijk. Want bij de Donald Duck Club hoort een pas met extra kortingen. Zodoende kent ieder bewust mens een vorm van religie of esoterie; de één is Kumbaya-christen, de ander top manager en ook de veganist gelooft.
We willen graag geloven dat we onszelf overstijgen door hogere doelen na te streven. De nare realiteit is dat ondanks prachtige preken, mooie beloftes en egostrelende waardes wij geloven uit eigen belang. We zoeken onze plaats in het heelal, we zoeken de waarheid, we zoeken erkenning, we zoeken een betere wereld. Wij zoeken met z’n allen naar geluk.
Geluk en blijdschap horen bij elkaar, maar blijven twee verschillende dingen. Geluk is onze vrede, waar blijdschap een overmaat is van vrede. In ons leven zijn we verslaafd aan blijdschap geworden – in het Westen tenminste. Een groot huis, een mooie wagen, een leuke aan, een knappe partner, een goed CV, een groot sociaal netwerk. Het moet méér. Het moet béter.
De realiteit is ook dat we geloven dat blijdschap gelijk is aan geluk; wanneer we niet blij zijn, dan voelen we ons ongelukkig. Wie gelooft in een hogere macht vraagt om blijdschap – ‘Oh Heer, dit en dat’ of ‘Als Allah het wil, dit en dat’. Wie gelooft in de natuur en eigen kunnen, investeert met middelen en discipline ‘want als ik dit doen, dan dat’.
Wanneer we geloven is ook geen mysterie – de eerste beste tegenslag of een onverwachte wending in het levensplot. Het grote systeem werkt dan even niet in ons voordeel, zodat we als geestelijke monteurs de gaten willen dichten. Maar zoeken we op dat moment naar vrede of naar blijdschap?
Echt ‘gelovig’ zijn bestaat niet. Geloven is gebaseerd op het vertrouwen op principes en waarden die je niet kunt toetsen zoals een natuurwet. Een ‘ongelovige’ bestaat ook niet – hooguit een afwijk van de maatschappelijke norm. Wie namelijk oprecht een hoger doel nastreeft, streeft niet. Want het enige hogere doel dat boven eigen belang staat is de innerlijke vrede – een gelukkig bestaan door blij zijn te bestaan.
©SamRain
Geloven

zondag 22 juli 2012

Woordassociatie en beinvloeding - Mind Control


“Zolang we bewust zijn van onze omgeving, zijn we beïnvloedbaar.”
                                                                                                - Sam Rain
Een mijter maakt je nog géén bisschop en een oranje sjerp géén monnik. Onze prachtige ogen worden vaak misleid door ons scheefgegroeide persoonlijkheid. Classificeren is een automatisme; niemand wilt het toegeven, maar het is in onze chips gebakken. Wie als mens informatie ontvangt, analyseert deze met onze supercomputer, lopend op bio-energie , die als in relatie samenhangt.
Acht poten. Web. Harig. Hoewel de meesten meteen denken aan een Tarantula (vanwege ‘harig’) – een vogelspin, die jaagt door middels van springen – is het een onbestaand dier. Dit experiment op menselijke proefpersonen (wúawúahaha) bewijst hoe razendsnel het brein heel weinig informatie omzet naar een totaal beeld. Achtpotigen zijn niet gering in het dierenrijk – schorpioenen, krabben en spinnen zijn wél de meest populaire – maar het is het eerste dier in onze database, omdat we het ‘dier’ kennen. Het ‘web’ garandeert dit resultaat – maar de botsing zit in het laatste woord, harig. Weinig mensen zullen spinnen aaien of zelfs waarderen (bron: vriendin, zus, collega’s). Omdat we beïnvloed zijn door media die ons imposante vogelspinnen laten zien, gaan we meteen over naar die specifieke soort. Knap toch, hoe onze grijze massa de boel proportioneel de zaak opblaast en het tóch logisch maakt?
Woordassociatie is een slimme manier om gedachten te lezen; wie praktisch met associatie weet om te gaan kan een gedachte implanteren zonder ook maar een woord te gebruiken dat wijst in die richting. Onzin? Ik garandeer je dat jij – de lezer – ook faalt in de tekst voor media-resistentie. Let op. Pastoor. Jongetjes. Twee ‘onschuldige’ woorden – maar ik weet wat jij denkt!
Wie begrijpt hoe een relationele database werkt, begrijpt dit mechanisme meteen. Woorden zijn de sleutels die leiden naar andere informatie. Wie een woord begrijpt, legt onmiddellijk een associatie. In onze hersenen worden vrijwel onmiddellijk nieuwe ‘records’ aangemaakt, zonder dat we er bewust van zijn. Het woord ‘zakzoziebel’ is waarschijnlijk onbekend, maar wie de Nederlandse taal beheerst heeft weinig moeite dit woord te vertalen naar klanken. Als je het voor het eerst hier las, leg je de ‘link’ naar de schrijver – Sam Rain. Je fronst misschien even, maar je hoeft niet te begrijpen wat ‘zakzoziebel’ betekent. En je begrijpt waarschijnlijk waar ik op doel – wúawúahaha!
Na het ‘gezakzoziebel’ – slap geouwehoer- zijn niet alleen klanken een reden tot aanmaak van ‘records’. Beelden, en met name vormen met kleuren, doen precies hetzelfde. Neem een aluminium blikje met een rode opdruk en witte letters. Wie geen bekend cola-merk in gedachten heeft, is waarschijnlijk wereldvreemd. Daarom investeren bedrijven in logo’s; herkennen is de belangrijkste factor. Wie een Chinese krant bekijkt en de taal niet beheerst, zal de tekst niet bevatten. Al worden symbolen en hele woorden vele malen herhaald, voor het brein is het ‘soep’ zonder associatie!
De beïnvloeding is echter op het gebied van emoties; een emotie is als een geestelijk hormoon. Of we voelen ons hetzelfde (neutraal), óf we zin blij (euforisch) en daartussen óf we zijn bang in een bepaalde mate (angstig). Dit interne systeem beïnvloedt ons gedrag met groot succes; echter zijn emoties op te wekken met associaties. Een laatste experiment:
Voor vrouwen: chocola, zonder calorieën, zoete geur (Louis Vutton)
Voor mannen: snel, spannend, stoer, sterk (Audi A6)
Oké, oké – bekende merken gebruiken is gemeen – maar wat denk je nu, eerlijk, bij chocola? Gezakzoziebel!
©SamRain
Mind Control

JavaScript voor mensen, hobbits en elven - Deel 16: Lussen met lijstjes


Op weg naar Mordor

“Lussen gebruiken met arrays is de basis voor gegevensverwerking.”
                                                                                                - Sam Rain
Hobbits zijn wezens die fysiek het afleggen tegen Orcs. Wie niet sterk is moet slim zijn – en dit gaat ook op voor mensen, hobbits en elven! Met lussen kan een hobbit vele Orcs op afstand houden en de moedige mens zijn onneembaar fort verdedigen met de hulp van JavaScripts elite troepen: arrays.
Orcs hebben een hekel aan gezonde dingen en fruit is iets dat Hobbits tot grote afstand kunnen werpen. Om te kunnen werpen, hebben we de volgende elvenmagie nodig:
Function werp (fruit){
var doelwit = “Orc werd geraakt door” + fruit;
}
Naast het kunnen werpen hebben we ook nog soorten fruit nodig:
var fruitmand = new Array (“citroen”, “appel”, “peer”, “meloen”);
/*een genummerde lijst*/
Een hobbit zou ieder afzonderlijk stuk fruit kunnen werpen, zoals op deze manier:
werp (fruitmand[0]); /*werpt een citroen*/
werp (fruitmand[1]); /* werpt een appel*/
Als de fruitmand nu vol zou zitten met 100 stuks fruit, zou het voor de griffelende Hobbit een levenswerk worden – wat nogal een tijdrovend proces is zonder de ring der ringen. Met een lus wordt het voor een groep Orcs al snel een nederlaag:
for (var gegooid=0; gegooid<fruitmand.length; gegooid++)
{
werp (fruitmand[gegooid]);
}
/* al het fruit in de fruitmand wordt gegooid naar Orcs */
Deze magie kan even overweldigend zijn, maar wees geen laffe trol – maar trek het Elvenzwaard en bekijk wat deze ‘for’ lus nu eigenlijk doet. De ‘for’-lus heeft 3 onderdelen die de magie tussen de accolades laat herhalen. Eerst maken we een ‘tijdelijke’ variabele aan met de naam ‘gegooid’ met de waarde 0. Dit is wat tovenaars noemen de initiële waarde. Vervolgens komt er de ‘conditie’ – iedere keer als alle magie de sluitende accolade bereikt, controleert JavaScript deze ‘conditie’ op zijn ‘Booleaanse’ waarde. Is deze ‘waar’, dan wordt de magie nogmaals uitgevoerd totdat deze ‘onwaar’ wordt. Fruitmand is een array en heeft daarom de ‘length’ eigenschap – het totaal aantal elementen in de lijst. Zolang we niet even vaak ‘gegooid’ hebben als het aantal ‘fruit’ in de ‘fruitmand’, kunnen we blijven werpen. Als dus ‘gegooid’ kleiner is dan het ‘aantal’ fruit in de fruitmand moet er geworpen worden. Arrays tellen vanaf nul in de ‘index’, maar de length eigenschap niet. Daarom begint ‘gegooid’ wel met nul en is dus altijd ‘1’ kleiner dan de ‘length’ van een array. Als laatst is er de ‘incrementatie’ – of ‘stap’; met de ++ operator verhogen we met elvenmagie de ‘waarde’ van gegooid met 1.
In feite gebeurd er precies hetzelfde als wanneer we het volledig zouden uitschrijven – alleen schrijven we het korter en efficiënter op. Met een ‘associatieve array’ wordt het nog gemakkelijker, zelfs bij het complexer maken:
var mand = {“licht” : “appel”, “zwaar” : “meloen”};
/* korte manier voor het aanmaken van een associatieve array als
mand [“licht”] = “appel”;
mand [“zwaar”] = “meloen”; */

De lus wordt nu:
for (f in mand){
werp (mand[f]);
}
De eerste Orcs rennen weg na deze fruitverrassing! Op naar Mordor!

Meer lezen over Programmeren? Klik hier voor de inhoudsopgave van alle artikelen!

©SamRain
JavaScript - 16