RailsConf laatste dag

Gepubliceerd op: 15.IX.2006 03:27 BST
Categorieën: events, rails

De tweede en laatste dag RailConf Europe 2006 alweer. Vandaag wordt er geopend met een praatje van Jim Weirich over het schrijven van herbruikbare ruby code, “playing it safe”. Daarna komt Why The Lucky Stiff iets vertellen over sandboxes en andere dingen.

Update 15:00: begin praatjes te beschrijven

Update 10:30 dag later: meer praatjes uitgewerkt

Update nog weer later: Afsluiting van Dave Thomas uitgewerkt en ander praatjes toegevoegd

Jim Weirich, Playing it safe

Jim, auteur van rake en coauteur van rubygems, verteld hoe je veilig met de open natuur van ruby om kan gaan. Hoe maak je ruby libraries die andere libraries en applicaties niet bijten als ze samen worden gebruikt.

Dit is een typisch een zorg die komt van java ontwikkelaars en terecht. Ruby geeft je de mogelijkheid om alles kapot te maken. Jim haalt de The Chainsaw Infanticide Logger Manuever post van Zed Shaw aan en laat zien dat afspraken belangrijk zijn met het World of Warcraft with Leeroy Jenkins filmpje.

Het is duidelijk dat het blindelings openen van ruby classes en modules ongewenste gevolgen kan hebben. Jim geeft richtlijnen; o.a.

  • Gebruik namespaces zoals MyProject::Tree::Node voor classes, modules en constanten. In ruby 2.0 worden waarschijnlijk selector namespaces toegevoegd en kan je ook veilig classes als String in je namespace betrekken.
  • Voorkom het aanpassen van functionaliteit, probeer alleen functionaliteit toe te voegen. Als je bijvoorbeeld een eigen versie van to_s wilt introduceren, gebruik dan myproject_to_s om te voorkomen dat andere code breekt.
  • Vraag op de ruby-talk of rubyonrails-talk lijst of het toevoegen van een bepaalde publieke methode wel een goed idee is. Misschien is er iemand de weet heeft van een (andere) librarie die deze methode naam al gebruikt.
  • Breek geen inhaak ketting (hook chains).
Als je bijvoorbeeld const_missing of method_missing implementeert, handel dan alleen de gevallen af die voor jouw interessant zijn en laat de andere gevallen door de originele implementatie afhandelen. Op die manier kunnen meerdere libraries method_missing op algemene classes implementeren maar hoeven ze elkaar niet in de weg te zitten.
  • Gebruik de principes van design by contract om te bepalen of een uitbreiding geoorloofd is. In DBC staat twee gegevens centraal: wat zijn de pre- en post-condities voor een methode. De pre-condities mogen losser worden en de post-condities mogen strakker worden.
Als voorbeeld geeft Jim de Math.sqrt(x); typische pre-condities zijn x => 0 en post-condition (r * r - x).abs <= 0.001 (deze worteltrekking heeft een precieze van minimaal 0.001). Als je de sqrt methode zou veranderen en de pre-conditie strakker zou maken (bijvoorbeeld x > 0) dan zou code breken welke nou net Math.sqrt(0) uitvoert. Als je daarentegen de pre-conditie losser maakt door negatieve getallen toe te laten, zal geen code breken omdat er geen is welke sqrt negatieve getallen voert, alleen dan de code waarvoor je deze verandering introduceert. Voor negatieve input kan je bijvoorbeeld complexe getallen terug gaan geven. Anders om is het geoorloofd een verbeterde implementatie van sqrt te schrijven welke hogere precieze heeft; (r * r - x).abs <= 0.0000001. De post-conditie is nu strakker geworden en er is geen code die hierop zal breken.

Het schrijven van herbruikbare code is een kwestie van netjes zijn voor anderen. Dit geldt voor alle programmeertalen niet alleen Ruby.

Why the lucky stiff

