Netzwerkprobleme: Fall gelöst?

Posted by : MOnsDaR | Samstag, 27. Februar 2010 | Published in

Falls du das erste mal hier liest, kannst du dich HIER und HIER darüber informieren, was mein WLAN-Netz für Probleme bereitet.

In den letzten Tagen habe ich wie vom Netgear-Support empfohlen verschiedene MTU-Größen ausprobiert. Ich kam zu folgenden Ergebnissen:

MTU von 1500: Dies ist die Standard-Einstellung mit er das Netz alle 1-2 Tage verschwand.

MTU von 1430: Diese Einstellung habe ich als erstes getestet. Ein großer Unterschied zur Standardeinstellung sollte doch auch die besten Ergebnisse zeigen habe ich mir gedacht. Dummerweise hielt das Netz mit dieser Einstellung keine 12 Stunden.

MTU von 1468: Ich war sehr überrascht, als ich nach 2 Tagen immernoch andere Hosts anpingen konnte. Die Ernüchterung folgte jedoch an Tag 3: Das Netz war mal wieder verschwunden.

MTU von 1492: Inzwischen läuft der Router seit 7 Tagen problemlos mit dieser MTU-size. Ich kann nach wie vor noch alle anderen Hosts anpingen. Ich bin gespannt, ob das auch noch längere Zeit so bleibt oder ob es ein glücklicher Zufall ist.

Habe dem Netgear-Support nun mitgeteilt, dass das Problem wahrscheinlich gelöst ist und ich mich nach etwas längerer Zeit nochmal melde.

C++-Entwicklung mit KDevelop 4

Posted by : MOnsDaR | Donnerstag, 25. Februar 2010 | Published in

Ich habe bereits einige C++ Entwicklungsumgebungen unter Linux getestet, doch bisher konnte mich keine wirklich überzeugen.

Es gibt für Linux eine Vielzahl von mehr oder weniger guten IDEs. Sie alle bringen vielversprechende Features wie Intellisense, Subversion-GUI oder eingebaute Debugger mit sich. Leider habe ich bisher keine IDE kennengelernt, mit der ich rundum zufrieden sein konnte. Entweder waren Features schlecht umgesetzt, halbfertig oder es fehlten grundlegende Dinge.

Früher oder später bin ich immer zu meiner Basis bestehend aus einem einfachen Texteditor (Kate), einem Terminal (Konsole) und dem Debugger gdb zurückgekehrt. Als Build-System wird CMake eingesetzt.

Vor circa einem Monat bin ich mehr durch Zufall über KDevelop 4 gestolpert. Bereits Anfang 2008 wurde die Entwicklung begonnen. Im April desselben Jahres erblickte die erste Alpha-Version das Tageslicht. Seitdem ist viel Zeit vergangen, man kann sich auf der Homepage des Projekts die Beta8 herunterladen. Ende März soll die Release-Version erscheinen.

KDevelop 4 benutzt als Basis Kate mit all seinen Vorzügen. Es bietet zusätzlich viele eigene Features, die aus dem Texteditor eine vollwertige Entwicklungsumgebung machen.

Alle Features in einem Artikel vorzustellen, würde wahrscheinlich Blogger explodieren lassen, weshalb ich in den folgenden Tagen nach und nach die Höhepunkte der IDE vorstelle. Seid gespannt, was da kommt.

MediaMasher: Pluginframework läuft

Posted by : MOnsDaR | Samstag, 20. Februar 2010 | Published in

Die freie Zeit am heutigen Samstag habe ich genutzt, um ein wenig am MediaMasher zu basteln.

Assembla
Das Projekt hat schon seit einigen Tagen einen Space bei Assembla. Dieser wird derzeit primär als Subversion-Hoster genutzt. Später kann aber auch die Wiki-Funktion oder ein Bugtracker-System genutzt werden.
Falls sich jemand für den derzeitigen Stand interessiert, kann er HIER auf das Subversion-Repository zugreifen.

Plugin Framework
In letzter Zeit habe ich meine ersten richtigen Schritte in Python gemacht und versucht, ein Pluginframework für Sourceplugins zu implementieren. Ein Klassendiagramm vom Aufbau habe ich ja bereits im ersten MediaMasher-Artikel gepostet.
Seit heute (Revision 12) läuft das Ganze nun. Bisher gibt es Plugins, um HTTP-Quellen und lokale Dateien in abspielbare URIs umzuwandeln.

