March 6, 2010

Wenn MySQL mal gar nicht installieren will...

...oder Apache nicht auf localhost horchen möchte... ...oder Ejabberd sich nicht nach localhost connecten mag... ...oder Dienst XYZ nicht auf localhost ... will...

dann schau mal nach ob das loopback-device überhaupt "up" ist!

und wenn nicht: ifup lo

und dann mal nachsehen ob in /etc/network/interfaces vielleicht aus Versehen die Zeile mit auto lo auskommentiert ist.

Notitz an mich selbst: Netzwerkdienste setzen eine korrekte Netzwerkkonfiguration voraus. Wer diese Einstellungen zuerst überprüft, erspart sich womöglich einen Arbeitstag mit sinnloser Frustration.

February 20, 2010

Javascript-Bibliothek für den Umgang mit Währungsangaben

Lange Zeit fehlte mir eine Javascript-Bibliothek, die mir den Clientseitigen Umgang mit Währungsangaben vereinfacht. Die typischen Use-Cases:

  • Parsen von Angaben wie "25.35 €", "100.5 $", "42,42" und Überführen in ein einheitliches internes Format
  • einfache formatierte Ausgabe solcher Werte, mit und ohne Währungssymbol
  • für die ganzen deutschsprachigen Komma-Fetischisten: Transparentes Handling von Dezimal-"," *graus*

Aus dieser Not ward' currency.js geboren, eine kleine auf prototype.js aufbauende (und also davon abhängende) Lib.

Anwendungsbeispiele:

Input-Parsing:

var value_1 = $pM('42.23');
var value_2 = $pM($F('my_input'));

Formatierte Ausgabe mit Währungssymbol:

alert(value_1.to_s());

Formatierte Ausgabe ohne Währungssymbol:

alert(value_1.to_val());

Für Berechnungen muss leider die interne cent-Repräsentation verwendet werden, da Javascript das Überladen arithmetischer Operatoren leider nicht erlaubt:

var sum = $M(value_1.cents + value_2.cents)

Für weitere Dokumentation siehe (currency.js auf Github)

February 12, 2010

20% Rabatt für die Frozen Rails-Konferenz in Helsinki

Wenn sonst noch jemand vor hat, die Frozen Rails-Konferenz in Helsinki am 7. Mai 2010 zu besuchen, kann hier 20% Preisnachlass bei der Ticketbuchung absahnen: http://www.amiando.com/frozenrails?discountCode=M3QGQMMR

Ich selbst werde zusammen mit Tim vom 6. bis 9. da sein.

Spread the word!

January 27, 2010

MyTether für das Palm Pre

