shutterstock_47730136

Een Java-cursus die ik al een jaar of 15 geef is de basiscursus voor Java SE (Java Programming). Ooit begonnen met Java SE versie 1.0, en inmiddels aangepast voor versie 1.7 (meestal Java SE 7 genoemd). De aanpassing is geleidelijk gegaan; steeds als er een nieuwe versie van Java uitkwam, werd de cursus herzien. Doordat er voortdurend nieuwe mogelijkheden aan Java werden toegevoegd, werd de cursus steeds voller. Hard werken voor de cursisten: ze zweetten en ze klaagden. Aan het eind van de week was iedereen altijd happy, dat wel, want ze hadden een hoop geleerd. Maar er kwam een dag dat één cursus van één week te weinig uren had om alle onderwerpen (goed) te behandelen.

Een ander probleem, bij iedere cursus, is dat de voorkennis van cursisten zelden precies aansluit bij het niveau waarop de cursus begint. Om die reden is er een beginnerscursus, die je eerst kunt volgen (Java Fundamentals). Die cursus gaat er vanuit dat de deelnemers wel programmeerervaring hebben, maar niet in Java. In de Sun-tijd was dit een tamelijk eenvoudige cursus (destijds SL-110 geheten). Laag tempo, beetje simpele benadering. Degenen die daarna de Programming-cursus gingen doen (toen SL-275 geheten) herhaalden de stof van 5 dagen SL-110 in de eerste twee van de vijf dagen SL-275. Voor veel mensen was dit een reden om de beginnerscursus over te slaan en te vertrouwen op hun voorkennis, bijgespijkerd in die eerste twee dagen. De Java Programming-cursus was dé cursus. Fun voor de cursisten, fun voor de docent.

Sinds de overname van Sun door Oracle, een paar jaar geleden, zijn beide cursussen grondig herzien. Niet alleen om ze aan te passen aan de nieuwste versie van Java, maar ook om de stof beter te verdelen over beide cursussen. De herziene Java SE 7 Fundamentals-cursus (D67234GC20) is een serieuze kennismaking met Java, voor mensen met niet al te veel, of roestige, programmeerervaring. De belangrijkste concepten en taalconstructies worden behandeld, in een tempo waardoor ze alle tijd hebben om de stof echt te snappen. Voor mij als docent is het weer een cursus die bevredigt doordat er echt wat uit te leggen is; de deelnemers komen er tevreden vandaan omdat ze nu eindelijk echt snappen hoe Java (SE) werkt.

De herziene Java SE 7 Programming-cursus (D67238GC20) stapt nu op een veel hoger niveau in. De voorkennis van de Fundamentals-cursus is echt een vereiste: de daarin behandelde stof wordt nog maar summier of in een hoog tempo herhaald. De beginselen van de taal Java worden niet meer uitgebreid uitgelegd. Dat geeft de ruimte om een overvloed aan belangrijke onderwerpen te behandelen. Het gaat natuurlijk over Java (de taal en de class libraries), maar ook over design patterns, over collections en generics, over Java I/O en multithreading, en over het werken met databases. Er heeft een verschuiving plaatsgevonden, die de kwaliteit van de cursus ten goede is gekomen. Voor het eerst wordt nu alle stof behandeld die gekend moet worden voor het bijbehorende certificaat (Oracle Certified Programmer).

Het probleem waar ik bij het geven van de Programming-cursus meermalen tegenaan ben gelopen is dat die verschuiving nog niet lijkt te zijn doorgedrongen tot de wereld. Ik krijg cursisten die niet de Fundamentals-cursus hebben gevolgd (wat niet verplicht is) maar die ook niet de bijbehorende voorkennis hebben. Een minder ervaren programmeur kan aardig gefrustreerd raken. Het tempo is hoog, er is weinig tijd om te oefenen met al die nieuwe dingen. De cursus levert wel wat op, maar het hangt van de overige cursisten af of er voldoende tijd is om de elementaire dingen nog een keer goed uit te leggen. En dat gaat altijd ten koste van andere onderwerpen.

Ik wil maar zeggen, wereld: kijk nog eens goed naar de beschrijving van de twee cursussen op de Oracle-site. En overweeg om toch eerst de Fundamentals-cursus te volgen als je ervaring niet aansluit bij de Programming-cursus. Ik heb al genoeg programmeurszweet moeten ruiken in mijn klas. Om niet te spreken over mijn eigen zweet.