GUI
Als Hauptprogramm habe ich eine sehr einfache GUI (ohne Inhalt) erstellt, die eigentlich nur als Hülle für Phonon dient.

Derzeitiger Stand
Es ist momentan möglich, eine gegebene URI in eine abspielbare Source zu konvertieren und diese dann abzuspielen.
Mal sehen, was ich demnächst in Angriff nehme. Bevor ich die GUI erstelle, sollte zunächst der Rest stehen. Das heißt ein einfaches Package für die Datenbank-Anbindung wird erstellt. Auch wäre ein etwas "intelligenteres" Plugin für einen Dienst wie Youtube oder Dailymotion denkbar.

CMake und CTest - 'make test' geht nicht

Posted by : MOnsDaR | Donnerstag, 18. Februar 2010 | Published in

Will man sein Programm mit Hilfe des in CMake eingebauten Testtools CTest testen, kann man schnell über folgenden Fehler stolpern:

Nachdem man mit den Befehlen
enable_testing()
add_test(testName testExecutable)
die Tests definiert hat, kann man wie gewohnt das Projekt generieren.
Auch ein Aufruf von make und make install läuft fehlerfrei ab.

Doch leider ergibt die Eingabe von make test nicht das gewünschte Ergebnis - Es passiert einfach garnichts.

Dies liegt wahrscheinlich daran, dass die Tests nicht in der obersten CMakeLists.txt aufgerufen werden. Der Befehl
enable_testing()
muss allerdings in der Root-CMakeLists.txt stehen, sonst wird CTest nicht ausgeführt und make test führt somit ins leere.

MediaMasher: Umsetzung via kioslaves?

Posted by : MOnsDaR | Dienstag, 16. Februar 2010 | Published in

Ein Entwickler in #python.de machte heut den Vorschlag, so etwas wie MediaMasher doch mit den KDE I/O Slaves (kioslaves) zu lösen.

Doch was sind kioslaves? (es folgt eine einfache, technisch nicht 100%ig richtige Erklärung)
Unter KDE greift man mit dem Konqueror (Counterpart zum Windows Explorer) nicht direkt auf die Dateien des Dateisystem zu, sondern nur auf eine Zwischenschicht. Diese Schicht liefert dem User die jeweiligen Dateien, die hinter dem Dateipfad liegen. Im Normalfall sind das wie unter Windows bekannt ganz normale Dateien:

Allerdings ist mehr möglich, als sich nur die Dateien hinter einem Dateipfad anzeigen zu lassen.
So kann man durch Eingabe von
ftp://ServerAdresse/Ordner/
direkt auf einen FTP-Server zugreifen. Die Dateien und Ordner auf dem Server werden angezeigt wie normale Dateien auf der Festplatte auch.

Ein anderes Beispiel ist die Eingabe von
audiocd:/
Hierdurch wird der Inhalt der zurzeit eingelegten Audio-CD angezeigt. Zusätzlich befindet sich ein Ordner "ogg" in der Anzeige. In diesem sind die Songs der CD in das freie Soundformat Ogg-Vorbis konvertiert. Wie aus einem normalen Ordner kann man die Dateien in andere Ordner der Festplatte kopieren.

Dies war nur eine kleine (technisch nicht 100% richtige) Einführung in kioslaves, wer mehr erfahren möchte, kann sich in einem Artikel auf Pro-Linux.de informieren.


Was hat das Ganze jetzt mit dem MediaMasher zu tun? 
Denkbar wäre es, eine neue URI youtube:// einzuführen. So würde der Link
http://www.youtube.com/watch?v=ABnyHNgE2Q8
So dargestellt werden:
youtube://ABnyHNgE2Q8
Dem User würden als "Ordnerinhalt" die verschiedenen Videos dargestellt werden, die man sich unter der Url anschauen kann. Neben dem Standardformat gibt es ja auf Youtube seit einiger Zeit auch Videos in HD-Auflösung.

Mit einem Player, der dies unterstützt, könnte man "Dateien" in diesem Ordner zur Medialibrary hinzufügen. Dass die Videos dabei garnicht von der Festplatte kommen, würden weder Player noch User merken.

