peinliche Newsletter

Regelmäßig trudelt in mein Postfach Werbung einer Dorf-Disko, in der ich früher mal verkehrt habe. Sieht in etwa so aus:

Bild 9

Mal ernsthaft: Ist doch eine Frechheit sowas. Wie kann sich irgendein Laden auf dieser Erde eine dermaßen unprofessionelle Werbung erlauben? Das fängt ja schon bei den Rechtschreibfehlern in der Email-Adresse an (Centrumdernacht??).

Btw. wir reden hier noch von einer 10m² Disko, sondern von einer Großraum-Disko die doch ein hohes Einzugsgebiet in der Umgebung hat und in der unter anderem auch 1x im Jahr dieser Heini da aus der neuen Popstars Jury (Alex Christensen) auflegt.

Fremdschämen.

Ruby: lazy evaluation

Ruby ist ein faules Miststück. Das folgende Verhalten, genannt “lazy evaluation” war mir neu und hat mich einige Nerven gekostet:

1
2
3
if (@account.save && @user.save)
  ...
end

Erwarten würde man, das beide Methoden aufgerufen werden, dessen Rückgabe Werte logisch-und verknüpft werden und das Ergebnis ausgewertet wird. Stimmt aber nicht. Ruby tut nämlich das hier:

The and and && operators evaluate their first operand. If false, the expression returns false; otherwise, the expression returns the value of the second operand.

Ruby führt also den zweiten Operand nur aus, wenn der erste Operand true zurück gibt. Und es gibt hierbei auch keine Interpretation, sondern es wird einfach der zweite Operand ausgegeben. Das führt in obigem Beispiel dazu, dass @user.save erst ausgeführt wird, wenn @account.save true zurück gab. Aber es wird noch verrückter:

1
true && "Test"

Was kommt raus? Natürlich “Test”. Den wenn der erste Operand true ergibt, gibt Ruby den zweiten zurück. Und Test wird auf True evaluiert, was folgendes Beispiel verdeutlicht:

1
"test" && false

Gibt uns false zurück. Den “test” => true, also wieder der zweite Operand zurück gegeben.

Zum Abschluss noch das Gegenbeispiel:

1
false && "Egal"

Gibt uns false.

Tja, und was tun wir nun wegen dem Ursprungsproblem? Folgende Zeile schafft Abhilfe:

1
if (@account.save && @user.save) || @user.save

Somit werden auf jedenfall beide Methoden aufgerufen, was für die Datenvalidierung in Rails wichtig ist. Aber das ist ein anderes Thema.

Nicht schlimm also, aber gut zu wissen was Ruby da tut.

Update
Die beste Lösung ist in der Tat folgende:

1
if (@account.save & @user.save)

In diesem Fall werden beide Operanden auf jedenfall ausgewertet. Danke Mario für den Hinweis.

GridV2 Visualisierung

Nachdem im Grid V2 (siehe hier) doch knapp 1000 Änderungen zusammen gekommen sind, hab ich mich entschlossen mich doch früher als geplant an eine Visualisierung zu machen.

Das Resultat ist das hier:

Das Ganze ist größtenteils in Ruby erstellt worden. Habe mit Hilfe von RMagick / ImageMagick zuerstmal das Änderungslog geparst und für jede Änderung ein eigenes Bild erzeugt. Anschließend zusammen schweißen und als Video rauslassen.

Hier der Render in Ruby:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 require 'rubygems'
require 'RMagick'
f = Magick::Image.new(100,100) { self.background_color = "red" }

log = Log.find :all

# Ursprungsbild skaliert
base = Magick::Image.new(200,200) { self.background_color = "white" }
# Jeder Eintrag im Log entsprechenden Pixel verändern
# Zusätzlich skaliere ich um 4 damit man auch was erkennt
pixels = Array.new(4*4)

log.each { |item|
if item.new_color.length > 0
s = item.new_color
r = s.upcase.slice(0,2).hex
g = s.upcase.slice(2,2).hex
b = s.upcase.slice(4,2).hex

pixels.each_index {|i| pixels[i] = Magick::Pixel.new(r,g,b,0) }

base.store_pixels((item.cell.c-1)*4, (item.cell.r-1)*4, 4, 4, pixels)
base.write("public/render/#{item.id}.gif")
end
}

