Jack of all trades, master of none

För att bygga lagen.nu 2.0 kommer det krävas ett rätt stort lass med teknologier. Jag har väl ungefär samlat ihop alla pusselbitar och känner mig ungefär som när man storhandlat inför en riktigt ambitiös middagsbjudning — alla råvaror och alla verktyg finns på plats, nu gäller det bara att hantera dem. Lite om vad som ingår:

XML: Lagen.nu 1.0 använde XML en hel del bakom kulisserna, men XML-formaten var odokumenterade, ad-hoc’iga och i största allmänhet inte så väldigt XMLiga (inga namespaces, data som borde varit i noder lagrades i attribut och vice versa, inget utnyttjande av befintliga standarder som RDF och XLink). Det här ska på något sätt bli bättre i 2.0 — det finns en hel del internationella projekt kring hur juridisk information ska representeras i XML, men de flesta känns som kommittéprodukter med mycket snack och lite spec — det känns som XML inbjuder till sånt, i högre grad än andra komponenter i stacken nedan. Metalex verkar dock lovande.

XSLT: För att få ut de semantiskt korrekta XML-dokumenten på webben måste de transformeras till nån sorts HTML. För 1.0 gjorde jag en del riktigt knepiga transformationer då mantrat där var ”vem behöver databaser när vi kan slänga in allt i ett gigantiskt XML-dokument och XPath()a oss fram” — för 2.0 kommer en vanlig old-school relationsdatabas att användas, så förhoppningsvis blir det bara en fråga om att ta befintliga stylesheets och trimma lite.

SOAP: Det här är väl mera på nice-to-have-listan snarare än release-blocker-listan, men det vore kul att åtminstone doppa tårna i hela webservicesträsket. Två problem är dock att jag aldrig har jobbat mot någon skarp web service från klientsidan, så jag vet inte riktigt hur ett WS-API ska kännas för att vara bra, samt att jag egentligen inte har en bra känsla för vilka rättskälleinformationsfunktioner som skulle vara vettiga att göra åtkomliga som webservices.

HTML: Allt ska ju bli HTML till slut, så viss koll på läget måste jag ju ha även här. Det blir förmodligen XHTML 1.0 Strict, en viss grad av divitis (den lösning jag skissade på här visade sig vara ohållbar när man kör den på exempelvis inkomstskattelagen och många kommentarer), och förmodligen tyvärr sämre semantisk meningsfullhet än i 1.0 (det största problemet är numrerade listor — för att sätta en kommentar bredvid en punkt i en punktlista kan jag inte representera själva punkten som en LI-tag — det går inte att placera en P-tag med kommentaren vid sidan av när man är i ett UL-kontext). Dock så ska ett flertal tabeller bort och ersättas med DL-listor, efter tipsen här.

CSS: Ärligt talat är inte 1.0 särskilt visuellt upphetsande. Det kanske inte kommer bli pastellfärger och rundade hörn, men en något mer genomtänkt visuell känsla hoppas jag kunna åstadkomma. Jag har med min nya op-center-setup möjlighet att testa på Firefox, IE, Konqueror, Opera och Safari, och ser med skräckblandad förtjusning fram emot utmaningen att få det hela att se bra ut utan att degenerera till tabellsoppa.

DHTML/AJAX: Inte bara för att det är en nödvändig beståndsdel om man vill vara web 2.0, mycket av wikifunktionaliten skulle vinna på att med lite AJAX göra det möjligt att redigera kommentarer rakt på sidan, a la flickr’s fotobeskrivningsmagi. Och vore det inte coolt om sökrutan föreslog lagtexter a la google suggest? Jag har kollat runt på vad för hjälpramverk som finns på javascriptutvecklingsscenen (jag har läst DHTML Utopia och såg inte alls fram enmot att göra all crossbrowserkompatibilitetssörja för hand) och fastnade tillslut för MochiKit (efter att ha kollat på Dojo, Prototype/script.aculo.us, YUI och den här artikeln) — att det beskrevs som kraftigt pythoninfluerat var ett tungt vägande skäl.

EBNF: En av de bästa sakerna med lagen.nu 1.0 var den EBNF-baserade tolkningen av lagtextreferenser i löpande text. Den är, i ärlighetens namn, mest ihophackad utan någon djupare förståelse för textparsning i den högre skolan, och det känns som att jag borde ägna lite tid åt SimpleParse-dokumentationen för att hantera andra typer av referenser, nu när jag ska hantera flera typer av rättskällor.

Python: Jag hamnar ofta i fällan att när jag, när jag lärt mig ett verktyg tillräckligt bra för att få riktigt jobb gjort med det, slutar lära mig mera. Under våren har jag dock gått tillbaks till grunderna för python och försökt utnyttja mer än de få procent av språket som 1.0 använder. Det blir vettig objektorientering, bättre utnyttjande av standardbiblioteket och kanske lite riktigt funktionell programmerings-tänk (första kapitlet i TPiP är en riktig ögonöppnare här). De tre viktigaste bitarna kommer nog bli Django för allt dynamiskt, BeautifulSoup för allt HTML-tröskande (tillsammans med SimpleParse enligt ovan), och ElementTree för allt XML-byggande.

