Todo für 2009
Geschrieben von Harald Lapp in Allgemeines um 14:18
Das Jahr neigt sich dem Ende und es wird Zeit eine Liste der Dinge zu erstellen, mit denen man sich 2009 beschäftigen möchte. Auf meine Liste setze ich folgende Punkte:
- php 5.3 -- ich möchte einen Entwicklungszweig meines PHP Frameworks einrichten, in dem ich mein Framework auf einige der tollen Features von PHP 5.3 vorbereite. z.B.: Operator Overloading und Closures.
- Ich möchte weiterhin die äusserst interessante dokumentbasierte Datenbank couchDB im Auge behalten und evtl. eine kleine Anwendung dafür schreiben. Ich plane eigentlich schon seit Ewigkeiten meinem Blog eine andere Software zu spendieren -- evtl. wird es also eine simple couchDB basierte Blog Software.
- Es gibt jetzt eine Installation der Datenbank DB2 Express-C von IBM für OSX -- da mich Datenbanken generell interessieren, möchte ich also einen Blick auf DB2 werfen.
- Ich möchte mir ein paar Javascript Bibliotheken ansehen. Insbesondere script.aculo.us. Da diese Bibliothek auf prototype aufsetzt, muss ich mich auch mit eben jenem beschäftigen. Ich bin eigentlich kein Freund von Prototype und vergleichbaren Dingen, da ich der Meinung bin, dass man nicht alles machen muss, was man machen kann und ich eigentlich auch nicht wirklich den Sinn darin sehe Javascript eine andere Form der Objektorientierung überzustülpen, wo die bestehende Form doch so wunderbar funktioniert. Aber mal sehen ... vielleicht kann ich mich ja doch damit anfreunden.
- Vielleicht gelingt es mir ja 2009 mich ein wenig mit Cocoa und Objective-C zu beschäftigen.
Das ist eine lange Liste und ich bin gespannt, welches Fazit ich in einem Jahr ziehen kann ...
Microsoft vs. Apple
Geschrieben von Harald Lapp in Allgemeines um 11:38
Völlig untypisch für mich und eigentlich fast unglaublich, dass ich jemandem mal ein Produkt von Microsoft empfehle. Aber es ist in der Tat passiert ...
multiple ssh
Geschrieben von Harald Lapp in Betriebssysteme, Datenbanken, Programmierung um 19:58
Heute wollte ich mal den "slave status" unserer 5 Datenbank Server bei Pixelio ansehen. Natürlich ist es schrecklich umständlich sich auf allen Servern einzeln anzumelden um immer und immer wieder den gleichen Befehl auszuführen. Hierfür gibt es Tools, die ein Kommando auf mehreren Servern ausführen können (sollen). Ausprobiert habe ich pssh und dsh. Jedoch, mit beiden bin ich nicht klar gekommen. Da ich wie gesagt nur eben schnell mal einen Befehl auf den Slaves ausführen wollte, habe ich auch keine Lust gehabt, mich intensiv mit den Tools zu beschäftigen:
pssh ist python basiert, schon der erste Minuspunkt -- aber gut, da OSX eh python mitbringt, hab ich's halt installiert und konfiguriert. Allerdings wollte pssh keine Ausgabe zurück liefern und nach dem Ausführen hatte ich plötzlich jede menge SSH prozesse laufen, die ich manuell killen musste.
dsh hat imo eine mehr als rudimentäre Dokumentation. Nach Ausgiebigem googeln wusste ich dann auch, dass man offenbar eine Liste der Server benötigt, mit denen man sich Verbinden will und ausserdem noch Servergruppen anlegen kann. Klingt gut. Allerdings kann dsh offenbar meine "~/.ssh/config" nicht lesen und kennt daher auch meine hosts nicht. Da ich auf die Schnelle nicht in Erfahrung bringen konnte, wie ich in der Serverliste den Port spezifiziere (mit ":" ging es jedenfalls nicht), habe ich das also auch sein lassen.
In der Zwischenzeit hätte ich sicherlich auch 5x manuell den slave status ausführen können -- aber gut, man ist ja faul. Nachdem ich also pssh und dsh von meiner festplatte verbannt hatte, habe ich mir dann in ca. 1 Minute selbst ein kleines Shell-Script zusammengezimmert, das zwar bei weitem nicht die Features von pssh und dsh bietet, aber dafür für meine Zwecke problemlos funktioniert:
#!/usr/bin/env sh
SERVERS=`cat ~/.dsh/$1`
for i in $SERVERS
do
echo $i
ssh $i $2
done
Das Script habe ich unter "/usr/local/bin/dsh" abgelegt und ist damit in meinem Pfad erreichbar. In der Datei "~/.dsh/dbslaves" habe ich mir eine Liste meiner Slaves angelegt:
slave-1
slave-2
slave-3
slave-4
slave-5
Diese Hosts habe ich ohnehin schon in meiner "~/.ssh/config" drin. Ausserdem sind auf den Servern meine Keys für passwortloses Login installiert. Nun kann ich über:
dsh dbslaves "mysql -uroot -p... -e 'SHOW SLAVE STATUS\G'"
bequem meinen Slave Status abfragen oder andere Kommandos ausführen.
reactable
Geschrieben von Harald Lapp in Allgemeines um 20:41
Eigentlich mag ich in diesem Blog keine youtube Videos posten, aber da ich ein Fan von innovativen und revolutionären Eingabe- und Bedienungsmethoden bin, muss ich das hier einfach posten.
Über ein paar Umwege bin ich darauf gestossen, als ich Videos zu dem Software-Synthesizer psychosynth gesucht habe, dessen Eingabemethode ganz offensichtlich von reactable inspiriert ist.
Gigantisch mit einem hohen "haben-will"-Faktor -- wer mag mir einen reactable zu Weihnachten schenken? ![]()
Neue Serverlandschaft bei pixelio.de
Geschrieben von Harald Lapp in Datenbanken, pixelio.de um 12:16
In den vergangenen fünf Jahren ist pixelio.de aus einem Hobbyprojekt eine kleine Firma geworden und aus ehemals einem Server ist eine Serverlandschaft mit 10 Servern und einem Loadbalancer entstanden. Die letzten Wochen haben wir endlich unser Netzwerk umstrukturiert und auf eine solidere Basis gestellt, sodass wir es zukünftig leichter haben weitere Server aufzunehmen. Dabei muss man mal ein Lob an HostEurope aussprechen, die im Service und Support eine wirklich gute Arbeit leisten -- es hat schon einen Vorteil, wenn man direkt mit Technikern am Telefon reden kann im Vergleich zu anderen Providern, wo das nur über einen Call-Center möglich ist und das ganze einem Stille-Post ähnelt (und die Ergebnisse entsprechend ausfallen).
Wir nutzen nachwievor eine alte Software, die eigentlich nicht für eine derart grosse Bilddatenbank ausgelegt ist und ausgesprochen schlecht skaliert. Um das Datenbankproblem in den Griff zu kriegen, setzen wir seit einiger Zeit schon den mysql-proxy von Jan Kneschke ein. Dieser Proxy kann transparent zwischen die Datenbank und eine Web-Anwendung gehängt werden und lässt sich über lua voll steuern. Über ein lua Script können wir so alle Queries parsen, der Proxy entscheidet dann welche Queries an den Master gehen müssen und welche an die Slaves. Das funktioniert sehr gut -- viel besser als eine reine PHP basierte Lösung, die wir ursprünglich mal in die Datenbankschicht der Bilddatenbank-Software gestrickt hatten.

