Einträge in Programmieren

Asteroids

Vom 28. Februar 2010

This is (or was) one of the projects, that consumed my time for several weeks now:

A small screenshot of Asteroids. Starships shooting asteroids... and sometimes crashing on them.

Download: Linux with i368 and amd64 binaries, Windows

On Ubuntu Linux you need a newer libsdl-image1.2 package than the one in the repository. Installing the newer Debian package does the trick.

When you start the game you can find an overview of the basic controls in the lower right corner. The normal cannon (space key or left mouse button) is a fast firing projectile weapon. However you’ll need multiple hits with it before an asteroid finally breaks apart. The secondary weapon (called “sweeper”) fires 10 projectiles at once with a small spread, making it effective at close range. However has a cooldown of 5 seconds so it can not be used that often.

As with every game there are some small bugs:

  • The player collision is not really exact. It does not consider the players rotation (always checks as if the player would be looking up).
  • If you hit an asteroid with the sweeper weapon at close range it might happen that more than two small asteroids are spawned.

Background and development

This game mainly was a playground to get a better feeling for the D programming language and to explore how a game could be programmed. It all stared with a course (development of computer games) Thomas Fuchsmann gave at the university. Since then I was somehow hooked up by this topic and so Asteroids became my official project for this course (due tomorrow).

However the game is not “just” an usual Asteroids remake. I guess when making a game every developer mixes in some other influences. Here are the specials:

  • An “ingame” menu. That does’t mean the menu is part of the game, but that your are flying around in the menu. You can land in different docks to trigger several actions (e.g. start a new game, continue a game or exit).
  • Particle effects. I don’t actually know if the original Asteroids game had particle effects. Anyway, this game has particles with color. Thanks to Daniel Klier for inspiring me to write a basic particle system.
  • Real thrusters. Well, as real as virtual thrusters can be. The players ship is equipped with 7 thrusters. Depending on your controls different thrusters fire and this causes the ship to move or rotate. Of course each thruster has particle effects corresponding to its strength. Just try to rotate the ship with the arrow keys and with the mouse. You’ll see the difference if you look closely.
  • Modern controls. Sort of. You can move your ship with the keyboard (basic WASD controls know from ego shooters) and rotate it and fire with the mouse (this makes crazy flying quite funny). You can also rotate the ship with the arrow keys. More or less the standard controls for PC games today, but now you can play Asteroids in this style, too.

I also worked on a way to really shatter the asteroids instead of just replacing them by smaller ones. However this didn’t really worked as I wanted (concave polygons can be troublesome fellows) and it was to unreliable to give a good gameplay experience, so I removed it again.

Another drawback: The game can only be played on a fixed 800×800 pixel window right now. It would not be much effort to allow different sizes or a full screen mode but I simply didn’t considered it important enough to devote time to it.

Technically I’ve learned quite a lot during this project. Several ways to structure your game with all sorts of pros and cons, architecture of an engine and even some details about math and algorithms. I only used OpenGL, SDL and SDL_Image as a basis, the rest was all done from scratch (starting from an N-Tree for the scene graph up to collision detection).

Turned out that D was quite a nice language to work with. Even if it’s not really at home on 64 bit Linux yet (the game was developed with the GDC compiler on Ubuntu 64 bit). You also need wrappers for some stuff but it’s still the most productive compiled language I’ve worked with so far. I’ll definitely use this language more often now. However I might try to rewrite the game with some nice libraries and might take a look at Tango. Doing it all from scratch produced a lot of really ugly code that would need ages to clean up.

Anyway, enough talk, get shooting some asteroids… just not get crashed by one: Linux version, Windows version.

Please let me know what you think about the game (e.g. post a comment or drop me a mail). Much fun. :)

Abgelegt in: Programmieren, Projekte | Kommentare ansehen und hinterlassen (2)

Level 60 Word-User

Vom 28. November 2009

Bei dem Vortrag über Computerspiele hat Prof. Kriha erwähnt, dass viele Computerspiele den Benutzer mitsamt seiner Entwicklung einbeziehen. Rollenspiele z.B. behandeln den Benutzer mit fortschreitendem Level anders (schwerere Aufgaben, anspruchvollere Umgebungen, usw.). Viele normale Anwendungen jedoch behandeln den Benutzer nach 3 Jahren immer noch genauso dumm wie am ersten Tag… obwohl der Benutzer z.B. nach 3 Jahren Arbeit mit Word sich (wahrscheinlich) in seinen Fähigkeine im Umgang mit Word doch erheblich verändert hat. Dennoch gibt es keinen Level 60 Word-User.

Was eigentlich als Witz gemein war, hat mich dennoch etwas zum Nachdenken gebracht. Könnte man nicht das Level-System aus den Rollenspielen irgendwie sinnvoll in größere Programme einbinden? Könnte man nicht Aufgaben stellen mit denen dann das Level des Benutzers steigt? Eine Art Level-orientiertes HowTo, das der Benutzer je nach Lust und Laune weiter machen kann.

“Zeichnen sie einen Pfad mit min. 10 Knoten verschiedener Art”, “Erstellen sie ein Rechteck und schneiden sie einen Kreis heraus”, “Herzlichen Glückwunsch zu Level 5”. Inrgend etwas in diese Richtung sollte sich doch verwerten lassen, so dass zumindest das Lernen eines Umfangreicheren Programms Spaß macht. Mal sehen, ob man das nicht in ein Projekt mit rein packen kann…

Abgelegt in: Programmieren, Sonstiges | Kommentare ansehen und hinterlassen

KISS?! Wer braucht das schon…

Vom 17. Juni 2009

Als Programmierer kommt man vielleicht in eine Phase, in der einem die eigene Phantasie davon rennt. Dann denkt man sich innerhalb von einer Stunde ein schön Aufgebautes System aus, das bloß leider auch sehr umfangreich und komplex ist. In meiner persönlichen Entwicklung hab ich mehr als einmal Monate an etwas programmiert, dass ich mir in einer Stunde ausgedacht hatte…

So schön das auch sein mag, so schlimm waren für mich persönlich die Folgen: Selbst wenn ein System besonders gut durchdacht war, sobald ich an die Implementierung gedacht hab, ist der Eifer in Frust umgeschlagen. Es würde eh zu lange dauern, diese Idee zu implementieren, also kann ich es auch gleich sein lassen.

Diese nüchterne Einsicht hätte fast dazu geführt, dass ich mit dem Programmieren aufgehört hätte. Wofür auch programmieren, wenn man die Sachen, die man im Kopf hat, eh nicht so Umsetzen kann? Wofür, wenn man seinen eigenen Ansprüchen an schönen Code nicht gerecht wird und damit auch keinen Spaß an der Sache hat? Ich habe mich in der Programmierung verloren… nur noch des Programmierens halber programmiert und dabei oft die eigentlichen Probleme aus den Augen verloren.

Glücklicher weise bin ich damals mehr durch Zufall und englische Literatur auf eine andere Art der Programmierung gestoßen. Dort ging es auf einmal um Prinzipien wie KISS und DRY. Erst dank dieser Prinzipien hab ich verstanden, dass es von Vorteil ist, ein System möglichst einfach zu halten. Weniger Code, weniger Fehler, übersichtlicher, schneller zu implementieren und einfacher zu warten.

Nach einiger Gewöhnungszeit gelang es mir dann sogar wieder, mir Sachen auszudenken, die in überschaubarer Zeit programmierbar waren. Zwar auch durch die Hilfe diverser Sprachen und Frameworks, aber in erster Linie indem ich in der Lage war, unnötige Funktionen wegzulassen und so das System möglichst einfach zu halten. Komplexität hat zwar auch seine Schönheit, aber etwas, dass ein Problem auf bestechend einfache und ausdrucksstarke Weise löst, hat einen ganz anderen Reiz.

Leider scheint man beim Studium auf solche Prinzipien nicht wirklich Wert zu legen. Warum auch Dinge einfach halten, wenn man sie kompliziert machen kann? KACAP scheint da der Trend zu sein. Warum sollte man als Programmierer auch an das Problem denken, dass man eigentlich lösen wollte? Das währe ja fast so schlimm wie ein Programmierer, der leistungsorientiert oder wirtschaftlich denken kann…

Langsam bekomme ich den Eindruck, manche Vorlesungen bewegen sich in diese Richtung.

Abgelegt in: Programmieren, Gedanken | Kommentare ansehen und hinterlassen

Autotest with Ubuntu OSD notification

Vom 13. Juni 2009

Having suffered under a minor burnout lately it’s time to have some fun with programming again. Therefore I’m doing a small of the record Rails project and thought I could start some serious testing with Shoulda and Webrat. All so fine and funny but the GNOME notify plugin for autotest made it perfect!

Once you fire up autotest it automatically runs your tests based on what file you just saved. Pretty cool if you code some new stuff and get direct feedback without having to type in the test command.

I have used this before on a project but with the GNOME notify plugin you don’t even have to look at the console. Once saved you’ll get a nice little new Ubuntu style notification:

An Ubuntu OSD notification message showing that all tests passed

Pretty neat an the “good job” line keeps you programming. Couldn’t be more fun.

Abgelegt in: Programmieren | Kommentare ansehen und hinterlassen (1)

Fast file transfer with netcat

Vom 22. Mai 2009

Yesterday I wanted to move an 2.3 GiByte VMware image from one Ubuntu System to another. At first I tried SFTP but it’s more than slow (1 MiByte/s on a 100 MBit/s connection). The next logical step would have been to use Samba or NFS but I don’t like both of them…

This is where netcat comes in handy.netcat is a small unix/linux command line tool that lets you pipe data over a network connection (among many other things). The cool thing: it’s quite simple.

First listen on the server

netcat -l -w 2 1111 > vm.zip

The -l parameter makes netcat listen for incoming data while -w 2 tells netcat to automatically close the connection 2 seconds after data stopped coming in. 1111 at last is the port number where netcat actually listens. All data received is then stored in the file vm.zip.

Then send the data from the client

netcat 192.168.0.1 1111 < vm.zip

This one’s straight forward: give netcat the IP address and port where the other system’s listening (192.168.0.1 1111) and feed it with data (< vm.zip).

This’s it

This little trick gave me a transfer rate from about 7 to 9 MiByte/s. Much better than SFTP.

Of course this netcat styles of data transfer has it’s drawbacks. Theres no real protocol involved so it’s somewhat vague. On the positive side attackers will have a hard time to figure out what the heck you’re sending. It’s also not possible to transfer multiple files with netcat alone but tar can help us here:

Server:

netcat -l -w 2 1111 | tar -xz

Client:

tar -cz * | netcat 192.168.0.1 1111

It’s basically piping a tar archive over the network. -c for creating the archive and -x for extracting it. The z parameter of tar gives us data compression for free. Pretty nice and basic.

On the fly check with MD5

Some unix piping goodes makes it possible to check the data transfer on the fly with MD5. For those who don’t trust netcat. :)

Again, server:

netcat -l -w 2 1111 | tee >( md5sum > /dev/stderr ) | tar -xz

Then client:

tar -cz * | tee >( md5sum > /dev/stderr ) | netcat 127.0.0.1 1111

This transfers the data over the network and outputs an MD5 checksum afterwards. Just compare the checksums and you know your data wasn’t hurt on the way.

These commands use tee and the bash process substitution feature to redirect the tar archive to the md5sum program and netcat on the same time (taken from Redirect output to multiple processes). It’s a bit complex though so it’s better suited for shell scripts I think.

Abgelegt in: Programmieren | Kommentare ansehen und hinterlassen

Friendly blank pages

Vom 11. April 2009

Just to share some fun…

During one of my recent projects (kuekenfest.de, I’m helping out with the website) I was redirecting a new domain to the HelionWeb server. As soon as the name servers were updated I checked it out and came across the beloved and ugly “404 Not Found” page. Not very friendly and this site really motivates you to dump the URI into the trash bin and never come again.

Therefore I quickly hacked together a nice more friendly Nothing here… yet! page. Not the perfect thing but I think it’s some fun reading and it should keep a visitor from adding the URI to it’s mental blacklist.

Abgelegt in: Programmieren | Kommentare ansehen und hinterlassen

Entwicklung, Patente… und die Menschheit

Vom 22. Februar 2009

Gestern beim Frühstück hatte ich mit einigen meiner Kommilitonen eine interessante Unterhaltung über den Sinn und Unsinn von Patenten. Ich finde solche Diskussionen sehr gut, da man seine Gedanken untereinander austauschen kann. Zudem bin ich auch einfach froh, Leute gefunden zu haben, mit denen man überhaupt länger über sowas reden kann. Ich war allerdings etwas erstaunt, wie wenig kritisch meine Kommilitonen Patenten gegenüber eingestellt sind. Vielleicht liegt es daran, dass man sich mit solchen Themen nicht einfach so mal genauer befasst, sie einen selten direkt betreffen oder sie auch einfach andere Erfahrungen mit Patenten gemacht haben als ich (genau deshalb finde ich es gut und wichtig, über sowas zu reden). Jedoch ist mir mal wieder aufgefallen, dass es mir in letzter Zeit einfach nicht mehr gelingt, meine Gedanken verständlich und nachvollziehbar zu äußern. Möglicher weise sind meine Gedanken einfach komplizierter geworden sind, weil alles eigentlich mit allem irgendwie verwoben ist und alles beeinflusst. Anscheinend habe ich bei meinen Kommentaren zu viele geistige Schritte übersprungen, denn ich hatte das Gefühl, dass bei meinen Gesprächspartnern eigentlich nicht das ankam, das ich sagen wollte. Diese Erfahrung war ein Anreiz, meine Gedanken zum Thema Patente etwas zu ordnen und mir zu überlegen, wie ich diese möglichst nachvollziehbar erklären kann.

Ein Versuch

Anfangen kann man indem man sich folgendes überlegt: Was muss ich alles erledigen, wenn ich etwas entwickeln will, dass viele Menschen verwenden können (z.B. ein Auto). Bei diesem Gedanken bin ich grob auf folgende Schritte gekommen:

  • Grundlagenforschung: Erstmal überlegen, welche Technologien es bereits gibt und welche man verwenden kann. Je nach Gebiet bzw. Industrie muss man auch erst mal eine neue Technologie erforschen oder bestehende aufwändig kombinieren.
  • Produktforschung: Wie können Menschen diese Technologie sinnvoll nutzen? Nur mit meinem Verbrennungsmotor könnte ich nicht viel anfangen. Ich bräuchte schon ein bedienbares Auto um eine größere Stecke zu fahren… und das besteht aus mehr als nur einem Motor.
  • Produkt entwickeln: Alle Technologien in ein fertiges, bedienbares und zuverlässiges Produkt zusammen führen.
  • Produkt vermarkten: Die Menschen müssen erst mal wissen, dass es eine Technologie gibt, bevor sie diese verwenden können. Zudem sollte man auch aufklären, wo die Vor- und Nachteile der Technologie liegen (z.B. dass man mit einem Auto gut große Distanzen überwinden kann, aber es Treibstoff braucht und Unfälle fatal sein können).

Geld …

All diese Schritte kosten erst mal sehr viel Geld und Zeit. Entwickelt nun eine Firma ein Produkt, so hat sie bis zu diesen Zeitpunkt nur Geld ausgegeben und noch nichts dabei verdient. Damit wirtschaftlich orientierte Firmen nun aber motiviert werden, so etwas zu machen, muss es eine Möglichkeit geben, zumindest die Ausgaben wieder durch Einnahmen zu decken. Hier kommen Patente ins Spiel. Möchte jemand anderes auf dieser Entwicklung aufbauen, soll er sich über Lizenzkosten an den Kosten für all die Forschung und den Aufwand beteiligen. Das ist durchaus fair und nachvollziehbar. Allerdings birgt das wie alles im Leben einige Risiken und Nebenwirkungen.

Sind z.B. die Lizenzkosten zu hoch, kann es passieren, dass andere Firmen die Technologie nicht nutzen können. Dadruch verbreitet sich die Technologie möglicher weise nicht genug und geht mit der Zeit einfach wieder unter. Auch wenn sie wichtige Probleme vieler Menschen gelöst hätte.

Ein weiteres Risiko besteht in der “wer zuerst kommt, mahlt zuerst” Verteilung von Patenten. Wenn zwei Personen, Teams oder Firmen zur gleichen Zeit eine Technologie entwickeln, kann nur der seine Kosten decken, der als erster das Patent anmeldet. Das mit “Pech gehabt” abzutun währe etwas hart, denn evt. hat die langsamere Seite mehr Wert auf Sicherheit, Zuverlässigkeit und gute Qualität gelegt. Hier ist das Ergebnis (das schlechtere Produkt bekommt den Vorteil) zum Nachteil der Menschen. Zudem hat dieses Risiko dafür gesorgt, dass Patente schon früh oder auf Verdacht angemeldet werden, auch wenn keine ernsthafte Forschungs- oder Nutzungsabsicht dahinter steht. In dem Fall ist die Technologie für Andere mit ernsthaften Absichten blockiert. Ein Beispiel hierfür war ein Konflikt zwischen id Software und Creative Labs eine Woche vor der Veröffentlichung von dem Computerspiel Doom 3 (siehe Carmack’s Reverse und die Links bei Regarding depth-fail patents).

Ich habe auch manchmal die Beobachtung gemacht, dass sich Firmen nach ihrem Entwicklungsaufwand ausruhen. Das ist sicher nicht falsch, solange man andere, die weiter entwickeln wollen, nicht blockiert. Hier fallen mir z.B. Praktiken von Firmen wie Microsoft ein, die unter anderem Patente benutzen um die Konkurrenz davon abzuhalten, bessere Software auf den Markt zu bringen. Wie solche Firmen den Aufwand und die Ideen Anderer würdigen ist auch kein Geheimnis.

