Rails 2.3.5
Stephan Kaag wo 09 dec 09
Hij is al een paar dagen uit maar het stond hier nog niet vermeld. Rails 2.3.5 is een feit.
Nieuw in deze release is een security fix die een XSS weakness verhelpt die eigenlijk in alle voorgaande versies terug te vinden is.
Daarnaast zijn er nog een aantal kleine veranderingen doorgevoerd. Het is nu onder andere out-of-the-box mogelijk om een andere XML parser te gebruiken dan de standaard meegeleverde.
Iedereen wordt geadviseerd om te updaten, voornamelijk vanwege de security fix.
Gepost in hor | 0 reacties
Wireframes met OmniGraffle
Gawin Dapper za 05 dec 09
Soms kan het prettig zijn een interactie ontwerp van je website of applicatie te hebben voordat je rails in duikt. Vaak helpt het dan om wireframes te maken. Dit kan bijdrage tot een zekere mate van consensus onder de stakeholders binnen een project. Het is een snelle manier van visueel duidelijke maken wat de website moet kunnen, en hoe het er ongeveer uit gaat zien.
Er zijn veel verschillende wireframing applicaties die je kunnen helpen bij het ontwikkelen van wireframes. Op de Mac kun je bijvoorbeeld OmniGraffle Professional gebruiken. Binnen OmniGraffle zijn een aantal functies om het maken van wireframes en prototypes een stuk makkelijker te maken.
OmniGraffle Shared Layers
OmniGraffle beschikt over de mogelijkheid om shared layers aan te maken. Een shared layers kun je op verschillende canvases terug laten komen. Als je dan wijzigingen in de shared layer aanbrengt, dan is dit direct in alle canvases zichtbaar. Dit kun je bijvoorbeeld gebruiken om een Header op verschillende pagina’s terug te laten komen, dan hoef je bijvoorbeeld bij een nieuw menu item deze slecht één keer in je header te zetten (inplaats van op iedere pagina apart). Je voegt een nieuwe shared layer toe door met de rechter muisknop op je canvas te klikken, en dan op shared layer te klikken. Let er even op dat je wel je shared layer als active layer instelt voordat je deze kunt bewerken.

OmniGraffle Actions
Naast de shared layers kun je ook gebruik maken van actions. Door het toewijzingen van een actie aan een object kun je bijvoorbeeld verspringen tussen canvases, inzoomen om een gedeelte van je canvas. Een URL of een andere applicatie openen:

Je kunt zelfs AppleScript toevoegen aan een actie:

Bij een wireframe kun je zo in de header alle menu items naar de correcte canvas laten verwijzen.
OmniGraffle Exporteren naar PDF
De actions komen tot leven in de presentation mode, welke gestart kan worden met Option-Command-P (alt + apple + p). Dit kan bijvoorbeeld handig zijn bij het doorlopen van een Prototype.
Echter heeft OmniGraffle ook de mogelijkheid om je gehele document te exporteren naar PDF. Hiervoor selecteer je in de export functie Option-Command-E (alt + apple + e), het type PDF vector image, en vervolgens Entire Document.

