Log in
Seblog.nl

Seblog.nl

Floppies

It just hit me. I learned how to code via an article in a Dutch school magazine (Taptoe), which explained how to create a website on a floppy disk. They were already old, but at least our computers had the drives still. The article just explained how to write flat HTML, but it was enough to spark this fascination that ended up being my job.

What hit me is that actually most websites these days won't actually fit on a 1,44 MB floppy anymore. (The content on this site already is more than 1 GB.) It would be a nice challenge again, to make a website fit 1,44 MB.

Related to this is the 10 KB Club, who try to keep their homepage under 10 KB. My site fails that test too, but at least the homepage fits a floppy.

Slim huis

Ton schreef over zijn Hue-lampen die middenin de nacht aan gingen omdat de stroom uitviel. Ik had onlangs een soortgelijke ervaring, maar met een andere oorzaak.

Ik woon alleen, dus ik had mijn huis 'geleerd' dat de lampen uit moeten gaan zodra ik wegga, aan moeten gaan als ik thuiskom en de zon onder is, en ook aan moeten gaan als de zon onder gaat terwijl er iemand thuis is. Allemaal gewoon in Apple's Woning-app, niet heel spannend.

Maar soms zijn mijn huis en telefoon van elkaar ontvreemd en gaan dus middenin de nacht mijn lichten opeens aan als ze elkaar weer gevonden hebben. Dat gebeurde vorige maand een paar keer per nacht, dus ik heb momenteel de hele feature uitgezet.

Op mijn eindeloze lijst aan projecten staat dat ik eigenlijk wat meer bewegingsmelders wil aanschaffen. Die van Hue detecteren beweging, maar ook hoe sterk het licht is, en gaan alleen aan als het te donker is. Ik heb er al een in de badkamer en een in de keuken en eigenlijk is dat ideaal.

Het enige probleem met je hele huis vol bewegingssensors is dat de timeout wat lastiger in te stellen is. Voor de badkamer kom ik prima weg met de lampen uitzetten na 3 minuten zonder beweging, maar een timeout van een uur instellen omdat je graag rustig op de bank wil kunnen lezen zonder opeens in het donker te zitten voelt ook inefficiënt.

Het project op de lijst is dan ook: programmeer mijn Raspberry Pi zo, zodat hij Homekit spreekt, en dus het brein wordt van mijn huis. Hou dan in de Pi bij welke kamer het laatst beweging zag. De timeout is daarna altijd 3 minuten, tenzij je de kamer met laatste beweging bent, dan krijg je, zeg, een uur. Volgens mij werkt die strategie ook voor huishoudens met meerdere personen. Alleen als ik het huis verlaat moet ik dat nog op een bepaalde manier kenbaar maken aan het huis.

Maar ja, ik geef toe: soms sta ik tegen mijn telefoon te schreeuwen en vraag ik me af of ik niet beter gewoon even naar het lichtknopje had kunnen lopen.

Spelidee: trek voor elke speler een willekeurige provincie en een willekeurige partij. Doe allemaal een kieswijzer. Wie het dichtst bij zijn of naar partij scoort wint.

Nederlandse go-termen

Vandaag was ik in Tilburg voor het go-toernooi aldaar. Een goed excuus om hier wat op te schrijven over go.

Go is een eeuwenoud spel, maar hier in het westen is het minder bekend. Schaken zit veel dieper in de cultuur, wat je ook ziet aan de naam (de sch-) en aan de namen van de stukken op het bord: wij hebben 'paard' waar Engelsen het over een 'knight' hebben en Duitsers over een 'Springer'. In go gebruikt men vooral Japanse leenwoorden, maar door de invloed van het internet – waar iedereen Engels spreekt – zijn er veel Engelse termen ons go-jargon binnengeslopen. Ik denk dat 'pincer' het hardnekkigste voorbeeld is. Toch hebben we voor veel zaken ook echt onze eigen termen, die ik hier graag beschrijf.

