Arkiv för kategori ‘Konferens’

Athega sponsrar Nordic Ruby

Nordic Ruby

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!

Den produktive programmeraren

En av de bättre dragningarna på årets Øredev var Neal Ford‘s ”The Productive Programmer: Mechanics”. Neal har skrivit en bok 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 ”Graphical tools are med for novices” visste jag att detta var något för mig!

Nedan följer 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.

Urklippshanteraren (eller clipboard)

Varför, varför finns det bara plats för ett urklipp i taget i dagens moderna operativsystem (*nix-dialekter undantagna)?

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:

Lär dig kortkommandon

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.

Scripta dina vanligast kommandon/texter

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. Textexpander är ett litet makroverktyg som verkligen sparar tid. Du kan använda det till allt från epostsignaturer till kod-”snippets”.

Tyvärr kostar det pengar och finns det bara för Mac, men jag är övertygad om att det finns ett Windowsalternativ.

”Locus of Attention”

Att kunna fokusera och komma in i flytet (”the Flow” eller ”the Zone”) är lika viktigt som verktygen du använder. Om du programmerar vill du att platsen för din uppmärksamhet (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.

  • 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
  • Använd hörlurar för att visa att du inte vill bli störd
  • Inför tysta timmar på kontoret, exempelvis mellan 14 och 16 varje dag då du verkligen kan fokusera

Neal menar exempelvis att Windows är som en treåring som konstant stör dig med påpekanden som ”Du har oanvända ikoner på ditt skrivbord”, ”Ditt virtuella minne håller på att ta slut” eller ”Det finns säkerhetsuppdateringar till din dator”. 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:

Sök

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 Google Desktop (Mac/Windows) eller QuickSilver (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 – sök!

Automatisera

Ett spiffigt användningsområde för Selenium ä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 Seleniums IDE, 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; ”You should never manually interact with the thing you are building unless you want to”.

Han avslutar med tänkvärda ”Solving problems by hand, makes you dumber”. Word!

RailsConf: Torsdag

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 var att använda Domainr för att hitta bra domännamn.

Marknadsföringsstrategin

  • Twitter!
  • Gick med i olika Webb-tävlingar (och vann sin kategori på SXSW)
  • Skapade relationer med folk utanför IT-industrin

Floxee

En av bieffekterna av att göra Tweet Congress var att de kunde bryta ut Floxee både som en hostad tjänst och som öppen källkod.

Building a Video Portal in Rails

Ed Laczynski (Zype) och Nathaniel Bibler (Rocket Jump Industries) berättade om hur de arbetar med CDN’s och videoprocessing-tjänster. Hur de strukturerat sin databas och applikationslogik.

De har byggt ett Ruby-gränssnitt mot thePlatform som hanterar hämtningen av metadata samt implementerar Factory-mönstret för att bygga olika produkt-objekt.

De använder memcached för att hantera cachningen.

Integrating SMS Messaging with your Rails Application

Blythe Dunham (Spongecell) visade olika sätt att skicka och ta emot SMS genom Ruby.

Med RubyGSM kan man skicka AT-kommandon till mobiltelefoner.

R-House – Rails for Home Automation

Fernand Galiana (LiquidRail LLC) har skapat projektet R-House vilket är ett Ruby-lager ovanpå LinuxMCE.

Med R-House kan man kontrollera hårdvara, tex. dimma lampor, låsa upp dörrar, klimatkontroll eller styra mediacenter.

Han visade också hur han använder en iPhone som fjärrkontroll till sitt hus.

RailsConf: Onsdag

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 sett den största prestandavinsten.

Object#extend är dock ett stort problem för att kunna cache:a metodanropen.

Det är viktigt att förstå hur extend fungerar så att man inte tömmer
metodanropscachen i onödan.

Konstanter

För att hålla prestandan upp ska man hålla konstanter konstanta, inte helt oväntat.

Options Argument

En option hash strider mot DRY.
Det är mycket snabbare att använda diskreta argument.

obj.run rescue nil

Det är otroligt ovanligt att man vill fånga alla StandardError, vilket är 101 underklasser; IOError, SecurityError, TypeError, Etc.

obj.run rescue Exception

I stort sett samma sak som rescue nil, fast värre, nu kan man inte ens ctrl-C’a ut ur koden.

Autoload

Helt tråd-osäkert, fördröjer laddning av koden.
Använder inte Kernel#require, alltså går det inte att köra autoload från gems.

Super

Man måste ta bort blocket om man inte vill att det ska skickas uppåt:

super(a, &nil)

Super ser bara senaste versionen av argumenten:

def foo(a, b)
  a = 1
  b = 'bar'
  super
end

Slutsats

  • Enkel kod > Komplex kod
  • Det finns inga gratis luncher
  • Tänk igenom två gånger, skriv koden en gång
  • YAGNI

Call into your Ruby code! Writing voice-enabled apps in Ruby with Adhearsion

Jay Phillips (Codemecca LLC) visade hur man kan programmera Ruby för att styra Asterisk genom att använda sig av Adhearsion.

Tyvärr fungerade det inte att använda Ahearsions Sandbox på konferensens wlan,
så jag får ta och testa det lite senare.

Verkar intressant att kunna styra sin applikation genom att ringa till den :)

RailsConf: Tisdag

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 blir unobtrusive och ramverksagnostiskt
  • Mer agnostisism; Action ORM, Generatorer
  • Refakturering; Abstract Controllers, ActiveRecord, Callbacks

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 raw.

Unobtrusive JavaScript kommer att implementeras genom att använda HTML 5 attribut:

## Rails 2.x
<%= link_to_remote "Delete", :url => @comment, :method => :delete %> 
<a href="#" onclick="new Ajax.Request('/comments/1', {asynchronous:true, 
evalScripts:true, method:'delete'}); return false;">Destroy</a>
 
