<?xml version="1.0" encoding="UTF-8"?>
<posts type="array">
  <post>
    <body>Solen skinner p&#229; en sk&#248;n dag. Den offenlige trafik er brudt samme efter et bankkup og jeg er p&#229; vej til IT Universitetet i K&#248;benhavn. Det er tid til den f&#248;rste RubyFools konference i K&#248;benhavn. IT Universitetet p&#229; amager er bygget af samme mand som byggede Nordea i K&#248;benhavns havn. Det ser man p&#229; det sindsyge spild af rum og plads kun 2 meter inde i bygningen. Gulvet er den n&#230;sten ting man l&#230;gger m&#230;rke til, det minder om T&#229;rby station. Bygningen er kedelig og uden karisma. 

h3. Keynote Dave Thomas

Dagens keynote speaker Dave Thomas har til geng&#230;ld masser af spunkt. Jeg m&#229; indr&#248;mme at han er set i bedre form men det fede ved ham er at hans bundnieau er h&#248;jt. Hans prim&#230;re budskab er at man skal finde gl&#230;den i ens arbejde. Keynoten er delvis en blanding af talen om &#8220;Software Craftsmanship&#8221; hvor hans p&#229;stand er at vi som udviklere eller programm&#248;re ikke har et s&#230;t af v&#230;rkt&#248;jer som vi benytter hvergang og alts&#229; dermed ikke noget h&#229;ndv&#230;rk i traditionel forstand. Nej vi starter fra bunden hvergang og sidestilles dermed med kunsterne, skribenter eller digter. Jeg kan nu bedst li den sidste da jeg lever med skriveblokering hver morgen. Dave lister en stribe ting som g&#248;r ham forelsket.(red. I Ruby)

I Ruby kan man g&#248;re en ting p&#229; mange m&#229;der, fx en for l&#248;kke kan laves p&#229; seks m&#229;der. Andre sprog definere en bestemt syntaks som skal f&#248;lges overalt mens Ruby lader programm&#248;ren bestemme hvilken form han bryder sig mest om og det g&#248;r en verden til forskel. En essentiel forskel er at mange nu er beviste om at de skriver koden til andre mennesker og ikke til systemet. I hele software historien har vi skrevet kode til maskinerne, men nu er vi alle ved at kommet til den erkendelse, af koden vi skriver skal l&#230;ses og vedligeholdes af mennesker. 

Jeg kan li Dave og hans pauser i talerne, han kan vel snart skrive en bog om at l&#230;gge pauser ind i taler. Jeg kan li at han, som en af de f&#229;, giver sig selv tid til eftertanke og refleksion over hans arbejde. Dave laborer en del over paradokset at v&#230;re perfekt eller tro man har skabt noget perfekt. Hvis noget er perfekt kan det ikke blive bedre. Hvis man &#230;ndre det perfekte er sandsynligheden for at fejle 100 procent. Det var Lucilio Vanini(1600) som sagde at &quot;den st&#248;rste perfektion i sig selv er uperfekt.&quot; Man kan tage den lidt l&#230;ngere og sige at intet nyt kommer ud af perfektion, fx med disse citater fra Dave Thomas's slideshow:

    * &quot;It is absurd to look for perfection&quot;
    * &quot;Perfectionism is the enemy of creation&quot;
    * &quot;Out of perfection nothing can be made. Every process involves breaking something up&quot;
    * &quot;Perfectionism is the word of the opressor&quot;
    * &quot;Perfectionism os slow death&quot;
    * &quot;Only mediocrity can be trusted to be always at its best&quot;
    * &quot;Perfection has one grave defect: it is apt to be dull&quot;


Meningen er at hvis man er n&#230;rtagende med sine perfekte koder bliver man ikke bedre. Betragt alt hvad man laver fra nye vinkler, med andre perspektiver, en anden kontekst og vend ofte tilbage for at forbedre. Hans form&#229;l med hele denne seance er at pointere at man ikke skal v&#230;re s&#229; pokkers stivnakke men mere efterstr&#230;be en pragmatisk holdning. Men mest vigtigt af alt, ha det sjovt. 

