seeseekey.net - Invictus Deus Ex Machina

Wer Spiele ent­wi­ckelt, kennt das Pro­blem sicher­lich das man nicht alles gleich gut kann. So kann man zwar Soft­ware schrei­ben hat aber von Musik keine Ahnung, möchte sol­che aber natür­lich trotz­dem im Spiel haben. Hier hilft Imphen­zia zu fin­den unter imphenzia.com. Dort kann man sich güns­tig mit Sound­ef­fek­ten, Loops oder gan­zen Tracks ein­de­cken. Bei den Prei­sen wird dabei unter­schie­den zwi­schen Indie (< 250.000 ver­kaufte Ein­hei­ten) und kom­mer­zi­ell (alles dar­über). Alles in allem mode­rate Preise und eine schöne Aus­wahl :)

Wenn man unter Java­Script ent­wi­ckelt so benutzt man sicher auch fol­gende Zeile ab und an in abge­wan­del­ter Form:

alert("XYZ");

Das Pro­blem an „alert“ ist das es für viele Sachen unprak­ti­ka­bel ist. Schö­ner wäre hier eine Kon­sole in die man diese Mel­dun­gen hin­ein­schrei­ben könnte und die auch brow­ser­un­ab­hän­gig funk­tio­niert. Genau hier kommt Black­bird ins Spiel wel­ches unter http://www.gscottolson.com/blackbirdjs/ zu fin­den ist.

Black­bird im Einsatz.

Mit der Kon­sole ist es mög­lich ver­schie­dene Log­le­vel zu rea­li­sie­ren und das ganze ein­fach in das Pro­jekt sei­ner Wahl ein­zu­bin­den. Der wei­tere Vor­teil ist, das man die Debug­mel­dun­gen im Gegen­satz zu einem „alert“ auch ein­fach im Quell­text ste­hen las­sen kann und die Aus­gabe nur bei Bedarf aktiviert.

Alte Tweets auto­ma­tisch zu löschen ist eine Idee die nicht nur ich hatte. Auch andere haben sol­ches ein Werk­zeug ent­wi­ckeln. In die­sem Fall trägt es den Namen „radiergummi.py“ und ist unter https://github.com/ilf/twitter-eraser zu fin­den. Das ganze ist dabei ein Pythonskript und für den Auf­ruf via „cron“ vor­ge­se­hen. Um es zu benut­zen wird noch die Python Biblio­thek „tweepy“ benö­tigt. Anschlie­ßend kann man das ganze kon­fi­gu­rie­ren (wie viele Tweets, DMs et cetera sol­len erhal­ten blei­ben) und benutzen.

Ges­tern war mal wie­der Stadt­ver­tre­ter­sit­zung in Neu­bran­den­burg. Statt­ge­fun­den hat das ganze um 15 Uhr im Rats­saal des Rat­hau­ses. Die Ver­tre­tung der Stadt besteht dabei aus 43 Rats­frauen und Rats­her­ren. Im Gegen­satz zum Kreis­tag ist die Akus­tik zu min­des­tens für Gäste nicht ausrrei­chend, da die Laut­spre­cher der Audio­an­lage auf die Mitte des Saa­les aus­ge­rich­tet ist und die Gäste (sit­zen hin­ten rechts) nicht wirk­lich viel davon haben.

Die Ver­ei­di­gung der Feuerwehrmänner

Exem­pla­risch schön fand ich die Ansage sobald jemand ans Pult geht und spricht:

Sehr geehr­ter Stadt­pra­si­dent, sehr geehrte Ratsherren…

Die Gäste wer­den lei­der nicht erwähnt, wobei einige Mit­glie­der der Stadt­ver­tre­ter­sit­zung das durch­aus hin­be­kom­men indem sie ein­fach „Sehr geehrte Damen und Her­ren“ sagen.

The­ma­tisch ging es um Moun­tain Biking auf dem Wall und die Pro­bleme die ein Mit­glied der Stadt­ver­tre­ter­sit­zung damit hatte (und wie man das ganze unter­bin­den kann). Ganz inter­es­sant dabei war, das der geneigte Zuhö­rer dadurch erfuhr das es in der Ost­stadt (Kies­grube) wohl eine Moun­tain Biking Stre­cke gibt wel­che vom Ver­ein Dirt Force betrie­ben wird.

