inicio mail me! Abonnieren Follow me

ruby konfus

Beim Erlernen von Blocks in Ruby, wird man früh auf die Möglichkeit hingewiesen, dass durch die vom Enumerator-Modul definierte Methode #inject() eine Variable vordefiniert werden kann, die das Ergebnis des Ausdrucks aufnimmt - z.B.

(1..6).inject(1) do |faculty, var|
faculty = faculty * var
end
=> 720

wodurch ein Pre-Initialisieren der “count”-Variablen ausbleiben kann.
Da Hash und Array das Enumerator-Modul inkludieren, steht diese Methode zur Verfügung. Mit Ihr lassen sich auch Arrays und Hashs erzeugen, aber eine weitere Methode z.B. zur Zusammenfassung von Collections in einem Hash ist #each_with_object().

Mich verwundert nur, dass die Syntax für die beiden - sehr verwandten - Methoden jeweils unterschiedlich ist, denn im zu übergebenden Block wird bei ersterer als erstes Argument die in der Methode initialisierte Variable (count), bei zweiterer als zweites Argument erwartet …… macht das Sinn?

# with #inject()
array = [[:first, "Bernd"], [:last, "Naehler"]]

array.inject({}) do |result, element|
result[element.first] = element.last
result
end
=> {:first=>"Bernd", :last=>"Naehler"}

# with #each_with_object()
hash = {:user => {:first => "Bernd", :last => "Naehler"}

hash.each_with_object({}) do |(key, value), result|
result[value] = key
end
=> {{:first=>"Bernd", :last=>"Naehler"}=>:user}

Dabei muss man noch unterscheiden, dass bei der Verwendung von #inject() das Result-Hash immer noch einmal aufgerufen werden muss, damit die Referenz erhalten bleibt und der Interpreter keinen Error schmeißt.

Hmmm — kann mir das jemand erklären?

jQuery :visible in Webkit-basierten Browsern

Bei einem aktuellen Projekt bin ich auf eine Eigenheit gestoßen, die ich hier kurz erwähnen möchte:

seit jQuery v.1.3.2 wird die Selection :visible / :hidden bekanntermaßen nicht mehr mittels der CSS-Eigenschaft display:none sondern über die im Browser ermittelt Höhe / Breite ≉ 0 ermittelt.
Doch das wurde mit bei einer relativ komplexen Liste fast zum Verhängnis, denn das als inline deklarierte <li> galt plötzlich auf seiner berechneten Höhe und Breite von 0 nicht als sichtbar…. In FF und Opera wird die Höhe eines umgebenden Elements mindestens als so groß wie das seiner Kinder gesetzt!
Dies heraus zu bekommen hat mich leider einiges an Zeit gekostet, aber der Lerneffekt ist wieder nicht zu verachten….. Note to self: Öfter mal die Specs lesen und im Debugger schürfen!!

musikfernsehen 2.0

eine tolle sache ist der neue online-dienst putpat, bei dem man sich seinen eigenen musik-tv-channel erstellen kann. dieser wird assoziiert mit genres, bands oder einzelnen tracks meiner lieblingsbands in einem video-mischpult zusammenmixen kann. songs, die einem nicht passen, lassen sich aus dem eigenen channel verbannen.

aber warum das ganze?

putpat

das ziel ist eine leanback-application zu haben, die einen dauerhaft mit musik-videos berieselt. man hat einen individuell zusammenstellbaren channel und wird mit diversen vordefinierten channels (jazz, blues, hip-hop etc.) versorgt. der visuelle Eindruck ist sehr gut, sehr angenehm und alle videos sind vollbildfähig.

Go For It!

Suchmaschinen - zeigt’s uns!

Im Wettlauf gegen Google versuchen sich alle möglichen Anbieter immer wieder.

In einem interessanten Artikel aus der taz wird der neue microsoft-ableger kumo (von jap. Spinne, Wolke) besprochen und darauf verwiesen, dass dies einfach eine Neuimplementierung der guten, alten LiveSearch werden wird.

Lustig finde ich die Argumentation von Mary-Jo Foley, dass ein neuer, more user-friendly (was ist user-freundlicher als “live”?) Name für das Brand MS LiveSearch™ gefunden werden sollte, so dass man sich für KUMO entschied … ?!?

Vielversprechender ist der Ansatz, den Mathematica-”Erfinder” Stephen Wolfram verfolgt. Bei wolfram_alpha sollen explizite Fragen mit realen Antworten beantwortet werden. Es wird also keine Liste von Dokumenten mit größter Trefferwahrscheinlichkeit ausgegeben, sondern aus einer ähnlich gearteten Ergebnismenge mathematisch eine Antwort berechnet. Die Lösung dieser komplexen Aufgabe sieht der promovierte Physiker als reine logische Mathematik an:

“Mit Mathematica hatte ich eine symbolische Sprache, um alles auszudrücken, sowie die algorithmische Macht, jede Art von Berechnung anzustellen. Und mit NKS hatte ich ein Paradigma um zu verstehen, wie jede Form von Komplexität aus einfachen Regeln entstehen kann”

Die Algorithmen hierzu werden zur Zeit noch auf Vollständigkeit, Effektivität und Finitheit getestet. Gespannt bin ich, aber die Frage wird immer noch sein, ob wolframalpha die Fragen richtig versteht, die ihm gestellt werden ?!

Auf RDF und OWL beruhende Ansätze sind bis heute noch unbefriedigend. Ausserdem müßten Unmengen von Metadaten in die exitstierenden Daten eingearbeitet werden, so dass dieser Ansatz bestimmt mit einem bereits existierenden verbunden werden wird.


weiterführende Info:

  1. the future of web - ein absolut empfehlenswerter Webcast von Tim Berners Lee (90 min)
  2. Sematic Web - eine 6 minütige Einführung auf you tube (for noobs !!)

Das Gesamtalter von AC/DC

wurde im twitter von dblaha und textaufgabe auf 287 Jahre berechnet, aber ich muss leider zugeben, dass mir das keine Ruhe gelassen hat, sodass ich mich dazu habe hinreissen lassen, folgende kleine Ruby-Klasse zu schreiben:

class Acdc
require 'date'

acdc = { "brian" => Date.new(1947, 10, 5), "angus" => Date.new(1955, 3, 31), "malcolm" => Date.new(1953, 1, 6), "cliff" => Date.new(1949, 12, 14), "phil" => Date.new(1954, 5, 19) }
tod = Date.today
days_per_year = 365.25
acdc_age = 0

acdc.each do |m, v|
# da Menschen bei ihrer Altersangabe nur ganze zahlen angeben
v = ((tod-v)/days_per_year).to_f
v = ((tod-v)/days_per_year).to_i
puts “Das Alter von: ” << m.to_s << " ist " << v.to_s
acdc_age += v
end

puts "Das Alter von AC/DC ist insgesamt: " << acdc_age.to_s

end

Das Ergebnis zeigt sich wie folgt:
in "normaler" Altersangabe

tut mit leid, ich muss widersprechen - es sind 285.57 Jahre 283.


Ältere Einträge »