... oder etwas anderes

Das ist jedoch nicht die einzige Möglichkeit, wie die Dinge nach einer aufwendigen Entwicklungsphase weiter gehen können. Wenn es darauf ankommt, möglichst schnell und effektiv Probleme zu lösen, ist der Weg über Patente vielleicht nicht der Richtige. Dazu ein (unbestätigtes) Beispiel: Man sucht eine Technologie um verseuchtes Wasser in der 3. Welt mit möglichst einfachen Mitteln zu reinigen. Diese Suche kann aufwändig und kostspielig sein. Hat man eine einfache Möglichkeit gefunden (z.B. Wasser mehrere Stunden in transparenten PVC-Flaschen in der Sonne liegen lassen) ist man in erster Linie daran interessiert, diese “Technologie” so schnell wie möglich zur Anwendung zu bringen. Das Problem soll beseitigt werden und die Technologie ist nur das Mittel zum Zweck.

Würde man hier ein Patent anmelden könnte man von allen, die diese Technologie einsetzen Lizenzgebühren verlangen. Damit währe es aber wieder für Leute in der 3. Welt nicht erschwinglich und man hätte sein Problem nicht gelöst. Das währe z.B. ein Fall, bei dem das System der Patente zwar anwendbar, aber nicht sinnvoll oder erwünscht ist.

Hier besteht die Belohnung bzw. Entschädigung für den Aufwand und die Kosten der Entwicklung nicht aus wirtschaftlichem Gewinn sondern aus ideellen Werten. Man hat vielleicht das Gefühl, etwas Gutes getan zu haben oder jemanden geholfen zu haben. Evt. ist es auch Belohnung genug, etwas in einem größeren Bild zum besseren verändert zu haben.

Das mag sich jetzt etwas banal oder weltfremd anhören, allerdings nur, weil man es im Zusammenhang mit Entwicklung oder Technologie selten kennt. In anderen Bereichen treiben solche Wertevorstellungen und Motivationen z.B. ehrenamtliche Helfer an. Wichtige Teile der Gesellschaft währen ohne diese Motivation bereits längst kollabiert (z.B. das Gesundheitssystem), da eine wirtschaftliche Denkweise hier nicht unbedingt zu gewünschten oder akzeptablen Zuständen führt.

Software

Der obere Gedanke ist zwar universell für viele Bereiche der Entwicklung (Raumfahrt, Mechanik, Medizin, usw.), aber jeder Bereich hat so seine Besonderheiten. Als Programmierer interessiert mich persönlich natürlich die Entwicklung von Software, also gehe ich hier auf diesen Gedanken etwas weiter ein. Dafür hab ich mir zunächst einmal überlegt, wie die Entwicklungsschritte bei Software aussehen könnten:

  • Grundlagenforschung: Entwicklung von Algorithmen, Datenformaten (z.B. für Video) oder anderen benötigten Systemen (z.B. DRM).
  • Produktforschung: Welche Probleme hat ein Benutzer und wie sollte die Software aussehen, die diese Probleme löst?
  • Produkt entwickeln: Konzeption, Programmierung, Testen, usw.
  • Produkt vermarkten: Bekanntmachen der Software und aufzeigen, warum sie die entsprechenden Probleme gut löst. Zudem die Verteilung der Software an die Nutzer.

Nach all diesen Schritten kann eine Firma schließlich die Software bzw. die Nutzungsrechte an der Software (Lizenzen) verkaufen. Zudem könnte sie Patente für entwickelte Technologien anmelden, beispielsweise für einen guten Algorithmus zur Datenkompression. Es ist auch hier fair, dass die Firma den Aufwand in irgendeiner Form wieder hereinwirtschaften kann.

Allerdings gibt es hier Besonderheiten, die die Situation etwas ungewöhnlicher machen. Wie aufwändig ist die Entwicklung von Software?

  • Man braucht die Hardware, auf der die Software laufen soll. Meist reicht hierfür ein PC, der nicht mehr als ein paar hundert Euro kostet. Es werden keine großen Labore benötigt, genauso wenig wie teure Maschinen.
  • Zu diesen anfänglichen Kosten kommen dann vereinfacht gesehen noch die Lebenshaltungskosten hinzu und man kann theoretisch unbegrenzt Software entwickeln.
  • Da die Verteilung von Software über das Internet geschehen kann, fallen hierfür auch nicht zwangsläufig weiteren Kosten an. Beispiel hierfür sind z.B. die Paket-Systeme diverser Linux-Distributionen.

Das ist eine drastisch andere Situation als in Bereichen, in denen jahrelange, aufwendige und teure Forschung oder sehr aufwendige Ausrüstung nötig ist (z.B. Medizin oder Maschinenbau). Diese geringen Kosten haben dazu geführt, dass viel Privatpersonen Software entwickeln. Nicht aus wirtschaftlichem Interesse, sondern auf Grund ihrer ideellen Werte und Motivation. Sie erhalten dadurch kein Geld, aber dafür Spaß, Erfahrung, Verantwortung und Selbstverwirklichung.

Durch diese besonderen Bedingungen teilen sich nun das wirtschaftlich orientierte Entwicklungssystem und private Entwicklungen den gleichen Bereich. Im wirtschaftlich orientierten System nutzt man Patente um für wirtschaftliche Fairness zu sorgen, bei privaten Entwicklungen sorgen spezielle Lizenzen dafür, dass ideelle Werte (z.B. Name des Autors, Anerkennung) geschützt werden (z.B. Creative Commons Lizenz, GNU General Public License oder die MIT Lizenz.

Zwei Fische in einem Teich

Man kann glaube ich bereits ahnen, dass diese Situation etwas Konfliktpotential birgt. Auf der einen Seite wirtschaftliche Entwicklungen, in deren Verlauf Grundtechnologien und Ideen patentiert werden. Auf der anderen Seite Unmengen von “Hobbyentwicklern”, die ihre Ideen und Entwicklungen wie Kochrezepte frei untereinander austauschen, verändern und weiterentwickeln. Natürlich ist die Welt auch hier nicht nur schwarz-weiß und es gibt viele Mischformen (z.B. Firmen, die von “Hobbyentwicklern” gegründet wurden), aber ein Problem besteht: was passiert, wenn das Patent für eine Idee angemeldet wird?

Durch die hohe Anzahl an “Hobbyentwicklern” ist die Wahrscheinlichkeit hoch, dass diese Idee schon einige Leute hatten. Waren diese einfach nur “dumm”, weil sie für ihre Idee kein Patent angemeldet haben? Wohl kaum, denn warum sollten sie das überhaupt? Als “Hobbyentwickler” hat man nicht unbedingt Interesse daran, aus seinen Ideen wirtschaftlichen Profit zu ziehen, denn die treibende Motivation ist eine ganz andere: Anerkennung, Spaß, Erfahrung, das Gefühl etwas gut gemacht zu haben, usw.

Nun währen durch das bestehende Patent aber sämtliche “Hobbyentwickler” gezwungen, Gebühren für etwas zu zahlen, von desen Entwicklung sie nicht profitieren, auf dem sie nicht aufbauen. Entweder wurden diese Probleme längst auf eigene Weise gelöst oder man löst sie eh anders (ja, man erfindet das Rad immer wieder neue, weil es Spaß macht). Noch verzwickter wird die Lage, wenn man nicht weiß, dass eine Idee bereits patentiert ist. Man stelle sich dazu ein Beispiel vor:

Man entwickelt ein Programm zum hören von Hörbüchern und dazu noch ein passendes Dateiformat für Hörbücher um auf der Festplatte für Ordnung zu sorgen. Man ist stolz auf sich, weil man einige Probleme gut gelöst hat (Ordnung auf der Festplatte, nie mehr aufschreiben, wo man aufgehört hat zu “lesen”, usw.). Zudem hat es Spaß gemacht und man hat Erfahrung gesammelt. Man hatte ein Problem und hat es ohne großen finanziellen Aufwand gelöst. Andere Leute finden das Programm auch gut und dadurch verbreitet es sich im Internet. Nun hatte ein Firma mit findiger Rechtsabteilung allerdings schon die Idee, ein Hörbuch in einer Datei zu speichern, und hat vorsorglich dafür das Patent angemeldet. Darauf hin wird man verklagt, weil man dieses Patent verletzt, also die Idee genutzt hat, ohne Geld dafür zu bezahlen. Für einen “Hobbyentwickler” kann sich sowas durchaus zu einer ernsthaften Existenzbedrohung entwickeln. Alles nur, weil man ein Problem gut gelöst hat und anderen Menschen damit geholfen hat.

Dabei werden Patente in diesem Szenario nicht mal in ihrem Sinne eingesetzt. Weder war der wirtschaftliche Aufwand für die Entwicklung der patentierten “Technologie” groß, noch hat der “Hobbyentwickler” von diesem Aufwand profitiert. Das Patent hat hier also nicht die wirtschaftliche Fairness sicher gestellt, sondern wurde einfach nur für wirtschaftliche Ziele missbraucht: Geld oder Marktbeherrschung.

Was jetzt?

Persönlich richte ich mich nach folgendem: Jedes Werkzeug wurde aus einem bestimmten Zweck und mit einem bestimmten Sinn erschaffen. Deshalb sollte man es in erster Linie in diesem Sinne einsetzen und diesen Sinn auch achten. Diese Logik wende ich auf viele Dinge im Leben an und so auch auf Patente. Daher vertrete ich die Meinung, dass man sie nur einsetzen sollte, um die wirtschaftliche Fairness zu garantieren.

Nun ist die Wirtschaft selbst aber auch nur ein Werkzeug, das entwickelt wurde, um der Menschheit zu dienen und das Zusammenleben großer Gruppen möglichst gerecht und ohne Blutvergießen zu ermöglichen. Das funktioniert zwar oft recht gut, aber die wirtschaftliche Denkweise passt nun mal nicht zu allen Situationen oder Tätigkeiten im Leben. Wenn sich ein System entwickelt hat, dass auf ideellen Werten basiert (wie z.B. die Umgebung der “Hobbyentwickler”), dann ist das finde ich ein gutes Zeichen. Menschen haben sich so entwickelt, dass ihre wirtschaftlichen Interessen nicht mehr ihr kleinster gemeinsamer Nenner sind. Sie können auch anders zusammen leben, Probleme lösen und die Menschheit weiter voran bringen. Denn wenn sich Menschen mit gegenseitiger Achtung und Respekt entgegentreten ist das meiner Meinung nach auf jeden Fall der Währung des Geldes vorzuziehen. Das funktioniert sicher nicht immer und jeder, der der Geschichte und Entwicklung der Menschheit etwas Interesse entgegen bringt, weiß das hoffentlich (z.B. kalter Krieg). Wenn es allerdings in speziellen Bereichen funktioniert, sollte man es respektieren.

Ich bin ehrlich gesagt manchmal enttäuscht darüber, dass Personen nicht mehr außerhalb des wirtschaftlichen Systems denken können oder das zumindest nicht zu erkennen geben. Letzten Endes geht es im Leben ja nicht um Profit oder Geld, sondern vor allem um eines: Menschen.

Schlusswort

Das alles sind ein paar meiner Gedanken zu einem Thema, das speziell für Programmierer etwas heikel ist. Wenn jemand denkt, dass das alles nur totaler Schwachsinn ist und ich keine Ahnung von der Welt habe, ist das ok. Es gibt so viele Meinungen zu diesem Thema, wie es Menschen gibt. Schön währe es aber, wenn du dann schreiben könntest, warum und wo meine Gedanken in die falsche Richtung driften. Ich habe nur ein paar Jahre Erfahrung und kann nur aus diesen Erfahrungen schöpfen. Zudem ist das hier keine wissenschaftliche Arbeit und auch wenn ich mir Mühe gegeben haben, Situationen objektiv darzustellen, sind es einfach nur Gedanken.

Falls es doch jemand bis hier her geschafft hat und ich jemanden zum Denken angeregt hab: Hut ab, ich weiß nicht, ob ich mich selbst solange ertragen hätte. Ich habe ein paar Gedanken der Übersichtlichkeit halber weg gelassen, aber wenn es jemanden interessiert lohne es sich vielleicht, darüber nachzudenken:

  • Welche Auswirkungen haben Patente in der Medizin?
  • Wann sind ideelle und wann materielle (wirtschaftliche) Werte wichtiger?
  • Wie beeinflussen Patente den Fortschritt der Menschheit als Ganzes?

Abgelegt in: Programmieren, Sonstiges, Gedanken | Kommentare ansehen und hinterlassen

locator.rb:91:in `add’: wrong number of arguments

Vom 19. September 2008

This post is about a Ruby on Rails problem that troubled me some time now. More specifically it’s about Rails’ gem dependencies which somehow do not work on Ubuntu 8.04. No matter which gem I added to the gem list in environment.rb, Rails raised a strange error as soon as the gem was installed:

/usr/lib/ruby/gems/1.8/gems/rails-2.1.0/lib/rails/plugin/locator.rb:91:in `add': wrong number of arguments (2 for 1) (ArgumentError)
    from /usr/lib/ruby/gems/1.8/gems/rails-2.1.0/lib/rails/plugin/locator.rb:91:in `plugins'
    from /usr/lib/ruby/gems/1.8/gems/rails-2.1.0/lib/rails/plugin/loader.rb:63:in `locate_plugins'
...

After searching around a bit I found the Rails ticket #293 at Lighthouse. The last post describes the error above and luckily explains the solution.

The Rubygem files are usually stored at /usr/local/lib/site_ruby/1.8. These are the up to date source files for Rubygems. I installed this Rubygems version from source but somehow an older version of Rubygems found it’s way into the /usr/lib/ruby/1.8 directory. Now Rails used the obsolete Rubygems stuff from there which caused the error.

The solution

After deleting the /usr/lib/ruby/1.8/rubygems directory and the /usr/lib/ruby/1.8/rubygems.rb file everything went fine. Rails gem dependencies up and working. :)

If someone knows which deb packet contains these obsolete Rubygem files, please let me know or file a bug report at Luncepad.

Thanks to Dusty Doris for hunting down this bug and pointing out the solution. I hope this post will make the search a bit easier for people with the same problem.

Abgelegt in: Programmieren | Kommentare ansehen und hinterlassen (2)

Modern Ambience design prototype

Vom 25. Mai 2008

This is just another “I’m sick of practicing and try to chill out with web design” post. But this time there is even more to look at and play around with: the Modern Ambience design prototype.

This is the current version of the design prototype I was working on for the last few days. I’ve also showed a screen shot of it in the previous blog entry but this time it’s the real stuff. HTML, CSS and JavaScript.

However I publish this prototype here for several reasons:

Font appearance on Ubuntu, Windows and Mac

On Ubuntu DejaVu Sans is the default font. Primary because it’s the default font of GNOME (or at least Ubuntu) and looks quite good for small and large text (not completely perfect though). It simply is clearly readable and has a good balance between positive and negative space. On Windows however there is no real equivalent for it but Verdana seems to fit for medium sized or large text. However it’s to wide for small text. Therefore the prototype uses Arial for small text. I don’t really like this combination and I’m concerned that it looks kind of strange.

Another candidate to solve this problem is Trebuchet MS. I just found out that this font is installed on Windows and MacOS X by default but I haven’t had the time to try it yet.

So if someone from the Windows world is looking at the design, please tell me if the fonts look strange compared to usual websites.

MacOS X

I still have no proper possibility of testing a website on MacOS X. Since I’m especially interested in the font rendering (or the use of fall back fonts) a screen shot would be perfect. Theoretically MacOS X should use the same fall back fonts as Windows (Verdana and Arial) but I have absolutely no Idea how these will look like on OS X.

Other aspects

There are several smaller new things I tried with that design prototype.

  • Style switcher: The most interesting experiment. I think it improved a lot compared to the switcher of the current design. I’m planning to make a short page about the different designs (“Forest”, “Mountain” and “Sunset”) to better explain their history and give better credit to the people who did the great photos. Therefore the extra “about” links. I might also add a new design…
  • Figure styles: Another experiment. These styles for images and other stuff are heavily inspired by the GNOME Wiki. It seems to be a good and readable way to add a small caption to an image.
  • Breadcrumbs navigation: The design prototype also includes a breadcrumbs navigation in the title area. It’s not the usual spot (between header and content) but I hope it’s usable. It should make the navigation easier.
  • Silk icons: I’ve added some icons from the Silk icon set (comments, tags and search). However I don’t know how well these will fit into the changing color scheme of the website. Right now the fit quite well but I’ll have to wait and see how ell they’ll fit into the other color schemes.
  • PNG transparency: This prototype makes heavy use of PNG24 alpha transparency. Every drop shadow is done with those PNGs. IE 6 can not render them correctly but this time the page only have to be usable with IE 6. It does not need to look really good. Some special PNG files without drop shadows should do the trick for IE 6.

I’ll abandon IE 5 and 5.5 compatibility for this prototype. Since this is not a commercial website made for a specific audience it’s good enough if it works with IE 6 and looks good with IE 7, Firefox and Opera. I would also like to properly support Safari (for Mac) but I have no real idea on how to do this. Anyway, the prototype is not “IE ready” yet but much to my surprise I just noticed three errors with IE 6 (missing PNG transparency, a float bug with the navigation and a margin bug affecting the style switcher).

In the greater picture this project is more than just some chilling out from practicing. I want to test some new technologies I want to use for the upcoming ZGR redesign: cross platform font appearance, some content styles, the style switcher, Maruku for posts and wiki pages, proper image and file uploading, tags and heavy news feed support. Since the ZGR redesign will be a pretty big project I can not test these technologies there (it would take to much time). It’s easier to throw away a bad implementation on a small scale project than on an large scale project where everything connects to everything.