Anschlie­ßend ging es um die Finan­zie­rung bestimm­ter Ver­eine (Tafel, Sup­pen­kü­che) wel­che Geld bekom­men soll­ten (so wurde es beschlos­sen) aber erst ihre Liqui­di­tät ver­si­chern soll­ten und dies mit einem Brief aus dem Innen­mi­nis­te­rium begrün­det wurde. Bestimmte Ver­eine hat­ten wohl schon Geld erhal­ten, wäh­rend andere Ver­eine sich erst besag­ter Prü­fung unter­zie­hen musste. Dar­über gab es dann eine län­gere Dis­kus­sion, in deren Ver­lauf einige Mit­glie­der der Stadt­ver­tre­tung diese Art der Prü­fung verurteilten.

Nach dem Beschluss der Tages­ord­nung, wur­den dann ohne Dis­kus­sion respek­tive Aus­spra­che die ers­ten Punkte der Tages­ord­nung abge­stimmt. Dar­un­ter waren unter ande­rem die „Beset­zung des Auf­sichts­ra­tes der Neu­bran­den­bur­ger Stadt­werke GmbH“ sowie der NEUWOGES, die Bestim­mun­gen zur Durch­füh­rung der Wahl der Schieds­per­so­nen für die Schieds­stel­len der Stadt Neu­bran­den­burg und einige Ände­run­gen am Bebauungs- und Flä­chen­nut­zungs­plan. Eine der letz­ten Tages­ord­nungs­punkte war die Wahl eini­ger Wehr­füh­rer der Feu­er­weh­ren sowie deren Ver­ei­di­gung und Ernen­nung zu Ehrenbeamten.

Der letzte Punkt der Tages­ord­nung für den öffent­li­chen Teil bestand in der Abstim­mung über den Auf­bau eines zen­tra­len Asyl­be­wer­ber­hei­mes des Krei­ses. Der öffent­li­che Teil war damit um 17 Uhr been­det. Es wurde auf Twit­ter wie­der live berich­tet und zwar unter dem Hash­tag #SVSNB.

Neu­lich berich­tete ich per Twit­ter (@seeseekey) live von der Kreis­tag­sit­zung. Nach einer Weile kam dann beim Ver­sen­den eines Tweet nur noch „Ver­bo­ten“ als Ant­wort vom Ser­ver zurück. Ich hatte wohl mein API Limit gesprengt. Das führt natür­lich zu der Frage wo genau die­ses Limit liegt.

Glück­li­cher­weise ist das alles sau­ber doku­men­tiert. Das Limit für Direkt­nach­rich­ten liegt bei 250 pro Tag, das der Tweets (Updates) bei 1000 pro Tag wobei auch Ret­weets als Updates gezählt wer­den. Die Anzahl der Updates ist aller­dings noch pro Stunde gede­ckelt und zwar auf 150 bzw. 350 (per OAuth). Nach Ablauf der Stunde kann man dann wie­der weitertwittern.

Wei­tere Infor­ma­tio­nen gibt es unter:
https://support.twitter.com/articles/15364-about-twitter-limits-update-api-dm-and-following
https://dev.twitter.com/docs/rate-limiting

Im Funk­be­reich gibt es schon einige selt­same Dinge wie z.B. Zah­len­sen­der. Ein inter­es­san­tes Kurio­sum ist der Sen­der UVB-76 wel­cher schon seit Jahr­zehn­ten sen­det und es immer noch tut, aber nie­mand so genau weiß wofür er eigent­lich gut ist. Ab und an gab es Sprach­nach­rich­ten auf dem Sen­der aber sonst nur das cha­rak­te­ris­ti­sche „Buzz“ Signal. Wer also einen Kurz­wel­len­emp­fän­ger hat, kann ja mal rein­hö­ren ;)

Wei­tere Infor­ma­tio­nen gibt es unter:
http://de.wikipedia.org/wiki/UVB-76
http://de.wikipedia.org/wiki/Zahlensender
http://de.wikipedia.org/wiki/Woodpecker_%28Kurzwellensignal%29

Ges­tern war die Kreis­tags­sit­zung des neuen Krei­ses Meck­len­bur­gi­sche Seen­platte. Es gab auch ein paar inter­es­sante Ent­schei­dun­gen. So wurde das Kenn­zei­chen auf MSG (oder MST, so genau hat man das nicht ver­stan­den) fest­ge­legt. Auch der Antrag auf Live Strea­ming (im Antrag in Direkt­über­tra­gung umbe­nannt) des Kreis­ta­ges wurde genehmigt.

Die gest­rige Kreistagssitzung

