<?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>Blogg - Athega AB &#187; Johan Beronius</title>
	<atom:link href="http://blogg.athega.se/author/johan/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogg.athega.se</link>
	<description>...</description>
	<lastBuildDate>Thu, 18 Nov 2010 22:17:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>JavaScriptprestanda 2010</title>
		<link>http://blogg.athega.se/2010/09/21/javascriptprestanda-2010/</link>
		<comments>http://blogg.athega.se/2010/09/21/javascriptprestanda-2010/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 15:14:40 +0000</pubDate>
		<dc:creator>Johan Beronius</dc:creator>
				<category><![CDATA[Kod]]></category>
		<category><![CDATA[Prestanda]]></category>
		<category><![CDATA[Programmeringsspråk]]></category>
		<category><![CDATA[Webbutveckling]]></category>
		<category><![CDATA[Benchmark]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://blogg.athega.se/?p=754</guid>
		<description><![CDATA[Förra hösten skrev jag ett program som löser Sudokus och körde det som ett enkelt benchmark-test av javascriptprestandan i de olika webbläsarna. Nu har jag uppdaterat testresultatet för senaste versionen av de vanligaste webbläsarna och man kan lugnt konstatera att det hänt en hel del på javascriptfronten det senaste året. Testet jag körde är samma [...]]]></description>
			<content:encoded><![CDATA[<p>Förra hösten skrev jag ett <a href="http://athega.se/sudoku/" target="_blank">program som löser Sudokus</a> och körde det som ett enkelt <a href="http://blogg.athega.se/2009/10/01/javascriptprestanda/">benchmark-test av javascriptprestandan</a> i de olika webbläsarna.</p>
<p>Nu har jag uppdaterat testresultatet för senaste versionen av de vanligaste webbläsarna och man kan lugnt konstatera att det hänt en hel del på javascriptfronten det senaste året.<br />
Testet jag körde är samma <a href="http://athega.se/sudoku/#CzCJYmBdUXEZADK9UgmAjgFszJIhc" target="_blank">Sudoku-kombination</a> som förra gången. Tiden det tar att räkna fram alla möjliga lösningar på just min dator jämförs med tiden det tog i den version av respektive webbläsare som var aktuell för ett år sedan. </p>
<p>Internet Explorer står för den överlägset största förbättringen och är verkligen med i matchen nu. Opera har gjort ett rejält ryck och kapat sin tid till en bråkdel. Firefox har förbättrat sin tid lite men har ändå helt plötsligt hamnat efter de andra. Chrome och Safari har putsat mer marginellt på sina redan låga tider.</p>
<p><a href="http://athega.se/sudoku/#CzCJYmBdUXEZADK9UgmAjgFszJIhc" target="_blank"><img class="aligncenter size-full wp-image-755" alt="Tid för att lösa ett Sudoku med JavaScript i olika webbläsare" src="http://blogg.athega.se/wp-content/uploads/2010/09/jsgraph2010.png" width="680" height="463" /></a></p>
<p><em>Uppdatering:</em> Grafen ovan är kompletterad med värden för senaste betan av Firefox 4, beta 6, där man kan se att hastigheten tagit ett litet steg tillbaka. Däremot verkar det vara bra saker på gång eftersom den senaste &#8221;nightly&#8221;, beta 7 pre, visar att de klippt över hälften på tiden och hamnar på par med Chrome.</p>
<p><a href="http://athega.se/sudoku/#CzCJYmBdUXEZADK9UgmAjgFszJIhc" target="_blank"><img class="aligncenter size-full wp-image-755" alt="Tid för att lösa ett Sudoku med JavaScript i olika webbläsare på OSX" src="http://blogg.athega.se/wp-content/uploads/2010/09/jsgraph-osx.png" width="600" height="463" /></a></p>
<p>På Mac OSX ser det ut så här. Där skiljer ingenting mellan Firefox 3.6 och Firefox 4.0 beta 6. Men &#8221;nightly&#8221; beta 7 pre knappar in på sina fortfarande snabbare konkurrenter. Framförallt Chrome 6 imponerar stort med bara en halv sekund.</p>
<p><a href="http://athega.se/sudoku/#CzCJYmBdUXEZADK9UgmAjgFszJIhc" target="_blank"><img class="aligncenter size-full wp-image-755" alt="Tid för att lösa ett Sudoku med JavaScript i olika webbläsare på olika mobiltelefoner" src="http://blogg.athega.se/wp-content/uploads/2010/09/jsgraph-mobile.png" width="500" height="463" /></a></p>
<p>På mobiltelefoner går det förstås inte lika snabbt. Här blir det inte heller så mycket en jämförelse mellan olika webbläsare utan mellan olika mobilplattformar och dess hårdvara. Det kan ändå ge en liten uppfattning vad man har för javascriptprestanda att tillgå när man utvecklar webbapplikationer för en mobil jämfört med en fullstor webbläsare.<br />
Om du klickar på grafen och kör detta test på din mobil, skriv gärna resultatet som en kommentar.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogg.athega.se/2010/09/21/javascriptprestanda-2010/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>JSON och MooTools för Web Workers</title>
		<link>http://blogg.athega.se/2009/10/06/json-och-mootools-for-web-workers/</link>
		<comments>http://blogg.athega.se/2009/10/06/json-och-mootools-for-web-workers/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 15:48:51 +0000</pubDate>
		<dc:creator>Johan Beronius</dc:creator>
				<category><![CDATA[Kod]]></category>
		<category><![CDATA[Programmeringsspråk]]></category>
		<category><![CDATA[Webbutveckling]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[Web Workers]]></category>

		<guid isPermaLink="false">http://blogg.athega.se/?p=490</guid>
		<description><![CDATA[MooTools är en trevlig verktygslåda som främst är tänkt för att skriva JavaScript-kod som manipulerar element på en webbsida och skapar animeringar och grafiska effekter. Därför är den starkt knuten till objekten window och document som finns i det globala kontextet när JavaScript-kod körs på en vanlig webbsida. MooTools i Worker-kontext Men MooTools har även [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mootools.net/" target="_blank">MooTools</a> är en trevlig verktygslåda som främst är tänkt för att skriva JavaScript-kod som manipulerar element på en webbsida och skapar animeringar och grafiska effekter. Därför är den starkt knuten till objekten <code><b>window</b></code> och <code><b>document</b></code> som finns i det globala kontextet när JavaScript-kod körs på en vanlig webbsida.</p>
<h4>MooTools i Worker-kontext</h4>
<p>Men MooTools har även hjälpmedel för att skriva objektorienterad kod samt en del utökningar och förbättringar för språket som sådant. Om man vill dra nytta av detta för kod som körs i ett annat sammanhang där <code><b>window</b></code> och <code><b>document</b></code> inte finns tillgängliga, t.ex. i en Web Worker tråd, vad gör man för att få mootools att fungera då?<br />
En variant är att skapa mock-up objekt för att maskera det faktum att objekten inte finns, tomma skelett som bara innehåller det nödvändigaste för att mootools skall kunna laddas utan fel. Självklart ger inte detta tillgång till någon funktionalitet som är beroende av dessa objekt men övriga funktioner finns på plats.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">// If we're in a worker we need to masquerade the global context and load mootools</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>self.<span style="color: #660066;">importScripts</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	document <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
		prototype<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
		createElement<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
		getElementsByTagName<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #000066; font-weight: bold;">return</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
	window <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
		document<span style="color: #339933;">:</span> document<span style="color: #339933;">,</span>
		Document<span style="color: #339933;">:</span> document<span style="color: #339933;">,</span>
		Element<span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span> prototype<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
		Window<span style="color: #339933;">:</span>  <span style="color: #009900;">&#123;</span> prototype<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
		addEventListener<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
		attachEvent<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
	<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
	self.<span style="color: #660066;">importScripts</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'mootools.js'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h4>Skicka objekt till Workers</h4>
<p>Eftersom Web Workers är helt isolerade från webbsidan, dvs. inte har tillgång till något delat minne, går det inte att skicka objekt till dem hur som helst. Enda sättet att kommunicera är genom att posta meddelanden som bara kan överföra strängar. Självklart kan man då serialisera objekten till JSON och skicka med dem. </p>
<h5>Varför heter det JSON?</h5>
<p>Vad jag då skulle vilja reflektera över är varför det kallas <i>JavaScript <b>Object</b> Notation</i>. Ett objekt är ju en sak som vet vad den är och kan göra saker själv, dvs. en datastruktur med tillhörande kod som beskriver hur den skall uppföra sig.<br />
När man serialiserar ett objekt till en JSON-sträng försvinner alla kodreferenser, dvs. objektets metoder, kvar har man bara datastrukturen. Därför kan det tyckas vara mer korrekt att det borde kallas <i>JavaScript <b>Data</b> Notation</i></p>
<h5>Välsigna datastrukturer</h5>
<p>Vad gör vi då för att kunna använda datastrukturer som blivit deserialiserade från JSON som fullfjädrade objekt? Vi kan välsigna dem tillbaka till sin klasstillhörighet genom att koppla ihop datastrukturen med metoderna från klassen igen. Därför skapar vi en en konstruktor som heter <code><b>bless</b></code> i basklassen för alla klasser <code><b>Class</b></code> som tar en datastruktur och utökar en ny instans av klassen med denna.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">// Contructor that returns a new instance of this class</span>
<span style="color: #006600; font-style: italic;">// extended with all properties of the given data structure</span>
<span style="color: #003366; font-weight: bold;">Class</span>.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">bless</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000066; font-weight: bold;">return</span> $extend<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">new</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> data<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Då kan vi sedan göra exempelvis så här:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> MyClass <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> <span style="color: #003366; font-weight: bold;">Class</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
	myData<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Hello, world!&quot;</span><span style="color: #339933;">,</span>
	doStuff<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">myData</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> myObject <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> MyClass<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> string <span style="color: #339933;">=</span> JSON.<span style="color: #660066;">encode</span><span style="color: #009900;">&#40;</span>myObject<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> data <span style="color: #339933;">=</span> JSON.<span style="color: #660066;">decode</span><span style="color: #009900;">&#40;</span>string<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">// data.doStuff();  &lt;--- Not possible here</span>
<span style="color: #003366; font-weight: bold;">var</span> newObject <span style="color: #339933;">=</span> MyClass.<span style="color: #660066;">bless</span><span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
newObject.<span style="color: #660066;">doStuff</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>På så vis kan man återskapa objekt som är identiska med de som skickades trots att de har blivit omvandlade till och från en ren textsträng på vägen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogg.athega.se/2009/10/06/json-och-mootools-for-web-workers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScriptprestanda</title>
		<link>http://blogg.athega.se/2009/10/01/javascriptprestanda/</link>
		<comments>http://blogg.athega.se/2009/10/01/javascriptprestanda/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 17:26:03 +0000</pubDate>
		<dc:creator>Johan Beronius</dc:creator>
				<category><![CDATA[Kod]]></category>
		<category><![CDATA[Prestanda]]></category>
		<category><![CDATA[Programmeringsspråk]]></category>
		<category><![CDATA[Webbutveckling]]></category>
		<category><![CDATA[Benchmark]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://blogg.athega.se/?p=450</guid>
		<description><![CDATA[För moderna webbapplikationer där en större del av koden körs i webbläsaren blir det allt viktigare med bra prestanda för exekvering av JavaScript. För att kontrollera text i formulärfält och liknande simpla uppgifter är inte hastigheten så avgörande, men vad händer om man försöker köra tyngre beräkningar? För att göra ett benchmark som testar prestandan [...]]]></description>
			<content:encoded><![CDATA[<p>För moderna webbapplikationer där en större del av koden körs i webbläsaren blir det allt viktigare med bra prestanda för exekvering av JavaScript.<br />
För att kontrollera text i formulärfält och liknande simpla uppgifter är inte hastigheten så avgörande, men vad händer om man försöker köra tyngre beräkningar? För att göra ett benchmark som testar prestandan i de vanligaste webbläsarna har jag skrivit ett <a href="http://athega.se/sudoku/" target="_blank">program som löser Sudokus</a>.</p>
<p><a href="http://athega.se/sudoku/" target="_blank"><img class="aligncenter size-full wp-image-452" src="http://blogg.athega.se/wp-content/uploads/2009/10/sudoku1.png" alt="Ett program som löser Sudoku med JavaScript" width="190" height="184" /></a></p>
<p>För att jämföra de olika webbläsarna har jag kört <a href="http://athega.se/sudoku/#CzCJYmBdUXEZADK9UgmAjgFszJIhc" target="_blank">denna Sudoku-kombination</a> och jämfört tiden det tar att räkna fram alla möjliga lösningar på just min dator. Resultatet är ganska häpnadsväckande, som ni kan se i grafen nedan så utklassar Safari Internet Explorer med nästan en faktor på tio-till-ett. Chrome hamnar inte långt efter och både Firefox och Opera placerar sig hyffsat bra. Och då används inte ens Web Worker-trådar som har visat sig ha potential att dubbla prestandan och ytterligare öka försprånget för alla andra webbläsare framför Internet Explorer.</p>
<p><a href="http://athega.se/sudoku/#CzCJYmBdUXEZADK9UgmAjgFszJIhc" target="_blank"><img class="size-full wp-image-453" src="http://blogg.athega.se/wp-content/uploads/2009/10/jsgraph.png" alt="Tid för att lösa ett Sudoku med JavaScript i olika webbläsare" width="600" height="463" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogg.athega.se/2009/10/01/javascriptprestanda/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Athegas öppna källkod används av Valmyndigheten</title>
		<link>http://blogg.athega.se/2009/04/08/athegas-oppna-kallkod-anvands-av-valmyndigheten/</link>
		<comments>http://blogg.athega.se/2009/04/08/athegas-oppna-kallkod-anvands-av-valmyndigheten/#comments</comments>
		<pubDate>Wed, 08 Apr 2009 15:14:43 +0000</pubDate>
		<dc:creator>Johan Beronius</dc:creator>
				<category><![CDATA[Kod]]></category>
		<category><![CDATA[Webbutveckling]]></category>
		<category><![CDATA[CPAN]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Positionering]]></category>

		<guid isPermaLink="false">http://blogg.athega.se/?p=127</guid>
		<description><![CDATA[I mitt förra inlägg berättade jag om en Perl-modul som vi släppt som öppen källkod. Det visade sig att denna kod ganska snabbt skulle komma till nytta. Häromdagen fick jag ett e-postmeddelande från Valmyndigheten där de berättade att de använder modulen och att den passar deras behov perfekt. De använder den för att konvertera positionen [...]]]></description>
			<content:encoded><![CDATA[<p>I mitt <a href="http://blogg.athega.se/2009/03/25/athega-bidrar-till-oppen-kallkod/">förra inlägg</a> berättade jag om en Perl-modul som vi släppt som öppen källkod. Det visade sig att denna kod ganska snabbt skulle komma till nytta. Häromdagen fick jag ett e-postmeddelande från <a href="http://www.val.se/" target="_blank">Valmyndigheten </a>där de berättade att de använder modulen och att den passar deras behov perfekt. De använder den för att konvertera positionen för alla vallokaler från RT90 till SWEREF99 för presentation på en karta på webben.</p>
<p>Modulen hittar ni här: <a href="http://search.cpan.org/~jobero/Geo-SweGrid-1.0/SweGrid.pm" target="_blank">Geo::SweGrid</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogg.athega.se/2009/04/08/athegas-oppna-kallkod-anvands-av-valmyndigheten/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Athega bidrar till öppen källkod</title>
		<link>http://blogg.athega.se/2009/03/25/athega-bidrar-till-oppen-kallkod/</link>
		<comments>http://blogg.athega.se/2009/03/25/athega-bidrar-till-oppen-kallkod/#comments</comments>
		<pubDate>Wed, 25 Mar 2009 15:35:01 +0000</pubDate>
		<dc:creator>Johan Beronius</dc:creator>
				<category><![CDATA[Kod]]></category>
		<category><![CDATA[Webbutveckling]]></category>
		<category><![CDATA[Öppen källkod]]></category>
		<category><![CDATA[CPAN]]></category>
		<category><![CDATA[GPS]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Positionering]]></category>

		<guid isPermaLink="false">http://blogg.athega.se/?p=113</guid>
		<description><![CDATA[Athega har sedan länge, ända sedan starten 1997, arbetat mycket med programmeringsspråket Perl. Vi använder oss i mycket stor utsträckning av öppna och fria mjukvaror och verktyg för de system vi bygger. Därför är även en stor del av den kod vi själva producerar befriad från licenskostnader och betraktas som &#8221;open source&#8221; även om den [...]]]></description>
			<content:encoded><![CDATA[<p>Athega har sedan länge, ända sedan starten 1997, arbetat mycket med programmeringsspråket <a href="http://perl.org/" target="_blank">Perl</a>. Vi använder oss i mycket stor utsträckning av öppna och fria mjukvaror och verktyg för de system vi bygger. Därför är även en stor del av den kod vi själva producerar befriad från licenskostnader och betraktas som &#8221;<a href="http://sv.wikipedia.org/wiki/Open_source" target="_blank">open source</a>&#8221; även om den kanske i vissa fall inte finns publikt tillgänglig på nätet.</p>
<p>Saker som går att återanvända och andra kan ha nytta av delar vi gärna med oss av. Ett exempel på detta är Perl-modulen <a href="http://search.cpan.org/~jobero/Geo-SweGrid-1.0/SweGrid.pm" target="_blank"><tt>Geo::SweGrid</tt></a> som används för att konvertera geografiska koordinater mellan det system som används globalt och det som används på vissa svenska kartor.</p>
<p>Det distribuerade arkivet för Perl-moduler heter <a href="http://cpan.org/" target="_blank">CPAN</a>, dit kan alla bidra med sin kod. När en modul väl finns i arkivet kan den lätt installeras på vilken dator som helst så här:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>user<span style="color: #000000; font-weight: bold;">@</span>host ~<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> cpan
&nbsp;
cpan shell <span style="color: #660033;">--</span> CPAN exploration and modules installation <span style="color: #7a0874; font-weight: bold;">&#40;</span>v1.9304<span style="color: #7a0874; font-weight: bold;">&#41;</span>
ReadLine support enabled
&nbsp;
cpan<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #c20cb9; font-weight: bold;">install</span> Geo::SweGrid</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://blogg.athega.se/2009/03/25/athega-bidrar-till-oppen-kallkod/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bloggportalen visar relaterade nyheter från Sesam</title>
		<link>http://blogg.athega.se/2009/03/14/bloggportalen-visar-relaterade-nyheter-fran-sesam/</link>
		<comments>http://blogg.athega.se/2009/03/14/bloggportalen-visar-relaterade-nyheter-fran-sesam/#comments</comments>
		<pubDate>Sat, 14 Mar 2009 11:25:23 +0000</pubDate>
		<dc:creator>Johan Beronius</dc:creator>
				<category><![CDATA[Sociala nätverk]]></category>
		<category><![CDATA[Webbutveckling]]></category>

		<guid isPermaLink="false">http://blogg.athega.se/?p=110</guid>
		<description><![CDATA[Bloggportalen, som byggts av Athega, har en ny funktion för att visa relaterade nyheter från Sesam när man tittar på en av de mest diskterade nyheterna i bloggvärlden. Exempel på detta kan ses här. Funktionen är liksom Bloggportalen i övrigt byggd i Java med Struts som applikationsramverk och Hibernate som ORM / Object-relational mapping och [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.bloggportalen.se/">Bloggportalen</a>, som <a href="http://www.athega.se/14/sv/Aftonbladet">byggts av Athega</a>, har en ny funktion för att visa relaterade nyheter från <a href="http://sesam.se/">Sesam</a> när man tittar på en av de mest diskterade nyheterna i bloggvärlden. Exempel på detta kan ses <a href="http://www.bloggportalen.se/BlogPortal/view/MostLinkedMediaEntries?id=217223">här</a>.</p>
<p>Funktionen är liksom Bloggportalen i övrigt byggd i <a href="http://java.sun.com/" target="_blank">Java</a> med <a href="http://struts.apache.org/" target="_blank">Struts</a> som applikationsramverk och <a href="http://www.hibernate.org/" target="_blank">Hibernate</a> som <a href="http://en.wikipedia.org/wiki/Object-relational_mapping" target="_blank">ORM / Object-relational mapping</a> och persistenslager. Data hämtas som XML över nätet från en webbtjänst hos Sesam. Sedan används <a href="http://www.w3.org/TR/xpath" target="_blank">XPath</a> för att välja ut relevant data att presentera.</p>
<p>Detta sätt att presentera information och funktionalitet från flera olika källor på en och samma webbplats kallas ibland för en <a href="http://en.wikipedia.org/wiki/Mashup_(web_application_hybrid)" target="_blank">&#8221;mashup&#8221;</a>. Ett annat exempel på detta är kartorna på Bloggportalen som skapas med hjälp av en tjänst från Google Maps.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogg.athega.se/2009/03/14/bloggportalen-visar-relaterade-nyheter-fran-sesam/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Geotagga bilder</title>
		<link>http://blogg.athega.se/2009/03/04/geotagga-bilder/</link>
		<comments>http://blogg.athega.se/2009/03/04/geotagga-bilder/#comments</comments>
		<pubDate>Wed, 04 Mar 2009 18:43:57 +0000</pubDate>
		<dc:creator>Johan Beronius</dc:creator>
				<category><![CDATA[Teknik och prylar]]></category>
		<category><![CDATA[Bilder]]></category>
		<category><![CDATA[Foto]]></category>
		<category><![CDATA[GPS]]></category>
		<category><![CDATA[Positionering]]></category>

		<guid isPermaLink="false">http://blogg.athega.se/?p=47</guid>
		<description><![CDATA[Guide hur man gör för att kombinera informationen från en GPS-navigator och en digitalkamera för att geotagga bilder.]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">Att <a href="http://sv.wikipedia.org/wiki/Geotaggning" target="_blank">geotagga </a>bilder är att lagra koordinaterna för den geografiska positionen där bilden fotograferades i själva bildfilen. Det skapar många nya möjligheter för att t.ex. söka fram bilder och presentera dem på en karta. Tyvärr är det fortfarande inte många riktiga kameror (och då menar jag inte mobiltelefoner) som har inbyggd GPS vilket krävs för detta. Däremot är vanliga GPS-navigatorer väldigt vanliga nu för tiden, vissa av dem kan kontinuerligt lagra positionen till en spårfil.</p>
<p>Jag tänkte därför presentera en liten guide hur man kan kombinera denna information i efterhand så att man får geotaggade bilder när man laddar över dem till datorn.</p>
<ul>
<li>Ladda över spårfilen/filerna i <a href="http://www.topografix.com/GPX/" target="_blank">GPX-format</a> från navigatorn till datorn. Du behöver vara så noga med att du hittar spåret från det exakta fototillfället. Om du t.ex. har en fil från varje dag på en resa, ta med allihopa.<img class="size-full wp-image-48 aligncenter" title="GPX fil från GPS navigator " src="http://blogg.athega.se/wp-content/uploads/2009/03/oregon.jpg" alt="GPX fil från GPS navigator " width="277" height="284" /></li>
<li>Ladda över bilderna som JPG-filer från kameran till datorn. En viktig sak man inte får glömma innan man börjar fotografera är att ställa klockan rätt i kameran. Detta är avgörande för att kunna hitta positionen för det exakta tillfället för varje bild. Glöm inte eventuella inställningar för sommar/vintertid och tidszon. Om du märker tiden är fel för bilder du redan tagit bör du korrigera detta innan du fortsätter. <a href="http://www.sno.phy.queensu.ca/~phil/exiftool/" target="_blank">ExifTool</a> kan justera tiden, t.ex. framåt eller bakåt en timme om man har glömt ställa om för sommar/vintertid. Ett annat verktyg som klarar detta och möjligtvis är lite enklare är <a href="http://www.sentex.net/~mwandel/jhead/" target="_blank">jhead</a>.<img class="size-full wp-image-49 aligncenter" title="JPG-filer från en digitalkamera" src="http://blogg.athega.se/wp-content/uploads/2009/03/digicam-pics.jpg" alt="JPG-filer från en digitalkamera" width="281" height="251" /></li>
<li>Nu behöver vi ett program som läser positionerna från spårfilen och skriver till bilderna. Programmet <a href="http://geotag.sourceforge.net/" target="_blank">Geotag</a> är just ett sådant som dessutom är snyggt, enkelt och gratis. (Open Source &#8211; GPL)</li>
<li>Kolla sidorna <a href="http://geotag.sourceforge.net/?q=node/12" target="_blank">Quick start</a> och <a href="http://geotag.sourceforge.net/?q=node/2" target="_blank">Requirements</a> vad som krävs för att köra programmet. Man behöver Java och verktyget <a href="http://www.sno.phy.queensu.ca/~phil/exiftool/" target="_blank">ExifTool</a>, ladda ned det först och lägg filen i en körbar programkatalog. (t.ex. <em>C:\Windows</em> på Windows)</li>
<li>Har du redan <a href="http://java.com/sv/download/" target="_blank">Java 6</a> är det jätteenkelt, klicka bara <a href="http://geotag.sourceforge.net/geotag.jnlp" target="_blank">Run it now</a> så körs programmet direkt via Java Webstart utan att man behöver installera något. Första gången laddas det ned men sedan finns det sparat på datorn och en genväg har skapats på skrivbordet. Klicka på <em>&#8221;Kör&#8221;</em> för att lita på utgivaren av progmmet.</li>
<li>Välj <em>Load tracks from file</em> från File-menyn. Du kan välja en eller flera filer, det gör som sagt inget om du får med spår från innan eller efter fototillfället. Ingenting syns på skärmen än.<img class="aligncenter size-full wp-image-50" title="Ladda filer i Geotag" src="http://blogg.athega.se/wp-content/uploads/2009/03/geotag-load.jpg" alt="Ladda filer i Geotag" width="466" height="400" /></li>
<li>Välj sedan <em>Add image</em> eller <em>Add images from directory</em> beroende på om det är ett fåtal eller en alla bilder i en katalog du vill geotagga. Nu dyker alla bilder upp i en lista.</li>
<li>Högerklicka på en godtycklig bild, välj <em>Find locations</em> &gt; <em>for all images</em>. Nu kommer listan uppdateras med latitud och longitud för alla bilder.<img class="aligncenter size-full wp-image-51" title="geotag-findloc" src="http://blogg.athega.se/wp-content/uploads/2009/03/geotag-findloc.jpg" alt="geotag-findloc" width="419" height="378" /></li>
<li>Om det finns luckor i spåret från din GPS, dvs. att den inte har spelat in någon position för det exakta tillfället då bilden togs kan du använda funktionen <em>Fill gaps</em> för att räkna ut en mellanliggande position från de två närmast kända.</li>
<li>Nästa steg är frivilligt men kan vara skoj. Högerklicka på en godtycklig bild, välj <em>Location names</em> &gt; <em>for all images</em>. Nu kommer programmet att gå ut på nätet och söka upp ortsnamn för alla positioner från <a href="http://www.geonames.org/" target="_blank">Geonames</a>. Ortsnamnen kommer att lagras som text i bildfilerna.<img class="aligncenter size-full wp-image-52" title="geotag-findnames" src="http://blogg.athega.se/wp-content/uploads/2009/03/geotag-findnames.jpg" alt="geotag-findnames" width="446" height="405" /></li>
<li>Nu kan du spara ändringarna till bildfilerna. Välj <em>Save new locations</em> &gt; <em>All images</em>. <img class="aligncenter size-full wp-image-53" title="geotag-save" src="http://blogg.athega.se/wp-content/uploads/2009/03/geotag-save.jpg" alt="geotag-save" width="407" height="389" /></li>
<li>Verktyget ExifTool som används för att skriva till bildfilerna kommer att skapa en backup-kopia av alla filer. Om man redan har en kopia av bildfilerna eller om de finns kvar på kamerans minneskort så är detta onödigt och tar bara extra lagringsutrymme. Detta kan man stänga av med inställningen <em>-overwrite_original</em>. Vill man att filerna skall behålla sin &#8221;Senast ändrad&#8221;-tid kan man även lägga in inställningen <em>-preserve</em>.<img class="aligncenter size-full wp-image-54" title="geotag-settings" src="http://blogg.athega.se/wp-content/uploads/2009/03/geotag-settings.jpg" alt="geotag-settings" width="440" height="409" /></li>
<li>Klart!</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blogg.athega.se/2009/03/04/geotagga-bilder/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

