<?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</title>
	<atom:link href="http://blogg.athega.se/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>Kanban &#8211; Classes of Service</title>
		<link>http://blogg.athega.se/2010/11/19/kanban-classes-of-service/</link>
		<comments>http://blogg.athega.se/2010/11/19/kanban-classes-of-service/#comments</comments>
		<pubDate>Thu, 18 Nov 2010 22:15:34 +0000</pubDate>
		<dc:creator>Mats Ygfors</dc:creator>
				<category><![CDATA[Kanban]]></category>
		<category><![CDATA[Lean]]></category>
		<category><![CDATA[WIP]]></category>

		<guid isPermaLink="false">http://blogg.athega.se/?p=941</guid>
		<description><![CDATA[Jag arbetar just nu med ett IT-förvaltnings-team där vi kör Kanban. Med en Kanban-tavla visualiserar vi arbetet och identifierar potentiella flaskhalsar. Vi arbetar löpande med problem, orsak och förbättring. Vi har den senaste tiden börjat arbeta med klasser på aktiviteter/tjänster. Vi arbetar frekvent och övervägande med saker som har fasta leveransdatum. Vissa gånger har det stor [...]]]></description>
			<content:encoded><![CDATA[<p>Jag arbetar just nu med ett IT-förvaltnings-team där vi kör Kanban. Med en Kanban-tavla visualiserar vi arbetet och identifierar potentiella flaskhalsar. Vi arbetar löpande med problem, orsak och förbättring. Vi har den senaste tiden börjat arbeta med klasser på aktiviteter/tjänster.</p>
<p>Vi arbetar frekvent och övervägande med saker som har fasta leveransdatum. Vissa gånger har det stor betydelse för hela verksamheten att vi håller leveransdatum. Andra gånger är det snarare önskvärt från beställaren att det är klart ett visst datum. På en tavla med en stor och dynamisk backlog kan det vara svårt för beställare att prioritera när de måste hålla reda på alla leveransdatum och samtidigt hur viktiga det är att datumet hålls.</p>
<p><strong>Kostnad</strong><br />
Vi tittar på vad kostnaden blir om vi inte levererar till utsatt datum. Kommer det kosta väldigt mycket eller finns det lite utrymme för justering av planerad leverans. För att tydliggöra detta använder vi nedan klassificeringar (Baserade på David J Anderson beskrivning av Classes Of Service) Vi har fritt översatt vissa ord och gjort en anpassning som passar oss.</p>
<ul>
<li><strong>UTFÖR</strong><br />
Först och främst har en en utför-klass. Aktiviteter som klassas som utför ska påbörjas så fort som möjligt och vi ska lägga så mycket resurser vi behöver för att på snabbast möjliga sätt ta aktiviteten i mål. Vi har inte många men när dom kommer kan det handla om produktionsstörningar som gör att verksamheten inte kan utföra sitt arbete. Dessa rör sig i en prioriterad fil på tavlan. Går ej att planera, måste utföras direkt när dom dyker upp.</li>
<li><strong>KRITISKT DATUM</strong><br />
Sen har vi aktiviteter som har ett kritiskt leveransdatum. Dessa aktiviteter har hög affärspåverkan om vi inte håller leveransen. Dessa aktiviteter är UTFÖR-aktiviteter men med skillnaden att leverandatum är i framtiden. Behöver inte påbörjas direkt. Går att planera.</li>
<li><strong>FAST DATUM</strong><br />
Aktiviteter där affärspåverkan om vi bryter leveransdatumet blir ringa klassas som FAST DATUM. Dessa har ett tydligt leveransdatum men ofta hänger leveransdatumet mer ihop med planerade releaser än stora kostnader för verksamheten. Vi har möjlighet att i värsta fall skjuta på leveransen av dessa en kortare tid.</li>
<li><strong>STANDARD</strong><br />
Detta är aktiviteter som ska göras men det finns inget datum då dom måste vara klara. Alla tjänar på att göra dom så fort som möjligt men dom har inget fast leveransdatum. Det kan till exempel vara förebyggande aktiviteter för att sänka risker eller förenkla/effektivisera arbetet.</li>
</ul>
<p>Hur får vi standardaktiviteter att bli utförda om det hela tiden beställs fasta och kritiska-datum-aktiviteter? Att sätta begränsning i hur mycket arbete som får pågå samtidigt är ett sätt. När pågående arbete(WIP) begränsas kan detta ske per klass. T.ex. sätter vi WIP-Limit (Begränsningen av hur många aktiviteter som får vara påbörjade samtidigt) olika för de olika klasserna.</p>
<p>exempel:</p>
<ul>
<li>WIP-Limit 1 10% - UTFÖR</li>
<li>WIP-Limit 4 40% - KRITISKA DATUM</li>
<li>WIP-Limit 4 40% - FAST DATUM</li>
<li>WIP-Limit 1 10% - STANDARD</li>
</ul>
<p>Det innebär att när vi planerar aktiviteter tar vi automatiskt in STANDARD-aktiviteter när WIP-Limit för de övriga är fylld. Vi kan även procentuellt styra hur mycket aktiviteter vi måste arbeta med som är standard genom att justera WIP-Limit. Har vi en stor mängd förbättringsåtgärder som verkligen behöver göras kanske nedan fördelning gör att vi får mer av dessa proaktiva aktiviteter genomförda.</p>
<ul>
<li>WIP-Limit 1 10% - UTFÖR</li>
<li>WIP-Limit 2 20% - KRITISKA DATUM</li>
<li>WIP-Limit 2 20% - FAST DATUM</li>
<li>WIP-Limit 5 50% - STANDARD</li>
</ul>
<p>Så länge vi är noga med att vår totala arbetsbelastningen ligger justerad/med marginal efter vår förmåga att leverera har vi har möjlighet att göra klart aktiviteter i stället för att bara påbörja nya hela tiden. Då håller vi våra cykel-tider inom förväntade och uppskattade värden. Vi försöker nu noggrant klassificera allt samtidigt som vi diskuterar med beställare och beskriver våra klassers cykel-tider.  Det hoppas vi gör vår leveranskapacitet tydligare och lättare att förstå.</p>
<p>// Mats</p>
]]></content:encoded>
			<wfw:commentRss>http://blogg.athega.se/2010/11/19/kanban-classes-of-service/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>lunch.athega.se</title>
		<link>http://blogg.athega.se/2010/10/30/lunch-athega-se/</link>
		<comments>http://blogg.athega.se/2010/10/30/lunch-athega-se/#comments</comments>
		<pubDate>Sat, 30 Oct 2010 20:23:59 +0000</pubDate>
		<dc:creator>Peter Hellberg</dc:creator>
				<category><![CDATA[Athega Code Base]]></category>
		<category><![CDATA[Kod]]></category>

		<guid isPermaLink="false">http://blogg.athega.se/?p=927</guid>
		<description><![CDATA[Under Athega Code Base byggde jag en helt ny version av en webbapplikation som jag för två år sedan byggde i Ruby on Rails och Geokit. Denna gång valde jag att använda ramverket Sinatra, databasen MongoDB (genom Mongomatic) samt att hosta allt på Heroku och MongoHQ. Vad jag blev mest imponerad över var det inbyggda [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://lunch.athega.se/"><img class="size-full wp-image-929 alignleft" title="Lunch" src="http://blogg.athega.se/wp-content/uploads/2010/10/lunch-start-page.png" alt="Lunch, startsida" width="331" height="616" /></a></p>
<p><a href="http://lunch.athega.se/#/restaurants/matmekka"><img class="alignright size-full wp-image-928" title="Matmekka" src="http://blogg.athega.se/wp-content/uploads/2010/10/lunch-matmekka.png" alt="Matmekka" width="331" height="616" /></a></p>
<p style="clear: both; margin-top: 1em;">
Under Athega Code Base byggde jag en helt ny version av en webbapplikation som jag för två år sedan byggde i <a href="http://rubyonrails.org/">Ruby on Rails</a> och Geokit. Denna gång valde jag att använda ramverket <a href="http://www.sinatrarb.com/">Sinatra</a>, databasen <a href="http://www.mongodb.org/">MongoDB</a> (genom <a href="http://mongomatic.com/">Mongomatic</a>) samt att hosta allt på <a href="http://heroku.com/">Heroku</a> och <a href="https://mongohq.com/home">MongoHQ</a>.</p>
<p>Vad jag blev mest imponerad över var det inbyggda stödet för <a href="http://www.mongodb.org/display/DOCS/Geospatial+Indexing"><em>geospatial indexing</em></a> i MongoDB samt hur enkelt det var att jobba med Heroku.</p>
<p>Gränssnittet är utvecklat med hjälp av biblioteket <a href="http://jquerymobile.com/">jQuery Mobile</a> och det har visat sig fungera mycket bättre än <a href="http://www.jqtouch.com/">jQTouch</a> som jag tidigare har använt. Vad jag speciellt gillade var den inbyggda routern.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogg.athega.se/2010/10/30/lunch-athega-se/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>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>Nordic Ruby</title>
		<link>http://blogg.athega.se/2010/05/28/nordic-ruby/</link>
		<comments>http://blogg.athega.se/2010/05/28/nordic-ruby/#comments</comments>
		<pubDate>Fri, 28 May 2010 01:00:38 +0000</pubDate>
		<dc:creator>Peter Hellberg</dc:creator>
				<category><![CDATA[Konferens]]></category>

		<guid isPermaLink="false">http://blogg.athega.se/?p=722</guid>
		<description><![CDATA[Förra fredagen åkte jag, Robert och Mats ner till Göteborg för att gå på konferensen Nordic Ruby. Lördag Standing On the Shoulders of Giants Corey Haines inledde konferensen med en uppmaning om att reflektera över hur och varför man arbetar som man gör. “Message passing, not objects” “Lotus notes is a good document database” Cucumber [...]]]></description>
			<content:encoded><![CDATA[<p>Förra fredagen åkte jag, Robert och Mats ner till Göteborg för att gå på konferensen <a href="http://nordicruby.org">Nordic Ruby</a>.</p>
<h2 id="lrdag">Lördag</h2>
<h3 id="standing_on_the_shoulders_of_giants">Standing On the Shoulders of Giants</h3>
<p><a href="http://twitter.com/coreyhaines">Corey Haines</a> inledde konferensen med en uppmaning om att reflektera över hur och varför man arbetar som man gör.</p>
<blockquote>
<p style="text-align: left;">“Message passing, not objects”<br />
“Lotus notes is a good document database”</p>
</blockquote>
<h3 id="cucumber_inside">Cucumber Inside</h3>
<p><a href="http://twitter.com/aslak_hellesoy">Aslak Hellesøy</a> höll konferensens andra föreläsning och ämnet var inte helt oväntat testramverket <a href="http://cukes.info/">Cucumber</a> samt dess språk Gherkin vilket nu har extraherats till en <a href="http://rubygems.org/gems/gherkin">gem</a>.</p>
<p>Den imponerande prestandaökningen i Cucumber den senaste tiden beror på att man har bytt ut <a href="http://treetop.rubyforge.org/">TreeTop</a> mot <a href="http://www.complang.org/ragel/">Ragel</a>.</p>
<p>Aslak nämnde även hur <a href="http://wiki.github.com/aslakhellesoy/cucumber/hooks">hooks</a> i Cucumber fungerar.</p>
<h3 id="neo4jrb_the_benefits_of_graph_database">Neo4j.rb &#8211; The Benefits of Graph Database</h3>
<p><a href="http://twitter.com/ronge">Andreas Ronge</a> berättade om sitt projekt <a href="http://github.com/andreasronge/neo4j">Neo4j.rb</a> vilket är en grafdatabas för <a href="http://jruby.org/">JRuby</a>.</p>
<ul>
<li>Inbäddad</li>
<li>ACID</li>
<li>Inga scheman</li>
<li>Inga externa beroenden</li>
<li>Enbart skrivlås</li>
</ul>
<p>De två javabibliotek som är inblandade är <a href="http://neo4j.org/">Neo4j</a> samt <a href="http://lucene.apache.org/">Lucene</a>. Neo4j inkluderar ett flertal algoritmer, t.ex. <a href="http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm">Dijkstra</a>.</p>
<p>Möjligheten att traversera djupa relationsgrafer verkar ha ett ganska begränsat användningsområde, men när man väl behöver göra det så är det säkerligen mycket kraftfullt.</p>
<h3 id="rubyists_you_can_write_javascript_again">Rubyists, you can write JavaScript again</h3>
<p>Priset för konferensens effektfullaste introduktion måste gått till <a href="http://twitter.com/drnic">Dr Nic</a> a.k.a. Iron Man.</p>
<p>Han började med att nämna att man kan köra JavaScript i Ruby med hjälp av <a href="http://github.com/jbarnette/johnson">Johnson</a> (<a href="http://www.mozilla.org/js/spidermonkey/">Mozilla SpiderMonkey</a>) och att man kan använda <a href="http://github.com/smparkes/capybara-envjs">capybara-envjs</a> för att testa sina javascript på serversidan. Men efter det var det CoffeeScript som gällde.</p>
<blockquote>
<p style="text-align: left;">“Capybara because it’s AWESOME”</p>
</blockquote>
<p><a href="http://jashkenas.github.com/coffee-script/">CoffeeScript</a> är i korta drag:</p>
<ul>
<li>De bra delarna i JavaScript</li>
<li>Det <a href="http://haml-lang.com/">Haml</a> är för HTML och <a href="http://sass-lang.com/">Sass</a> är för CSS</li>
<li>Går att kombinera med alla JavaScript-bibliotek (<a href="http://jquery.com/">jQuery</a>!)</li>
<li>Kompilatorn är skriven i CoffeeScript! (Går alltså att köra i en webbläsare)</li>
<li>Implicita returvärden</li>
<li>Inga onödiga tecken</li>
<li>Går att köra i <a href="http://nodejs.org/">Node.js</a></li>
</ul>
<h3 id="enough_design">Enough Design</h3>
<p><a href="http://twitter.com/imf">Ian McFarland</a> från <a href="http://pivotallabs.com/">Pivotal Labs</a> pratade om agila designprocesser och hur viktigt det är med en kort “feedback loop”.</p>
<p>Han påpekade att det är viktigt att iterera över problem, oavsett storlek.</p>
<p>En bra design är:</p>
<ul>
<li>Modulär</li>
<li>Principfast</li>
<li>Regelbaserad</li>
<li>UX &gt; Pixlar!</li>
</ul>
<h3 id="the_ruby_advantage_metaprogramming_and_dsls_pdf_22mb">The Ruby advantage &#8211; metaprogramming and DSLs (<a href="http://github.com/niclasnilsson/presentation_ruby_metaprog_dsls/raw/master/dsl-metaprogramming-ruby.pdf">.pdf</a>, 22MB)</h3>
<p>Man kan inte bli annat än imponerad av <a href="http://twitter.com/niclasnilsson">Niclas Nilsson</a> när han så “vårdslöst” tvingar Ruby att bete sig som han vill.</p>
<p>Han berättade om hur man med lite fantasi kan bygga ett internt DSL utan att för den skull ha tillgång till Rubys <a href="http://en.wikipedia.org/wiki/Abstract_syntax_tree">AST</a>.</p>
<p>Han visade även sin gem <a href="http://github.com/niclasnilsson/properties">properties</a>.</p>
<h2 id="middag_p_soho">Middag på SoHo</h2>
<p>Lördagskvällen spenderade jag med att diskutera <a href="http://hackerspaces.org/">hackerspaces</a>, användning av <a href="http://rad.rubyforge.org/">Ruby</a> för utveckling mot <a href="http://www.arduino.cc/">Arduino</a>, mikrobryggerier i USA och mycket annat.</p>
<h2 id="sndag">Söndag</h2>
<h3 id="from_artist_to_programmer">From artist to programmer</h3>
<p>Dagens första föreläsning stod <a href="http://twitter.com/keavy">Keavy McMinn</a> för, och hon pratade om likheter (och skillnader) mellan konstnärskap och programmering.</p>
<blockquote>
<p style="text-align: left;">“Just make”</p>
</blockquote>
<h4 id="ngra_av_hennes_punkter">Några av hennes punkter</h4>
<ul>
<li>Var öppen för förändringar</li>
<li>Det går att bygga något utan initial finansiering</li>
<li>Vi utvecklas genom reflektion</li>
</ul>
<h3 id="the_mongodb_effect">The MongoDB Effect</h3>
<p>Jag hade gärna sett att <a href="http://twitter.com/modetojoy">Durran Jordan</a> och <a href="http://twitter.com/leshill">Les Hill</a> hade fokuserat lite mer på <a href="http://mongoid.org/">Mongoid</a> än vad de gjorde. Vi vet redan att <a href="http://www.mongodb.org/">MongoDB</a> är häftigt.</p>
<p>Enligt Durran borde man ALLTID använda MongoDB.</p>
<h4 id="mongoid">Mongoid</h4>
<ul>
<li>Rails 2 och Rails 3</li>
<li>Atomiska operationer</li>
<li>Stora dataset</li>
<li>Grymt kriterie API</li>
<li>Scopes som tar block</li>
<li>Master/Slave</li>
</ul>
<h3 id="solid_ruby">SOLID Ruby</h3>
<p>Jag hade verkligen sett fram emot <a href="http://twitter.com/jimweirich">Jim Weirich</a> föreläsning om <a href="http://en.wikipedia.org/wiki/Solid_%28object-oriented_design%29">SOLID</a> och jag blev inte besviken.</p>
<h4 id="ngra_av_hans_punkter">Några av hans punkter</h4>
<ul>
<li>Fördela ansvaret</li>
<li>Monkey patchning i bibliotek är dåligt (Arv framför öppna klasser)</li>
<li>Protokoll är viktiga</li>
</ul>
<h3 id="artificial_stupidity_adding_smarts_to_yer_kode_with_a_little_machine_learning">Artificial stupidity, adding smarts to yer kode with a little machine learning</h3>
<p>Konferensens tyngsta föreläsning (med råge) stod <a href="http://twitter.com/daksis">Randall Thomas</a> från <a href="http://www.engineyard.com/">Engine Yard</a> för.</p>
<p><img class="alignnone size-full wp-image-730" title="The future is about information, not data" src="http://blogg.athega.se/wp-content/uploads/2010/05/the_future_is_about_information.jpg" alt="" width="750" height="376" /></p>
<p>Ämnet var datautvinning genom att använda statistikspråket <a href="http://www.r-project.org/">R</a> och <a href="http://rubyforge.org/projects/rsruby/">RSRuby</a>. Den enligt mig intressantaste delen av föreläsningen bestod i användningen av en <a href="http://en.wikipedia.org/wiki/Support_vector_machine">support vector machine</a> (KSVM i R) för att gruppera data och sedan använda detta för rekomendationer.</p>
<p>Böcker: Super Crunchers, Introductory Statistics with R</p>
<h3 id="software_for_the_human_animal">Software for the Human Animal</h3>
<p><a href="http://twitter.com/hcatlin">Hampton Catlin</a> pratade om skillnaderna mellan manlig och kvinnlig design. Att vi inte är mycket mer än djur och att Internet är den nya vildmarken.</p>
<p>Han hävdade att vi människor generellt sett är självorganiserande och framförallt trevliga. Vi borde alltså sluta motverka på de fåtal användare som förstör och istället uppmuntra och belöna de användare som uppför sig.</p>
<p>Det finns inga dumma användare, bara dåliga gränssnitt som gör dem dumma.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogg.athega.se/2010/05/28/nordic-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Frozen Rails</title>
		<link>http://blogg.athega.se/2010/05/09/frozen-rails/</link>
		<comments>http://blogg.athega.se/2010/05/09/frozen-rails/#comments</comments>
		<pubDate>Sun, 09 May 2010 21:53:46 +0000</pubDate>
		<dc:creator>Peter Hellberg</dc:creator>
				<category><![CDATA[Konferens]]></category>
		<category><![CDATA[CouchDB]]></category>
		<category><![CDATA[Cucumber]]></category>
		<category><![CDATA[Frozen Rails]]></category>
		<category><![CDATA[Helsingfors]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[Rack]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://blogg.athega.se/?p=655</guid>
		<description><![CDATA[I fredags gick konferensen Frozen Rails av stapeln i Helsingfors och Athega var självklart representerade. Rails at GitHub (Chris Wanstrath, @defunkt) Konferensen inleddes av Chris Wanstrath som gick igenom hur Ruby on Rails används på GitHub. Vi fick även reda på hur de använder Git (grit, smoke, chimney) och hur de hanterar meddelandeköer (resque). Några [...]]]></description>
			<content:encoded><![CDATA[<p>I fredags gick konferensen <a href="http://frozenrails.eu">Frozen Rails</a> av stapeln i Helsingfors och Athega var självklart representerade.</p>
<h2><a href="http://www.slideshare.net/err/inside-github">Rails at GitHub</a> (Chris Wanstrath, <a href="http://twitter.com/defunkt">@defunkt</a>)</h2>
<p>Konferensen inleddes av <a href="http://chriswanstrath.com/">Chris Wanstrath</a> som gick igenom hur Ruby on Rails används på <a href="http://github.com/">GitHub</a>. Vi fick även reda på hur de använder Git (<a href="http://github.com/mojombo/grit">grit</a>, smoke, chimney) och hur de hanterar meddelandeköer (<a href="http://github.com/defunkt/resque">resque</a>).</p>
<p>Några av projekten som nämndes:</p>
<ul>
<li><a href="http://github.com/github/albino/">albino</a> för syntax highlighting genom (front för <a href="http://pygments.org/docs/cmdline/">pygmentize</a>)</li>
<li><a href="http://faker.rubyforge.org/">faker</a> för att generera påhittad data: namn, adresser, telefonnummer</li>
<li>Rack HTTP servern <a href="http://unicorn.bogomips.org/">Unicorn</a></li>
</ul>
<h2>The Plataforma Way (José Valim, <a href="http://twitter.com/josevalim">@josevalim</a>)</h2>
<p>Dagens andra föreläsning hölls av <a href="http://twitter.com/josevalim">José Valim</a> från Plataforma tecnologia. José pratade om autentiseringslösningen <a href="http://blog.plataformatec.com.br/tag/devise/">Devise</a> (bygger på <a href="http://wiki.github.com/hassox/warden/">Warden</a>), domänspråket simple_form (inspirerat av <a href="http://github.com/justinfrench/formtastic">Formtastic</a>) samt <a href="http://github.com/plataformatec/responders">Responders</a> vilket är en utbyggnad av respond_with i Rails 3. Lite rörig föreläsning men med många intressanta projekt, kommer speciellt hålla koll på Devise.</p>
<div>
<h2><a href="http://www.slideshare.net/mdirolf/mongodb-at-frozenrails">An Introduction to MongoDB</a> (Mike Dirolf, <a href="http://twitter.com/mdirolf">@mdirolf</a>)</h2>
</div>
<p>Jag har sedan jag bloggade om MongoDB <a href="http://blogg.athega.se/2009/07/06/mongodb/">första gången</a> varit intresserad av projektet och nu fick vi verkligen en bra genomgång av <a href="http://www.10gen.com/">10gen</a>’s Michael Dirolf.</p>
<p>Översikt av MongoDB:</p>
<ul>
<li>Atomiska operationer per dokument <em>(:$push)</em></li>
<li>Dynamiska frågor</li>
<li>Hög prestanda (10% långsammare än <a href="http://memcached.org/">memcached</a>, snabbare än <a href="http://couchdb.apache.org/">CouchDB</a>)</li>
<li>Master/Slave failover</li>
<li>Auto-sharding <em>(snart)</em></li>
<li>Servern har en <a href="http://www.mongodb.org/display/DOCS/Server-side+Code+Execution#Server-sideCodeExecution-Storingfunctionsserverside">JavaScript parser</a></li>
</ul>
<h2>Mobile Web Apps with Rails 3 (Yehuda Katz, <a href="http://twitter.com/wycats">@wycats</a>)</h2>
<p><img class="alignnone size-full wp-image-661" title="Yehuda Katz på Frozen Rails" src="http://blogg.athega.se/wp-content/uploads/2010/05/Screen-shot-2010-05-09-at-23.34.43-.png" alt="Yehuda Katz på Frozen Rails" width="750" height="493" /></p>
<p>Även om jag sett föreläsningen tidigare (Efter <a href="http://phillyemergingtech.com/">Philly ETE, Emerging Technologies for the Enterprise</a>) så var det bra att få se den live så att säga.</p>
<p>Några av punkterna som <a href="http://yehudakatz.com/">Yehuda</a> berörde:</p>
<ul>
<li>HTML 5 LocalStorage (samt Offline API)</li>
<li>Föredra gammal data</li>
<li>HTML == static asset</li>
<li>Betrakta webbläsaren som en API-klient</li>
<li>“Sip, don’t gulp”</li>
</ul>
<p>Projekt:</p>
<ul>
<li><a href="http://github.com/wycats/rack-offline">Rack::Offline</a></li>
<li><a href="http://github.com/wycats/jquery-offline">jQuery Offline</a></li>
<li><a href="http://github.com/jquery/jquery-tmpl">jQuery tmpl</a></li>
<li><a href="http://github.com/janl/mustache.js">Mustache.js</a></li>
</ul>
<h2>Cucumbered (Joseph Wilk, <a href="http://twitter.com/josephwilk">@josephwilk</a>)</h2>
<p style="text-align: right;">
<img class="size-full" title="Frozen Rails Cucumbered" src="http://blogg.athega.se/wp-content/uploads/2010/05/frozen_rails_cucumbered.jpg" alt="Frozen Rails Cucumbered" width="750" height="258" /><br />
<small>(Foto: <a href="http://twitter.com/chrisco">Chris Comella</a>)</small>
</p>
<p>Den bästa föreläsningen på hela konferensen stod <a href="http://blog.josephwilk.net/">Joseph Wilk</a> för, ämnet var <a href="http://cukes.info/">Cucumber</a> och mer specifikt hur man ser till att testerna går så fort som möjligt. (Cucumber 0.7 är för övrigt så galet snabb att det inte ens är roligt nu när de bytt från <a href="http://treetop.rubyforge.org/">TreeTop</a> till <a href="http://www.complang.org/ragel/">Ragel</a>)</p>
<p>Några av Josephs punkter:</p>
<ul>
<li>Cukover vs. Autotest</li>
<li><a href="http://github.com/mynyml/harmony">Harmony</a> (Frontar Trace/SpiderMonkey i Ruby)</li>
<li>cucumber &#8211;format</li>
</ul>
<h2><a href="http://www.slideshare.net/jweiss/couchdb-on-rails-frozenrails-2010">CouchDB on Rails</a> (Jonathan Weiss, <a href="http://twitter.com/jweiss">@jweiss</a>)</h2>
<p>Jonathan hade ett digert uppdrag framför sig då konferensdeltagarna direkt jämförde allt med hur det fungerar i MongoDB. Tyvärr var exemplen lite för enkla och visade inte riktigt på styrkan i CouchDB, snarare att det är “svårare” att ställa enkla frågor än med SQL då man måste implementera map/reduce i JavaScript själv. (Vilket är en <strong>BRA</strong> grej när man gör lite mer avancerade saker)</p>
<p>Några av punkterna:</p>
<ul>
<li>“Built for the web”</li>
<li>Skalar bra</li>
<li>Inga konstigheter: HTTP, JavaScript, JSON</li>
<li>Revisioner (id + rev)</li>
<li>Inga collections (på gott och ont)</li>
<li>“JavaScript, easier than SQL”</li>
<li>Värdet kan vara komplex JSON</li>
<li>Nycklarna kan vara arrayer</li>
<li>Statiska frågor (map/reduce)</li>
<li>Compaction of B-tree via HTTP request (tänker inte ens försöka översätta <img src='http://blogg.athega.se/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li>HTTP cache (<a href="http://varnish-cache.org/">Varnish</a>) och lastbalansering (<a href="http://haproxy.1wt.eu/">HAProxy</a>, <a href="http://nginx.org/">nginx</a>)</li>
<li>Inbäddad <a href="http://lucene.apache.org">Lucene</a> (<strong>Killer feature?</strong>)</li>
</ul>
<h2><a href="http://www.slideshare.net/carllerche/frozen-rails-slides">Rails 3: Tasty Burgers</a> (Carl Lerche, <a href="http://twitter.com/carllerche">@carllerche</a>)</h2>
<ul>
<li><a href="http://gembundler.com/">Bundler</a> (Isolation av gems)</li>
<li>Möjligt att använda <a href="http://jquery.com">jQuery</a> i Rails!</li>
<li>Routern kan nu ha valfria segment, scopes och HTTP verb</li>
<li>Rack överallt!</li>
<li><a href="http://github.com/rails/rails_upgrade">rails_upgrade</a></li>
</ul>
<h2>Perfectionism (Jarkko Laine, <a href="http://twitter.com/jarkko">@jarkko</a>)</h2>
<p>Priset för den nervösaste killen på hela konferensen måste ha gått till Jarkko. Förutom detta var det en grym sista föreläsning om hur vi perfektionister ofta har problem med att skeppa något innan det är helt <strong>perfekt</strong>. (vilket det kanske aldrig blir) Han rekomenderade även boken <a href="http://www.cluetrain.com/book/index.html">The Cluetrain Manifesto</a> (hela bokens text)</p>
<p><a href="http://blogg.athega.se/wp-content/uploads/2010/05/perfection.png"><img class="alignnone size-full wp-image-656" title="SHIP!" src="http://blogg.athega.se/wp-content/uploads/2010/05/perfection.png" alt="Perfection, Minimally Viable Product, Markets are conversations, Ship!" width="750" height="690" /></a></p>
<p><span style="color: #999999;">Oh, hela konferensen filmades så när filmerna dyker upp på nätet så länkar jag dem här.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://blogg.athega.se/2010/05/09/frozen-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unobtrusive JavaScripts</title>
		<link>http://blogg.athega.se/2010/04/10/unobtrusive-javascripts/</link>
		<comments>http://blogg.athega.se/2010/04/10/unobtrusive-javascripts/#comments</comments>
		<pubDate>Sat, 10 Apr 2010 14:31:05 +0000</pubDate>
		<dc:creator>Markus Ullmark</dc:creator>
				<category><![CDATA[Kod]]></category>
		<category><![CDATA[Webbutveckling]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://blogg.athega.se/?p=633</guid>
		<description><![CDATA[I fredags så började jag och en kollega hastigt prata lite angående kodkonventioner vilket alltid får igång mig då jag älskar att ha rent och strukturerat i mina projekt. Därför kom jag på att jag kan skriva en liten bloggpost om hur jag tänker när jag lägger upp mina javascript när jag kodar gränssnitt. Jag [...]]]></description>
			<content:encoded><![CDATA[<p>I fredags så började jag och en kollega hastigt prata lite angående kodkonventioner vilket alltid får igång mig då jag älskar att ha rent och strukturerat i mina projekt. Därför kom jag på att jag kan skriva en liten bloggpost om hur jag tänker när jag lägger upp mina javascript när jag kodar gränssnitt.</p>
<p>Jag är ett stort fan av <a href="http://en.wikipedia.org/wiki/Unobtrusive_JavaScript">Unobtrusive Javascripts</a> där man strävar efter att helt separera scriptdelen från sin html-content. Jag använder i dagsläget nästan alltid jQuery när jag kodar javascript. Jag tänker inte gå inte gå in djupare på hur det fungerar i denna bloggpost. Generellt när jag jobbar strävar jag åt <a href="http://en.wikipedia.org/wiki/Domain-driven_design">DDD</a>-hållet så att alla namespaces innehåll enkelt kan förstås av kunden, även om han inte har någon teknisk kunskap. (Självklart ligger oerhört mycket mer i konceptet DDD)</p>
<p>I mitt scenario jobbar jag med ett projekt som kallas &#8221;Acme&#8221;. Jag utgår därför från en scriptfil som jag döper till <b>&#8221;acme.js&#8221;</b>. I den lägger jag funktionalitet som är gemensam för hela sidan. Den skulle kunna se ut såhär;</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> acme <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>
&nbsp;
	<span style="color: #006600; font-style: italic;">// Initierare</span>
	<span style="color: #003366; font-weight: bold;">var</span> init <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: #006600; font-style: italic;">// Initiera eventuella kontroller etc.</span>
		<span style="color: #006600; font-style: italic;">// Anropa eventuella andra privata funktioner</span>
		somePrivateFunction<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: #339933;">,</span> 
&nbsp;
	<span style="color: #006600; font-style: italic;">// Denna funktionen blir &quot;privat&quot; eftersom den inte returneras</span>
	somePrivateFunction <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>
&nbsp;
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #009900;">&#123;</span>
		init<span style="color: #339933;">:</span> init
	<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
$<span style="color: #009900;">&#40;</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>
	acme.<span style="color: #660066;">init</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>När denna scriptfil körs på sidan kommer automatiskt init anropas efter dom:en har laddats. Då kan man där i manipulera dom:en eller kanske binda något event osv.</p>
<p>Säg sedan att mitt projekt innehåller ett forum som behöver specifik javascriptlogik som bara gäller för forumet. Jag skapar därför en <b>&#8221;acme.forum.js&#8221;</b> som skulle kunna se ut såhär;</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">acme.<span style="color: #660066;">forum</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: #003366; font-weight: bold;">var</span> someVariable<span style="color: #339933;">,</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">// Initierare, bind knapphändelser m.m</span>
	init <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: #3366CC;">&quot;#someButton&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span>validateEmail<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">// Validerar e-postadress</span>
	validateEmail <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>event<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #006600; font-style: italic;">// Logik för validering</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #009900;">&#123;</span>
		init<span style="color: #339933;">:</span> init
	<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
$<span style="color: #009900;">&#40;</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>
	acme.<span style="color: #660066;">forum</span>.<span style="color: #660066;">init</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>Här bygger jag vidare på &#8221;acme&#8221; variabeln som vi tidigare skapat (eller &#8221;namespacet&#8221; om ni nu så vill). Enligt detta tänk fortsätter jag med alla delar av projektet. </p>
<p>När koden sedan skall ut i produktion brukar jag se till att minifiera och kombinera alla mina javascript (även tredjepartsbibliotek t.ex jQuery) till en enda fil vid namn <b>&#8221;acme.min.js&#8221;</b>. Detta gör jag för att få ner antalet requests så mycket som går och även få ner storleken på dem. Jag har haft nöjet att jobba ihop med <a href="http://twitter.com/robertnyman">Robert Nyman</a> som har en bra bloggpost om vilka minifierare som finns att tillgå i <a href="http://robertnyman.com/2010/01/19/tools-for-concatenating-and-minifying-css-and-javascript-files-in-different-development-environments/">denna posten</a>.</p>
<p>I mitt fall har jag använt <a href="http://yuicompressor.codeplex.com/Wikipage">YUI Compressor for .NET</a> som ett &#8221;post build-event&#8221; som även sköter minifiering av din CSS. Ett tips är att endast inkludera den minifierade CSS:en när det inte är debugg-kompilerat så blir det oerhört mycket enklare i utvecklingsprocessen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogg.athega.se/2010/04/10/unobtrusive-javascripts/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

