• Home
  • Radio4Handicaps

Die 3 besten Spartipps für die Urlaubsplanung

er freut sich nicht auf den langverdienten Urlaub? Leider ist er eine kostspielige Angelegenheit. Damit Ihr am Strand nicht jeden Euro zwei Mal umdrehen müsst habe ich Euch drei Spartipps bei der Urlaubsplaung zusammengestellt mit denen Ihr Eure Urlaubskasse entlasten könnt:

1. Langfristig buchen
Bei der Buchung von Flug und Hotel kann man viel Geld sparen, wenn man mehrere Monate im voraus bucht. Vor der Buchung sollte man sich allerdings unbedingt seinen Urlaub vom Chef verbindlich genehmigen lassen, weil sich Reiseschnäppchen häufig nicht oder nur gegen Zahlung einer hohen Gebühr umbuchen oder stornieren lassen.

2. Rabattgutscheine nutzen
Mittlerweile gibt es fast für jedes Internetportal Rabattgutscheine, egal ob es sich um ein Flugbuchungsportal, die Seite einer Autorvermietung oder einen Onlineshop handelt. Hat man also einen günstigen Flug, sein Traumhotel oder eine praktische Reisetasche gefunden macht vor dem Abschluss der Bestellung auf jeden Fall Sinn nochmal ein paar Minuten zu investieren und nach einem passenden Rabattcode zu googlen. So lassen sich schnell nochmal 10 bis 15% vom eigentlichen Verkaufspreis sparen. Praktisch ist an solchen Rabattcodes, dass man mit Ihnen Preisnachlässe auf Artikel bekommt, auf denen normalerweise keine Rabatte gewährt werden. So gibt es momentan z.B. einen Rabattcode von koffer direkt, mit dem Ihr 15 Euro Rabatt auf das gesamte Sortiment bekommt. Dieser kann auch für die Koffer von Rimowa verwendet werden, auf die es sonst keine direkten Rabatte gibt. Jetzt mit dem Bet3000 Bonusecode bares geld sparen.

3. Bei Flugreisen kein Gepäck aufgeben
Bei Flugreisen kann man viel Geld sparen, wenn man darauf verzichtet Gepäck aufzugeben und ausschließlich mit Handgepäck reist, weil viele Fluggesellschaften hierfür mittlerweile Zusatzgebühren berechnen. Billigflugairlines wie z.B. Ryanair berechnen für das Aufgeben von Gepäck, die teilweise höher sind als der Preis für das eigentliche Flugticket. Daher lohnt es sich ein paar Dinge weniger einzupacken. Das hat außerdem den Vorteil, dass man im Urlaub weniger durch die Gegend tragen muss und man sich außerdem bei Hin- und Rückflug eine dreiviertel Stunde spart, die man sonst eher zum Flughafen fahren müsste, um das Gepäck aufzugeben.

cookie based redirect mit lighttpd

Alle unsere Entwickler haben eine komplett eigene Entwicklungsumgebung inkl. WebServer installiert. Manchmal ist es praktisch den aktuellen Entwicklungsstand am Checkout eines Entwicklers zu sehen. Anstatt für jedes Projekt und jeden Entwickler eine interne Subdomain einzurichten, kann man viel praktischer einen zentralen Reverse Proxy nutzen, der anhand einer Cookie Einstellung den Host des jeweiligen Entwicklers auswählt:

$SERVER["socket"] == "10.0.0.20:80" {
    ...
    $HTTP["host"] =~ "^.*\.devcenter.int$" {
        $HTTP["cookie"] =~ "(; )?devredirect=harald" {
            proxy.server = (
                "" => (("host" => "10.0.0.20", "port" => 8080))
            )
        }
        $HTTP["cookie"] =~ "(; )?devredirect=markus" {
            proxy.server = (
                "" => (("host" => "10.0.0.22", "port" => 8080))
            )
        }
    }
}    

Die oben gezeigte Konfiguration installiert einen Reverse Proxy für Subdomains von ‘devcenter.int’ — z.B. ‘clipdealer.devcenter.int’. Über das Cookie ‘devredirect’ kann spezifiert werden, welcher Host angesprochen werden soll.

MongoDB + PHP + OSX