Nachteile:
Leider ist die KDE Software Compilation derzeit noch nicht vollständig portabel und derzeit nur unter Linux wirklich einsetzbar. Auch würde der Einsatz von kioslaves weitaus mehr abhängige Programme mit sich ziehen, wenn man das Ganze auf einem anderen System wie Windows installieren möchte.
Hinzu kommt, dass das Konzept der kioslaves noch in den Kinderschuhen steckt.
Fazit:
Eine wirkliche Alternative zum MediaMasher sind die kioslaves nicht, jedoch ein interessanter Ansatz, dasselbe Problem zu lösen. Wer weiß, wie sich das Projekt entwickelt und ob nicht in einigen Jahren solch ein System zum Standard avanciert ist.

Ich habe in den Bugtracker des KDE-Projekts mal einen Wish eingetragen, der in etwa dasselbe enthält wie in diesem Blogeintrag.

Test: Syntax Highlighting in Blogger

Posted by : MOnsDaR | | Published in

Sobald es um Software-Entwicklung geht, ist natürlich auch vernünftiges Syntax-Highlighting nötig.
Glücklicherweise liefert Google uns hierzu diverse Möglichkeiten.

Entschieden habe ich mich schlussendlich für das auf JavaScript basierende Highlighting von Alex Gorbatchev. Auf seiner Seite findet man alle Informationen zur Einbindung in den eigenen Blog.

Hier ein Beispiel:
#include < iostream>
int main()
{
    std::cout << "Hello Sergej!" << std::endl;
    return 0;
}
Und weil es so schön ist:
if __name__ == '__main__':
     print "Hello Ferlich!"
Die oben geschriebenen Sourcen veröffentliche ich im übrigen unter der "Do What The Fuck You Want To" Public Licence.

Kurz Notiert - Merkwürdiges verhalten im Joomla Backend

Posted by : anysniper | | Published in

Ihr könnt in eurem Joomla Backend keine Beiträge oder Ähnliches bearbeiten oder erstellen und das Menü ist nicht anwählbar? Da mir der Fehler auch öfters passiert, hier die Lösung:

Dieser Fehler ensteht, wenn bei der URL die im Browser eingebeben wird, das "a" von Administrator groß geschrieben wird.

Lösung:

Anstatt:

http://url/joomla/Administrator

gebt Ihr:

http://url/joomla/administrator

ein.

ping.py - Portable Ping mit Python

Posted by : MOnsDaR | Montag, 15. Februar 2010 | Published in

HIER habe ich ja schon darüber berichtet, dass in unregelmäßigen Zeitabständen mein Heimnetz abraucht.
Um nun mal zu prüfen, zu welcher Uhrzeit und nach welcher Dauer das Netz verschwindet, wollte ich mit einem Tool zwischen 2 Hosts pingen und mitloggen, wann die Verbindung nicht mehr möglich ist.
Ich erhoffte an dem Ergebnis zu sehen, ob das Netz immer zur selben Uhrzeit ausfällt und dementsprechend mit dem 24h-Disconnect meines Providers zu tun hat.
Auch hätte es sein können, dass mein Router es nicht schafft, das Netz länger als 12 Stunden aufrecht zu erhalten. Diese Info wäre für Netgear sicherlich interessant gewesen.

Nun gibt es leider haufenweise Ping-Tools für Windows und Linux. Meistens sind sie hoffnungslos überfrachtet mit Funktionalität oder können nicht mehr als normale Pings ausführen (da gibt es doch Systemwerkzeuge?).

Da unsereins sowieso grad Python lernen wollte, habe ich mich also mal informiert, was die Sprache mir für Möglichkeiten bietet.
Scheinbar ist kein Ping()-Befehl mit an Bord, allerdings kann man sich bei G-Loaded ein Script herunterladen, dass es einem erlaubt, portabel zu Pingen.
Das Script an sich bietet eine Methode, die es erlaubt, einen Ping an eine bestimmte Adresse mit festgelegtem Timeout zu senden.
Auf Grund dieser Basis habe ich dann flux eine Main geschrieben, die alle 30 Sekunden einen Ping an meinen Medien-PC absetzt und einen Misserfolg in eine Datei loggt. Schon war mein Pinglogger fertig.

Für Interessierte habe ich das von mir geänderte Script bei PasteBin hochgeladen. Das Script beinhaltet die Funktionen aus dem Script von G-Loaded. Lediglich eine neue Main habe ich spendiert (ganz unten).


Das Ergebnis des Tests war leider etwas anders als erwartet:
Das Netz lief stabil ohne einen einzigen fehlgeleiteten Ping. Nach ca 72 Stunden habe ich den Versuch abgebrochen.
Nachdem ich das Ping-Programm ausgestellt habe, hat es übrigens keine 12 Stunden gebraucht, bis die Hosts sich wieder verloren haben.