Für nächstes Jahr ist endlich die Einführung einer von Grund auf neu entwickelten Software angedacht, die wir derzeit schon bei clipdealer.de im Einsatz haben. In diesem Zuge werden wir dann auch einen memcache-Cluster aufbauen, der die Datenbank massiv entlasten soll.
Ich bin gespannt, wie das Server-Diagramm in weiteren fünf Jahren aussehen wird ...
Ich liebe JavaScript
Geschrieben von Harald Lapp in Javascript um 13:16
Ich gestehe: ich liebe JavaScript -- ich habe noch keine Programmiersprache kennengelernt, in der es sich ähnlich intuitiv entwickeln lässt. Die Sprache ist absolut logisch aufgebaut, es gibt eigentlich nie aha-Effekte, dass etwas unerwarteterweise nicht möglich ist. Ähnlichen Spass am Programmieren hatte ich zuletzt mit Turbo Pascal vor vielen Jahren. Sollte es irgendwann eine ernstzunehmende serverseitige JavaScript Implementation geben, die sich über fastCGI in meinen bevorzugten Webserver einhängen lässt, werde ich (wahrscheinlich
) nicht zögern PHP hinter mir zu lassen um auch serverseitig JavaScript einzusetzen.
Mit der neuen JavaScript Engine von Google -- v8 -- die erstmals im Google Browser Chrome zum Einsatz kam, ist der Traum vielleicht irgendwann keiner mehr. Da die JavaScript Engine im Quellcode erhältlich ist und die Bibliothek sich ohne Probleme unter den wichtigsten Betriebssystemen compilieren lässt, sind schon zahlreiche Projekte entstanden, die v8 auch serverseitig einsetzbar machen sollen.
Im Moment spiele ich hier ein wenig mit llv8call -- eine Bibliothek, die v8 um Zahlreiche Funktionen erweitert, wie z.B.:
- File und Dir
- System Variablen
- STDIN, STDOUT und STDERR
- Process Management / Prozess Kontroll Funktionen
- Dynamic Library Loader
- Sockets
- libxml Support
... und ausserdem noch folgende Erweiterungen mitbringt:
- memcached
- fastCGI Support
- sqlite 3 Support
- Curl
Auch eine Verbesserte Shell (im Vergleich zur mit v8 Verfügbaren Shell) ist vorhanden, die nun Dank libreadline mehr Komfort mitbringt (z.b. die Befehlshistorie).
Zur Installation unter OSX sind evtl. folgende Tools und Bibliotheken notwendig:
- scons >= 1.1.0 -- http://www.scons.org/
- libxml >= 2.x -- http://www.xmlsoft.org/downloads.html
- libevent >= 1.4.x -- http://monkey.org/~provos/libevent/
- libmemcached >= 0.25 -- http://tangent.org/552/libmemcached.html
- ClearSilver >= 0.10.5 -- http://www.clearsilver.net/downloads/
Sofern man die Entwicklungstools von OSX installiert hat, lassen sich die genannten Bibliotheken ohne weiteres installieren. Lediglich bei ClearSilver musste ich den Ruby-Support deaktivieren:
./configure --disable-ruby
... und nach der Installation einen Symlink erstellen, damit llv8call beim Compilieren die Header-Dateien von ClearSilver einbinden konnte:
ln -snf /usr/local/include/ClearSilver /usr/include/ClearSilver
Wenn scons ohne Fehler durchgelaufen ist, kann man die erzeugten Binaries unter ./out/ im llv8call Quellverzeichnis finden.
Macbook
Geschrieben von Harald Lapp in Allgemeines um 12:00
Das neue Macbook auf meinem Schreibtisch zu Hause. Sehr schick -- aber leider nicht mein eigenes, sondern das von Freunden. Vor einigen Monaten schon segnete der Windows PC von Freunden das zeitliche und ich konnte sie erfolgreich zum Kauf eines Macs überreden. So wurde damals ein Mac Mini angeschafft. Offensichtlich sind meine Freunde mit dem Mac und Mac OS derart zufrieden, dass der geplante Kauf eines zusätzlichen Portablen Computers -- ursprüngliche Planung: Sony Vaio -- nun auch im Kauf eines Macbooks endete ... ich bin sehr zufrieden ![]()
Apple Store München
Geschrieben von Harald Lapp in Allgemeines um 20:26
Jedes Jahr am 6.12. bringt der Nikolaus den kleinen Kindern Süssigkeiten und Leckereien. Dieses Jahr hatte er für die grossen Kinder noch den Apple Store mit im Gepäck -- offensichtlich waren die münchner Kinder besonders brav
. Zur Eröffnung war ich auch dort und habe nach über einer Stunde Wartezeit auch mein Begrüssungsgeschenk überreicht bekommen ...
php + ncurses + osx
Geschrieben von Harald Lapp in PHP um 17:22
Benötige ich demnächst bestimmt noch 1-2x, deshalb hier auf alle Ewigkeit festgehalten. Zunächst ncurses saugen und über ...
./configure --prefix=/usr/local --with-shared --disable-rpath --without-debug --without-ada --enable-safe-sprintf --enable-sigwinch --without-progs
make
make install
... konfigurieren und installieren. Anschliessend kann man ncurses über pecl installieren:
pecl install ncurses
... und mit der ncurses Entwicklung in Verbindung mit php loslegen.
p.s.: ich bin kein Fan von "(darwin)ports" oder "fink", aber manchmal sind sie ganz nützlich um sich die richtigen Konfigurationsschalter herauszusuchen: http://ncurses.darwinports.com/




