favoriete nieuwtje in rails edge

Gepubliceerd op: 20.III.2006 10:08 CET
Categorieën: rails, ruby

In de volgende versie van rails (1.1) worden veel nieuwe dingen geïntroduceerd. Zie voor een continue groeiende lijst het blog bericht van Scott Raymond. Er zitten waanzinnige dingen bij en ik hoop snel weer tijd te hebben (ik zit nu in een verhuizing) om met al dat moois te spelen.

M’n favoriet is delegate. Het is zo’n juweeltje, dat zó voor de hand ligt dat ik me meteen af vroeg waarom dat niet gewoon in ruby zit. Voorbeeldje:

Address = Struct.new(:city, :country)
class Person < Struct.new(:name, :address)
  delegate :city, :to => :address
end

remco = Person.new('remco', Address.new('Amsterdam', 'Nederland'))
p remco.city # => "Amsterdam"

Dus; definieer twee classes Address en Person waar Person een Address bevat en geef in Person direct toegang tot het city attribuut.

Lees verder →

google chat

Gepubliceerd op: 15.II.2006 05:59 CET
Categorieën: lariekoek

Vanmorgen werd ik opgeschikt door een chat sessie toen ik rustig mijn gmail zat te lezen. Ik had al gezien dat boven “labels” een nieuw blokje was verschenen maar dat had ik afgedaan als larikoek. Er blijkt echter een volledige IM client onder te hangen. Werkt overigens, net als gmail, naar behoren. Google krijgt het weer voorelkaar om te laten zien wat moderne web technologie kan bieden.

Het is ook een beetje eng. We kunnen ons allemaal de big brother verdenkingen herinneren die google met gmail en gtalk over zich heen riep, terecht overigens. Hier is weer een goed kans voor alle privacy advocats om mensen te waarschuwen tegen de data dominantie van google. Alles wordt gelogt en is het niet voor je eigen gemak dan is het wel voor googles analyses. Het probleem is dat ze het allemaal te gemakkelijk maken, hoe kan ik zo iets moois weerstaan?!

Overigens is chat niet terug te vinden in het nederlandstalige interface (wel in het engelse) en is niet beschikbaar onder safari (wel onder firefox en IE6).

afkortingen voor methoden namen

Gepubliceerd op: 26.I.2006 08:42 CET
Categorieën: ruby

Commandline utilities hebben vaak korte namen; ls, rm, grep, svn etc. De subversion client svn heeft (sub-)commando’s welke allemaal afkortingen hebben; svn status kan je schrijven als svn st e.d. Toen ik een ruby wrapper class had geschreven om het svn commando, miste ik metteen de svn st variant. Natuurlijk kan je gewoon wat aliases aanmaken voor commando’s maar ik zag een kans voor een experimentje in een verloren uurtje.

Bladerend door de appendix van pickaxe 2 ben ik ooit tegen abbrev aangelopen. Gegeven een lijst termen geeft deze een hash van mogelijke afkortingen terug:

require 'abbrev'
require 'pp'
pp %w{bla die foo bar}.abbrev

levert:

{"die"=>"die",
 "bla"=>"bla",
 "d"=>"die",
 "di"=>"die",
 "foo"=>"foo",
 "f"=>"foo",
 "bar"=>"bar",
 "ba"=>"bar",
 "fo"=>"foo",
 "bl"=>"bla"}

Mooi om automagische afkortingen te leveren. We kunnen aan de slag!

Lees verder →

slideshow met div's dmv scriptaculous

Gepubliceerd op: 23.I.2006 01:03 CET
Categorieën: javascript
Reacties: 12 stuks

Update: I’ve recently written a JQuery version of this slideshow. It operates in roughly the same way and is a lot simpler. You can find it on github.

Geïnspireerd door een post bij code snippets heb ik met een kopje koffie zitten klungelen met javascript. Ik wilde graag een OO versie en daarmee dus de mogelijkheid om meerdere slideshows gemakkelijk op een pagina te kunnen plaatsen. En, in tegenstelling tot de inspiratie bron wilde ik dat de foto’s inelkaar over zouden gaan. Het resultaat:

Maar hoe werkt het?

Lees verder →

DRY blijven door meta programmeren

Gepubliceerd op: 10.I.2006 09:51 CET
Categorieën: ruby

In een poging DRY te blijven, ben ik in de wondere wereld van ruby meta programmeren terecht gekomen. Het was er mooi en dat wil ik graag delen.

Ik was bezig met het maken van een subclass van String, Html. Mijn variant kan wat specifieke manipulaties uitvoeren: absolutize(url) om alle links absolute te maken, escape om speciale tekens te vervangen en sanitize(tags = nil) om tags, welke niet toegestaan zijn, te verwijderen. Na de methoden geschreven te hebben en een TestCase aangemaakt, bedacht ik me dat ik ook een !- (past het daadwerkelijk object aan) en self.-variant (class methode waar een String object ingaat en gemodificeerde versie uitkomt) wil hebben.

Ik heb eerst alles omgeschreven naar een !-variant, m’n code werd hier eigenlijk veel duidelijker van; geen value.gsub!(.. meer maar gsub!(... En ik ben m’n varianten gaan toevoegen:

  def escape
    result = dup
    result.escape!
    result
  end

  def self.escape(value)
    result = Html.new(value)
    result.escape!
    result.to_s
  end

Ho wacht! Moet ik die nu voor alle drie de methoden doen?! Maar dat is niet DRY! Ik wil kunnen schrijven:

  def_variants :escape
Lees verder →

Refactoring Ruby code

Gepubliceerd op: 10.XII.2005 03:07 CET
Categorieën: java, ruby

Als Java professional ben ik verknocht aan de refactoring mogelijkheden van Eclipse. Sterker nog de reden waarom ik van Vim en commandline CVS overgestapt ben, is refactoring. M’n grootste zorg bij de stap naar Ruby is het missen van dergelijk tools. Ik heb ze nog niet gemist maar dat is ook niet zo gek als je pas een half jaar over Ruby obsedeerd en nog geen honderden kilobytes code hebt die eigenlijk anders moeten.

Gelukkig ben ik niet de enige die zich daar zorgen over maakt en zijn er veel slimmere mensen die allang oplossingen hebben gevonden. Via een blog bericht van Curt Hibbs kwam ik op een uitgebreid verhaal van ene Murphee en daar vandaan op een waanzinnig Ruby-eske oplossing van Mike Williams. M’n hartje sprong!

Lees verder →

tooltips voor accesskey's

Gepubliceerd op: 2.XII.2005 02:42 CET
Categorieën: javascript

De accesskey eigenschap in HTML kan de gebruikers vriendelijkheid van een web-applicatie enorm verbeteren. Het probleem is alleen dat je in de meeste browsers niet kan zien dat er sneltoest beschikbaar is voor een element. Een elegante oplossing hiervoor is een stukje CSS2 te gebruiken zoals a:after{content:" [" attr(accesskey) "]"}. Helaas wordt deze constructie maar weinig ondersteund door browsers.

In een verloren uurtje heb ik een alternatieve oplossing gemaakt gebaseerd op JavaScript. Het onderstaande script doet twee dingen met een element met accesskey. Het voegt een title toe (tooltip) met daarin de toets combinatie. En, in het geval het element inline tekst bevat, wordt hier het eerste karakter opgezocht dat gelijk is aan de accesskey en deze omsloten door een span tag met als class shortcut zodat dat karakter te stylen valt.

Lees verder →