picz.to rehübsched

Mein kostenloser Bilderhoster Picz.to hat mal wieder einen neuen Anstrich bekommen, nachdem ich mir über die Schwarz/Rote Farbkombination ja so einiges Gemecker anhören musste.

Layout ist weitestgehend identisch geblieben, Funktionalitäten auch. Eine Besonderheit ist vielleicht, das dies meine erste Seite ist, welche Internet Explorer <8 User kategorisch ausschließt. Surft man mit einem veralteten Browser auf die Seite, wird man entsprechend gewarnt.

bild-11

Der Code verwendet die neuesten Standards HTML5 und CSS3. Besonders die neuen CSS3 Features machen das Webentwickler-Leben um einiges einfacher. So brauchts für abgerundete Ecken und Schatten nur noch ein paar Zeilen CSS statt üblem HTML-Bild-Rahmen-Bla Gebastel.

Just my 2 Cents um die neuen Webstandards endlich zum Standard zu machen. Wer einen alten Browser benutzen will, soll und muss einfach damit Leben, das die Seiten bei ihm nicht so aussehen wie sie gedacht waren. Punkt.

An dieser Stelle übrigens noch vielen Dank an Frieder (darf man deine Seite eigentlich schon verlinken?); von ihm stammt die Vorlage für den neuen Anstrich.

RubyOnRails: Grid V2

Ich arbeite mich momentan in RubyOnRails ein, was eine gute Alternative zu PHP im Bereich der Webprogrammierung darstellt.

Um anderen den Einstieg zu erleichert will ich hier eines meiner Testprojekte veröffentlichen, welche bei der Arbeit so “rausgefallen” sind: Grid V2.


Grid V2 stellt ein 50×50 Pixel Zeichenfeld dar. Es erlaubt dem Besucher jeden Pixel mit einer frei wählbaren Farbe zu füllen. Diese Änderungen werden asynchron (AJAX) auf den Server übertragen. Befindet sich zum gleichen Zeitpunkt ein anderer Besucher auf der Seite und führt Veränderungen durch, werden diese direkt angezeigt ohne das ein Seitenreload notwenig ist.

Die Daten werden gesammelt und könnten genutzt werden. So kann zB eine Animation erstellt werden welche alle Änderungen zeitlich hintereinander abspielt. (Derzeit nicht implentiert). Persönliche Daten werden natürlich nicht gesammelt.

Das ganze lässt sich hier ausprobieren.

Grid V2 wurde komplett mir RubyOnRails, HTMl und Javascript umgesetzt. Es wurde kein Java verwendet und ist so mit jedem modernen Browser verwendbar.

Der Source-Code verdeutlicht gut wie AJAX-Techniken mit RubyOnRails eingesetzt werden können.

Ich veröffentliche hier den Soure-Code unter der CC-Lizenz.

Download

[download id=”3″]

Expialidocious

Aufmerksame Leser werden ja den Spot zur Piratenpartei hier im Blog gelesen haben. Der darin verwendete freie Track von Pogo hat jetzt ein Video spendiert bekommen; und es ist richtig geil.

Wers nicht gemerkt hat (wer nicht!): Alle Vocals aus dem Song stammen aus dem alten Disney-Klassiker “Marry Poppins” und sind im Video natürlich zu sehen.

Einfach nur komplett verrückt wenn man mich fragt! Scheinbar war also Disney der Begründer des modernen JumpStyle. Anderst kann ich mir das einfach nicht erklären. Aber seht einfach selbst. Wie sie rumhüpfen, komm einfach net drüber weg!

Apropo, kleines Detail am Rande: Pogo bietet seine Musik normalerweise kostenlos zum Download an. Zumindest für Expialidocious ist der Download-Link aber verschwunden. Eigentlich nicht verwunderlich, da ich nicht glaube das er für die alten Disney-Klassiker die passende Lizenz hat. Das ist insofern kritisch, da der Song ja in einem Piratenpartei-Spot verwendet wird. Der Spot stammt allerdings nicht von der Partei selber, sondern ist das Resultat eines Wettbewerbes; er stammt also von Fans / Wählern.

Wann bitte hat es das schonmal gegeben? Klarmachen zum Ändern!