Advertenties

bigstock-Shared-Thought-44626858

In een eerder artikel schreef ik over Communicado, de iPad-app die ik heb gemaakt voor mensen met afasie. Zij gebruiken het om te communiceren met andere mensen. Dat wat niet gezegd kan worden, kan worden aangewezen in de app. Er moet dan wel iets zijn om aan te wijzen: er moet eerst inhoud worden toegevoegd aan Communicado, in de vorm van rubrieken met items. Het zijn die items die later kunnen worden aangewezen. De toe te voegen inhoud is voor een deel persoonlijk, omdat wat een ieder te zeggen heeft vaak persoonlijk is. Je wilt iets zeggen over de mensen die je kent, of over je directe omgeving. Maar een ander deel van de inhoud is niet persoonlijk en zou kunnen worden gedeeld tussen de verschillende gebruikers. Daarvoor is er nu in Communicado versie 1.3 (sinds een week beschikbaar) een voorziening: het downloaden van rubrieken.

Iemand die inhoud wil toevoegen aan Communicado maakt gebruik van de zgn. wijzigbalk. Deze balk is normaal niet in beeld (want: zou de eigenlijke gebruiker alleen maar afleiden), maar kan zichtbaar worden gemaakt. In de wijzigbalk zitten knoppen waarmee de inhoud kan worden aangepast. Voor zowel rubrieken, subrubrieken als items is er een knop voor het toevoegen, en een knop voor het verwijderen. In Communicado 1.3 is er voor rubrieken en subrubrieken een derde knop toegevoegd: Download. Het aanraken van de knop toont een lijstje met beschikbare rubrieken. Er wordt verbinding gemaakt met de centrale Communicado-server om de rubrieken op te halen (in verkorte vorm). In de taal van de gebruiker (we ondersteunen iedere taal zolang het Nederlands of Engels is…) worden namen en korte omschrijvingen van de rubrieken gegeven. Na keuze van een rubriek wordt de volledige rubriek bij de server opgehaald, met alle teksten, afbeeldingen en geluiden. De opgehaalde rubriek wordt  daarna toegevoegd op de plek waar op de download-knop was gedrukt (d.w.z.: als toprubriek of als subrubriek onder een andere rubriek).

Communicado Download

De download-voorziening is pas net in de lucht, en er is nog niet veel standaard-inhoud op de server aanwezig. Die is grotendeels beschikbaar gesteld door een enthousiaste Communicado-gebruiker. Mijn idee, en hoop, is dat ook andere gebruikers die tijd hebben besteed aan het maken van inhoud, een deel daarvan beschikbaar willen stellen aan anderen. Om die reden is er in Communicado 1.3 ook een upload-functie aanwezig, maar die is niet voor iedereen zichtbaar. Pas na toestemming van de server worden de upload-knoppen getoond. Of eigenlijk: nadat ik in de server heb ingesteld wie er mag uploaden. Ik wil het nog even niet algemeen beschikbaar stellen, omdat per rubriek die wordt ge-upload ook aan de server-kant nog wat werk moet worden verricht. Door mij.

Maar ik ben niet van plan iemand tegen te houden die bereid is om een bijdrage te leveren door rubrieken te uploaden. Dus, beste lezer: als je een Communicado-gebruiker bent, en wel iemand van de soort die inhoud toevoegt: ga naar de Communicado website en meld je aan. Ik ga dan de server ervan overtuigen om je toe te laten als uploader. Ik kan wel met die server overweg: tenslotte heb ik ‘m zelf geschreven. In Java natuurlijk, maar da’s een ander verhaal.

bigstock-Code-bug-13044284

Er is een verschil tussen mensen en computers. Als programmeur en docent werk ik met beide, dus ik zou het moeten weten. Mensen zijn kwetsbaar. Neem nou die oude dame, die ik weleens tegenkom. Ze is laatst op de stoep vastgelopen met haar rollator. Gevallen, nekwervel gebroken. Geen zenuwen beschadigd, het is een klein wonder. De nekwervel moet wel weer aangroeien. En zal dat doen. Maar wat gebeurt er als een computer vastloopt? Dat is vrijwel altijd een software-kwestie. En wat doen we eraan: we herstarten de computer en beginnen opnieuw. Da’s met mensen toch een stuk lastiger.