Weiteres Vorgehen:
Der Netgear-Support ist verständigt, bisher wurde mir als Lösung vorgeschlagen, die MTU von 1500 auf die Werte 1430, 1468 und 1492 zu stellen.
Ein Test mit 1430 verlief negativ, die anderen Tests sind in Arbeit.

Ich habe das Gefühl, Netgear weiß selbst nicht, wo das Problem sein könnte.

Spam vermeiden mit GMail

Posted by : MOnsDaR | | Published in

Google bietet mit seinem Email-Dienst ein kaum bekanntes, aber sehr nützliches Feature:

Eine Mailadresse wie user@gmail.com kann beliebig durch einen Suffix erweitert werden. Dieser Suffix beginnt mit einem '+'.

Das heißt, dass Emails mit dem Ziel  
user+suffix@gmail.com oder
user+irgendeintext@gmail.com
an den Account user@gmail.com weitergeleitet werden.

Wird man bei der Registrierung bei einer Seite wie Twitter dazu aufgefordert, eine Mail anzugeben, kann man beispielsweise user+twitter@gmail.com angeben.
Alle Mails von Twitter bekommt man nun an diese Adresse. Erhält man jetzt Spam von dubiosen Apotheken, russischen Webcam-Besitzerinnen oder Nigerianischen Kronprinzen - und ist dieser an user+twitter@gmail.com adressiert, weiß man direkt, wer Schuld an der Misere ist.
Mit Leichtigkeit kann man einen Filter einrichten, der alle Mails an user+twitter@gmail.com in den Spam-Ordner verschiebt.

Meiner Meinung nach ein extrem nützliches Feature. Mich wundert, dass dies noch nicht weiter verbreitet ist.

Verschachtelte Ajax Requests

Posted by : anysniper | | Published in

Heute bin ich beim Programmieren auf einen Fehler gestoßen der wohl nur Ajax Anfängern passieren kann.

Ich wollte innerhalb eines Response Handlers einen erneuten Ajax Request ausführen.
Dies führte zu einem sehr undurchsichtigem verhalten der Anwendung.
Zunächst dachte ich ich hätte einen Bug in FireBug gefunden. Dem war aber nicht so.

Ich habe einen tödlichen Fehler begangen und alle Requests auf ein einziges XMLHttpRequest Objekt Initialisiert und somit den ReadyState des vorherigen Requests überschrieben.

Damit euch dieser Fehler nicht passiert:
Bitte legt bei verschachtelten Ajax Requests für jeden Request ein eigenes XMLHttpRequest Objekt an.

Hoffe dem ein oder anderem hilft dieser Tipp ;)

Hello World ²

Posted by : anysniper | | Published in

Hallo Zusammen,

möchte mich auch einmal kurz vorstellen.

Ich arbeite in der selben Firma wie Monsdar als Webentwickler.

Habe also beruflich und privat mit allem was Ajax, XML, PHP usw. angeht zu tun.

Täglich stolpere ich in diesem Bereich auf Probleme die sich nur durch sehr viel Recherche lösen lassen.

Um euch diese Arbeit zu ersparen werde ich hier Lösungen für Probleme posten die ich während meiner Arbeit gefunden habe.

Soweit Happy Programming,
AnySniper

Netzwerk-Probleme

Posted by : MOnsDaR | Sonntag, 14. Februar 2010 | Published in

Um alle Geräte in meiner Wohnung miteinander zu vernetzen und ihnen Internetzugang zu ermöglichen, habe ich mir vor einigen Monaten einen Netgear WNR2000 Wireless-Router zugelegt.
 
Derzeit hängen in diesem Netz bis zu 7 Geräte:

Art Modell Betriebssystem
Medien-PC
eeeBox B206  
Windows XP
Laptop
ASUS N50V  
Kubuntu 9.10
Netbook
eeePC 1101HA  
Win7 Home
Desktop-PC --- Win7 Prof
Handy
Nokia E52  
Symbian S60 3rd
Drucker
Epson SX510W  
---
Wii --- ---

Alle Hosts haben über den Router (192.168.1.1) Zugriff aufs Internet.

Jetzt gibt es allerdings folgendes Problem:
Nachdem der Router etwas länger als einen Tag läuft, können sich die Hosts gegenseitig nicht mehr sehen. Pings von 192.168.1.2 zu 192.168.1.3 funktionieren dann einfach nicht mehr.
Den Router sehen weiterhin alle, auch der Zugriff aufs Internet funktioniert.

