Onze dagmethode #2: Numeric#in

Geplaatst door Michiel de Mare wo, 06 feb 2008 06:27:00 GMT

De meeste web-applicaties lijken niet veel met random getallen van doen te hebben, online-pokersites natuurlijk uitgezonderd (hoop ik), maar toch komen ze verbazend veel van pas. Daarom introduceer ik vandaag een nieuwe notatie voor kans.


# het kan natuurlijk zo:
redirect_to home_url if rand < 0.2222

# dit is al beter
redirect_to home_url if rand(9) < 2

# maar niet zo mooi als dit
redirect_to home_url if 2.in 9

# de code
class Numeric 
  def in(other)
    rand(other) < self
  end
end

Recommend Michiel de Mare

Geplaatst in ,  | 5 reacties

Our Daily Method #2: Numeric#in

Geplaatst door Michiel de Mare wo, 06 feb 2008 06:00:00 GMT

Most web-applications do not appear to have a lot to do with random numbers, online poker sites excepted (I hope), but they are surprisingly useful nevertheless. That’s why I’m introducing a new notation to express chance.


# this certainly works
redirect_to home_url if rand < 0.2222

# this is better
redirect_to home_url if rand(9) < 2

# but not as beautiful as this
redirect_to home_url if 2.in 9

# the code
class Numeric 
  def in(other)
    rand(other) < self
  end
end

Recommend Michiel de Mare

Geplaatst in , ,  | geen reacties

Our Daily Method #1: Range#coerce

Geplaatst door Michiel de Mare di, 05 feb 2008 08:00:00 GMT

We’d like to introduce a new blog category: Our Daily Method. We’ll demonstrate short, general purpose methods, which might be suitable for the standard library. We’re accepting requests!

We’ll kick off with Range#coerce. The problem is: you’ve got a value and you wish to ensure that it’s within a certain interval. Sounds ideal for a Range, but it’s missing from Ruby’s Range, although there’s include? (and in Ruby 1.9 cover?) to test whether the value is in the range.

Hence the following:

class Range
  def coerce(x)
    x < first ? first : x > last ? last : x
  end
end

(1..12).coerce(999)   # => 12

Recommend Michiel de Mare

Geplaatst in , ,  | geen reacties

Onze dagmethode #1: Range#coerce

Geplaatst door Michiel de Mare di, 05 feb 2008 08:00:00 GMT

We introduceren een nieuwe feature: de methode van de dag. Hierin demonstreren we een korte, algemeen toepasbare methode. We doen aan verzoekjes!

Vandaag beginnen we met Range#coerce. Het probleem: je hebt een waarde, en je wilt garanderen dat deze binnen een bepaald interval ligt. Klinkt ideaal voor een Range. Een Range heeft wel een methode om te testen of een waarde erbinnen ligt (include?) maar niet om de waarde te forceren.

Vandaar het volgende:

class Range
  def coerce(x)
    x < first ? first : x > last ? last : x
  end
end

(1..12).coerce(999)   # => 12

Recommend Michiel de Mare

Geplaatst in ,  | Tags  | 5 reacties

Een Hash is een Functie

Geplaatst door Michiel de Mare ma, 04 feb 2008 03:46:00 GMT

Tijdens het staren naar de volgende code, kreeg ik opeens een lumineus idee.

specialism_codes.map {|code| SPECIALISMS[code] }

Waarom moet ik een block maken om te mappen van een lijst codes naar een lijst beschrijvingen, als die codes en beschrijvingen allemaal netjes in een constante zitten? Is dat niet juist wat een Hash is, een mapping van een domein naar een bereik? Is dat niet precies de definitie van een functie in de wiskunde? Waarom dan toch dat block?

Enfin, dat was snel opgelost:

class Hash
  def to_proc
    lambda {|x| self[x] }
  end
end

specialism_codes.map &SPECIALISMS

Recommend Michiel de Mare

Geplaatst in  | geen reacties

Ruby 1.9 is uit!

Geplaatst door Remco van 't Veer di, 25 dec 2007 22:20:00 GMT

Hoera! Wat een prachtig kerstkado! Er is heel veel nieuws te ontdekken!

Geplaatst in  | 2 reacties

Rails MVC aan je laars lappen met Mongrel handlers

Geplaatst door Remco van 't Veer ma, 24 dec 2007 11:18:00 GMT

Module View Controller is mooi maar soms moet je heel creatief zijn om een oplossing in die mal te proppen. In dergelijke gevallen is een meer lowlevel aanpak veel doeltreffender. In het geval waar ik tegenaan gelopen ben, wil ik audio streams serveren vanuit een Rails applicatie. Om precies te zijn: ik wil MP3 bestanden automatisch omzetten naar een lager bitrate en deze over het netwerk sturen zodat er aan de andere kant naar geluisterd kan worden. Daar is weinig MVC aan, al is het alleen maar dat er niets te view-en valt!

Nog even in het kort, was is Mongrel? Mongrel is een webserver (grotendeels) geschreven in Ruby. Ruby versie 1.8 is standaard uitgerust met een web server genaamd WEBrick maar deze is niet snel en efficient genoeg voor openbare productie web applicaties. Mongrel daarentegen is een kruising tussen een windhond en een poedel, snel en niet stuk te krijgen. Het beestje is multi-threaded en kan daarmee honderden aanvragen tegenlijk afhandelen.

Lees verder...

Geplaatst in , ,  | 5 reacties

Gratis online Ruby cursus

Geplaatst door Remco van 't Veer zo, 09 dec 2007 10:30:00 GMT

Satish Talim begint maandag 7 januari met een nieuwe Ruby cursus. Deze wordt online gegeven, is gericht op programmeurs zonder Ruby kennis en is geheel gratis!

Heb je een duwtje nodig om in Ruby te duiken? Is Rails wel leuk maar houdt Ruby je uit het spoor? Meld je aan en ga met ongeveer 100 meer dan 700 anderen aan de slag! Kan je meteen een goed voornemen afstrepen!

Geplaatst in , ,  | 3 reacties

String#to_proc

Geplaatst door Michiel de Mare ma, 29 okt 2007 02:16:00 GMT

Symbol#to_proc kenden we al een hele tijd. Hiermee kun je zeggen: users.map(&:name) zonder een block te gebruiken.

Maar nu is er ook String#to_proc

String#to_proc werkt heel anders – je kunt bijvoorbeeld argumenten opgeven. Bij de Symbol variant was de eerste block-parameter de receiver, en de rest waren de argumenten: :slice.to_proc['hello',2,2] #=> 'll'

Met String#to_proc kun je zelf bepalen wat er met de parameters moet gebeuren: 'x*x'.to_proc[3]

Wat ook leuk is, is dat weggelaten parameters automatisch gedetecteerd en ingevuld worden. (1..5).map &'*2'

Kortom, allemaal leuke truucjes. Niet iets voor productiecode (maar dat verwachten jullie inmiddels ook niet meer van mij) maar wel leuk om mee te spelen.

Geplaatst in  | geen reacties

Refactoring 2.0

Geplaatst door Michiel de Mare di, 02 okt 2007 22:17:52 GMT

Heb je wel eens dat je een stukje code hebt waarvan je denkt: dat moet mooier kunnen. Of wil je in actie zien hoe andere mensen hun code refactoren? Dan is er nu refactormycode.com

Nee, het is geen grap – deze site bestaat, werkt goed en is leuk! Ruby wordt ondersteund, maar ook o.a. Javascript, Java, en Python.

Geplaatst in ,  | 3 reacties

Oudere artikelen: 1 ... 4 5 6 7 8 ... 12