Ik heb dus een eenvoudig vak, een arts zou er jaloers op zijn. Als de computer vastloopt door een fout in mijn software dan moet ik die fout zien te vinden en oplossen. Zo’n fout heet een bug, volgens de overlevering omdat computers vroeger grote aantallen mechanische onderdelen hadden, relais, die voortdurend open en dicht gingen om de computer te laten werken. Als daar een insect tussen kwam, een bug in het engels, dan was er storing in de computer. Tegenwoordig is een bug meestal een programmeerfout, een menselijke denkfout. Het vinden en verwijderen van de bug heet debugging. En dat is een vak apart. Zo’n bug is namelijk, in tegenstelling tot vroeger, niet meer met het blote oog te vinden. Hij is niet eens tastbaar.

De allereerste voorwaarde voor het oplossen van een bug is het kunnen reproduceren van de situatie waarin de fout optreedt. Soms is dat eenvoudig, omdat goed gemaakte software zo veel mogelijk informatie geeft over de plek waar het fout is gegaan. In Java zou er een exception kunnen optreden, die zichzelf goed beschrijft in een log file. Soms is het afhankelijk van externe omstandigheden, en moet je heel vaak “herstarten” om alle mogelijke externe omstandigheden uit te proberen. Maar als dat eenmaal lukt, dan komt de grote magie: je zet een breakpoint. Je laat de software stoppen vlak voor de fout optreedt. Niet echt stoppen, maar meer pauzeren. Alle gegevens die op dat moment bekend zijn, blijven bewaard en kunnen worden bekeken. Hopelijk geven ze een aanwijzing voor wat er op dat moment al fout is gegaan, of nog fout zal gaan. Daarna kun je weer verder gaan, om te zien wat er gaat gebeuren. Dat kan zelfs in stappen, regel voor regel. Na iedere stap kan je dan weer zien hoe je verder bent gekomen. Of je kunt weer helemaal zonder pauzes doorstarten (en het nogmaals fout laten lopen, natuurlijk).

Allemaal nog wel te doen, zeker met de software tools die programmeurs tot hun beschikking hebben. Het wordt pas echt moeilijk als er meerdere externe of interne omstandigheden zijn, die niet altijd op hetzelfde moment plaatsvinden. Er zijn dan ontelbaar veel mogelijke combinaties van omstandigheden. Niet te reproduceren, omdat ze in willekeurige combinaties plaatsvinden. Dit noemen we een timing probleem. De nachtmerrie van een programmeur. Letterlijk, vaak. Wat doe je eraan? Blijven proberen, maar vooral: nadenken. Wat kan ik fout hebben gedaan? Welke combinatie zou funest kunnen zijn? En anders: elimineren. Zo veel mogelijk delen van de code uitschakelen. De externe omstandigheden één voor één uitschakelen. En veel, heel veel, herstarten. Ik ben weleens tot 3 uur ’s nachts doorgegaan met zo’n probleem, zonder de oorzaak te vinden. (Daarna, in mijn slaap, droomde ik de oplossing. Om 7 uur opgestaan, en ja hoor. Ik moet het dus al die tijd geweten hebben, denk ik.)

Oftewel: de eerste voorwaarde voor het oplossen van een bug is het kunnen reproduceren van de foutsituatie. Dan goed kijken terwijl het fout gaat. Herstarten. Nog eens proberen. Tot je het exacte moment en de exacte plek ziet waar het fout gaat. Tot je het echt fout ziet gaan. Je snapt meteen waarom dit met computers wel werkt maar met mensen niet. Stel je voor dat de dokter zou kunnen zeggen: we spoelen u even terug tot vlak voor de val, en dan doen we het nog een keer. Of anders: we herstarten u tot u opnieuw bij dit moment komt, en dan zetten we een breakpoint om te zien wat er mis gaat. Net zo lang herstarten tot je uiteindelijk helemaal “foutloos” door het leven komt. Maar dat zou jammer zijn, toch? Dan zijn we allemaal perfect en misschien wel allemaal hetzelfde. Terwijl mensen toch worden gevormd door de butsen die ze onderweg oplopen. Dus laat maar zo, ik kan ermee leven. Met vallen en opstaan.

bigstock-Blog-10686950

