<?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; Öppen källkod</title>
	<atom:link href="http://blogg.athega.se/kategori/opensource/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>Warden</title>
		<link>http://blogg.athega.se/2010/10/30/warden/</link>
		<comments>http://blogg.athega.se/2010/10/30/warden/#comments</comments>
		<pubDate>Sat, 30 Oct 2010 20:48:03 +0000</pubDate>
		<dc:creator>Peter Hellberg</dc:creator>
				<category><![CDATA[Utbildning]]></category>
		<category><![CDATA[Öppen källkod]]></category>
		<category><![CDATA[Rack]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Warden]]></category>

		<guid isPermaLink="false">http://blogg.athega.se/?p=935</guid>
		<description><![CDATA[Igår höll jag i internutbildningen på vårt månadsmöte, denna gång berättade jag om autentiseringsramverket Warden och lite kort om Rack. .prezi-player { width: 750px; } .prezi-player-links { text-align: center; } Warden on Prezi]]></description>
			<content:encoded><![CDATA[<p>Igår höll jag i internutbildningen på vårt månadsmöte, denna gång berättade jag om autentiseringsramverket <a href="http://github.com/hassox/warden/wiki">Warden</a> och lite kort om <a href="http://rack.rubyforge.org/">Rack</a>.</p>
<div class="prezi-player">
<style type="text/css" media="screen">.prezi-player { width: 750px; } .prezi-player-links { text-align: center; }</style>
<p><object id="prezi_2dfftawbzg9y" name="prezi_2dfftawbzg9y" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="750" height="500"><param name="movie" value="http://prezi.com/bin/preziloader.swf"/><param name="allowfullscreen" value="true"/><param name="allowscriptaccess" value="always"/><param name="bgcolor" value="#ffffff"/><param name="flashvars" value="prezi_id=2dfftawbzg9y&amp;lock_to_path=0&amp;color=ffffff&amp;autoplay=no&amp;autohide_ctrls=0"/><embed id="preziEmbed_2dfftawbzg9y" name="preziEmbed_2dfftawbzg9y" src="http://prezi.com/bin/preziloader.swf" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="750" height="600" bgcolor="#ffffff" flashvars="prezi_id=2dfftawbzg9y&amp;lock_to_path=0&amp;color=ffffff&amp;autoplay=no&amp;autohide_ctrls=0"></embed></object>
<div class="prezi-player-links">
<p><a title="Warden is a Rack-based middleware, designed to provide a mechanism for authentication in Ruby web applications. It is a common mechanism that fits into the Rack Machinery to offer powerful options for authentication." href="http://prezi.com/2dfftawbzg9y/warden/">Warden</a> on <a href="http://prezi.com">Prezi</a></p>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blogg.athega.se/2010/10/30/warden/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mountain.rb &#8211; Dag 3</title>
		<link>http://blogg.athega.se/2010/10/19/mountain-rb-3/</link>
		<comments>http://blogg.athega.se/2010/10/19/mountain-rb-3/#comments</comments>
		<pubDate>Tue, 19 Oct 2010 16:42:21 +0000</pubDate>
		<dc:creator>Andrew Crookston</dc:creator>
				<category><![CDATA[Konferens]]></category>
		<category><![CDATA[Programmeringsspråk]]></category>
		<category><![CDATA[Öppen källkod]]></category>
		<category><![CDATA[Böcker]]></category>
		<category><![CDATA[Capybara]]></category>
		<category><![CDATA[Cucumber]]></category>
		<category><![CDATA[Evergreen]]></category>
		<category><![CDATA[Funktionellt]]></category>
		<category><![CDATA[Objektorienterat]]></category>
		<category><![CDATA[Parprogrammering]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Selenium]]></category>

		<guid isPermaLink="false">http://blogg.athega.se/?p=793</guid>
		<description><![CDATA[Keynote: Aaron Patterson (@tenderlove) - &#8221;Fear Driven Development&#8221;. Aaron öppnade med en kort presentation om hans professionella liv som utvecklare där han började med Perl 1999 och blev mer eller mindre tvingad att byta till Java 2002 som fortsatte till 2007 då han började använda Ruby. I och med att Aarons kunskaper kring Ruby ökade, ökade även [...]]]></description>
			<content:encoded><![CDATA[<h2>Keynote: Aaron Patterson (<a href="http://twitter.com/tenderlove"><span style="color: #000000;"><span style="color: #888888;">@tenderlove</span></span></a>) - &#8221;Fear Driven Development&#8221;.</h2>
<p><img class="alignright size-medium wp-image-898" title="mountain-rb-buddy-system" src="/wp-content/uploads/2010/10/mountain-rb-buddy-system-300x162.png" alt="" width="300" height="162" />Aaron öppnade med en kort presentation om hans professionella liv som utvecklare där han började med Perl 1999 och blev mer eller mindre tvingad att byta till Java 2002 som fortsatte till 2007 då han började använda Ruby.</p>
<p>I och med att Aarons kunskaper kring Ruby ökade, ökade även hans rädsla för att han inte kunde tillräckligt mycket – kanske något många kan relatera till? Detta var i alla fall ämnet för hans tal.</p>
<p>Hans tips för att motverka den känslan är att <em>&#8221;Läsa, Läsa, Läsa&#8221;</em> – varje dag, samt vad han gärna kallar <em>&#8221;The Buddy System&#8221;</em> eller i en något mer <img class="size-medium wp-image-899 alignright" title="mountain-rb-fear-exp" src="/wp-content/uploads/2010/10/mountain-rb-fear-exp-300x118.png" alt="" width="270" height="106" />bekant term Pair Programming. I Aarons fall fortsatte han lite längre och gick med i e-post listor för ruby-talk och ruby-core, började gå på massor av konferenser och även undervisa på ett lokalt universitet i Seattle.</p>
<p>En fras som är viktig i Aarons vardag är <em>&#8221;I don&#8217;t know&#8221;,</em> om man inte förstår något hjälper oftast personen du pratar med att lära dig och hjälpa dig förstå.</p>
<h2 style="display: block; clear: both; margin-top: 2em;">Jonathan Dahl (<a href="http://twitter.com/jondahl"><span style="color: #000000;"><span style="color: #888888;">@jondahl</span></span></a>) &#8211; &#8221;Programming and minimalism: lessons from Orwell and the Clash&#8221;.</h2>
<p>Jons presentation började med liknelser mellan programmerare och andra professioner. Bland annat:</p>
<ul>
<li>Ingenjörer: <em>&#8221;Not about building things – about building processes&#8221;</em> och <em>&#8221;Designing solutions to direct problems&#8221;</em></li>
<li>Hantverkare: Att ha rätt verktyg, kunskaper, jobbar i små team och att ha rätt vanor och rutiner.</li>
<li>Författare: Skriv, skriv, refaktorera</li>
</ul>
<p>Presentationen fortsatte med att antal musikdemonstrationer genom tiderna med exempel som Bach, Mozart, Mahler till lite mer nutida pop musik med Beatles och även punk musik. Han ville med dessa exempel demonstrera hur</p>
<p>Hans tips för att bli en bättre programmare är:</p>
<ul>
<li>Konsumera: Läs mycket och inte bara om det du gör</li>
<li>Studera &#8211; hur skriver andra?</li>
<li>Producera &#8211; ju mer du skriver desto bättre blir du</li>
</ul>
<blockquote><p><em>Not only is bad writing impossible to understand, it is buggy.</em></p></blockquote>
<h2>Tech Block #2</h2>
<p>Ett Tech Block består av tre kortare presentationer.</p>
<h3>Jim Remsick (<a href="http://twitter.com/jremsikjr"><span style="color: #888888;">@jremsikjr</span></a>) - &#8221;Functionally Equivalent&#8221;</h3>
<p><img class="alignright size-thumbnail wp-image-804" title="mountain-rb-bugs" src="http://blogg.athega.se/wp-content/uploads/2010/10/mountain-rb-bugs-150x150.png" alt="" width="150" height="150" />Jims tal var något kortare men med ett direkt budskap att förklara fördelarna med funktionell programmering som letade sig ner till dessa tre punkter:</p>
<ul>
<li>Kortfattat (mer koncist)</li>
<li>Trådbarhet (<em>Concurrency</em>)</li>
<li>Inga buggar<span style="color: #ff0000;">*</span> &#8211; Går att bevisa matematiskt</li>
</ul>
<p>Ruby är ett objektorienterat språk men det är inte helt ovanligt att skriva det i funktionell stil. Jim avslutade med en uppmaning</p>
<blockquote><p><em>Gå ut och prova något du inte är bekväm med.</em></p></blockquote>
<h3>CJ Kihlbom (<a href="http://twitter.com/cjkihlbom"><span style="color: #888888;">@cjkihlbom</span></a>) &#8211; &#8221;Frontend Testing Frontier&#8221;</h3>
<p>Det var extra kul att höra CJ tala då han kommer från Göteborg och driver firman Elabs. CJ/Elabs var också initiativtagarna till konferensen Nordic Ruby som Athega sponsrade och vi har bloggat om tidigare.</p>
<p>Elabs har länge lagt ett stort fokus på frontend testning där Elabs, Jonas Nicklas (<a href="http://twitter.com/jncoward"><span style="color: #888888;">@jncoward</span></a>) bland annat har gjort ett par stora bidrag till Ruby commityn via <a href="http://github.com/jnicklas/capybara">Capybara</a> och <a href="http://github.com/jnicklas/evergreen">Evergreen</a>. Detta var fokus för CJs tal.</p>
<p>CJ pratade om verktyg för integrationstestning:</p>
<ul>
<li><a href="http://cukes.info/">cucumber</a></li>
<li><a href="http://github.com/cavalle/steak">steak</a></li>
<li><a href="http://github.com/jnicklas/capybara">capybara</a></li>
</ul>
<p>Capybara är &#8221;driver agnostic&#8221; vilket innebär att man kan köra Capybara med hjälp av annan mjukvara som:</p>
<ul>
<li><a href="http://github.com/brynary/rack-test">rack-test</a></li>
<li><a href="http://selenium.rubyforge.org/">selenium</a></li>
<li><a href="http://htmlunit.sourceforge.net/">HTMLUnit</a> via <a href="http://celerity.rubyforge.org/">celerity</a>/<a href="http://github.com/langalex/culerity/">culerity</a>/<a href="http://github.com/bernerdschaefer/akephalos">akephalos</a></li>
<li><a href="http://www.envjs.com/">envjs</a> via <a href="http://github.com/smparkes/capybara-envjs">capybara-envjs</a></li>
</ul>
<p>JavaScript unit testing är inte så vanligt så CJ tog tillfället att berätta om ett bra alternativ nämligen <a href="http://github.com/pivotal/jasmine-gem">Jasmine</a> av Pivotal Labs, tillsammans med <a href="http://github.com/jnicklas/evergreen">Evergreen</a> av Jonas Nicklas. En riktigt bra feature med Evergreen är att man kan skriva sina JavaScript tester i <a href="http://jashkenas.github.com/coffee-script/">CoffeeScript</a>. CoffeeScript är för JavaScript vad HAML/SASS är för HTML/CSS.</p>
<blockquote><p><em>Front end testing is NOT hard</em></p></blockquote>
<h3>Paul Sadauskas (<a href="http://twitter.com/theamazingrando"><span style="color: #888888;">@theamazingrando</span></a>) &#8211; Forms Don&#8217;t Have to be this Complicated</h3>
<blockquote><p><em>Forms Suck</em></p></blockquote>
<p>Paul pratade om hur krångliga fomulär kan vara i Rails, framförallt om man har <abbr title="has and belongs to many">HABTM</abbr> relationer mellan sina modeller. Eller ännu värre, nästlade formulär.</p>
<p><img class="alignright size-medium wp-image-809" title="mountain-rb-nested-forms-are-bad" src="http://blogg.athega.se/wp-content/uploads/2010/10/mountain-rb-nested-forms-are-bad-300x149.png" alt="" width="300" height="149" /></p>
<p>Paul visade exempel på krångliga formulär och olika lösningar, de inkluderade bland annat att ladda om hela sidan, olika sidor för olika formulärdelar eller att generera direkt från JavaScript.</p>
<p>Paul&#8217;s förslag till slut var att använda progressiv förbättring som laddar om sidan om man inte har JavaScript aktiverat men endast hämtar en partial via AJAX om man har JS aktiverat. Denna metod blir dessutom ganska enkel att testa.</p>
<h2>Blake Mizerany (<a href="http://twitter.com/bmizerany"><span style="color: #888888;"><span style="color: #000000;"><span style="color: #888888;">@bmizerany</span></span></span></a>) &#8211; 1000 ways to kill a Buffalo</h2>
<p><img class="alignright size-medium wp-image-911" title="Killing Buffalo" src="http://blogg.athega.se/wp-content/uploads/2010/10/killing_buffalo-300x210.jpg" alt="Killing Buffalo" width="300" height="210" /></p>
<p>Blake är uppfinnaren av <a href="http://sinatrarb.com">Sinatra</a> och jobbar till vardags på <a href="http://heroku.com/">Heroku</a> som har en intressant och mycket flexibel Rails</p>
<p>hosting med enkel Add-on arkitektur.</p>
<p>Blakes presentation tillhörde definitivt en av de mer humoristiska. I princip hela presentationen bestod av en serie tecknade figurer (&#8221;Ugh&#8221; grottmannen, hans familj och en buffel) ritade på en iPad i en rad olika situationer.</p>
<p>Presentationen (som kunde vart en säljpitch för Heroku) ville få oss att fokusera på problem istället för idéer, hur problem i vår vardag driver innovation och utveckling. För att knyta ihop med titeln var Blakes exempel på hur Ugh försökte jaga buffel på stenåldern.</p>
<p>Han pratade om hur man som Ruby on Rails utvecklare kan skriva små problemlösande add-ons till Heroku som andra utvecklare kan dra nytta av (och på så vis tjäna pengar).</p>
<p><img class="alignright size-medium wp-image-815" title="mountain-rb-thousands-of-developers" src="http://blogg.athega.se/wp-content/uploads/2010/10/mountain-rb-thousands-of-developers-300x141.png" alt="" width="240" height="113" />Heroku add-ons är små självständiga tjänster som man laddar upp i Heroku som i läggs på en Amazon EC2 instans. EC2 arkitekturen var ett starkt argument eftersom alla Heroku appar ligger i EC2 så är det extremt låg latens mellan instanserna (add-ons/appar), även internationellt och mellan kontinenter.</p>
<h2>Lightning talks</h2>
<p>Lightning talks är snabba presentationer, man har 5-7 minuter att lära ut något. Det var många snabbpresentationer men en som jag tycker var värd att nämna.</p>
<h3>Neal Enssle (<a href="http://twitter.com/nealenssle"><span style="color: #888888;">@nealenssle</span></a>) &#8211; How to be a better developer in 90 days</h3>
<p>Denna presentation var tre bok rekommendationer för alla som vill bli bättre utvecklare (inte bara Ruby/Rails). Tanken är att man ska läsa en bok per månad.</p>
<p><strong><a href="http://amzn.com/1934356344">The Passionate Programmer</a></strong><strong> &#8211; Chad Fowler</strong></p>
<ul>
<li>Om du inte bryr dig kommer det att märkas.</li>
<li>Var en generalist.</li>
<li>Gör det du kan &#8211; klaga inte, lös problem.</li>
<li>Kom ihåg vem du arbetar för &#8211; hur mycket värde tillför du?</li>
<li>Daglig framgång &#8211; vad åstadkom du idag?</li>
<li>Är du bättre idag än igår? (n + 1)</li>
</ul>
<p><strong><a href="http://amzn.com/0132350882">Clean Code</a> &#8211; Robert C. Martin</strong></p>
<ul>
<li>Semi-objektiv och praktisk.</li>
<li>Storleken spelar roll.</li>
<li>Gör en sak, på ett enda ställe.</li>
<li>Scout-regeln, lämna koden bättre än du hittade den.</li>
</ul>
<p><strong><a href="http://amzn.com/0321603508">Refactoring: Ruby edition</a> &#8211; Martin Fowler (m.fl.)</strong></p>
<ul>
<li>Koda för att öka förtroende för gammal kod</li>
<li><em>&#8221;Smells in code&#8221; </em>- motverka dålig kod, duplicering, långa funktioner m.m.</li>
<li>Självförklarande variabelnamn</li>
<li>60 refaktoreringsmönster</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blogg.athega.se/2010/10/19/mountain-rb-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mountain.rb &#8211; Dag 2</title>
		<link>http://blogg.athega.se/2010/10/19/mountain-rb-2/</link>
		<comments>http://blogg.athega.se/2010/10/19/mountain-rb-2/#comments</comments>
		<pubDate>Tue, 19 Oct 2010 16:42:08 +0000</pubDate>
		<dc:creator>Peter Hellberg</dc:creator>
				<category><![CDATA[Konferens]]></category>
		<category><![CDATA[Programmeringsspråk]]></category>
		<category><![CDATA[Öppen källkod]]></category>

		<guid isPermaLink="false">http://blogg.athega.se/?p=786</guid>
		<description><![CDATA[Jim Weirich (@jimweirich) &#8211; “To Infinity And Beyond” Jim höll i konferensens första keynote, titeln löd  och innehöll allt från Speciella relativitetsteorin, rymdresor och Jims släktskap med folkgruppen Amish. Our world is stranger than we think Jim identifierade några områden som går att förbättra: Testning/Expressiveness (Han har börjat jobba på ramverket Given) Parallellism och stöd [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-890" style="margin-bottom: 1em;" title="Boulder Theater" src="http://blogg.athega.se/wp-content/uploads/2010/10/mountain-rb-theater.jpg" alt="" width="750" height="189" /><img class="size-medium wp-image-816    alignright" style="float: right;" title="mountain-rb-wave" src="/wp-content/uploads/2010/10/mountain-rb-wave-300x81.png" alt="" width="240" height="65" /></p>
<h2>Jim Weirich (<a href="http://twitter.com/jimweirich">@jimweirich</a>) &#8211; “<a href="http://github.com/jimweirich/presentation_to_infinity">To Infinity And Beyond</a>”</h2>
<p>Jim höll i konferensens första keynote, titeln löd <a href="http://github.com/jimweirich/presentation_to_infinity"><em> </em></a> och innehöll allt från Speciella relativitetsteorin, rymdresor och Jims släktskap med folkgruppen Amish.</p>
<blockquote><p>Our world is stranger than we think</p></blockquote>
<p>Jim identifierade några områden som går att förbättra:</p>
<ul>
<li>Testning/Expressiveness (Han har börjat jobba på ramverket Given)</li>
<li>Parallellism och stöd för flera CPU-kärnor</li>
<li>Message passing mellan Ruby VMs</li>
</ul>
<h2>Tech Block #1</h2>
<h3>Jay McGavren (<a href="http://twitter.com/jaymcgavren">@jaymcgavren</a>) &#8211; “Ruby on Android with Ruboto”</h3>
<p><img class="size-medium wp-image-811 alignleft" title="mountain-rb-robot" src="/wp-content/uploads/2010/10/mountain-rb-robot-174x300.png" alt="" width="88" height="151" /></p>
<p>Jay berättade om <a href="http://ruboto.org/">Ruboto</a> vilket är ett projekt som gör det möjligt att köra Ruby under Android.</p>
<p>Som demonstration körde han en <a href="http://ruby-doc.org/stdlib/libdoc/drb/rdoc/index.html">DRb</a> server med <a href="http://github.com/jashkenas/ruby-processing">Ruby Processing</a> som han sedan fjärrstyrde från sin Androidmobil.</p>
<p>Tydligen har <a href="http://en.wikipedia.org/wiki/Dalvik_%28software%29">Dalvik</a> en väldigt långsam <a href="http://en.wikipedia.org/wiki/Reflection_(computer_science)">reflektion</a>, men det är något man aktivt jobbar med att lösa.</p>
<h3 style="margin-top: 1em; text-align: left; clear: both; display: block;">Wayne Seguin (<a href="http://twitter.com/wayneeseguin">@wayneeseguin</a>) &#8211; “Do not Bring a Sword to a Gun Fight”</h3>
<p><img class="size-medium wp-image-813  alignright" title="mountain-rb-sword" src="/wp-content/uploads/2010/10/mountain-rb-sword-300x71.png" alt="" width="216" height="51" />Kortfattat kan man säga att föreläsningen handlade om att välja rätt verktyg för jobbet.</p>
<blockquote><p>Common sense isnt’t that common</p></blockquote>
<p>De steg som Wayne gick igenom var:</p>
<ul>
<li>Definiera problemet</li>
<li>Förstå problemet</li>
<li>Hitta möjliga lösningar på problemet</li>
<li>Utvärdera de olika lösningarna</li>
<li>Lös problemet</li>
</ul>
<p>Wayne är kanske mest känd för att ha skapat versionshanteraren <a href="http://rvm.beginrescueend.com/">RVM</a>.</p>
<h3>Tony Arcieri (<a href="http://twitter.com/bascule">@bascule</a>) &#8211; “Reia: Ruby Evolved”</h3>
<p>Tony berättade om <a href="http://wiki.reia-lang.org/wiki/Reia_Programming_Language">Reia</a> (uttalas RAY-uh), vilket är ett Ruby/Python-liknande språk som körs under <a href="http://erlang.org/">Erlangs</a> VM (BEAM)</p>
<p>Projektet är i sin linda, men källkoden ligger självklart på <a href="http://github.com/tarcieri/reia">GitHub</a> så det är bara att sätta igång och experimentera om man känner att man behöver en något trevligare syntax än vad Erlang erbjuder. En trevlig liten detalj är att en <a href="http://json.org/">JSON</a>-parser finns inbyggd i språket. Stränghanteringen är även helt OK, men inte direkt snabb.</p>
<blockquote><p>The fun syntax isn’t that <strong>FUN</strong> in Erlang</p></blockquote>
<h2>Lunch</h2>
<p>Under lunchen snackade jag lite med Joshua Timberman (<a href="http://twitter.com/jtimberman">@jtimberman</a>) från <a href="http://opscode.com/">Opscode</a>. De utvecklar verktyget <a href="http://www.opscode.com/chef/">Chef</a> vilket används för deployment och konfiguration av servrar på infrastrukturnivå (Server configuration management). Som alternativ kan man nämna <a href="http://www.puppetlabs.com/puppet/introduction/">Puppet</a> från Puppet Labs.</p>
<h2>Evan Phoenix (<a href="http://twitter.com/evanphx">@evanphx</a>) &#8211; “Staking your Claim in OSS”</h2>
<p>Evan gick igenom hur man driver ett lyckat open source-projekt. Fyra av de viktigaste poängerna var:</p>
<ul>
<li>Karma</li>
<li>Open source är ett socialt fenomen</li>
<li>Kommunicera!</li>
<li>Var trevlig och håll en sansad ton, även om du inte vill acceptera vissa patchar.<img class="alignright size-medium wp-image-807" title="mountain-rb-forks" src="/wp-content/uploads/2010/10/mountain-rb-forks-176x300.png" alt="" width="123" height="210" /></li>
</ul>
<blockquote><p>Fork for LOVE!</p></blockquote>
<p>Det självklara exempelprojektet var hans eget heltidsprojekt <a href="http://rubini.us/">Rubinius</a>. (En implementation av Ruby, <a href="http://www.engineyard.com/">Engine Yard</a> sponsrar utvecklingen)</p>
<h3 style="text-align: left; display: inline;">Rubinius</h3>
<p>Projektet har många utvecklare då man från början bestämt att det räcker med en enda patch för att få commit-rättigheter. Evan beskrev lätta buggfixar som lågt hängande frukt och en “gateway drug” för nya utvecklare.</p>
<p>De har haft färre än 10 reverts under de tre år som projektet har funnits. Mycket beroende på det sociala kontraktet mellan utvecklarna.</p>
<p><img class="size-medium wp-image-812 " title="mountain-rb-social-contract" src="/wp-content/uploads/2010/10/mountain-rb-social-contract-160x300.png" alt="" width="96" height="180" /></p>
<h2 class="clear: both; display: block;">Joe O&#8217;Brien (<a href="http://twitter.com/objo">@objo</a>) &#8211; “Everyone should know a little about Sales”</h2>
<p>Joe berättade om sina erfarenheter som säljare och varför försäljning fått ett så dåligt rykte. Hans poäng var att försäljning handlar om att identifiera behov och hitta lösningar som passar båda parter. (Ganska likt det vi utvecklare gör) Han fortsatte även med att <strong>alla</strong> anställda är säljande, oavsett yrkesroll.</p>
<h2 class="clear: both; display: block;">Peter Jackson (<a href="http://twitter.com/peteonrails">@peteonrails</a>) &#8211; “Introduction to Geospatial Programming with GeoRuby, PostGIS, and OpenLayers”</h2>
<p>Peter hade en ganska generell genomgång av geospatiell mappning (projektion/geometri) samt en snabb genomgång av projekten <a href="http://georuby.rubyforge.org/">GeoRuby</a>, <a href="http://postgis.refractions.net/">PostGIS</a> och <a href="http://openlayers.org/">OpenLayers</a>.</p>
<h2 class="clear: both; display: block;">Jay Zeschin (<a href="http://twitter.com/jayzes">@jayzes</a>) &#8211; “Avoiding the Seven Year Itch”<img class="alignright size-medium wp-image-805" style="margin-top: 2em;" title="mountain-rb-complexity" src="/wp-content/uploads/2010/10/mountain-rb-complexity-300x139.png" alt="" width="210" height="97" /></h2>
<p>Jay från <a href="http://www.factorylabs.com/">Factory Design Labs</a> avslutade dagens föreläsningar med lite tips för de som sitter fast i långtgående projekt, föråldrade projektmodeller eller legacy-system. Han nämnde även den stora tekniska skuld som (oftast) finns i projekt av den typen.</p>
<blockquote><p>A project is a relationship</p></blockquote>
<ul>
<li>Uppbrott</li>
<li>Tyst lidande</li>
<li>Ta lärdom och gå vidare</li>
</ul>
<blockquote><p>Developers have a vast amount of domain knowledge</p></blockquote>
<p>Jay hade även en lista på vad man bör göra för att rädda ett projekt av denna typ:</p>
<ul>
<li>Snabb återkoppling (<em>test/deploy</em>)</li>
<li>Var hänsynslös</li>
<li>Spikes regelbundet + En titt på verkligheten</li>
<li>Driv engagemang</li>
<li>Sälj in fördelarna</li>
<li>Bygg upp ett förtroende</li>
</ul>
<h2>Quick Left Hackfest</h2>
<p>På kvällen gick vi till <a href="http://quickleft.com/">Quick Left</a> och fortsatte diskussionerna, kodade lite och käkade pizza.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogg.athega.se/2010/10/19/mountain-rb-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mountain.rb &#8211; Dag 1</title>
		<link>http://blogg.athega.se/2010/10/19/mountain-rb-1/</link>
		<comments>http://blogg.athega.se/2010/10/19/mountain-rb-1/#comments</comments>
		<pubDate>Tue, 19 Oct 2010 16:41:45 +0000</pubDate>
		<dc:creator>Andrew Crookston</dc:creator>
				<category><![CDATA[Konferens]]></category>
		<category><![CDATA[Programmeringsspråk]]></category>
		<category><![CDATA[Öppen källkod]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[Öppen Källkod]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Spel]]></category>

		<guid isPermaLink="false">http://blogg.athega.se/?p=783</guid>
		<description><![CDATA[Athegas Peter Hellberg (@peterhellberg) och Andrew Crookston (@acrookston) har precis spenderat några dagar i Boulder, Colorado, USA (karta) för att medverka på konferensen Mountain.rb – &#8221;A ruby pioneers conference&#8221; . Konferensen lockade med flera ledande personligheter inom Ruby communityn som Jim Weirich (@jimweirich) uppfinnare av Rake, Blake Mizerany (@bmizerany) uppfinnare av Sinatra och Evan Phoenix (@evanphx) lead developer [...]]]></description>
			<content:encoded><![CDATA[<h2><a href="http://blogg.athega.se/wp-content/uploads/2010/10/flatirons.jpg"><img class="alignnone size-full wp-image-886" title="Flat Irons" src="http://blogg.athega.se/wp-content/uploads/2010/10/flatirons.jpg" alt="Flat Irons Boulder" width="750" height="374" /></a></h2>
<h2><span style="font-weight: normal; font-size: 13px;">Athegas Peter Hellberg (<a href="http://twitter.com/peterhellberg"><span style="color: #888888;">@peterhellberg</span></a>) och Andrew Crookston (<a href="http://twitter.com/acrookston"><span style="color: #888888;">@acrookston</span></a>) har precis spenderat några dagar i Boulder, Colorado, USA (<a title="Google Maps karta" href="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=Boulder,+CO,+usa&amp;sll=59.297891,18.044232&amp;sspn=0.01238,0.035019&amp;ie=UTF8&amp;hq=&amp;hnear=Boulder,+Colorado&amp;ll=40.014994,-105.335884&amp;spn=0.148562,0.410957&amp;t=h&amp;z=12">karta</a>) för att medverka på konferensen <a href="http://mountainrb.com">Mountain.rb</a> – <em>&#8221;A ruby pioneers conference&#8221; .</em></span></h2>
<p><span style="font-weight: normal; font-size: 13px;"><em> </em>Konferensen lockade med flera ledande personligheter inom Ruby communityn som Jim Weirich (<a href="http://twitter.com/jimweirich">@jimweirich</a>) uppfinnare av <a href="http://en.wikipedia.org/wiki/Rake_(software)">Rake</a>, Blake Mizerany (<a href="http://twitter.com/bmizerany">@bmizerany</a>) uppfinnare av <a href="http://www.sinatrarb.com">Sinatra</a> och Evan Phoenix (<a href="http://twitter.com/evanphx">@evanphx</a>) lead developer på <a href="http://rubini.us/">Rubinius</a> ett alternativt Ruby VM, samt många andra duktiga talare.</span></p>
<p>Första dagen spenderade vi med en promenad i staden där vi bland annat hälsade på hos <a href="http://dojo4.com/">Dojo4</a> – en lokal utvecklingsbyrå, och tog oss upp till en av Boulders mer kända utsiktsplatser, Chautauqua som ligger vid foten av Flat Irons (bilden). Boulder ligger fantastiskt vackert vid 1,655 meter höjd precis där Rocky Mountains möter The Great Plains. Längs med hela den västra horizonten, från norr till syd, tornar bergen rakt upp ur marken som en vägg. Vänder man blicken mot öster ser man bara platt mark så långt ögat når.</p>
<p>Boulder har drygt 100 000 invånare och Colorados officiella (och största) universitet med ca 30 000 studenter – en stad som kanske närmast kan liknas vid Uppsala hemma i Sverige. Trots den lilla storleken har Boulder en stor och aktiv teknik scen med flest systemutvecklare per capita och över 100 s.k. startups. Jämfört med te.x. San Francisco har man en väldigt öppen kultur där man gärna delar med sig av erfarenheter och hjälper aktivt varandra. Regelbundna möten arrangeras där alla får komma.</p>
<p>Eftermiddagen bjöd på registrering med mingel. Arrangören Marty Haught (@<a href="http://twitter.com/mghaught">mghaught</a>) hade till konferensen hittat på en liten <a href="http://mountainrb.com/cardgame">kort-bytar lek</a> där man vid registreringen fick välja mellan fyra karaktärer; Cowboy, Prospector, Homesteader och Trapper. Detta val visade sig ha lite konsekvenser senare under konferensen när vi fick spelreglerna förklarade för oss tillsammans med en uppmaning att skapa valfritt program för att räkna poäng eller göra annat kul med korten vi hade.</p>
<p>Vi träffade bland andra Brennan Dunn (<a href="http://twitter.com/brennandunn">@brennandunn</a>) som bygger ett riktigt intressant öppet källkods-projekt som heter <a href="http://github.com/brennandunn/rack-cms">Rack::CMS</a>, ett lättviktigt CMS som gör det möjligt för icke tekniker att ändra textinnehåll på en hemsida, använder <a href="http://code.google.com/p/redis/">Redis</a> som lagringsmotor. Peter Williams (<a href="http://twitter.com/pezra">@pezra</a>) med <a href="http://resourceful.rubyforge.org/">Resourceful</a>, ett gem för cachning av HTTP requests och Ryan Angilly (<a href="http://twitter.com/angilly">@angilly</a>) lokal entreprenör som bland annat byggt <a href="http://gwop.us/">gwop.us</a> ett mikrobetalningssystem för bloggare.</p>
<p>Läs mer om konferensen i följande blogg poster</p>
<p><a href="http://blogg.athega.se/?p=786">Mountain.rb &#8211; Dag 2</a></p>
<p><a href="http://blogg.athega.se/?p=793">Mountain.rb &#8211; Dag 3</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogg.athega.se/2010/10/19/mountain-rb-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Extensions för EPiServer</title>
		<link>http://blogg.athega.se/2010/03/18/extensions-for-episerver/</link>
		<comments>http://blogg.athega.se/2010/03/18/extensions-for-episerver/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 18:17:29 +0000</pubDate>
		<dc:creator>Markus Ullmark</dc:creator>
				<category><![CDATA[CMS]]></category>
		<category><![CDATA[Kod]]></category>
		<category><![CDATA[Produktivitet]]></category>
		<category><![CDATA[Öppen källkod]]></category>
		<category><![CDATA[EPiServer]]></category>
		<category><![CDATA[Extensions]]></category>

		<guid isPermaLink="false">http://blogg.athega.se/?p=361</guid>
		<description><![CDATA[Jag har arbetat med EPiServer ett bra tag nu, och har sedan .NET 3.5 släpptes med möjligheten att &#8221;bygga ut&#8221; objekt med egna funktioner använt ett gäng sådana för att underlätta mitt dagliga arbete. Jag har haft mina Extensions liggande ett tag på Github men tänkte även skriva en liten post om det här. Ett [...]]]></description>
			<content:encoded><![CDATA[<p>Jag har arbetat med EPiServer ett bra tag nu, och har sedan .NET 3.5 släpptes med möjligheten att &#8221;bygga ut&#8221; objekt med egna funktioner använt ett gäng sådana för att underlätta mitt dagliga arbete. Jag har haft mina Extensions liggande ett tag på Github men tänkte även skriva en liten post om det här.</p>
<p>Ett exempel på en användning skulle t.ex kunna vara att du vill slumpa ut tio av en sidas barn, du vill också se till att bara hämta de som är publicerade. Genom att ha några smarta extensions så skulle du kunna göra såhär.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">PageDataCollection pages <span style="color: #008000;">=</span> CurrentPage.<span style="color: #0000FF;">GetChildren</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> FilterPublished<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>, <span style="color: #008000;">new</span> FilterRandom<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">10</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

<p>Utan Extensions skulle detta kräva ett antal rader kod ytterligare och det är det lilla extra som gör att man trivs med ett API.<br />
Eftersom filterparametern är en <em>params</em> parameter kan man kombinera ihop hur många filter man vill, egengjorda eller de som ingår i EPiServer. FilterRandom är bara ett enkelt filter för att slumpa ut ett antal sidor som jag gjort.<br />
Min klass innehåller ett antal funktioner för att underlätta arbetet med EPiServer så det är bara att ta ner min klass och se om det är något ni gillar.</p>
<ul>
<li><a href="http://github.com/ullmark/cs-extensions/blob/master/EPiServerExtensions.cs">EPiServer Extensions</a></li>
</ul>
<p>Inte nöjd med mina eller vill du ha ännu mer extensions så kan du kolla på EPiCode där man försöker sammanställa bra extensions från epi-utvecklare.</p>
<ul>
<li><a href="https://www.coderesort.com/p/epicode/wiki/Extensions">EPiCode</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blogg.athega.se/2010/03/18/extensions-for-episerver/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MongoDB</title>
		<link>http://blogg.athega.se/2009/07/06/mongodb/</link>
		<comments>http://blogg.athega.se/2009/07/06/mongodb/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 01:50:58 +0000</pubDate>
		<dc:creator>Peter Hellberg</dc:creator>
				<category><![CDATA[Databaser]]></category>
		<category><![CDATA[Kod]]></category>
		<category><![CDATA[Öppen källkod]]></category>
		<category><![CDATA[BSON]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Databas]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blogg.athega.se/?p=268</guid>
		<description><![CDATA[MongoDB är en blandning av nyckel-värde databas (t.ex. Scalaris), dokumentdatabas (t.ex. CouchDB) och relationsdatabas (t.ex. MySQL). Den är skriven i C++ och passar bra för realtidsanalys av webbstatistik (sidvisningar, unika besökare, osv), Sessionsobjekt, Datacachning och mycket mer. Den har inbyggd replikering, automatisk failover och sharding, hög prestanda och den är open source. Internt så sparas [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" title="MongoDB - Scalability/Performance - Depth of Functionality" src="http://blogg.athega.se/wp-content/uploads/2009/07/MongoDB-Scalability_Performance-Depth-of-Functionality.png" alt="MongoDB - Scalability/Performance - Depth of Functionality" width="301" height="210" /></p>
<p>MongoDB är en blandning av nyckel-värde databas (t.ex. <a href="http://code.google.com/p/scalaris/">Scalaris</a>), dokumentdatabas (t.ex. <a href="http://couchdb.apache.org/">CouchDB</a>) och relationsdatabas (t.ex. <a href="http://www.mysql.com/">MySQL</a>).</p>
<p>Den är skriven i C++ och passar bra för realtidsanalys av webbstatistik<br />
(sidvisningar, unika besökare, osv), Sessionsobjekt, Datacachning och mycket mer.</p>
<p>Den har inbyggd replikering, automatisk failover och sharding, hög prestanda och den är open source.</p>
<p>Internt så sparas datan i formatet BSON, vilket är JSON med ett datumformat och möjlighet att spara binärdata.</p>
<h2 id="installation">Installation</h2>
<p>Jag kommer som vanligt att använda Mac OS X och Ruby men det finns förkompilerade paket för de vanligaste operativsystemen:</p>
<ul>
<li>OS X 32 bit</li>
<li>OS X 64 bit</li>
<li>Linux 32 bit</li>
<li>Linux 64 bit</li>
<li>Windows 32 bit</li>
<li>Solaris i86pc (EXPERIMENTAL)</li>
</ul>
<p>Det finns även bindningar till ett flertal olika språk, dock har jag inte sett någon för .NET</p>
<ul>
<li><a href="http://www.mongodb.org/pages/viewpage.action?pageId=133409">C++</a> (Inkluderas med databasen)</li>
<li><a href="http://www.mongodb.org/display/DOCS/Java+Language+Center">Java</a></li>
<li><a href="http://www.mongodb.org/display/DOCS/Perl+Language+Center">Perl</a></li>
<li><a href="http://www.mongodb.org/display/DOCS/PHP+Language+Center">PHP</a></li>
<li><a href="http://www.mongodb.org/display/DOCS/Python+Language+Center">Python</a></li>
<li><a href="http://www.mongodb.org/display/DOCS/Ruby+Language+Center">Ruby</a></li>
</ul>
<p>Installationen var helt smärtfri, bara att ladda ner senaste tarbollen (<a href="http://downloads.mongodb.org/osx/mongodb-osx-x86_64-0.9.5.tgz">mongodb-osx-x86_64-0.9.5</a>) och packa upp den på valfri plats.</p>
<p>Man behöver skapa en datakatalog (standard är <code>/data/db</code>) och sen starta servern med</p>
<p><code style="padding: 0 0.5em; color: #fff; background-color: #000;">./mongod --dbpath [DATAKATALOGEN]</code></p>
<p>Nu lyssnar databasen på port <code>27017</code> och det finns ett webbgränssnitt på port <code>28017</code>.</p>
<p>På Rubysidan behövde jag bara installera paketet <code>mongodb-mongo</code> från <a href="http://github.com/mongodb/mongo/tree/master">GitHub</a> med RubyGems:</p>
<p><code style="padding: 0 0.5em; color: #fff; background-color: #000;">sudo gem install mongodb-mongo</code></p>
<h2 id="dags_fr_lite_kod">Dags för lite kod</h2>
<p>Att ansluta till databasen:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span>
&nbsp;
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'rubygems'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'mongo'</span>
&nbsp;
db = <span style="color:#6666ff; font-weight:bold;">XGen::Mongo::Driver::Mongo</span>.<span style="color:#9900CC;">new</span>.<span style="color:#9900CC;">db</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;mydb&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>MongoDB har konceptet <code>collections</code> för likartade dokument. (Eller olikartade.. det bestämmer du helt själv) Man kan likna dem vid tabeller.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;"># Hämtar en collection, den skapas om den inte redan finns</span>
coll = db.<span style="color:#9900CC;">collection</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;testCollection&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># Man kan stoppa in olika sorters dokument</span>
coll.<span style="color:#9900CC;">insert</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#ff3333; font-weight:bold;">:name</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Peter&quot;</span>, <span style="color:#ff3333; font-weight:bold;">:address</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#ff3333; font-weight:bold;">:city</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Stockholm&quot;</span> <span style="color:#006600; font-weight:bold;">&#125;</span> <span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
coll.<span style="color:#9900CC;">insert</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#ff3333; font-weight:bold;">:name</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Velociraptor&quot;</span>, <span style="color:#ff3333; font-weight:bold;">:top_speed</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;25 m/s&quot;</span>,
              <span style="color:#ff3333; font-weight:bold;">:can</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span>
                <span style="color:#ff3333; font-weight:bold;">:open_doors</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span>,
                <span style="color:#ff3333; font-weight:bold;">:turn_at_any_angle_at_any_velocity</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span>
              <span style="color:#006600; font-weight:bold;">&#125;</span>
            <span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># Man kan sedan hämta ut datat ur databasen med metoden find_first.</span>
peter  = coll.<span style="color:#9900CC;">find_first</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:name</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'Peter'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
raptor = coll.<span style="color:#9900CC;">find_first</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:top_speed</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'25 m/s'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># Man kan även hämta alla dokument i en collection</span>
coll.<span style="color:#9900CC;">find</span>.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>doc<span style="color:#006600; font-weight:bold;">|</span>
  <span style="color:#CC0066; font-weight:bold;">puts</span> doc.<span style="color:#9900CC;">inspect</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<h2 id="vidare_lsning">Vidare läsning</h2>
<p>Jag har bara skrapat lite lätt på ytan av allt som går att göra med MongoDB, om du tycker att det verkar intressant så rekomenderar jag följande länkar:</p>
<ul>
<li><a href="http://www.slideshare.net/pengwynn/mongodb-ruby-document-store-that-doesnt-rhyme-with-ouch">MongoDB &#8211; Ruby document store that doesn’t rhyme with ouch</a> (Presentation av Wynn Netherland)</li>
<li><a href="http://mongodb.org">MongoDB</a> (Wiki)</li>
<li><a href="http://en.wikipedia.org/wiki/BSON">BSON-formatet</a> (Wikipedia)</li>
<li><a href="http://twitter.com/mongodb">@mongodb</a> (Twitter)</li>
<li><a href="http://www.10gen.com/">10gen</a> (Företaget som sponsrar utvecklingen)</li>
<li><a href="http://www.mbeckler.org/velociraptors/">Solution to XKCD Velociraptors Problem #2</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blogg.athega.se/2009/07/06/mongodb/feed/</wfw:commentRss>
		<slash:comments>1</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 [...]]]></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>
		<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>
	</channel>
</rss>

