Mehr Übersicht mit BgInfo

Wenn man häufig viele Remote Desktops offen hat wird es schnell unübersichtlich und man fragt sich an welchem Rechner man eigentlich gerade Arbeitet. Ich behelfe mir dabei in der Regel mit verschiedenen Farben des Desktops. Ein Kollege hat mich jedoch heute auf eine Idee gebracht wie es noch besser geht: BgInfo

Das kostenlose BgInfo von Sysinternals schreibt beim starten Systeminfos auf den Desktop und beendet sich dann wieder. Ab jetzt prangen diese Infos also auf allen meinen Windows-Maschinen die ich regelmäßig nutze:

 

Um mir das ständig neue Einrichten zu ersparen habe ich mir einen NSIS-Installer gebastelt das die .exe und die .bgi-Datei mit den Informationen was ich sehen will installiert und eine Verknüpfung im Autostart anlegt.

Dateien dazu:

Build and Analyze

Nachdem ich jetzt nahezu eine Woche lang verzweifelt den Grund für eine Speicherzugriffsverletzung bei meiner iPhone Applikation gesucht habe hat mich ein Tipp von einem Freund auf den richtigen Weg gebracht.

Xcode hat seit kurzem eine neue Funktion, Build and Analyze. Diese Funktion analysiert die Anwendung nach Fehlern die sich erst nach dem Kompilieren bemerkbar machen. In meinem Fall spuckte sie dies aus:

Build and Analyze

Nachdem ich mit der Nase darauf gestoßen wurde war mir auch sofort klar dass das so nicht stimmen kann, aber irgendwie habe ich es bisher immer übersehen. Dauer der Lösung: 2 Minuten. Unglaublich.

Vielen Dank an Frank für den Tipp.

Geburtstage automatisch in den Google Kalender übernehmen

Die Geburtstage der Kontakte von Facebook und aus den Google-Kontakten lassen sich recht einfach automatisch in den Kalender übertragen.

Für die Facebook-Kontakte kann man die Applikation Birthday Exporter aktivieren. Den iCal-Feed den man davon bekommt kann man ganz einfach im Google Kalender abonnieren.

Für die Geburtstage aus den Google Kontakten bietet Google direkt einen entsprechenden Kalender an, er ist lediglich ein wenig versteckt: Unter Einstellungen > Kalender gibt es in der Mitte Rechts den Punkt „Interessante Kalender durchsuchen“. Dort findet sich unter dem Reiter „Weitere“ der Kalender „Geburtstage und Termine des Kontakts“. Diesen Kalender aktivieren und schon sind auch diese Geburtstage im Kalender.

Bei mir tauchen die Geburtstage aus den Kontakten allerdings durch die Bank durch einen Tag zu früh im Kalender auf. Andere Leute können diesen Fehler nicht bestätigen, insofern denke ich dass es an einer Einstellung von mir liegt, ich suche noch nach der Lösung dazu.

Als netten Nebeneffekt des Ganzen habe ich jetzt alle Geburtstage aus den Kontakten und Facebook automatisch auf meinen Palm Pre synchronisiert.

(via precentral.net)

Mehrere SQL Queries in PHP

Laut der PHP-Dokumentation lässt sich mit mysql_query(); immer nur ein einzelner SQL-Query ausführen, mehrere durch Semikolon getrennte Queries sind nicht erlaubt.

Es geht jedoch wenn man beim mysql_connect(); ein entsprechendes Client-Flag setzt:

mysql_connect($server, $user, $pass, false, 65536);

65536 ist in MySQL als CLIENT_MULTI_STATEMENTS definiert und erlaubt damit mehrere Statements in einem einzelnen Query.

Diese Möglichkeit ist jedoch mit Vorsicht zu genießen, sie öffnet SQL Injections Tür und Tor.

Quelle: Benutzer-Kommentar in der PHP-Dokumentation

SyncMate unter Leopard

Nachdem ich jetzt auch unter die Mac-User gegangen bin (habe es geschafft ein iBook G4 als Ersatz für mein mittlerweile auseinanderfallendes HP NX5000 zu ergattern) stand ich vor der üblichen Hürde für die unter Windows oder Linux bekannten und gern genutzten Programme ein passables Mac-Äquivalent zu finden.

Für meine größten Bedenken, ob sich mein Windows Mobile 5 Handy (ein HTC Wizard, in Deutschland unter anderem als „Xda Mini S“ bezeichnet) mit MacOS syncen lässt hat sich erstaunlich schnell ein Ersatz gefunden … SyncMate. Die Freude hielt aber nicht lange an. Heruntergeladen, installiert, Handy angeschlossen, wunderbar, es installiert irgendwas auf dem Handy. Dann, nichts mehr. Handy wird einfach nicht erkannt.

Irgendwann fand ich in dem Blogbeitrag in dem die Software angeündigt wurde und in dem sich einige Leute über dasselbe Problem beschwert hatten die Lösung: Einfach das Handy neu booten. Gesagt, getan, und siehe da: Es wird gefunden und der Sync funktioniert einwandfrei.

iScroll2 und Leopard

iScroll2 hat mich nach der Installation ein wenig irritiert … das Touchpad im iBook G4 ist definitiv kompatibel, der „Rechtsklick“ mit 2 Fingern auf dem Pad und einem Druck auf den Knopf funktionierte einwandfrei, das Scrollen mit zwei Fingern jedoch nicht. Ein Hinweis im offiziellen Tracker brachte mir dann die Lösung:

Nach der iScroll2 Installation wird das Touchpad auch vom dem originalen Einstellungsdialog des Touchpads als zwei-Finger-fähig erkannt. Die Einstellungen zum vertikalen und horizontalen Scrollen müssen daraufhin sowohl unter „Tastatur & Maus“ als auch unter „iScroll2“ vorgenommen werden.

HTTPS Datei Upload mit POST

Eine nette Aufgabe kam heute auf mich zu … aus einem Programm heraus eine Datei über eine Website per HTML-Formular auf einen Webserver laden, das ganze über eine HTTPS-Verbindung und mit Authentifizierung per Zertifikat.

Klingt eigentlich nicht so schwer … dachte ich zumindest.

Die Zertifikate aus dem CertificateStore von Windows auslesen war auch relativ einfach, der Upload per HTTP eigentlich auch … bis ich dann das Zielformular über die Zertifikatabfrage schützte.

Die Suche nach der Fehlerquelle hat dann einige Zeit gekostet, bis ich dann irgendwann feststellte dass Apache es einfach nicht mag wenn man über eine SSL-Verbindung ohne Vorankündigung ein POST-Formular abschickt.

Die Lösung des Problems war dann relativ einfach, einfach vorher einen kurzen Seitenabruf mit GET, dann den tatsächlichen Upload, zwischendurch die Session nicht verlieren und voila…

X509CertificateCollection certs = new X509CertificateCollection();
MyCerts mycert = new MyCerts();
int num = mycert.Init();
for (int i=0; i < num; i++)
certs.Add(mycert[i]);

HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(uri);
webrequest.ClientCertificates = certs;
webrequest.Method = "GET"
WebResponse response = webrequest.GetResponse();
Stream read = response.GetResponseStream();
read.Close();

webrequest = (HttpWebRequest)WebRequest.Create(uri);
webrequest.ClientCertificates = certs;
webrequest.Method = "POST"
webrequest.ContentType = "multipart/form-data; boundary=" + boundary;
// content zusammenbauen und senden

auf einmal geht es einwandfrei.