Mijn vriend Jean-Claude Wippler is gestopt met zijn dagelijkse weblog, JeeLabs. Elke dag (met een paar tussenpozen om bij te komen) om 00:01 verscheen er een nieuw artikel, 1400 dagen lang. Elke dag was het lezen ervan één van de eerste dingen die ik deed. Ik zal het missen. Zijn blog is zeker een inspiratiebron voor me. Hij deed me nadenken over ons gemeenschappelijke vak en over de toepassing ervan in onze dagelijkse omgeving. Hij liet me kennismaken met nieuwe ontwikkelingen. Hij liet me kritisch kijken naar mijn eigen consumentengedrag. En hij was ongetwijfeld één van de redenen waarom ik mijn eigen blog begon.

De JeeLabs blog ging (en gaat, want je kunt nog steeds alles teruglezen) over, zoals Jean-Claude het zelf zegt, “computing stuff tied to the physical world”. Over hardware en over software. Jean-Claude is een eersteklas programmeur en heeft zichzelf ook de nodige kennis bijgebracht over elektronica. Zijn drijfveer daarvoor is het terugdringen van het overmatige energieverbruik in en rond de woning. Hij doet dat op zijn eigen manier: wat hij ervoor nodig heeft, leert hij kennen. Of, als het nog niet bestaat, vindt hij uit. Zo maakte hij altijd al software. Hij schreef eens een programma waarvoor hij een database nodig. Hij vond geen goede, dus maakte hij er zelf een. Maar daarvoor moest eerst een goede programmeertaal worden gevonden. Dat werd een project op zichzelf. Ik geloof dat hij nog net niet zelf een taal heeft bedacht, maar wel alles eromheen. Hij ging wel eens zo ver de diepte in dat terugkeren naar de oppervlakte niet kon zonder gevaar van caissonziekte.

Het knappe van Jean-Claude is dat al zijn onderzoekingen ook concrete resultaten opleveren. Het is geen gedroom of geïdealiseer, maar er is een winkel waar zijn producten te koop zijn. Als je wilt gaan experimenteren met hardware, software, terugbrengen van energiegebruik, home automation: je zult hier op gang worden geholpen. Met hardware-bouwpakketten, bijbehorende software, en alles voorzien van goede documentatie. De winkel gaat gewoon door, ook na het stoppen van de blog. En ik weet zeker dat Jean-Claude ook doorgaat. Alleen, het niet meer hoeven ophoesten van een dagelijkse blog zal hem alle ruimte geven om zijn gedachten weer de vrije loop te laten. Om ongeremd te kunnen experimenteren. Misschien schrijft hij er dan toch nog wel eens over, geheel vrijblijvend.

Maar het kan natuurlijk ook dat hij iets geheel anders gaat doen. Of misschien wel niks. Lekker, die ruimte die het niet schrijven van een blog je geeft (ik moet volgende week weer). Jean-Claude, we gaan je missen. En vermoedelijk jij ons ook wel een beetje, dat is altijd het dubbele van grote beslissingen. Take care indeed!

20130929-133833.jpg

Laatst was ik op reis, met de trein, en ik verbaasde me. Over de mensen om me heen, over mezelf. Waar ben je als je reist? Onderweg van ergens naar ergens anders (of omgekeerd). Maar ben je dan intussen nergens? Of ben je nog waar je vandaan kwam, of al waar je naartoe gaat? Ik verbaasde me erover dat zo weinig mensen lijken te zijn waar ze zijn. Ze zijn nog waar ze waren, of ze zijn al waar ze zullen zijn. Maar ze zijn niet, zoals dat heet, hier en nu. In Marten Toonders “Heer Bommel en het nieuwe denken” zegt de strandvoogd dat “sommigen naar vroeger verlangen en anderen op later wachten. Men heeft geen heden”. Dat gaat nog een stapje verder.

Mijn verbazing werd aangeslingerd door mensen die op hun mobiele apparaatjes zaten te kijken. Hun mobiele communicatiedoosjes, waarmee ze het contact met het thuisfront onderhielden. Wat jammer, dacht ik, want deze mensen zijn niet hier maar daar. Terwijl het hier zo mooi is. Hier is de plek waar ze normaal niet zijn, maar nu wel. Ze missen de kans om zich te laten inspireren door nieuwe indrukken. Om een ervaring rijker te worden. Letterlijk rijker.