Allereerst de naam van het spel: vrijwel iedereen spreekt het uit met de Engelse g, van 'goal' en het werkwoord 'go'. Dit komt ook overeen met waar we de naam vandaan hebben: het Japanse woord 'igo'. Maar diverse oudere spelers heb ik een Nederlandse g horen gebruiken voor go, wat ik ook best charmant vind. (Wie wil googelen op 'go' kan misschien beter het Koreaanse 'baduk' of het Chinese 'weiqi' gebruiken, maar dat is een ander onderwerp.)

De voorgenoemde 'pincer' kan ook een 'klem' zijn, al zou ik zelf 'tang' leuker vinden. Ik hoor ook vaak: 'dan neem je een enclosure', terwijl we dan ook kunnen zeggen: 'dan sluit je de hoek af'. Sommige spelers gebruiken voor deze twee dingen trouwens de Japanse termen 'hasami' en 'shimari', wat ik persoonlijk dan leuker vind dan de Engelse variant, maar misschien dat dit type speler wel langzaamaan uitsterft.

Ik denk dat 'ko' en 'atari' de meest gebruikte en diepst ingeburgerde Japanse termen in het Nederlandse go-jargon zijn. Het Engels gebruikt ze ook, maar vooral ook omdat het zeer specifieke concepten zijn waar je echt een compleet nieuw woord voor zou moeten verzinnen.

Een tegenvoorbeeld daarop is het concept 'vrijheid', als in: 'deze groep heeft twee vrijheden'. In het Engels heet dat 'liberties' (die hoor ik ook gebruiken op de club). Aan de ene kant is het een logische term: het is het aantal 'vrije zetten' dat een speler nog heeft voor de betreffende groep gevangen is. Aan de andere kant voelt het soms zo erg als eigenschap van een groep dat ik het zelf bijna als concept op zichzelf zie.

Qua onvertaalbare leenwoorden uit het Japans doen Engels en Nederlands het soms ook anders. De termen 'sente' en 'gote' zijn elkaars tegenhangers en verwijzen naar een zet waarop de tegenstander wel (sente) of niet (gote) hoeft te reageren. In het Engels hebben ze de termen gewoon overgenomen (met enigszins verbasterde uitspraak), maar in Nederland kennen we ook de prachtige letterlijke vertalingen: 'voorhand' en 'nahand'. Ik hoop echt dat die nooit verloren gaan.

Expanding the search in Vim

I just discovered a new Vim trick I think I am going to use quite often, so I am sharing it here to look it up when I forget.

As you may know, you can issue the / command in Vim to start a search. Every character you type will be in the search, until you hit enter, which will jump you to the first occurance of your searched text.

Another thing you may know, is that you can use this search-motion as a motion to other commands as well. When you do v/here, you will visually select everything between the current cursor position and the first occurance of 'here' in the buffer. I use this to delete stuff that I can't target using the f and t motions.

Then there is the thing I once found out, but never could remember: once you press /, you are in a little submode I can find the name for. In this mode, you can use Ctrl+L and Ctrl+H to increase or decrease your search string by the characters of the first match. You can also use Ctrl+G to move that virtual cursor to the next match, or Ctrl+T to get to the previous. Once you hit enter you are on that last position, removing the need to do n.

But here it comes: when you are deleting with d/, you can also use Ctrl+G to get to that next match. If you searched for a small snippet that accidentally occurs before the place you wanted to go, you can press Gtrl+G to jump over it, and pressing enter will delete the full distance.

Gisteravond luisterde ik een aflevering van de Remote Ruby podcast met Derek Sivers, waarin hij uit de doeken doet hoe hij alle logica van zijn applicaties in de database zelf stopt, en waarin hij ook zijn persoonlijke database noemt, waarin hij zo'n beetje zijn hele leven vastlegt.

Zijn database staat in interessant contrast met de gebruikers van Obsidian, die juist voor 'plain text' gaan als opslagformaat, in de hoop dat tekst over twintig, vijftig, honderd jaar nog steeds gelezen kan worden door computers. Maar tegelijkertijd staat het óók in interessant contrast met de Ruby on Rails en Laravel developers die alle logica uit de database proberen te houden en de database alleen maar gebruiken voor domme opslag van data.