Dave pointere at Ruby ikke er perfekt, men inkonsistent. Hvis man skulle g&#248;re sproget konsistent skulle man g&#248;re Matz mere retskaffen. Denne pointe fik Matz til at grine h&#248;jt. Tydeligvis ikke den vej han t&#230;nker. 


h3. REST with Stefan Tilkov

Efter at have l&#230;st ca. 200 posts fra Stefan var mine forventninger h&#248;je. Han levede ikke helt op til dem. Jeg forventede en skarp og let provokerende anti SOA gut som ikke holder sig tilbage for at give sin uforbeholdne mening. 

Stefan har en klar ide om hvordan REST skal fortolkes og han er god til at pr&#230;cisere de ofte mange fejl opfattelser folk har omkring REST principperne. REST er en forholdvis nemt stil at adoptere men kr&#230;ver en del arbejder f&#248;r man helt f&#229;r det forkromede overblik under huden. Tilkov giver tre bud p&#229; REST og hvad REST betyder for ham. Han understreger at man ikke laver REST bare fordi man kan returnere XML.

# En arkitektonisk stil. Rod Fielding beskriver en r&#230;kke regler som skal overholdes og arkitektonisk princip underlagt kommunikations protokollen HTTP.
# Web brugt rigtigt. Applikations arkitektur der bruger HTTP, URI og andre web standarder. Er p&#229; web og ikke gennem web. WOA, ROA eller RESTfull HTTP.
# XML uden SOAP. Send XML over HTTP. Overtr&#230;der web p&#229; lige fod med WS. POX

Kun den f&#248;rste er &#230;gte REST. Fordi det er s&#229;dan Rod har bestemt det. Den anden kan bruges. Med den tredie mulighed f&#248;lger den sorte pest.

Hvorvidt din applikationer er &#230;gte RESTful kan kontroleres med fem enkelt steps.

# Hver resource skal v&#230;re uniq identificerbar.
# Link resource til hinanden.
# Brug standard metoder. HTTP, GET, POST, DELETE, osv.
# Returner forskellige repr&#230;sentationer. JS, JSON, XML osv.
# Kommunikere uden kommunikations tilstand p&#229; server.

Hvis man kan svare ja til disse sp&#248;rgsm&#229;l f&#229;r man en masse fordele. fx vil applikationen skalere godt idet serveren ikke holder p&#229; klient tilstand og m&#229;ske rammer det n&#230;sten link en helt anden server. Man f&#229;r ogs&#229; et enkelt og uniformt interface gennem l&#248;sningen med stabilt antal af operationer.
N&#229;r man designer en RESTful applikation kan man f&#248;lge fire steps. Tilkov spurter gennem punkterne som oprindeligt er defineret REST bogen fra &#229;r 2003.

* Identificer resourcer og design URI layout.
* Identificer repr&#230;sentation formatter.
* Identificer metode semantik.
* Identificer respons koder.

En blandt publikum sp&#248;rger hvordan man kan holde sig DRY hvis man fx kan oprette en kunde p&#229; flere forskellige m&#229;der i UI. Stefan svare meget underligt, han skeler ikke mellem UI og REST hvilket jeg slet ikke forst&#229;r. REST er jo ikke et api til UI. REST api&#8217;et giver en URI hvor man kan kreerer en ny kunde. Applikationen som laver UI m&#229; have flere controller som render forskelige views men benytter samme REST service. Jeg tror de fleste har har pr&#248;vet at se repreterene kode i deres controllere og de er som regel bare et symptom p&#229; godt funktionalitet i brugergr&#230;nsefladen. Jeg er stor tilh&#230;nger af Tilkov og jeg fandt tr&#248;st hos ham da jeg s&#229; mange projekter stagnere p&#229; grund af SOA og WS d&#248;dsstjerne teknologier.

