Welkom bij aflevering 13 van CodeKlets.
We zijn vandaag met z'n tweeën, Bernard en ik.
Hallo Bernard.
Hallo.
Weer online.
En dat gaat voorlopig niet veranderen.
Dat gaan we misschien nog wel tien keer herhalen.
Maar het is het nieuwe normaal, zoals ze dat zo mooi zeggen.
Maar het is wat het is.
Het wendt op zich ook wel een beetje.
Dan moet ik wel zeggen, we hadden wat opstartproblemen.
Dus dat wendt weer niet.
Maar goed, om te beginnen ook nog steeds bedankt Salves voor het mogelijk maken van het opnemen
via Zencaster.
Zij sponsoren ons voor dat kleine deel, dus daar zijn we blij mee.
En ik wil beginnen met wat huishoudelijke zaken voor CodeKlets.
Dat is eigenlijk een beetje aandachtvragen.
We zijn nu sinds een week of drie, denk ik, begonnen met een nieuwsbrief.
Het begint aardig te lopen.
Ik zou zeggen, check hem uit.
Je kunt hem via codeklets.nl, kun je je daar op subscriben.
En ja, het is gewoon een nieuwsbrief waar we gewoon wat nieuwtjes over software ontwikkelingen.
Ja, die zetten we daarin.
Dan hoef je zelf niet over alleen te googlen.
Dat doen we dan voor je.
De leukste artikelen kouden we voor.
Maar ook conferenties, podcasts en dat soort zaken.
Dus dat is eigenlijk stiekem een tip.
Wij van WC1 tippen.
Ja, dan is al een tijdje, zeg maar, het doel.
Kijk, een podcast maken, dit klinkt een beetje raar.
Maar dat kost natuurlijk ook stiekem ook wel wat geld.
Dus je host de boel en wat tools die je gebruikt.
En het is niet zo in Nederland dat je zomaar heel erg rijk wordt voor het podcast.
Dat is ook volgens mij nooit de bedoeling geweest van CodeKlets.
Maar je hebt altijd wel zoiets van, oké, nou, die aantal kosten zou wel fijn zijn als we die gedecht kunnen zien worden.
Een van de modellen is om dan via bijvoorbeeld een Patreon een petje af voor vrienden van de show.
Zodat de luisteraars eventueel zouden kunnen steunen.
Nou, ik vind niet dat we daarover moeten gaan betelen, want dat vind ik wel een beetje raar.
Maar we zitten erover na te denken om die mogelijkheid aan te bieden.
Zodat mensen gewoon vrijblijvend eventueel de show kunnen, of de show, de podcast kunnen steunen.
Nou, we gaan even kijken hoe dat loopt.
Misschien heeft helemaal niemand zin erin en misschien wel.
We zien wel en we moeten nog even nadenken welke vorm, want er zijn verschillende manieren om dat te doen.
Ze hebben allemaal een voordeel en een nadeel, maar goed, even kijken wat het beste bij ons past.
Mooi is dat ik op de achtergrond mijn kat hoor zeuren wat die wil schijnen.
Die hoor ik ook.
Ik vind het ook altijd heel erg vervelend als mensen in een podcast gaan vragen om steun en elke week weer.
Maar ik snap het heel goed.
Je wilt, ja, het is niet erg om kosten te maken, want het is hartstikke leuk om te doen.
Maar je wilt niet dat je er arm van wordt.
Nou, dat gaat ook niet gebeuren.
Maar ja, ik denk als mensen überhaupt, als ik geld geef aan een podcast, dan is het meer een blijk van waardering.
En dan denk ik niet aan de kosten die ze maken.
Nee, oh zo. Ja, dat klopt.
Dat is misschien ook wel een ding, want ik steun één podcast zelf.
En dat was meer van ja, goed, ik vind het wel leuk.
En ja, het is niet een steunbetaaling, vind ik een beetje raar, maar gewoon.
Duimpje omhoog.
Ja, precies een duimpje omhoog.
Ja, precies wat je zegt.
En dat is wel fijn.
Ja, nou, ze zijn er in een podcast land zijn er stiekem best wel wat ontwikkeling in de laatste tijd.
Iedereen roept natuurlijk podcasts hebben de toekomst en dat zal misschien ook wel zo zijn.
Het was denk ik wel echt wel populairder, want je merkt ook dat in de gewone media steeds meer verwezen wordt naar podcasts.
Dus dat is op zich heel positief.
Wat ik een beetje argwaan bij heb, is dat er een aantal grote partijen zoals Spotify, nu inmiddels ook Sony, Apple,
dat ze ook gewoon een soort van exclusieve contenten gaan maken, dat er een soort van platform specifieke content gaat komen.
Nou goed, dat is nu helemaal zo, daar gaan wij echt niks tegen doen.
Daar kun je gewoon iets van vinden. Maar goed, daar gaat het me nou niet eens om, want podcast is een heel simpel iets.
Het is gewoon een RSS feed in XML met verwijzing naar een audiofaal, meer is het eigenlijk niet.
Nou zo zijn ze begonnen, en er is ook een index ooit door Adam Curry, die kennen we misschien in Nederland wel.
En zijn vriend Dave Weiner, die hebben samen zijn ze dat idee begonnen, en ze hebben ook een index gemaakt,
zodat je daar via die index makkelijk allerlei verschillende podcasts kon vinden.
Nou die index is uiteindelijk door Apple gekocht, ook allemaal nog niet spannend, want in principe deed Apple er nooit heel gekke dingen mee.
Maar dat was en is nog steeds wel de de facto index, zeg maar, die dus eigenlijk de meeste podcast applicatie gebruiken om een podcast te vinden.
Nou Spotify doet dat wel een beetje anders, die proberen dat allemaal op hun eigen platform te krijgen, wat ik vanuit hun begrijp.
Maar inmiddels is Adam Curry ook bezig met het podcast 2.0, dus dan krijg je een nieuw formaat, wat extensies op het RSS-formaat.
Zodat je ook bijvoorbeeld betalingen kunt doen. Dat is wel interessant, dat is niet per se voor ons, maar ik vind het wel interessant.
Dan kun je zeggen, oké, gedurende het luisteren stort je, zeg maar, stream je geld.
Dus dan zijn het bitcoins of lightning en dan is het wel, ja, dat is wel interessant.
Maar dan kun je zien aan de hand van hoeveel geld mensen geven aan een bepaalde aflevering.
Ja, zover komen ze dan in de aflevering of wat vinden ze wel of niet leuk.
En daar ontstaat wel een interessante dynamiek.
Dus daar ben ik stiekem wel een beetje nieuwsgierig naar voor wat er gaat gebeuren.
Ik geloof niet dat wij op korte termijn dat gaan inzetten, maar het is wel interessant om dat een beetje in de gaten te houden en wat daar gaat gebeuren.
Nou goed, dat is even een beetje een side note en wat ontwikkeling in podcastland.
Ik wil er zelf nogal wat dieper in duiken, want mensen die zijn er nog wat mee bezig.
Dus even kijken of we daar überhaupt iets mee moeten.
Maar ook ook de techniek vind ik nog wel interessant, gewoon als nieuwsgierig developer.
Dat is het podcast, de website.
De website hebben we, ja, die is inmiddels een tijdje, de vernieuwde website zit inmiddels een tijdje in de lucht.
Nou, ik vind het op zich oké, functioneel.
Hij is nog wel wat kaal en daar kan nog wel wat, ja, misschien nog wel een likje verf overheen hier en daar.
Nou goed, ik ben niet Mr. Designer, dus het was even even in elkaar gooien zodat de functionele tijd er is.
Maar er ontwreekt ook nog wat content, we kregen van iemand te horen van hey,
jullie hebben geen colofon, about us, zeg maar, pagina.
Dus die moet er eigenlijk nog wel komen, zodat ze ook meer of meer weten van hey, we zijn, dus dat is misschien ook wel handig.
Ja, dat is het, de website heb ik eigenlijk niet te melden.
Qua huishoudelijke, huishoudelijke mededelingen.
Maar laat het maar eens even hebben over de gast, want we hebben dit keer een gast die ervaring heeft met een onderwerp waar ik echt eigenlijk gewoon helemaal geen kaas van heb gegeten.
Of ik heb het een beetje omzeld of verdrongen, ik weet het niet.
Dat is één onderwerp, ander onderwerp weet ik niet, daar hebben we allemaal wel wat kaas van gegeten, dus daar ben ik ook wel in geïnteresseerd.
Maar goed, de gast van vandaag is Wander Hille.
Ja, hallo.
Ik neem aan dat je poggermeren leuk vindt, want het zou weer gek zijn als je niet zou zeggen nee.
Ja, nee, ik voel helemaal schildig natuurlijk, nee, ik vind het echt leuk en ik doe het ook al best wel lang.
Ik heb een pauze gehad, waar ik een beetje heb gezonderd, heb ik vanavond een electrical engineering gedaan.
Oh, cool.
Maar nee, mijn eerste, ja, het ging al heel vroeg mis bij mij, want op mijn zesde kreeg ik boek Windows voor kinderen van Addo Stuur.
Ik weet niet of jullie daar nog uit die generatie komen.
En dan met Sinterklaas later het boek meer Windows voor kinderen.
En eigenlijk het jaar daarna ging het pas helemaal mis, want ik kreeg programmeren voor kinderen op mijn zevende verjaardag.
En dat was met Superlogo.
Ja, met Turtles, dus kan je heel mooi tekeningen maken op het scherm.
En ik had een vliegtuig dat kwam dan van de linker kant van het scherm, kwam naar binnen, maak dan een salto waarbij je ook nog allemaal vormen tekenen.
Vloog weer weg, maar dat vond ik helemaal.
Eindelijk was het meteen verkocht en is eigenlijk nummer goed gekomen.
Nou ja, dat is wel grappig.
Logo ben ik echt vergeten.
Ja, Superlogo noem jij het?
Ja, er zullen misschien varianten van zijn.
Ja, zo heet die taal.
Het kwam heel goed op het scherm als je het op startte.
Maar ja, dat was ook helemaal in het Nederlands vertaald was deze vorm, dat was voor kinderen.
Dus in plaats van dat je functies defineert met Def of Define of Learn of wat dan ook, dan was het zeg maar leer salto en dan zo lang.
Je had zo lang missen en als statement en aan het eind begon.
Was het niet end of zo'n curly bracket slijten, maar dat was ook einde en het was helemaal vertaald in het Nederlands.
Dus het was voor mij, als zeven, sprak ik nog niet zo goed Engels natuurlijk, dus dat was hartstikke mooi.
Ik ken logo alleen, niet de Nederlandstalige variant, maar dat heeft vroeger ooit vast wel eens in zo'n blad gestaan.
Daar moet je het maar aan denken.
Het grappige is dat het heet logo, maar het staat altijd zo'n turtletje in toch?
Ja, het heeft daar ook weer tekenen op het scherm, dus je kan de pen down en dan kun je zeg maar vooruit 100, rechts 90.
Ja, en roteren en dan een beetje en dan.
Dat leg je dan vier keer en dan betekent die een vierkantje.
Ja, dat is leuk.
Dat is heel visueel, je krijgt meteen feedback over wat je het eigenlijk kan doen.
Eigenlijk is dat wel heel goed ja, want dat zei, volgens mij verliezen ook, dat het soms.
Ik kan me niet heel goed herinneren hoe dat zat met foutmeldingen of zo,
maar dat dat in een programmeertal, dat een foutmelding die wij gewoon inmiddels gewoon denken.
Ja, dat is normaal zakt van de wereld, maar die schrikt natuurlijk mensen heel erg af.
En niet iets heel fijn om te lezen.
Fatal error, ja.
Ja, precies.
Staat ook een beetje onduidelijk vaak zo van ja, x not defined.
Ja, maar wat dan waar niet?
En nu dan ja.
Wat voor manier niet?
Dus dat schrikt mensen gewoon af.
Dus en terwijl bij de logo was dat best.
Ja, maar goed, ik kan me niet herinneren.
Dat was heel toegankelijk, zo moet ik het zeggen.
Ja.
Ja, dat was heel goed om mij te leren.
Maar dat ben je er wel zo goed bij geweest.
Ja, dat is even kijken.
Ja, daarna op de middelbare school niet zo heel veel meegedaan.
Ik had ook een lerares informatica en die was eigenlijk lerares Frans en het schat
van de mensen heel erg ter west, maar dat ging gewoon niet zo lekker.
Ik heb gestudeerd, gestudeerd bij de marine wapentechniek op het Kim, dus de officiersacademie.
Ik heb daarna ook een jaar of of negen nog bij de marine gewerkt.
En daar heb ik wel allerlei dingen gedaan, maar naar allerlei missies geweest.
Maar ik heb ook bijvoorbeeld zat ik dat heet dan zo mooi de kennispool en daar zat
ik dan bij ontwikkeling van nieuwe nieuwe radars en Defensie die betaalt heel veel geld aan
TNO elk jaar om nieuwe onderzoek te doen naar nieuwe nieuwe dingen.
En daar worden ook officieren van Defensie bij gezet om gewoon even te kijken of ze
of ze dat wel goed doen.
Oké, daar heb ik dan op onderzoeksniveau niet zoveel af te zeggen.
Maar het is wel de bedoeling dat je weet waar je het over hebt en waar zij het over hebben.
Dus als ze zeggen van nou, we hebben nou 10 miljoen extra nodig om te gaan doen,
dat je kan zeggen van volgens mij hebben de Franse onderzoek naar gedaan en kan je niet gewoon hun resultaten gebruiken.
Ja, precies.
Dus dat bestond misschien voornamelijk uit literatuur, onderzoek of vergelijken of?
Ja, literatuur, onderzoek, maar ook ja, je bent gewoon veel in contact met die mensen
en ook met je counterparts van andere Nafarlanden om te overleggen waar je het over hebt.
Want een marine radar, dat is eigenlijk voor heel veel landen toch een beetje hetzelfde.
Ja, en het doet ongeveer hetzelfde, zit in ongeveer dezelfde omgeving, moet hij werken.
Hij heeft ongeveer dezelfde veilen, want als Nafarlanden zijn er gewoon een paar verwachte dingen waar je naar wil kijken.
Dat zijn Russische gewestvliegen en Chinese friketen en dat is het wel, zeg maar.
Dus als je dat dan met z'n allen kan doen, het zijn ook dingen dat je bijvoorbeeld met de Engels overlegt
van nou jullie doen dit stuk en wij doen dat stuk en aan het einde gaan we dat uitwisselen.
Dus leuke banen, radar zijn leuke dingen.
Ja, maar geen programmeerwerk?
Nee, dat moest ik aan de TNO's overlaten.
Dus op een gegeven moment heb ik ook weer weggegaan bij de marine omdat ik me toch weer dichter bij de techniek wilde houden.
Dan dat waar mijn carrière daar naartoe ging.
Dus nou heb ik je steeds verder weggekomen van de techniek.
Maar van jammer, dat vind ik wel heel leuk.
Ja, en wat gebeurde er toen?
Even kijken, nou dat was in 2015 ofzo.
Toen ben ik op een gegeven moment weggegaan bij de marine.
Ben ik aan het werk gegaan bij Oeutransfer, een avalisering start-up in Nederland, gewoon in Amsterdam.
En ook hoe dat gebeurde was eigenlijk heel leuk, want ik ging weg bij de marine.
Dus er is heel veel van embedded systems en de vermogensversterkers, allemaal heel low level.
En ik had zoiets, als ik aan de slag wil bij een hippe start-up, dan zal ik toch op z'n mis beter moeten weten hoe zo'n H2P-request werkt.
Want de web is helemaal hip.
Dus ik dacht, ik ga voor mezelf een website maken.
Dus de allereerste probeers dat je was uit de H2P-pagina of de HTML-pagina, dat ging eigenlijk goed.
Dus toen dacht ik, dat is leuk, maar dit was wel echt gewoon hello world, maar dan voor de web-pagina.
Wat is mijn volgende project?
Dus ik keek een beetje omheen en toen dacht ik, weet je dat Utransfer?
Vaals uploaden, downloaden, dat is toch wel een beetje een opgelost probleem, zou je zeggen.
Dus dit is een mooi tussenprojectje.
Het is niet zo groot en moeilijk als Facebook klonen, maar het is ook niet helemaal een basis ding.
Dus ik dacht, nou, dan ga ik dat proberen zelf te maken.
En zo gezegd, zo gedaan, dus vol goede moed ging ik aan de slag en ik was daar een week of zo mee bezig.
Ik had een paar weken vrij.
En wat er toen gebeurde was dat een vriend van mij, die zei van, hey Wanner, op de lokale Ruby Meetup,
daar gaat iemand van Utransfer die heeft gesproken en die heeft zijn prestatie online gezet.
Van, is dat niet leuk om naar te kijken?
Dus ik dacht, nou ja, dat zou leuk zijn.
En dat was een jongen die heet Julik, die werkte samen met Arno, die hier ook op podcast is geweest.
En mij hebben we veel samen gewerkt.
En die zei van, dit zijn allemaal interessante problemen, want inderdaad files up en download is niet zo'n probleem.
Maar als je er miljoen tegelijkertijd up en download in Utransfer doet,
dan wordt het al een stuk lastiger natuurlijk.
En wat, hij had een aantal van die problemen die daar waren en zei van, deze die hebben we opgelost en deze die zijn nog steeds lastig.
En ik keek zo naar die, mijn prestatie, dat is zo lastig toch niet?
Dus ik zou tip, tip, tip op mijn eigen klantje, had ik dat een soort van semi opgelost.
En ik stuur een mailtje van, waarom doen jullie het niet zo eigenlijk?
Want dat moet toch te doen zijn.
En zei van, ja, kreeg ik een mailtje terug? Ja, dat is wel zo.
Maar wat ik niet in de prestatie heb gezegd, is dat er ook nog deze en deze en deze constraint zijn.
En dus ik heb zo een beetje heen en weer gemailed, leuke gesprek gehad.
En ja, dat is toen een beetje uitgefizzeld, maar toen ze een paar maanden later vacature hadden,
kreeg die van zich van vier kanten tegelijkertijd opgestuurd.
Ja, long story short, daar heb ik ook drie maanden gewerkt, of drie jaar gewerkt, moet ik zeggen.
Ja, en daar ben ik nu net een half jaartje weg.
En daar zijn we nu.
Even iets in mijn wervel in het wind.
Ja, dat is wel een interessante carrière.
Ik zag dat je nu zeg maar een tijd, je bent nu een half jaar.
Doe je eventjes niks? Of hoe zeg je, een sabbatical heb je genomen?
Ja, ik ben een beetje een sabbatical aan het houden.
Ik werk wat aan alpe-source dingen die ik leuk vind.
Ik ben in tussentijd getrouwd en daar wou ik ook de tijd voor nemen.
Ja, en langzamer zeker ben ik een beetje aan het freelancen.
Er zijn mensen die mij geld willen geven om mooie dingen voor me te maken.
Dus dat kan ook geen kwaad.
Altijd mooi, ja.
Oké, cool.
Goed, het eerste onderwerp, want ik gaf het een beetje een introductie al aan.
Ik heb ooit misschien een paar regels geschreven.
Trouwens, ik kan het wel moeilijk doen, maar het is Haskell.
Het is een beetje een interessant taal.
Het is bijna...
Ja, goed, voor mij is het een beetje ver van mijn bed.
Het wordt een beetje meaty.
Heel veel mensen zijn er super enthousiast over.
Ik kent niet heel veel mensen die Haskell programmeren.
Maar de mensen die het programmeren, die hebben zoiets van,
ja, je moet echt eens een keer naar kijken, want het is heel mooi en tof.
Oké, nou, het valt wel, want ja, ik heb geen tijd.
Dus ik doe er even niks mee.
Dus ik heb het altijd een beetje opzeld of zo.
Ik heb er nooit echt een reden voor gehad om er echt helemaal in te duiken.
Maar ja, jij programmeert ook in Haskell, heb ik begrepen.
Of heb je geprogrammeerd in Haskell?
Beide.
Ik heb het gedaan vroeger en ik doe het nog steeds.
Met veel plezier ook.
Een van de dingen wat ik net zei dat ik aan open source een bijdrage ben,
is de compiler van Haskell.
Dus wat een beetje de oorsprong is van die taal is,
in de jaren 70, 80 waren er een heleboel kleinere taaltjes.
Elke universiteit had zijn eigen dialect.
Op een gegeven moment zijn ze bij elkaar gaan zitten.
En hebben gezegd, wat zijn nou de beste elementen van elk dialect?
En dat heb je samengevoegd tot één oertaal en dat is Haskell geworden.
En wat ik daar zo leuk aan vind, is het past heel goed bij...
Kijk, wat ik zei, bij mijn studie bij de marine heb ik heel veel wiskunde gehad,
heel veel elektronica.
En de manier waarop je dat uitdrukt, de vergelijking waarin je dat opschrijft,
dat gaat op een gegeven moment ook een beetje beïnvloeden over hoe je denkt.
Dus vaak als ik een programma zie, dan kijk ik niet zozeer naar de structuur ofzo.
Waar ik voornamelijk naar kijk, is hoe stroomt de code, zeg maar.
Ik weet niet, ik vind het heel lastig om dit in woorden te noemen.
Ja precies, je hebt de data, die gaat hierheen, die wordt veranderd in iets anders.
Die wordt misschien samengevoegd.
En uiteindelijk komt daar een resultaat uit.
En Haskell past gewoon heel goed bij die manier van denken over je programma.
En dat bevalt mij heel erg.
Wat overigens niet wil zeggen dat ik graag alles in Haskell zou willen doen.
Maar wat zijn dan volgens jou een beetje de eigenschappen van Haskell
die het jou mogelijk maken om op die manier na te denken?
Nou, het is eigenlijk met elke vorm van functioneel programmeren.
Daar is het heel erg op gericht.
En je beschrijft niet wat je wil dat de computer doet.
Je beschrijft wat je wil dat die voor je berekent.
Dus als je zegt, ja, doe is een voorbeeld.
Ik wil graag de sum van al deze getallen.
Dan maakt het me helemaal niet uit of je daar ondertussen een extra variabele...
Dus je wil de sum van een lijstwachtel.
Dan maakt het me helemaal niet uit of je een extra variabele aanmaakt
en ze daar allemaal bij optelt.
Of dat die ze allemaal in parallel bij elkaar optelt in blokken van 2 en dan van 4 en dan van 8.
Of dat die nog andere dingen doet, dat vind ik eigenlijk niet zo belangrijk.
Ik wil dat die computer dat voor mij bepaalt.
Ik wil alleen kunnen zeggen, nou, wat ik wil hier is de sum van al die getallen.
Juist die focus op wat je eigenlijk wil bereiken in plaats van hoe je het wilt bereiken.
Dat is iets wat ik in veel andere programmeertalen van minder zie.
Het is ook een beetje gegeven.
Kijk, bijvoorbeeld als ik een website maak, dan doe ik dat veel liever in Ruby.
Want een backend, een API ofzo, dat laat zich veel beter uitdrukken.
En nu ga je iets ophalen uit de database.
En om deze 500 redenen kan je allemaal HTTP errorcodes genereren of exceptions maken.
En dat soort hele branchy dingen, dat is Haskell iets minder fijn in.
Maar als je een wiskundige berekening wilt uitdrukken,
dan doe je dat veel liever in Haskell dan in Ruby.
Omdat die taal die is daar gewoon meer op gericht.
Oké, en heb je het ook op je werken gebruikt?
En wat voor soort problemen had je dan mee te maken?
Nou, één ding wat ik heb gemaakt, dat was op een gegeven moment hadden we een soort van...
Nou, moet je dat zeggen.
We hadden een microservice die dan hashes moest opzoeken in een grote lijst.
Een soort blacklist met hashes.
Maar dat waren niet gewoon normale hashes zoals je in een HashMap stopt.
Maar dat waren zogeheten contextual hashes.
En dat kwam uit.
Dat was een hele ingewikkelde vectorberekening.
144 dimensionale vectors.
En dan moest je daar een soort van multidimensionale bol om heen tekenen.
Als er andere punten in die bol zaten dan was het een match.
Dat was typisch zoiets wat je dus in tekst niet zo heel goed kan uitleggen.
In Ruby zou dat ook...
Het is een beetje een gedoe. In Haskell is het een one-liner.
En je hebt daar ook mooie tree-based algoritmes voor.
Waar dus een heleboel onderzoekers in Haskell al heel veel tijd in hebben gestopt.
En waar de Ruby-gemeenschap meestal wat minder enthousiast over wordt.
Omdat die zich meer richt op normale web-dingen.
Oké, cool dat het zo makkelijk is.
Ik heb ooit iets met Haskell gedaan omdat ik iets meer van wilde weten.
En ik merkte zelf dat, nadat ik dingen in Haskell had geprobeerd,
dat je een aantal leerpunten ook meeneemt naar de Ruby-omgeving.
Vastregels als no-side-effects, die vond ik heel lekker.
En daar lette ik naderhand toch meer op.
Heb jij dat ook? Of zijn er meer van dat soort dingen?
Ja, dat is heel erg.
Er zijn inderdaad no-side-effects, immutability is er zo eentje.
Type classes zoals je ziet in Rust bijvoorbeeld.
Dat is er ook eentje die ik echt heb geleerd.
En Haskell eigenlijk nooit meer niet zie.
Zelfs als ik in een andere taal aan het programmeren ben.
En dat helpt me ook wel om sommige dingen te analyseren.
Ik had een tijdje geleden een junior die ik mocht mentoren.
En ik vroeg hem wat voor ding komt er uit deze functie?
Wat returnt die?
En zegt hij, ja, dat is een getal.
Wat voor getal dan?
Hij had nog niet een heel goed model in zijn hoofd van
wat voor type dingen er uit die functie kwamen.
In dit geval was het dan of een float of een nil.
En omdat hij dat niet zo goed in zijn hoofd had,
was het ook heel lastig om die functie in te bouwen in de rest van het programma.
Omdat hij ook niet in zijn hoofd had wat de rest van het programma verwacht.
Want als die verwacht of een float of een nil of een string,
dan is het al heel iets anders dan wat er uit die functie kan komen.
En zo krijg je steeds meer verwarring omdat dat niet duidelijk is.
Wat ik ook leuk vind is dat het helemaal niet nodig is om overal Haskell te schrijven.
Sommige mensen beschuldigen me weleens van ja,
want jij wilt gewoon eigenlijk alleen maar Haskell schrijven in elke baan.
En dat is helemaal niet waar.
Ik wil graag de goede delen van Haskell, die zou ik graag willen overnemen.
En het mooie is dat dat al gebeurt.
Dus Ruby is met alle blocks en proxen en lanta's die je daar tegenkomt,
heeft al superveel functionele programmerdingen.
En in heel veel talen zie je dat steeds meer terugkomen.
En wat ik mooi vind is dat, en dat komt ook uit die oorsprong waar ik het al over had,
dat het komt als een soort van onderzoektal.
Het is ook heel makkelijk uit te breiden door onderzoekers.
En je ziet dat er gewoon een heleboel rare experimenten in zitten.
Sommigen waren een heel groot succes, sommigen niet.
Dat kan gebeuren. Maar het is een onderzoektal.
Dus het is prima dat daar dingen niet lukken.
En je ziet dat heel veel functies in moderne programmaatalen,
dat die min of meer direct zijn overgenomen van Haskell,
omdat ze gewoon een heel goed idee waren.
Dus dan kan je bijvoorbeeld denken, list comprehensions in Python,
of type classes in Rust, of eigenlijk zelfs de Go-routines van Go.
Dat model, daar is heel veel ervaring op gedaan in Haskell.
Want je hebt precies dezelfde soort green threads die dan heel lightweight zijn.
En dat vind ik leuk, dat daar eigenlijk gewoon de goede ideeën worden overgenomen
en de slechte raad het.
Dat is leuk. Iemand heeft z'n PSD mee gehaald,
maar we gaan verder niks meer meer doen.
Even even kijken, want Haskell is al in pose.
Je zei ook net van oké, je zou eerder
een web applicatie maken in Ruby dan met Haskell.
Dat zal vast iemand gedaan hebben.
Dat is trouwens ook een vraag van een collega van mij.
Die had ik vandaag gesproken.
Die heb ik wel vaker aangehaald in de podcast.
Maar goed, die heeft mij ook meerdere keer gezegd,
je moet eens een keer Haskell doen.
Blijkbaar heb je een site, daar kun je allerlei opdrachten doen met Haskell.
Die kun je dan oplossen.
Ja. Maar goed, daar is het gewoon niet van gekomen.
Maar hij vroeg me over, anders moet je vragen
of er webdevelopment gedaan wordt met Haskell.
Maar is dat er ook, zeg maar, of is het meer van oké,
blijft het nog steeds bij dat met meer wiskundigen?
Het hangt er een beetje vanaf.
Kijk, sowieso, het kan allemaal wel.
Ja, er zijn gewoon libraries.
En de eerste laatste, een paar maanden geleden,
heeft een Duits bedrijf, dat heeft dan een framework gelanceerd,
dat heet IAP, en dat probeert een beetje de rails van de Haskell wereld te worden.
Ja, kijk, HTML genereren, dat is op zich goed te doen.
En er zijn allemaal libraries.
Aan de andere kant zijn ze vaak niet zo super gepolist
zoals een rails of een Django of zoiets.
Maar er zijn wel bedrijven.
Dus als groot voorbeeld is Facebook spamfiltering,
dat kwijt allemaal op Haskell.
Er is bijvoorbeeld in Utrecht zit een bedrijfje,
er zit een aantal Haskell bedrijfjes zelfs.
Er is er eentje die doet met machine learning,
maken ze automatisch chords, hoe zeg je dat,
noten en bladmuziek.
Bladmuziek is een lastwoord.
Dus die geef je een stuk muziek,
en dan generereert die daar automatisch bladmuziek uit.
Dat is op zich een website.
Je moet je muziek, ja, je liedje uploaden via webpagina,
maar dat wordt dan later automatisch door de machine learning heen getrokken.
En dat is allemaal in Haskell.
Zo zijn er nog wat meer dingen die dan net niet helemaal
een crud-app zoals dat zo mooi heet,
maar die wat meer involved processing erachter hebben,
dat is er zeer goed geschikt voor.
Oké, cool. Maar wat je ook de mogelijkheid,
de microservices zijn ontstaan, of ze zijn niet ontstaan,
die zijn er misschien alweer al een tijdje,
maar je kan zo een oplossing,
ik moet nou zeggen een applicatie of een landschap,
dus stel dat je nou een oplossing moet maken,
dan zou het dus wel kunnen zijn dat je een deel van die applicatie met Haskell zou schrijven
en dat dat ineen microservices weggestopt wordt.
En de rest met Ruby.
Zie je dat ook weleens gebeuren of is dat spoorradies komt dat voor?
Ja, je vraagt het aan mij alsof ik soort van de guru ben op het gebied van...
Nee, nee, nee.
Ik zie wel dat inderdaad dat je dat soort van microservices in meerdere talen
die dan beter geschikt zijn, dat zie ik wel redelijk regelmatig.
Omdat Ruby en Python of Node.js ofzo, dat zijn vaak talen die dan niet...
Dat zijn interpreted languages natuurlijk,
dus als je daar echt zware nummer crunching mee wilt doen,
dan kan je beter iets gecompileerds gebruiken.
Dat hebben we bij Wytransfer ook weleens gedaan,
bijvoorbeeld dat we in Crystal, als je die taal kent,
dat is een soort gecompileerde Ruby,
die één superzware endpoint, die hebben we daarin herschreven
omdat het gewoon niet te doen was in Ruby.
Dat was echt een drama.
En dat ging letterlijk honderd keer sneller in Crystal.
Dat is gewoon de moeite waard.
Maar voor de meeste dingen, zeker in het webwereld,
dan is Ruby gewoon snel genoeg.
Of je webpagina nou gerenderd wordt in één of twee milliseconden,
dat is leuk, maar de ping van mensen die zoveel hoger,
dat merken ze niet eens.
Nee, oh zo, ja.
Het is een relatieve snelheid, want die...
De randtrip, dat is toch al honderd miliseconden.
Ja, microseconden zou ik wel willen.
Microseconden zou wel tof zijn.
Ja, precies.
Maar er is toch ergens iets met natuurkundige wetten en zo.
Nou, dat gaat gewoon niet.
Misschien verzinnen we daar ook nog wel iets op.
Maar goed, dat is eigenlijk de familie, de functionele talen.
Wat nu veel gebeurt, is dat het...
Ja, goed, er is een hele post geweest,
bijvoorbeeld Java, C++, dat is allemaal de objectorienteerde talen.
We merken ook wel dat er een aantal beloften die daar in de oog gemaakt werden,
die zijn niet helemaal waargemaakt.
Ook in C-Shop, dus de taal waar je tot net meestal informeert,
daar komen ook steeds meer functionele aspecten daar terug.
Dat is wel iets...
Dus better matching.
Er zijn een aantal van dat soort zaken die zie je dan weer in C-Shop komen.
Dan zijn er al weer mensen die zeggen van ja, maar hallo.
Ja, dan laat je bepaalde concepten los, zeg maar, of...
Ik ben er niet zo heel strikt in.
Maar ik vind het wel grappig dat er die zaken overgenomen worden.
Want op een tot net platform heb je dan F-sharp als de functionele taal.
En dan worden er soms dingen overgenomen.
Soms ook wel dingen van C-sharp naar F-sharp, maar meestal andersom.
Dus dat is wel een beweging die je wel de laatste tijd wel ziet.
Ook op het Java-platform is dat met...
Nu moet ik even uitkijken wat ik zeg, maar Scala.
Oeh, dat zou ook...
Scala?
Ja, dat Scala ook daar vandaan kwam.
Ja, toch?
Ja, Scala is een grote inspiratiebron voor Elixir.
En volgens mij is Elixir ook functioneel.
Dat is eerlijk, ja.
Ja, eerlijk, ja.
Wat precies functioneel is dat er een paar mensen...
Er zijn super puristies van, ja, dat moet dit hebben.
En sommige mensen zijn van, ja, maar JavaScript met Map en ForEats...
Dat is ook wel functioneel genoeg, zeg maar.
Ja, precies.
Dat zijn hele gradaties in.
Ja, klopt, ja.
Het is volgens mij ook die side-effects en zo.
En ja, dat klopt.
F-sharp is ook...
Daar zitten wel wat side-effects in.
Dus je kunt sommige dingen...
Ja, het is niet puur functioneel.
Zo is het.
Maar dat is gewoon meer convenience.
Van, ja, je wilt productief blijven, zeg maar.
Maar is jouw liefde voor Haskell, is dat Haskell?
Of heb je ook andere functionele programmeertalen die je ook erbij doet?
Je zei dat je met die compiler aan het werk was.
Je zit toch heel erg in de Haskell-hoek als je mag kiezen?
Ja, meestal wel.
Haskell heeft een heleboel manieren om gewoon heel compact op te schrijven wat je wil.
En dat waardeer ik erg aan.
Maar wat dat betreft, ik ben niet zo'n purist.
Als het beter in Ruby gaat, dan doe ik het in Ruby.
En als het beter in Python gaat, dan doe ik het in Python.
Of in Rust, dat maakt het allemaal niet uit.
Ja, ik heb gewoon een paar talen waar ik graag naar grijp als ik een bepaald soort problemen heb.
Maar ik ben helemaal niet getrouwd met Haskell.
Nee, nee, nee, klopt. Of klopt, dat kan, ja.
Nee, wel grappig. Je hoort het steeds vaker, dus ik moet er maar eens een keer aan geloven.
Ik had toevallig begin deze week, volgens mij.
Ja, begin deze week wel even naar de Haskell site gegaan.
En dan kun je zeg maar, dan krijg je zo'n, ja, niet een tutorial, maar gewoon een beetje zo'n rappel.
En dan kun je een aantal dingen.
Ja, ik weet wel wat je zegt.
Ja, in eerste instantie had ik gezegd, oké, ik snap de syntax nog niet, zeg maar.
Ik begrijp ongeveer wel wat er staat.
Maar ik weet nog niet precies wat nou waarin.
Want je herkent een aantal zaken.
Ja, die lijken, die zijn er waarschijnlijk overgenomen.
Dus bijvoorbeeld in C-Shop in mijn geval.
Dan denk ik, oké, dit snap ik wel.
Maar wat betekent nou precies?
En je hebt type inferring, is het volgens mij, toch?
Zodat ze, ja, inferren.
Dus dat, nou goed, ik snap er nog niet helemaal wat de syntax was.
En qua tijd, dus deze week, kwam ik er natuurlijk verder niet aan toe.
Om dan nog meer de diepte in te duiken.
Ja, dat.
Oké, maar stel nou dat ik voor een leuk probleem
wat ik voorgeschoten krijg, Haskell wil gaan gebruiken.
En dat wil ik morgen doen.
Kan ik dan gewoon op mijn laptopje Haskell installeren
en dan ga ik typen en dan is het klaar?
Moet ik dan IDA's krijgen die op m'n oren?
Ja, ik kan zo een gewikkeld maken als je zelf wilt, natuurlijk.
Nee, dat wil ik niet.
Kijk, ja, kan je beginnen met typen en dan is het klaar.
Dat is natuurlijk ja, als je goed pundt in Haskell.
Maar dat is hetzelfde voor opgeprogrammeerd aan.
Ja, maar ik kan het gewoon op m'n Mac downloaden en dan heb ik...
Dan doe ik gewoon...
Een tooltje dat heet GHC-up.
Zij is de compiler.
En dan gewoon de P erachter.
En dat is hetzelfde als RBM of PIEMF en dat soort dingen.
Dan kun je gewoon een compiler neertrekken.
En de tooling die er omheen hoort.
En dan open een tekstval in de editor die het lekkerst vindt.
En begin met typen.
Zo makkelijk kan dat zijn.
En dan kan ik het ook deployen als ik het wil, ergens neerzetten.
Het compaalt in principe gewoon naar binaries.
Dus je kan het af en toe draaien waar je wilt.
Ik wil met zin met alle normale KVS die erbij houden.
Dus als je het op Linux compileert, dan moet je het misschien even cross-compiler voor Windows.
Maar de normale dingen die erbij houden.
Maar daar hebben we nu containers voor.
Ja precies, of stoppen te doen.
Ja precies.
Dat is op zich ook wel mooi.
Je ziet zeker die tooling die wordt wel steeds belangrijker.
Een paar jaar geleden was er een beetje een gedoe.
Iemand anders was super ongelukkig met de normale tooling.
Dus hij had zijn eigen variant geschreven.
En een paar blockpasser in die de oorspronkelijke tooling echt tot de grond toe afbranden.
Dat heeft de maintenance van de oorspronkelijke tooling ook wel weer een beetje matuatie gegeven.
Om hun spullen weer product te krijgen.
En eigenlijk zijn de meeste features van die nieuwe tooling die zijn weer in de oorspronkelijke gevoegd.
En dat is allemaal een beetje gesetteld.
En de tooling die is echt een stuk beter geworden.
IDE integratie die wordt ook met de week beter op het ogenblik.
Er zijn een paar mensen bezig met language server integratie.
Dus in VS Code ofzo dan kan je dat zo op inhaken.
Oké, cool.
En er waren al IDE's of niet?
Ja, dat is altijd een beetje een gedoe geweest.
Want je hebt, hoe moet ik dat goed uitdrukken?
Er waren een paar IDE's.
En dat is zeker een paar die al vrij vroeg zijn begonnen.
Maar de oorspronkelijke developers daarvan zijn ermee gestopt.
En dat is eigenlijk nooit meer echt van de grond gekomen.
En je ziet de laatste jaren of twee ofzo.
Dat is gewoon weer echt een goede push om dat goed op orde te krijgen.
Ook omdat nieuwe talen gewoon allemaal goed op orde hebben.
Ja, ja, klopt.
Toen als we begonnen in 1990 was het allemaal zo belangrijk niet.
En nu dan zie je met de concurrentie van bijvoorbeeld Rust.
Dat mensen zeggen van oh, dit is een goed idee.
Dat willen wij ook.
Dus dan schrijft iemand een goed doeltje.
Zo kruisbestuift dat.
Ja, ik denk dat toen ik best wel wel kwam.
Ja, het is gewoon steeds belangrijker, simpel.
Dat is nu helemaal zo.
Maar ja, goed.
Ik ben gewoon heel dikke idees gewend.
En heel vaak vind ik dat fijn.
Maar soms vind ik Visual Studio Code of Front-end Development
of even snel wat kleine dingetjes doen.
Ja, dat vind ik gewoon een simpelere idee.
Ja, editor noem het.
Een veredelde editor, zo moet ik het een beetje zien.
Zo noem ik Visual Studio Code dan maar even.
Ja, vind ik het dan ook fijn.
Ja, goed.
Kijk, op school kreeg je met...
Dan moest je juwelijke command daarin C compileren met...
GCC.
Unix was CC en later GNU CC.
GCC.
En hier nog wat later was het G++, meen ik.
Ja, weet ik veel.
Maar goed, dat deed je allemaal gewoon lekker met het handje command line.
En de Pickles deed je dan met VI.
En daar deed je nog wat trucjes in.
Een andere adem, Emacs.
Dus dat was een beetje hoe je dat in Unixland deed.
Maar goed, in Windows is het allemaal wel een stukje luxer, zeg maar.
Dat is de luxe voor je visueelder.
Nou goed, voordeel en nadeel.
Het is gewoon smaak.
Je kan niet zeggen van oké, het een is beter dan het ander.
Dus dat...
Oké.
Maar ik wist trouwens niet eens.
De Haskell is sinds...
Want je zegt nu net 1990, maar dat is sinds...
Wanneer was de eerste versie, zeg maar, uitgekomen?
Volgens mij 1990.
Ik heb het nog opgezocht.
Dus het is letterlijk dertig jaar oud.
Dat zie je trouwens af en toe als je in die compiler code bezig bent.
Zie je dat ook wel terug.
Dat je denkt van nou, hier zijn toch een paar ideeën.
Dat zou ik zelf niet zo geschreven hebben in Modern Haskell.
En dan kijk je naar een commit message.
Dat is letterlijk 25 jaar geleden.
Dan denk je, holy shit.
Ja, op zich.
Maar op zich valt het toch wel mee, zeg maar.
Het is niet zo'n heel, heel oude taal, zeg maar.
Het kan heel erg, ja.
Ja, ja, ja.
Ik bedoel, Java is inmiddels ook al een jaartje of 20.
Misschien nog wel iets ouder.
Ja, je zegt het.
25 jaar?
Ja, wel.
Ja, 25 jaar of iets ouder, ja.
Dus dat schild ontloopt elkaar niet heel erg.
Ja, ik heb meer dan 20 jaar geleden, denk ik, een applet geschreven in Java.
Dan kon je net applets in de browsers bouwen, ja.
Ja.
Toch wel nieuwsgierig, hoor.
Ja.
Zoeken erop.
Ja, zoeken erop.
Ja, Java, die moet echt, volgens mij, tegen de 25 jaar aan zijn.
Wat Bernard ook zegt, dat wel.
Versie 1.0 van Java was 23 januari 1996.
Oké, 24 jaar oud.
Ja.
Betrekkelijk jongen.
Ja, bijna 50.
Bijna 50.
Hey, Real World Haskell.
Dat is een mooi boek.
Real World ook.
Ja, dat is ook een beetje de eilose bron van grappen, natuurlijk.
Want er bestaat geen boek Real World JavaScript of Real World Ruby ofzo.
Dus alle Ruby die wordt geschreven is voor de Real World.
Het is alleen als Haskell dat je dat erbij zit op je boek.
Ja, dat is wel, ja.
Ja, Bernard liet even, ja, dat is voor de podcast luisteraars natuurlijk niet te zien.
Maar Bernard liet even een boek zien.
En Real World Haskell, zeg maar.
O'Reilly waarschijnlijk toch, of niet?
Ja, met een dier op.
In zo'n grote keven.
Ja, wel interessant wie iedere keer verzint welk dier welke taal is.
Maar dat is wel wel grappig.
Ja, oké, nou, cool.
Dat wist ik niet.
Ja, ik had echt het gevoel dat hij nog ouder was.
Maar misschien verwaar ik dat met Lisp of zo?
Ja, dat zal wel.
Ja, dat is een vraag.
Ik kan hem niet goed behandelen.
De Haskell 1.0 specs zijn in 1990 gepubliceerd.
O, de spec?
Ja, 1.0.
Oké.
Zullen we nog wel iets eerder begonnen zijn met samenstellen?
Ja, vast wel, ja.
Ja, een vraag.
Ik weet niet of jij wil of kunt of whatever beantwoorden.
Maar dat wordt altijd gevraagd door mensen met die functioneel programmer.
Maar wat is een monad?
Je hebt zo verschrikkelijk veel slechte monad-tutorials op de internet.
Ja, precies.
Op een gegeven moment was er iemand die dan Haskellers op de hak wou nemen.
En zegt, ja, dat zijn allemaal van die academische wiskundigen.
Die zeggen, ja, monad is een endofunctor in een monoid van die categorie.
En sommige andere mensen gaan helemaal de andere kant op.
En die zeggen van, ja, een monad, dat is een soort burrito.
En dan komt daar ook het verhaal uit dat je denkt, dit gaat helemaal nergens.
We hebben het helemaal verloren wat je probeert uit te leggen.
Ja, het is, wat is een monad?
Als ik het gewoon zou willen beschrijven.
Een monad is gewoon een type data structure.
Daar komt het nog, het lijkt het meeste op.
En net als dat je verschillende data structures hebt met ongeveer dezelfde vorm.
Om dingen in te stoppen, een array en een linked list.
Dat kan je misschien voorstellen.
We hebben ongeveer dezelfde vorm, weet je?
Het zijn een heleboel objecten in een rijtje.
En je kan er een soort van van links naar rechts doorheen als je wil.
En ja, dat, daar zou je voor kunnen stellen.
Dat is een soort van oer data class.
En zowel array als linked list die inherente daarvan.
Ja, precies.
En monad is net zo'n soort oer data class.
Alleen dan is het voor berekeningen.
Dus je, het is functioneel programmeren.
Dus je kan functies gewoon in container stoppen, in data structure stoppen.
En monad is een data structure waar je functies in kan stoppen.
Met bepaalde garanties die je erbij krijgt.
Dus je kan ze bijvoorbeeld één voor één allemaal uitvoeren.
En dan heb je allemaal verschillende implementaties van die monad.
Die die berekening dan allemaal net op een andere manier doet.
Net als een array en een linked list zijn ongeveer hetzelfde.
Maar toch net anders.
Dan heb je ook verschillende monads die allemaal net anders zijn.
Dus je hebt eentje die die voegt state toe aan je berekening als je dat wil.
Of er eentje die die voegt error handling toe.
Of je hebt er eentje die voegt backtracking toe aan willekeurige berekeningen.
Sommige berekeningen is niet heel handig, maar sommige wel.
En zo heb je dus heel veel verschillende monads die allemaal ongeveer dezelfde vorm hebben.
Nou, cool.
Het is weer gewoon een slechte mannen tutorial hier.
Nee, nee, nee.
Maar dat is altijd.
Want dat is wat voor mensen.
Dus ja, ik weet het een beetje.
Bijna prank, zo zeg maar.
Het wordt heel vaak gevraagd.
Het wordt heel vaak niet goed uitgelegd.
En of het is natuurlijk ook hoe iemand het, zeg maar, zelf begrepen heeft het concept.
Kan helemaal anders zijn.
En het werkt ook gewoon helemaal voor iemand.
Het kan helemaal anders zijn dan voor iemand anders.
Niet alle twee gewoon begrijpen en gewoon kunnen inzetten.
Dat is heel bijzonder met monads.
Dus het zijn andere concepten in software ontwikkeling die wat eenduidiger uit te leggen zijn.
Bij mijn monads is dat wel een beetje een show notes.
Gaan we wel een Wikipedia link?
Ja, ik wens ik je succes ook wel.
We zoeken op memes en monads.
Ja, precies.
Monads Explained met comics.
Nou, dan kom je dus bij de berichters uit.
Ja, dat is eigenlijk wel humor.
Ehm, eens even kijken.
Ja, nou goed, je zei net dat Google bijvoorbeeld monads gebruikt voor de spam detection.
Facebook.
Volgt het heel veel?
Is het in populariteit aan het toenemen of is het een beetje stabiel?
Ja, het is moeilijk te zeggen.
Ik ben de laatste tijd zelf meer mee bezig.
Dus ik spreek gewoon meer Haskellers de laatste tijd.
Maar ik weet niet.
Er is een gezegde in de Haskell community en dat is avoid success at all cost.
Maar zeggen ze er dan bij.
Je moet wel de haakjes goed zetten.
Dus het is niet avoid success net all cost.
Nee, het is avoid success at all cost.
En het is prima om succes te hebben, maar we willen niet onze idealen daarvoor opzij zetten.
Dus we gaan voornamelijk niet onze idealen opzij zetten om een grotere groep nieuwe programmeurs te loggen.
Die daar verder geen interesse in zouden hebben en die dat normaal nooit zouden willen doen.
Dus als er mensen Haskell willen leren, dan zijn ze altijd welkom.
Maar als ze dat niet willen, dan gaan we niet enorme marketing campagnes voeren om dat te trekken.
Ik denk dat dat daar ook een beetje mee te maken heeft.
Het zal ook waarschijnlijk nooit zo groot worden als JavaScript of PHP of zelfs Ruby.
Het hoeft niet.
Het is een researchstaal.
Dus ja, zelfs ik het beleven, het blijft ongeveer gelijk.
Oké.
Dat is trouwens ook niet eens bij stilstaan.
Toen je in het leger zat, en toen TNO aan het klussen was voor het leger,
was er toespraak van hebben zij toen Haskell toevallig,
want dat zou ook kunnen toch voor bepaalde systemen?
Of is dat?
Ja, dat hoeft natuurlijk niet.
Dat mag ik natuurlijk niet al te veel uitbrengen,
maar ik kan wel vertellen dat, zeker op het moment,
in de laatste decennium, de laatste 5 jaar,
ik ken mensen die speciaal zijn aangenomen bij TNO,
wiens baan eigenlijk is om alle crappy onderzoeks Python code
te vertalen van hun Jupyter Notebook naar een C++
om het ook gewoon performant te draaien.
Ik kan je best voorstellen dat er een van de dingen waar ze nu mee bezig zijn,
bijvoorbeeld als je met een radar ergens naar aan het kijken bent,
dan wil je graag weten, ja, het is ongeveer zo groot als een drone.
Maar sommige vogels zijn ook zo groot als een drone,
dus is het nou een drone of een vogel?
Want dat kan belangrijk zijn, een drone kan van de veld zijn,
een vogel was ook niet.
Dus waar ze naar kijken bijvoorbeeld is,
wat heeft een vogel wel en een drone niet?
Nou, vleugels. Een drone die heeft namelijk van de propellertjes.
En die gaan veel sneller dan dat een vleugel met zijn wiki klapt
en dat kun je terugzien in het radar signaal.
En daar heb je dus allemaal berekeningen voor
en die werken uitstekend, ook in Python kan ik je vertellen.
Alleen daar duurt het misschien vijf seconden
voordat je dat allemaal uitregelt als het daar gaat.
Een paar gigabyte data moet er doorheen gebladerd worden.
En die vijf seconden, dat is wel gewoon te veel of te lang.
Dus die vriend van mij, zijn baan is eigenlijk
om dan die soort van werkende onderzoekscode te pakken
en alles weg te gooien wat niet belangrijk is
en te zorgen dat hij het ook in een tiende van de seconde kan.
Oh ja, oh ja, grappig, ja.
Dus ja, er wordt behoorlijk wat onderzoeksprogrammeerdingen
worden gedaan bij TNO en ook bij Defensie
en waarschijnlijk overal wel in laboratoria.
En soms is dat goed genoeg en soms niet.
Ja, die worden wat goed, ja.
Oké, cool.
Nou, dat was denk ik wel een goede dosis.
Haskell denk ik.
Heb jij nog bij laten wat de zaken die je eventueel nog wil bespreken?
Nee, nee, ik had ook ten voorbereiding wat dingen opgezocht
over Haskell in real life, of Haskell in databases
en dan kom je toch op wat websites terecht
dat daar gewoon overal wel libraries voor zijn
en dat is toch anders dan ik me kon herinneren
en dat, ja, was toch wel goed.
Ook wat dingen over Haskell en AI zag ik langskomen.
Ik zal die links wel, als ik ze vind, even in de show note zetten
en als jij goede links hebt om met Haskell te beginnen
dan nemen we die ook op.
Ja, ik zal het op Slack zetten.
Ja, cool.
Nice, nice, nice.
Volgend onderwerp is een brede.
Dus we gaan het er doen op z'n CodeKlets
en het gaat over, dat is iets wat op jouw blog staat
en dat vond ik wel interessant.
Er stond er een in dat je ook verstand hebt
van optimalisatie en scalability.
Nou zeg ik dingen half Nederlands, half Engels.
Optimalisatie en schaalbaarheid.
Nou, dat is natuurlijk een heel breed begrip.
Ik vind het op zich wel interessant.
Niet per se met dit onderwerp.
Nou, wel met dit onderwerp te maken.
Want laatst was er een podcast bij ChangeLog.
Er ging over, er was een collega van Bart de Water.
Er ging over performance en, hoe ging dat nou?
Ja, en napkin.
Dus dat je heel snel kon bepalen van oké,
ja, hoe snel gaat iets zijn?
Weet je wel?
We weten bijvoorbeeld de latency over het netwerk
heeft een bepaalde impact.
Cash, sorry cash niet.
Je register is op je CPU.
L1 cash, L2 cash.
Dus dat is allemaal categorieën.
Dus dan kon je een beetje beredeneren, zeg maar,
hoeveel tijd gaat zo'n algoritme kosten, zeg maar,
en wat kost het ook kan geld.
En dat vond ik op zich wel interessant.
Niet per se iets wat ik daar met Egen Heel Blin zat.
Want voor hem was het echt gewoon, ja,
dat was een belangrijk deel van zijn taak,
was de Ruby on Rails applicatie natuurlijk bij Shopify.
Daar werkt-ie.
Dus dat vond ik wel interessant.
Maar ja, nou kan ik het heel flauw doen
in een heel breed stel.
En zeggen wij, wat weet jij van optimalisatie en scalability?
Nou, dat vind ik alles.
Nou, dat denk ik.
Zoveel weet ik er ook weer niet van.
Nee, maar goed, maar laten we eens beginnen.
Maar stel dat je nu, ja, dat kan op veel manier.
Laat ik anders zeggen.
Stel dat iemand jou benadert en vraagt van,
oké, we willen dat dit systeem, ja,
dat loopt allemaal niet lekker en het gaat voor geen meter.
Die zouden bij jou aankloppen.
Dat is een opdracht.
Dat zou kunnen, ja.
En zijn er dan vraagtukken?
Ja, dat hoef je niet specifiek te zijn.
Oké, bij opdracht X is dat gebeurd.
Maar wat voor zaken moeten we dan aan denken, zeg maar?
Nou ja, dat zijn wat je vaak ziet.
En dat stand voornamelijk aan scalability is een woord
met een soort van meerdere betekenissen.
Je hebt de scalability van een systeem.
Maar je hebt ook een soort van scalability
van je hele architectuur van misschien wel meerdere systemen.
En wat je vaak ziet, of in ieder geval wat ik regelmatig tegen ben gekomen,
is dat je een systeem hebt wat ontwikkeld is voor een bepaalde use case.
Laten we zeggen, een of andere start-up die begon
en die moest snel eventjes in elkaar draaien om als MVP te doen.
Daarna, op een gegeven moment, kwamen er gebruikers.
En een paar jaar later heeft het systeem wat ontwikkeld is voor nou,
als we 100 klanten hebben is het al veel,
dat moet plotseling 1000 klanten verwerken of misschien wel 10.000.
Dat ene servertje dat staat te roken
en dat is helemaal niet meer geschikt voor wat het nu moet doen,
terwijl het waarschijnlijk vroeger was het prima.
En dus wat je vaak ziet is dat dingen die appropriate zijn,
die die gewoon goed geschikt zijn voor een bepaalde hoeveelheid load,
dat die niet meer geschikt zijn voor de volgende stap.
Dus als iemand zo bij mij zou aankomen van,
we hebben een probleem, er komt roken uit alle servers
en een paar keer naar laden kost 10 seconden, help.
Dan is eigenlijk het eerste wat je moet doen,
is kijken nou van wat is nou eigenlijk de bottleneck in je systeem?
Wat is het langzaamste deel?
En als je dat dan sneller maakt,
misschien door te herschrijven,
misschien door een betere architecture ervoor te maken,
dan komen we vanzelf op een nieuwe bottleneck uit.
Waar je dan mee aan vragen moet.
Oké, dat kan natuurlijk van alles zijn.
Ik kan me voorstellen dat bijvoorbeeld een e-commerce platform,
toevallig nu Black Friday staat voor de deur,
en dat ze denken, nou...
Bortewater zal het wel naar zijn zin hebben bij Shopify.
Ja, dat denk ik wel.
Elke jaar met Black Friday hebben ze ook altijd zo'n filmpje van
hoe hard de pan uitvliegt gedurende die dag.
Al die loads met een wereldbol.
Ja, dat is fantastisch om te zien.
Ja, dat is echt niet normaal.
Maar het is ook Black Friday.
Gisteren was het 11.11.
De singles deden, volgens mij...
Sinterwaten.
Volgens mij was het...
Ja, gisteren hadden ze in de eerste 15 minuten
nu al meer omzet gedraaid dan de singles deden van vorig jaar.
Dat soort records waar je echt...
Dat is normaal.
Oké.
Maar dat is wel stoer als je dat soort serves gaat maken
en dat die dat gewoon aankunnen.
Dat er in een kwartiertijd zo ontzettend veel orders geplaatst worden.
Dat is echt bizar.
Ja, en dat moet je ook...
Als je het jaar elk jaar doet, dan weet je ongeveer
wat je kan verwachten.
Maar je kan het nooit voorbereiden.
Het gaat altijd anders dan je denkt.
Dus je kan wel drills gaan doen.
Ja, dat klopt.
Ik heb een tijdje zo'n post geleden
op de Node.js podcast...
Ik weet niet eens meer hoe die precies heette.
Maar daar kwam iedere keer wel een bedrijf langs die...
Er is iemand langs die bij een bedrijf werkte
en die legde uit hoe ze bepaalde dingen deden.
Maar dat was ook één bedrijf die had...
Ik weet echt niet meer welke.
Dat was ook een e-commercepartij.
Maar die hadden gewoon constant...
Die hadden altijd iets van...
30% load zetten ze bewust zelf op het systeem.
Altijd.
En dat kon ze dan weghalen.
Dus als ze ademrit nodig hadden, dan kon ze het weghalen.
Maar ze stressten hun systeem gewoon altijd.
Om extra, zeg maar.
Om ook om te zien wat er om valt.
Dus dat zijn echt heel andere manieren van...
Ja, manier van denken bij mij.
Sorry, ja.
Wat ik bijvoorbeeld vaak wel wel zie is...
Je hebt één van de dingen...
Kijk, voor een webservice...
Dan is het gewoon best wel straight forward.
En dan kan je wel zeggen van...
Oké, deze server die draait de hele tijd 100% CPU.
Dan zetten we er gewoon nog eentje naast.
En met een load balancer...
Dat is redelijk straight forward.
En eigenlijk elke grote web framework...
Die heeft daar gewoon dingen voor.
Dat je dat bijna plug en play...
Gewoon met de slide-outje groter kan maken, bijna.
En wat je dan vaak ziet...
Is dat mensen die maken het grotere en grotere en grotere...
En dat gaat heel lang goed.
Tot op een gegeven moment dat ene ding wat niet mee is gehaald...
Dat is vaak de database.
Dat is dan het grootste probleem.
Dus je ziet vaak de data die wordt vaak veel groter.
Het eerste wat je ziet is dat indexen bijvoorbeeld...
Die niet zoveel uitmaken op een tabel van 100 rijen.
Met een tabel van een miljoen rijen begint dat toch wel echt belangrijk te worden.
Dus je ziet heel vaak dat er dan wel een paar indexen zijn gemaakt.
Maar dat mensen nog niet gewoon grondig hebben gekeken...
Van waar zijn ze nou wel nodig en waar niet.
Dat wordt een ad hoc bijgezet als het nodig begint te worden.
In plaats van voordat het kapot gaat.
En wat je ook heel vaak ziet is dat...
Zeker bij een begindende start-up waar geld super schaars is...
Doen mensen bijvoorbeeld analytische queries.
Voor een data-team of een growth-team of zo.
Dan hebben ze een of twee mensen.
En die doen een query op zondag nacht in een cronjobje tegen de grote database aan.
En ook dat zijn gewoon dingen dat kan je beter niet doen.
Want er zit ontzettend veel lood op zo'n database.
En het is vaak ook...
Zijn dat queries die over een hele tabel heen gaan.
Dus een index maakt er eigenlijk niet meer uit.
En...
Ik weet wel, we hadden op een gegeven moment een tabel met 5 miljarden rijen.
En dat was gewoon echt niet meer praktisch.
Om daar nog die analytische queries tegen die database aan te doen.
Dus dat hebben we op een gegeven moment ook verplaatst naar Redshift.
Naar zo'n data warehouse.
Die daar A. Veel efficiënter mee kan omgaan.
Want het kan helemaal een sharder over 100.000 servers.
En B. Dan was al die extra load weg van onze productiedatabase.
En dat scheelde ook al.
Toen ik daar kwam, toen viel de ding bij wijze van spreken elke 2 weken om.
En stap voor stap hebben we dat langzamer zeker beter gemaakt.
En inderdaad geen crep erop draaien die er niet op wordt.
Dat was wel een groot deel.
Ja, precies.
Dat is mijn oude jouw boerenfluitje manier van hoe ik tegen webdevelopment op kan.
Want dat zei mensen ook van ja, dat moet schalen.
Dat is makkelijk gedaan met een webapplicatie.
Ik zeg ja, de webserver die is makkelijk te schalen.
Ja, vind je wel.
Het irritant is, die database daarachter.
Goed, dat was de traditionele stack in .net.
Dat was een .net webapplicatie.
En daarachter zat gewoon een SQL server.
Zeg maar, twee SQL servers naast kadra in een clustertje.
Dat is al een stukje ingewikkelder zeg maar.
Dan gewoon even twee, drie servers erbij zetten.
Dus dat was wel een andere tak van sport.
En ook precies wat jij zegt ook.
Ook een database is gewoon stellen.
Maar ja, gooi maar de index op.
We zoeken daar ook vaak, doe daar ook nog maar één op.
Maakt niet uit.
En dan op een gegeven moment loopt het echt zo.
Het zet het gewoon niet goed meer.
Dus dat zijn wel interessante dingen.
Nou goed, die podcast dat was,
volgens mij ging om napkin met math.
Dus dan wist je een beetje in,
kon je heel snel een korte tijd even bepalen van wat gaat het kosten,
hoeveel tijd kost het.
En dan, ja, dat was,
er zit met de metatiek achter,
dan kon je heel best wel goed en okkurig bepalen
hoeveel performance en hoeveel tijd en geld kost het zeg maar.
Ja, je moest volgens mij samenvatend gewoon
een orde groter berekening maken door wat getallen achter elkaar,
te vinden voldoende die zinnig waren.
En dan had je een idee of het hoeveel nullen het waren
en of je daar ver naast zat of niet.
Ja, het had een aantal voorbeelden volgens mij uit vroeger.
Ik weet niet waar wij maar niet.
Dat beweest dat die metatiek heel erg goed leek.
Dus dat, ja, en nu is het tegenwoordig zeg,
oh ja, dat is een cloud up schaal.
Ja, dat zou even vragen trouwens.
We hebben dat op een gegeven moment, ook bij Witreser trouwens,
hadden we op een gegeven moment ergens een artist.
Ik weet niet eens meer waarom dat precies was.
Oh ja, ik weet het nog.
Dat was namelijk George Trulli.
Die had een patch gereleased.
Je hebt gewoon de front-end die de webpagina serveert.
We hadden ook een cluster met die background jobs.
Dus allemaal emails en betalingen opschonen van oude bestanden.
Dat soort dingen.
Dat werd allemaal door die background cluster gedaan.
En ik had iets gereleased,
wat die background workers deed crashen, ons start-up.
Maar de web applicatie, die werkte wel.
Dus daar werden we nog steeds met,
dat waren op dat moment een stuk of 40 servers.
Op volle pot werden er nieuwe jobs in de queue gezet.
Dit moet nog gedaan worden.
Maar die workers waren gedaan.
Dus die queue werd groter en groter en groter.
Op een gegeven moment zat dat vrij snel door.
Maar tegen die tijd zaten er al een miljoen jobs in de queue.
En rollback, dat duurde toen nog best wel lang.
Dus gelukkig was het een cloud-based queue.
Dus daar kun je in principe zoveel in stoppen als je wil.
En Amazon dacht wel dat dat gebeurde.
Dus op een gegeven moment, wij hadden gerollbacked.
Al die workers erop.
Die workers automatisch opschalen ook.
Dus dat komt helemaal goed.
Die cluster schaalt op.
Die draait even door die queue heen.
Er stonden inmiddels 3 miljoen jobs in.
Die cluster draait even door die jobs heen.
Dan ben je zo weer terug.
Maar dat was niet helemaal waar.
Want een groot gedeelte van die jobs, dat waren mails die je verstuurd moesten worden.
Dat kan je in Rails, dat kan je heel makkelijk doen zeg maar.
Mail.new.deliverlater.
En dan hoef je dat niet in je request zelf te doen.
Maar dan kan je dat in de achtergrond doen.
Super.
Maar ja, we hadden één mailserver.
We hadden één harde schijf.
En die harde schijf die met de verzenden berichten was helemaal vol.
En hij probeerde volle plot die dingen door te sturen naar Centgrid was het geloof ik.
Maar ja, die zei ook op een gegeven moment.
Nou ja, hallo jongens.
Doe even kalm aan.
Jullie worden gereed limit.
Want zo veel mails versturen, dat is niet oké.
Dus ja, en die background job cluster maar opschalen en opschalen en opschalen.
Maar ja, die werden gewoon echt niet meer mails verstuurd dan dat er verstuurd werden.
Dus dat was een heel gedoe.
Dus uiteindelijk heeft het echt een euro 5 geduurd voordat die queue weer leeg was.
Op een gegeven moment hadden we zoveel workers zoals we wilden.
Niet veel later is die mailserver ook auto scanning geworden trouwens.
Oh ja, oké.
Nee, maar goed, ik grap er natuurlijk over.
Omdat ik vond, ja, ho de klautie heeft allerlei beloften.
Maar er komen natuurlijk ook andere dingen bij.
Ook kosten bijvoorbeeld.
Je kunt natuurlijk wel denken, oké, schaam onbeperkt.
Maar ja, het gaat ook wel wat geld kosten.
Dus het maakt, de klaut heeft het gewoon nog een paar orde grootte complexer gemaakt.
Ja, je infrastructuur wordt gewoon wat complexer.
Ja, sommige dingen worden heel, heel veel makkelijker met de klaut.
En sommige dingen, daar moet je gewoon nog steeds over nadenken.
Ja, precies.
Of nadenken wat dat vroeger eigenlijk niet hoefde.
Ja, ja, precies.
Ja, het is wel makkelijk om te doen, zeg maar.
Maar het blijft wel, het is een extra laag, zeg maar.
Zeker.
Ja, voorheen, wat ik ook had gezegd.
Ja, ik vond het altijd wel fijn dat mijn server gewoon onder mijn bureau stond.
En als er iets mis was, ja, dan zat je gewoon op je server.
Je had het wat en je wist wat er aan de hand was.
En klaar is, Kees.
En die afstand is al groter, zeg maar.
Dat is natuurlijk met de remote verbinding daarnaartoe.
Maar het is toch, er zit een afstand, zeg maar.
Dat is een aantal dingetjes die je niet meer makkelijk, zo makkelijk kan doen in de cloud als nu.
Als we wat er voorheen konden.
Even kijken.
Ook dat is er voor en een nadeel, trouwens.
Sorry?
Ook dat is er voor en een nadeel.
Ja, nee, dat klopt.
Ja, ik zeg, depend.
En dan kom je overal.
Vaak genoeg.
En ook dat heb ik een paar keer zelf gedaan.
Dat iemand bijvoorbeeld de Rails vooral maakt het heel makkelijk.
Je kan een Rails console openen in de productie.
En die laat dan automatisch alle environment variablen en al je database connecties en al je Redis en wat niet.
Dus een collega van mij die kwam langs.
Of die had prongelijk een paar keys naar de Redis cache geschreven.
Maar was vergeten er een expiry op te zetten.
En hij wist ook niet meer welke het waren.
Maar hij wist wel dat je in Redis kun je searchen op prefixes, maar niet op postfixes.
Dus hij dacht, dan doe ik dat wel gewoon in Ruby.
Dus hij zei Redis.new.keys.
En dan de enige van de Ruby functie om dat te selecteren.
Maar wat dat doet is Keystar op de Redis database.
Dus die Redis die dacht, oh je wil alle keys hebben die ik heb.
Dat is goed, je hebt zo alle 30 miljoen.
Dat duurde natuurlijk even.
En Redis is single thread.
Dus geen enkele andere web request komt nog bij de Redis.
Waardoor die al gigantij mouten.
Want dat duurde langer dan 30 seconden voor dat Redis er klaar was.
Dus opeens alles down.
Niemand wist wat er aan de hand was.
We waren wel vrij snel achter dat het Redis was die down was.
Dus op een gegeven moment kwamen we daar naar kijken.
Zo van, dat is gek.
Kom op die jongen.
Werkte er net een week.
Ja, arme gast.
Ik was heel schapachtig.
Jongens, ik denk dat ik het was.
Ik moest er heel erg van wachten.
Want iedereen daar had dat wel eens gedaan natuurlijk.
Of iets doms in productie.
We weten allemaal dat het niet zou moeten.
Maar iedereen heeft wel eens gedaan.
Ja, natuurlijk.
Volgens mij, ieder platform of taal die heeft wel zo'n simpele fout die je maakt.
Maar iedereen wel een keer ingetuind is.
En waardoor je weet ik voor wat die je server neertrekt.
Of ik weet niet wat je doet.
Dat is echt wel.
Maar dat is altijd lachen natuurlijk.
Als dat bij de nieuwe jongen gebeurt.
Of de nieuwe vrouw of weet ik veel wat.
Ja, dat is natuurlijk altijd wel even.
Een soort van ontroeding.
Dat is ook eigenlijk een andere manier om te leren.
Ja, tuurlijk.
Dat is ook wel.
Ja, kijk.
Je moet altijd wel een beetje tezaalaansteken bang zijn.
Zeg maar dat je iets loopt.
Dat is wel. Maar je weet gewoon.
Je gaat de keer iets lopen.
Tuurlijk.
Uiteindelijk als je erop terugkijkt.
Wat is nou echt gebeurd?
De website was 45 seconden down.
Het is echt meer dan waard.
Dat je het met zoiets een domme fout maakt.
In plaats van dat je een hele tabel wist of zo.
Het laatste onderwerp.
Het was eigenlijk niet eens echt een onderwerp.
Het was een beetje losvast.
We hebben een aantal dingetjes die we steeds terug proberen te laten komen.
Eentje gaat vervallen.
Ik had geen Twitter rant.
Ik had ook geen echte Twitter.
Ja, die heb ik niet gezien.
Dus ik heb er geen.
Jij ook niet denk ik?
Nee, je was zeker te druk met de verkiezingen in de VS of wat?
Dat is misschien wel een rant.
Ja, dat is een rant.
Laten we daar niet over hebben.
Nou ja, misschien.
Het was best vermakelijk die Slack channel.
Ja, ik vond het wel gezellig.
Ja, er was een Slack channel, zeg maar, bij Neus op tafel.
Dat ging over de VS-verkiezingen.
En de eerste nacht, ook bij de verkiezingen van Hillary versus Trump,
toen was ik ook wakker gebleven en zo.
Maar daarna had het natuurlijk wel een beetje een kater.
Ja, dat klinkt natuurlijk raar.
Maar goed, bij iedereen in Nederland lijkt niet voor Trump te zijn.
Het is een beetje bijna alsof het een schande is als je voor Trump is.
Dat vind ik ook weer een beetje overdreven.
Dus zo zit ik er ook weer niet in.
Maar goed, dat vond ik een beetje jammer.
Nu is dit nu weer opgebleven.
En toen rond de uur of, ik weet niet, 1, 2 nachts.
Toen was het niet zo.
Ik zie de bijl weer hangen.
Rond drie uur ben ik mijn bed ingegaan.
Ik denk, geef mij een portie maar een fikkie, want dit gaat er weer niet worden.
En er waren hier en daar wel wat dingetjes waardoor misschien Biden zou winnen.
Dus ik denk, ja, dat gaat nooit meer gebeuren.
Maar toen werd ik wakker.
Toen begon het een beetje om te slaan.
En meer en meer en meer.
Dus het is echt wel bijzonder.
Ja, eigenlijk zou je ook, ja, misschien moeten we ooit een keer iemand vinden
die echt die dataanalyse doet.
Want al die campagne teams, die hebben allemaal dataanalysten, zeg maar, die allemaal gaan kijken
van hey, met modellen van wat is nou de kans dat Biden of Trump gaat winnen.
Dus die uitslagen die in eerste instantie gegeven werden door de nieuwsagenties,
New York Times, Fox News, CNN, de hele week, die hebben allemaal modellen.
Dus dat allemaal dataanalysten, zeg maar.
Die gaan kijken voor, ja, uit het verleden zijn dit soort verkiezingen geweest.
En dan kunnen we een deel daarvan voorspellen.
Een deel is op basis van de exit polls die we hebben.
Dus het is ook nog niet eens dat al die data die op al die nieuws channels zijn,
dat dat gewoon feitelijke data is.
Dat vind ik ook wel bijzonder.
Dus die zit allemaal best wel te speculeren.
En ze hebben allemaal een kleur.
Fox News, die heeft na de film op zich dit jaar best wel mee eigenlijk.
Maar die hebben een bepaalde manier hoe ze daar naar kijken.
CNN weer heel anders.
Dus dat is op die manier, dus qua techniek vond ik het ook heel intrigerend, zeg maar.
Dus eigenlijk zouden we een keer iemand moeten strikken die daar echt als techneut, zeg maar, een keer...
Ja, er zijn diverse aspecten die daar wel erg interessant aan zijn.
Ook hoe ze van tevoren al gaan bekijken waar ze moeten gaan zitten flyeren
en waar ze wel niet moeten aanbellen.
Dat is op zich niet wat we hier in Nederland doen.
Ze dat ook een beetje raar vinden als ze hier in de straten
bij precies de goede huizen wel of niet aanbellen.
Ja, maar het is echt bizar.
Ja, dat is ook een beetje raar.
Ja, maar je registreert je daar ook volgens mij als democrat of als republikein.
En dan kun je een telefoontje even wachten.
Je wordt gewoon gebeld van, je gaat toch bijna stemmen?
Ja, je gaat toch wel bijna spelen.
Ja, ik ga waarschijnlijk bijna stemmen.
Ja, dan kunnen we registreren.
Ja, dat is goed.
Ik ga bijna stemmen.
En dan wordt het gewoon bijgehouden, als het ware.
Dus het is echt...
Het is ook wel een beetje het systeem daar natuurlijk
dat je eigenlijk in praktijk maar twee partijen hebt.
We hebben natuurlijk veel meer.
Dus je krijgt die waanzinnige wij tegen zij die je daar hebt.
Je bent of democrat of republikein.
Maar als je hiervoor, laten we zeggen, de VVD stemt of de PvdA.
Tuurlijk is er wel een beetje rivaliteit tussen sommige partijen.
De D66 en PVV, die vinden elkaar niet aardig.
Nee, klopt.
Je hebt niet die enorme polarisatie, omdat er gewoon nog tien partijen omheen staan
die ook dingen vinden.
Dus je kan nooit één echte grote oorlog krijgen.
En dat is...
Maar wat iemand ook wel zei en daarna houden we er wel voor op, denk ik.
Het is ook wel sinds de jaren tachtig of zo de manier van nieuws brengen
die heeft heel veel invloed op hoe mensen over de onderwerpen zijn gaan denken.
Dus het is eigenlijk best wel raar, want je rapporteert als het ware.
Je zegt van oké, dit is wat mensen vinden.
Maar nee, die nieuwsagencies, omdat die ook gekleurd zijn, die hadden belang erbij.
Dus die zijn onderwerpen.
Dus voor de rechse republikeinen was het heel erg voor de abortuswet.
Daar werd dan heel veel gefocust.
Of de immigratie.
Dus er werd heel veel op gehamerd.
Totdat mensen echt gewoon daarin zijn ingelofd.
Dus echt, ja, intrinsiek geloof.
Ja, dit kan echt niet.
Dat moet je me niet ontnemen.
Dat is gewoon een persoonlijk iets geworden.
Dat gaat niet meer over een mening.
Als ik nu kies voor de democraten komt dat beter uit.
Want ja, dat past meer bij hoe ik ben.
Nee, dan is het echt meer een soort van ja, ik voel me echt heel erg republikein.
Dat loopt heel erg hoogop.
Maar dat is iets wat schijnbaar de laatste 20, 30 jaar heel erg veranderd is.
Het was een binnenrepublikeinspartij.
En de democraten, daar zitten nuances in.
De democraten zijn heel erg rechts, zeg maar.
En de democraten zijn heel links.
Dus dat hoor je ook.
Dus Bernie Sanders is natuurlijk veel linkser dan Joe Biden.
Saber.
Dus dat zijn wel, daar zitten ook nog wel wat.
Daar zitten nuance in.
Alleen naar buiten toe zijn het gewoon twee partijen.
Ja, en dat is echt niet, dat helpt volgens mij niet.
Dus maar goed, ik ben blij dat ik in Nederland woon en niet in Amerika.
Ik ben, ik vind dat politieke systeem, ik krijg niks daar.
Maar goed.
Oké.
Dat is leuk.
We hebben wel developers dilemmas.
Deze keer heb ik ze vooraf even zelf verzonnen.
Dus misschien is de kwaliteit minder of misschien is het beter.
Ja, het viel me op dat degene die op de developers dilemmas site
gebruikte of die gebruikte ervoor.
Ja, dat was een herhaling van zetten heel vaak.
Ja, maar die komen uit een grote set van AppSignal.
Dus ook het Ruby bedrijf ook.
Ik ken die gasten vrij goed.
Ik heb alle normale dilemmas al een keer gezien.
Ja, dat zei je.
Want ik had dat gedaan toen Arno en Floor toen als gast waren.
En toen wist ik nog niet van die site af.
En toen zei ze, die site is er ook.
Ik zei, oh, grappig.
Want ik wilde developer.
Ik zei, misschien zijn developer.
Ik weet niet, ik had een andere naam genoemd.
Developers Dilemma is gewoon klinkt goed.
Alitereerd en dat is mooi.
Maar goed, die set was, we waren er een beetje doorheen volgens mij.
En in die aflevering had ik volgens mij ook al wat tegenstellingen die wat gekker waren.
Kom maar op.
Ja, de eerste.
Een Greenfield project en je krijgt 1 miljoen euro.
Versus een Slechtloper project en je krijgt 2 miljoen euro om het recht te bereien.
Allebei kost evenveel tijd.
Dus laten we zeggen, dat kun je van tevoren niet weten.
Maar dat is in dit geval wel zo.
Dat kost je gewoon een jaar.
Maar het Greenfield project is, nou, leuk, hier heb je 1 miljoen.
En dat loopt lekker.
Slechtloper project, daar zul je wat meer moeite voor moeten doen.
Maar dan krijg je wel 2 miljoen voor.
Oh, dat is wel een tij, hoor.
Ik wil zeggen, dat hangt heel erg van mijn collega's af.
Dat is wel echt de belangrijkste in deze keuze.
Maar ik denk dat je dat een beetje hebt samengevat in en het loopt goed.
Versus en het loopt slecht.
Dus dan ga ik toch echt voor het goedlopende Greenfield project.
En het mag zelfs een project zijn dat helemaal in de krep zit.
Maar met leuke collega's en het loopt goed.
Dan een volstrekt fantastisch Greenfield project.
Misschien wel voor 10 miljoen euro.
Mijn sanity is me te veel waard.
Ja, precies.
Ik had eerst gezegd van 1 miljoen versus 10 miljoen.
Maar ja, goed.
Iemand gaat uiteindelijk wel een keer zwichten voor geld.
Maar als ik het zo in deze setting mag besluiten.
Het is veel belangrijker om normaal te blijven.
Ik heb een keer een echt krep project gehad.
Nee, ik heb er echt heel duidelijk 2 slechte.
Het is wel een les.
Toen ik erin zat, als je het me had gevraagd, had ik gezegd.
Het had voor mij niet gehoeven.
Maar achteraf gezien, ik ben blij dat ik ze meegemaakt heb.
Het vormt je wel.
Het leert er wel van.
Maar tegelijkertijd zou je er nog eentje willen doen?
Nee, natuurlijk niet.
Ik teken nu vooraf voor een slecht project.
Er zullen niet veel mensen zijn die dat vooraf zouden zeggen.
Bernard, heb jij nog een mening over?
Nee, ik zou dezelfde keuze doen.
Dat bedrag, 1 miljoen is al veel.
Dat zou wel op kunnen.
Een teamleider van alleen maar 65-jarige ontwikkelaars
of een teamleider met 25-jarige ontwikkelaars?
Ik had het nog een keer gelezen.
Dit wordt niet een soort van leeftijdsdiscriminatie.
Dat is het niet.
Het gaat om je teams.
Het is vooral niks te kiezen.
Het ene team is 75-jarige of het team met 25-jarige.
Welke zou je leiden?
Dat moet ik weer eerst.
Het maakt me niet uit.
Bernard mag ook eerst.
Dan kun je erover nadenken.
Wat zou je kiezen Bernard?
25-jarige zou ik kiezen.
Die leren misschien nog wat makkelijker iets bij.
Of kan je wat bijbrengen als teamleider?
Ik denk dat mensen die zo lang in het vak zitten
misschien niks van je aannemen
of alles op de manier doen die ze al lang doen.
Flexibiliteit.
Dat is niet gegarandeerd dat 65-jarigen niet flexibel zijn.
Het begint toch wel op leeftijdsdiscriminatie te rieken.
Het is een taai.
Ik ga ook voor de 25-jarigen.
Alhoewel dat ook een beetje afhangt van het project.
Als ik een banking website in Kobel zou moeten doen.
Maar ik ga voor de 25-jarigen.
Dat is voor mij een persoonlijke keuze.
Omdat ik daar ervaring mee heb.
Ik ben bij de marine meerdere malen op missie 6 maanden overreis geweest
naar, laten we zeggen, sommaren.
En daar had ik ook een team van 25-jarigen, corporaals en matrozen
omleiding aan gegeven.
Dus ik weet dat ik dat kan.
Daar ben ik minder bang voor dan de 65-jarigen
en daar gebruik ik me meer zorgen over te maken.
Ik denk normaal, want ik vind die energie, los van de energie die ze hebben,
dat vind ik wel aanstekelijk.
Ik vind het wel heel leuk om te zien, het lijkt er bij de 65-jarigen,
en dat heb ik niet meer bijgezet.
Maar stel dat we nu echt enorm ervaren, ten los van dat ze vastzitten,
het is ook heel leerzaam.
Ik ben 45, ik ben wat jonger,
dus ik denk dat ik daar ook heel veel van zou kunnen leren.
Dan is het meer andersom.
Dus die 25-jarigen, jij zult ze misschien wat meer leren,
maar die 65-jarigen is voor jou meer een leerschool, zeg maar.
Ja, het beste is natuurlijk om een combinatie te hebben.
Ja, tuurlijk, ja.
Dat is natuurlijk niks te kiezen.
Je wilt ze het liefst op elkaar.
Tuurlijk, de mix.
Je wilt een gezonde mix hebben van...
Ja, dat is één van de...
Als we toch over alles en niks hebben.
By far de belangrijkste les die ik bij de officiersopleiding
bij de marina heb geleerd.
Gemixte teams werken het best.
Er was één oefening die ze altijd deden
en die altijd hetzelfde resultaat had,
is moet je een brug maken,
over een soort waterding,
gewoon een brug uit touwen en planken.
En je hebt net genoeg materiaal om te kunnen.
Dus zeg maar, als je ruim genoeg materiaal hebt,
no problem.
Als je helemaal net genoeg materiaal hebt,
dan lukt het sowieso nooit.
Maar je hebt net genoeg,
maar je moet er wel goed over nadenken
over wie het gaat doen.
Maar het kan wel.
En ze deden wat de leiders van die oefening
dan altijd deden.
En ik ben ook wel een soort van teamleider geweest
van zo'n groep nieuwe recruten,
dus ik kan er dan van de zijkant naar kijken.
Het is heel geestig om te zien hoe dat er gaat.
Dus die leraren of die docenten,
die delen de groep in, in drie groepen.
En dat ze zien, eigenlijk in de eerste oogopslag
zien ze al een beetje,
dit zijn gewoon de actieve gasten.
Dit zijn iets minder actieve of zeg maar,
dit zijn de doeners,
dit zijn de denkers.
En ze hebben ook een groep met doeners en denkers,
ongeveer 50-50.
En het is altijd,
ik kan er loos op gelijk zetten,
de doeners die gaan als een speer, uiteraard.
Maar halverwege komen ze erachter
dat hoe ze het hebben gedaan
niet zo handig was,
dus nu hebben ze geen materieel meer over,
dus ze moeten eigenlijk een deel van een brug weer afbreken
om opnieuw te beginnen, op een betere manier.
En er wordt altijd een drama,
er wordt ruzie en ze weten niet wat ze willen
en na de derde keer dat het niet lukt,
of dat ze zijn voor de derde keer begonnen
zonder er goed over na te denken,
dat gaat natuurlijk niet worden.
De denkers, of het team met alleen denkers,
dat lukt ook niet,
want die beginnen eigenlijk gewoon niet,
die blijven denken.
Maar juist die gemengde groep,
daar is altijd het eerst klaar.
Ik heb deze oefening vijf of zes keer gezien
met verschillende groepen,
en het maakt niet uit.
Het is altijd de gemengde groep die er het eerst uitkomt,
want die beginnen wel,
maar die luisteren ook nog naar elkaar.
Dus dan zie je er vaak een van de denkers,
die staat ernaast en zegt,
jongens, dit is niet handig wat we hier aan het doen zijn.
En dan zegt een van de donezen,
oh, die heeft helemaal gelijk,
en die legt de knopen anders,
of die verschuift een plank,
en het is echt waanzinnig.
En je ziet het ook in de software teams.
Ja, daarom.
Iedereen zegt wel,
ik moet gemengd zien,
maar dan niet op basis van niks.
Voor mij is het een gut feeling,
want ik denk,
je wilt niet allemaal bijvoorbeeld heel kritische mensen
of juist mensen die allemaal heel overpositief zijn.
Dus ja, dan wil je daar een beetje mix in hebben.
Oké, het laatste dilemma.
Programmeren met een half kapot scherm,
en dat bedoel ik dus niet te hebben,
want dan ga je je windows aan de linker of rechter kant doen,
random uitval dus eigenlijk,
of met een half kapot keyboard.
Oh, wat doe je me aan?
Ik zou serieus,
zelf als eerste,
ik zou echt denken,
ja, ik weet niet,
ik zou zelf kiezen voor een half kapot scherm.
Ja, dat zou ik denk ik doen.
Ja, ik denk het ook.
Ik zou ook voor het half kapot scherm kiezen,
want ik vind niks zo vervelend als op een toetsenbord typen,
en dan gebeurt er dus niet wat je typt.
Dan kan ik heel erg geïriteerd worden.
En nu zie je het niet, dat is nog goed.
Ja, ik word ook echt boos van,
als ik denk van nou, ik heb echt al aangedrukt.
En dan gebeurt het gewoon niet.
Ja, dat is echt serieus.
Precies wat jij zegt.
Dat is ook waarom ik het zou doen.
Dat komt er ook misschien een beetje,
dat is juist een beetje, als je in Haskell programmeert,
die taal is heel compact.
Dus je kan eigenlijk alles wel schrijven als een one-liner.
Dus als je keyword het dan niet doet,
dat is gewoon als percentage van wat je wilt typen,
dat is veel groter.
Ja, ja.
Ja, als je dingen mist.
Ja, dat is wel waar, ja.
Want ook op een toetsenbord, als er één toets, zeg maar,
bijvoorbeeld niet toets.
Ja, dat is echt de worst.
Ja, en dan random.
Ja, ik heb geluk.
Die Mac net niet.
De Mac sinds 2016 tot 2000.
Nog wel een toetsenbord soms, gewoon wel en niet.
Ik zou echt gek worden.
Ik weet niet waarom mensen daar niet,
dat er niet soort van revolt is geweest, zeg maar,
naar Apple na een jaar.
Dat kan gewoon niet, man.
Maar goed, dat is nu een middelsweer achter de rug.
Ja, dat waren ze.
Ik had er drie.
Dat hebben we nu lekker erin.
Dan hebben we normaal ook nog tips.
Ik heb...
bijna een tip.
Ik heb volgens mij...
Jawel, ik heb wel een tip.
Ja, dat is gewoon...
Voor sommige mensen is dat gewoon gesneden koek.
Onze website is gemaakt met React, Next.js en Tailwind.
Next.js vind ik echt goed.
Dat is gewoon leuk.
Dat is een framework voor React.
Dus dan kun je statische sites maken.
Maar je kunt ook hybride sites maken.
Zodat een deel toch op de server site gegeneerd wordt.
Maar goed, dat moet je maar uitzoeken.
Maar dat is wel een tip.
Next.js, mocht je dus React gebruiken.
En dan is dat...
Ja, vond ik wel echt fijn.
Ja, best wel een verademing om mee te werken.
Ja, verder heb ik geen tips.
Ik heb geen boeken tips.
Ja, ik kijk series.
Maar die tips, die wil ik wel best wel geven.
Maar dat kent iedereen inmiddels wel.
Dat is Star Trek Discovery op Netflix.
Seizoen 3 is inmiddels weer begonnen.
Ja, kijk ik ook.
Ja, goed seizoen.
Deze tot nu toe was het interessant.
Ja, iemand op Twitter zag we, ja, maar ze hebben het verpest.
Want er is heel veel pio, pio, pio.
En oploffingen.
Ik denk, ja, oké.
Dat viel, eerlijk gezegd, nog niet eens heel erg op.
Ik ben er toen na de rand op gaan letten, omdat iemand daar zei.
Want ik dacht, ja, ik vind het nog steeds onmengelijk.
Maar ik vond het op zich wel weer leuk.
Alle 3 seizoenen zijn wel een beetje anders.
Dus dat is op zich wel wel grappig.
Ja, heb jij tips, Bernard?
Nee.
Je hebt toevallig tips, je mag alles tipsen.
Je eigen website.
Nou, wat ik wil tippen, het is niet eens van mezelf.
Maar op 1 december begint de Advent of Code weer.
Ja.
In het hypothetische geval dat iemand zowel naar CodeKlets luistert
en niet weet wat Advent of Code is.
Ik denk niet dat het een hele grote groep zal zijn.
Maar elke dag komt er een nieuwe programming challenge op AdventOfCode.com.
En die kan je oplossen.
En het begint altijd heel makkelijk.
Bij wijze van spreken tel deze 10 getallen bij elkaar op.
En het wordt vanzelf steeds moeilijker
tot je op dag 28 hele microchips aan het simuleren bent.
Het is hartstikke leuk.
Ik kan het van harte aanraden.
En als je een nieuwe programmeertal wilt leren,
waarom doe je het niet in Haskell dit jaar?
Nou ja, dat specifieke...
Ja, dat klopt.
Dat zei die collega volgens mij niet.
Ja, wel.
Die heeft het volgens mij vorig jaar in Haskell, dacht ik.
Ik ken iemand die elke dag een andere programmeertal gebruikt een keer.
Dus 25 dagen lang.
Allemaal 25 verschillende programmeertalen.
Ja.
Respect.
Dat is wel respect.
Ik heb alleen maar Ruby gebruikt vorig jaar.
En dit jaar ga ik misschien in Haskell of Swift of wat anders tussendoor doen.
Maar het is wel zo dat die puzzles op elkaar inhaken soms.
Dus dan heb je een stuk code dat je dan kan hergebruiken.
Dat was afgelopen jaar zo.
Maar ik heb erg veel logmat en ik heb er nu ook alweer zin in.
Nee, ik heb het nog niet gedaan.
Het was meer tijd en zin.
En ik kan niet zo goed tegen mijn verlies.
Dat klinkt heel raar.
Dus als ik dan loop over, oh ja, die heeft dat gedaan.
Ja, dat is echt...
Nee, maar als je ambities hebt om in de top 100 te komen,
er zijn gasten die hebben dat...
Die puzzles komen zochtends Nederlandse tijd denk ik om 5 uur of zo.
En dan zijn de mensen die binnen 5 minuten hele moeilijke puzzles hebben ze opgelost.
En die streamen ook live van wat ze aan het programmeren zijn.
Ik heb wel zo'n filmpje gekeken.
Het gaat heel bizar.
Ja, waanzinnig.
Als je competitief mee wilt doen, dat zou ik je niet aanraden.
Maar er zijn live streams van mensen die dat doen.
En die gaan verschrikkelijk snel.
En die hebben dus ook hele tooling setups.
Dat ze precies op de seconde dat een nieuwe puzzle wordt gereleased,
dan loggen ze daar echt in.
En tegelijkertijd hebben ze een cronjob die op de achtergrond
hun gepersonaliseerde testinput downloadt,
zodat ze dat alvast klaar hebben zet,
zodat ze dat niet handmatig hoeft te downloaden.
Het is echt die mensen die elke seconde telt.
Ik zit er zelf niet zo in.
Ik vind het leuk om er gewoon af na te denken
en een mooie oplossing te maken.
Hoe lang is dit er al inmiddels?
2017 volgens mij.
Een jaar of twee, drie jaar.
Hoe lang?
Even kijken hoor.
Dat kan je heel goed even kijken.
Event.
De eerste is uit 2015.
Oh wel, oké.
Dus een jaar of vijf jaar.
Je kent het denk ik een jaar of drie of zo.
Misschien moeten we een leaderboard aanmaken voor CodeKlets.
Dan kunnen de mensen die CodeKlets kennen daar gelijken.
Kijken hoe iedereen het doet.
Ik heb ook een beetje die rare Tadzone eruit.
Ja, dat klopt.
We zullen zien.
Ik ga eens kijken of ik dat kan opzetten.
Ja, dat lijkt me wel leuk.
Kijken of, ja.
Het zou wel grappig zijn als er dan onder ons
echt een top 100 iemand zit.
Oké.
We gaan zien.
Goed.
Dat waren de tips.
Goede tip.
Zeker.
Ja, dan zijn we door het laatste deel heen.
Dus dan blijft er niks anders over dan jou te bedanken.
Ja, heel erg bedankt.
Ja.
Was leuk.
Was weer leerzaam.
Even kijken.
Ja, we zetten meestal in de show notes allerlei links.
Ja, hoe mensen je kunnen vinden op Twitter, LinkedIn.
Ja, je website en dat soort zaken.
Dus dat zetten we meestal in de show notes.
Als ik vragen heb, dan ga ik je benaderen.
Hoe zit het daar?
Ja, precies.
Dus dat is heel fijn.
Ja, wat nog meer?
Ik ben er niet heel veel mee te melden.
Ja, als je hiernaar luistert, dan denk ik al dat je subscribe bent.
Informatie over CodeKlets is gewoon te vinden op codeklets.nl.
Je kunt ons volgen op Twitter.
Ja, we hebben de nieuwsbrief.
Dat is wel iets waar je bijvoorbeeld in kunt schrijven.
Dan krijg je iedere twee weken een leuke set aan informatie voor de developers.
Kan ik meer?
Niet eigenlijk.
Goed, dankjewel.
En tot de volgende keer weer.
Doei doei.
Doei.
Hela.