Ich spiele gerade ein wenig mit Mongo DB. Da ich das die Tage sicherlich noch mal gebrauchen kann, mache ich mir hier mal ein paar wichtige Notizen zur Installation:

  • Der Aktuelle PHP Treiber ist nicht kompatibel zum aktuellen stable Release (0.8.0) auf der Mongo DB Seite. Deshalb muss ein daily-build von Mongo DB heruntergeladen werden. Am besten lädt man hier das Paket inkl. aller Tools und Treiber (beinhaltet auch den Source der PHP Erweiterung). Mongo DB also herunterladen und irgendwohin installieren (z.b. /opt/mongo).
  • Zum Compilieren des PHP Treibers benötigt man die Boost C++ Libraries. Beim Compilieren der Boost Libraries wurden die Namen der Bibliotheken derart angelegt, dass sie beim Compilieren des PHP Treibers von Mongo DB nicht gefunden werden konnten. Deshalb habe ich nach dem ./configure --prefix=/opt/boost von Boost die Datei Makefile editiert und die Zeile BJAM_CONFIG= nach BJAM_CONFIG='--layout=system' geändert.
  • Nachdem Boost Installiert wurde, lässt sich nun der Mongo DB Treiber compilieren. Bei mir befindet sich der PHP Treiber unterhalb des Verzeichnisses /opt/mongo/drivers_and_tools/mongo-php-driver. Ein phpize, ./configure --with-mongodb=/opt/mongo/ --with-boost=/opt/boost/, make, make install und der Treiber ist gebaut und installiert.

Eigentlich ganz einfach … aber ich vergesse es sonst garantiert wieder :-)

ORMs sind doof

Objektrelationale Abbildung (englisch object-relational mapping, ORM) ist eine Technik der Softwareentwicklung, mit der ein in einer objektorientierten Programmiersprache geschriebenes Anwendungsprogramm seine Objekte in einer relationalen Datenbank ablegen kann. Dem Programm erscheint die Datenbank dann als objektorientierte Datenbank, was die Programmierung erleichtert. […]

Inzwischen bringt ja so ziemlich jedes PHP Framework seine eigene ORM Implementierung mit, es gibt aber auch einige Framework-unabhängige ORM Implementierungen. Ich habe mir in den letzten Jahren immer mal wieder verschiedenste ORM Implementierungen angesehen — immer dann, wenn in mir der Wunsch nach einer objektorientierten Zugriffsweise auf meine Datenbanken aufkam. Leider jedoch konnte mich bisher keine ORM Implementierung überzeugen.

ORMs sind doof

Auch in mir kommt immer mal wieder der Wunsch auf objektorientiert auf meine Datenbanken zuzugreifen, da dies den Zugriff auf einzelne Datensätze — Objekte — erheblich vereinfacht. Jedoch — zu welchem Preis wird diese Vereinfachung erkauft?

Modellierung

Ich modelliere meine Datenbanken schon seit Jahren mit dem ER Modeller dbWrench. Das ist meiner Meinung nach super komfortabel. Ich sehe auf einen Blick all meine Tabellen und die Abhängigkeiten bzw. Verknüpfungen zwischen einzelnen Tabellen. Über die Funktion “Forward Engineering” kann dbWrench mein Datenbankschema in der Datenbank immer aktualisieren. Da ich bei MySQL den Tabellentyp InnoDB verwende, sind auch in der Datenbank sämtliche Verknüpfungen festgehalten und liessen sich z.b. über die INFORMATION_SCHEMA Tabelle leicht auslesen.

Nun ist es leider so, dass offenbar so ziemlich jede ORM Implementierung die Datenbankdefinition auf Ihre Weise bekommen möchte. Da muss man entweder seitenweise XML oder YAML Konfiguration, oder gar ellenlangen PHP Code schreiben — nur um der Anwendung eine Information bekannt zu geben, die eigentlich exakt so schon in der Datenbank vorhanden ist?

Abstraktion

Wie weit muss man die Datenbankzugriffe abstrahieren? Nun, es gibt da sicherlich die verschiedensten Anforderungen. Ich denke bei der Entwicklung von Unternehmenssoftware kann man die Anforderungen ziemlich genau spezifizieren. Man entscheidet sich zu einem gewissen Zeitpunkt für ein bestimmtes Datenbankprodukt. Normalerweise wird diese Entscheidung nicht nach wenigen Monaten oder Jahren über den Haufen geworfen — es sei denn es gibt sehr triftige Gründe dafür.

Deshalb bin ich der Meinung, dass die Abstraktion nicht so weit gehen muss, dass sämtliche Datenbankzugriffe abstrahiert werden und für beliebige Datenbanksysteme geeignet sind. Im Gegenteil: ich entscheide mich ja nicht für eine bestimmte Datenbank nur aus Kostengründen, sondern auch, weil diese vielleicht Features mitbringt, die ein anderes Datenbanksystem nicht unterstützt.