Das ist insofern ärgerlich, als dass der MedienPC auch als Fileserver dient und somit den anderen PCs alle Daten bereitstellt, die sie benötigen. Weiterhin ist mein Laptop meistens an die Bildschirme + Tastatur des Desktop-PCs angeschlossen, so dass ich via Synergy beide Systeme mit derselben Peripherie bedienen kann.
Auch der Drucker ist nur über das WLAN verfügbar. Das heißt, wenn das Netz mal wieder verschwunden ist, kann man nicht drucken.

Eine Lösung für das Problem ist, den Router hart zu resetten -> Strom aus und wieder an. Das Netz wird neu initialisiert und funktioniert wieder für einen Tag.

Das kann natürlich nicht die endgültige Lösung sein, weshalb ich mich mal an den Netgear-Support gewandt habe. Ich werde berichten, wenn sich etwas tut.

Integer Overflow in Python?

Posted by : MOnsDaR | Samstag, 13. Februar 2010 | Published in

Beruflich bedingt habe ich bisher fast ausschließlich Erfahrungen mit streng typisierten Sprachen wie C++ oder C# gesammelt.

Im Unterschied zu diesen Sprachen muss man bei Python den Datentyp einer Variable nicht angeben. Doch was passiert, wenn man eine Variable mit einem Integer füllt und diesen über 32bit hinaus befüllt?

Dank des Interactive Mode des Python-Interpreters kann man das schnell ausprobieren:

>>> testInt = 0xffffffff
>>> print testInt
4294967295              #maximum Integer with 32bit
>>> testInt = testInt + 1
>>> print testInt
4294967296              #Integer is now casted to float
>>> testInt = testInt * testInt
>>> print testInt
18446744073709551616    #float is nearly unlimited


Der oben dargestellte Code erstellt einen Integer mit maximalem Wert. Dieser Wert wird zur Kontrolle ausgegeben. Im weiteren Programm wird der Integer um 1 erhöht. Dies würde in Sprachen wie C++ zu einem Buffer Overflow führen. In Python allerdings wird der Wert fortan als float behandelt. Diese haben keinen wirklichen Maximalwert, wie auch im weiteren Programmverlauf zu sehen ist.

Übrigens:
Dasselbe Verhalten legt auch die Sprache PHP und sicherlich einige andere typenlose Sprachen an den Tag.

Projektidee: MediaMasher

Posted by : MOnsDaR | | Published in

Worum gehts?
Wenn man sich abseits von überteuerten Alben und Singles im nächsten Plattenladen neue Musik anhören möchte, gibt es online wie auch offline haufenweise legale Möglichkeiten.

Neben dem altbewährten Radio oder Diensten wie Grooveshark und Last.fm kann man inzwischen auch auf Youtube, DailyMotion oder MyVideo Songs seiner Lieblingsinterpreten in guter Qualität anhören.
Letztgenannte Videopages haben inzwischen Verträge mit größeren Musiclabeln und bieten meist auch das passende Musikvideo mit an.

Neben der altgedienten MP3, die man via ITunes oder Napster (meist inklusive nervigem DRM) erwerben kann, gibt es also noch eine ganze Menge weiterer möglicher Quellen für Musik.

Die Idee
Wenn man etwas darüber nachdenkt, liegt auf der Hand, was jetzt kommt:
Ein Musikplayer, dem es egal ist, wo die Musik herkommt. Ein Song verfügt nicht mehr nur über einen Dateipfad zur lokalen MP3 sondern alternativ über einen Link zum entsprechenden Youtube-Video oder einem FTP-Server der Musikdateien enthält.
Natürlich kann Musik nicht nur via MP3 kodiert sein, andere Formate wie ogg oder wma sind möglich. Wenn ein passendes Video enthalten ist, gibt es viele weitere Möglichkeiten wie mp4, wmv, avi oder mkv.

Das Design
Datenbank
Songs sollten wie oben schon beschrieben, mehr als eine mögliche Quelle enthalten. Ein Song wird nicht mehr durch eine Datei auf der Festplatte beschrieben.
Um als Player zu funktionieren, sollte der MediaMasher mehr als einen Song am Stück abspielen können, weshalb die Datenbank um eine Playlist-Tabelle erweitert wird.
Abseits der funktionalen Anforderungen an die Datenbank kann man natürlich noch einige Tabellen und Attribute für Zusatzinformationen hinzufügen. Von Interpreten über Genres, Bewertungen, Alben bis hin zum Entstehungsjahr des Songs ist alles denkbar.