Opinions and critics (negative as well as positive) are very welcome. Feel free to write one or two sentences (or even more) about the design prototype.

Abgelegt in: Programmieren, Projekte | Kommentare ansehen und hinterlassen

Cooles Umfrage-Tool

Vom 20. Januar 2008

Sven Fuchs, ein Programmierer den ich in der Ruby on Rails I18N Gruppe kennen gelernt hab, hat vor ein paar Tagen eine neue Website veröffentlicht: folksr.de

Im Prinzip ist es eine Website, auf der man über diverse Themen abstimmen kann. Simpel und einfach. Jedoch geschieht das wie auf eine Art und Weise, die ich bis jetzt nicht kannte: Man stimmt für eine Option, worauf hin einem folkser.de einen Link präsentiert, den man in seinem Blog rein schreiben kann. Danach gibt man folkser.de wiederum den Link zu dem Blog-Beitrag und er zählt die Stimme.

Persönlich beeindruckt mich die Idee, da sie wirklich für die verteilte Welt der Blogs gemacht ist. Passend dazu kann man die Ergebnisse einer Umfrage schön als Grafik überall einbinden.

Um das ganze zu Demonstrieren hat Sven eine Umfrage gestartet, die unter Programmierern einen Glaubenskrieg gleich kommt: Was ist euer liebster Texteditor?

Auf diese wunderbare Glaubensfrage hab ich persönlich sogar zwei Antworten:

  • GEdit, der GNOME Text Editor, für größere Projekte, da er alles hat, was ich brauche: Syntaxhervorhebung, einen integrierten Dateisystembaum und einige wunderbare Plugins. Klein, knackig und schnell.
  • Für die kleinen Aufgaben, wie z.B. mal schnell eine HTML-Datei bearbeiten (außerhab eines Projekts) bevorzuge ich allerdings nach wie vor SciTE. Ebenfalls ein kleiner Texteditor, allerdings mit einer netten Ein- und Aufklapp-Funktion von Blöcken und einer hervorragenden Syntaxhervorhebung.

Hier nun der (etwas Textmate-lastige) Überblick:

Ich war auch recht beeindruckt, TextPad in der Abstimmung zu sehen. Hat zwar noch keine Stimmen, allerdings war dieses Programm lange Jahre der Editor meiner Wahl. Naja, mit dem Umstieg auf Ruby on Rails und später auf Ubuntu Linux hat sich da einiges zum besseren verändert. :)

Ok, aber nun genug über dieses Thema und zurück zu folksr.de. Was mir persönlich als Programmierer an dem ganzen sehr gut gefällt, ist zum einen die Idee dieser “Vote-Links” aber vor allem auch deren Umsetzung. Wenn man sich z.B. mal den Vote-Link für GEdit weiter oben anschaut

<a href="http://www.gnome.org/projects/gedit/" rev="vote-for">GEdit</a>

unterscheidet der sich eigentlich nur durch das rev="vote-for" von einem normalen Link auf die GEdit Website. Wirklich gute Idee, denn so bleibt der Link als solches völlig intakt und normale Leute können ihn noch verwenden. Gefällt mir, echt gut Arbeit Sven. :)

Abgelegt in: Programmieren | Kommentare ansehen und hinterlassen

Altes Blut…

Vom 13. Oktober 2007

Der letzte Eintrag ist jetzt schon über einen Monat her und so wird es mal wieder Zeit, die großen Dinge der letzten Zeit nieder zu schreiben.

Das wohl wichtigste, dass sich seit dem letzten bzw. vorletzten Beitrag verändert hat, ist das Ende meines Zivildienstes. Schon Seite dem 11.9.07 besuche ich jetzt die BOS, also schon über einen Monat. Ich muss ehrlich sagen, dass das bei mir wieder altes Blut in Wallung gebracht hat. Zwar braucht man zwei bis drei Wochen bis man sich wieder an das ganze Lernen gewöhnt hat, aber nach fast 5 Jahren ohne wirkliche Schule ist das kein großes Wunder.

Die BOS ist zwar anstrengend, aber so langsam kommt wieder der alte “Entdeckergeist” hoch. Es gibt neue Sachen zu lernen und ich weiß zwar nicht warum, aber es ist für mich schon fast spannend zur Schule zu gehen. Besonders Mathe macht mir schon fast wieder Spaß. Es gibt zwar auch einige Fächer, bei denen ich überhaupt nicht weiß, wo ich dran bin (z.B. Deutsch), aber dafür gibt es eben auch andere, entspannende und interessante, Fächer (Englisch, Geschichte, Chemie). Momentan ist aber nach wie vor alles noch Einführungsstoff, es wird sich also erst noch zeigen, wie gut ich wirklich mit den Fächern klar komme.

Der Besuch der BOS nimmt zwar viel Zeit in Anspruch, aber ich glaube ich bin inzwischen bei meinen Projekten an einem Punkt angelangt, an dem man nicht einfach mal schnell irgend was “auf Eis” legen kann. Namentlich geht es mal wieder um das Simple Localization Projekt. Dank der Hilfe einiger Entwickler konnte ich in der letzten Woche recht viele Fehler beseitigen und ich bereite gerade die Veröffentlichung der neuen Version vor (wie oft hab ich das schon gesagt?).

Allerdings gibt es seit zwei Wochen noch ein anderes “Projekt”, das sich einen festen Platz in meiner Freizeit erkämpft hat. Matt Aimonetti, ein Programmierer aus den USA hat mich zu einer Diskussionsgruppe eingeladen, die das Ziel hat eine möglichst robuste Lokalisierungs-API für Ruby on Rails zu implementieren. Ich bin ihm für diese Einladung wirklich dankbar, da es für mich auch bedeutet, dass meine Arbeit an dem Simple Localization Plugin unter anderen Programmieren anerkannt wird. Die Zusammenarbeit mit den anderen Entwicklern war zwar am Anfang ungewohnt (eine englische Mailinglist und englische IRC-Besprechungen), aber ich bin wirklich erstaunt darüber die produktiv, gelassen und offen es vorangeht. Ich habe in meiner bisherigen Berufslaufbahn noch keine so produktiven Besprechungen erlebt. Ein weitere positiver Effekt ist, dass sich meine Englisch-Kenntnisse dadurch auch verbessern.

Naja, das war es erst mal so weit. Ich probiere jetzt erst mal die neue Unreal Tournament 3 Beta Demo aus. Bis auf bald.

Abgelegt in: Programmieren, Sonstiges, Projekte | Kommentare ansehen und hinterlassen

Rails FCGID dispatcher finder

Vom 7. Juli 2007

Another English post because this might come in handy for some people out there. Some Rails programmers out there may know the problem:

When updating your production server you’ve just run svn update to update the source of your Rails application. Because of cached code it is also necessary to restart the dispatchers of the Rails application.

Well, I have to admit, until now I simply restarted the Apache2 webserver or killed all dispatcher processes (killall dispatch.fcgi). However since there are quite a few Rails apps running on my server this always killed the other dispatchers, too. This isn’t really a problem but more of “unnecessary brute force”. The perfect solution would be to find the exact dispatcher of the Rails application I want to update and just kill this one.

But how? ps -A | grep dispatch.fcgi only prints out the PIDs of the dispatchers but not the paths. To work around this and I created a little script: find_dispatcher.rb

It analyses the Apache log file and shows the data of every log entry where an FCGID dispatcher was started.

ruby find_dispatcher.rb
1722    Fri Jul 06 18:59:01 2007  /path/to/project/a/public/dispatch.fcgi
1755    Fri Jul 06 19:11:52 2007  /path/to/project/b/public/dispatch.fcgi
4615    Sat Jul 07 14:49:14 2007  /path/to/project/c/public/dispatch.fcgi
4931    Sat Jul 07 16:20:30 2007  /path/to/project/d/public/dispatch.fcgi

It’s possible to specify a filter to just see the dispatchers created for a single project:

ruby find_dispatcher.rb -f project/b
1755    Fri Jul 06 19:11:52 2007  /path/to/project/b/public/dispatch.fcgi

To combine this script with others the --only-last-pid (or -p) option just prints out the last PID:

ruby find_dispatcher.rb -f project/b -p
1755

By default the script searches the /var/log/apache2/error.log file for matching entries. You can specify your own log file with the --log (-l for short) option.

ruby find_dispatcher.rb --log /my/own/log/file.log

This is it. --help will show an overview of all options. You can get the script directly out of my SubVersion repository: find_dispatcher.rb. Much fun with it.

UPDATE: I just found out that ps -Af also prints the path to the processes. Together with grep it’s no deal to get the PID of a specific dispatcher (eg. ps -Af | grep collaboa). This makes the script a bit useless. However it can be still interesting to know when your dispatchers where started.

At least it was an exciting programming practice. :)

Abgelegt in: Programmieren, Projekte, Helion | Kommentare ansehen und hinterlassen

Rails-Konferenz 2007

Vom 25. Juni 2007

Konferenzen sind eine feine Sache. Erst recht, wenn es um Rails geht. Dieses Jahr war ich mal wieder auf der Rails-Konferenz zu besuch und es hat sich wirklich gelohnt. Es gab, wie letztes Jahr auch, eine Reihe sehr guter Vorträge und man konnte sich auch gut mit anderen Entwicklern austauschen. An dieser Stelle ein sehr großes Lob an das Organisationsteam der Konferenz, das durchweg sehr gute Arbeit geleistet hat.

Ok, aber fangen wir am Anfang an. Glücklicherweise hab ich am Donnerstag vor der Konferenz auch Urlaub bekommen um die ganzen Vorbereitungen zu erledigen. Für viel Freude hat natürlich mal wieder die Bahn gesorgt. Eigentlich wollte ich mir die Fahrkarte (Treuchtlingen – Frankfurt, hin und zurück) im Internet kaufen. Dort gibt es Frühbucherrabat und so bin ich für die Fahrkarte auf ca. 55 € (statt ca. 100 €) gekommen. Allerdings hat man ja als Zivi auch gewisse Privilegien und dazu gehören auch vergünstigte Fahrpreise bei der Bahn. Also geht man zum nächsten Schalter und probiert dort, eine Karte zu kaufen. Der nächste Schalter ist in Nördlingen, dachte ich zumindest. “Wegen Geschäftsaufgabe geschlossen”... ok, super. Also weiter zum nächsten Schalter, nach Donauwörth. Dort gab es dann auch eine Karte mit Zivirabat, aber halt ohne Frühbucherrabat und so hat mich die Fahrkarte 68 € gekostet.

Alle Vorbereitungen fertig, los gehts. Abfahrt Freitag 3:00 Uhr früh, mit dem Auto nach Treuchtlingen, dort 4:17 Uhr mit dem Zug weiter. Allerdings hab ich dank einer hartnäckigen Mücke nur 2 Std. gedöst und nicht richtig geschlafen. Naja, ging dennoch recht gut, vor allem wenn man während der Zugfahrt programmieren kann oder eben ein gutes Buch von Terry Pratchett dabei hat. Interessant wurde es dann in Frankfurt selbst: mit einem Stadtplan von Google Maps 3 km durch die Innenstadt gelatscht. Leider berücksichtigt Google Maps die Hausnummern nicht genau und deshalb musste ich mich die letzte halbe Stunde durchfragen.

Letzten Endes bin ich dann doch irgendwie bei der Konferenz angekommen. Witzig war dieses Jahr, dass vor den Vortragssaal ein PHP- und ein Java-Magazin (Sponsoren) ihre Stände aufgebaut haben. Ausgerechnet auf einer Rails-Konferenz, dort wo die Leute sind, die von diesen Sprachen ehr die Nase voll haben. Allerdings kam dadurch garantiert bei dem einen oder anderen etwas Nostalgie auf, zumindest bei mir.

Die Vorträge waren eigentlich alle recht gut. Bei ein hatte ich jedoch das Gefühl, dass es zu sehr Vortrag und zu wenig Stimmung war. Sowas läst sich aber immer leicht sagen, wenn man nicht selbst da vorne steht und ich will den Leuten dass dort keines Falls vorwerfen. Es gehört eine Menge dazu, sowas erst mal zu machen.

Den Anfang machte die Keynote über REST, wobei ich nach wie vor nicht behaupten kann, dass ich den Kern verstanden hab. Für große Unternehmensstrukturen, ok, aber für kleine Webseiten… weiß nicht so recht.

“Prosa, Lyrik, Ruby und Rails” war ein recht netter Vortrag. Hat vor allem untermauert, dass lesbarer Quelltext die Kosten senkt und die Produktivität steigert. Sehr interessant fand ich “Caching in Rails”. Ich kannte zwar schon etwas aus diversen Rails Büchern, aber die Erfahrungsberichte in dem Vortrag werde ich mir zu Herzen nehmen (z.B. nur einen Domainnamen verwenden).

Richtig cool wurde es dann am Nachmittag. “Offline arbeiten? Leben und wirken wie im letzten Jahrtausend” hat (zumindest Subjektiv) einen sehr guten Überblick über Joyent Slingshot, einem Framework, um Railsanwendungen auch offline betreiben zu können. Für mich ist die Lehre aus diesem Vortrag, dass ich solche Projekte erst mal noch nicht probieren werde. Wie hat es Jens-Christian Fischer so schön genannt: “proof of concept”. Der Vortrag über “Ferret”, ein Plugin für die Volltextsuche war ebenfalls sehr informativ. Zudem plane ich, dieses Plugin in der kommenden ZGR-Seite zu verwenden und da ist es sehr praktisch zu wissen, dass man einen Index-Server für mehrere Rails-Dispatcher braucht. Es wurde jedoch noch besser, denn bei “GoogleMaps Anwendungen mit Ruby on Rails” kam bei mir richtig die Lust auf, sowas sofort zu bauen. Plugins wie GeoKit machen sowas echt einfach und zu dem kann man dadurch für die ZGR-Seite einen echten Mehrwert rausarbeiten.

Soweit so gut, schon viel nette Sachen gelernt, aber zum Schluss hin wurde es noch besser. Ich freu mich schon richtig drauf, wenn “Rails Conditions” veröffentlicht wird. Das ist ein Plugin für Rails, um die Verarbeitungslogik einfacher abzubilden bzw. zu schreiben. Hab sowas früher selbst mal probiert, aber das ist in keiner Weise so schön und simpel geworden, wie Rails Conditions. Hut ab vor Norman Timmler, der damit meiner Meinung nach wirklich was geschafft hat.

Alles in allem war die Konferenz wirklich das Geld wert. Am Schluss gab es noch ein wenig zum Aufräumen, aber im Gegensatz zu letztem Jahr waren die Boxen sehr viel leichter, es gab also nicht so viel zu schleppen. Leider war es nach der Konferenz nicht mehr so schön, wie letztes Jahr, da sehr viele schon recht früh weg mussten. Hab mich dann letzten Endes 2 Std. bevor mein Zug gefahren (22:18) ist auf dem Weg gemacht und hab mir noch eine Stunde den Bahnhof zu Gemüte geführt. Irgend wie sehen alle Bahnhöfe in Großstädten gleich aus…

Alles in allem bin ich Samstag ca. 3 Uhr ins Bett gefallen. 25 Stunden ohne Schlaf sind zwar hart, aber waren es dafür durchaus wert.

Abgelegt in: Programmieren | Kommentare ansehen und hinterlassen (3)

Options for Rubys to_yaml method…

Vom 20. Juni 2007

... and how to waste two days. This post is meant for all developers having the same kind of problem (searching for options of the to_yaml method) and because of that it’s written in English.

While programming on the Simple Localization plugin for Ruby on Rails, a mail exchange with Roman Gonzalez produced a nice idea: if a user accesses a key of the language file (a file containing YAML code) and that key does not exist it should be automatically added to the language file.

So far so good. Loading YAML is easy:

YAML.load_file ...

And saving YAML isn’t hard as well:

File.open(target_file, 'wb') do |file|
  YAML.dump data, file
end

However trying to change the way the data is converted to YAML… is a waste of time.

Why care? Well, because the language files of the plugin are written by hand and therefore it is important to keep the YAML code as clean as possible. Let’s demonstrate this. Here is a snippet of the German language file:

dates:
  abbr_monthnames: [Jan, Feb, Mär, Apr, Mai, Jun, Jul, Aug, Sep, Oct, Nov, Dez]

After loading it to Ruby and dumping it as YAML again it looks like this:

---
dates:
  abbr_monthnames: 
  - Jan
  - Feb
  - "M\xC3\xA4r" 
  - Apr
  - Mai
  - Jun
  - Jul
  - Aug
  - Sep
  - Oct
  - Nov
  - Dez

I wouldn’t say it screws up the language file, the YAML emitter (the thing constructing the YAML code) does every thing right (the YAML code is working). However the keys are not ordered and you can not be sure to find a key where you left it, after new YAML code is saved to a language file. Special characters (like German “umlauts”) are escaped because the generated YAML code is encoded in plain old ASCII. Most readers will also notice that the generated YAML code does not use inline collections (eg. [a, b, c, ...]) and does everything in usual ordinary sequences (- a\n- b\n- c). The final new part added by the emitter is the document separator (---).

Please, don’t get me wrong. There’s all right with the data stored in the YAML code, only the presentation isn’t as clear as it could be. The Simple Localization plugin heavily depends on hand written YAML files (as a place to store the localization information) and I decided to use YAML for this because it’s a very powerful and more important a simple way to write information. It makes writing the language files almost painless, sometimes even fun. This is a very important part of the plugin if not the core itself. But all the things that happen to the YAML file when it’s loaded and saved back makes it very annoying to work with the language files.