Vervolgens begon ik me schuldig te voelen. Wat? Omdat ik eraan meedeed? Nee, dit keer deed ik dat even niet. Het was omdat ik zelf één van de mannen ben die deze technologie mogelijk maakt en stimuleert. Als programmeur en als evangelist van alles wat Apple is. Wat jammer nou, dat mensen die met een vliegtuig in een ander land aankomen meteen de telefoon pakken om te vertellen dat ze zijn aangekomen. Terwijl ze daardoor nou juist niet aankomen, maar blijven waar ze waren (althans, als ze naar huis bellen). Wat jammer nou, dat schoolmeisjes die met de fiets van huis naar school vertrekken meteen hun mobieltje pakken om door te praten of te chatten met de vriendinnen die ze toch al de hele dag gaan zien. Waardoor ze niets meemaken van wat er onderweg is mee te maken. Wat jammer nou, dat treinreizigers blijven “appen” met thuis, terwijl ze door de prachtigste landschappen reizen. Wat een gemiste kansen.

Maar is dat nou allemaal de schuld van de moderne technologie? Toen ik wat meer om me heen keek, in de trein, zag ik toch nog iets anders. Er zaten eigenlijk veel meer mensen de krant te lezen dan te “mobielen”. Die waren dus ook niet hier en nu. Hooguit is het lezen van de krant wat minder verslavend en verslindend. Maar ze misten net zoveel als degenen met de mobieltjes. En weer anderen lazen een boek. Die waren helemáál in een andere wereld; door een boek kun je ook aardig worden opgeslokt. Kortom: niks nieuws onder de zon (die scheen, ik zag het).

En weet je wat het leukste is? Ik zit dit stukje te schrijven in de trein. De zon schijnt, de wereld is mooi, maar ik zit naar mijn Macje te kijken. En dat is ook fijn. Want nergens kan ik beter werken dan in de trein. Geen afleiding door alles wat ik nog moet doen. Concentratie. Soms ga ik een dag “vrij” reizen, alleen om die reden. Dus: het is allemaal niet zo zwart-wit. De mensen die zitten te communiceren met het thuisfront doen dat misschien ook wel omdat ze, dankzij het reizen, eindelijk even hun gedachten kunnen ordenen en de ongedane zaken kunnen afmaken. Voordat ze zijn waar ze zullen zijn.

Waarom heet dit stukje dan eigenlijk zoals het heet? Omdat ik (jullie en mezelf) toch wil stimuleren om stil te staan bij waar we zijn. Niet meer bezig te zijn met het verleden of ergens, nog niet bezig te zijn met de toekomst of ergens anders, maar nu en hier te zijn. Want, om met Steve Jobs te spreken: “The journey is the reward”.

shutterstock_151502030

De cursus die ik vorige week gaf was dus een Live Virtual Class. En ja, het ging goed. Alle verbindingen deden het, misschien wel omdat jullie voor ons hebben geduimd. Maar waarover ging die cursus eigenlijk? Wel, over Java natuurlijk, en om precies te zijn over de Java Enterprise Edition (Java EE). Zeg maar: Java voor grote mensen. Of eigenlijk grote bedrijven, die hun IT-medewerkers op zo’n cursus sturen. Bedrijven, die voor hun zaken afhankelijk zijn van een uitgebreid geautomatiseerd systeem. De IT-medewerkers moeten dat systeem ontwerpen, programmeren en onderhouden. Vaak in teams die ieder verantwoordelijk zijn voor een deel van het systeem. Het is cruciaal dat die teams onderling communiceren en met elkaar afspreken hoe de delen van het systeem samenwerken. Daarbij speelt Java EE een belangrijke rol. Welke bedrijven werken ermee? Denk aan je bank, je verzekeraar, of je internetwinkel.

Java EE definieert een groot aantal standaards waaraan de programmeurs zich moeten houden. Dat vereenvoudigt het maken van afspraken, en zorgt ervoor dat de verschillende onderdelen die de teams maken op elkaar aansluiten. Het maakt het ook eenvoudiger om goed opgeleide mensen te vinden, omdat de standaards van Java EE in veel grote bedrijven wereldwijd worden toegepast. Daarbij komen ze vaak dezelfde problemen tegen:

  • beveiliging (gebruikers toelaten en specifieke permissies geven)
  • gelijktijdigheid (sommige systemen hebben miljoenen gebruikers waarvan er duizenden tegelijk bezig kunnen zijn)
  • schaalbaarheid (hoe zorg je ervoor dat je een plotselinge toename in het aantal gebruikers aankunt)
  • distributie (je kunt om de twee laatstgenoemde problemen op te lossen het systeem verdelen over een groot aantal computers die samenwerken, maar dat is op zich ook weer een hele klus)