Why is de rockster ven de ruby gemeenschap of beter een godheid. Z’n bekenste werk is Why’s (Poignant) Guide to Ruby, een halucogene gids in de Ruby taal met bekende figuren als de foxes en Dr. Cham en termen als “chunky bacon”. Why begint met de mededeling dat de vrouwen verzocht worden hun hoed afzetten en mannen hun snor, zo is het goed nu kunnen we aan de slag.

Een van why’s favoriete operators is de “splat operator” (het sterretje als in system(*args)) welke eruit ziet als een platgeslagen spreeuw. Tussen tekeningen van dieren geeft hij pareltjes als:

Sandboxes zijn iets waar hij de laatste tijd mee bezig is. Hij laat zien hoe hij twee applicaties tegenlijk heeft draaien in een enkele mongrel proces. Dit opent de deur naar deployments zoals in de java wereld met war en ear files.

Al z’n voorbeeld code is handgeschreven en krijgt het voor elkaar z’n code daardoor nog mooiere over te brengen. “I wish I can write ruby code with a pen like this” geeft hij toe. Erg inspirerende presentatie!

Dan Webb, Unobtrusive Ajax with Rails

Dan Webb geeft z’n presentatie een tweede keer, dit keer in de grote congres zaal, omdat veel mensen z’n praatje moesten missen omdat het zaaltje waar hij in gepland was over vol was.

Hij vertelt over z’n ervaring met javascripting in de laatste jaren en hoe het nu door de “web 2.0” hype weer hip is. Daarbij haalt hij aan dat browsers tegenwoordig veel beter zijn maar dat dat je geen excuus geeft web applicaties te schrijven die helemaal niet werken als javascript om wat voor reden dan ook niet beschikbaar is.

De Rails javascript helpers zoals link_to_remote zijn niet behulpzaam in het maken van web applicaties die met en zonder javascript werken. Sterker nog ze genereren semantisch incorrecte HTML; <a href="#" onclick.. verwijst namelijk helemaal niet naar een andere resource waar de anchor tag voor bedoelt is. Daarbij wordt de link_to_remote methode vaak gebruikt voor dingen als “gewerk” en “verwijder” knoppen en dergelijke acties horen al helemaal niet thuis in een anchor tag, gebruik hier voor button_to.

Om dit probleem op te lossen heeft hij de Unobtrusive JavaScript Plugin ontwikkelt. De plugin helpt een javascriptloze web applicatie uit te breiden met javascript verbeteringen door dat gedrag er door middel van “behaviours” boven op te zetten. Op deze manier blijf een website gewoon functioneren als de javascript niet wil of kan werken.

De UJS plugin introduceerd helpers welke met javascript bijvoorbeeld onclick acties na het laden van de pagina toevoegd. Met een css-selector geef je aan welk element opgeleukt moet worden. Bijvoorbeeld:

apply_behavior 'a.help:click', 'Help.open(this.href)'

Deze helper aanroep (in je view) zorgt ervoor dat alle links met class “help” worden uitgebreid met een onclick waarde Help.open(this.href). Deze Help.open functie kan dan bijvoorbeeld een popup of iets dergelijks openen.

Een ontwikkelaar van Odeon in het publiek deelt z’n problemen met de javascript helpers in Rails en verteld dat ze ook dergelijk dingen hebben gedaan bij Odeon. Hij had een aardige anekdote dat de javascript libraries op de odeon site een dag niet beschikbaar zijn geweest en dat ze daar pas heel laat achter kwamen omdat de site ook gewoon werkt zonder.

Deze plugin ga ik zeker gebruiken! Zelf had ik me al eerder geïrriteerd aan de link_to_remote methode en vind “graceful degradation” een belangrijk doel om na te streven.

David Anderson, A Cheeky Wiki on Rails

TE DOEN Informl

Charles Oliver Nutter, JRuby on Rails

Charles, vorige week een wereld baan gekregen bij Sun Microsystems, geeft een demonstratie van een Rails applicatie die draait onder JRuby (in een Java Virtual Machine dus). Hij heeft de “depot” applicatie uit Agile Web Development with Rails uitgebreid met een EJB3 model en werkt een MBean teller bij via JMX.

