Lagstiftaren borde lära sig av webben

There are no reasons at all in theory for people to change URIs (or stop maintaining documents), but millions of reasons in practice

2003 ändrade riksdagen en av de mest centrala lagar vi har, riksdagsordningen (RO). RO är ett mellanting mellan grundlag och vanlig lag, och ändras inte utan vidare. När det gäller en sådan lag tycker man att man borde gå försiktigt fram när man ändrar den, inte minst vad det gäller kapitel- och paragrafnumreringen.

Jag menar, det finns sjukt mycket material som refererar till RO. Om någon skriver ”Enligt RO 3:18 så gäller […]” så vill man gärna att den referensen ska gälla i överskådlig tid.

På både http://blog.tomtebo.org/ och http://lagen.nu/ har jag gjort mitt bästa för att länkar ska funka över tid; om någon är snäll nog att länka till någon av mina blogpostningar eller någon av lagarna på lagen.nu, så vill jag att den länken ska funka, åtminstone så länge domänerna blog.tomtebo.org och lagen.nu är under min kontroll.

Riksdagen har RO under sin kontroll. Trots det valde man i 2003, iom SFS 2003:180 att numrera om stora delar av RO. Det var en del i arbetet att modernisera språket i RO, vilket i sig är en god tanke. I programmeringsvärlden kallar vi sådant ”refactoring”, när syftet är ”changing a software system in such a way that it does not alter the external behavior of the code yet improves its internal structure”. Det betraktas i allmänhet som en God Sak.

Problemet är att moderniseringen av RO även ändrade det yttre beteendet (”external behaviour”). All gammal juridisk text (ffa doktrin och rättsfall) är plötsligt inte att lita på. Om man läser ”Enligt RO 3:18 så gäller […]” så måste man veta om texten skrevs före eller efter den 1:a juli 2003, eftersom det påverkar innehållet i texten.

Har du någonsin fått felmeddelandet ”The requested URL /[...] was not found on this server.”? Det beror på att någon glömt att URL:er1 aldrig skall ändras. Det är egentligen aldrig OK att lämna felkod 404 för en URL som en gång har fungerat (jag har brutit mot denna regel fler gång än jag kan räkna, men jag har lärt mig av mina misstag). Det enda som är acceptabelt är 301 (Moved permanently) eller 410 (Gone) (eller möjligtvis 307 (Temporary Redirect) i vissa fall). Det är sånt som gör att webben funkar dåligt.

När lagstiftaren numrerar om lagar funkar juridiken dåligt. Det gör att massor av läroböcker, artiklar, rättsfall och andra rättskällor plötsligt har felaktiga referenser. Det här problemet finns på många andra ställen än RO, jag tar bara upp just det här exemplet eftersom jag läser statsrätt just nu och RO är en rätt viktig lag.

Vad som är intressant är att webben bara funnits i tio år. Tim Berners-Lee och andra arkitekter bakom webben förstod det här problemet från dag ett. Juridik har funnits i flera tusen år och har fortfarande inte förstått problemet.

På måndag går jag tillbaka till det rena tekniksnacket och orerar över MacOS X hantering av Unicode i filsystemet. Användbar pythonkod utlovas!

1: …eller URI:er. Skillnaden mellan URL:er och URI:er är intressant för en mycket mycket liten del av mänskligheter. Nån annan dag ska jag ranta om de som använder det ena uttrycket när de menar det andra, och vice versa.

Standardbaserad DHTML-programmering

När man vill etikettera en lag på lagen.nu och klickar på ”Ändra” så skickas man inte till ett inmatningsformulär på en annan sida1; istället görs den beiga rutan med existerande etiketter om till ett inmatningsformulär, med tangentbordsfokus satt i textrutan. Man behöver inte ens klicka på ”Ändra”, det räcker med <acceleratorknapp>2+Ä. Det där är lite DHTML-magi av enklaste sorten, men just nu är det den roligaste programmeringen jag vet.

Vilket jag inte hade trott för fem år sedan. Jag hade lekt med Javascript sedan Netscape 2.0-tiden (då man i princip bara kunde ändra text i inmatningsfält) och det har alltid känts härkigt. Javascript var ett fult språk och ”API”:et var dåligt, ostandardiserat och hade sjukt många olika egenheter på olika webläsar/operativsystemplattformar. Debugmöjligheter var begränsade till ”debug by printfalert()”. När allting eskalerade i en inkompatibilitetens kapprustning nånstans runt 4.0-versionerna av IE och NS fick jag nog.

Men idag ser världen annorlunda ut. API:et (DOM) är rätt smutt. Webläsarna stödjer det överlag ganska bra, och kompatibilitetsproblemen är överlag kända och runtarbetade. Och den fula ankungen till språk som var javascript har plötsligt blivit, om än inte en svan, så åtminstone ett ganska snyggt dynamiskt typat språk med objektorientering, högre ordningens funktioner och closures och grejjer. Och som kronan på verket har den nya häftiga buzzakronymen AJAX kommit att nästan ersätta det gamla skamfilade ”DHTML”.

För ett tag sedan såg jag en recension på slashdot av boken ”DHTML Utopia: Modern Web Design Using JavaScript & DOM”, och, eftersom jag redan lurade på lite fräcka summer of 2005-funktioner beställde jag den. Det är en jättebra bok. Inte för tjock, inte en referensbok, utan bara en koncis guide till vad man egenligen kan göra med javascript nuförtiden. Boken håller sig till stora delar borta från flashiga effekter och förklarar ganska grundligt exakt hur de mer grundläggande sakerna i språket verkligen funkar.

Det stora aha-ögonblicket kom när jag läste kapitlet om eventhantering (som, tillsammans med några andra kapitel, går att ladda ner här). Jag, som alltid gjort javascriptande med diverse onClick="doSomething()"-kod, insåg att precis som jag kan binda utseende till element med CSS utan att röra HTML-koden, så kan jag binda beteende till element med javascript (addEventListener/attachEvent) utan att röra HTML-koden. När man har en sajt med 16632 statiska HTML-sidor är det en big win.

Och, som extra bonus kan man nu debugga sin javascriptkod på ett vettigt sätt. Mozillas kombination av javascriptdebuggern och DOM-inspectorn gör att det är galet lätt att få sin kod att funka i Mozilla-baserade browsers. Därifrån är det ibland problem att få saker att funka i Opera, Safari/Konqueror och IE, men ”DHTML Utopia” hjälper en bra bit på vägen med en pragmatisk inställning till browserbugworkarounds.

Så, ja, om tiden tillåter blir det mer DHTML-festival på lagen.nu? Gillar du det inte? Ladda ner lagarna i XML-format och transformera dem till hur tråkig HTML du vill!

Nu har det varit mycket tekniksnack flera dagar i rad här. Imorgon blir det en passionerad rant om lagstiftningsteknik.

1: Det stämmer faktiskt inte riktigt, om man har javascript avslaget skickas man till ett vanligt amish-formulär. Graceful degradation IN DA HOUSE!

2: ”Alt” på Windows/Firefox, ”Ctrl” på Mac/Safari, och på Opera funkar det inte alls ety den verkar inte kunna binda svenska tecken till acceleratorer på det viset.