Waarom ik (niet) post

En weer een hiaat van maanden sinds mijn laatste (non-shit)post. Maar waarom? Of eigenlijk, waarom niet? Als ik wèl post, waarom dan ineens wel weer?

Ik schrijf om de volgende redenen:

Publiceer om:

Toevallig had ik het laatst met mijn vader over stress, en de invloed van dingen waar je maar niet aan toe lijkt te komen, die je jezelf volledig vrijwillig hebt opgelegd zonder schijnbare reden. Bijvoorbeeld het schrijven van een blogpost over iets wat je hebt gedaan of bedacht.

Algemeen gezien houd ik mijn shit bij met een issue board: ik bedenk wat ik wil doen met mijn leven en schrijf de benodigde taken uit, en die leiden dan een leven in de vorm van een ticket, verhuizende van de "todo"-kolom naar "researching" naar "doing" en dan uiteindelijk over de Jordaan naar "done" danwel "don't".

En ja, ook ideeën voor blogposts ondergaan deze lijdensweg. Maar helaas komen ze niet vanzelf uit "todo". Er is natuurlijk een reden dat ik sommige posts al meer dan een jaar uitstel: ik voel er niet echt passie voor, het is puur dat ik het mezelf heb opgelegd, want het zou zo leuk staan op mijn blog. Nou, dan documenteer ik ze hier maar kort en daarmee schrijf ik ze (van me) af.

Raytracing op de rekenmachine

3 balletjes met reflecties maar zonder shading

Ik heb 3 jaar geleden een raytracer geschreven, en ook zo'n 3 jaar geleden een port gemaakt voor mijn TI-84 Plus CE-T. Heb het niet eens afgekregen want alleen al het renderen van de raycasting zelf (hit/no hit) duurt een fucking uur op de 320×240 ingebouwde LCD, gewoon niet boeiend. Misschien een half gebakken discussie over fixed point getallen i.p.v. ints en floats (alhoewel het stiekem gewoon ints zijn, zie het als rekenen met "millimeters" ipv "meters" als het SI stelsel gebaseerd was op machten van 2 en niet 10).

glitchy balletje

Wow deze render van een bal laat een patroon van floating point inaccuracies zien ofzo omdat ik hier de epsilon was vergeten in mijn floating point comparisons voordat ik overstapte naar fixed point omdat deze rekenmachine van €100+ uit 2013 een 8 bit chip van de jaren 70 gebruikt die helemaal geen FPU heeft waardoor alle FLOPs in software geëmuleerd moeten worden wat FUCKING TRAAG IS.

Routerfirmware flashen

Voor mijn moeder heb ik haar Ziggo wifi repeater ding (een TP-Link Archer C7 maar dan met Ziggo branding) geflasht zodat alle features van de router weer beschikbaar waren, in plaatst van een softwarematige beperking op alles behalve wifi repeating. Dit was een hele opgave en op zich een leuke uitdaging, maar uiteindelijk kwam het er neer op "ik had al Linux geïnstalleerd, weet een terminal te gebruiken, kan een relevant Tweakers thread vinden (vereist niet alleen serieuze skills maar ook luck), kan desbetreffende thread lezen en volgen, kan een obscuur protocol genaamd TFTP gebruiken met commandline tools ervoor".

Het had gewoon niet echt de potentie om een waardevolle write-up te zijn dus, want dit probleem ga ik niet opnieuw krijgen (en anders heb ik het nu alsnog stiekem voor mezelf vastgelegd), en mijn post zou andere mensen niet beter helpen dan het Tweakers thread. En ik heb voor de grap zelfpromotie wel bovenaan gezet, maar eigenlijk is dat de laatste reden waarom ik iets zou posten. Laat je niet foppen door de stem waarmee ik schrijf - ik heb helemaal geen behoefte om mijn ego te voeden en de wereld te laten zien hoeveel slimmer ik wel niet ben dan de rest, alleen maar omdat ik als kind niet met vrienden maar met een computer speelde waardoor ik wel weet hoe ik Arch Linux moet installeren maar niet weet hoe gezond sociaal contact verloopt.