en nog veel andere problemen. Java EE helpt bij het oplossen van deze steeds terugkerende problemen door het leveren van een zgn. Application Server. Dat is software, die diensten aanbiedt aan de systemen van de bedrijven. Diensten, die de oplossing zijn voor de bekende problemen. Een bedrijf hoeft “alleen nog maar” zijn eigen specifieke probleem op te lossen en toe te voegen aan de application server. Dat gebeurt in de vorm van componenten. Stukken software die ieder een taak hebben, hun eigen deel van het systeem implementeren. De application server voegt zijn eigen diensten daaraan toe en koppelt alle componenten aan elkaar.

De grote leveranciers van commerciële application servers zijn Oracle en IBM. Daarnaast bestaan er vele open source varianten (ontwikkeld door een groot aantal tamelijk slimme programmeurs van over de hele wereld), zoals GlassFish of JBoss, die gratis te downloaden zijn. Niet per se minder goed dan de commerciële, maar zonder support en garanties. Die bank van je vindt dat niet fijn (en kan zich dat veroorloven). Maar veel wat kleinere bedrijven draaien zonder problemen op een open source application server.

Er zijn verschillende soorten componenten gedefinieerd; je kunt ze groeperen volgens de plek die ze innemen in het systeem. Dat kan dichtbij de gebruiker zijn (de “voorkant” van het systeem); de taak van de componenten daar is de interactie met de gebruiker (de client). Of het kan dichtbij de databases zijn waarin alle gegevens worden bewaard (de “achterkant”); daar gaat het om het efficiënt en betrouwbaar opslaan en terugvinden van de gegevens (de data). Of het kan er tussenin zijn; daar gebeurt het “echte” werk, het rekenen, het controleren, het overmaken van geld, het invoeren en uitleveren van bestellingen. Dit deel wordt de business logic genoemd. Onderstaand schema laat deze plekken zien, van voorkant tot achterkant, met de gebruikelijke termen voor die plekken. Engelstalig, natuurlijk. (Je moest eens weten hoeveel moeite het me soms kost om deze blog in het Nederlands te schrijven.)

shutterstock_71174038

Is Java EE het ei van Columbus? Voor sommigen wel, voor anderen niet. Er was een tijd dat Java EE niet heel populair was omdat het te complex was, met als gevolg dat er allerlei meer lichtgewicht alternatieven ontstonden. Die zijn deels ingehaald doordat Java EE ook simpeler is geworden, en daarmee populairder. Dat is een nek-aan-nek race die altijd zal blijven bestaan, maar dat is goed nieuws. Zo worden beide stromingen er beter van. De wereld blijft veranderen, Java verandert mee. Voor een Java-docent goed nieuws, natuurlijk. Ik zou trouwens in slaap vallen als mijn vak niet voortdurend veranderde.

Screen Shot 2013-09-15 at 13.23.48

Deze week geef ik een speciale cursus: ik zit thuis, en mijn cursisten zitten elders in de wereld (nou ja, België). Het is een Java Enterprise cursus voor Oracle, in de vorm van een Live Virtual Class (LVC). Het heeft nogal wat voeten in de aarde gehad om het technisch werkend te krijgen, want natuurlijk was de software die ik ervoor nodig heb niet uitgetest op een Mac maar alleen onder Windows. En natuurlijk heb ik een Mac (zoals veel docenten met mij, overigens). Hieronder in het kort de problemen die ik tegenkwam, en de oplossing.

De verbinding tussen mij en de cursisten loopt via internet. Oracle gebruikt daarvoor WebEx Training Center, een systeem van Cisco. We kunnen elkaar zien en horen, en de cursisten kunnen zien wat ik op mijn computer doe (en omgekeerd, desgewenst). Op die manier vertoon ik de slides en geef ik de demo’s van het programmeren. Tegelijkertijd kunnen we via WebEx met elkaar chatten, de cursisten kunnen vragen stellen, en allerlei andere signalen doorgeven. Hun hand opsteken, bijvoorbeeld, als ze een vraag willen stellen. En dat ook nog snel genoeg, zonder al te veel vertraging tussen het moment dat iemand iets zegt en de anderen het horen.

