<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Staffan Malmgrens blogg &#187; webutveckling</title>
	<atom:link href="http://blog.tomtebo.org/tag/webutveckling/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.tomtebo.org</link>
	<description>Programmering, juridik, punkrock och andra trivialiteter</description>
	<lastBuildDate>Sun, 01 Jan 2012 14:51:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>En arkitektur för webutveckling med semantic web-koncept</title>
		<link>http://blog.tomtebo.org/2009/06/30/en-arkitektur-for-webutveckling-med-semantic-web-koncept/</link>
		<comments>http://blog.tomtebo.org/2009/06/30/en-arkitektur-for-webutveckling-med-semantic-web-koncept/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 22:47:46 +0000</pubDate>
		<dc:creator>staffan</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[lagen.nu]]></category>
		<category><![CDATA[metadata]]></category>
		<category><![CDATA[RDF]]></category>
		<category><![CDATA[semantic web]]></category>
		<category><![CDATA[sparql]]></category>
		<category><![CDATA[webutveckling]]></category>

		<guid isPermaLink="false">http://blog.tomtebo.org/?p=681</guid>
		<description><![CDATA[Idag checkade jag in en ganska stor ändring i kodbasen för lagen.nu. Det är lite vanskligt att göra stora ändringar nu såhär en vecka innan lagkommenteringsprojektet drar igång på allvar, men just den här ändringen bör kunna göra det enklare &#8230; <a href="http://blog.tomtebo.org/2009/06/30/en-arkitektur-for-webutveckling-med-semantic-web-koncept/">Läs mer <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Idag checkade jag in <a href="http://trac.lagen.nu/changeset/285">en ganska stor ändring</a> i<br />
kodbasen för lagen.nu. Det är lite vanskligt att göra stora ändringar<br />
nu såhär en vecka innan <a href="http://wiki.lagen.nu/">lagkommenteringsprojektet</a> drar igång<br />
på allvar, men just den här ändringen bör kunna göra det enklare att<br />
pussla ihop ny funktionalitet jämfört med hur det ser ut idag.</p>
<p>Vad ändringen handlar om är att använda RDF på en djupare nivå än<br />
vad som gjorts hittils, och med verktyg som är bättre lämpade. Det jag<br />
har nu börjar kännas nära en arkitektur för att bygga<br />
webbtillämpningar på semantic web-koncept istället för den traditionella kombon <a href="http://foldoc.org/rdbms">RDBMS</a> + SQL + dynamiskt språk<br />
(eller den något mindre traditionella dynamiskt språk + MVC-ramverk + <a href="http://blogs.tedneward.com/2006/06/26/The+Vietnam+Of+Computer+Science.aspx">O/R-mappning</a>). </p>
<p>För att man ska förstå poängen börjar jag med att beskriva hur det har<br />
sett ut tidigare.</p>
<p>Innehållet på lagen.nu <a href="http://trac.lagen.nu/wiki/KodArkitektur">skapas i huvudsak i fyra<br />
steg</a>: Download, Parse, Relate och Generate. De två första stegen handlar<br />
om att hämta innehåll (lagtexter och rättsfall) från andra ställen,<br />
respektive att semantiskt strukturera upp detta (från de text- och<br />
wordfiler som laddats ner). Dessa berörs inte alls av ändringen.</p>
<p>Relate-steget är ganska enkelt: Det går igenom de strukturerade<br />
XHTML2/<a href="http://www.w3.org/TR/xhtml-rdfa-primer/">RDFa</a>-filer som<br />
skapats och plockar ut alla RDF-triples. Dvs från filer som innehåller<br />
både data (lagtext, domslutstext) och metadata (SFS-nummer, titlar,<br />
lagrumshänvisningar&#8230;) så plockas metadatat fram. Detta lagras sedan<br />
separat på lämpligt sätt.</p>
<p>Generate-steget tar sedan en strukturerad XHTML2-fil, exempelvis en<br />
lagtext och transformerar den till XHTML 1.0, färdigt att visas i en<br />
webbläsare. Denna transformering lägger till en massa information,<br />
exempelvis sidhuvud och sidfot, innehållsförteckning, och listor av<br />
relevanta rättsfall under varje paragraf.</p>
<p>För att göra det sista måste transformeringssteget på något vis ha<br />
tillgång till en lista över de relevanta rättsfallen. Tidigare har<br />
detta skett genom att Relate-steget konstruerat en (1) gigantisk<br />
RDF/XML-fil med information om samtliga 10 000+ rättsfall som finns i<br />
systemet, och XSLT-transformationen sedan laddat in denna med ett <a href="http://www.xml.com/pub/a/2002/03/06/xslt.html"><code>document()</code>-anrop</a>. Det<br />
funkar, men är både långsamt och oflexibelt.</p>
<p>Att skapa kopplingar mellan dokument genom systemets samlade metadata<br />
skulle kunna användas på rätt många olika sätt, men idag görs det bara<br />
på två sätt &#8212; dels för listorna på relevanta rättsfall under<br />
lagtextparagraferna, dels för att se till att bara de rättsfall som<br />
faktiskt finns i systemet är länkade i den lista över föregående<br />
rättsfall som finns bredvid varje rättsfall.  Det beror dels på att<br />
det är bökigt att implementera nya kopplingar, dels på att det just nu<br />
inte finns så mycket mer information i systemet än just lagtext och<br />
(svenska) rättsfall.</p>
<p>Men med lagkommenteringsprojektet börjar det senare<br />
ändras. Kommentaren för varje enskild paragraf lagras som ett<br />
RDF-påstående, på formen:</p>
<pre>&lt;http://rinfo.lagrummet.se/publ/sfs/1998:204#P13&gt; dct:description
"Huvudregeln för känsliga uppgifter är ..."</pre>
<p>Och även andra informationskällor ska in. Jag har fyra moduler i<br />
varierande stadier av halvfärdighet (för <a href="http://trac.lagen.nu/browser/trunk/RegPubl.py">propositioner och<br />
utredningsbetänkanden</a>, <a href="http://trac.lagen.nu/browser/trunk/ARN.py">Allmäna<br />
reklamationsnämnens praxis</a>, <a href="http://trac.lagen.nu/browser/trunk/JO.py">JO-beslut</a> och <a href="http://trac.lagen.nu/browser/trunk/Curia.py">EG-domstolens<br />
domslut</a>) och en på planeringensstadiet (EG-lagstiftning).</p>
<p>Med flera informationskällor växer möjligheten för användbara<br />
kopplingar exponentiellt. Under varje paragraf skulle man kunna lista<br />
namnen på den proposition som föranlett lagändringar i denna, eller<br />
namn på EG-direktiv som föranlett propositionerna. För varje sökord<br />
som rättsfall använder kan man skapa en sida som listar andra<br />
rättsfall med samma sökord. Och sen plocka in information från <a href="http://www.rikstermbanken.se/">rikstermbanken</a>, <a href="http://sv.wikipedia.org/">svenska Wikipedia</a> och förstås <a href="http://wiki.lagen.nu/">vår egen wiki</a>.</p>
<p>Om man kan skapa en koppling mellan EG-direktiv och svensk lag (på<br />
paragraf/artikelnivå) skulle man tillochmed skapa en koppling mellan<br />
svenska lagparagrafer och förhandsavgöranden från EG-domstolen för<br />
andra länder. Om ni bara kunde se in i huvudet på mig skulle ni<br />
förstå hur vackert allt kommer att bli.</p>
<p>Men systemet med att spara ner allt i gigantiska XML-blobbar och gräva<br />
igenom dessa med XSLT-funktionen <code>document()</code> skalar inte.</p>
<p>Så, vad dagens ändring gör är att byta ut metadatalagringen &#8211; från<br />
stora statiska filer till en <a href="http://www.openrdf.org/">RDF-databas</a>. Jag vet att det <a href="http://blog.tomtebo.org/2005/08/31/allt-du-lart-dig-om-webutveckling-ar-fel/">strider<br />
mot mina tidigare principer</a>, men med strax över en miljon poster<br />
(triples) har jag <a href="http://blog.tomtebo.org/2009/01/26/mediawiki-som-datalager/">insett</a><br />
att det faktiskt behövs.</p>
<p>Enligt den nya ordningen så stoppar Relate-steget in all metadata i<br />
Sesame-databasen istället för att stoppa in det i en gigantisk fil. I<br />
Generate-steget körs sedan ett antal <a href="http://www.w3.org/2009/sparql/wiki/Main_Page">SPARQL-frågor</a> mot denna databas,<br />
och sparar ner steget i en temporär XML-fil, som bara innehåller den<br />
information som är relevant för just det dokument som ska skapas. Den<br />
läses sen in med <code>document()</code> precis som tidigare. Skillnaden är att<br />
denna temporärfil är liten och därmed snabbprocessad, samt att<br />
utvecklingen för att stoppa ner nya datamängder i den är liten &#8211; dels<br />
en SPARQL-fråga, dels lite klisterkod för att mappa svaret till en<br />
XML-ig trädstruktur. Vad det gäller det senare hoppas jag kunna<br />
använda <a href="http://code.google.com/p/oort/wiki/SparqlTree">SPARQLTree</a><br />
för att kunna generalisera det helt.</p>
<p>Vad det gäller det förra så är det dock inte hel-enkelt att skriva bra<br />
SPARQL-frågor. Den enda hjälpen som är något att ha är själva specen,<br />
och den innehåller liksom inte så mycket tips av &#8221;for<br />
dummies&#8221;-karaktär. Det leder till att mina frågor är ganska yxiga än<br />
så länge. Förhoppningsvis inser jag hur de kan förenklas allt eftersom<br />
jag lär mig krypa på det här området.</p>
<p>Som ett exempel på svårigheterna kan nämnas hur man ska formulera en<br />
fråga som hämtar information alla rättsfall som hänvisar till en viss<br />
lag. Informationen om ett visst rättsfall lagras enligt följande mall<br />
(<a href="http://www.w3.org/DesignIssues/Notation3">N3-notation</a>):</p>
<pre>
@prefix dct: &lt;http://purl.org/dc/terms/&gt; .
@prefix rinfo: &lt;http://rinfo.lagrummet.se/taxo/2007/09/rinfo/pub#&gt; .

&lt;http://rinfo.lagrummet.se/publ/rattsfall/rh/2003:65&gt; a rinfo:Rattsfallsreferat ;
     dct:creator &lt;http://lagen.nu/org/2008/hovratten-for-nedre-norrland&gt; ;
     dct:description "En kvinna med en insulinberoende diabetes, åtalad för misshandel[...]"@sv ;
     dct:identifier "RH 2003:65"@sv ;
     dct:relation ""@sv ;
     dct:subject "Uppsåt"@sv ;
     rinfo:avgorandedatum "2003-11-21"@sv ;
     <b>rinfo:lagrum &lt;http://rinfo.lagrummet.se/publ/sfs/1962:700#K1P2S2&gt; </b>
     rinfo:malnummer "B24-03"@sv .
</pre>
<p>Det intressanta här är <code>rinfo:lagrum</code>-triplen (i fetstil). Det är fråga<br />
om ett rättsfall som hänvisar till brottsbalken, närmare bestämt 1<br />
kap. 2 § 2 st. Brottsbalken har i det här systemet URI:n<br />
<code>&lt;http://rinfo.lagrummet.se/publ/sfs/1962:700&gt;</code>.</p>
<p>En inititial SPARQL-fråga för att hämta information om alla rättsfall som hänvisar<br />
till brottsbalken kan se ut såhär:</p>
<pre>
PREFIX dct:&lt;http://purl.org/dc/terms/&gt;
PREFIX rinfo:&lt;http://rinfo.lagrummet.se/taxo/2007/09/rinfo/pub#&gt;

SELECT ?uri ?id ?desc
WHERE {
    ?uri rinfo:lagrum &lt;http://rinfo.lagrummet.se/publ/sfs/1962:700&gt; .
    ?uri dct:identifier ?id .
    ?uri dct:description ?desc
}
</pre>
<p>(Not: om du inte redan kan grundläggande SPARQL rekommenderar jag att<br />
exempelvis läsa <a href="http://en.wikipedia.org/wiki/SPARQL">wikipediasidans<br />
introduktion</a>).</p>
<p>Problemet är att den frågan enbart kommer att hitta rättsfall som<br />
hänvisar till brottsbalken i sin helhet, inte rättsfall som hänvisar<br />
till någon enskild paragraf. Detta eftersom URI:er i RDF är<br />
ogenomskinliga &#8212; det finns inget inherent samband mellan<br />
<code>&lt;http://rinfo.lagrummet.se/publ/sfs/1962:700&gt;</code> och<br />
<code>&lt;http://rinfo.lagrummet.se/publ/sfs/1962:700#K1P2S2&gt;</code> (som<br />
är URI:n för 1 kap. 2 § 2 st. Brottsbalken).</p>
<p>Det vi vill göra är att ställa en fråga som matchar alla rättsfall som<br />
hänvisar till en viss lag eller något som är en del av samma lag<br />
(enskilda kapitel, paragrafer eller stycken). Ett enkelt, fult,<br />
långsamt och fel sätt är att göra det med ett filter:</p>
<pre>
PREFIX dct:&lt;http://purl.org/dc/terms/&gt;
PREFIX rinfo:&lt;http://rinfo.lagrummet.se/taxo/2007/09/rinfo/pub#&gt;

SELECT ?uri ?id ?desc ?lagrum
WHERE {
    ?uri dct:identifier ?id .
    ?uri dct:description ?desc .
    ?uri rinfo:lagrum ?lagrum .
    FILTER regex(str(?lagrum), "http://rinfo.lagrummet.se/publ/sfs/1962:700")
}
</pre>
<p>Ganska enkelt, men i praktiken väldigt långsamt, gissningsvis för att<br />
SPARQL-motorn är tvungen att konvertera varenda URI (en datatyp) till<br />
en sträng (en helt annan datatyp), för att sen se om den möjligtvis<br />
börjar på ett visst sätt. Det är också fel, eftersom frågan gör ett<br />
antagande om att<br />
<code>&lt;http://rinfo.lagrummet.se/publ/sfs/1962:700#K1P2S2&gt;</code><br />
är en resurs som är en del av resursen<br />
<code>&lt;http://rinfo.lagrummet.se/publ/sfs/1962:700&gt;</code>, utan<br />
någon täckning för det antagandet.</p>
<p>Det korrekta sättet är att modellera just detta<br />
&#8221;är-del-av&#8221;-förhållande. I RDF-databasen finns en mängd triples av<br />
följande typ:</p>
<pre>
&lt;http://rinfo.lagrummet.se/publ/sfs/1962:700#K1P2S2&gt; a rinfo:Stycke;
     dct:isPartOf &lt;http://rinfo.lagrummet.se/publ/sfs/1962:700#K1P2&gt;.

&lt;http://rinfo.lagrummet.se/publ/sfs/1962:700#K1P2&gt; a rinfo:Paragraf;
     dct:isPartOf &lt;http://rinfo.lagrummet.se/publ/sfs/1962:700#K1&gt;.

&lt;http://rinfo.lagrummet.se/publ/sfs/1962:700#K1&gt; a rinfo:Kapitel;
     dct:isPartOf &lt;http://rinfo.lagrummet.se/publ/sfs/1962:700&gt;.
</pre>
<p>Med det kan vi formulera en fråga som ger oss information om alla<br />
rättsfall för en viss lagtext. Vi vill ha alla rättsfall som antingen<br />
har en <code>rinfo:lagrum</code>-relation med lagtextens URI<br />
<i>eller</i> en <code>rinfo:lagrum</code>-relation med en URI som har<br />
en <code>dct:isPartOf</code>-relation med lagtextens URI <i>eller</i><br />
en <code>rinfo:lagrum</code>-relation med en URI som har en<br />
<code>dct:isPartOf</code>-relation med en URI som har en<br />
<code>dct:isPartOf</code>-relation med lagtextens URI<br />
<i>eller&#8230;</i></p>
<p>Ok, det blir inte så vackert det här heller, men det blir rätt och<br />
snabbt. Den SPARQL-fråga jag har just nu blir såhär:</p>
<pre>
PREFIX dct:&lt;http://purl.org/dc/terms/&gt;
PREFIX rinfo:&lt;http://rinfo.lagrummet.se/taxo/2007/09/rinfo/pub#&gt;

SELECT ?uri ?id ?desc ?lagrum
WHERE {
   { ?uri rinfo:lagrum &lt;http://rinfo.lagrummet.se/publ/sfs/1962:700&gt; .
     ?uri dct:identifier ?id .
     ?uri dct:description ?desc }
   UNION { ?uri rinfo:lagrum ?lagrum .
           ?lagrum dct:isPartOf &lt;http://rinfo.lagrummet.se/publ/sfs/1962:700&gt; .
           ?uri dct:identifier ?id .
           ?uri dct:description ?desc }
   UNION { ?uri rinfo:lagrum ?lagrum .
           ?lagrum dct:isPartOf ?b .
           ?b dct:isPartOf &lt;http://rinfo.lagrummet.se/publ/sfs/1962:700&gt; .
           ?uri dct:identifier ?id .
           ?uri dct:description ?desc }
   UNION { ?uri rinfo:lagrum ?lagrum .
           ?lagrum dct:isPartOf ?b .
           ?b dct:isPartOf ?c .
           ?c dct:isPartOf &lt;http://rinfo.lagrummet.se/publ/sfs/1962:700&gt; .
           ?uri dct:identifier ?id .
           ?uri dct:description ?desc }
   UNION { ?uri rinfo:lagrum ?lagrum .
           ?lagrum dct:isPartOf ?b .
           ?b dct:isPartOf ?c .
           ?c dct:isPartOf ?d .
           ?d dct:isPartOf &lt;http://rinfo.lagrummet.se/publ/sfs/1962:700&gt; .
           ?uri dct:identifier ?id .
           ?uri dct:description ?desc }
   UNION { ?uri rinfo:lagrum ?lagrum .
           ?lagrum dct:isPartOf ?b .
           ?b dct:isPartOf ?c .
           ?c dct:isPartOf ?d .
           ?d dct:isPartOf ?e .
           ?e dct:isPartOf &lt;http://rinfo.lagrummet.se/publ/sfs/1962:700&gt; .
           ?uri dct:identifier ?id .
           ?uri dct:description ?desc }
}
</pre>
<p>Förslag på hur man kan förenkla det hela mottages tacksamt&#8230;</p>
<p>Det framgår kanske att det här inte är en arkitektur för alla<br />
problem. Men om man har data som kan modelleras med RDF (och när man<br />
jobbat med RDF ett tag så tycker man att i stort sett allt gör det) så<br />
tror jag att åtminstone kombinationen triplestore + SPARQL kan vara<br />
ett intressant alternativ till RDBMS + SQL.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tomtebo.org/2009/06/30/en-arkitektur-for-webutveckling-med-semantic-web-koncept/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tre antipatterns i webinteraktionsdesign</title>
		<link>http://blog.tomtebo.org/2009/03/22/tre-antipatterns-i-webinteraktionsdesign/</link>
		<comments>http://blog.tomtebo.org/2009/03/22/tre-antipatterns-i-webinteraktionsdesign/#comments</comments>
		<pubDate>Sun, 22 Mar 2009 15:54:01 +0000</pubDate>
		<dc:creator>staffan</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[för allmän kännedom]]></category>
		<category><![CDATA[webutveckling]]></category>

		<guid isPermaLink="false">http://blog.tomtebo.org/?p=643</guid>
		<description><![CDATA[Ett antipattern är ett sätt att göra något på, som vid första anblicken verkar vara en vettig approach, men som egentligen gör saker värre. Inom webbutvecklingsvärlden finns det en rik flora av dessa. Här är några exempel: Pagers som visar &#8230; <a href="http://blog.tomtebo.org/2009/03/22/tre-antipatterns-i-webinteraktionsdesign/">Läs mer <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ett <a href="http://c2.com/cgi/wiki?AntiPattern">antipattern</a> är ett sätt att göra något på, som vid första anblicken verkar vara en vettig approach, men som egentligen gör saker värre. Inom webbutvecklingsvärlden finns det en rik flora av dessa. Här är några exempel:</p>
<dl>
<dt>Pagers som visar ett löjligt litet antal saker åt gången</dt>
<dd>En pager är alltså den gränssnittskonstruktion som visar ett visst antal saker åt gången &#8211; exempelvis sökträffar eller  bloggkommentarer. Eftersom det är mycket bökigare att konstruera ett pagingsystem än att helt enkelt visa alla saker på en gång vill folk förstås använda det, och sätter därför gränsen för antal saker som ska visas alldeles för lågt. Bredband är billigt, och moderna webbläsare klarar numera sidor över 15 kb. Minst 100 saker åt gången, tack.</dd>
<dt>För korta sessionstimeouts</dt>
<dd>Alla moderna webbprogrammeringsramverk har någon typ av sessionshanteringssystem, så att programeraren ska kunna spara ner en massa information om vad en viss användare gör i steg 1, så att man kan läsa upp det igen i steg 2. Att spara denna information tar förstås lite minne i webbserverprocessen, och har man många användare vill man förstås se till att rensa bort sådant som aldrig kommer användas, eftersom användaren lämnat webbplatsen och inte kommer göra något steg 2-request. Så alla webbprogrammeringsramverk har en sessionstimeout &#8211; om inte användaren begär en ny sida på x minuter rensas den data som associerats med användaren. Och eftersom minne var dyrt under förra årtusendet är denna timeout vanligtvis löjligt lågt satt. Vilket får till effekt att den som skickar in ett långt och genomarbetat webbforuminlägg upptäcker att sessionen timat ut, och att de senaste 21 minuternas arbete gått upp i rök. Minne är billigt, men användares tid är det inte. Sätt upp sessionstimeouten till minst 24 timmar, tack.</dd>
<dt>Reset-knappar på formulär</dt>
<dd>HTML-standardens avsnitt om hur man gör formulär innehåller ett antal olika typer av formulärelement &#8211; textfält, radioknappar, selectmenyer, submit-knappar samt, av någon outgrundlig anledning, en knapp som tar bort allt man mödosamt skrivit in i formuläret, och återställer det till sitt ursprungstillstånd. Risken för att råka klicka på denna knapp är visserligen inte stor, men det lär ändå inträffa mångdubbelt fler gånger än att någon faktiskt har nytta av det. Det <a href="http://www.w3.org/TR/html401/interact/forms.html#h-17.1">första exemplet i standarden</a> använder denna vansinniga funktion, vilket får till effekt att folk som inte tänker efter tror att det är en bra idé att ge användaren tillgång till något som bara kan användas till att skjuta sig i foten. Sluta med det, tack.</dd>
</dl>
]]></content:encoded>
			<wfw:commentRss>http://blog.tomtebo.org/2009/03/22/tre-antipatterns-i-webinteraktionsdesign/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Måste det vara så komplicerat?</title>
		<link>http://blog.tomtebo.org/2009/01/30/maste-det-vara-sa-komplicerat/</link>
		<comments>http://blog.tomtebo.org/2009/01/30/maste-det-vara-sa-komplicerat/#comments</comments>
		<pubDate>Fri, 30 Jan 2009 21:10:05 +0000</pubDate>
		<dc:creator>staffan</dc:creator>
				<category><![CDATA[misc]]></category>
		<category><![CDATA[24hbc]]></category>
		<category><![CDATA[less is more]]></category>
		<category><![CDATA[utmaningar]]></category>
		<category><![CDATA[webutveckling]]></category>
		<category><![CDATA[world of goo]]></category>

		<guid isPermaLink="false">http://blog.tomtebo.org/?p=554</guid>
		<description><![CDATA[Förra helgen samlades ett gäng svenska webbutvecklare för att se om de i små team kunde skapa ett gäng kompletta webbtjänster, från start till mål, på 24 timmar. Det verkar som det gick riktigt bra. Den här helgen hålls istället &#8230; <a href="http://blog.tomtebo.org/2009/01/30/maste-det-vara-sa-komplicerat/">Läs mer <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Förra helgen samlades ett gäng svenska webbutvecklare för att se om de i små team kunde skapa <a href="http://www.24hourbusinesscamp.com/2009/01/vote-for-your-favourite-start-up.html">ett gäng kompletta webbtjänster</a>, från start till mål, på 24 timmar. <a href="http://internetworld.idg.se/2.1006/1.207568/entreprenorerna-har-gatt-i-mal">Det verkar som det gick riktigt bra</a>.</p>
<p>Den här helgen hålls istället <a href="http://globalgamejam.org/">Global Game Jam</a>, ett globalt event för spelutvecklare som <a href="http://globalgamejam.org/Locations">hålls på massor av fysiska ställen</a>, där enskilda spelutvecklare försöker skapa ett gäng kompletta spel, från start till mål &#8212; vilket kan låta mer komplicerat än webbtjänster, men de får å andra sidan 48 timmar på sig.</p>
<p>Ett liknande initiativ, med något längre tidsram är <a href="http://www.nanowrimo.org/eng/whatisnano">NaNoWriMo</a> &#8212; ett årligen återkommande projekt där målsättningen är att skriva en roman (50 000 ord) på en månad.</p>
<p>Jag tror det här är en riktigt bra arbetsform för att förnya sin yrkesroll. Om man är van vid projekt som tar tusentals, kanske hundratusentals, mantimmar, och sen försöker få något gjort på fyrtio timmar måste man ifrågasätta de flesta delar av sitt arbetssätt och rensa bort all onödig komplexitet för att hitta den avskalade, essentiella kärnan i vad det nu är man gör. Jag inbillar mig att det ger mest för den som redan har erfarenhet &#8212; om jag satte mig ner och försökte skriva en uppsats om något juridiskt på 24 timmar skulle jag varken jag eller mina läsare bli särskilt mycket klokare.</p>
<p>Global Game Jam inleddes med en sevärd keynote presentation av Kyle Gabler:</p>
<p><object width="480" height="295"><param name="movie" value="http://www.youtube.com/v/aW6vgW8wc6c&#038;hl=sv&#038;fs=1&#038;start=99"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/aW6vgW8wc6c&#038;hl=sv&#038;fs=1&#038;start=99" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"></embed></object></p>
<p>Kyle utgör hälften av <a href="http://2dboy.com/">2D Boy</a>, som skapade förra årets stora indiespelsucce, <a href="http://2dboy.com/games.php">World of Goo</a>. Jag är ingen inbiten datorspelare, men efter att ha kört demon var jag tvungen att beställa spelet (som är oförskämt billigt). Sen spelade jag igenom det hela ända till slutet, vilket jag bara gjort med en handfull spel tidigare i mitt liv. Så bra är det.</p>
<p>I keynotepresentationen visas även <a href="http://www.crayonphysics.com/">Crayon Physics</a>, som jag testade en demo av i förra helgen, och som jag just nu funderar på att köpa, eftersom det dels är supergulligt, dels är det första spel jag sett som verkligen är gjort för att spelas på en Tablet PC.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tomtebo.org/2009/01/30/maste-det-vara-sa-komplicerat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nostalgia</title>
		<link>http://blog.tomtebo.org/2004/11/25/nostalgia/</link>
		<comments>http://blog.tomtebo.org/2004/11/25/nostalgia/#comments</comments>
		<pubDate>Thu, 25 Nov 2004 13:26:00 +0000</pubDate>
		<dc:creator>staffan</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[nostalgi]]></category>
		<category><![CDATA[webutveckling]]></category>

		<guid isPermaLink="false">http://newblog.tomtebo.org/programming/nostalgia.html</guid>
		<description><![CDATA[By accident, I ended up at the original Netscape cookie specification. It&#8217;s now over eight years since I read that one for the first time. Notice the 1996-style formatting of the headers: &#60;h2&#62; &#60;font size="+3"&#62;P&#60;/font&#62;ERSISTENT &#60;font size="+3"&#62;C&#60;/font&#62;LIENT &#60;font size="+3"&#62;S&#60;/font&#62;TATE&#60;br&#62; &#60;font &#8230; <a href="http://blog.tomtebo.org/2004/11/25/nostalgia/">Läs mer <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p> By accident, I ended up at the original <a href="http://wp.netscape.com/newsref/std/cookie_spec.html">Netscape<br />
cookie specification</a>. It&#8217;s now over eight years since I read that<br />
one for the first time. Notice the 1996-style formatting of the headers:</p>
<pre>
&lt;h2&gt;
&lt;font size="+3"&gt;P&lt;/font&gt;ERSISTENT
&lt;font size="+3"&gt;C&lt;/font&gt;LIENT
&lt;font size="+3"&gt;S&lt;/font&gt;TATE&lt;br&gt;
&lt;font size="+3"&gt;HTTP C&lt;/font&gt;OOKIES
&lt;/h2&gt;
</pre>
<p> Other classic web tech specs: <a href="http://hoohoo.ncsa.uiuc.edu/cgi/overview.html">The Common<br />
Gateway Interface</a>, <a href="">Hypertext Markup Language &#8211; 2.0</a>,<br />
<a href="http://ftp.ics.uci.edu/pub/ietf/http/rfc1945.html">Hypertext<br />
Transfer Protocol &#8212; HTTP/1.0</a>. I&#8217;ve referenced those a <b>lot</b> of times,<br />
back in the day.  </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tomtebo.org/2004/11/25/nostalgia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Smalltalk and Seaside for web applications</title>
		<link>http://blog.tomtebo.org/2004/05/11/smalltalk_and_seaside_for_web_applications/</link>
		<comments>http://blog.tomtebo.org/2004/05/11/smalltalk_and_seaside_for_web_applications/#comments</comments>
		<pubDate>Tue, 11 May 2004 22:22:00 +0000</pubDate>
		<dc:creator>staffan</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[abstraktioner]]></category>
		<category><![CDATA[seaside]]></category>
		<category><![CDATA[smalltalk]]></category>
		<category><![CDATA[webutveckling]]></category>

		<guid isPermaLink="false">http://newblog.tomtebo.org/programming/smalltalk_and_seaside_for_web_applications.html</guid>
		<description><![CDATA[So, after debating at length with G&#246;ran about pros and cons of Smalltalk as a platform for real world development, I came to the conclusion that Smalltalk was worth looking into in greater detail, and since I&#8217;ve been wanting to &#8230; <a href="http://blog.tomtebo.org/2004/05/11/smalltalk_and_seaside_for_web_applications/">Läs mer <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>So, after <a href="http://blog.tomtebo.org/PermaLink.aspx?guid=ee2da3fc-1122-4f93-b947-7576f6463856">debating at length</a> with <a href="http://people.squeakfoundation.org/person/gokr/">G&#246;ran</a> about pros and cons of Smalltalk as a platform for real world development, I came to the conclusion that Smalltalk was worth looking into in greater detail, and since I&#8217;ve been wanting to write my own blog/wiki hybrid, it was suggested that I check out <a href="http://beta4.com/seaside2/">Seaside</a>, a Smalltalk-based framework for web development comparable to <a href="http://asp.net/">ASP.NET</a>&nbsp;or <a href="http://java.sun.com/j2ee/javaserverfaces/index.jsp">Java Server Faces</a>. </p>
<p>At first look, Seaside doesn&#8217;t look much different than ASP.NET. It&#8217;s all about modelling your application&#8217;s interface in terms of objects and methods (&#8221;messages&#8221; for you Smalltalkers). Pages are built up of components, inheriting from System.Web.UI.Control (ASP.Net) or WAComponent (Seaside) that can include other components. When the user does things with any component, it results in events being fired (ASP.NET) or messages being sent (Seaside). Both frameworks seem to strive to abstract away the request/response nature of the web, and to allow the programmer to use a more event-driven approach to developement. In addition, seaside uses at it uses <a href="http://www.ps.uni-sb.de/~duchier/python/continuations.html">continuations</a> to make it possible to, for example, ask the user something (similar to how a modal dialog would do it in a normal GUI enviroment), and then do something with the provided answer &#8212; all within the context of a<br />method.</p>
<p>The main difference is that programming in the Seaside framework results in a lot less housekeeping code. The object is really&nbsp;a ordinary object, except that it&#8217;s executed through the web.&nbsp;The&nbsp;difference&nbsp;didn&#8217;t really dawn on me before I tried to recreate WACounter as a ASP.Net Server component &#8212; it did involve a whole lot of code to handle events, manage viewstate and so on. </p>
<p>From a security perspective, Seaside has problems with the fact that the session id is present in the URL, and it seems harder to make applications <a href="http://internet.conveyor.com/RESTwiki/moin.cgi/FrontPage">RESTful</a>, but apart from those issues, Seaside is definitly a framework worth looking closer at. From my own perspective, I hope that the ASP.NET developers do <img src='http://blog.tomtebo.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Unfortunately, things elsewhere has been chaotic (and not in a good way), so I have not had any further time for experimentation with Seaside. As always, further progress will be reported here.</p>
<p><strong>Update</strong>: <a href="http://www.ds9a.nl/webcoding.html">This</a> is a much better explaination of what continuation-based, or synchronous, web programming is.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tomtebo.org/2004/05/11/smalltalk_and_seaside_for_web_applications/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