h3. Rails 2.0.1
 
Michael Koziarski havede kogt et 3 timers foredrag om nye ting i Rails 2.0.1 ned til 1 time. Han er helt sikkert dygtig men jeg kan ikke holde til hans ensartede stemmef&#248;ring. F&#248;rst til sidst kom nogle nyheder som jeg kunne bruge. fx metoden protect_against_forgery som beskytter mod Cross-site request forgery.  

h3. Versionering

Ole &#216;stergaard holder et foredrag om versionering p&#229; modelniveau. Han l&#248;ber gennem de plugins som findes til Rails som kan n&#230;sten al det men forventer. Problemet er dog at de ikke kan netop det som Ole kr&#230;ver og han har p&#229; den baggrund opfundet endnu et plugin. Alle plugins arbejder med samme l&#248;sninger. Shadow copies. Samme metodik som &quot;Time Machine&quot; i OS X.  

Alle plugins arbejder med generelt datalogisk problem. Lad os antage at en aktie applikation ikke kan finde historie p&#229; alle transaktioner og firmaet er ved at g&#229; konkurs. S&#229; jeg vil vide hvem der har gjort hvad 2 uger tilbage. 

Ole hacker en del kode og det g&#229;r galt en enkelt gang. Naturligvis, den sande mester kendes ikke p&#229; de fejl man laver men mere p&#229; hvordan man evner at komme videre. 

h3. Merb 

Min gode ven Kim taler om Merb. Et letv&#230;gts MCV fremwork som er ORM agnostic. Emnet er meget interesant idet n&#230;sten alle kun kender Rails men der findes andre l&#248;sninger. Merb er hurtigere, mere letv&#230;gt og adr&#230;t. Merb er at fortr&#230;kke hvis l&#248;sningen kun omhandler fx REST, service gr&#230;nseflade. Merb er thredsafe og giver dermed mulighed for at eksekvere flere samtidige tr&#229;de i mods&#230;tning til Rails. 

Kim taler om det faktum at Merb er mere organiseret end Rails med jeg tror nu at det sidst fremkommende framework har en fordel blot fordi man som professionel stj&#230;ler ideer fra de andre. 

Desv&#230;rre for fordraget er Kim meget nerv&#248;s og kommer aldrig ind i det mode hvor man kan nyde emnet og give sig hen. Det er synd for jeg ved at han har enorme m&#230;ngder af god erfaring at &#248;se af. 

h3. Thrackhosts

Jeg bliver n&#248;dt til at give en bad smily til trackhost paradigmet som burde give noget anden og mere end blot: Her har vi en taler. Ja tak. det viste jeg sgu da godt, det st&#229;r ovenik&#248;bet i programmet. S&#229; hvad fanden laver s&#229; en trackhost? Han udfordre de folk som er p&#229; hans trackhost liste, han konfrontere dem og stiller forventninger i sigte hos publikum. Han tager et skridt tilbage og leder den r&#248;de tr&#229;d som b&#248;r findes p&#229; et track! Og han g&#248;r det med list og konduite s&#229; publikum er sikre p&#229; at talerne giver sig helt ud og selv f&#229;r noget ud af eventen. Helt &#230;rligt, jeg kan ikke bruge en trackhost som mumler og bare repetere hvad jeg i forvejen kan se p&#229; tavlen. 
Glenn Vanderburg kan den slags. Han var trackhost p&#229; Advanced ruby og Rails og fik p&#229; fornem vis pr&#230;senteret talerne samt gennemg&#229;et Leaky abstraction. 

h3. The Law of Leaky Abstraction