Heute installierte ich die neueste Version von MyTether (http://mytether.net/) auf dem Palm Pre und siehe da, diesmal funktioniert die Anwendung wie sie soll. Nun sitze ich im RE4 von Düsseldorf nach Witten und habe endlich vernünftigen Internetzugang auf dem Notebook über das Pre -- Wahlweise via USB oder WiFi, bevorzugt natürlich ersteres.

Die Installation ist beliebig einfach:

quantino:~# novaterm
quarkino:/# wget -qO- http://mytether.net/install.php | /bin/sh

Um Tethering über USB zu verwenden, muss USBnet aktiviert sein. MyTether kann dies über einen Schiebeschalter, aber wenn man schonmal auf der Konsole ist, kann man das auch gleich dort erledigen:

quarkino / # usbnet enable
Usbnet will be enabled after reboot. Type "reboot" now.
quarkino / # reboot

Und lossurfen!

JRuby Errno::ECONNREFUSED: Connection refused

Nun endlich war es so weit: ich versuchte es auch einmal mit JRuby. Beim Versuch, erste Gems zu installieren, bekam ich aber den hier:

quantino:~# jruby -S gem update --system
Updating RubyGems
ERROR:  http://gems.rubyforge.org/ does not appear to be a repository
ERROR:  While executing gem ... (Gem::RemoteFetcher::FetchError)
  Errno::ECONNREFUSED: Connection refused - Connection refused (http://gems.rubyforge.org/yaml)

Ich ließ es links liegen und wandte mich anderen Dingen zu. Später am selben Tag versuchte ich das WebOS-Docor-JAR zum Verarzten meines Palm Pre zu starten, welches erst einmal eine Verbindung ins Welt Weite Netz suchte -- Verbindung fehlgeschlagen.

Da musste es einen Zusammenhang geben! Und den gibt es: es sind nicht die Proxy-Einstellungen, wie lange vermutet, sondern seit einem nicht besonders lange zurück liegenden System-Upgrade (Debian unstable/experimental) muss folgender Parameter der JVM mit übergeben werden, sofern man sein System nicht für IPv6 eingerichtet hat:

-Djava.net.preferIPv4Stack=true

JRuby reicht Kommandozeilen-Parameter hinter -J an die JVM weiter, aus obigem Kommando wird demnach:

quantino:~# jruby -J-Djava.net.preferIPv4Stack=true -S gem update --system
Updating RubyGems
Nothing to update

Um die -J Option nicht ständig angeben zu müssen, tut es auch ein

export JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true"

in ~/.bashc

Und damit läuft die Sache dann auch.

September 26, 2009

LaTeX und Regexen

Bei der Vorbereitung zu meinem nächsten Vortrag zum Thema Regular Expressions musste ich schmerzerfüllt feststellen, dass LaTeX beim Versuch, Regexen vernünftig zu formatieren, ein ganz schön widerwärtiges Biest sein kann. Um diese Aufgabe etwas zu erleichtern und außerdem den Aufbau der Regexen dem Publikum etwas strukturierter vorstellen zu können, bediene ich mich nun folgender LaTeX-Kommandos:

\definecolor{White}{rgb}{1,1,1}
\definecolor{Grey}{rgb}{0.5,0.5,0.5}
\definecolor{Brown}{rgb}{0.3,0.3,0}
\definecolor{Red}{rgb}{0.7,0,0}
\definecolor{Green}{rgb}{0,0.7,0}
\definecolor{Darkblue}{rgb}{0,0,0.5}
\definecolor{Violet}{rgb}{0.8,0,0.9}
\definecolor{Orange}{rgb}{0.8,0.4,0}

\newcommand{\RegEx}[1]{/#1/}
\newcommand{\LargeRegEx}[1]{{\large /#1/}}
\newcommand{\Or}{\textcolor{Brown}{\textbar}}
\newcommand{\Kleene}{\textcolor{Violet}{*}}
\newcommand{\OneOrMore}{\textcolor{Violet}{+}}
\newcommand{\ZeroOrOne}{\textcolor{Violet}{?}}
\newcommand{\Begin}{\textcolor{Brown}{\^{}}}
\newcommand{\End}{\textcolor{Brown}{\textdollar}}
\newcommand{\MLBegin}{\textcolor{Brown}{\Escape{A}}}
\newcommand{\MLEnd}{\textcolor{Brown}{\Escape{Z}}}
\newcommand{\Escape}[1]{\textbackslash{}#1}
\newcommand{\Wordchar}{\textcolor{Darkblue}{\Escape{w}}}
\newcommand{\Space}{\textcolor{Darkblue}{\Escape{s}}}
\newcommand{\Nonwordchar}{\textcolor{Darkblue}{\Escape{W}}}
\newcommand{\Digit}{\textcolor{Darkblue}{\Escape{d}}}
\newcommand{\Match}[1]{$($#1$)$}
\newcommand{\Matches}[1]{\textcolor{Darkblue}{\textbackslash{}#1}}
\newcommand{\Repeat}[1]{\textcolor{Violet}{${$#1$}$}}
\newcommand{\AnyOf}[1]{\textcolor{Green}{$[$#1$]$}}
\newcommand{\NoneOf}[1]{\textcolor{Red}{$[$\^{}#1$]$}}
\newcommand{\AnyNumberOf}[1]{#1\Kleene}
\newcommand{\OneOrMoreOf}[1]{#1\OneOrMore}
\newcommand{\ZeroOrOneOf}[1]{#1\ZeroOrOne}
\newcommand{\Modifier}[1]{\textcolor{Orange}{#1}}

Diese Anweisungen müssen for dem \begin{document}-Stanza stehen, damit man innerhalb des Dokuments dann z.B. folgende Regex inklusive Syntaxhighlighting darstellen kann:

/^[\w\d._%+-]+@[\w\d.-]+.\w{2,4}$/

wird in LaTeX zu:

\RegEx{\Begin\OneOrMoreOf{\AnyOf{\Wordchar\Digit.\_\%+-}}@\OneOrMoreOf{\AnyOf{\Wordchar\Digit.-}}\Escape{.}\Wordchar\Repeat{2,4}\End}

Gerendert wird das dann in etwa so:

regex1.png

Bei der Darstellung der Sonderzeichen in LaTeX hat mir dieses Dokument sehr geholfen: Everybody Loves Regular Expressions!

June 26, 2009

Good old Legacy Systems (tm)

Da will man einfach nur eine Wegbeschreibung ausdrucken. Doch da stellt man fest, dass der Drucker ja nur einen Parallelport hat, das Notebook aber nicht. Zu neu. Der Arbeitsrechner... dito, zu neu. Aber ganz unten im Schrank steht ja noch ein alter Rechner, der hat sowas. Ist ja auch eigentlich der Printserver. Aber dieser wiederum hat ein Netzwerkproblem, will heißen: Hänger und Segfaults bei Netzwerkoperationen, keine Ahnung warum. Kernelupdate? ohne Netzwerk schwierig. Live-CD? Gute Idee, hätte die Kiste denn ein Laufwerk eingebaut -- lang lebe LVM über 5 eingebaute Festplatten, einfach eine herausnehmen ist eher als Experiment anzusehen. USB-Stick + Live-System + .....? Ach vergiss es einfach.

Good old Legacy System (tm): Papier und Stift. Funktioniert immer. Wer braucht schon Mainframes, SOA und RoR ;)

June 14, 2009

Ruby + Qt4

Ich habe heute wieder einmal ein Wenig mit Qt4 gespielt, diesmal jedoch nicht mehr mit C++, sondern Ruby. Die Voraussetzungen dazu beschränken sich auf die zu installierende Bibliothek libqt4-ruby und natürlich die Qt4 API-Referenz. Fazit: Sehr cool, die Eleganz von Ruby gepaart mit der mächtigen Qt-Bibliothek macht richtig Lust auf schöne Multiplatform-Desktop-Applikationen.

Die von QtRuby (libqt4-ruby) zur Verfügung gestellten Qt-Bindings orientieren sich zu sagen wir mal 98% an den Original-APIs, mit der Ausnahme dass das "Q" in denn C++-Klasssennamen durch ein "Qt::"-Prefix ersetz wurde. Was ich allerdings als weniger hübsch empfinde, ist die konsequente Weiterverwendung von camelCase auch bei Methodennamen -- es steht keine Rubyesquere under_score-Variante zur Verfügung.

Anders sieht das aus bei den Qt-/KDE-Ruby-Bindings in der Korundum-Bibliothek. korundum4 ist eine m.E. etwas weiter fortgeschrittene Qt-Schnittstelle für Ruby, die zusätzlich die umfangreichen KDE-Erweiterungen der Qt-Bibliotheken zur Verfügung stellt. Außerdem wird Camelcase und Underscore-Schreibweise bei allen Methodennamen gleichermaßen unterstützt und "Setter" werden wie gewohnt über "value = " (und zusätzlich über "setValue()") angeboten.

Während QtRuby konsequent auf Ruby-Datentypen setzt, verwendet Korundum (noch) eigene Wrapper-Datentypen an Stellen, wo die C++ API einen Pointer erwartet. So würde ein Aufruf von Qt::FontDialog.getFont(my_boolean, Qt::Font.new("Helvetica", 10), self) in Korundum so aussehen: Qt::FontDialog.getFont(Qt::Boolean.new, Qt::Font.new("Helvetica", 10), self). Dies soll sich laut Dokumentation aber in Zukunft ändern. Bis auf diese Dinge lassen sich Programme, die für QtRuby geschrieben wurden, auch mit Korundum weitestgehend ohne Änderungen auch mit Korundum betreiben.

Ein paar hilfreiche HowTos:

Happy Hacking!

June 3, 2009

Ruby + Subversion

Wer sich wie ich dieses Wochenende im großen weiten WWW vergebens auf die Suche nach Dokumentation für die äußerst praktischen Ruby-Subversion-Bindings (libruby-svn) macht, dem sei an dieser Stelle gesagt: die Bibliothekt ist nicht dokumentiert.

Das Einzige, was mir weitergeholfen hat, sind folgende Blogs:

  • http://icepick.info/2008/09/25/using-rubys-svn-bindings/ (das einfachste beispiel)
  • http://www.oneofthewolves.com/2007/03/06/ruby-subversion-bindings-finally-some-documentation/ (schöne Einführung)
  • http://www.oneofthewolves.com/2007/12/22/ruby-subversion-bindings-better-documentation/ (Code und Unit Tests)

Das und ein Wenig Subversion-Anwenderwissen reicht bei Weitem aus, um z.B. Datenbankeinträge mit einem Subversion-Repository zu synchronisieren.

May 26, 2009

Live von der RailsWayCon Berlin

Nach einem frühen aber entspannten Flug nach Berlin gibt's jetzt im Laufe des Tages immer mal das eine oder andere Bild von der RailsWayCon im BCC am Alexanderplatz. Natürlich ist die innoQ mit einigen Rails-Spezialisten vor Ort vertreten:

Raum und Zeit für Diskussionen mit den "üblichen Verdächtigen":

Einen sowohl abgedrehten als auch außerordentlich kompetenten Vortrag über Ola Binis neueste Programmiersprachenkreation namens "Ioke" gab's vom Meister persönlich:

Mehr gibt's später!

!?!

Dieses Blog, dessen Autor sich unter der eindeutigen ID Willem van Kerkhof ansprechen lässt, beschäftigt sich im Wesentlichen mit Themen rund um des Autors Arbeit und um Ruby, Rails, Apache, Linux-Server, Javascript, anderem Geek-Kram und der Kombination aus diesen Themen.

Powered by
Movable Type 3.31