Hug a developer today!
Mittwoch, den 28. Januar 2009Sorry Sascha, das muss ich trotzdem (auch) bloggen.
Ihr Browser versucht gerade eine Seite aus dem sogenannten Internet auszudrucken. Das Internet ist ein weltweites Netzwerk von Computern, das den Menschen ganz neue Möglichkeiten der Kommunikation bietet.
Da Politiker im Regelfall von neuen Dingen nichts verstehen, halten wir es für notwendig, Sie davor zu schätzen. Dies ist im beidseitigen Interesse, da unnötige Angstzustiände bei Ihnen verhindert werden, ebenso wie es uns vor profilierungs- und machtsächtigen Politikern schützt.
Sollten Sie der Meinung sein, dass Sie diese Internetseite dennoch sehen sollten, so können Sie jederzeit durch normalen Gebrauch eines Internetbrowsers darauf zugreifen. Dazu sind aber minimale Computerkenntnisse erforderlich. Sollten Sie diese nicht haben, vergessen Sie einfach dieses Internet und lassen uns in Ruhe.
Die Umgehung dieser Ausdrucksperre ist nach §95a UrhG verboten.
Mehr Informationen unter www.politiker-stopp.de.
Sorry Sascha, das muss ich trotzdem (auch) bloggen.
Oberhausen und Umgebung sind wie ausgestorben. Es gibt nur noch wenige Locations, wo sich direkt viel zu viele Leute tummeln, die man sowieso schon alle kennt. Ein mittlerweile leider ausgestorbenes Fleckchen ist die Turbinenhalle in Oberhausen. Einst war sie eine geniale Partylocation, die vor allem an Donnerstagen besonders beliebt war. Nach einigen Besitzerwechseln und Umbauten hat die Turbinenhalle leider ihr Klientel ersatzlos verloren. Zu Hochzeiten gab es in der Turbinenhalle 5 Hallen: Blade (EBM, Metal, …), T-Club (Rock, Charts, New Metal, …), Main Hall / Cosmo / Kammer (Techno, Trance, House, Schranz, …). Zu der Zeit war die Turbinenhalle sehr gut besucht – trotz ihrem Ruf einer Drogen- und Schlaegerdisco (habe ich nie wirklich beobachtet…). Mittlerweile gibt es das Blade nicht mehr. Jetzt heisst es Turbostadl, beinhaltet 1-5 Menschen im Schnitt pro Abend und jault Schlager. Der T-Club wird in der Regel von 20 Leuten pro Abend besucht und dort laufen mittelmaessige aufgezwungene Rock-Charts. Die Main-Hall ist noch immer so wie frueher – bis auf die Anzahl der Menschen natuerlich. Dort sind maximal 150 im Schnitt pro Abend.
Ich kann gut verstehen, dass jedesmal die selbe eintoenige Musik gespielt wird. Das liegt wohl daran, dass niemand sich mehr was wuenscht (damals musste man Schlange stehen…). Aber wenn nur genug Leute dahingehen, dann wird auch wieder mehr gewuenscht und die Location gewinnt wieder an Charme.
Daher mein Appell (fuer den ich NICHT bezahlt werde!!!): Geht wieder in die Turbinenhalle! AVT im ATV ist vorbei! Niemand will mehr weit wegfahren! Niemand will nur in einer einzigen Halle stehen und jedesmal die selbe Musik hoeren! Abwechslung ist angesagt! Rock’n'Roll, Jungemaedchen!
Nachdem ich eine Weile an einem Synchronisationsproblem bei der Verwendung von seriellen Schnittstellen zur Kommunikation mit Mobiltelefonen gesessen habe, kam mir eine nette Idee: Ich verwende einen endlichen Transduktor! Genauer: Einen Moore-Automaten. Zur Erklaerung: Ein endlicher Automat laesst sich durch einen Graphen veranschaulichen. Ein Knoten ist ein Zustand . Nur ein Zustand kann zu einem Zeitpunkt angenommen werden, wobei Zeit eigentlich keine Rolle spielt. Befindet sich der Automat im Zustand
und erhaelt er ein Eingabezeichen
(Woerter, Symbole, Nachrichten, o.ae.) und es ist ein Zustandsuebergang
durch eine Funktion
definiert, dann geht der Automat in den neuen Zustand
ueber.
Mit genau solch einem Automaten kann ich das Synchronisationproblem loesen. Mehr zum Problem: Die Verbindung ueber den COM Port ist nie still. Das Mobiltelefon sendet andauernd Statusmeldungen. Wenn ich eine Anweisung sende, dann liegt diese Anweisung auch noch eine Weile im Puffer, sodass meine eigene Anweisung als Rueckgabe gelesen wird. Nun kann ich mit Hilfe des Automaten genau festlegen, wann eine Statusmeldung und sonstige ungewollte Nachrichten ignoriert werden und wann nicht. Pretty cool.
Ich will den Code natuerlich niemanden vorenthalten… Die Ausgabe meines Testprogramms sieht wie folgt aus:
Checking State 1 with ABC... Found Checking State 1 with XYZ... Not found Checking State 1 with 123... Not found Checking State 2 with ABC... Not found Checking State 2 with XYZ... Found Checking State 2 with 123... Not found Checking State 3 with ABC... Not found Checking State 3 with XYZ... Not found Checking State 3 with 123... Found This Moore-Machine is a partially-specified deterministic finite state machine. Following transitions are missing: (State 1, "XYZ") -> undefined (State 1, "123") -> undefined (State 2, "ABC") -> undefined (State 2, "123") -> undefined (State 3, "ABC") -> undefined (State 3, "XYZ") -> undefined State 1 is running... Got input: XYZ State 1 is running... Got input: ABC State 2 is running... Got input: 123 State 2 is running... Got input: XYZ State 3 is running... Got input: ABC State 3 is running... Got input: 123 State 1 is running... Got input: XYZ
Und die Testumgebung, die das produziert, sieht so aus:
using System; using System.Threading; namespace visusNET.FiniteStateMachine { public class Test { [STAThread] public static void Main() { string[] sigma = new string[] { "ABC", "XYZ", "123" }; State state1 = new State(State1, "State 1"); State state2 = new State(State2, "State 2"); State state3 = new State(State3, "State 3"); State[] S = { state1, state2, state3 }; TransitionFunction delta = new TransitionFunction(); delta.AddTransition(state1, sigma[0], state2); // state1 --ABC--> state2 delta.AddTransition(state2, sigma[1], state3); // state2 --XYZ--> state3 delta.AddTransition(state3, sigma[2], state1); // state3 --123--> state1 MooreMachine machine = new MooreMachine(sigma, S, state1, delta); machine.Delay = 1000; machine.Interval = 5000; machine.Analyze(); Thread machineThread = new Thread(new ThreadStart(machine.Run)); machineThread.Start(); while (true) { machine.SetInput("ABC"); Thread.Sleep(1000); machine.SetInput("XYZ"); Thread.Sleep(1000); machine.SetInput("123"); Thread.Sleep(1000); } } public static void State1() { Console.WriteLine("State 1 is running..."); } public static void State2() { Console.WriteLine("State 2 is running..."); } public static void State3() { Console.WriteLine("State 3 is running..."); } } }
Die Dateien dazu gibt es hier: FiniteStateMachine.zip.
Es hat endlich jemand gewagt und er steigt auf meiner Freakskala weit nach oben. John Resig hat in seinem Blog ueber Captcha Recognition mit Hilfe von in Javascript implementierten kuenstlichen neuronalen Netzen geschrieben. Fuer mich war es ein sehr interessanter Artikel.
Hier geht es zum Artikel OCR and Neural Nets in JavaScript.
Beim Durchstoebern meiner Aufzeichnungen, habe ich meinen Vortrag ueber Programmierung in C wiedergefunden, den ich irgendwann im letzten Jahr im Rahmen eines Embedded Workshops gehalten habe.
Vielleicht hilft es ja der ein oder anderen Person.
… braucht man keine Regeln. In einer perfekten Welt gibt es keine Kriege. In einer perfekten Welt ist Schoenheit eine gleichverteilte Zufallsvariable. In einer perfekten Welt…
… waere es echt cool. Aber leider gibt es viel zu viele dumme Menschen! Argh!
Ich hab mal was ausgekramt, was viele, die nach mir geboren wurden, nicht mehr kennen…
Wieso? Weil ich glaube, dass ich alt werde. Ich war gestern nach etlichen Jahren in einer Disco. Ich war da zu letzt, als ich 16 war, glaube ich. Damals kamen mir die Menschen darin so viel aelter vor. Und gestern war ich sogar aelter als die Thekenbedienungen. Der einzige, der aelter als ich ist, war der Chef des Ladens. Die Getraenke haben mich damals auch total umgescheppert, obwohl jedes Getraenk nur 50 Cent kostet. Gestern wurde ich einfach nicht voller. Nachdem wir mehrere Tabletts voll mit Whisky-Cola hinter uns hatten sind wir dann parallel zu den Kindern nach Hause gefahren. Um 12:00 Uhr…
Verdammt, ich will noch einmal 16 sein…
Ich habe tatsaechlich eine Stunde gebraucht um rauszufinden, wieso ich keinen transparenten Proxy einrichten kann, der mir den MySQL Server nach aussen hin freigibt. Also… Ich bastel gerade etwas, das ich gerne via SFTP auf einen Server packen moechte. Das klappt soweit. Nun wollte ich aber auch von extern aus auf die MySQL Datenbanken zugreifen. Leider ist die hierarchisch uebergeordnete Firewall dagegen. Da ich darauf keinen Zugriff habe, muss ich in die Trickkiste greifen, denn ich moechte den Port nicht verlegen. Der MySQL Server kann leider nicht auf mehreren Ports gleichzeitig horchen, also habe ich mich dazu entschlossen via iptables alles, was auf Port 27 eingeht, auf Port 3306 (MySQL) zu leiten. Aber aus einem mir bis dahin unerklaerlichen Grund, wollte das nicht funktionieren. Ich habe jeden Port um 3306 ausprobiert (via netcat -l -p <PORT>) und mit meiner iptables-Regel kam ich jedesmal drauf. MySQL weigerte sich aber, wenn ich iptables die Pakete auf 3306 leiten liess. Ich ging also die my.cnf durch und fand zunaechst nichts, das darauf hinwies, dass externe Clients sich nicht verbinden duerfen. Erst nach ewigem Herumprobieren stiess ich auf folgende Zeile in der my.cnf:
bind-address = 127.0.0.1
Da 127.0.0.1 dem Loopback Device gehoert, war mir klar, dass das nicht gehen kann, denn der Internetverkehr geht ueber ein Ethernet Device. Also habe ich die IP-Adresse ersetzt und siehe da – folgende Regel bewirkt Wunder:
iptables -t nat -A PREROUTING -p tcp --dport 27 -j REDIRECT --to-ports 3306
Nun kann ich endlich von aussen auf meinen MySQL Server zugreifen. Was fuer eine schwere Geburt.
Microsoft aendert sich? Ich teste seit einer Woche Windows 7 Beta und bin absolut positiv ueberrascht. Wenn das Endprodukt sich an der Beta orientiert, wird es das schnellste Windows, das es je gegeben hat. Das System ist innerhalb meiner Virtual Machine schneller als das XP, was die Virtual Machine hostet. Unglaublich. Bisher ist nur andauernd der Internet Explorer abgeschmiert, aber das war ja zu erwarten. Die Mac-orientierte neue Taskleiste ist genial und praktisch. Mjam.
Lange habe ich nach Security Enhancements fuer mein Blog gesucht. Nun habe ich eins gefunden: WPIDS – ein auf PHPIDS basiertes Plugin fuer WordPress. Ich find das sehr schnuckelig. Leider fehlt noch ein Autoupdater und eine Moeglichkeit, das Verhalten beim Lock Down festzulegen, aber das kommt sicher alles noch. Dennoch ist es ein sehr cooles, leichtgewichtiges Plugin.
Diese nervige Fehlermeldung ging mir jetzt lange genug auf die Nerven. Seit WordPress 2 gibt es den Fehler und niemand hat ihn bisher gefixt. So sieht die Fehlermeldung aus:
Warning: Attempt to assign property of non-object in /var/www/blog.visusnet.de/wp-includes/rss.php on line 449
Den Patch gibt es hier: rss.patch
Oder via Copy & Paste:
--- ../wp-includes/rss.php.bak 2009-01-03 01:47:53.000000000 +0100 +++ ../wp-includes/rss.php 2009-01-03 01:48:18.000000000 +0100 @@ -445,7 +445,7 @@ // if object cached, and cache is fresh, return cached obj if ( $cache_status == 'HIT' ) { $rss = $cache->get( $url ); - if ( isset($rss) and $rss ) { + if ( isset($rss) and is_object($rss) ) { $rss->from_cache = 1; if ( MAGPIE_DEBUG > 1) { debug("MagpieRSS: Cache HIT", E_USER_NOTICE);
Lesen, Leben, Sterben(!): Linux is a way of life, not a clone of windows
via Dirks Logbuch
Ich wuensche allen ein frohes neues Jahr! 2008 ist vorbei, nun wird alles besser? Mal sehen, was so ansteht:
Es ist jetzt 2009… Scheiss auf die guten Vorsaetze! Jetzt ist Party! Zumindest fuer alle Anderen, denn ich bin zuhause und mache dieses New Year’s Eve ueberhaupt gar nichts.