Loven om Leaky Abstraction betyder at hvergang vi bygget endnu et smart abstraktions lag ovenp&#229; for at opn&#229; bedre performents eller enkelthed som vil effektiver verdenen, ender vi op med at bruge mere tid p&#229; de underliggende lag. Moralen er at man ikke kan abstrahere sig fra l&#230;rdom. 
Glenn mener at det st&#248;rste i Ruby og Rails er openness. Det er muligt at se, bruge og bearbejde ruby kode med korte roundtrips. Han bifalder at Rails er lavet for de 90 procent almindelge krav men stadig &#229;bent for forandring i de sidste 10 procent. 

h3. Matz 

Konferencens h&#248;jdepunkt var at m&#248;de skaberen af Ruby. Yukihiro Matsumoto. Matz er en venlig og ydmyg mand som bare gerne vil hacke kode og hygge sig med sin famille. Matz holder en keynote om Ruby, fortid nutid og fremtid. Og s&#229; sov han over sig p&#229; dagen hvor han skulle holde keynoten og ankom f&#248;rst i sidste &#248;jeblik.  
I 1992 var Matz uden job og havde masser af tid tilovers. Han n&#248;d at downloade programmeringssprog for at afpr&#248;ve dem. 

En dag fik han et job p&#229; kontor hvor der stod en computer hvor han i hemmelighed arbejdede p&#229; sit nye sprog. Han tog de fede ting fra Fortran, Cobolt, Lisp, Agol og blandede med scriptsprog som Perl og Python og miksede dem samme.  
Det var ikke nogen succes. Han m&#229;tte gennem 10 fors&#248;g f&#248;r et tilfredssmil brede sig. Matz arbejdede med grundtanken at sproget skulle g&#248;re ham glad n&#229;r han arbejdede med det. Det skulle v&#230;re udtryksfuldt og hurtigt samt ha en let syntaks. Et n&#248;gle ord i Ruby er produktivitet. 

Matz fors&#248;ger flere gange at underbygge det faktum at software betyde mere og mere for virksomhederne men tiden til at skabe bliver stadig mere knap. Hans pointe er at branchen i mange &#229;r har fors&#248;gt at optimere p&#229; metodikker og hele supportsystem omkring software udvikling men kun f&#229; t&#230;nker p&#229; de v&#230;rkt&#248;jer vi bruger. Jeg kan kun v&#230;re enig. 

Matz fortalte om Ruby 1.9 og nogen af de nye features. Fx returnere metoderne each, map nu enumerators. Ikke noget under at codebase vokser og Java har m&#229;ske ikke levet forg&#230;ves. Trods alt. 

&lt;pre&gt;
e1 = [1, 2, 3, 4].each
e2 = [10, 11, 4].each
loop {
	p e1.next+e2.next
} # prints 11, 13, 7
&lt;/pre&gt;

Hvad sker der noget en liste l&#248;ber t&#248;r for entiteter? Ikke noget. Er det farligt. Jeg kan overhoved ikke overskue alle konsekvenser ved denne mulighed, eller risiko endnu.   

Fibers er ogs&#229; en ny ting I Ruby. En firber er en slags letv&#230;gts tr&#229;d. Efter min bedste overbevisning er det ikke meningen at disse tr&#229;de skal eksekvere p&#229; forskellige cores men udelukkende kunne sikre asynkron k&#248;rsel. 

Jeg opfandt Ruby til mig selv, for at f&#248;le mig godt tilpas og nyde at arbejde. Og hvis jeg kan hj&#230;lpe med at f&#229; de samme f&#248;lelser op i folk over hele jorden er det sk&#248;nt. Citat Matz. </body>
    <category-id type="integer">3</category-id>
    <created-at type="datetime">2008-04-01T13:17:00Z</created-at>
    <id type="integer">107</id>
    <post-id type="NilClass">107</post-id>
    <published type="boolean">false</published>
    <tag-id type="NilClass">47</tag-id>
    <title>First rubyfools conference</title>
    <updated-at type="datetime">2008-09-12T12:32:57Z</updated-at>
  </post>
</posts>