Die Bar­rie­re­frei­heit war zu Tei­len gesi­chert, so kam man mit einem Roll­stuhl et cetera in die Mensa der Hoch­schule. Was mir gefehlt hat war ein Gebär­den­dol­met­scher (wenn das Thema inter­es­siert der sollte http://meinaugenschmaus.blogspot.de/ besu­chen), aber hier kann man ja noch nach­bes­sern. Beim Live twee­ten kam ich auch irgend­wann an die Limi­ta­tion der Twit­ter API, des­halb ging es dann auf dem Account der Seen­pi­ra­ten wei­ter. Zu Ende war die Ver­an­stal­tung gegen 21:45 Uhr.

Wer bei Open­Street­Map etwas gemappt hat und sich ein­mal mit ande­ren Map­pern mes­sen möchte, sollte http://osmranking.altogetherlost.com/ aus­pro­bie­ren. Dort gib man die zwei Nut­zer­na­men ein wel­che und anschlie­ßend die Kate­go­rien nach wel­chen ver­gli­chen wer­den soll.

Danach noch einen Klick auf den „Create Ran­king“ But­ton und schon kann man ver­glei­chen wie man abge­schnit­ten hat.

Möchte man unter .NET/Mono das Schlie­ßen einer Kon­so­len­an­wen­dung abfan­gen so kann man dies mit eini­gen Metho­den lösen, wie zum Bei­spiel die Anwen­dung bestimm­ten pIn­voke Tech­ni­ken unter Win­dows. All­ge­mei­ner kann man das ganze mit dem „Can­cel­Key­Press“ Event gestal­ten was dann so aussieht:

Console.CancelKeyPress+=new ConsoleCancelEventHandler(Console_CancelKeyPress);
...
static void Console_CancelKeyPress(object sender, ConsoleCancelEventArgs e)
{
  WriteErrorToConsole("Programm wird abgebrochen...");
  e.Cancel=true; // Event abbrechen
}

Wie Heise ges­tern berich­tete (http://www.heise.de/newsticker/meldung/Gefahr-durch-offene-PHP-Luecke-1567433.html) gibt es eine wun­der­schöne Sicher­heits­lü­cke im Bezug auf CGI und PHP. So führt der Aufruf:

http://localhost/index.php?-s

dazu das der Quell­code der Web­seite aus­ge­ge­ben wird. Das ist natür­lich unprak­tisch wenn dort Kon­fi­gu­ra­ti­ons­va­ria­blen ent­hal­ten z.B. die Zugangs­da­ten für eine Daten­bank­ver­bin­dung. Zur Lösung des Pro­blems gibt es drei Varianten:

  • PHP Ver­sion mit dem Bug­fix einspielen
  • Rewrite Anwei­sung in die .htaccess
  • Wrap­per wel­cher vor dem PHP-CGI auf­ge­ru­fen wird

Die erste Vari­ante schei­det aus, da der aktu­elle Bug­fix leicht umgan­gen wer­den kann. Die zweite Vari­ante (ein­zu­tra­gen in eine „.htac­cess“) sieht so aus:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^[^=]*$
RewriteCond %{QUERY_STRING} %2d|\- [NC]
RewriteRule .? - [F,L]

Die dritte Vari­ante setzt einen Wrap­per vor den eigent­lich Auf­ruf und fil­tert die ent­spre­chen­den Anwei­sun­gen her­aus. Dazu ändert man in der „httpd.conf“ die Zeile:

Action  application/x-httpd-php /cgi-bin/php-cgi.exe

in

Action  application/x-httpd-php /cgi-bin/php-cgi-wrapper.exe

und star­tet den Apa­che Ser­ver neu. Der Quell­text des Wrap­pers sieht dabei so aus:

#include <process.h>

#define PHP_ORIG "php-cgi.exe"

int main(int argc, char **argv)
{
    if(argc>1) argv[1]=0;
    _execv(PHP_ORIG, argv);
}

Das ganze kann hier auch als fer­ti­ges Visual Stu­dio Pro­jekt oder gleich als aus­führ­bare Datei her­un­ter­ge­la­den werden.

Wei­tere Infor­ma­tio­nen gibt es unter:
http://www.kb.cert.org/vuls/id/520827
http://eindbazen.net/2012/05/php-cgi-advisory-cve-2012-1823/
http://www.heise.de/newsticker/meldung/PHP-patcht-schnell-aber-nicht-gruendlich-1567906.html