<?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; Konferens</title>
	<atom:link href="http://blogg.athega.se/kategori/konferens/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogg.athega.se</link>
	<description>...</description>
	<lastBuildDate>Fri, 28 May 2010 01:00:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>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 Inside
Aslak Hellesøy höll konferensens andra föreläsning [...]]]></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 av projekten som [...]]]></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>Athega sponsrar Nordic Ruby</title>
		<link>http://blogg.athega.se/2010/04/09/athega-sponsrar-nordic-ruby/</link>
		<comments>http://blogg.athega.se/2010/04/09/athega-sponsrar-nordic-ruby/#comments</comments>
		<pubDate>Fri, 09 Apr 2010 01:10:40 +0000</pubDate>
		<dc:creator>Peter Hellberg</dc:creator>
				<category><![CDATA[Konferens]]></category>
		<category><![CDATA[Marknadsföring]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blogg.athega.se/?p=610</guid>
		<description><![CDATA[
I slutet av maj kommer några av oss att befinna sig i Göteborg för att delta i konferensen Nordic Ruby. Under två dagar hålls föreläsningar om så vitt skilda ämnen som den dokumentorienterade databasen MongoDB, spelmekanik, en introduktion till maskininlärning samt metaprogrammering i Ruby.
Hoppas att vi syns där!
]]></description>
			<content:encoded><![CDATA[<p><a title="Nordic Ruby" href="http://nordicruby.org"><img class="alignright" title="Nordic Ruby" src="http://blogg.athega.se/wp-content/uploads/2010/04/nordicruby_logo_256x256.png" alt="Nordic Ruby" width="256" height="256" /></a></p>
<p>I slutet av maj kommer några av oss att befinna sig i Göteborg för att delta i konferensen <a href="http://nordicruby.org">Nordic Ruby</a>. Under två dagar hålls föreläsningar om så vitt skilda ämnen som den dokumentorienterade databasen <a href="http://www.mongodb.org">MongoDB</a>, spelmekanik, en introduktion till maskininlärning samt metaprogrammering i Ruby.</p>
<p>Hoppas att vi syns där!</p>
]]></content:encoded>
			<wfw:commentRss>http://blogg.athega.se/2010/04/09/athega-sponsrar-nordic-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Den produktive programmeraren</title>
		<link>http://blogg.athega.se/2009/11/10/den-produktive-programmeraren/</link>
		<comments>http://blogg.athega.se/2009/11/10/den-produktive-programmeraren/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 22:14:26 +0000</pubDate>
		<dc:creator>Christian Lizell</dc:creator>
				<category><![CDATA[Guider]]></category>
		<category><![CDATA[Konferens]]></category>
		<category><![CDATA[Produktivitet]]></category>
		<category><![CDATA[clcl]]></category>
		<category><![CDATA[Doodim]]></category>
		<category><![CDATA[Google Desktop]]></category>
		<category><![CDATA[Jedi Concentrate]]></category>
		<category><![CDATA[Jumpcut]]></category>
		<category><![CDATA[Locus of Attention]]></category>
		<category><![CDATA[Neal Ford]]></category>
		<category><![CDATA[QuickSilver]]></category>
		<category><![CDATA[Selenium]]></category>
		<category><![CDATA[Textexpander]]></category>
		<category><![CDATA[The Productive Programmer]]></category>
		<category><![CDATA[Øredev]]></category>

		<guid isPermaLink="false">http://blogg.athega.se/?p=504</guid>
		<description><![CDATA[Ett sammandrag av Neal Ford's dragning "The Productive Programmer" på Øredev 2009. Detta är en rad tips, som alla syftar till att hjälpa dig bli en mer produktiv programmerare, oavsett om du använder emacs, notepad eller Eclipse.]]></description>
			<content:encoded><![CDATA[<p><a href="http://oreilly.com/catalog/9780596519544/"><img class="alignright" title="The Productive Programmer" src="http://covers.oreilly.com/images/9780596519544/lrg.jpg" alt="" width="108" height="142" /></a>En av de bättre dragningarna på årets <a href="http://www.oredev.org/">Øredev</a> var <a href="http://www.nealford.com/">Neal Ford</a>&#8217;s ”The Productive Programmer: Mechanics”. Neal har skrivit en <a href="http://oreilly.com/catalog/9780596519780/">bok</a> med samma namn, som jag hört litet blandad kritik om. Därför hade jag inga större förväntningar när jag klev in i rummet. Efter orden <em>”Graphical tools are med for novices”</em> visste jag att detta var något för mig!</p>
<p>Nedan följer en rad tips, som alla syftar till att hjälpa dig bli en mer produktiv programmerare, oavsett om du använder <a href="http://www.gnu.org/software/emacs/">emacs</a>, <a href="http://en.wikipedia.org/wiki/Notepad_%28Windows%29">notepad</a> eller <a href="http://www.eclipse.org/">Eclipse</a>.</p>
<h2>Urklippshanteraren (eller clipboard)</h2>
<p>Varför, varför finns det bara plats för ett urklipp i taget i dagens moderna operativsystem (*nix-dialekter undantagna)?</p>
<p>Det är ju helt tokigt att inte kunna gå tillbaka och ta fram något man kopierade eller klippte ut för bara några minuter sedan, bara för att man råkat svara på ett mail, mitt i ett enhetstest eller liknande. Lösningen finns i form av några hjälpprogram:</p>
<ul>
<li><a href="http://jumpcut.sourceforge.net/">Jumpcut</a> (Mac)</li>
<li><a href="http://www.nakka.com/soft/clcl/index_eng.html">clcl</a> (Windows)</li>
</ul>
<h2>Lär dig kortkommandon</h2>
<p>Tiden det tar att lära sig även det mest obskyra kortkommando är väl investerad tid. Varje gång dina fingrar måste lämna tangentbord slösar du med tid. Hitta en bra partner att parprogrammera med och be honom/henne raljera över hur långsam du är varje gång du använder musen.</p>
<h2>Scripta dina vanligast kommandon/texter</h2>
<p>Om du märker att du ofta skriver samma sak, skriver samma fel eller skriver samma sekvens av kommandon i en terminal, finns det hjälp. <a href="http://www.smileonmymac.com/TextExpander/">Textexpander</a> är ett litet makroverktyg som verkligen sparar tid. Du kan använda det till allt från epostsignaturer till kod-&#8221;snippets&#8221;.</p>
<p>Tyvärr kostar det pengar och finns det bara för Mac, men jag är övertygad om att det finns ett Windowsalternativ.</p>
<h2>”Locus of Attention”</h2>
<p>Att kunna fokusera och komma in i flytet (”the Flow” eller ”<a href="http://blogg.athega.se/2009/08/12/in-i-zonen-som-systemutvecklare/">the Zone</a>”) är lika viktigt som verktygen du använder. Om du programmerar vill du att <em>platsen för din uppmärksamhet</em> (fritt översatt) ska vara din IDE. Inte din klienter för IM, Twitter eller email, etc. Med den mängd information vi utsätts för varje minut är detta svårare och svårare.</p>
<ul>
<li>Stäng av dina klienter för epost, twitter och IM och uppdatera dig då och då när du tar en paus från programmerandet</li>
<li>Använd hörlurar för att visa att du inte vill bli störd</li>
<li>Inför tysta timmar på kontoret, exempelvis mellan 14 och 16 varje dag då du verkligen kan fokusera</li>
</ul>
<p>Neal menar exempelvis att Windows är som en treåring som konstant stör dig med påpekanden som ”<em>Du har oanvända ikoner på ditt skrivbord</em>&#8221;, ”<em>Ditt virtuella minne håller på att ta slut</em>” eller ”<em>Det finns säkerhetsuppdateringar till din dator</em>”. För att ytterligare hjälpa dig att minska störande moment finns det verktyg, skärm-dimmers, som sakta släcker ner allt förutom ditt akiva fönster:</p>
<ul>
<li><a href="http://www.lachoseinteractive.net/en/products/doodim/">Doodim</a> (Mac)</li>
<li><a href="http://www.anappaday.com/downloads/2006/09/day-10-jedi-concentrate.html">Jedi Concentrate</a> (Windows)</li>
</ul>
<h2>Sök</h2>
<p>En sökning slår alltid navigation med mus eller till och med tangentbord. Se till att du har en bra lokal sökmotor för din dator, som <a href="http://desktop.google.com/mac/">Google Desktop</a> (Mac/Windows) eller <a href="http://docs.blacktree.com/quicksilver/what_is_quicksilver">QuickSilver</a> (Mac). Neal menar att navigera i en trädstruktur i utforskaren eller i din IDE är som att berätta för datorn att du vet hur du använder musen. Om du vet vad filen heter &#8211; sök!</p>
<h2>Automatisera</h2>
<p>Ett spiffigt användningsområde för <a href="http://seleniumhq.org/">Selenium</a> är faktiskt att automatisera ditt iterativa testande. Du kanske felsöker en funktion som kräver att du klickar dig igenom en sekvens, fyller i litet testdata och till slut når fram till funktionen du felsöker. Denna process kan bli ganska trist att upprepa om och om igen. Med <a href="http://seleniumhq.org/projects/ide/">Seleniums IDE</a>, som du installerar som ett plugin till Firefox, kan du enkelt spela in sekvensen en gång och sedan spela upp den varje gång du vill testa. Eller som Neal uttrycker det; ”<em>You should never manually interact with the thing you are building unless you want to</em>”.</p>
<p>Han avslutar med tänkvärda ”<em>Solving problems by hand, makes you dumber</em>”. Word!</p>
]]></content:encoded>
			<wfw:commentRss>http://blogg.athega.se/2009/11/10/den-produktive-programmeraren/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>RailsConf: Torsdag</title>
		<link>http://blogg.athega.se/2009/05/08/railsconf-torsdag/</link>
		<comments>http://blogg.athega.se/2009/05/08/railsconf-torsdag/#comments</comments>
		<pubDate>Thu, 07 May 2009 22:28:14 +0000</pubDate>
		<dc:creator>Peter Hellberg</dc:creator>
				<category><![CDATA[Konferens]]></category>
		<category><![CDATA[Home Automation]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[RailsConf]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[SMS]]></category>

		<guid isPermaLink="false">http://blogg.athega.se/?p=201</guid>
		<description><![CDATA[Build an App, Start a Movement
Wynn Netherland, Jim Mulholland och Bradley Joyce (Squeejee) visade hur de byggde Tweet Congress och hur de använder Twitters API och Twitters API för sökningar.
Deras första tips var att inte vara rädd för att göra refaktureringar, det andra tipset var att se till att komma på Twitters whitelist.
Ett annat tips [...]]]></description>
			<content:encoded><![CDATA[<h2 id="build_an_app_start_a_movement">Build an App, Start a Movement</h2>
<p>Wynn Netherland, Jim Mulholland och Bradley Joyce (<a href="http://squeejee.com/">Squeejee</a>) visade hur de byggde <a href="http://tweetcongress.org/">Tweet Congress</a> och hur de använder Twitters API och Twitters API för sökningar.</p>
<p>Deras första tips var att inte vara rädd för att göra refaktureringar, det andra tipset var att se till att komma på Twitters whitelist.</p>
<p>Ett annat tips var att använda <a href="http://domai.nr/">Domainr</a> för att hitta bra domännamn.</p>
<h3 id="marknadsfringsstrategin">Marknadsföringsstrategin</h3>
<ul>
<li>Twitter!</li>
<li>Gick med i olika Webb-tävlingar (och vann sin kategori på SXSW)</li>
<li>Skapade relationer med folk utanför IT-industrin</li>
</ul>
<h3 id="floxee">Floxee</h3>
<p>En av bieffekterna av att göra Tweet Congress var att de kunde bryta ut <a href="http://floxee.com/">Floxee</a> både som en hostad tjänst och som öppen källkod. </p>
<h2 id="building_a_video_portal_in_rails">Building a Video Portal in Rails</h2>
<p>Ed Laczynski (<a href="http://www.zype.com/">Zype</a>) och Nathaniel Bibler  (<a href="http://www.rocketjumpindustries.com/">Rocket Jump Industries</a>) berättade om hur de arbetar med CDN&#8217;s och videoprocessing-tjänster. Hur de strukturerat sin databas och applikationslogik.</p>
<p>De har byggt ett Ruby-gränssnitt mot <a href="http://www.theplatform.com/">thePlatform</a> som hanterar hämtningen av metadata samt implementerar Factory-mönstret för att bygga olika produkt-objekt.</p>
<p>De använder memcached för att hantera cachningen.</p>
<h2 id="integrating_sms_messaging_with_your_rails_application">Integrating SMS Messaging with your Rails Application</h2>
<p>Blythe Dunham (<a href="http://spongecell.com/">Spongecell</a>) visade olika sätt att skicka och ta emot SMS genom Ruby. </p>
<p>Med <a href="http://mobilehacking.org/index.php/RubyGSM">RubyGSM</a> kan man skicka AT-kommandon till mobiltelefoner.</p>
<h2 id="r_house_rails_for_home_automation">R-House &#8211; Rails for Home Automation</h2>
<p>Fernand Galiana (<a href="http://liquidrail.com/">LiquidRail LLC</a>) har skapat projektet <a href="http://github.com/derailed/rhouse/tree/master">R-House</a> vilket är ett Ruby-lager ovanpå <a href="http://linuxmce.com/">LinuxMCE</a>.</p>
<p>Med R-House kan man kontrollera hårdvara, tex. dimma lampor, låsa upp dörrar, klimatkontroll eller styra mediacenter.</p>
<p>Han visade också hur han använder en iPhone som fjärrkontroll till sitt hus.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogg.athega.se/2009/05/08/railsconf-torsdag/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RailsConf: Onsdag</title>
		<link>http://blogg.athega.se/2009/05/07/railsconf-onsdag/</link>
		<comments>http://blogg.athega.se/2009/05/07/railsconf-onsdag/#comments</comments>
		<pubDate>Thu, 07 May 2009 01:10:09 +0000</pubDate>
		<dc:creator>Peter Hellberg</dc:creator>
				<category><![CDATA[Konferens]]></category>
		<category><![CDATA[Adhearsion]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[Implementation]]></category>
		<category><![CDATA[Keynote]]></category>
		<category><![CDATA[Prestanda]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[RailsConf]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blogg.athega.se/?p=195</guid>
		<description><![CDATA[Keynote: Chris Wanstrath
Presentationen: https://gist.github.com/0a2655aed6a26fa15a02
Rails Metal, Rack, and Sinatra
Adam Wiggins (Heroku) berättade om hur Rails Metal går att kombinera med Sinatra.
What Makes Ruby Go: An Implementation Primer
Charles Nutter (Sun Microsystems) och Evan Phoenix (Engine Yard) gick igenom olika delar av Ruby som man behöver tänka på för att inte stöta på prestandaproblem.
Metodanrop
Att cache:a metodanrop ger generellt [...]]]></description>
			<content:encoded><![CDATA[<h2 id="keynote_chris_wanstrath">Keynote: Chris Wanstrath</h2>
<p>Presentationen: <a href="https://gist.github.com/0a2655aed6a26fa15a02">https://gist.github.com/0a2655aed6a26fa15a02</a></p>
<h2 id="rails_metal_rack_and_sinatra">Rails Metal, Rack, and Sinatra</h2>
<p>Adam Wiggins (<a href="http://heroku.com">Heroku</a>) berättade om hur Rails Metal går att kombinera med Sinatra.</p>
<h2 id="what_makes_ruby_go_an_implementation_primer">What Makes Ruby Go: An Implementation Primer</h2>
<p>Charles Nutter (<a href="http://sun.com">Sun Microsystems</a>) och Evan Phoenix (<a href="http://engineyard.com/">Engine Yard</a>) gick igenom olika delar av Ruby som man behöver tänka på för att inte stöta på prestandaproblem.</p>
<h3 id="metodanrop">Metodanrop</h3>
<p>Att cache:a metodanrop ger generellt sett den största prestandavinsten.</p>
<p>Object#extend är dock ett stort problem för att kunna cache:a metodanropen.</p>
<p>Det är viktigt att förstå hur extend fungerar så att man inte tömmer<br />
metodanropscachen i onödan.</p>
<h3 id="konstanter">Konstanter</h3>
<p>För att hålla prestandan upp ska man hålla konstanter konstanta, inte helt oväntat.</p>
<h3 id="options_argument">Options Argument</h3>
<p>En option hash strider mot DRY.<br />
Det är mycket snabbare att använda diskreta argument.</p>
<h3 id="objrun_rescue_nil">obj.run rescue nil</h3>
<p>Det är otroligt ovanligt att man vill fånga alla StandardError, vilket är 101 underklasser; IOError, SecurityError, TypeError, Etc.</p>
<h3 id="objrun_rescue_exception">obj.run rescue Exception</h3>
<p>I stort sett samma sak som rescue nil, fast värre, nu kan man inte ens  ctrl-C&#8217;a ut ur koden.</p>
<h3 id="autoload">Autoload</h3>
<p>Helt tråd-osäkert, fördröjer laddning av koden.<br />
Använder inte Kernel#require, alltså går det inte att köra autoload från gems.</p>
<h3 id="super">Super</h3>
<p>Man måste ta bort blocket om man inte vill att det ska skickas uppåt:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">super</span><span style="color:#006600; font-weight:bold;">&#40;</span>a, <span style="color:#006600; font-weight:bold;">&amp;</span>nil<span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>Super ser bara senaste versionen av argumenten:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">def</span> foo<span style="color:#006600; font-weight:bold;">&#40;</span>a, b<span style="color:#006600; font-weight:bold;">&#41;</span>
  a = <span style="color:#006666;">1</span>
  b = <span style="color:#996600;">'bar'</span>
  <span style="color:#9966CC; font-weight:bold;">super</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<h3 id="slutsats">Slutsats</h3>
<ul>
<li>Enkel kod > Komplex kod</li>
<li>Det finns inga gratis luncher</li>
<li>Tänk igenom två gånger, skriv koden en gång</li>
<li>YAGNI</li>
</ul>
<h2 id="call_into_your_ruby_code_writing_voice_enabled_apps_in_ruby_with_adhearsion">Call into your Ruby code! Writing voice-enabled apps in Ruby with Adhearsion</h2>
<p>Jay Phillips (<a href="http://jicksta.com/">Codemecca LLC</a>) visade hur man kan programmera Ruby för att styra <a href="http://www.asterisk.org/">Asterisk</a> genom att använda sig av <a href="http://adhearsion.com/">Adhearsion</a>.</p>
<p>Tyvärr fungerade det inte att använda Ahearsions Sandbox på konferensens wlan,<br />
så jag får ta och testa det lite senare.</p>
<p>Verkar intressant att kunna styra sin applikation genom att ringa till den <img src='http://blogg.athega.se/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blogg.athega.se/2009/05/07/railsconf-onsdag/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RailsConf: Tisdag</title>
		<link>http://blogg.athega.se/2009/05/06/railsconf-tisdag/</link>
		<comments>http://blogg.athega.se/2009/05/06/railsconf-tisdag/#comments</comments>
		<pubDate>Wed, 06 May 2009 02:00:12 +0000</pubDate>
		<dc:creator>Peter Hellberg</dc:creator>
				<category><![CDATA[Konferens]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[Cucumber]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Keynote]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[RailsConf]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://blogg.athega.se/?p=183</guid>
		<description><![CDATA[Keynote: Rails 3 ..and the real secret to high productivity
Presentationen (PDF)
David började med en tillbakablick på de 5 år som gått och vad som sagts om ramverket och hur det kom sig att det skapades så många kloner. Han fortsatte med att berätta om några förändringar i Rails 3.0

Ny router
Snabbare och bättre Rack-stöd
XSS skyddet uppdateras
JavaScript [...]]]></description>
			<content:encoded><![CDATA[<h2 id="keynote_rails_3_and_the_real_secret_to_high_productivity">Keynote: Rails 3 ..and the real secret to high productivity</h2>
<p><a href="http://assets.en.oreilly.com/1/event/24/Rails%203%20and%20the%20Real%20Secret%20to%20High%20Productivity%20Presentation.pdf">Presentationen</a> (PDF)</p>
<p>David började med en tillbakablick på de 5 år som gått och vad som sagts om ramverket och hur det kom sig att det skapades så många kloner. Han fortsatte med att berätta om några förändringar i Rails 3.0</p>
<ul>
<li>Ny router</li>
<li>Snabbare och bättre Rack-stöd</li>
<li>XSS skyddet uppdateras</li>
<li>JavaScript blir unobtrusive och ramverksagnostiskt</li>
<li>Mer agnostisism; Action ORM, Generatorer</li>
<li>Refakturering; Abstract Controllers, ActiveRecord, Callbacks</li>
</ul>
<p>En välkommen förändring är att output i vyerna kommer att bli escape:ad per default. För att skriva ut råformatet använder man metoden <strong>raw</strong>.</p>
<p>Unobtrusive JavaScript kommer att implementeras genom att använda HTML 5 attribut:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">## Rails 2.x
<span style="color:#006600; font-weight:bold;">&lt;%</span>= link_to_remote <span style="color:#996600;">&quot;Delete&quot;</span>, <span style="color:#ff3333; font-weight:bold;">:url</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0066ff; font-weight:bold;">@comment</span>, <span style="color:#ff3333; font-weight:bold;">:method</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:delete</span> <span style="color:#006600; font-weight:bold;">%&gt;</span> 
&lt;a href=&quot;#&quot; onclick=&quot;new Ajax.Request('/comments/1', {asynchronous:true, 
evalScripts:true, method:'delete'}); return false;&quot;&gt;Destroy&lt;/a&gt;
&nbsp;
## Rails 3.x
<span style="color:#006600; font-weight:bold;">&lt;%</span>= link_to <span style="color:#996600;">&quot;Delete&quot;</span>, <span style="color:#0066ff; font-weight:bold;">@comment</span>, <span style="color:#ff3333; font-weight:bold;">:remote</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;">:method</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:delete</span> <span style="color:#006600; font-weight:bold;">%&gt;</span> 
&lt;a href=&quot;/comments/1&quot; data-remote=&quot;true&quot; data-method=&quot;delete&quot;&gt;Destroy&lt;/a&gt;</pre></div></div>

<p>Och sen appliceras metoderna med JavaScript:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span>document.<span style="color: #660066;">body</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">observe</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;click&quot;</span><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: #003366; font-weight: bold;">var</span> element <span style="color: #339933;">=</span> event.<span style="color: #660066;">findElement</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a['data-remote']&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
  <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>element<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
    <span style="color: #003366; font-weight: bold;">var</span> method <span style="color: #339933;">=</span> element.<span style="color: #660066;">readAttribute</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;data-method&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #3366CC;">&quot;get&quot;</span><span style="color: #339933;">;</span> 
    <span style="color: #003366; font-weight: bold;">new</span> Ajax.<span style="color: #660066;">Request</span><span style="color: #009900;">&#40;</span>element.<span style="color: #660066;">readAttribute</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;href&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span> method<span style="color: #339933;">:</span> 
method <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
    event.<span style="color: #000066;">stop</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;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Han visade på hur viktigt hög produktivitet faktiskt är, hur motivation snabbt minskar vid svåra problem.</p>
<h3 id="relaterade_bloggposter">Relaterade bloggposter</h3>
<ul>
<li><a href="http://blogs.sun.com/arungupta/entry/rails_conf_2009_day_2">Rails Conf 2009 Day 2 &#8211; DHH Keynote</a></li>
</ul>
<h2 id="the_gilt_effect_handling_1000_shopping_cart_updates_per_second_in_rails">The Gilt Effect: Handling 1000 Shopping Cart Updates per second in Rails</h2>
<p>Anställda på <a href="http://www.gilt.com/">Gilt Groupe</a> berättade om hur deras serverarkitektur ser ut, de använder <a href="http://www.postgresql.org/">PostgreSQL</a>, 400+ Thin servrar, 2 <a href="http://www.zeus.com/products/zxtm/">ZXTM</a>&#8217;s  (Zeus Extensible Traffic Manager)</p>
<p>Applikationen är skriven i Ruby on Rails.</p>
<p>De måste jobba med sharding för att klara av den höga lasten.</p>
<p>De använder ett internt CMS skrivet i Rails och har två &#8220;CDN&#8221;-servrar framför som serverar förgenererade sidor. (En server på östkusten och en på västkusten)</p>
<h3 id="stort_antal_transaktioner">Stort antal transaktioner</h3>
<p>Dedikerade tjänster för varje transaktion &#8211; JRuby + EC2 + SQL + Rails</p>
<p>EC2 (lastbalanserad genom Zeus), expanderbar kapacitet, tid/behovsbaserad ökning av tillgänglig kapacitet.</p>
<p>De arbetar tillsammans med Joyent för hosting.</p>
<h3 id="hg_volym_delat_tillstnd">Hög volym / Delat tillstånd</h3>
<p>Unik ehandelsmodell, &#8220;flash sale&#8221; där alla produkter tar slut på en dag.</p>
<h3 id="inventariemodellen">Inventariemodellen</h3>
<p>Gilt hanterar varje fysiskt objekt individuellt</p>
<ul>
<li>Begränsat antal</li>
<li>Går inte att få tag i fler</li>
</ul>
<h3 id="varukorgsmodellen">Varukorgsmodellen</h3>
<h4 id="shoppingfasen">Shoppingfasen:</h4>
<ul>
<li>Att lägga till en produkt skapar en <em>reservation</em></li>
<li>Om produkten är tillgänglig får man en 10-minuters reservation
<ul>
<li>Man måste betala in</li>
</ul>
</li>
</ul>
<h4 id="betalningsfasen">Betalningsfasen</h4>
<ul>
<li>Förfråga om att förlänga reservationen</li>
<li>Om reservationen är <valid>, förlängs den med 10 minuter
<ul>
<li>Man kan får en prioriterad uppgradering</li>
</ul>
</li>
<li>Om reservationen inte är valid och det inte finns några lediga produkter
<ul>
<li>Meddelande till kunden att produkten är slut och att man kan skriva upp sig på en väntelista.</li>
</ul>
</li>
</ul>
<h4 id="betalning_genomfrd">Betalning genomförd</h4>
<p>Respektive produkt markeras som såld i databasen</p>
<h3 id="gilts_framtidsstrategi">Gilts framtidsstrategi</h3>
<ul>
<li>Kärntjänsterna är vy-lösa (MC)</li>
<li>Enda gränssnittet är JSON/HTTP</li>
<li>Externa tjänster skrivna i Ruby, Java för kritiska operationer internt</li>
<li>Internt ramverk kallat Blackbird under utveckling, det hanterar skalbar deployment av tjänter i Ruby.</li>
</ul>
<h2 id="pwn_your_infrastructure_behind_call_of_duty_world_at_war">PWN Your Infrastructure: Behind Call of Duty: World at War</h2>
<p>Tyvärr fick jag inte plats inne på föreläsningen <a href="http://en.oreilly.com/rails2009/public/schedule/detail/7073">UI Fundamentals for Programmers</a> med Ryan Singer från <a href="http://37signals.com/">37Signals</a> så det fick bli mitt andrahandsval om hur Agora Games skalar sin serverarkitektur.</p>
<p>Jason LaPorte (<a href="http://www.agoragames.com/">Agora Games</a>) talar om vad de tycker är fel med deployment av Rails. Ett av de största problemen är skalbarhet (Av administratörens tid) och i hans värld översätts detta i hur mycket den dagliga arbetsbördan ökar när antalet servrar ökar.</p>
<p>För att hantera fel jobbar de med virtualisering med hjälp av <a href="http://terremark.com">Terremark</a> och replikation för mjukvaruproblem.</p>
<p>De propagerar /usr/local till alla servrar med NFS, vilket gör att uppdateringar sker hyffsat smärtfritt.</p>
<p>De har ett internt system de kallar Overlord skrivet i Rails, det sköter hantering av konfigurationsfiler som sedan laddas ner av respektive server.</p>
<p><a href="http://mmonit.com/monit/">Monit</a> ser till att de konfigurerade tjänsterna startas samt startar om tjänster som gått ner.</p>
<p><a href="http://oss.oetiker.ch/rrdtool/">RRDTool</a> visualiserar hur de olika tjänsterna mår genom att använda Monits xml-format. (http://server/_status?format=xml)</p>
<p>Centraliserad deployment med ett enkelt shellscript som:</p>
<ul>
<li>Updaterar koden</li>
<li>Uppdaterar miljön</li>
<li>Startar om servrarna</li>
</ul>
<h2 id="javascript_testing_in_rails_fast_headless_in_browser_pick_any_three">JavaScript Testing in Rails: Fast, Headless, In-Browser. Pick Any Three.</h2>
<p>Larry Karnowski och Jason Rudolph (<a href="http://thinkrelevance.com/">Relevance, Inc.</a>) visar <a href="http://github.com/relevance/blue-ridge/tree/master">Blue Ridge</a>, ett ramverk för testdriven utveckling med JavaScript. </p>
<h3 id="delarna_i_blue_ridge">Delarna i Blue Ridge</h3>
<ul>
<li>Rhino &#8211; en Java-baserad JavaScript interpreter</li>
<li>Screw.Unit &#8211; en BDD syntax för JavaScript, liknar RSpec</li>
<li>Smoke &#8211; ett JavaScript mocking &amp; stubbing bibliotek, liknar Mocha</li>
<li>env.js &#8211; en DOM implementation skriven helt i JavaScript</li>
</ul>
<p>Det verkar grymt användbart att kunna köra tester av alla JavaScript från kommandoraden eller en CI-server. Tyvärr verkar det inte som om env.js fungerar tillsammans med jQuery 1.3.x så de kör med jQuery 1.2.6. De jobbar dock på att lösa problemet.</p>
<h3 id="relaterade_lnkar">Relaterade länkar</h3>
<ul>
<li><a href="http://github.com/relevance/blue-ridge-sample-app/tree/master">blue-ridge-sample-app</a></li>
<li><a href="http://pastie.org/469178">http://pastie.org/469178</a></li>
</ul>
<h2 id="smacking_git_around_advanced_git_tricks">Smacking Git Around &#8211; Advanced Git Tricks</h2>
<p><a href="http://tinyurl.com/gitrailsconf09">Presentationen</a> (PDF) |<br />
<a href="http://tinyurl.com/gitrailsconf09-cheat">Cheat-sheet</a> (PDF)</p>
<p>Scott Chacon (<a href="http://github.com">GitHub</a>) började med &#8220;Git in 60 seconds&#8221; och gick vidare med att gå igenom mer avancerade funktioner i Git.</p>
<ul>
<li>Med filter branches kan man ta bort en fil från alla commits.</li>
<li>Subtree merging är ett alternativ till Submodules.</li>
<li>Git Bisect är användbart för att hitta vilken commit som orsakade problem</li>
<li>Man kan diffa binära filer genom att använda .gitattributes</li>
</ul>
<h2 id="quality_code_with_cucumber">Quality Code with Cucumber</h2>
<p>Aslak Hellesøy (<a href="http://www.bekk.no/">Bekk Consulting AS</a>) berättar om BDD med hjälp av <a href="http://cukes.info/">Cucumber</a>.</p>
<ul>
<li>Step &#8211; Method invocation</li>
<li>Step definition &#8211; Method definition</li>
</ul>
<p>Jag är inte helt övertygad om att det är en bra idé att kunna definiera dataset i sina steps, men för övrigt verkar det riktigt användbart.</p>
<p>Tags är en riktigt trevlig liten feature.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogg.athega.se/2009/05/06/railsconf-tisdag/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RailsConf: Tutorials</title>
		<link>http://blogg.athega.se/2009/05/05/railsconf-tutorials/</link>
		<comments>http://blogg.athega.se/2009/05/05/railsconf-tutorials/#comments</comments>
		<pubDate>Tue, 05 May 2009 01:31:13 +0000</pubDate>
		<dc:creator>Peter Hellberg</dc:creator>
				<category><![CDATA[Konferens]]></category>
		<category><![CDATA[Webbutveckling]]></category>
		<category><![CDATA[JRuby]]></category>
		<category><![CDATA[RailsConf]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Sinatra]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://blogg.athega.se/?p=171</guid>
		<description><![CDATA[
JRuby on Rails &#8211; Nick Sieger (SUN Microsystems)
Presentationen: jruby-railsconf-2009.pdf
Huvudpunkterna på föreläsningen var:

Installation
Utveckling
Prestandatestning
Interaktion med Java
Testning

Jag hade gärna sett att han gått in lite mer på djupet om skillnaderna
mellan JRuby och MRI, Olika sätt att deploya (Han visade GlassFish,
med tveksamt resultat)
Ett verktyg jag helt klart kommer att använda mig av i framtiden är VisualVM.
A Hat Full of [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blogg.athega.se/wp-content/uploads/2009/05/ruby_dinette.jpg" alt="ruby_dinette" title="ruby_dinette" width="750" height="280" class="alignnone size-full wp-image-172" /></p>
<h2 id="jruby_on_rails_nick_sieger_sun_microsystems">JRuby on Rails &#8211; Nick Sieger (<a href="http://sun.com">SUN Microsystems</a>)</h2>
<p>Presentationen: <a href="http://blog.nicksieger.com/jruby-railsconf-2009.pdf">jruby-railsconf-2009.pdf</a></p>
<p>Huvudpunkterna på föreläsningen var:</p>
<ul>
<li>Installation</li>
<li>Utveckling</li>
<li>Prestandatestning</li>
<li>Interaktion med Java</li>
<li>Testning</li>
</ul>
<p>Jag hade gärna sett att han gått in lite mer på djupet om skillnaderna<br />
mellan JRuby och MRI, Olika sätt att deploya (Han visade GlassFish,<br />
med tveksamt resultat)</p>
<p>Ett verktyg jag helt klart kommer att använda mig av i framtiden är <a href="https://visualvm.dev.java.net/">VisualVM</a>.</p>
<h2 id="a_hat_full_of_tricks_with_sinatra_blake_mizerany_heroku">A Hat Full of Tricks with Sinatra &#8211; Blake Mizerany (<a href="http://heroku.com">Heroku</a>)</h2>
<p>Det första som händer är att <a href="http://chneukirchen.org/">Christian Neukirchen</a>,<br />
huvudutvecklaren av <a href="http://rack.rubyforge.org/">Rack</a> sätter sig brevid mig.</p>
<p>Första fjärdedelen av Blakes föreläsning handlar inte om<br />
<a href="http://www.sinatrarb.com/">Sinatra</a> över huvud taget utan om just <a href="http://rack.rubyforge.org/">Rack</a>.</p>
<h3 id="minimal_rack_applikation">Minimal Rack-applikation</h3>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">run <span style="color:#CC0066; font-weight:bold;">lambda</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">|</span>env<span style="color:#006600; font-weight:bold;">|</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">200</span>, <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#996600;">'Content-Type'</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'text/html'</span><span style="color:#006600; font-weight:bold;">&#125;</span>, <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'Hello'</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&#125;</span></pre></div></div>

<h3 id="minimal_sinatra_applikation">Minimal Sinatra-applikation</h3>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'sinatra'</span>
&nbsp;
get <span style="color:#996600;">'/'</span> <span style="color:#9966CC; font-weight:bold;">do</span>
  <span style="color:#996600;">'Hello'</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<h3 id="rekomenderade_bcker">Rekomenderade böcker</h3>
<ul>
<li><a href="http://www.amazon.com/exec/obidos/ASIN/0135974445/objectmentorinc">Agile Software Development, Principles, Patterns, and Practices</a></li>
</ul>
<h3 id="exempelkod">Exempelkod</h3>
<ul>
<li>Modulen <a href="http://github.com/bmizerany/sinatra-captcha/tree/master">sinatra-captcha</a></li>
</ul>
<h2 id="links">Relaterade länkar</h2>
<ul>
<li><a href="http://blogs.sun.com/arungupta/entry/rails_conf_2009_day_1">http://blogs.sun.com/arungupta/entry/rails_conf_2009_day_1</a></li>
</ul>
<p><img src="http://blogg.athega.se/wp-content/uploads/2009/05/gae_hackathon.png" alt="gae_hackathon" title="gae_hackathon" width="750" height="818" class="alignnone size-full wp-image-176" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blogg.athega.se/2009/05/05/railsconf-tutorials/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