Ein großer Vorteil der dezentralisierten Datenhaltung ist, dass Songs auf jedem Computer mit Netzzugang abgespielt werden können. Das heißt im Klartext:
Man kann die Libraries von Freunden und Bekannten übernehmen, diese mergen und somit eine große Datenbasis aufbauen, die bei allen Usern gleichgut funktioniert.

Weiterhin muss für einen Song nurnoch angegeben werden, wo er sich befindet. Es hängt keine große Datei mehr an ihm.
Eine Musiksammlung mit mehreren tausend Songs wäre lediglich einige Kilobyte groß und könnte überall abgespielt werden.

Programmlogik
Nicht jede Source kann direkt abgespielt werden. Der Youtube-Link gibt nicht preis, wo sich die dazugehörige flv-Datei befindet.
MediaMasher muss in der Lage sein, eine gegebene URI in ein abspielbares Format zu bringen.
Hier kann man wie unten dargestellt eine Factory programmieren, die durch Plugins erweitert werden kann und gegebene URIs in abspielfähige Sources verwandelt.


Wie im Bild dargestellt gibt es mehrere Plugins, die jedes für einen bestimmten URI-typ zuständig sind. Je nachdem, welche Plugins ein User hat, kann er andere URIs abspielen.
Mit der Funktion isResponsible() kann die Factory überprüfen, ob ein Plugin eine gegebene URI verarbeiten kann.
Die Funktion getSource() gibt dann die entsprechende Mediasource zurück.

Abspielen der Sources
Derzeit ist unter der Haube des KDE-Projekts unterstützt von den QT-Entwicklern die Multimedia-Library Phonon in Entwicklung.
Phonon kann nahezu alle übergebenen Sources abspielen. Hierbei werden alle auf dem System installierten Codecs genutzt.
Phonon und seinen Möglichkeiten werde ich demnächst sicherlich noch den ein oder anderen Blogeintrag widmen.

GUI
Die Oberfläche des Players sollte relativ einfach gehalten sein. Wer den WinAmp-Lite kennt, weiß wie simpel ein guter Mediaplayer aussehen kann.
Zusätzlich zur Player-Oberfläche muss es noch Möglichkeiten geben, neue Songs hinzuzufügen, die Library zu bearbeiten oder zu ex/importieren.
Natürlich kann man bei fortschreitendem Entwicklungsstand auch die GUI entsprechend erweitern.

Die Umsetzung
Derzeit bin ich nach Feierabend ab und an dabei, das Design des MediaMashers zu erarbeiten.
Das Programm sollte sehr leicht zu verwenden und zu erweitern sein. Portabilität und modularer Aufbau sind sehr wichtig.

Die Sprache Python erfüllt alle oben genannten Kriterien. So bietet mir das Projekt also eine gute Möglichkeit, endlich mal Python zu lernen.

Für die GUI und die Soundwiedergabe kann der Python-Port PyQt4 genutzt werden. Die Datenbasis lässt sich mit dem eingebauten SQlite-Support ansprechen und Plugins lassen sich auch einfach realisieren.


Ich werde euch natürlich auf dem laufenden halten, was den Fortschritt des Projektes und mein Abenteuer mit Python angeht.
Stay tuned ;)

Hello World

Posted by : MOnsDaR | | Published in

Herzlich Willkommen an einen der ersten Leser!
Nach langem Hin und Her ist es getan, auch Sergej Ferlich ist unter die Blogger gegangen.

Doch wer bin ich und was mache ich hier?
Ich bin Softwareentwickler in einem größeren Betrieb, lerne auf der Arbeit und auch im Feierabend des Öfteren interessante neue Techniken, Programme oder Sprachen kennen und möchte das Ganze endlich mal aus meinem Kopf herauslassen.
Es muss schließlich noch mehr Menschen dadraußen geben, die sich für solche Dinge interessieren.

Die Beiträge beschränken sich auf kein spezielles Gebiet. Es geht um die Entwicklung von Software und allem was dazugehört. Ob das nun ein nützliches Tool, eine Programmiertechnik, eine praktische Library oder eine Projektidee ist.

Ich hoffe das hat schonmal Lust auf mehr gemacht, seid gespannt auf das, was demnächst kommt.