Een tweede verbinding is nodig tussen iedere deelnemer (docent en cursisten) en een computer waarop die deelnemer werkt. De deelnemers gebruiken hun eigen computer alleen om de verbindingen te maken, maar de cursus zelf vereist een compleet geïnstalleerde Java-omgeving. Daarvoor heeft Oracle ergens in de wereld computers staan (echte of virtuele), waarmee we verbinding maken. Dit is de zgn. lab-omgeving; we maken daarop de programmeeroefeningen.

Het is me wel eens gelukt om de lab-omgeving vanaf mijn Mac te bereiken, maar inmiddels heeft mijn Mac nieuwere software (een pre-release van OS X 10.9). Met als resultaat: “hij doet ut niet”. Geen lab-omgeving meer (een X11-probleem, voor de kenners). De WebEx software wil al helemaal niet werken op mijn Mac. Wel de kant van de cursisten, maar de kant van de docent stelt blijkbaar hogere eisen. What to do?

De eerste oplossing die ik probeerde: een oude Mac ernaast, met oudere software (OS X 10.8). Dat hielp voor de lab-omgeving, maar WebEx liet het afweten. De tweede oplossing: een Windows laptop lenen. Oracle had er nog wel één over, en die staat nu hier. Maar ja. Moet ik nu elke keer dat ik een LVC ga geven (hopelijk volgen er na deze week nog meer) mijn hand ophouden bij Oracle? Dat staat toch ook niet erg professioneel. Een Windows laptop kopen dan? Nee, er is een betere oplossing. Geen echte machine, maar een virtual machine. Niet zo gek, voor een virtual class.

Een virtual machine is software, geen hardware. Het is een programma dat je installeert op je computer. Voor de Mac kun je kiezen tussen de programma’s Parallels en VMware Fusion. Ik koos voor de laatste, omdat de nieuwste versie (Fusion 6) mijn OS X 10.9 ondersteunt. Nadat je VMware hebt geïnstalleerd kun je Windows (of een ander besturingssysteem) daarbinnen installeren. VMware gedraagt zich voor Windows als een echte harde computer. Ik koos voor Windows 7, een stabiele versie die wordt ondersteund door WebEx. Het effect is dat er op mijn Mac-scherm een venster is waarbinnen Windows draait. VMware zorgt ervoor dat Windows gebruik kan maken van de hardware van mijn Mac: toetsenbord, muis, geluid, camera, USB, netwerk. Ik installeerde WebEx binnen Windows, ik maakte de verbinding met de lab-omgeving binnen Windows: alles werkte. Geniaal!

Voordeel voor de toekomst: VMware bewaart Windows als een image, in feite gewoon een file op mijn Mac harde schijf. Alle instellingen blijven bewaard. Volgende keer, als ik weer een LVC moet (mag) geven, start ik VMware en boem, alles doet het weer. Denk ik. Hopelijk stapt Oracle voor die tijd niet over op virtual teachers.

Voordeel voor nu: omdat ik een groot scherm heb, zet ik naast het VMware-venster (met Windows, Webex, de lab-omgeving, en nog wat software) een venster met het cursusboek. Zie het plaatje boven dit artikel; als je erop klikt krijgt je een grotere versie te zien). Als je goed kijkt zie je binnen het Windows 7 venster nog een tweede venster met een andere versie van Windows (XP); dat is de computer met de lab-omgeving. Drie computers op één scherm. Ik kan op de (virtuele) Windows XP machine de oefeningen demonsteren; ik kan op de  (virtuele) Windows 7 machine met de cursisten communiceren; ik kan op mijn (echte) Mac alles meelezen in het cursusboek. Niet dat ik de cursus niet heb voorbereid, maar het helpt toch om te zien wat de cursisten zien.

Het wordt een spannende week. Het lijkt me een stuk lastiger om op deze manier de aandacht van de cursisten vast te houden. Ik kan niet eens zien (want ik hoop dat we de video niet de hele week aan laten staan) of ze nog in de “klas” zitten. Of de hond aan het uitlaten zijn. Of een vergadering hebben. Duim voor me. En voor de cursisten.