MySQL: Och så ska ju saker lagras i en databas också. Jag är som tidigare nämnts skeptisk mot RDBMS-användande, men med tanke på hur fint django abstraherar bort det hela känns det motiverat att faktiskt plocka in en databasserver i mixen. Det blir förmodligen MySQL även om alla de coola kidsen använder Postgresql, men då jag redan har en MySQL-server körandes för WordPress, MediaWiki och lite annat, har jag än så länge inte sett nån verklig anledning att byta.

Ungefär så — det blir en ganska diger lista när man kollar på den. Vilket anknyter till den här bloggpostningens titel, det kan inte bli några djupa kunskaper inom varje enskild del (särskilt som en stor komponent inte är med här, nämligen domänkunskapen om just rättsinformation) men förhoppningsvis tillräckligt för att ro det hela i land.

OP-CENTER


Mac, Windows, Linux. Allt styrt från samma tangentbord. Damn it feels good to be a geek.

Längst till vänster är en Mac-desktop, körd av en mac mini dit tangentbord och mus är kopplade. I mitten kör min desktop-PC. För att kunna kontrollera den med samma mus/tangentbord använder jag Synergy – bara att föra muspekaren till kanten av mac-skärmen så dyker den upp på pc-skärmen. Eftersom min desktop har mer minne och processorkraft än ens XP kan konsumera, och dessutom ett dual head-grafikkort kör den även VMware Player laddad med en Fedora core 5-image. Det mesta funkar smutt förutom tangentbordet i Fedora (som envisas att tro att jag har ett amerikanskt tangentbord). Nu ska det crossplatformutvecklas!

Öka takten sista kvarten, Tidaholm!

Det har inte skrivit mycket på senaste tiden. Delvis beror det på att jag jobbar och pluggar och inte hinner mycket annat, men främst beror det nog på att jag nånstans längs vägen börjat ställa kravet på mig själv att alla blogpostningar ska ha nån sorts mening, leda till nån sorts svar, ha länkar till alla relevanta källo och dessutom inte innehålla så mycket felaktigheter. Inte konstigt att det inte blir något skrivet då. Mitt manifest för sommarens bloggande lyder ”mer ogenomtänkta åsikter, mindre faktakontroll”.

Imorgon skriver jag sista tentan för terminen, Civilrätt 3, dvs immaterial- och marknadsrätt. Det här var ett ämne jag sett fram emot hela utbildningen, men det går inte att sätta sig in i det ämnet på något meningsfullt sätt på bara fem veckor. Särskilt tråkigt tycker jag det är att det resoneras så lite kring grunderna för ensamrätterna och under vilka förutsättningar lagstiftningen faktiskt är ägnad åt att nå de mål som man hoppas uppnå – det har mest varit på nivån ”upphovsrätt uppmuntrar skapande”, följt av en materiell genomgång av paragraferna och direktiven. Jag tycker att tidigare kurser haft en mer genomgripande analys av lagstiftningens mål. Eller så är det bara att jag har haft högre förväntningar på det här ämnet.

Nåväl; studierna har i övrigt flytit på ganska bra under vårterminen (jag fick Ab på C2:an — hurra för mig!) trots eller tack vare mitt halvtidsjobb. Det har stundtals varit ganska tungt att kliva in i södra husen åtta på morgonen och gå hem nio på kvällen, men vafan, det gick ju under den glada IT-eran (fast då var det väl mer tidig eftermiddag till småtimmarna).

Nu när jag får sommarlov från studierna (jag kommer fortfarande jobba drygt halva sommaren) hoppas jag få mer tid över för lagen.nu.
Jag har börjat värma upp pythonkunskaperna lite under helgerna, och har dragit upp riktlinjerna för vad jag vill göra med tjänsten. Det ska bli mer rättskällor (jag har fått tillstånd att publicera alla referat från Domstolsverket, exv, och jag har numera järnkoll på hur och vad man får utnyttja övrigt offentligt material), smartare användning av nyckelord och framförallt wikibaserade annoteringsmöjligheter.

Jag funderar på att i samband med det hela flytta ut tjänsten från mac minin på mitt skrivbord till en riktig serverhall. Har någon ett tips på var man kan få en (ev virtuell) dedicerad server med minst 80 GB disk, alternativt colocation, till ett rimligt pris? Jag behöver rootaccess, eftersom jag tänker köra bleeding-edge-versioner av ett gäng olika verktyg.

I övrigt bäst just nu:

  • Fika: kaffe och apelsinchokladmuffin på 7-11 (min lokala 7-11 frågar inte längre vad jag vill ha när jag kommer in)
  • Mat: 93-öresfrallor på Prisextra (billigt mellanmål)
  • Podcast: Penn Radio (bra morgonlyssning på väg till skolan)
  • Webbplats: Project Aon (”Ensamma vargen”-rollspelsböckerna!)
  • Webbramverk: Django (rent, minimalt och konsekvent)
  • Javascriptwidget: Tiny MCE (löjligt lättintegrerat)
  • Pythonbibliotek: Beautiful Soup (kolla Contributors-listan!)
  • TV: How I Met Your Mother (som Vänner när det var bra)
  • Hardcore: Raised Fist: ”Sound of the republic” (nästan lika bra som ”Dedication”)