## Rails 3.x
<%= link_to "Delete", @comment, :remote => true, :method => :delete %> 
<a href="/comments/1" data-remote="true" data-method="delete">Destroy</a>

Och sen appliceras metoderna med JavaScript:

$(document.body).observe("click", function(event) { 
  var element = event.findElement("a['data-remote']"); 
  if (element) { 
    var method = element.readAttribute("data-method") || "get"; 
    new Ajax.Request(element.readAttribute("href"), { method: 
method }); 
    event.stop(); 
  } 
});

Han visade på hur viktigt hög produktivitet faktiskt är, hur motivation snabbt minskar vid svåra problem.

Relaterade bloggposter

The Gilt Effect: Handling 1000 Shopping Cart Updates per second in Rails

Anställda på Gilt Groupe berättade om hur deras serverarkitektur ser ut, de använder PostgreSQL, 400+ Thin servrar, 2 ZXTM’s (Zeus Extensible Traffic Manager)

Applikationen är skriven i Ruby on Rails.

De måste jobba med sharding för att klara av den höga lasten.

De använder ett internt CMS skrivet i Rails och har två “CDN”-servrar framför som serverar förgenererade sidor. (En server på östkusten och en på västkusten)

Stort antal transaktioner

Dedikerade tjänster för varje transaktion – JRuby + EC2 + SQL + Rails

EC2 (lastbalanserad genom Zeus), expanderbar kapacitet, tid/behovsbaserad ökning av tillgänglig kapacitet.

De arbetar tillsammans med Joyent för hosting.

Hög volym / Delat tillstånd

Unik ehandelsmodell, “flash sale” där alla produkter tar slut på en dag.

Inventariemodellen

Gilt hanterar varje fysiskt objekt individuellt

  • Begränsat antal
  • Går inte att få tag i fler

Varukorgsmodellen

Shoppingfasen:

  • Att lägga till en produkt skapar en reservation
  • Om produkten är tillgänglig får man en 10-minuters reservation
    • Man måste betala in

Betalningsfasen

  • Förfråga om att förlänga reservationen
  • Om reservationen är , förlängs den med 10 minuter
    • Man kan får en prioriterad uppgradering
  • Om reservationen inte är valid och det inte finns några lediga produkter
    • Meddelande till kunden att produkten är slut och att man kan skriva upp sig på en väntelista.

Betalning genomförd

Respektive produkt markeras som såld i databasen

Gilts framtidsstrategi

  • Kärntjänsterna är vy-lösa (MC)
  • Enda gränssnittet är JSON/HTTP
  • Externa tjänster skrivna i Ruby, Java för kritiska operationer internt
  • Internt ramverk kallat Blackbird under utveckling, det hanterar skalbar deployment av tjänter i Ruby.

PWN Your Infrastructure: Behind Call of Duty: World at War

Tyvärr fick jag inte plats inne på föreläsningen UI Fundamentals for Programmers med Ryan Singer från 37Signals så det fick bli mitt andrahandsval om hur Agora Games skalar sin serverarkitektur.

Jason LaPorte (Agora Games) 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.

För att hantera fel jobbar de med virtualisering med hjälp av Terremark och replikation för mjukvaruproblem.

De propagerar /usr/local till alla servrar med NFS, vilket gör att uppdateringar sker hyffsat smärtfritt.

De har ett internt system de kallar Overlord skrivet i Rails, det sköter hantering av konfigurationsfiler som sedan laddas ner av respektive server.

Monit ser till att de konfigurerade tjänsterna startas samt startar om tjänster som gått ner.

RRDTool visualiserar hur de olika tjänsterna mår genom att använda Monits xml-format. (http://server/_status?format=xml)

Centraliserad deployment med ett enkelt shellscript som:

  • Updaterar koden
  • Uppdaterar miljön
  • Startar om servrarna

JavaScript Testing in Rails: Fast, Headless, In-Browser. Pick Any Three.

Larry Karnowski och Jason Rudolph (Relevance, Inc.) visar Blue Ridge, ett ramverk för testdriven utveckling med JavaScript.

Delarna i Blue Ridge

  • Rhino – en Java-baserad JavaScript interpreter
  • Screw.Unit – en BDD syntax för JavaScript, liknar RSpec
  • Smoke – ett JavaScript mocking & stubbing bibliotek, liknar Mocha
  • env.js – en DOM implementation skriven helt i JavaScript

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.

Relaterade länkar

Smacking Git Around – Advanced Git Tricks

Presentationen (PDF) |
Cheat-sheet (PDF)

Scott Chacon (GitHub) började med “Git in 60 seconds” och gick vidare med att gå igenom mer avancerade funktioner i Git.

  • Med filter branches kan man ta bort en fil från alla commits.
  • Subtree merging är ett alternativ till Submodules.
  • Git Bisect är användbart för att hitta vilken commit som orsakade problem
  • Man kan diffa binära filer genom att använda .gitattributes

Quality Code with Cucumber

Aslak Hellesøy (Bekk Consulting AS) berättar om BDD med hjälp av Cucumber.

  • Step – Method invocation
  • Step definition – Method definition

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.

Tags är en riktigt trevlig liten feature.