<?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; Programmeringsspråk</title>
	<atom:link href="http://blogg.athega.se/kategori/programmeringssprak/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogg.athega.se</link>
	<description>...</description>
	<lastBuildDate>Fri, 28 May 2010 01:00:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>jQuery är snyggt</title>
		<link>http://blogg.athega.se/2010/04/09/jquery-ar-snyggt/</link>
		<comments>http://blogg.athega.se/2010/04/09/jquery-ar-snyggt/#comments</comments>
		<pubDate>Fri, 09 Apr 2010 14:36:09 +0000</pubDate>
		<dc:creator>Christian Lizell</dc:creator>
				<category><![CDATA[Guider]]></category>
		<category><![CDATA[Programmeringsspråk]]></category>
		<category><![CDATA[flickr]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[YUI]]></category>

		<guid isPermaLink="false">http://blogg.athega.se/?p=606</guid>
		<description><![CDATA[En labb som visar hur jQuery underlättar tillvaron för att visa ett lajvflöde av bilder och twitterinlägg.]]></description>
			<content:encoded><![CDATA[<p>Större delen av gårdagen ägnades åt en workshop (tack <a href="http://twitter.com/stpe">@stpe</a>) kring frontendutveckling. Fokus var på <a href="http://developer.yahoo.com/yui/">YUI</a>, men eftersom jag jobbat en del med det redan, men däremot inte hunnit dyka ner i <a href="http://jquery.org/">jQuery</a> på riktigt, valde jag det senare.</p>
<p>Min idé var att göra ett lajvflöde av <a href="http://www.flickr.com/">Flickr</a>-bilder och <a href="http://www.twitter.com/">Twitter</a>-postningar baserat på ett givet sökord eller tag.</p>
<p><a href="http://blogg.athega.se/wp-content/uploads/2010/04/athaga.png"><img class="aligncenter size-full wp-image-624" title="athaga" src="http://blogg.athega.se/wp-content/uploads/2010/04/athaga.png" alt="" width="532" height="279" /></a></p>
<h2>JSONP</h2>
<p>Både Flickr och Twitter har rika APIer i <a href="http://www.json.org/">JSON</a>-format som gör det lätt att åstadkomma det jag vill. Då dessa av naturliga skäl inte ligger på samma domän som min labb, kan jag inte göra ett vanligt <a href="http://en.wikipedia.org/wiki/XMLHttpRequest">XHR</a>-anrop eftersom webbläsaren av säkerhetsskäl kastar ett same domain-policy-fel. Räddningen stavas <a href="http://en.wikipedia.org/wiki/JSON#JSONP">JSONP</a>, som helt enkelt wrappar hela JSON-svaret i ett metodanrop. Detta går vi inte in närmare på denna gång, utan konstaterar istället glatt att jQuery har stöd för detta och löser detta under ytan.</p>
<h2>jQuerys effektköer</h2>
<p>Planen är alltså att långsamt smyga in en bild, visa den ett tag, sedan dimma ner den och till sist ta bort den helt.</p>
<p>Sedan jQuery 1.4 finns det en toppenmetod för att hantera pauser i den allmänna effektkön, fx. Metoden heter <a href="http://api.jquery.com/delay/">delay()</a> och låter mig åstadkomma önskat beteende på ett oerhört kompakt och tydligt vis.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span>img<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">fadeIn</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'slow'</span><span style="color: #009900;">&#41;</span>.
    <span style="color: #660066;">delay</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">1000</span><span style="color: #009900;">&#41;</span>.
    <span style="color: #660066;">fadeTo</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'slow'</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">0.3</span><span style="color: #009900;">&#41;</span>.
    <span style="color: #660066;">delay</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">2000</span><span style="color: #009900;">&#41;</span>.
    <span style="color: #660066;">fadeOut</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'fast'</span><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;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">remove</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Det är ju nästan som att prata svenska (engelska)! Vi repeterar:</p>
<ul>
<li>Smyg långsamt in bilden</li>
<li>Vänta en sekund</li>
<li>Dimma ner den litet</li>
<li>Vänta två sekunder</li>
<li>Smyg snabbt bort bilden och ta bort den</li>
</ul>
<h2>Koden</h2>
<p>Vill du se hur det ser ut, kan du titta <a href="http://www.athega.se/files/lab/athaga/">här</a> eller <a href="http://www.athega.se/files/lab/athaga/athaga.zip">ladda ner</a> hela koden och labba vidare själv.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogg.athega.se/2010/04/09/jquery-ar-snyggt/feed/</wfw:commentRss>
		<slash:comments>0</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 hjälpmedel för [...]]]></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 i [...]]]></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://www.athega.se/sudoku/" target="_blank">program som löser Sudokus</a>.</p>