Een leuke extra functionaliteit is dat de geëxporteerde PDF de links behoud. Hierdoor kun je in je geëxporteerde PDF de links in je header blijven gebruiken!
Bron bestanden
Gepost in | 0 reacties
Learnivore.com
Michael Koper za 05 dec 09
Ik kwam vandaag learnivore.com tegen. Een portal website voor al de mogelijke screencasts die te maken hebben met programmeren en voornamelijk Rails en Ruby, maar ook jQuery, Databases,Testen etc etc etc. Ik zou zeggen neem eens een kijkje!
Gepost in hor | 1 reactie
Default text escaping in rails 2.3
Chiel Wester do 03 dec 09
In Rails 3.0 is een wijziging opgenomen waarbij alle teksten automatisch ge-escaped worden. Dus in plaats van steeds
<%= h article.content %>
te moeten doen, wordt deze tekst in het vervolg automatisch ge-escaped.
Om deze functionaliteit ook in de rails 2.3 versie beschikbaar te maken, is er een plugin ontwikkeld. De rails_xss plugin.
De functionaliteit wordt dus omgedraaid. Wanneer je een tekst niet wilt escapen moet je dit in het vervolg expliciet aangeven:
<%= raw article.content %>
Gepost in hor | 0 reacties
Devise: Authlogic+Clearance on steroids
Chris Brandhorst di 01 dec 09
Met de opkomst van Rack als basis van Rails applicaties (sinds v2.3) wordt het steeds interessanter om extensies en/of plugins te maken die gebruik maken van deze mooie architectuur.
Zo ook Devise. Deze nieuwe authenticatie-module combineert het beste van Clearance (een full-stack oplossing) en Authlogic (flexibiliteit van het acts_as_authenticated model) en voegt daar nog een aantal leuke extra’s aan toe.
Devise heeft out-of-the-box ondersteuning voor meerdere user-roles en komt standaard met vijf verschillende strategieën voor authentication, confirmation (via e-mail), password recovery, token generation en email & password validations. Nieuwe strategieën (zoals invitations) zijn eenvoudig te implementeren, en kunnen in een volgend project direct overgenomen worden. Daarnaast (zoals het tegenwoordig behoeft) heeft het volledige i18n support.
Sinds versie 0.4 vereist het instellen van Devise eigenlijk geen handmatig werk meer, maar kan alles worden ingesteld met behulp van generators.
Als je geïnteresseerd bent, check dan de demo-app.
Gepost in hor | 0 reacties
U(sec)-571: datetime attributen
Paul Engel ma 30 nov 09
Hierbij een “even opletten” artikel betreft het vergelijken van datetime attributen van een model. Dit kan namelijk soms voor onverwachte resultaten zorgen.
Zoals bekend, kun je een datetime attribuut zetten met:
>> foo.ext_updated_at = "2009-11-30 09:11:01" => "2009-11-30 09:11:01"
Op zich is er niets mis mee zou je denken, maar onder water bevindt zich een opmerkelijk feitje. Ondanks dat je de value als DateTime instantie zou verwachten, is het toch een Time object. Ook al suggereert de columns_hash informatie anders:
>> foo.ext_updated_at.is_a? DateTime => false >> foo.ext_updated_at.is_a? Time => true >> Foo.columns_hash["ext_updated_at"].type => :datetime
Een situatie waar dit problemen kan geven is bijvoorbeeld bij het inlezen van XML data waarin ook milliseconden zijn meegegeven. In tegenstelling tot een DateTime object, houdt een Time object hier wel rekening mee.
Bij het zetten van de value worden dus ook de milliseconden verwerkt (deze zijn op te vragen met de method usec). Eenmaal opgeslagen en herladen van de database zijn deze milliseconden ‘verdwenen’ omdat de milliseconden niet in de database worden opgeslagen.
Dus ondanks dat je ‘dezelfde’ value zet, krijg je bij het vergelijken van de waarden op gelijkheid een ‘false’ terug:
>> xml_value = "2009-11-30T09:20:18.443+01:00" => "2009-11-30T09:20:18.443+01:00" >> (foo = Foo.new(:ext_updated_at => xml_value)).save => true >> foo.reload => #<Foo id: 1, ...> >> foo2 = Foo.new(:ext_updated_at => xml_value) => #<Foo id: nil, ...> >> foo.ext_updated_at == foo2.ext_updated_at => false >> foo.ext_updated_at.usec => 0 >> foo2.ext_updated_at.usec => 443000
Let dus goed op dat de datetime attributen geen milliseconden bevat bij het vergelijken van hun values: gebruik DateTime instanties.
>> xml_value = "2009-11-30T09:20:18.443+01:00" => "2009-11-30T09:20:18.443+01:00" >> foo = Foo.new(:ext_updated_at => DateTime.parse(xml_value)) => #<Foo id: nil, ...> >> Foo.find(1).ext_updated_at.to_datetime === foo.ext_updated_at => true
Gepost in hor | 0 reacties
Cucumber Salad
Michael Koper zo 29 nov 09
Omroep.nl gaf een presentatie over hun ervaringen op RubyEnRails 2009. Ze vertelden daar onder andere over hun eigen gemaakte script: Cucumber salad. Een script dat je cucumber features sneller moet laten draaien door de processen te verdelen over al de cores.
Het is heel makkelijk om te gebruiken. Kopieer de rake task in je lib/tasks directory en je kan je features runnen met:
RAILS_ENV=test rake salad:features
Ik heb het geprobeerd op een project met niet al te veel scenario’s en ik merkte een kleine speedboost. Ik kan me voorstellen dat het een leuke winst geeft bij een groot project met een hoop features. Ik ontdekte wel een klein probleempje, namelijk het herkent mijn Pickle steps niet. Dit kan je oplossen door de steps simpel weg te kopiëren.
Gepost in hor | 0 reacties
Kleur je console
Johan Vermeulen wo 25 nov 09
Vaak maak je wel eens een console script waarbij je een taak uitvoert waarbij je een status of voortgang wilt bij houden.
De voortgang van een loop kan je bijvoorbeeld bijhouden met de Progress meter gem
Een andere leuke toevoeging is om de status van een bepaalde taak met kleur weer te geven in je console. Dit kan gerealiseerd worden met ANSI escape codes:
puts "Exporting orders \e[1;32;1m DONE \e[0m"
Dit zorgt ervoor dat DONE in het groen wordt weergegeven. Zo kan je in 1 oog opslag zien of de export succesvol gelukt is of niet.
Een lijst van mogelijk tekst en achtergrond kleuren:
| 0 | Alle attributen uitzetten |
| 1 | Felle kleuren |
| 4 | Onderlijning |
| 7 | Knipperende tekst |
| 30 | Zwarte tekst |
| 31 | Rode tekst |
| 32 | Groene tekst |
| 33 | Gele tekst |
| 34 | Blauwe tekst |
| 35 | Roze tekst |
| 36 | Lichtblauwe tekst |
| 37 | Witte tekst |
| 39 | Gebruiker ingestelde kleur |
| 40 | Zwarte achtergrond |
| 41 | Rode achtergrond |
| 42 | Groene achtergrond |
| 43 | Gele achtergrond |
| 44 | Blauwe achtergrond |
| 45 | Roze achtergrond |
| 46 | Lichtblauwe achtergrond |
| 47 | Witte achtergrond |
| 49 | Gebruiker ingestelde achtergrondkleur |
Gepost in hor | 0 reacties
Oink
Stephan Kaag di 24 nov 09
Vandaag een kort artikel over een handige gem met de naam Oink.
Oink is een log parser om acties te herkennen die het geheugengebruik significant doen toenemen.
De gem doet twee dingen: allereerst voegt het, at runtime, informatie toe aan de Rails logging over geheugengebruik en het aantal geïnstantieerde objecten.
Dat levert bijvoorbeeld de volgende extra logregels op:
Memory usage: 64432 | PID: 1164
Instantiation Breakdown: Total: 133 | User: 49 | Role: 39 | Permission: 16 | Chair: 10 | Table: 9 | Door: 5 | Window: 5
Completed in 698ms (View: 522, DB: 38) | 200 OK [http://localhost/house/interior]
Daarnaast wordt er een Oink binary geleverd die deze logfiles kan analyseren en de volgende output kan leveren:
- Een top 10 van requests die over een ingestelde drempel van geheugengebruik kwamen.
- Het aantal keer dan iedere request boven deze drempel uit kwam.
- De log regels die door deze bovenstaande requests werden gegenereerd.
Al met al een handige gem die nuttige informatie kan leveren om het geheugengebruik te monitoren en de oorzaken van hoog geheugengebruik te traceren.
Meer informatie over Oink is te vinden op github.
Gepost in hor | 0 reacties
Rails en OpenID
Chiel Wester wo 18 nov 09
Het gebruik van OpenID voor het inloggen op websites neemt een steeds grotere vlucht. Er zijn steeds meer websites waar je kunt inloggen met een OpenID account en ook het aantal providers neemt gestaag toe. Onder andere Google is een OpenID provider geworden zodat je op veel sites nu met je Google account kunt inloggen.
In Nederland heeft Hyves besloten ervoor te zorgen dat elke Hyves account ook een OpenID account is. Hierdoor zijn er in één klap meer dan 9 miljoen OpenID accounts bijgekomen. Hoog tijd dus om OpenID in je Rails site te implementeren!
Het implementeren van OpenID is eigenlijk nog nooit zo makkelijk geweest. De ruby-openid gem volgt volledige de OpenID 1.0 én de OpenID 2.0 specificatie, en met de open_id_authentication plugin is het implementeren in een oogwenk gedaan! Ben je fervent Authlogic gebruiker en je wilt hierbij ook OpenID ondersteunen? De authlogic_openid gem biedt hierbij uitkomst.
OpenID ondersteunt ook het zogenaamde Attribute Exchange. Hiermee kunnen OpenID providers gegevens van de gebruiker meesturen waar om gevraagd wordt door de Relying Party. De openid_authentication plugin ondersteunt deze functionaliteit al. Geef aan welke attributen je wilt opvragen (alle attributen zijn gedefinieerd op http://www.axschema.org en vervolgens zullen deze in het resultaat terug komen.

Hyves ondersteunt bijna de volledige attributenlijst van axschema en is daarmee één van de eersten die dit volledig ondersteunen.
Gepost in hor | 0 reacties
Welcome to Holland On Rails
This weblog is the official Ruby techblog from the guys at Holder, a Ruby development company. Holder is also the company behind the RubyAndRails Europe Conference in Amsterdam.Recente Jobs
Bekijk alle jobs »»
Gereedschapskist
Onmisbare tools vooriedere developer!
- Ruby On Rails
Framework voor de web 2.0 developer. Eindelijk vooruitgang! - TextMate
Editor for true pro's
Typ, tab, top :-)
Nee, niet voor Win. - Made On A Mac
En nou is het over met die saaie grijze Windows bak van je!
Auteurs op deze site
Chris Obdam
'Less is more' evangelist, past dit ook dagelijks toe op zijn tandenborstel.Chiel Wester
Snelheidswonder op Ruby wielen. Leuk om mee te pair-programmen ;-)