De Ruby code welke met Java praat ziet er heel mooi Rubyesk uit. In de interfaces wordt Java’s camelcase, setSomeParameter omgezet naar set_some_parameter in sommige gevallen zelfs some_parameter=. De performance is nog niet optimaal maar daar wordt veel voortgang in geboekt, de versie in subversion als al meer dan 50% sneller dan de meest recente release.

JRuby geeft veel meer ontwikkelaars de kans om Rails te gebruiken in situaties waar het Java platform een gegeven is. Naast meer Rails ontwikkelaars gaat voor tooling ook heel veel betekenen. Het RDT project en daarmee het RadRails kunnen heel veel baat hebben bij JRuby, denk aan geïntegreerde debugging. Charles en Thomas zullen betrokken worden in de Ruby tooling voor Netbeans.

James Duncan Davidson, The web is a pipe

James, bekent van Java projecten ant en tomcat, houdt hetzelfde praatje als hij voor RailsConf in Chicago heeft gedaan; The web is a pipe. Persoonlijk heb ik niet veel nieuws gehoord.

Dave Thomas, Risk


PragDave, schrijver van Agile Web Development with Rails, de Pickaxe boeken, ontwikkelaar van rdoc/ri en vele andere dingen, sluit de conferentie af. Hij vertelt dat hij tijdens de 9-11 ramp in Denemarken was op de JAOO conferentie en dat hij tijdens de presentatie van Matz (de maker van ruby) hoorde dat er vliegtuigen in het WTC gevlogen waren.

De reactie op de bus bommen in London maakt Dave trots dat er engels bloed in hem zit. In tegenstelling tot de amerikanen reageren de Engelsen veel minder bang op een dergelijk aanval. Hier in London worden de risico’s veel rationeler ingeschat, neem het weghalen van alle prullebakken in openbare ruimtes nadat de IRA hier bommen in plaatsten.

FUD (fear, uncertainty and doubt) is een vorm van terrorisme, the zaait angst. De post van Joel Spolsky over RubyOnRails is, zoals DHH ook aangeeft, is een klassiek voorbeeld van FUD. Dave haalt alle argumenten van Joel aan en ontzenuwd ze.

De interessantste vond ik z’n dynamic typing argument; gegeven een Java programma met ongeveer 40 variabelen maar 10.000 objecten tijdens runtime, waar hangen deze objecten uit? Ze zitten in collecties. Omdat collecties, voor de Java 5 compiler, altijd alleen objecten van het type Object bevatten en ze dus gecast moeten worden naar een ander type, gebruikte je dus eigenlijk dynamic typing. Zo had ik er nooit naar gekeken.

En nog een briljante anti-FUD quote: “And if somebody worries what will happen when suddenly DHH disappears, that ship has already sailed!”

Terrorisme maakt mensen bang en als je bang bent is het moeilijker om risico’s in te schatten. Volgens Dave zijn programmeurs experts in het inschatten van risico’s. We vragen ons constant af of we in problemen verzeilt raken als we een bepaalde aanpak nemen.

Bij het security probleem van een paar weken is erg fel gereageerd van buiten de gemeenschap. Er zijn het core team veel verwijten gemaakt maar volgens Dave hebben ze correct gehandeld.

De Rails gemeenschap moet niet bang zijn voor FUD en moet zich er niet door laten intimideren. Risico is er altijd en deze moet je samen met je klant of organisatie onder controle houden.

En over het nemen van risico gesproken dit is het moment om ze te nemen. De schaarste op de IT markt is ongekend, er zijn mogelijkheden te over. Of zal als Dave het precies bracht:

You know that song, it goes like: “And if you can’t be, with the one you love, Love the one you’re with”

BULLSHIT!

“If you can’t be with the one you love, quit!”

or like Martin Fowler says: “If you can not change your organisation, then change your organisation.”.

Juice10 @ ongeveer 1 uur

Klinkt interessant, jammer dat ik er niet bij kan zijn.