So erweitert z.b. MySQL den SQL Standard um eigene spezifische Befehle, die es in anderen Datenbanken nicht gibt, die aber sehr praktisch sind. Das ist kein Alleinstellungsmerkmal von MySQL. Beispiel: Hätte ich mich für Oracle entschieden, wäre ich doch dumm, würde ich zum Abbilden / Abfragen von Hierarchischen Strukturen nicht CONNECT BY verwenden — nur weil dies nicht Teil des SQL Standards ist und dies so mit keiner anderen Datenbank funktioniert.

Nur: keine ORM Implementierung kann auf diese einzelnen Datenbankfeatures eingehen — womit ich beim nächsten Punkt angelangt wäre.

Abfrage

Das grösste Manko aller (PHP) ORM Implementierungen ist meiner Meinung nach die Abfrage einer Datenbank. Ich gebe zu: ich mag SQL — es gibt mir das passende Werkzeug zum Abfragen einer relationalen Datenbank in die Hand — es wurde zu diesem Zweck entwickelt! Ich schreibe gern SQL, da es strukturiert und übersichtlich ausschaut und mich schnell zum Ziel führt. Ich gebe weiterhin zu: Ich nutze auch gern MySQL spezifische SQL Features — aus den oben genannten Gründen.

Nun ist es jedoch so, dass die ORM Implementierungen in der Regel den Zugriff soweit abstrahieren, dass — normalerweise — kein SQL mehr geschrieben wird. CONNECT BY und ähnliche Dinge wären damit Unmöglich. Heutzutage hat sich folgende Schreibweise zum Erstellen von Datenbankabfragen etabliert:

$dbo
->select(array(
‘media.media_id’, ‘media.media_name’, ‘member.member_name’, …
))
->from(‘media’)
->join(‘member’, ‘member.member_id = media.member_id’)
->where(‘media.category_id = ?’)
->order(‘media.media_id’)

Ich bin kein Fan einer solchen Schreibweise:

Es ist kein SQL ;-)
Es ist wesentlich mehr Aufwand als beim Schreiben von SQL erforderlich
Ich kann keine Datenbankspezifischen SQL Erweiterungen verwenden
Ich habe keine Kontrolle darüber, welchen SQL Code die ORM Implementierung daraus generiert
Es liegt in der Natur der Sache, dass ein derartiges Konstrukt niemals auch nur annähernd so performant sein kann wie ein simples SQL Statement übergeben an die Datenbank
Ich kann das Statement nicht per Copy / Paste zwischen meinem Datenbank Client und der Anwendung hin und her kopieren — praktisch, wenn man das ganze erstmal testen will
Wenn ich den Datenbanktreiber einer nicht-relationalen Datenbank hinterlege, weil ich mich z.b. entscheide statt MySQL MongoDB anzusprechen, wird diese Schreibweise ohnehin ad Absurdum geführt. (Nur als beispiel — ich weiss nicht, ob irgendeine PHP ORM Implementation überhaupt nicht-relationale Datenbanken unterstützt)

Natürlich bietet so ziemlich jede ORM Implementierung einen Fallback zur Herkömmlichen Absetzung von SQL Anfragen ohne ein Objekt-Mapping. Nur, wenn ich damit an einer Stelle in meiner Anwendung anfange: warum dann überhaupt eine derartige Abstraktion nutzen?

Fazit

Meiner Ansicht nach erkauft man sich den konsequenten Einsatz eines ORM zu einem zu hohen Preis. Deshalb habe ich den Einsatz eines solchen für mich immer wieder verworfen. Mein Wunsch wäre ein SQL -> Objektmapper. D.h.: Ich schreibe SQL, zurück bekomme ich Objekte, mit denen ich weiterarbeiten kann …

Hitzeprobleme beim iMac

Die iMacs leiden offenbar unter Hitzeproblemen. Bei mir machte sich das seit ein paar Wochen bemerkbar, als mein weisser 24″ iMac (von 2006) anfing nach längerem Arbeiten Grafikfehler zu produzieren. Angefangen hat es mit horizontalen Linien über den Bildschirm, zum schluss waren es Verzerrungen, merkwürdige Ränder an den Programmfenstern, verschwundene Dock-Icons und Pixel-Müll auf dem Bildschirm. Im Apfeltalk Forum gab man mir den Rat den Apple Hardware Test, der sich auf der ersten Installations DVD des iMacs befindet, zu benutzen, um Hardwarefehler auszuschliessen, da ähnliche Symptome offenbar auch bei Leuten auftraten, deren iMac-Grafikkarten defekte VRams aufwiesen.

