<?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; rails</title>
	<atom:link href="http://blogg.athega.se/tagg/rails/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>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>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. [...]]]></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å [...]]]></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 [...]]]></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>Ruby on Rails under Nginx med Phusion Passenger</title>
		<link>http://blogg.athega.se/2009/04/16/ruby-on-rails-under-nginx-med-passenger/</link>
		<comments>http://blogg.athega.se/2009/04/16/ruby-on-rails-under-nginx-med-passenger/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 20:32:31 +0000</pubDate>
		<dc:creator>Peter Hellberg</dc:creator>
				<category><![CDATA[Webbutveckling]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[passenger]]></category>
		<category><![CDATA[phusion]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[rysk]]></category>

		<guid isPermaLink="false">http://blogg.athega.se/?p=131</guid>
		<description><![CDATA[Sedan några timmar så kan man köra Phusion Passenger under Nginx! Phusion Passenger och Apache har under en tid varit det populäraste sättet att enkelt driftsätta Ruby on Rails och Rack-applikationer. Nu kan man alltså välja att köra Passenger under den ryska (och tokigt snabba) Nginx. Det enda man behöver göra är: Installera gem: sudo [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://wiki.nginx.org/"><img class="size-full wp-image-135" title="nginx-logo" src="http://blogg.athega.se/wp-content/uploads/2009/04/nginx-logo.png" alt="Nginx" width="350" height="90" /></a></p>
<p>Sedan några timmar så kan man köra <a href="http://www.modrails.com/">Phusion Passenger</a> under <a href="http://wiki.nginx.org/Main">Nginx!</a></p>
<p><a href="http://www.modrails.com/">Phusion Passenger</a> och <a href="http://httpd.apache.org/">Apache</a> har under en tid varit det populäraste sättet att enkelt driftsätta <a href="http://rubyonrails.org/">Ruby on Rails</a> och <a href="http://rack.rubyforge.org/">Rack</a>-applikationer. Nu kan man alltså välja att köra Passenger under den ryska (och <a href="http://www.linuxjournal.com/article/10108">tokigt snabba</a>) <a href="http://wiki.nginx.org/Main">Nginx</a>.</p>
<p>Det enda man behöver göra är:</p>
<ol>
<li>Installera gem: <code style="padding: 0 0.5em; color: #fff; background-color: #000;">sudo gem install passenger</code></li>
<li>Köra Nginx installern: <code style="padding: 0 0.51em; color: #fff; background-color: #000;">sudo passenger-install-nginx-module</code></li>
<li>Konfigurera (Det mesta sköts automagiskt)</li>
<li>Starta</li>
</ol>
<p>Mer ingående instruktioner finns på <a href="http://blog.phusion.nl/2009/04/16/phusions-one-year-anniversary-gift-phusion-passenger-220">Phusion’s blogg</a></p>
<h2>Phusion Passenger</h2>
<p>Hongli Lai och Ninh Bui <a href="http://en.oreilly.com/rails2008/public/schedule/detail/4354">presenterade</a> Phusion Passenger (också känd som <strong>mod_rails</strong>) under <a href="http://en.oreilly.com/rails2008/">RailsConf 2008</a>, det var då jag verkligen fick upp ögonen för projektet.</p>
<p>I den nya versionen har Phusion-grabbarna förutom att man nu kan använda sig av två olika webbservrar för att köra Passenger lagt till:</p>
<ul>
<li>Stöd för &#8221;chunked file uploads&#8221;</li>
<li>Stöd för Capistranos sätt att sköta driftsättning (Symlänkning av <code>current</code> osv.)</li>
<li>Förmåga att ladda <code>application_controller.rb</code> från en icke-standard sökväg</li>
<li>&#8221;Worker process event hooks&#8221; för Rack</li>
</ul>
<h2>Nginx</h2>
<p>Nginx driver ett flertal stora webbplatser, såsom <a class="external text" title="http://www.wordpress.com" rel="nofollow" href="http://www.wordpress.com/">WordPress</a>, <a class="external text" title="http://www.hulu.com" rel="nofollow" href="http://www.hulu.com/">Hulu</a>, <a class="external text" title="http://www.github.com/" rel="nofollow" href="http://www.github.com/">Github</a>, och <a class="external text" title="http://www.ohloh.net/" rel="nofollow" href="http://www.ohloh.net/">Ohloh</a>. Den serverar mer än två miljoner webbplatser och är därmed den näst populäraste webbservern under Linux.</p>
<p><img class="alignnone size-full wp-image-137" title="Fördelning mellan olika webbservrar" src="http://blogg.athega.se/wp-content/uploads/2009/04/web_servers_pie_chart.png" alt="Fördelning mellan olika webbservrar" width="300" height="150" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blogg.athega.se/2009/04/16/ruby-on-rails-under-nginx-med-passenger/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