Het is fijn om af en toe even uit je comfortabele doos te worden gestuurd. Dit weblog slaat alle posts ook op in losse tekstbestanden en op mijn werk werk ik met Laravel en een relatief domme database.

Derek wijst in de aflevering ook op de Simplicity Matters talk van Rich Hickey, wiens talks eigenlijk allemaal heel goed zijn. De talk gaat in op de concepten 'makkelijk' (easy) en 'simpel' (simple), en hoe mensen die twee concepten door elkaar halen terwijl ze fundamenteel andere dingen zijn. Ook voor niet-programmeurs wel een aanrader, denk ik, al moet je af en toe even door wat jargon heen.

Ik kwam laatst langs een buitenreclame die iets zei als 'als op je bank wachten je kansen kost'. Ik dacht eerst: ik vind het best lekker om op de bank te zitten als ik wacht. Daarna dacht ik: o ja, L. heeft een bank gekocht en moet daar nu op wachten. Pas daarna drong het tot me door dat het reclamebord waarschijnlijk een ander soort bank bedoelde.

Vandaag geleerd in HTML en CSS

Ik ben dus mijn RSS-reader aan het uitmesten en daarbij leerde ik een paar dingetjes over HTML en CSS die ik kon niet wist of kende.

Bijvoorbeeld dat je dus een uitklapbare boomstructuur kan maken met alleen maar HTML en CSS, dus zonder Javascript, door gebruik te maken van <ul> en <li>, met daarin <details> en <summary>. Vooral die laatste twee elementen kende ik niet, weer wat geleerd.

In CSS-land zijn ze kennelijk ook bezig met een nieuwe manier van kleuren uitdrukken, genaamd LCH of oklch. Wie rgb of cmyk gebruikt, specificeert zelf hoeveel licht of inkt er moet worden gebruikt om de kleur te maken. In feite is dat een hele imperatieve manier van een kleur beschrijven. Een meer declaratieve manier is hsl, waarbij je je kleur beschrijft in termen van tint, verzadiging en helderheid. Deze methode heeft echter nog steeds een directe vertaling naar rgb en is dus een 'leaky abstraction'. De lch is een abstractie die rekening houdt met welke kleuren wij als mensen kunnen waarnemen, en maakt berekeningen met kleuren ('deze kleur maar dan iets donkerder') veel makkelijker.

Verder kwam Hidde met een leuke manier om flexbox te gebruiken voor data-visualisatie.

Naming things

Er zijn een paar gevleugelde uitspraken die ik vaak gebruik op werk (zoals '500 is nooit het goede antwoord') en dit software-cliché is waarschijnlijk de aanvoerder op die lijst:

There are only two hard problems in computer science: naming things, cache invalidation and off-by-one errors.

Vooral omdat het waar is: dingen een naam geven is moeilijk, en zonder namen zijn het eigenlijk alleen maar berekeningen zonder betekenis. Er valt pas geld te verdienen als er betekenis – en dus waarde – aan die getallen zitten.

Maar nu las ik een stukje van ntietz, waarin i signaleert dat beschrijvende namen voor stukken code problematisch zijn. De OrderCreateService maakt waarschijnlijk een order aan, maar zodra hij ook mails gaat sturen naar de klant, moet het dan niet de OrderCreateAndEmailSendService zijn? Succes met overal in je codebase de naam van de service aanpassen.

In plaats daarvan, zegt ntietz, moeten namen vooral leuk zijn (mijn vertaling). Diens belangrijkste punt: namen zijn een manier om identiteit uit te drukken, niet om te beschrijven. Het artikel noemt verder geen voorbeelden, maar in mijn hoofd heb ik nu een service genaamd Truus die de orders aanmaakt. De e-mail? 'O ja, die stuurt Truus.'

Ik denk niet dat ik mijn collega's overtuigd krijg, maar ik vind het een geweldig idee.

