[Ruby] Equal is not always equal


The reason for this blog article is a question that dealt with the different ways of checking equality in Ruby, or more specifically the so called “threequals” operator method. You might have come across it, it is the three equals sign ===, a very Ruby specific thing. Even though everybody calls it operator, I think for the understanding it is crucial to be specific here – “threequals” is a method (of an object), not an operator. I stress this, as this is not true for other object oriented languages, such as Java, in which all infix operators (such as ==) are simply part of the language, i.e. their definition exists outside the object world.

After the before mentioned question I struggled myself of finding any good explanation of the different methods Ruby provides of comparing things, which is why I decided to write down the things I told him; and additionally place it into the context of all four methods, Ruby offers. Yes, there are four ways of comparison, which is twice as much as languages such as Java or Smalltalk offer (and think of C++ which just knows just the == comparison). To fully appreciate the differences, let me start of with the first and typical stumbling block, every novice programmer encounters: value equality vs. reference equality (skip this if you are familiar with the concept).

Continue reading

Watman


Watman

Watman

It’s somewhat of an oldtimer, though it’s only a year old – but time on web is fast, you know. A classic if you want. I guess 80 to 90 per cent of you guys have already seen it. But it’s a timeless classic, I’ve never blogged about it, and there are those 10 to 20 per cent that don’t know what I’m talking about, when I say Watman in a clearly computer science related environment.

So here we go. Enjoy this wonderful four minutes lightning talk by Gary Bernhardt on CodeMash 2012:

https://www.destroyallsoftware.com/talks/wat

Ruby Version Manager und Vim


Und noch einer. Wenn man mehr als eine Ruby-Umgebung braucht, führt kein Weg am RVM vorbei. Wozu man mehr als eine Ruby-Umgebung brauchen sollte?

Fluch und Segen in Ruby ist es meiner Ansicht nach, dass sich alles so rasend schnell weiter entwickelt (und nicht nur meiner Ansicht nach, wie ich heute in einem Gespräch mit einem Kommilitonen erfahren habe, bei dessen Arbeitsplatz man aus diesem Grunde wieder von Ruby weg möchte). Gerade über das Pakete-System RubyGems gibt es viele Plugins und Libraries, die von so vielen unterschiedlichen Teams und so sind schier unendliche Kombinationen von Gems und Versionen möglich. Dabei sind folgende Punkte problematisch:

  1. Gems für verschiedene Projekte können in unterschiedliche Versionen haben, und Kombinationen unterschiedlicher Gems in unterschiedlichen Versionen können zu Konflikten führen.
  2. Ruby ist nicht Abwärtskompatibel. Ein Upgrade des von Ruby führt meist ein erzwungenes Upgrad der Applikationen mit sich (ungünstig).
  3. Besonders stark ist Rails von der Ruby-Version abhängig und ebenfalls nicht abwärtskompatibel (ebenfalls ungünstig).

Was also tun, wenn man an zwei oder mehr unterschiedlichen Projekten mitarbeitet, die auf unterschiedliche Versionen setzten? Für OS X kommt noch eine weitere Schwierigkeit hinzu – hier ist Ruby standardmäßig installiert, da OS X selbst an einigen stellen Ruby-Code einsetzt – das kann nicht einfach auf eine neue Version gehoben werden.

Hier kommt RVM ins Spiel. Ich weiß übrigens leider nicht, wie das mit einer Windows-Version/Kompatibilität aussieht, aber ich kann mir nicht vorstellen, dass es sie gibt, da schon der Installationsprozess über die Konsole läuft. Eventuell mit Cygwin. Ansonsten: Wechselt halt auf ein besseres Betriebssystem 😛.

Continue reading

LiveReload – The Web Developer Wonderland


Der ein oder andere hat es ja schon mitbekommen. Ich stecke mal wieder ein wenig stärker in der Webprogrammierung und versuche gerade ein eigenes Projekt aufzuziehen. D.h. man muss sich auch um die weniger schönen Sachen kümmern – bei mir betrifft das vor allem das Webdesign. Ich gebe es gerne zu, so schön CSS auch ist, es ist keines meiner dicksten Freunde – die Zeiten, als man noch Frames benutzt hat und sich niemand über Tabellen-Designte Webseiten aufgeregt hat, waren mir – trotz aller berechtigter Kritik – doch irgendwie noch am Liebsten.

Aber es ist, wie es ist, und ich kann ja auch nicht ewig auf dem Stand von vorgestern Sitzen, also wird es mal wieder Zeit, wissen aufzufrischen, meine HTML4.0 Kenntnisse zu modernem HTML5 upzugraden, und schön säuberlich mit CSS und HTML zu arbeiten. Daher CSS Datei im Editor, und von dort dann immer regelmäßig zwischen Konsole und Browserfenster gewechselt, cmd-r, für’s refreshen, einmal im Firefox, im Safari und in Chrome – es soll ja überall schick aussehen; einen Internet Explorer habe ich leider mangels Windows nicht zur Verfügung, aber nachdem ich dort schon etliche Work-arounds eingebaut habe, damit die wenigen neuen HTML5-Tags überhaupt angezeigt werden können, graust es mich eh davor, wie das dort alles aussehen wird (Stichworte sind hier Microsofts sehr eigenartigen Conditional Comments und das HTML5 Shiv).

Aber ich komme vom eigentlichen Thema ab. Regelmäßig nach einer Änderung in der Konsole drei unterschiedliche Browser in den Fokus holen und refreshen nervt. Besonders wenn man so CSS-Unerfahren wie ich bin, und viel mit den Werten herum probieren muss, bis sie das tun, was sie sollen.

Continue reading

OS X 10.8 + rvm + Ruby 1.8.7 = Pure Hell


Der Titel sagt ja schon alles: Da ich mein System vor knapp einer Woche auf die neue Version von Mac OS X aktualisiert habe, musste ich auch etliche Tools neu installieren. Die im Titel genannte Kombination bereitete mir einige Kopfschmerzen, weil es zu dem Thema zwar einige Beiträge gibt, allerdings keine die auf das neue Betriebssystem ausgelegt sind, und daher doch etliches nicht so funktionierte, wie die Artikel vorschlugen. Nach einem halben Tag des Lesens und Experimentieren habe ich nun alles zum laufen bekommen, und möchte hier kurz für alle darlegen, wie das zu schaffen ist (wer nur an den einzelnen Schritten in Form einer kurzen Schritt-für-Schritt-Anleitung interessiert ist, findet am Endes dieses Artikels eine Zusammenfassung <– Link funktioniert erst, wenn man vorher auf "more" geklickt hat!).

Continue reading