Braille en Anonium

Ik had een keer het idee om een imageboard/forum a la 4chan te maken, maar dan federated en bedoeld voor intelligente en inhoudelijke discussies door middel van een automatisch gegenereerde mini IQ test als captcha (lol! Haha mensenproblemen oplossen met tech die is zeker van gisteren!"></a>.")}"DROP TABLE users;--",:1;uitroepteken).

Uiteindelijk enkele posts mogen hosten op die site maar het liep geen vaart, en ik kwam er al heel snel achter wat een "4chan achtig imageboard" precies inhoudt qua publiek dat je ermee trekt. Een hoog IQ zegt dus niks over de volwassenheid of beleefdheid van een persoon, zeker niet als je die hebt vastgesteld met een enkele progressive matrix test. Dus stekker eruit en snok. Maar nu komt het!

Posters waren anoniem, maar wel uniek gekenmerkt met een computer gegenereerd pseudoniem, was het idee. Hoe geef je dat weer? Bitcoin heeft een woordenlijst + algoritme om de binaire seeds van wallets te vertalen naar een reeks wartaal, wat beter te lezen en onthouden is voor mensen (die kunnen lezen). Maar ik had het bril-jànte idee om de bits grafisch te vertonen. En wat lijkt daarop? Braille! Eén bolletje of géén bolletje, 1 of 0. Braille heeft in Unicode 2 soorten tekens: matrixen van 2×3 stipjes per teken en matrixen van 2×4 stipjes per teken. Ik ging voor de 2×4, want 128 bits (een GUID) = 2×4×16 braillebolletjes.

Helaas kon ik geen font vinden die zowel braille als mijn esthetische visie ondersteunde. Dus ik maakte mijn eigen vector font (svg font). Dat was veel werk dus ik schreef een script. Die dealde er ook mee dat de officiële volgorde van de Braillebolletjes wat apart is vanwege historische redenen.

Intussen is in elke moderne browser support voor SVG fontfaces geschrapt. En achteraf had ik net zo makkelijk (makkelijker) gewoon direct SVG kunnen genereren in de HTML want uiteindelijk was er eigenlijk geen enkele overeenkomst met braille behalve dat er sprake was van een matrix van stippeltjes. Niet alsof een blinde een braille-afdruk gaat maken van de pagina en dan zegt "oh ja, dit is weer typisch een argument van WV#% ™£ ˚¯$£™¸ ̣˘$V T?JKL÷Ä P*".

Het meest poignante onderdeel was de PHP UTF-8 encoder en decoder die ik ervoor had gemaakt, en überhaupt het feit dat een taal als PHP over bitwise operators beschikt. Alsnog lekker geprutst!

<?php

function utf8($num){
    if($num<=0x7F)       return chr($num);
    if($num<=0x7FF)      return chr(($num>>6)+192).chr(($num&63)+128);
    if($num<=0xFFFF)     return chr(($num>>12)+224).chr((($num>>6)&63)+128).chr(($num&63)+128);
    if($num<=0x1FFFFF)   return chr(($num>>18)+240).chr((($num>>12)&63)+128).chr((($num>>6)&63)+128).chr(($num&63)+128);
    return '';
}

class GUID {
    public $bytes;

    function __construct($bytes = false){
        if ($bytes === false){
            $this->bytes = random_bytes(16);
        } else {
            $this->bytes = $bytes; 
        }
    }

    function toHex(){
        return bin2hex($this->bytes);
    }

    function toBraille(){
        $braille = "";
        foreach (str_split($this->bytes) as $byte) {
            $braille .= utf8(0x2800+hexdec(bin2hex($byte)));
        }

        return $braille;
    }
}

2024-07-23 in blog