Deze week kwam ik tot de conclusie dat ik dit hele jaar mijn RSS-reader nog niet had geopend, en die periode bevat natuurlijk ook de kerstweek (Eerste tot en met Zevende Kerstdag), dus er was nogal een voorraadje ontstaan. Zoals altijd denk ik nu 'ik moet ook meer bloggen' en daarom vandaag dus een paar posts achter elkaar, over dingen die ik tegenkwam in mijn RSS-reader, zodat die ook in jullie RSS-reader staan.

Spelletjesweek

Tussen kerst en oud-en-nieuw ben ik naar Wintergo geweest, een winterkamp voor go-spelers waar stiekem ook andere spellen worden gespeeld. In combinatie met feestdagen bij familie levert me dat 15 verschillende spellen in één week op. Hier een overzichtje, in chronologische volgorde.

Pandemic

De klassieker uit 2020, die stiekem al uit 2013 komt. De twist van het spel is dat je met z'n allen tegen het spel speelt: iedereen werkt samen om de virussen te bestrijden en dus win je allemaal, of helemaal niemand. Ik heb deze al veel vaker gespeeld, inclusief een maand-lang potje waarbij ik elke ochtend de stand van het bord in een whatsapp-groep deelde. Met Eerste Kerstdag heb ik het met mijn stiefmoeder en broertje gespeeld, twee potjes, gelijkspel tussen ons en het virus.

Regenwormen

Dit is ook een klassieker en mijn (andere) broertje bleek dit te hebben en leuk te vinden (hij is niet van de spellen). Dus hebben we op Tweede Kerstdag met z'n tweeën een potje gedaan, dat best wel spannend was. Ik ken het spel vooral als een fijn spel voor in een café met een groep mensen, omdat je in principe gewoon een gesprek kan voeren in de tijd dat je niet aan de beurt bent: voor je de dobbelstenen in handen gedrukt krijgt kan toch alles anders liggen.

Go

Naamgever van Wintergo en het spel der spellen. Het spel valt in dezelfde categorie als schaken en dammen: twee spelers, zwart en wit, alle informatie is beschikbaar, heel veel mogelijke zetten, erg diep spel. Het nare is dat ik er inmiddels zo goed in ben dat ik dit niet meer met zomaar iemand kan spelen, maar daar hebben ze dus Wintergo voor bedacht: een midweek elke ochtend om 10 uur een partij spelen met mensen die vaak nog véél beter zijn.

Paleo

Dankzij Pandemic zijn coöperatieve spellen populair, en Paleo is er ook zo een. Zoals de rest van de spellen op deze lijst kende ik deze nog niet. Het speelt zich af in de prehistorie en je bent een groep mensen die probeert te overleven door voedsel en spullen te verzamelen. Het is een wat uitgebreider spel, met veel verschillende opties, maar nog steeds goed speelbaar met familie, denk ik. Ik heb er drie potjes van gedaan en de laatste hebben we verloren – het kan wel knap lastig zijn. Maar dat hoort er ook bij.

Samurai Swords (voorheen 'Shogun' en nu 'Ikusa')

Dit spel kwam volgens Bart uit de kringloopwinkel voor een paar euro, maar is dus een pareltje waar je ook 100 dollar voor kan betalen. Het spel is door juridische en marketing-technische redenen een paar keer van naam veranderd, maar wij speelden dus 'Samurai Swords', mét zwaardjes om de spelvolgorde te bepalen. Het is een soort Risk, maar dan met samurai-saus en een apart bordje waarop je drie grote legers kan bijhouden, wat het spelen aanzienlijk veel duidelijker maakt. We hebben de partij helaas niet af kunnen maken, maar mijn vermoeden is dat het even lang duurt als Risk (uren).

Ocean: Great Barrier Reef

Dit vond ik van alle spellen de minste. Het is een kaartspel waarbij je kaarten met vissen in allerlei kleuren kan verzamelen (een beetje zoals treinkaartjes bij Ticket to Ride, inclusief joker) die je vervolgens kan inwisselen voor kaartjes die punten en bonussen geven. We hadden helaas twee best essentiële regels verkeerd begrepen, dus het was een rommelig potje. Ik moet het eigenlijk nog eens een kans geven, maar vooralsnog ben ik er niet kapot van.