So, what do to? Usually Ruby libraries offer all kinds of options to manipulate their behavior. A short look at Rubys core docs for the to_yaml method looks promising: to_yaml( opts = {} ). So there’s an opts parameter, probably a hash witch makes it possible to alter the way the YAML code is generated. A few searches later the documentation of the yaml4r project shows the desired information: The Options Hash.

Nice, every thing we need. At least until you try it out. Options are fine but they are useless if they don’t change anything. I tried to specify the options to every YAML object that is involved in generating YAML code. A bit later I found a mail at least mentioning this:

Q3.

The following options are defined in ‘yaml/constants.rb’:

:Indent => 2, :UseHeader => false, :UseVersion => false, :Version => ‘1.0’, :SortKeys => false, :AnchorFormat => ‘id%03d’, :ExplicitTypes => false, :WidthType => ‘absolute’, :BestWidth => 80, :UseBlock => false, :UseFold => false, :Encoding => :None These options are intended to be used witch Object#to_yaml(), YAML::Stream.new(), and YAML::Store.new(). But all except :Indent, :SortKeys, :ExplicitTypes and :UseBlock are not available when I tried on Ruby 1.8.2.

What options are available in Ruby 1.8.2 and 1.8.3?

Most of these constants are now singleton methods in Ruby. I need to update documentation and remove the constants from yaml/constants.rb.

Ok, fired up irb and searched everything YAML-like for singelton methods. No go. Nothing there, too.

After more than a day searching for the YAML options enough was enough. I started to read the source files in Rubys yaml directory. A bit of reading later I found out that Ruby uses the Syck library as a backend for it’s YAML support. Syck grew out of the pure Ruby YAML library used before the days YAML was added to Rubys core. Some files in the yaml directory are nothing else than old unused files left there for backward compatibility. The main work is done by the pure C Syck library and a wrapper used to talk to Ruby.

Now I hoped that the pure Ruby Interface just uses an outdated way to pass the options to the Syck objects. However analyzing Ruby and C code for a few hours (I’ve never written a C extension for Ruby) only brought this:

The wrapper around the Syck objects does not pass the options at all. It just stores them in an instance variable and leaves them there.

I ended up in the ext/syck/rubyext.c source file of the current Ruby trunk in the syck_emitter_reset function (YAML::Syck::Emitter#initialize in Ruby). It does get the options but does not use them to set options to the Syck emitter object. A list of supported options can be found in the syck_new_emitter function in ext/syck/emitter.c.

Since the Syck functions can only be accessed via C code this could only be fixed in C. Maybe I’ll create a patch for Ruby to fix this but this will not solve my problems with the Simple Localization plugin (at least not in time). Maybe Ruby Inline can help here but for now I’ll focus on other features still on the plugins todo list.

I just wrote all this down to spare others from searching for this for to long. Please notice that I’m not experience in reading C extensions for Ruby and therefore I may have missed a thing or two. If there is a way for this to work I’ve overlooked please let me know.

At the end I still like Ruby and YAML. Rubys support for YAML is pretty impressive neverless. Because of Rubys and YAMLs powerful natures the little details can just get very tricky sometimes…

Abgelegt in: Programmieren, Projekte | Kommentare ansehen und hinterlassen (7)

Firefox und seine “Dynamischen Lesezeichen”

Vom 11. Juni 2007

Dieses Feature von Firefox hat mich die letzten 2 Stunden gekostet. Ok, mindestens eine ¾ Stunde ist auf die immer mal wieder zusammenbrechende Internetverbindung gegangen, aber das ist eine andere Geschichte.

Jedenfalls hat mich vor ein paar Stunden mal wieder ein französischer Entwickler wegen dem Simple Localization Projekt angeschrieben. Bei dem Gespräch hat er auch erwähnt, dass der Newsfeed des Projekts nicht gehen würde. Geschockt hab ich gleich mal ein paar Validatoren über den armen Feed drüber prügeln lassen. Dabei kam immer nur ein raus: alles ok. Einer hat noch einen falschen Content-Type header angemerkt (application/xml statt application/atom+xml), aber das war schnell korrigiert. Hab den Feed schnell mit Opera getestet und da hat auch alles hingehauen. Später sind wir drauf gekommen, dass er Firefoxs “Dynamische Lesezeichen” verwendet. Habs getestet und siehe da, bei mir kam auch nur ein “leeres” Lesezeichen.

Persönlich stehe ich ja nicht so auf Firefox- oder Opera-Fehler. Leider sind die zu selten und deshalb bei weitem nicht so gut dokumentiert wie die vom IE 5 oder 6. Hab mich dennoch durch das weite Netz gequält… mit einer Verbindung, die alle 5 Minuten für 5 weitere Minuten tot war.

Irgend wann waren mir dann die 2 minütigen Ladezeiten für eine Website zu doof und so hab ich angefangen, die Fehlerursache auf lokalen Servern selbst zu jagen. Hab mir nen anderen funktionierenden Atom 1.0 Newsfeed geschnappt und jedes Element verglichen und rumprobiert.

Irgend wann bin ich drauf gekommen, dass der fehlerhafte Newsfeed seine Einträge nicht mit einem Link zur Website des Elements (also des Blogeintrags oder des Kommentars) versieht. Um genau zu sein das link Element mit dem rel="alternate" Attribut. Dieses Element enthält die Adresse der Website, die einem den Eintrag des Newsfeeds anzeigt.

Die dynamischen Lesezeichen in Firefox brauchen ja ein Ziel, das aufgerufen wird, sobald man auf das Lesezeichen klickt. Der fehlerhafte Newsfeed hat so ein Ziel nicht definiert, also hat Firefox die Einträge nicht angezeigt. Im nachhinein irgend wie logisch… hat mich dennoch viel Zeit gekostet. Man lernt eben nie aus.

Abgelegt in: Programmieren, Browser | Kommentare ansehen und hinterlassen (2)

Projekte

Vom 29. April 2007

Ich hab heute mit einem guten Freund von mir (Florian Seefried) mal wieder ein kleines Telefongespräch geführt. Unterm Strich haben wir eine ganze Menge über momentane und zukünftige Projekte geredet. Aus diesem Grund findet man jetzt auf dieser Seite hier eine Liste meiner aktuellen Projekte (gleich rechts unter den Hauptlinks).

Das Simple Localization Projekt verbraucht momentan wohl den größten Teil meiner Freizeit. Allerdings hab ich bei den Projekt bis jetzt so viel gelernt, dass ich keine Sekunde bereue, die ich investiert hab. Zu dem melden sich inzwischen einige Leute und helfen mir bei der Entwicklung. Unter anderem hat mir Mark Kocera eine niederländische Sprachdatei geschickt und Sylvain OBEGI erstellt gerade eine französische.

Unter all den Projekten der letzten paar Monate ist dieses Plugin wohl das Projekt mit dem größten “Spaß”-Faktor. Es motiviert zumindest mich ungemein, wenn man merkt, dass das Plugin von anderen genutzt wird und dass diese Leute dankbar dafür sind. Noch dazu enthält das Plugin einige Konzepte und Lösungen mit denen selbst ich als Perfektionist sehr zufrieden bin. Es verdient das “Simple” im Namen wirklich… wobei ich manchmal auch versucht bin, ein “genial” hinzuzufügen. :)

Table Navigation wiederum war ein kleiner Besuch in der Welt von JavaScript. Im besonderen in der Welt von jQuery und eigentlich mein erstes richtiges Projekt in JavaScript. Selbst bei diesem kleinen Ding haben sich einige gemeldet und das Plugin hat sich recht gut entwickelt. Die Idee dazu hatte Florian Seefried und eigentlich war die erste Version nicht mehr als ein paar schnell zusammengeschriebe Codezeilen. Ich hätte nie gedacht, dass sich aus so einem kleinen “Quick’n Dirty” Skript so ein Plugin entwickeln könnte.

Ok, das war ein kleiner Überblick über meine aktuellen Projekt. Wenn euch das ein oder andere davon interessiert, schaut einfach mal auf den Projektseiten vorbei.

Abgelegt in: Programmieren, Projekte | Kommentare ansehen und hinterlassen (10)

Rails ist groß...

Vom 28. April 2007

... naja, eigentlich nicht. Zumindest nicht, wenn man eine normale Railsanwendung erstellt. Denn da wird dann die Systembibliothek bzw. das Gem von Rails benutzt. Der Quelltext von Rails ist dann also nicht in jeder Railsanwendung enthalten, sondern liegt irgend wo im System und alle Railsanwendungen verwenden diese Bibliothek.

Manchmal ist es jedoch praktisch, den gesamten Quelltext von Rails in die Anwendung zu “entpacken”, z.B. bevor man die Anwendung auf einen Server hochläd, auf dem die Systembibliothek bzw. das Gem nicht installiert ist.

Genau das hab ich mit einem kleinen Projekt (Abstimmungstool für LANs) auch mal gemacht. Heute bin ich dann durch Zufall auf die Idee gekommen, die Festplattenbelegung dieser Railsanwendung mal mit Ubuntus speziellem Tool anzuschauen:

Diagramm der Festplattenbelegung einer kleinen Railsanwendung

Musste das Bild leider etwas verkleinern, wodurch es leicht unscharf geworden ist. Alles, was im vendor-Verzeichnis (dem hellrot markierten Teil) ist, gehört hier zu Rails. Die paar kleinen Kuchenstücke zwischen 0 und 45° sind meine kleine Anwendung. Jede weitere Sphäre nach außen ist übrigens eine Ordnerebene tiefer.

Fand die Dimensionen und die Visualisierung von dem Ganzen recht gut. Wenn man sich die größten Bereiche mal etwas durch schaut, sieht man auch, dass Tests über die Hälfte des Speicherplatzes aus machen. Das merkt man auch, hatte bis jetzt noch keinen einzigen ernsthaften Rails-Bug. Kein Vergleich zu so was wie ColdFusion…

Man könnte das ganze aber auch so auslegen, dass man selbst nur noch sehr wenig Quelltext schreiben muss. Die kleine Railsanwendung besteht aus gerade mal 127 Zeilen Code (gelobt sei rake stats), der Rest sind automatisch erstellte Test, HTML-Templates, Bilder und Stylesheets. 127 Zeilen… selbst mir fällt es schwer, das zu glauben. Ich möchte gar nicht dran denken, wie viel das z.B. in PHP geworden währe.

Abgelegt in: Programmieren | Kommentare ansehen und hinterlassen

Collaboa auf Ubuntu 6.10… compiliert und läuft

Vom 17. April 2007

Die letzten zwei Tage waren zwar etwas Kommandozeilenlastig, aber dafür hat es sich gelohnt. Seit langem wollte ich mal etwas tiefer in Linux einsteigen und da manche Pakete etwas komisch aufgebaut sind vor allem auch Software selbst kompilieren.

Ok, aber nun zur eigentlichen Hauptsache. Vor einigen Einträgen hab ich schon einmal erwähnt, dass ich momentan Collaboa zum laufen bringen will. Allerdings ist die Dokumentation dieses Projektes nicht sehr gut (ok, nur ein aktiver Entwickler…) und unter Windows habe ich es ganz aufgegeben (wegen der Ruby SVN Bindings).

Gestern, oder besser gesagt heute früh, ist es mir endlich gelungen, Collaboa in Aktion zu bewundern. Leider ist das ganze etwas ausgearted… VMWare Tools, Ruby, SubVersion, SWIG und noch andere Kleinigkeiten.

Fangen wir mal an. Laufen tut das ganze unter Ubuntu 6.10 in einer Virtual Machine (VMware Server 1.0.2). Ich bewundere jedes mal die Installation von Ubuntu und man könnte sogar sagen, dass es mir Spaß macht, Ubuntu zu installieren. Auf jeden Fall ist das nach ein paar Minuten erledigt.

Da es für die Installation von Collaboa sogut wie keine Dokumentation gibt (erst recht keine deutsche) bin ich mal so irre und schreib hier alles genau nieder. Alles, also auch Ruby, SubVersion, usw.

1. Compiler einrichten

Um Software zu compilieren braucht man jemand, der die Arbeit tut. Hab keine große Lust, die Bits selbst an ihren Platz zu schieben.

sudo apt-get install build-essential

Gelobt sei apt-get und nach etwas Wartezeit ist der Compiler einsatzbereit. Jetzt können wir loslegen und Software compilieren.

2. VMware Tools installieren (optional)

Für alle armen Leute, deren Hardware zu ausgefallen oder neu für Linux ist. Hab das ganze auch ohne VMware Tools ausprobiert, also kann man diesen Schritt getrost weglassen. Die VMware Tools machen alles allerdings etwas schneller und man kann die Bildschirmauflösung nach oben drehen (bei mir 1280×1024).

Die genauen Schritte werden in dem Artikel Install VMware Tools on Ubuntu Edgy Eft erklärt, also fasse ich mich hier kurz.

Um die VMware Tools zu compilieren brauchen wir die Kernelheader:

sudo apt-get install linux-headers-`uname -r`

Im VMware Menü auf “VM” → “Install VMware Tools…” klicken. Nach ein paar Sekunden sollte dann eine CD gemounted werden, die die VMware Tools enthält. Anschließend noch ein paar Kommandos eingeben:

cp /cdrom/*.gz /tmp/
cd /tmp
tar xvzf VM*.gz
cd vmware*
sudo ./vmware-install.pl

Das VMware Tools setup fragt dann nach einigen Einstellungen. Hier einfach die Standardwerte bestätigen. Bei der Frage, ob das Modul compiliert werden soll, ebenfalls bestätigen.

VM neu starten, fertig.

3. Ruby

Zlib

Ruby bzw. Ruby Gems braucht die ZLib Bibliothek. SubVersion benutzt sie ebenfalls. Auf www.zlib.net kann man den Quelltext der neuste Version runter laden (die Dateien, die meist auf tar.gz enden). Für alle, die zu faul sind, die Seite zu überfliegen gibts auch einen direkten Link.

Dieses Archiv irgend wo hin extrahieren (hab es in mein persönliches Verzeichnis extrahiert) und in der Kommandozeile öffnen. Dort dann die drei Befehle eintippen:

./configure
make
sudo make install

Dadurch sollte Zlib compiliert und installiert werden.

ReadLine

Mehr eine Kleinigkeit, aber wenn man die Konsole von Ruby on Rails nutzen will, braucht man Readline bzw. den Quelltext. Sonst spuckt ein IRB leider eine Fehlermeldung aus.

sudo apt-get install libreadline5-dev

Ruby, endlich

Jetzt gehts ans eingemacht. Allerdings war ich erstaunt, wie einfach es eigentlich ist. Den Quelltext von ruby-lang.org runterladen. Für faule hier wieder der genaue Link zum tar.gz Archiv.

Dieses Archiv wieder entpacken, in der Kommandozeile in den entpackten Ordner wechseln und die Prozedur von Zlib wiederholen:

./configure
make
sudo make install

Diese Befehle können eine Weile dauern aber damit sollte Ruby compiliert und installiert sein. Weiter, zu etwas, dass bei Ruby nicht fehlen darf…

Ruby Gems

Die Paketverwaltung von Ruby, mit der man schnell und bequem Ruby-Software installieren kann. Die aktuellste Version von Ruby Gems kann man bei entsprechenden RubyForge-Seite runter laden.

Dieses Archiv ebenfalls entpacken und in der Komandozeile zu dem Ordner navigieren. Die Installation ist hier allerdings etwas einfacher:

sudo ruby setup.rb

Fertig. Mit Ruby Gems installieren wir später Ruby on Rails und alles, was man für Collaboa so braucht.

4. SubVersion

SWIG

Wir wollen mit Collaboa (Ruby on Rails bzw. Ruby) ja auf SubVersion zugreifen. Für diese Ruby-SubVersion-Schnittstelle brauchen wir allerdings SWIG. Es ist wichtig zu beachten, dass SubVersion momentan (v1.4.3) nur SWIG v1.3.25 unterstützt. Eine ältere oder neuere Version funktioniert leider nicht. Wenn man sich bei SourceForge etwas durchklickt findet man die richtige Version.

Dieses Archiv wie gehabt extrahieren, in der Kommandozeile hinein navigieren und die üblichen Befehle ausführen:

./configure
make
sudo make install

SubVersion

Den Quelltext findet man auf der SubVersion Homepage. Entweder in den News oder im Source Code Download Ordner. Das subversion-x.y.z.tar.gz Archiv (x, y und z stehen hier natürlich für Versionsnummern) enthält den Quelltext von SubVersion selbst. Seit SubVersion 1.4 gibt es zusätzlich auch noch ein subversion-deps-x.y.z.tar.gz Archiv, dass alle Abhängikeiten enthält. Genauere Details dazu gibt es in der Installations-Datei von SubVersion.

Entpackt zuerst den SubVersion-Quelltext irgend wo hin, z.B. in euer privates Verzeichnis (home-Verzeichnis). Dort sollte nun ein subversion-x.y.z Ordner zu finden sein, der den Quelltext von SubVersion enthält. Anschließend entpackt auch das deps-Archiv an den gleichen Zielort. Dadurch werden alle nötigen Abhängikeiten (Apache Portable Runtime, Zlib und Neon) in den SubVersion-Ordner entpackt.

Nun bemühen wir die Konsole und navigieren per Komandozeile in den subversion-x.y.z-Ordner. So in etwa:

cd subversion-1.4.3

Das Archiv entpacken und per Kommandozeile den Ordner öffnen. Wir haben ja für SubVersion bereits SWIG installiert, allerdings müssen wir SubVersion das vor dem Compilieren noch mitteilen. Sonst läst sich später die Ruby-SubVersion-Schnittstelle nicht compilieren. Deswegen fällt hier der ./configure-Befehl etwas länger aus:

./configure --with-swig=/usr/local/bin/swig
make
sudo make install

Durch die Abhängikeiten von SubVersion kann der ./configure-Befehl etwas länger rattern. Am Ende erscheint auch eine Meldung, dass Berkeley DB nicht installiert ist und deswegen nicht eingebunden wird. Diese Meldung kann man allerdings getrost ignorieren. SubVersion sollte nun installiert und einsatzbereit sein.

Ruby-SubVersion-Schnittstelle

Die Ruby-SubVersion-Schnittstelle (“SubVersion Ruby Bindings”) ist im SubVersion Quelltext enthalten. Also schauen wir noch mal in das SubVersion Quelltext Verzeichnis (dass vom vorherigen Schritt) rein. Dort die folgenden Befehle eintippen:

make swig-rb
make check-swig-rb
sudo make install-swig-rb

Der 2. Befehl make check-swig-rb kann eine Weile dauern. 2 Tests meldeten auch Fehler weil die Berkeley DB nicht installiert ist. Das kann man allerdings, wie die Meldung vorher, getrost ignorieren.

Um sicher zu sein, dass die Schnittstelle funktioniert, sollte man die folgenden Befehle ausführen:

irb
irb(main):001:0> require 'svn/core'
=> true
irb(main):002:0> exit

Falls statt => true eine Fehlermeldung erscheint, funktioniert es leider nicht. In dem Fall könnt ihr hier einfach einen Kommentar schreiben. :)

5. MySQL

Ruby on Rails braucht natürlich noch eine Datenbank im Hintergrund, MySQL erfüllt diesen Zweck recht gut. Hier bin ich mal nicht so gründlich und installiere es so wie es im Ubuntu Serverguide steht:

sudo apt-get install mysql-server mysql-client

Die MySQL-Ruby bindings zu laufen zu kriegen ist allerdings etwas schwieriger bzw. dazu braucht man noch ein Paket mehr:

sudo apt-get install libmysqlclient15-dev
sudo gem install mysql

Nun sollte MySQL laufen und für Ruby on Rails bereit sein.

6. Ruby on Rails

Langsam kommen wir nähre an Collaboa ran. Rails kann man dank Ruby Gems bequem installieren:

sudo gem install rails -y

Bei mir musste ich den Befehl zwei mal eingeben. Also wenn am Anfang zuerst eine Fehlermeldung kommt, einfach noch mal eingeben.

Mongrel (optional)

Der Standardserver von Ruby on Rails (Webrick) ist nicht perfekt und hängt ab und zu. Es gibt bessere und vor allem schnellere Alternativen, wie z.B. Mongrel.

sudo gem install mongrel -y

Wenn man mit Webrick zufrieden ist, kann man sich diesen Schritt sparen.

Collaboa

Die Ziellinie ist in sicht. Collaboa kann man auf der Website runterladen. Allerdings braucht man für Collaboa noch einige Gems:

sudo gem install redcloth
sudo gem install syntax
sudo gem install xhtmldiff -y

Das Collaboa-Archiv entpacken. Die aktuelle Collaboa-Version (0.6.1) wurde mit Rails 1.2.1 entwickelt und ist darauf fixiert. Dementsprechend wird sich Collaboa beschweren, wenn wir nur die neuste Rails-Version 1.2.3 installiert haben. Um diese “Fixierung” an Rails 1.2.3 anzupassen hab ich kurzerhand die entsprechende Quelltext-Zeile in der config/environment.rb Datei bearbeitet. Von

RAILS_GEM_VERSION = '1.2.1'

zu

RAILS_GEM_VERSION = '1.2.3'

Dazu fehlt in dem Collaboa-Archiv das log-Verzeichnis. Damit Collaboa beim Start deswegen nicht rausfliegt legen wir manuell ein log-Verzeichnis an:

mkdir log

Damit sollten alle unmittelbaren Bedürfnisse von Collaboa gestillt ein. Die paar letzten Schritte (Aufbau und einrichten der Datenbank, Einrichten von Collaboa) werden im Collaboa-Wiki gut erklärt.

Nach diesen kurzen Schritten kann man den Webserver starten (ruby script/server) und unter localhost:3000 die Collaboa-Installation bewundern.

Fertig!

Für mich war es ein langer weg bis hierher. Die ganze Prozedur hab ich 4 mal hinter mich gebracht. Zu dem war es für mich eine gute bzw. tiefere Einführung in Linux.

Wie man vielleicht schon erahnt, hab ich Collaboa momentan nur zur Entwicklung aufgesetzt. Ich werde noch ein paar Fehler korrigieren und ein paar Funktionen hinzufügen (z.B. Wiki). Bis jetzt hat mich Collaboa sehr beeindruckt… vor allem die für mich unerlässliche Unterstützung für mehrere Projekte.

Ich hoffe, dieses kleine … “HowTo” hilft einigen anderen weiter, die sich für Collaboa interessieren, aber in den “kleinen Details” ertrinken.

Danke für’s Lesen.

Abgelegt in: Programmieren, Projekte | Kommentare ansehen und hinterlassen

Altenheim, Überstunden, Opera

Vom 11. April 2007

Seit Januar diesen Jahres bin ich fröhlicher ZIVI in einem Altenheim in Oettingen. Als ich mir die Stelle gesucht hab, dache ich da an sowas wie mein Bruder gemacht hat: am Tag effektiv 3 Stunden arbeit, der Rest Wartezeit zwischen den einzelnen Aktionen. Ich hatte damals sogar den verwegenen Gedanken, ich könnte den Zivildienst nutzen um meine privaten Projekte weiter zu bringen oder gar Japanisch zu lernen (eines meiner Langzeitziele).

Naja, heute weiß ich leider, dass sowas zumindest im Altenheim Oettingen weit neben der Praxis ist. Letzte Woche hab ich schon 5 oder 6 Überstunden gemacht und diese Woche (bisher 2 Tage) sind es auch schon wieder 7. Vom Prinzip her hab ich nichts gegen Überstunden… vorrausgesetzt sie sind gerechtfertigt. Jedoch erlebe ich öfter, dass sowas zur Gewohnheit wird. Hauptgrund dafür sind zumindest im Altenheim mangelnde Organisation und vor allem das Fehlen einer ehrlichen Komunikation unter den Menschen. Wenn man gebenüber dem Chef immer nur “ja” sagt…

Naja, als Zivi höhrt ja sowieso jeder auf einen, also spare ich mir mal sinnlose Analysen und Maßnamen. Das würde alles nur noch deprimierender machen.

Noch ein kleine Notzi am Rande für alle, die irgend wann eine Zivi-Stelle suchen: Es gibt auch Stellen im Ausland! Hab das leider erst am letzten Wochenende über einen guten Freund erfahren… in den ganzen Infoblättern usw. hab ich leider nichts drüber gelesen. Hätte ich ehr gewust, dass sowas möglich ist, hätte ich die Gelegenheit genutzt und eine Stelle in Japan genommen. Der Staat zahl einem den Zivildienst und da Japan für mich sonst viel zu teuer ist, währe dass eigentlich die Gelegenheit gewesen. Allerdings gilt ja manchmal “besser spät als nie” und deshalb werde ich mal am Freitag (auf Überstunden frei genommen) rumtelefonieren, ob man sich zu so einer Stelle versetzen lassen kann. Müsste dann in ein paar Wochen zumindest grundlegend Japanisch lernen, aber ich bin mal so kühn und traue mir das zu. Wenn man es braucht, lernt man es schnell… und die Unterlagen dazu hab ich schon seit gut zwei Jahren da. Bin mal gespannt, was da raus kommt.

Ein anderes Highlight dieses Tages war die neue Opera-Version 9.2. Am meisten hab ich mich auf Speed Dial gefreut. So hat man in einem leeren Tab gleich eine Auswahl seiner Lieblingsseiten… jede mit einer kleinen Vorschau. Ein Klick oder zwei Tastendrücke später ist man schon da.

Eine aus meiner Perspektive sehr sinnvolle Benutzerführung. Hab gleich mal meine Seiten dort eingetragen und war anfangs erst mal etwas baff. ZGR, der Weblog hier und zwei Doku-Seiten über Ruby und Ruby on Rails. Auf viel mehr Seiten surfe ich momentan gar nicht rum… zumindest sind mir nicht mehr eingefallen. Vielleicht schadet die Arbeit als Zivi wirklich… denn egal wo ich hingehe, es gibt immer was zu tun.

Von der technischen Seite her hat mit der Aritkel über SVG-Grafiken sehr beeindruckt: SVG Evolution 3: Applying Polish. Hätte nicht gedacht, dass mit SVG inzwischen so viel möglich ist. Unschärfefilter, Offsetfilter, Farbmanipulation pro Pixel… erinnert alles schon fast irgendwie an Pixelshader bei Grafikkarten (natürlich nur vom Gefühl, nicht von der Technik).

Our SVG Image Gallery web application has grown in little jets and spurts as we’ve added various drops of eye candy and functionality to it. Viewing this application in Opera or other advanced renderers of SVG, the app starts to feel very, um, “Flash”-like, especially when you consider where we started.

Praktische Anwendungen dafür gibt es natürlich nicht sehr viele… zumindest noch nicht. Allerdings hab ich schon mehr als einmal mit dem Gedanken gespielt ein kleines Netzwerkverwaltungstool zu schreiben, dass SVG verwendet um Netzpläne dynamisch zu bearbeiten (Linien, Wolken, Objekte rumschieben, Drag & Drop, usw.). Da das nur für unser Hausnetzwerk währe, würde es mich nicht stören, dass es nicht im IE geht. Vor allem kombiniert mit jQuery währe der JavaScript-Code auch schnell realisierbar.

Ah ja, Träume… :)

Abgelegt in: Programmieren, Zivildienst, Browser | Kommentare ansehen und hinterlassen (9)

Der Spaß am Programmieren

Vom 5. April 2007

Heute ist mal wieder ein Tag, an dem das Programmieren Spaß macht. Genauer gesagt dann, wenn man weiß, dass die eigene Arbeit anderen Programmierern das Leben leichter macht.

Vor einier Zeit hab ich das Simple Localization Plugin für Ruby on Rails veröffentlicht. Jedoch hat sich bisher dafür anscheinend niemand interessiert. Ok, zugegeben, es gibt andere, wohl auch bessere Plugins, um eine Ruby on Rails Anwendung zu übersetzten. Allerdings gab es dass, was ich gebraucht hab, noch nicht, also hab ich eben selbst eines gebaut (z.B. Übersetzung von Models und deren Attributen). Als ich das Plugin gestern in ein neues Projekt eingebunden hab (kleine private Finanzbuchhaltung um den Überblick zu behalten), sind mir jedoch zwei Fehler in dem Plugin aufgefallen. Etwas erschreckt hab ich festgestellt, dass das neuste Feature des Plugins nicht funktioniert und daher das gesamt Plugin nicht geht. Wenn man einmal keinen Test schreibt…

Lieber mache ich das hier erst mal fertig und schau mir das Plugin später noch mal an…

dachte ich mir und hab nach nem kleinen Fix an der Anwendung weiter programmiert. Ironischer weise hab ich heute nach der Arbeit eine eMail von Manuel Wahl bekommen, in der er mich nach genau diesem Bug fragt. :)

Diese Ereignisse haben mich etwas zum schmunzeln gebracht. Mir wird jetzt allerdings klar, warum das Plugin niemanden was gebracht hat. Wenn es gar nicht funktioniert hat…

ps.: Das Plugin ist jetzt natürlich korrigiert (v2.1.1).

Abgelegt in: Programmieren, Projekte | Kommentare ansehen und hinterlassen

Collaboa und Ubuntu

Vom 29. März 2007

Ich hab mir vorgenommen, hier nun öfters was rein zu schreiben… und da Ubuntu-Linux gerade in einer Virtual Machine installiert wird, mache ich das nun auch.

In erste Linie versuche ich gerade Collaboa zu installieren bzw. zum laufen zu kriegen. Collaboa ist ein recht unbekanntes Projektmanagement-Tool auf Basis von Ruby on Rails, also eine Website. Tickets, Milestones, Changesets bzw. Commits und ein Source browser. Hat fast alles was ich brauche… bis auf einen Wiki, und genau das will ich noch rein bauen.

Wenn sich jemand in dem Bereich auskennt, wird ihm vielleicht Trac einfallen. Das ist inzwischen recht verbreitet und am Anfang hab ich mich auch damit befasst. Jedoch ist die Installation von Trac nicht ganz ohne und alles in allem müsste ich dazu nen ganze Menge Python-Zeug auf dem HelionWeb Server installieren. Der hauptpunkt jedoch ist, dass man bei Trac für mehrere Projekte auch mehrere Trac-Instanzen braucht. Da ich einige Projekte da rein packen will, währe das ein recht großer Aufwand.

Alles in allem bietet mir Collaboa die besseren Kernfunktionen (mehrere Projekte, usw.) und Rails ist auf dem HelionWeb Server schon drauf und läuft auch sehr gut. Jedoch hat die die Installation von Collaboa als nicht ganz einfach erwiesen. Hauptsächlich wegen der SubVersion-Schnittstelle bzw. den SubVersion-Ruby-Bindings. Leider hab ich keine compilierte Version für Windows gefunden… und aus diesem Grund installiere ich gerade mal wieder Ubuntu-Linux um es eben dort auszuprobieren.

Bin mal gespannt, ob das so läuft. Hab mich schon jetzt wieder in die Schriftdarstellung von Gnome verliebt…

Abgelegt in: Programmieren | Kommentare ansehen und hinterlassen

Lang ist’s her

Vom 25. März 2007

Nach fast 2 Monaten sendepause schreib ich hier mal wieder was rein. Eigentlich hatte ich schon öfter vor, ein paar Gedanken hier zu äußern, aber letzten Endes war immer die Zeit zu knapp. Mal sehen, vielleicht bekomme ich ja einen kleinen Überblick über die Themen zusammen, die mich gerade so beschäftigen.

Nun, viel Zeit ging in die Fertigstellung und Dokumentation des Simple Localization Plugins für Ruby on Rails. Ich glaub ich hab noch nie in meinem Leben so viel Dokumentation geschrieben (ca. 3 Wochen). Das Plugin ist mit der Zeit und den Anforderungen an meine Rails-Anwendungen entstanden, aber nun ist es endlich qualitativ gut genung, um es zu veröffentlichen. Auf das es anderen Programmierern die Arbeit leichter macht.

Zu meiner Überraschung und Freude haben auch einige Personen Interesse an dem Navigate through table rows using the keyboard Projekt gezeigt. Von Version 0.3.0 ging es dank verschiedener Leute aufwärts zu Version 0.5.3. Roberto Rambaldi war sogar so nett und hat mir neuen Quelltext geschickt. War wirklich ein gutes Gefühl, dass dieses Projekt jemanden wirklich was gebracht hat. :)

Ein klein wenig happig wurde es vorletzte Woche. Hatte da meinen einwöchigen Zivi-Lehrgang (oder besser Leergang). Als ich am Freitag daheim wieder angekommen bin hat mir mein Bruder eröffnet, dass an diesem Freitag der letzte Tag war, an dem man sich zur BOS anmelden konnt. Da genau das der Ort ist, wo ich eigentlich nach meinem Zivi hin wollte, war ich erst mal geschockt. Im Klartext würde das heißen, dass ich noch ein Jahr warten müsste um auf die BOS zu kommen. Naja, hab an dem Abend noch schnell meine Anmeldeunterlagen zusammengesucht und dort um 23:00 Uhr in dem Briefkasten versenkt. Am Montag gleich frühs 8:00 Uhr dort ins Sekreteriat gegangen… und siehe da, Glück gehabt. Es gab sogar noch 3 andere, die sich erst am Montag angemeldet haben. Persönlich hatte ich einfach nicht mehr dran gedacht und auch nicht damit gerechnet, dass man sich 6 Monate vorher bei der BOS anmelden muss. Ging ja gerade noch mal gut.

Neben Programmieren, ZGR und Zivi nehmen momentan auch Bücher einen sehr großen Teil ein. Ok, das ist schon länger so, aber momentan lese ich noch mehr als üblich… leider auch zu Lasten meiner Schlafgewohnheiten. Grund dafür sind nicht etwa neue Fachbücher (auch wenn The Principles of Beautiful Web Design vor zwei Tagen angekommen ist), sondern die Romane zu dem Computerspiel Halo. Eigentlich habe ich mir Die Schlacht um Reach (Vorgeschichte zu Halo) gekauft, damit ich beim langweiligen Zivi-Lehrgang was zu lesen hab. Freitag vor dem Lehrgang ist es angekommen… Montag, kurz bevor ich in Spiegelau angekommen bin, hatte ich es durch. 382 Seiten in vier Tagen, ich glaub ich hab noch nie so schnell gelesen. Das Buch hat mich echt mitgerissen. Die Story ist extrem gut und auch für mich zumindest schlüssig. Zudem beschreibt das Buch die besten Raumschlachten, die ich je gelesen hab. Ein Film ist dagegen echt langweilig.

Naja, ein paar Tage nach dem Lehrgang hab ich mir dann Die Invasion (deutsch und auch englisch) und Erstschlag gekauft. Die Invasion war nach einer Woche durch. Es ist zwar “nur” die Nacherzählung von dem Computerspiel Halo, enthält aber so viel mehr Inhalt, dass alles auf einmal in einem anderen Licht erscheint. Vor allem die Beschreibung der Flood ist ziemlich … ungewöhnlich. Hab auch einen neuen Lieblings-Charakter: der Allianz-Grunt Yayap. Der Typ bringt mich immer wieder zum Lachen.

Hab vorgestern angefangen Erstschlag zu lesen und bin schon halb durch. Dieses Buch findet zwischen Halo 1 und Halo 2 statt und klärt so einige Fragen, die sich bei den Computerspielen stellen. Bin mal gespannt, was sich da so ergibt. Danach werde ich wohl mal Die Invasion auf englsich durchlesen und anschließend Ghosts of Onyx kaufen. Den gibt es leider noch nicht auf deutsch, also teste ich mal mein Englisch aus.

Wenn ich so auf die letzten paar Wochen zurückschaue muss ich ehrlich sagen, dass diese Bücher mich voll in ihren Bann gezogen haben. Jedoch bin ich froh, dass Ghosts of Onyx erst mal der letzte Band ist. Dann ist erst mal Ende mit der kurzen Sucht und es gibt wieder mehr Zeit für andere Dinge. Es wird wahrscheinlich noch mindestens 2 weitere Romane geben, aber das dauert noch. Als Abschluss zu dem Thema kann ich eigentlich nur sagen, dass die Spiele nur einen sehr oberflächlichen Eindruck auf das Halo-Universum geben und mir auch nie richtig gefallen haben (wegen dem Gameplay). Allerdings könnte jeder, der epische Stories mag, auch an den Romanen gefallen finden.

Sonst gibt es eigentlich schon noch so einges, über dass ich berichten könnte. Meine Zivi-Tätigkeiten sind z.B. momentan etwas sinnlos und ich würde sie unter der Kategorie “verschwendete Zeit” ablegen… dort landen nicht Dinge wie ein Blick in den Himmel oder die Wartezeit am Bahnhof, sondern wirklich nur Sachen, auf die ich im Leben hätte verzichten können. Kurz gesagt: Schnauze voll. Könnte allerdings schlimmer sein… aber das Thema hebe ich mir für einen anderen Eintrag auf.

Abgelegt in: Programmieren, Sonstiges, Bücher, Romane, ... | Kommentare ansehen und hinterlassen (4)

Visual HTML Jokes

Vom 29. Januar 2007

Mal wieder etwas für Programmierer. Speziell für welche mit HTML-Kenntnissen.

Über ein paar Umwege bin ich auf den Eintrag More visual HTML jokes von Jesper Rønn-Jensen gestoßen. Angefangen hat das ganze wohl mit diesem Visual html joke. Hab ehrlich gesagt mal wieder seit langem richtig gelacht. :)

Inzwischen gibt es bei Flickr auch einen Photo-Pool dafür. Wem die ersten paar gefallen haben, der wird da mehr Spaß finden.

Abgelegt in: Programmieren | Kommentare ansehen und hinterlassen (2)

YAML Ain’t Markup Language

Vom 24. Januar 2007

Allen Ruby on Rails infizierten wird der Begriff YAML etwas sagen. Für alle, die es nicht wissen: YAML ist ein Format, um möglichst einfach Daten in eine Datei zu schreiben, die leicht von Mensch und auch Maschine gelesen werden kann.

Ein kleines Beispiel macht wie immer hoffentlich alles klarer:

development:
  adapter: mysql
  database: project_development
  username: user
  password:
  host: localhost

Das ist schon ein kleiner Block YAML. Genauer genommen die Konfiguration der Entwicklungsdatenbank aus einer Rails-Anwendung. Jeder, der schon mal mit XML gearbeitet hat, wird sich zumindest ein wenig über die etwas unübersichtliche Suppe von Elementen geärgert haben. Genau das ist einer der Vorteile von YAML, man kann übersichtliche Strukturen aufbauen, ohne viel “Markup Language” drum rum. Wichtig sind die Daten, und dass man sie einfach lesen kann.

Nun, ich hatte jetzt schon einige male etwas mehr mit YAML machen wollen. Z.b. eine YAML-Datei mit Testdaten, in der ein Block mit Text vorkommt. Nicht in einer Zeile, sondern über mehrere Zeilen verteilt. Eigentlich ganz einfach… aber wenn man nicht weiß wie es geht, kommt man bei YAML nicht drauf.

Leider hat mir bis jetzt immer eine übersichtliche und auch für Menschen verständliche Referenz gefehlt, in der man bei Problemen einfach mal reinschauen konnte. Naja, hätte ehr Google bemühen sollen…

Auf jeden Fall gibt es ein recht guten Einsteig in YAML: YAML in Five Minutes. Eine kleine sehr beeindruckende Einführung in in die Grundlagen von YAML. Noch dazu hab ich dadurch das Yaml Cookbook gefunden, das ich mir in den nächsten Tagen mal zu gemüht führen werde.

Auf jeden Fall sind meine Probleme mit YAML jetzt erst mal gelöst. Zum einen kann man recht einfach Textblöcke über Folded Blocks schreiben und zum anderen kann man in Single-quoted Strings alle möglichen Zeichen verwenden (hatte Probleme mit dem %-Zeichen).

folded block: >
  can't you see
  the beauty of yaml?
  hmm
all my favorite symbols: '#:!/%.)'

Hätte natürlich auch auf Wikipedia schauen können, denn da steht auch alles drinne. Aber gut, irren ist Menschlich. Für alle, die auch mit YAML arbeiten bzw. arbeiten wollen: ein Blick in YAML in Five Minutes und das Yaml Cookbook lohnt sich wirklich.

Abgelegt in: Programmieren | Kommentare ansehen und hinterlassen

Ein kleines Update

Vom 27. Dezember 2006

Ich war so frei und hab ein kleines Update dieser Website hier online gestellt. Das meiste lag zwar schon seit fast zwei Monaten in der Versionsverwaltung rum, aber ich hab bis jetzt einfach nicht die Zeit und Motivation dafür aufgebracht.

Naja, wie dem auch sei, nun sollten einige lästige Fehler korrigiert sein.

  • Das Layout müsste jetzt eigentlich auch im Internet Explorer 7 richtig funktionieren. Genau das war die Änderung, die seit zwei Monaten in der Versionsverwaltung rumlag. Damals hab ich das Layout nur mit IE 7 RC1 getestet und momentan fehlt mir leider eine Maschine um die Website mit der finalen IE 7 Version zu testen. Werde das bei Gelegenheit noch nachholen.
  • Nach ca. 1200 Spam-Kommentaren hab ich jetzt ähnlich wie bei ZGR eine kleine simple Aufgabe (addiere 8 und 5) eingebaut. Diese Aufgabe muss man jedes mal “bewältigen”, wenn man einen Kommentar schreibt. Ich weiß, auch für Menschen fast unlösbar.
  • Wenn man einen Kommentar schreibt, werden jetzt die Daten wie Name, Website, usw. in einem Cookie gespeichert und auch beibehalten. Das hat früher nicht funktioniert, weil es nur ein Session-Cookie war, also beim Schließen des Browsers wieder gelöscht wurde. Nun ist es so eingestellt, dass das Cookie auch weiterhin gespeichert wird.
  • Einige Änderungen im Innenleben der Website… allerdings nichts grundlegendes.

Der Hauptfortschritt ist wohl die kleine Aufgabe, die den Spam-Bots hoffentlich das Leben schwerer macht… aber man wird sehen.

Abgelegt in: Programmieren, Projekte | Kommentare ansehen und hinterlassen (4)

Navigate through table rows using the keyboard

Vom 10. Dezember 2006

Eines meiner “liegen gebliebenen” Projekte hab ich jetzt endlich soweit fertig: Navigate through table rows using the keyboard (englisch).

Dabei handelt es sich um ein kleines jQuery (JavaScript Framework) Plugin, das die Arbeit mit Tabellen auf Websiten erleichtert. Man kann die Tabellenzeilen mit den Pfeiltasten durchgehen und mit der Return-Taste quasi die aktuelle Zeile “öffnen”. Wenn man eine Zeile geöffnet hat, sich aber doch nicht dafür interessiert, kann man mit der Rücktaste (Backspace) wieder zu der Tabelle zurück und schnell die nächste Zeile markieren und “öffnen”. Mit einfachen Klicks (Zeile markieren) und Doppelklicks (Zeile öffnen) kann man auch sinnvoll arbeiten. Die Beispielseite demonstriert die Nutzung recht gut… hoffe ich jedenfalls.

Die Idee kam von meinem Freund Florian Seefried während eines längeren Skype-Telefonates am Abend. Er arbeitet gerade an einer Webanwendung für seinen Betrieb. Da seine Mitarbeiter aktuell noch mit einer Anwendung arbeiten, die ein ähnliches Tastaturverhalten bietet, kam irgend wann mal die Frage auf:

Geht das bei Websiten auch?

Nach einem kleinen Test heiß die Antwort glücklicher weise “Ja”. Sorgenkind ist hier allerdings mal wieder der Internet Explorer, bei dem man leider die Pfeiltasten nicht abfragen kann. Allerdings sollte auch für IE-Nutzer die Hervorhebung der aktuellen Tabellenzeile und die Nutzung der Maus etwas bringen.

Wenn man etwas über dieses Tastaturverhalten nachdenkt, findet man auch ein paar Situationen, bei denen man dieses Plugin sinnvoll einsetzen könnte. Ein Beispiel währen die Themenlisten in einem Forum oder die Übersicht der privaten Nachrichten.

Naja, bin auf jeden Fall froh, dass ich das Plugin jetzt in einem Zustand gebracht hab, in dem es dem ein oder anderen Programmierer helfen kann. War so frei und hab es zur Plugin-Liste der jQuery-Seite hinzugefügt. Vielleicht findet es jemand nützlich. :)

Abgelegt in: Programmieren, Projekte | Kommentare ansehen und hinterlassen

Ein neues Kapitel

Vom 1. Dezember 2006

Wow, fast einen Monat ist der letzte Beitrag her. Kommt mir vor wie eine Ewigkeit. Zuersteinmal will ich mich für die lange Abwesenheit entschuldigen, während des letzten Monats ist einfach zu viel los gewesen. Leider ist dadurch neben der Arbeit so einiges bzw. fast alles liegen geblieben.

Gestern war mein letzter Arbeitstag bei meiner ehemaligen Firma in Augsburg. Ich bin nicht der Typ von großen Abschieden und so wird es wahrscheinlich noch einige Tage oder Wochen dauern, bis die meisten Mitarbeiter realisieren, dass da einer weniger rumläuft. Wie einige von euch sicher wissen, wir es zum Schluss hin oft recht stressig und die letzten Wochen waren da keine Außnahme. Alles in allem liefen die letzten Tage jedoch recht gut und ich bin froh, dass es relativ gut ausgeklungen ist.

Nun wird es Zeit, das nächste Kapitel im Leben anzufangen: ZIVI, BOS und Studium. :) Glücklicherweise hab ich jedoch noch einen ganzen Monat Puffer bis zum ZIVI und den werde ich nutzen, um alte Projekt fertig zu machen und wieder einen Überblick über alles zu bekommen.

Ich könnte jetzt zwar anfangen, hier über alles zu schreiben (Rails Konferenz, neuer PC, Projekte, Projekte, Projekte und hab ich vergessen: Projekte?), aber ich bin nicht so wirklich in Schreiblaune. Ich werde im laufe des Monats den großen Wollknäuel aufdrieseln…

Naja, jetzt kann ich endlich wieder genug schlafen. :)

Abgelegt in: Programmieren, Arbeit | Kommentare ansehen und hinterlassen

Rails-Konferenz

Vom 2. November 2006

Morgen findet in Frankfurt die deutsche Rails-Konferenz statt. Zeitlich ist es bei mir zwar momentan etwas eng, aber ich hab mich dennoch entschlossen, bei dieser Konferenz dabei zu sein. Ruby on Rails ist nach wie vor etwas unkonventioneller Stoff, deshalb findet man davon nicht all zu schnell Entwickler. Diese Konferenz ist eine gute Gelegenheit, andere Programmierer zu treffen.

Gebucht hab ich die Konferenz schon vor einigen Tagen und heute bin ich nach Frankfurt hochgefahren. Bei der Gelegenheit haben wir uns auch gleich noch entschlossen, den Arbeitspeicher des HelionWeb Servers um weitere 256 MB zu erweitern. Die Fahrt vom trauten Heim bis zum Rechenzentrum (ca. 4 Stunden) war noch ganz gut. Ok, die A3 war etwas voll, aber das ist wohl normal auf dieser Autobahn. Dank Navigationssystem ging es auch in Frankfurt selbst ganz gut. Bin zwar 2 mal falsch abgebogen, aber der Unterschied zwischen “links” und “halblinks” ist nicht immer ersichtlich.

Heftig hingegen waren die 4 km vom Rechenzentrum zum Hotel. Lockere 90 Minuten war ich mit dem Auto unterwegs. Einmal falsch abgebogen und man irrt troz Navi 20 Minuten durch die Gegend. Ich dache ja schon in Nördlingen gibt es viele Einbahnstraßen, aber in Frankfurt ist anscheinend jede zweite Straße eine. Ein echter Alptraum… bei sowas wundert es mich garnicht, dass Autofahrer manchmal leicht Aggresiv werden. Einordnen war so gut wie garnicht möglich und auf vierspurigen Straßen kann man im Berufsverkehr eigentlich oft nur geradeaus fahren.

Naja, ich hoffe mal, dass sich die Konferenz lohnt und diese Anfahrt wert ist. Bin jedenfalls heil froh, wenn ich wieder aus Frankfurt raus bin.

Abgelegt in: Programmieren | Kommentare ansehen und hinterlassen

Ruby on Rails Beziehungsdiagram

Vom 19. Oktober 2006

In Ruby on Rails kann man die Beziehungen zwischen Datenbanktabellen bzw. Models sehr einfach über definitionen wie belongst_to, has_one, has_many, usw. angeben. Leider sind diese Definitionen nicht die einfachsten Sachen der Welt (auch wenn es danach so aussieht) und dementsprechend haben auch viele Einsteiger ihre liebe Not damit.

Auf dem RadRails Weblog hat Dylan Bennett ein Diagram der grundlegenden Beziehungen von Ruby on Rails angefertigt. Es zeigt recht gut, wie das mit dem belongst_to, has_many, usw. gemeint ist.

Das Diagram ist auf jeden Fall einen Blick wert, alleine schon wegen der Aufmachung. :)

Abgelegt in: Programmieren | Kommentare ansehen und hinterlassen (2)

Was für eine Woche

Vom 29. September 2006

Das erste mal in dieser Woche komme ich jetzt langsam mal zur Ruhe. In den letzten 5 Tagen haben sich nur Aktion und Reaktion abgewechselt… viel Zeit zum Denken blieb nicht. Leider konnte ich nicht wirklich an dem Artikel über eMail-Adressen weiterarbeiten. Es kommt mir so vor, als sei das letzte Wochenende schon Monate her. Ich glaube, dass nennt man manchmal “Stress”.

Die Höhepunkte dieser Woche lassen sich glücklicherweise recht kurz zusammenfassen:

  • Mein Bruder hatte das Pech, dass letzte Woche der Kühlwasserschlauch seines Autos gerissen ist. Ein Tag nach der Reperatur (Dienstag vielleich?) verliert das Auto eine Scheinwerferscheibe. Als wir am nächsten Tag einen neuen Scheinwerfer einbauen wollten, fiel auch noch die Scheibe des anderen Seinwerfers ab. Der Ersatzscheinwerfer hat übrigens nicht gepasst. Zwei Tage später hatte es sich dank zwei neuer Scheinwerfer glücklicherweise erledigt gehabt.
  • Wahrscheinlich am Mittwoch war der Arbeitstag perfekt: Frühs gleich mal dank Bahn, Buss und Straßenbahn eine halbe Stunde zu spät… und siehe da, alle Server unserer Firma sind offline. Letzten Endes hat ein Switch im Serverraum zu dem Ausfall geführt.

    Am späten Nachmittag hat mir eine Arbeitskolleging noch etwas bei einem aktuellen Projekt geholfen. Irgend wann kam auch mal die Frage auf, ob der Chef das abgesegnet hat. Ein kurzen Anruf später waren zwei Chefs da. Mein erste Gedanke in der “Diskusion” war: ein halbes Jahr Arbeit umsonst…. Zu meiner Erleichterung hat sich zum Schluss hin alles einiger maßen gefangen. Meine Arbeitskollegin bezeichnete es recht treffend als “reinigendes Gewitter”.

  • Heute… eigentlich wollte ich wegen einer wichtigen Angelegenheit mit dem Zug nach Weimar fahren. Das hatte sich allerdings im Laufe des Tages erledigt. Als ich dann normal nach Hause fahren wollte… 30 Minuten Verspätung, 1 Stunde Verspätung, Verspätung auf unbestimmte Zeit. Anscheinend sind die Verbindungen rund um Augsburg zusammengebrochen. Oberleitungsschaden von Augsburg nach München (südlich), “Gegenstände in der Oberleitung” irgend wo zwischen Augsburg und Donauwörth (nördlich).

    Fernverkehr hat bei der Bahn immer Vorrang, und genau bei sochen Katastrophen ist man froh, wenn man eine ICE-Fahrkarte hat. Dank des ICEs bin ich nur eine halbe Stunde später in Donauwörth angekommen und konnte mit meinem Anschlusszug weiterfahren.

    Viele Leute vertreten die Ansicht, dass die Bahn ziemlich unzuverlässig ist. Ich persönlich denke allerdings ehr, dass die Bahn sehr gute Arbeit leistet. Es gibt zwar jedes Jahr ein paar (3 vielleicht auch 5) Aussetzer, aber die restliche Zeit läuft alles nahezu reibungslos. Bei dem Berufsverkehr ist das eine beachtliche Leistung. Die Leute bei der Bahn sind auch nur Menschen. Einige sind weniger gut, aber viele andere geben sich sehr viel Mühe und müssen oft ungerechtfertigte Kritik hinnehmen.

Wenn ich mir das jetzt selbst noch mal anschaue, macht es gar kein so schlimmen Eindruck. Wenn man sich ein paar Schockmomente hinzudenkt und von wenig Schlaf ausgeht, bekommt es schon ehr Form. Alles in allem war diese Woche eine gute Erfahrung, wie leicht man in dieses “Aktion und Reaktion”-Schema fallen kann. Aramaki aus Ghost in the Shell hat in einem der Mangas mal ein nettes Zitat von sich gegeben. Bin mir nicht sicher, ob ich es noch zusammen bekomme:

Manchmal sollte man einfach stehenbleiben und nachdenken… denn nur wir Menschen können das.

Zumindest so etwas in der Art.

Naja, der Tag heute hatte allerdings auch seine guten Seiten. Auf dem Ruby on Rails Weblog hab ich von der Rails Konferenz am 3. November 2006 gelesen. Ich hab schon bei der RailsConf Europe 2006 lange mit dem Gedanken gespielt, hinzufahren. 500 € waren mir dann allerdings doch zu viel. Die Rails Konferenz findet in Frankfurt am Main statt und 210 € ist ein erschwinglicher Preis. Ich werde es mir noch ein paar Tage durch den Kopf gehen lassen, allerdings habe ich nicht vor, diese Gelegenheit zu verpassen.

Nun gut, ich hab vor in nächster Zeit etwas regelmäßiger zu schreiben… und auch zu leben.

Abgelegt in: Programmieren | Kommentare ansehen und hinterlassen (1)

Good bye Microsoft; Pete has now left the building!

Vom 20. September 2006

Das kommt jetzt vielleicht etwas sehr kurz auf knapp, allerdings hab ich gerade von meinem guten Freund Florian Seefried einen Link bekommen: Good bye Microsoft; Pete has now left the building!

Dabei handelt es sich um einen Weblog Eintrag von Pete Wright, einem ehemaligen Programmierer von Microsoft. Er beschreibt darin etwas seinen Werdegang und mit welchen Leuten er zu tun hatte. Vor allem, dass er nur selten auf talentierte Leute von seinem Kalieber gestoßen ist. Leute, die es lieben Code zu schreiben, die stätig weiterlernen wollen und die die Schönheit und die Kunst im Quelltext kennen. Kurz um, Leute, die mit Leidenschaft dabei sind.

Ich hab zwar bei weitem nicht so viel Erfahrung wie Pete Wright, allerdings habe ich bis jetzt auch nur sehr wenige Leute kennen gelernt, die mit Leidenschaft bei der Sache sind… denen der Code was bedeutet. Ich war über die Zustände in der Berufsschule regelrecht geschockt. Wenig Leute waren bei der Sache und für viel war es einfach nur ein “Job”. Im letzten Lehrjahr wurde das zwar besser, da die gesamte Klasse nur aus Programmierern bestand, allerdings hatte ich bei den meisten (nicht allen) auch den Eindruck, dass es nur ein vorrübergehender “Job” ist.

Ihr könnt mich jetzt krank, verrück, irre oder sonst wie nennen, aber wenn “normale” Leute gerne auf Parties gehen, oder die Nacht durch saufen… programmiere ich halt mal eine Nacht durch. Mir macht das Programmieren einfach Spaß, die Denkvorgänge, die Logik, die Systeme… wie Spielzeug. Man könnte auch sagen, dass ich seit dem 14. Lebensjahr nicht mehr aufgehöhrt hab, zu spielen. Wenn dann ein paar Leute auch noch sagen, dass sie das Zeug, was man geschrieben hat, gut finden, ist die Sache perfekt.

Das ist für mich der Grund, warum ich Programmiere. Diesen Anreiz kann mir kein Geld der Welt geben. Ich finde es nur immer wieder schade, dass ich bis jetzt nur selten mit Leuten zusammen arbeiten konnte, die ähnlich zu ihrer “Arbeit” stehen. Das einzige, was mir da wirklich einfällt, ist die Zeit mit Florian Seefried, als der HelionWeb Server entstand.

Ich hoffe, dass ich in Zukunft mehr Leute treffen werde, die gerne programmieren. Das ist mit einer der Gründe, warum ich möglichst bald studieren will. Die ganze Thematik deckt sich in etwa mit dem Essay The Power of the Marginal und dem Buch Practices of an Agile Developer, dass ich gerade lese.

Pete Wright hat nun seine eigene Firma eröffnet und sich ein entsprechendes Team gesucht. Ich wünsche ihm alles Gute für die Zukunft. Leute wie er sind es, die ich bewundere…

Am Ende vielleicht noch ein kleines Zitat, dass Andy Miller im 9. Kommentar zu dem Beitrag geschrieben hat:

If Electronics is Silicon, then Code is Pure Human.

:)

Abgelegt in: Programmieren | Kommentare ansehen und hinterlassen (8)

Crazy Egg

Vom 20. September 2006

Vor einiger Zeit wurde auf dem Ruby on Rails Weblog ein Eintrag über Crazy Egg verfasst. Bei Crazy Egg handelt es sich um eine Analysesoftware für Webseiten. Allerdings nicht im üblichen Stil von “je mehr Diagramme um so besser”, sondern in einem überschaubaren, praktischen Stil.

Es wird im Prinzip nur aufgezeichnet, wie viele Benutzer auf die Links klicken. Die Ergebnisse werden dann sehr übersichtlich, z.B. über die geniale Heatmap, dargestellt. Das ganze ist darauf ausgelegt, dass man die Auswertung für eine Seite erstellen läst und anschließend, je nach dem Ergebnis, die Seite oder das Layout optimiert.

Seit dem ich mir Crazy Egg vor ein paar Tagen angesehen hab, spiele ich mit dem Gedanken, es auf Arkanis Development auszuprobieren. Ich hab zwar nicht vor, am Layout viel zu ändern, allerdings würde es mich schon interessieren, ob die Menüs auf der linken Seite genutzt werden und ob ich sie evt. anders anordnen sollte.

Ich hab mir die Crazy Egg Privacy Policy durchgelesen und danach zeichnet Crazy Egg keine Benutzerinformationen auf. Es heist also nur, ein Benutzer hat da hin geklickt. Keine IP-Adresse, keine Auswertung über mehrere Seiten, sondern einfach nur ein simpler Zähler. Persönlich würde ich das also für völlig unbedenklich halten, da es ja sogar noch weniger ist, als die Webserver Logs eines jeden Servers ohnehin aufzeichnen.

Da ich allerdings ein schlechtes Gewissen bekomme, sobald ich irgend etwas von Besuchern aufzeichne, wollte ich hier mal die Frage in den Raum werfen, was ihr davon haltet, wenn ich Crazy Egg hier ausprobiere?

Abgelegt in: Programmieren | Kommentare ansehen und hinterlassen (2)

SQL-Abfragen über mehrere Datenbanken

Vom 18. September 2006

Mein Arbeitskollege hatte heute eine interessante Idee: In einer SQL-Abfrage Tabellen aus mehreren Datenbanken verwenden. Wir dachten zuerst, dass es nicht möglich ist, doch mein Arbeitskollege hatte noch ein paar Fetzen aus dem MySQL-Handbuch im Kopf. Es geht nichts über einen kurzen Test, also hab ich einfach mal schnell eine entsprechende SQL-Abfrage an den Server geschickt:

SELECT db1.tblA.*, db2.tblB.* FROM db1.tblA, db2.tblB

Zu unserer großen Freude ging es ohne Probleme. Wenn man dann noch Tabellen-Aliase einsetzt, bleibt auch die Übersichtlichkeit erhalten:

SELECT a.*, b.* FROM db1.tblA AS a, db2.tblB AS b

Ein wenig später hab ich auch die passende Zeile im MySQL-Handbuch gefunden:

You can refer to a table within the default database as tbl_name, or as db_name.tbl_name to specify a database explicitly. You can refer to a column as col_name, tbl_name.col_name, or db_name.tbl_name.col_name. ...

Mir fällt zwar keine wirklich konkrete Nutzung dafür ein, aber es ist auf jeden Fall eine interessante Funktion. In der Quick’n Dirty “Enterprise”-Welt kann man sowas ab und an sicher mal brauchen.

Abgelegt in: Programmieren, Arbeit | Kommentare ansehen und hinterlassen (2)

Arkanis Development Version 2 online

Vom 17. September 2006

Ich hab schon öfters mal von mir gegeben, dass ich an einer neuen Version dieser Webseite hier arbeit. Nach einigen Monaten Arbeit ist es nun so weit… nun, seht selbst. :)

Hier nun ein kleiner Überblick über die Änderungen:

  • Neues Design… naja, eigentlich gleich drei. Wenn ihr euch fragt, was diese drei farbigen Buttons links bedeuten, geht einfach mal mit der Maus drüber und klickt drauf. Hoffe sie gefallen euch.
  • Auf Arkanis Development erscheinen jetzt ab und zu mal ein paar Artikel, die sich genauer mit diversen Themen befassen. Anfang macht ein Artikel über die Entwicklung dieser neuen Version. Allerdings habe ich bereits weitere Artikel über PNGs und den Spamschutz von eMail-Adressen auf Webseiten in Arbeit.
  • Ich hab mir mal die Zeit genommen und die Über… und Profil Seiten zu dem gemacht, was sie sein sollten. Werft einfach mal einen Blick rein.
  • Die Daten, die man beim Schreiben von Komentaren eingibt (Name, eMail und Webseite) werden nun in Cookies gespeichert. Wenn man einen weiteren Komentar schreiben will, sind diese Felder dann automatisch ausgefüllt. Hab ich mir von Lexx seinem WorldPress Weblog abgeschaut.
  • Viele, sehr viele Details…

Eigentlich ist ja sowieso alles komplett neu geschrieben und es ist nur ein Zufall, dass es ab und an Ähnlichkeit mit der ersten Version gibt. Weblog bleibt halt Weblog. Ich möchte allerdings noch anmerken, dass in den letzten 2 Wochen zu den ca. 772 Zeilen Code noch mal 516 Zeilen Tests dazu gekommen sind. Anders ausgedrückt kommen auf 100 Zeilen Quelltext 66 Zeilen anderer Code, der sicher stellt, dass die ersten 100 Zeilen auch das machen, was sie sollen.

Ich habe wie gesagt einen Artikel über die Entstehung dieser Version verfasst. Der Artikel ist aber mehr eine grobe Zusammenfassung und geht nicht ins Detail. Wenn jemanden Interesse an speziellen Details hat, kann ich zu dem Thema auch gerne noch etwas genaueres schreiben.

Es hat fast die kompletten letzten zwei Tage gekostet, die neue Webseite online zu bringen. Jetzt, um 23:00 Uhr bin ich endlich fertig. Also, viel Spaß mit der neuen Seite. :)

Abgelegt in: Programmieren, Projekte | Kommentare ansehen und hinterlassen (6)

Ruby on Rails Tests

Vom 7. September 2006

Wie im letzten Eintrag schon gesagt, schreibe ich momentan ein paar Tests für die nächste Version dieser Webseite. In Ruby on Rails ist es glücklicherweise sehr einfach, Tests zu schreiben. Das sind im Prinzip nur kleine, überschaubare Skripte, die gewisse Vorgänge der Anwendung ausführen und anschließend überprüfen, ob das Ergebnis mit den erwarteten Werten übereinstimmt. So kann man z.B. im Test einen Weblogeintrag erstellen und anschließend prüfen, ob der Datensatz in der Datenbank existiert, mit den passenden Kategorien verknüpft ist, usw. Das wirklich praktischste aber ist, dass man, sobald man die Tests einmal geschrieben hat, sie bequem alle jederzeit über ein Kommando ausführen kann.

Bisher hab ich immer nur mit Unit Tests gearbeitet, die datenbankspezifische Logik, wie z.B. die Beziehungen zwischen einzelnen Tabellen bzw. Models, überprüfen. Gestern Abend bin ich auch endlich mal dazugekommen Functional Tests zu schreiben. Damit kann man Anfragen and die Aktionen eines Controllers simulieren und prüfen, ob das Ergebnis mit den Erwartungen übereinstimmt.

Es ist wirklich gut, wenn man mit einem Befehl alle Tests durchlaufen lassen kann und weiß, dass die Anwendung so funktioniert, wie sie funktionieren soll. Beruhigt das Gewissen wirklich sehr.

Vielleicht mache ich auch gleich das meiste über Integration Tests, die im Prinzip die gesamte Rails-Anwendung durchtesten. Angefangen vom Dispatcher (der die URLs entgegennimmt), bis zu den verwendeten Controllern und Models.

Hab noch einige Tests zu schreiben… auf bald.

Abgelegt in: Programmieren, Browser | Kommentare ansehen und hinterlassen

Urlaub, Violinenkonzert, Updates

Vom 4. September 2006

Der letzte Eintrag ist lange her… fast zwei Wochen. Hauptsächlich arbeite ich nach wie vor an einer neuen Version dieser Seite hier. Diese neue Version sollte zwar heute online gehen, aber nachdem unter der Produktionsumgebung noch ein paar Fehler aufgetraucht sind, werde ich erst mal ein paar Test schreiben und alles etwas “säubern”. Die meiste Zeit ist in diese neue Version geflossen, aber das werdet ihr merken, wenn sie online geht.

Ein anderer Grund für die lange Stille war der Urlaub vom Montag letzter Woche bis Freitag. Meine Geschwister und ich haben die Wohnung unserer Mutter in Weimar als “Basis” für einige Ausflüge nach Thüringen genutzt. Weimar hat mich wirklich beeindruckt. Die Stadt hat eine sehr gute Atmosphäre, die Gebäude sind relativ gut Restauriert und der Park ist sehr groß. Alles in allem eine Stadt, an die man sich gewöhnen könnte.

Im Laufe der Woche haben wir noch Gotha und Erfurt besucht. Wir haben 5 oder 6 Jahre in Gotha gewohnt und zu einem kleinen Teil bin ich dort aufgewachsen. Um so heftiger sind die Unterschiede zu der Stadt, die man als 7 jähriger noch im Gedächtnis hat. Erfurt war mehr oder weniger ein “Kulturbesucht” bzw. Stadtrundgang. Der Doom, die Innenstadt und der Petersberg. Alles recht interessant und auf jeden Fall einen Blick wert.

Der Urlaub war wirklich erholsam und auch bitter nötig. Ich hätte zwar gerne noch einige Tage dran gehangen, aber mehr ist bis Ende November nicht drinne.

Ebenfalls erwähnenswert ist das Violinenkonzert vom letzten Samstag (gestern) in Oettingen. Nach einem … arbeitsreichen Tag bei meiner Schwester in Auhausen haben wir unentschlossen diese Konzert aufgesucht. Zu meiner großen Überraschung haben dort einige sehr gute Schüler gespielt. Ich habe zwar keines der aufgeführten Stücke gekannt, allerdings ist es beeindruckend, was für Geräusche man mit einer Violine machen kann. Die Akustik im Schloß Oettingen ist ebenfalls beeindruckend. Der Klang war durchgehen sehr klar und nie zu leise aber auch nicht zu laut… und das ohne jede Elektronik.

Das war es erst mal soweit, auf bald.

Abgelegt in: Programmieren, Sonstiges | Kommentare ansehen und hinterlassen

The Road to Drupal Hell

Vom 21. August 2006

Die Scriptsprache PHP ist ja nicht gerade unbeliebt und Drupal ist ein CMS, das in PHP geschrieben ist. Als ich vor einigen Tagen dort mal wieder vorbei geschaut hab, ist mir ein News-Eintrag aufgefallen: The Road to Drupal Hell.

Einige von euch wissen vielleicht, dass im hebräischen Glauben sowohl der Himmel, als auch die Hölle mehrere Schichten bzw. Schalen haben (ich glaub jeweils 7). Nun, für Drupal-Entwickler wurde nun eine 8 Schicht eröffnet. Reserviert speziell für Entwickler von drupalbasierenden Projekten, die zur Hölle gefahren sind.

Der Eintrag beschreibt desweiteren sehr gut, wie man in die Hölle gelangen kann (FAQ) und weist auch eine gute Raodmap für den Höllengang auf. Zu guter letzt kommt noch ein Diagram, das zeigt, wie man ein Projekt aufbauen muss, damit es zuverlässig den Weg in die Hölle findet.

Natürlich ist das eine Satiere über dass, was momentan leider oft unter dem Begriff Webentwicklung läuft. Nach meiner bisherigen (nicht all zu umfangreichen) Erfahrung kommt es häufig vor, dass Entwickler auf einem System aufbauen (z.B. auf Drupal oder phpBB), aber nicht versuchen, das System zu verstehen. Man baut es viel lieber einfach direkt um, so dass es einem gefällt. Natürlich kommen auch noch dazu, dass oft die Kunden nicht wissen, was sie wollen… und aus solchen Kunden eine klare Aussage raus zukriegen, ist manchmal recht schwer.

Das meiste Gewicht legt der Artikel auf Projektmanager. Persönlich hab ich in dieser Beziehung null Erfahrung, da ich bis jetzt an keinem Projekt gearbeitet hab, dass einen eigenen Projektmanager hatte. Allerdings währe so eine Person schon oft sehr praktisch gewesen, denn programmieren, designen und noch den Überblick über alles andere zu behalten, ist manchmal recht schwer. Wer weiß, vielleicht bei der nächsten Gelegenheit…

Abgelegt in: Programmieren | Kommentare ansehen und hinterlassen

Neuer Monitor und neue Bücher

Vom 18. August 2006

Gestern war irgend wie ein witziger Tag. Hatte zwar überhaupt keine Zeit um irgend was zu machen, aber eine Bestellung von Home of Hardware ist eingetrudelt. e-Bug, bei denen wir sonst immer bestellen, hatte die Hardware nicht auf Lager. Hauptsächlich war es Hardware für den PC eines Freundes, den mein Bruder zusammen baut, allerdings war auch mein neuer Samsung SyncMaster 940 BF TFT-Monitor dabei.

Ich bin daheim ein alter Fan von mehreren Monitoren und normalerweise arbeite ich auch mit zwei 19 Zoll CRT-Monitoren. Der TFT ist nun für einen speziellen Entwicklungsrechner, der zum einen mit Ubuntu-Linux laufen soll, aber zum anderen auch über drei Monitore verfügen soll. Zwei sind zwar für sowas wie Photoshop bzw. Inkscape nicht schlecht, aber beim Programmieren sind drei schon praktischer. Einen für den Quelltext (TFT, augenverträglicher), einen für die Dokumentation und einen für die Ansicht im Bowser.

Bitte haltet mich jetzt nicht für total verrückt… die drei Monitore hab ich im Laufe der letzten 6 Jahre zusammen getragen. Mein erster CRT (Medion, hatte damals kein Geld) stand mal über ein Jahr im Keller, da das Bild nur noch ein Regenbogen war. Später konnte ihn mein Bruder ganz unverhofft reparieren. Ein recht großer Transistor hatte eines seiner Kontaktbeinchen selbst ausgelötet. Damit hatte ich auf einmal zwei Monitore zur Verfügung und fand das ganz praktisch. Heute bin ich nun bei drei Monitoren angekommen. Wird sich aber noch zeigen, ob das so geht, wie ich es mir vorstelle.

Ok, genug von Hardware. Im Titel steht ja auch was von Büchern. Netter Weise ist ebenfalls gestern eine Lieferunge von SitePoint aus Amerika angekommen. Um genau zu sein die Bücher Deliver First Class Web Sites: 101 Essential Checklists und Build Your Own Web Site The Right Way Using HTML & CSS.

Deliver First Class Web Sites: 101 Essential Checklists hat mich in so fern beeindruckt, da es alles, was für gute Webseiten nötig ist, schön übersichtlich zusammen fast. Das ist eine ganze Menge und man verliert da recht leicht den Überblick. Erst recht wenn die Implementierung recht ungeordnet, vielleicht sogar planlos, erfolgt. Auf jeden Fall praktisch, um den Überblick über das Projekt zu behalten und das ist sehr, sehr viel Wert.

Build Your Own Web Site The Right Way Using HTML & CSS hab ich mir gekauft, weil es für Personen ohne Vorkenntnisse sehr leicht verständlich sein soll. Die Bücher von SitePoint sind zwar an für sich alle sehr gut verständlich, aber dieses Buch soll eben speziell den Einsteigern erklären, was es mit XHTML und CSS auf sich hat. Ich persönlich falle, zumindest nach meiner Auffassung, nicht mehr in das Zielpublikum dieses Buches. Allerdings habe ich meine liebe Not, weniger Erfahrenen Personen zu erklären, warum sie sich für die Hintergründe von XHTML und CSS interessieren sollten. Für jemanden, der einfach mal eine Webseite zusammenbauen will, sind die Vorteile daraus einfach nicht ersichtlich bzw. nicht relevant. Genau deshalb interessiert mich dieses Buch.

Abgelegt in: Programmieren, Sonstiges, Bücher, Romane, ... | Kommentare ansehen und hinterlassen (2)

History of Programming Languages

Vom 9. August 2006

Bin vor einigen Wochen über Digg auf das Ding gestoßen. An für sich ist es ein Poster von O’Reilly (PDF, 700 KByte), auf dem man den zeitlichen Verlauf von sehr, sehr vielen Programmiersprachen sehen kann. Dazu ist noch eingezeichnet, welche Programmiersprache Elemente einer anderen übernommen hat, usw. Zu dem Poster gibt es auch einen kleinen Artikel: The History of Programming Languages.

Ich fand diesen Geschichtlichen Aspekt von Programmiersprachen schon in meinem IT-Handbuch währen der Ausbildung recht interessant. Das Poster stellt das alles nun aber auch schön übersichtlich und an einem Zeitstrang dar.

Um auch dem ganzen den nötigen Respekt zu zollen: die Idee ist nicht direkt von O’Reilly, sondern von Éric Lévénez, der auf seiner Homepage auch ein aktuellers Diagramm davon pflegt und entsprechende Beschreibungen bzw. Links zu den Sprachen hat. Es ist allerdings nur schwarz/weiß und auch nicht ganz so übersichtlich.

Vor dem Studium werde ich dort wohl etwas mehr rumlesen. Sprachen wie Scheme, die komplett andere Denkweise nahe legen, sind garantiert mal eine gute Erfahrung. Es ist auch sehr nett zu sehen, welche Sprachen ein großteil der Elemente von Ruby geliefert haben.

Einen anderen Artikel, der auch ganz gut zu dem Thema passt, hab ich auch vor einiger Zeit gefunden: Teach Yourself Programming in Ten Years. Einige Leser hier kennen vielleich Bücher wie “Sprache X in 21 Tagen” & Co. In dem Artikel wunder sich der Autor etwas darüber, warum es jeder dabei so eilig hat.

Es werden dort auch ein paar gute Ratschläge genannt, welche Sprachen man sich zu Gemüte führen sollte. Nicht damit man sie kann, sondern damit man die Denkweisen dahinter versteht. Genau das hat mich daran so beeindruckt, denn genau das Verständnis der Denkweise hinter einer Sprache vermisse ich in meiner aktuellen Programmierumgebung. Für Personen, die das ganze als Hobby betreiben, ist das nicht wirklich wichtig. Wenn man allerdings sein Lebensunterhalt damit verdienen will und Geld für diese Arbeit bekommt, sollte man sich damit schon befassen. Ich programmiere jetzt seit über zwei Monaten mit Ruby on Rails, aber ich hab noch lange nicht die Denkweise dahinter komplett verinnerlicht…

Zu guter letzt noch ein kleins Zitat von Alan Perlis, das in dem Artikel vorkommt:

A language that doesn’t affect the way you think about programming, is not worth knowing.

Abgelegt in: Programmieren | Kommentare ansehen und hinterlassen

Die kürzeste Geschichte der Zeit… vorbei

Vom 24. Juli 2006

Das Buch ist für meiner einer nun Geschichte. Muss wirklich sagen, dass es die Zeit auf jeden Fall wert ist. Man bekommt wirklich einen ungefähre Vorstellung vom (mehr oder weniger) aktuellen Stand der Wissenschaft. Es wird auch Wert darauf gelegt, zu erklären, was eine “Theorie” eigentlich ist… und das eine Theorie nicht erklären kann, warum das Universum existiert, sondern nur wie.

Am besten man liest das Buch selbst, Zeitverschwendung ist es auf jeden Fall nicht. Im Gegensatz zu “Das Universum in der Nusschale” ist dieses Buch bei weitem nicht so anstrengend zu lesen. Hatte nie das Bedrüfnis, es für ein paar Tage mal weg zu legen. Hab jetzt auf jeden Fall wieder eine ganz, ganz grobe Übersicht über diese Themen (natürlich relativ gesehen).

Nun aber wieder zu “normaleren” Themen. Das Wochenende ist mal wieder in einen halben Schwimmbadbesuch ausgeartet… tauchen, kiloweise Algen fischen, das volle Program eben, zumindest für einen Schwimmteich. Die Hälfte des Tages bestand danach aus Programmieren am Teich, mit dem gemütlichen Geplätscher eines kleinen Baches. An für sich recht entspannend, aber wenn man schon im Sitzen so sehr schwitzt, dass einen der Schweiß von der Stirn runter läuft, ist man für eine gelegentlich Abkühlung und viel Trinken noch dankbarer. Hab ich schon die Fließen auf der Terrasse erwähnt? Wenn die Schmerzgrenze irgend wo bei 70°C liegt, müssen die wohl etwas heißer gewesen sein.

Der perfekte Ausklang allerdings war die kleine Grillparty am Abend. Da leider nicht alle Teile des Grills vorhanden waren, haben wir das Grillfeuer einfach in einem provisorischen Steinkreis im Carport (Betonboden mit einem Dache drüber) gemacht. Es war zwar schon dunkel, als wir zu grillen angefangen haben, aber dafür kammen die Kerzen und Fackeln besser zur Geltung. Der Witz der ganzen Sache war, dass es während des Essens angefangen hat, wie aus Eimern zu geißen. Tisch geschnappt, zwei Meter weiter unter dem Carport getragen und schon haben wir beim Essen den Regen zugeschaut. Tolle Atmosphäre, erstklassiges Essen (Kompliment an die Köche und Grillmeister)... was will man mehr?

Das wars dann erst mal wieder. Wenn ihr euch fragt, warum ich erst jetzt wieder etwas schreibe… Ich bau nach wie vor an der neuen Version dieser Seite hier und während ich das Design gemacht hab, hat mich der Perfektionismus gepackt. Was genau das bedeutet seht ihr hoffentlich bald selbst, in allen drei Facetten.

Abgelegt in: Programmieren, Sonstiges, Bücher, Romane, ..., Projekte | Kommentare ansehen und hinterlassen (2)

The Power of the Marginal

Vom 29. Juni 2006

Vor kurzem hab ich einen Text enteckt: The Power of the Marginal von Paul Graham. Heist so viel wie: “Die Kraft der Außenseiter”... naja, zumindest frei übersetzt. Bin über die RailsConf 2006 drauf gekommen.

Der Text hat bei mir mal wieder eine kleine Denkwelle ausgelöst. Über meine Zukunft, den Umgang mit meinem Fachwissen, das Verhalten anderen “Insidern” gegenüber und vor allem die Art und Weise meiner Projekt.

Es ist zwar nicht falsch, Projekte gut zu planen, vor allem bei mehreren Teammitgliedern, aber es schränkt auch die Kreativität sehr ein. Ich hab selbst schon vor ca. zwei Jahren damit angefangen, alles durchzuplanen… allerdings fühlt man sich dadurch früher oder später fast wie eine Maschiene. Noch dazu hat diese “Laune” zu einem (inzwischen beigelegten) Streit zwischen mir und einem meiner besten Freunde geführt, wodurch die ZGR-Website fast hops gegangen währe. Nach einigen Monaten war diese “Laune” glücklicherweise auch vorbei.

Auf jeden Fall kann ich jedem angehenden Programmierer, Künstler, Designer, oder was auch immer, empfehlen, den Essay durchzulesen. Ich musste zwar einige male ein Übersetzungprogramm bemühen und es war an manchen Stellen nicht sehr leicht allem zu folgen, aber der Text ist es definitv wert.

Hier ein paar Textstellen, die mir besonders gut gefallen haben:

The eminent, on the other hand, are weighed down by their eminence. Eminence is like a suit: it impresses the wrong people, and it constrains the wearer.

Lord Acton said we should judge talent at its best and character at its worst. For example, if you write one great book and ten bad ones, you still count as a great writer—or at least, a better writer than someone who wrote eleven that were merely good. Whereas if you’re a quiet, law-abiding citizen most of the time but occasionally cut someone up and bury them in your backyard, you’re a bad guy.

If I could go back and redo my twenties, that would be one thing I’d do more of: just try hacking things together. Like many people that age, I spent a lot of time worrying about what I should do. I also spent some time trying to build stuff. I should have spent less time worrying and more time building. If you’re not sure what to do, make something.

Ich werde noch eine Weile brauchen um das alles richtig in meinem Kopf und mein Verhalten einzusortieren, aber so einen Text liest man auch nicht alle Tage.

Auf der anderen Seite hab ich heute früh bescheid bekommen, dass ich meine Zivistelle erst ab März haben kann. Dadurch überschneidet sich allerdings der Zivildienst und die BOS, die ich danach besuchen will, um zwei Monate. Leider werde ich mir dann wohl eine andere Stelle in der Umgebung suchen müssen, auch wenn es mir dort evt. viel Spaß gemacht hätte.

Ist schon schön, sowas… vor allem da ich in 7 Tagen meine letzte und endgültige Abschlussprüfung hab. An für sich sollte man sich da auf andere Dinge Konzentrieren…

Abgelegt in: Programmieren, Sonstiges | Kommentare ansehen und hinterlassen

Wieder viel zu tun…

Vom 19. Juni 2006

Mein “Arbeits”-Urlaub ist leider seit heute vorbei und nun muss ich wieder in Augsburg arbeiten. Vom Tagesablauf her ist es kein all zu großer Unterschied, nur dass ich nun wieder 5:40 Uhr aufstehen muss und 3½ Stunden auf dem Weg von und zur Arbeit verbringe. Wie schön, dass unser Büro an der westseite Fenster hat, da lernt man die Sonne nachmittags richtig lieben. Naja, was solls. Das Leben geht weiter und die Arbeit wird nicht weniger…

Zu allem Überfluss ist am Wochenende noch mein USB-Stick abgeraucht. Da ich schon bei einigen Festplatten Datenrettungen durchgeführt habe und meine USB-Sticks bis jetzt immer ohne Probleme liefen, hielt ich die Dinger fälschlicher weise für sicher. Die Quittung kahm prompt: Ein paar Tage oder Wochen Arbeit futsch, der letzte Monat des Berichtsheftes ist übern Jordan und der 15seitige Entwurf des neuen Onlineshops meiner Firma auch… Das “kleine” Dilemma hat den Berg Arbeit nur noch etwas größer gemacht. Möge er in Frieden ruhen und ich möglichst bald einen neuen bekommen (10 Jahre Garantie).

Aber das Leben besteht nicht nur aus negativen Sachen, auch wenn man sich die besser merkt. So hab ich vor ein paar Tagen beim Ruby on Rails Weblog einen Eintag über CRC-Karten gelesen. Simple Papierkarten, auf die man den Namen der Klasse, ihre Zuständigkeiten und Verbindungen zu anderen Klassen einträgt. Eine Simple Idee, die die Entwicklung von objekteorientierten Anwendungen zumindest für mich etwas einfacher gemacht hat. Jetzt spielt sich nicht mehr alles im Kopf ab, sonder man hat auch etwas greifbares auf dem Tisch liegen. Ich hab zwar davor schon mal ähnliche Software ausprobiert, aber als alter bzw. junger Notziblock-Fan sind mir die Karten deutlich lieber. Mich erstaunt es immer wieder, wie sehr solche Kleinigkeiten die Entwicklung angenehmer machen… und dass man sowas nicht in der Ausbildung lernt. Veileicht lese ich auch nur die falschen Bücher. Mal sehen, ob es irgend wo eine FH gibt, auf der man auch praktische Ding wie CRC-Karten lernt.

Eine andere gute Erfahrung war auch die ZGR PfingstLAN am letzten Wochenende. War bei weitem nicht so stressig wie die vorherigen LANs und anscheinend hat es den meisten Leute wieder Spaß gemacht. Es gibt zwar noch viel zu tun, aber so langsam wird es mit den ZGR-LANs was. Zwar ist dort auch mein USB-Stick samt Inhalt verstorben, aber im nachhinein war es ein gerechter Tausch. Allerdings hab ich auch ein etwas schlechtes gewissen, denn manche Leute waren nicht all zu lange auf der LAN und dafür dann 5 € zu kassieren war eigentlich übertrieben. Aber leider passt eine einfach Lösung eben nicht zu allen Fällen.

Auf der anderen Seite hat sich auf dieser LAN endlich ein langes Problem gelöst. Manchmal kam es vor, dass diverse Rechner im Netz einen bestimmten Rechner nicht gefuden haben. Schon ein Ping auf diesen Rechner ging nicht, alle anderen hingegen schon. Allerdings ging auf anderen PCs der Ping auf den fragwürdigen Rechner ohne Probleme. Auf dieser LAN bin ich der Sache etwas auf den Grund gegangen und hab herausgefunden, dass selbst der ARP-Request (wandelt IP-Adresse in MAC-Adressen um) nicht hinhaut. Aber was kann bei einem ARP-Request schief gehen… viele Techniker wissen ja nicht mal, dass es sowas gibt. Die Lösung des Problem ergab sich bei einem Blick auf den ARP-Cache:

[fragwürdige IP-Adresse] 00-00-00-00-00-00 ungültig!

Auf den fragwürdigen Rechnern wurden OnBoard Netzwerkanschlüsse verwendet und manche Hersteller (SiS, Marvel) neigen anscheinend dazu, keine MAC-Adressen einzutragen. An für sich ist nicht definiert, was bei so einer MAC-Adresse passieren soll, aber manche Netzwerkkarten, Chips und Treiber akzeptieren diese Adresse wohl nicht. Logischer weise geht auch nichts, wenn zwei Rechner mit der gleichen Nuller-MAC-Adresse im Netz sind. Ursache erkannt, Problem schnell behoben: MAC-Adressen eingetragen und schon gings. :)

Um ehrlich zu sein hat mir das auf der LAN am meisten Spaß gemacht, den zum Spielen bin ich nicht all zu oft gekommen…

Abgelegt in: Programmieren, Ausbildung, ZGR | Kommentare ansehen und hinterlassen (2)

Projekte

Simple Localization
Ein einfaches, aber macht- volles Übersetzungsplugin für Ruby on Rails.
Table Navigation
Ein jQuery Plugin um per Tastatur schnell durch Tabellen zu navigieren.

Über was ich schreibe…

Newsfeeds

Kommentare