Der Apple Hardware Test verlief glücklicherweise fehlerfrei. Ich hatte auch schon eine Vermutung, dass es möglicherweise ein Hitzeproblem sein könnte: der iMac ist superleise, einen Lüfter hört man praktisch nicht, da die Drehzahl von Haus aus sehr gering eingestellt ist. Ich habe mir also das Programm Temperaturmonitor besorgt und sah hier meinen Verdacht als durchaus begründet, da der Netzteilsensor über 80° gemessen hat und die Grafikkartensensoren zwischen 50° und über 60° anzeigten.

Beim Googeln entdeckte ich einen Artikel in einem Blog, der meinen Verdacht dann bestätigte: die Temperaturen sind viel zu hoch. In diesem Artikel wird das Programm smcFanControl erwähnt, das ich mir sogleich installiert habe. Über diese Software lassen sich die Drehzahlen dreier Lüfter im iMac einstellen. Ich habe mir im smcFanControl nun ein Profil angelegt, mit dem ich die Lüfter auf maximale Drehzahl laufen lassen kann. Damit konnte ich die Temperaturen laut Sensoren um 20° bis 30° absenken und siehe da — keine Grafikfehler mehr.

Ich bin erleichtert, dass es offenbar “nur” ein Hitzeproblem ist und kein Hardware-Defekt. Mit verschiedenen Profilen im smcFanControl kann man sich optimale Lüfterdrehzahlen zusammenstellen. Ich habe festgestellt, dass die Grafikfehler bei mir bei den Werten “Grafikprozessor Kühlblech 1 > 40° und Grafikprozessor Temperaturdiode > 55°” (etwa) auftauchten. Deshalb habe ich nun ein Profil, welches die Werte konstant darunter hält. Das funktioniert eigentlich ganz gut. Ich bin noch nicht sicher, ob das ein Dauerzustand sein kann — die Lüfterdrehzahlen sind zwar immernoch so niedrig, dass die Geräuschentwicklung nicht wirklich störend ist, evtl. aber ist der iMac innen verstaubt und man müsste ihn mal zum Reinigen öffnen. Aber für den Moment bin ich zufrieden — so wie es ist.

Radio4Handicaps vor Ort – Wir sind da, wo es interessant ist!

Expertengespräche, Informationen, Hintergründe und Musik. Das erwartet Sie in dem Magazin „Radio4Handicaps vor Ort“.

Aktuelles Thema: Herausforderung Integration – Krisen bieten Chancen. Wir haben den „11. Tag der Begegnung“ des LVR in Xanten live erlebt. Über 28.000 Menschen feierten dort Deutschlands größtes Integrationsfest für Menschen mit und ohne Behinderung. Für wen der Tag der Begegnung interessant ist, was dort geboten wird und warum der LVR ihn feiert, all das klären wir in dieser Sendung.

Vorschau: Unerwartete Barrieren – Initiative zur Aufklärung. Wir waren zu Besuch bei einem Treffen des PerspektivForums in Kassel. Das PerspektivForum zeigt auf, dass Menschen mit Behinderung sehr oft unterschätzt werden. Dabei setzt sich die Initiative für die Mitarbeit von Menschen mit Behinderung in kirchlichen Gemeinden ein. Ab 30. Juni 2008 um 20:00 Uhr.

Radio4Handicaps berichtet über die Dinge, die draußen vor der Tür passieren.
Events, Messen und Veranstaltungen. Themen, Portraits und Informationen.
Von und mit Christian Dräger.

“Ports of Call” auf dem iPhone

Wem der Spieleklassiker “Ports of Call” (POC) nichts sagt, ist entweder zu jung und / oder hat die Zeit der Homecomputer nicht erlebt, hatte keinen Amiga oder kannte niemanden der einen Amiga sein Eigen nannte. “Ports of Call” ist ein Handelsspiel, in dem es darum geht eine Reederei aufzubauen und Handel über Seewege zu treiben. Das Spiel war seiner Zeit aber irgendwie voraus, denn es war nicht nur ein Handelsspiel, sondern beinhaltete auch einen Simulator. So konnte man sein Geschick versuchen und die Hafen ein- und ausfahrten selbst steuern. Oder man fuhr eine Route mit Eisbergen und musste diese umschiffen.