<p><a href="http://www.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://www.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://www.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>0</slash:comments>
		</item>
		<item>
		<title>Potion, ett objekt- och mixin-orienterat språk</title>
		<link>http://blogg.athega.se/2009/07/02/potion/</link>
		<comments>http://blogg.athega.se/2009/07/02/potion/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 00:15:02 +0000</pubDate>
		<dc:creator>Peter Hellberg</dc:creator>
				<category><![CDATA[Kod]]></category>
		<category><![CDATA[Programmeringsspråk]]></category>
		<category><![CDATA[Öppen källkod]]></category>
		<category><![CDATA[Mixin]]></category>
		<category><![CDATA[Objektorienterat]]></category>
		<category><![CDATA[Potion]]></category>

		<guid isPermaLink="false">http://blogg.athega.se/?p=220</guid>
		<description><![CDATA[
Författaren, tecknaren, musikern, konstnären, och programmeraren Why the Lucky Stiff har under en tid jobbat med ett litet och snabbt språk som han döpt till Potion. Språket är inte på något sätt färdigt eller ens menat att tas på allvar, men jag tycker att det är roligt att experimentera med nya och annorlunda språk.
Mantrat bakom [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-223" title="Potion" src="http://blogg.athega.se/wp-content/uploads/2009/07/potion.png" alt="Why’s Potion" width="320" height="211" /></p>
<p>Författaren, tecknaren, musikern, konstnären, och programmeraren <a href="http://whytheluckystiff.net/">Why the Lucky Stiff</a> har under en tid jobbat med ett litet och snabbt språk som han döpt till<strong> </strong>Potion. Språket är inte på något sätt färdigt eller ens menat att tas på allvar, men jag tycker att det är roligt att experimentera med nya och annorlunda språk.</p>
<h2>Mantrat bakom Potion</h2>
<p>&#8221;Allt är ett objekt, men objekten är inte allt&#8221; samt tillägget &#8221;Oh, och allt är en funktion&#8221;</p>
<h2>Vad är speciellt med Potion?</h2>
<ul>
<li>Potion kompilerar ner programmen till maskinkod</li>
<li>Det inkluderar en liten &#8221;generational near-exact garbage collector&#8221;</li>
<li>Det är två språk i ett: ett för kod, ett för data</li>
<li>Det består av färre än 10.000 rader C</li>
</ul>
<p>Potion är inspirerat av språken <a href="http://www.iolanguage.com/">Io</a>, <a href="http://www.ruby-lang.org/en/">Ruby</a>, <a href="http://caml.inria.fr/ocaml/">OCaml</a>, <a href="http://www.lua.org/">Lua</a>, <a href="http://www.rebol.org">REBOL</a> och C. I den ordningen.</p>
<h2>Installation under Mac OS X</h2>
<p>Först måste man installera <a href="http://www.complang.org/ragel/">Ragel</a> och det gör man enklast genom <a href="http://www.macports.org/">MacPorts</a>:</p>
<p><code style="padding: 0 0.5em; color: #fff; background-color: #000;">sudo port install ragel</code></p>
<p>Och sedan klonar man källkoden med <a href="http://git-scm.com/">Git</a>:</p>
<p><code style="padding: 0 0.5em; color: #fff; background-color: #000;">git clone git://github.com/why/potion.git</code></p>
<p>Efter det kompilerar man koden:</p>
<p><code style="padding: 0 0.5em; color: #fff; background-color: #000;">make</code></p>
<h2>Dags att skriva lite kod</h2>
<h3>Enklast möjliga</h3>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#996600;">'Athega'</span> <span style="color:#CC0066; font-weight:bold;">print</span></pre></div></div>

<p>Kommer helt enkelt att skriva ut strängen &#8216;Athega&#8217; genom att man skickar meddelandet <code>print</code>.</p>
<h3>Något lite roligare</h3>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">loop</span>: <span style="color:#996600;">'Athega'</span> <span style="color:#CC0066; font-weight:bold;">print</span>.</pre></div></div>

<p>I Potion startar man block av kod med kolon och avslutar med punkt. Kommandot <code>loop</code> kommer att inte helt oväntat loopa över blocket (en oändlig loop). Meddelandet <code>print</code> sänds till strängen &#8216;Athega&#8217;. Strängar är objekt, som allt annat. De tar emot meddelanden. Meddelanden är separerade från objekt med mellanrum. (I de flesta programmeringsspråk använder man punkt för att separera meddelanden, här (precis som i Svenska) representerar punkt ett avslut på något.)</p>
<h3>Listor</h3>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'kaffet'</span>, <span style="color:#996600;">'på'</span>, <span style="color:#996600;">'h21'</span>, <span style="color:#996600;">'rockar'</span><span style="color:#006600; font-weight:bold;">&#41;</span> at <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">2</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#CC0066; font-weight:bold;">print</span></pre></div></div>

<p>Nu skriver vi ut strängen &#8216;h21&#8242;. Allt inom parenteser är <strong>listor</strong>. Vi skickar meddelandet <code>at</code>. Alla listor har ett <code>at</code> meddelande som hämtar poster baserat på positionen i listan.</p>
<p>Notera att efter <code>at</code> meddelandet kommer det en till lista. <code>(2)</code> är ett argument till <code>at</code>. Den ser ut som en lista (och det <em>är</em> en lista,) men vi kallar den för ett argument eftersom den kommer efter ett meddelande.</p>
<h2>Den funktionella sidan</h2>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">  minus = <span style="color:#006600; font-weight:bold;">&#40;</span>x, y<span style="color:#006600; font-weight:bold;">&#41;</span>: x <span style="color:#006600; font-weight:bold;">-</span> y.
  <span style="color:#9900CC;">minus</span> <span style="color:#006600; font-weight:bold;">&#40;</span>y=<span style="color:#006666;">10</span>, x=<span style="color:#006666;">6</span><span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>Här har vi en variabel som innehåller en funktion. Funktionen subtraherar <code>y</code> från <code>x</code>. I detta fall returneras -4.<br />
(Detta liknar hur nyckelordsargument fungerar i Lua och Python)</p>
<h2>Den objektorienterade sidan</h2>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">Person = <span style="color:#9966CC; font-weight:bold;">class</span>: <span style="color:#006600; font-weight:bold;">/</span>name, <span style="color:#006600; font-weight:bold;">/</span>age, <span style="color:#006600; font-weight:bold;">/</span>sex.
&nbsp;
<span style="color:#9900CC;">Person</span> <span style="color:#CC0066; font-weight:bold;">print</span> = <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>: 
 <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'Mitt namn är '</span>, <span style="color:#006600; font-weight:bold;">/</span>name, <span style="color:#996600;">'.'</span><span style="color:#006600; font-weight:bold;">&#41;</span> join <span style="color:#CC0066; font-weight:bold;">print</span>.
&nbsp;
<span style="color:#CC0066; font-weight:bold;">p</span> = Person <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#CC0066; font-weight:bold;">p</span> <span style="color:#006600; font-weight:bold;">/</span>name = <span style="color:#996600;">'Peter'</span>
&nbsp;
<span style="color:#CC0066; font-weight:bold;">p</span> <span style="color:#CC0066; font-weight:bold;">print</span></pre></div></div>

<h3>En subklass</h3>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">Developer = Person <span style="color:#9966CC; font-weight:bold;">class</span> <span style="color:#006600; font-weight:bold;">&#40;</span>language<span style="color:#006600; font-weight:bold;">&#41;</span>: <span style="color:#006600; font-weight:bold;">/</span>language = language.
&nbsp;
<span style="color:#9900CC;">Developer</span> <span style="color:#CC0066; font-weight:bold;">print</span> = <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>:
  <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'Mitt namn är '</span>, <span style="color:#006600; font-weight:bold;">/</span>name, <span style="color:#996600;">' och jag gillar '</span>, <span style="color:#006600; font-weight:bold;">/</span>language, <span style="color:#996600;">'.'</span><span style="color:#006600; font-weight:bold;">&#41;</span> join <span style="color:#CC0066; font-weight:bold;">print</span>.
&nbsp;
<span style="color:#9900CC;">u</span> = Developer <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'Ruby'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
u <span style="color:#006600; font-weight:bold;">/</span>name = <span style="color:#996600;">'Peter'</span>
&nbsp;
u <span style="color:#CC0066; font-weight:bold;">print</span></pre></div></div>

<h2>Licks</h2>
<p>Till sist har vi <strong>Lick</strong> vilket är dataspråket jag nämnde tidigare. Men varför skulle man vilja ha två språk i ett? En anledning är att det kan vara svårt att uttrycka data i kod. </p>
<p>Genom att ha ett separat litet dataspråk kan man bygga trädstrukturer av godtyckliga element, ungefär som i HTML. (Man kan se det som kod som har blivit tolkad men inte exekverad)</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#006600; font-weight:bold;">&#91;</span>name <span style="color:#006600; font-weight:bold;">&#40;</span>attr1=<span style="color:#996600;">'string'</span>, attr2=<span style="color:#006666;">10</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#996600;">'TEXT HERE'</span><span style="color:#006600; font-weight:bold;">&#93;</span></pre></div></div>

<p>Varje <strong>lick</strong> kan ha ett namn, en tabell med attribut och en lista med barn. Listan med barn kan även vara av någon annan datatyp. (tex nummer eller sträng)</p>
<h2>Vidare läsning</h2>
<ul>
<li><a href="http://hackety.org/potion/">Potion, a Short Pamphlet</a></li>
<li><a href="http://github.com/why/potion/tree/master">why&#8217;s potion at master &#8211; GitHub</a></li>
<li><a href="http://en.wikipedia.org/wiki/Why_the_lucky_stiff">why the lucky stiff &#8211; Wikipedia</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blogg.athega.se/2009/07/02/potion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