Perseverance: Castaway Chronicles - Episode 1

Dit spel won de competitie voor 'grootste en intimiderendste doos'. Het is eigenlijk twee spellen in één – episode 1 en 2 – en wij hebben alleen episode 1 gespeeld. Met anderhalf uur speeltijd viel dat enorm mee ten opzichte van wat je van de doos zou verwachten. Je bent een cyberpunk-leger dat een eiland vol dino's probeert te koloniseren, waarbij dino's continu je kampementen aanvallen. Best interessant spel, ik ben ook benieuwd naar episode 2, die je dus met dezelfde dino-poppetjes kan spelen.

The Crew: Mission Deep Sea

De grote ontdekking van de week. Ook dit is een coöperatief spel, maar dan vele malen simpeler. Het bestaat uit een soort-van gewoon kaartspel waarmee je slagen moet spelen. De twist is dat je samenwerkt om opdrachten uit te voeren zoals een bepaald teamlid de blauwe 4 te laten winnen, of evenveel van twee kleuren. Juist omdat het eigenlijk 'gewoon kaarten' is, denk ik dat dit het toegankelijkste coöperatieve spel is dat ik ken. Er is ook een space-editie maar men zei dat daar nog wat 'fouten' in zaten, dus neem vooral de duikboot.

Terraforming Mars: Ares Expedition

Een kaartspel met heel veel icoontjes en acties en combinaties. Ik speelde het met z'n tweeën, maar Yvonne speelde het daarna ook nog eens met vier en zei achteraf dat het daar een beetje een ander spel door wordt. Zij is er erg over te spreken als tweespeler-spel. Ik vond het heel interessant, maar vrees wel dat het hierbij weer wat lastiger is om een medespeler te vinden, omdat er dus zo veel verschillende dingetjes in zitten. Maar het zit goed in elkaar!

Wonder Woods

Bij dit spel moet je paddenstoelen verzamelen op basis van informatie uit kaartjes die alleen jij kan zien ('deze paddenstoel is niet 5 waard'). Speelt lekker makkelijk weg, maar ik deed iets te veel paddenstoelen in één mandje en ging daarmee een beetje het schip in. Wel geinig.

Keyflower

Een woordspeling op de Mayflower: schepen met kolonisten arriveren en jij bouwt in vier seizoenen een dorp door te bieden op gebouwen. Het heeft een interessant systeem met hexagonale tegels, waarbij elke speler z'n poppetjes aan één kant van de tegel zet om er zo op te bieden, óf op de tegel om de actie van dat gebouw uit te voeren. Ondanks de tip ging ik toch voor schepen en dus raakte ik aan lager wal, maar wel een leuk spel.

Night of the Ninja

Betere versie van Weerwolven van Wakkerdam, met één nadeel: ik hou echt niet van die psychologie ervan (daarom ben ik bij Weerwolven altijd de verteller, maar die is hier niet bij). Voordeel van Night of the Ninja is dat je wel echt meer informatie hebt (je kan een kaart spelen om te kijken wie wie is) en dat je dus niet blind dorpsbewoners op de brandstapel aan het gooien bent. We speelden het met 5 en dat was goed te doen, maar vanaf 8 spelers is het waarschijnlijk leuker.

Mindbug: First Contact

Op de laatste avond nog even een nieuw spel leren omdat je een halfuurtje moet wachten tot het volgende begint – ook dat is Wintergo. Gelukkig is Mindbug dus inderdaad in 10 minuten uit te leggen en in 10 minuten te spelen, al helpt het wel heel erg als je ooit Magic the Gathering uitgelegd hebt gekregen, want veel mechaniekjes zijn hetzelfde. De twist is dat je tweemaal een kaart van de tegenstander mag jatten door een Mindbug te spelen, waarna vaak heel veel effecten nog een keer triggeren. Ging helaas veel te snel, maar ik wil zeker nog een potje.