Seit geraumer Zeit schon wird das Spiel weiterentwickelt. Inzwischen gibt es Portierungen für aktuelle Windows Versionen und sogar einen richtigen 3D Simulator.

Gestern erschien nun die iPhone / iPod Touch Portierung von POC und ich dürfte einer der ersten gewesen sein, die das Spiel im App Store erworben haben. Bei der Portierung handelt es sich um die alte Classic Version und mit entsprechendem Charme kommt sie auch daher. Bedienen lässt sich das Spiel natürlich über den Touch Screen. Der Bildschirm wird leider nicht voll ausgenutzt, da dort wo es nötig ist, zusätzlich Kontrollflächen eingeblendet werden. So wurden z.b. Schaltflächen zum Manövrieren des Schiffes an den Seitenrand gepackt. Aufgrund der Tatsache, dass die Kontrollflächen des Spiels ansonsten nicht angepasst wurden, sind diese gemessen an der Bildschirmauflösung teilweise recht klein. Deshalb weiss ich auch nicht ob es an meinen grossen Fingern liegt oder ob es tatsächlich so ist, dass die Schaltflächen nicht immer beim ersten “Klick” bzw. Anfassen reagieren.

Alles in allem macht es selbst nach 20 Jahren, die das Spiel inzwischen auf dem Markt ist, noch spass damit zu spielen. Auch auf dem iPhone macht es Spass ein Schiff aus dem Hafen zu navigieren oder den Riffen in schwierigem Gewässer auszuweichen. Das Spiel ist mit seinen 3,99 € sicher nicht eines der günstigen im App-Store, dafür bekommt man aber einen echten Klassiker, der nichts von seinem Charme verloren hat und der für viele Stunden Spielspass sorgen kann.

FERIEN…!!!

Die Ferien fangen an und die ersten von Euch gehen auf große Fahrt. Die einen mit dem Flugzeug, die anderen mit der Bahn oder dem Auto. Verreisen ist etwas Tolles, wenn man denn nur schon da wär. Damit euch die Zeit auf der Reise nicht lang wird, haben wir eine ganze Sammlung von Spielen, die ihr mit euren Eltern und Geschwistern ohne Aufwand spielen könnt. Für die, die zu Hause bleiben, gibt es den einen oder anderen Tipp um sich hier die Zeit zu vertreiben.
Natürlich geht es weiter mit unseren Geschichten von Faxi dem kleinen Troll, der nicht laufen konnte und Mark dem Indianerjungen, der so gerne mehr gewusst hätte über das Schicksal seines verschollenen Vaters.
Faxi, der kleine Troll, geschrieben von Doris Stommel-Hesseler. Was sich die Waldbewohner da alles einfallen lassen, um Faxi zu helfen, erfahrt ihr auch diese diese Woche im “Kindertreff”.
Musik und gute Laune gehören genau so dazu, wie unser neues Gewinnspiel.

Also, unbedingt rein hören und wer noch nicht in Urlaub fährt, der kann sich in unserem “Kindertreff” ja schon ein wenig Vorfreude dazu holen.

Hört zu, macht mit, erzählt es weiter! Wir freuen uns auf euch!

Radio4Handicaps ist offizieller Medienpartner bei Deutschlands größtem Integrationsfest.

Auf dem 11. “Tag der Begegnung” hat unser Reporterteam auch in diesem Jahr wieder interessante Interviews führen können, z.B. mit dem neuen Landesdirektor des LVR, Harry K. Voigtsberger, mit Horst Eckel, dem Fußball-Weltmeister von 1954, mit Sportlern, Musikern, Standbetreibern und zahlreichen Besuchern.

Warum gibt es den Tag der Begegnung, wie hat er sich entwickelt und was waren die Highlights in Xanten?

Ab Montag, d. 16.Juni wird in der Sendereihe “R4H vor Ort” mehrfach ausführlich über die Veranstaltung berichtet. Die genauen Termine entnehmen Sie bitte dem aktuellen Sendeplan.

Weitere Informationen zum “Tag der Begegnung” gibt es im Internet: www.lvr.de

Rückblick auf den 10. “Tag der Begegnung”. Auch hier hat Radio4Handicaps mit zahlreichen Gästen sowie dem Empfänger des Rheinischen Ehrenpreises, Peter Maffay gesprochen.