Verder heb ik nog talloze andere spellen gespeeld zien worden, maar goed, je kan ook niet alles spelen in zo'n week.

Vegan kaas

De afgelopen weken ben ik bezig met vegan kaas uitproberen. Aanvankelijk zag ik het als project om een lange blogpost over te schrijven, waarin ik alle opties die op de markt zijn op een rijtje zet, maar gaandeweg is die afgezwakt tot deze blogpost, waarin ik zeg: het is wennen, maar daarna goed te doen.

Ik eet al een paar jaar (vijf? zes?) geen vlees meer: een lang verhaal waarin een McDonalds op 50 meter naast mijn huis oppopt, en een weggegeven fiets werd omgezet in een avond in een restaurant waar ik het beste – en dus laatste – vlees ooit heb gegeten. Maar de belangrijkste reden is denk ik dat ik mezelf hypocriet vond dat ik wel vlees at als ik het niet herkende, maar niet als er nog bot aan zat.

Al een tijdje ben ik ook wat aan het zuivel-minderen, en de 'zuivel is niet zo zuiver als we denken' reclames maken dat ik daar nog net weer iets bewuster op let. Ik koop nu zelf geen kaas meer voor op brood, maar dat was ergens wel een gemis, want wat doe je er ander op? Ik ben fan van hagelslag maar alles heeft grenzen.

De vegan kaas biedt uitkomst. Vaak zijn deze kazen op kokos-basis, lijkt het, en hoewel dat je dat in het begin ook erg goed proeft, merk ik dat het me nu nauwelijks nog opvalt en dat ik het gewoon zie als een plak kaas.

Mijn trainingsplan om aan vegan kaas te wennen, wat stiekem ongeveer mijn eigen pad is: eet eerst een maand geen kaas. Koop daarna de vegan komijnenkaas van de Albert Heijn. Omdat de komijn extra smaak geeft en daarmee de specifieke vegan-smaak verhult, is dit misschien wel een goede start.

Probeer vervolgens eens de pittige smeltkaas van WildWestland. Ik heb hem zelf niet gesmolten, maar ik heb inmiddels een tosti-ijzer, dus als hij weer eens voorradig is ga ik dat zeker proberen.

Probeer daarna de Violife kazen. Er is een 'normale' en een Goudse variant, die ik in die volgorde heb geprobeerd. Volgens mij zijn dit hele prima kazen. Op dit punt in het proces kon ik al bijna niet meer beoordelen of dit nu écht zo goed naar kaas smaakte, of dat ik gewoon aan vegan kaas gewend was.

Ik heb net ook nog de Albert Heijn huismerk Goudse kaas geprobeerd en die was ook oké. Mijn stelling hierin is: ja, het is een ander smaakje, zoals ook soya-yoghurt en havermelk net een ander smaakje hebben, maar daar kan je aan wennen en als je er eenmaal aan gewend bent zijn ze heel lekker. Dat is het bespaarde dierenleed wel waard.

Ik speel sinds 2013 Go, 'het oudste bordspel ter wereld', en was er altijd trots op dat ik al speelde vóór de computer zo sterk werd dat geen mens er meer van kan winnen. Niet dat ik ooit van 'de computer' heb kunnen winnen: in 2013 was dat al alleen voorbehouden aan de sterkste spelers.

Een ander feitje over Go dat ik graag herhaal, is dat het meer bordposities heeft dan schaken. Bla bla, de computer won al van de mens met schaken in 1977, en dan noem ik het aantal atomen in het zichtbare universum, alsof ik weet waar ik het over heb.

Maar met grote verbazing las ik dus net in NRC dat er een ander spel is dat nóg meer bordposities heeft en waar de computer het nóg moeilijker mee had. Door de bordposities, door het aantal mogelijke begin-opstellingen, én door het feit dat de tegenstander niet weet waar de stukken staan. We hebben het over Stratego, wie had dat gedacht.

Het is een leuk concept, zo'n zuignapafwasborstel, maar telkens als ik thuis kom ligt hij gewoon in de wasbak; dat kon die oude ook wel.

Meer laden