Meine T-Mobile Kündigung – Teil 2

Eigentlich gibt es nicht viel zu erzählen. Heute kam ein Brief, meine Kündigung wäre zum 10.04.2010 wirksam. Früher als erwartet aber ich will mich ja nun nicht beschweren 🙂

Update: Eben kam eine SMS, dass meine Übernahme zum 10.04.2010 00:00:00 Uhr geschaltet wird. Ick freu mir!

Fehlerhafte Links in der Sidebar bei WordPress

Vorhin ist mir aufgefallen, dass die Links zu den letzten Kommentaren in der Sidebar fehlerhaft waren. Sie zeigten sogar in ein falschen Blog. Ich dachte, es läge an der WordPress MU Installation. Also spielte ich mit den Einstellungen herum und verschlimmbesserte nur noch alles. Also ging ich einen anderen Weg und versuchte dem Fehler auf die Schliche zu kommen, in dem ich die Funktionen testete. Das ist aber recht schwierig, da das WordPress Backend mittlerweile riesig ist und wenn man nicht Up-To-Date ist, hat man absolut keine Chance. Also den Königsweg gegangen und nach und nach alle Plugins deaktiviert und schon hatte ich den schuldigen gefunden: FeedWordpress

Das Plugin sorgt dafür, dass der RSS Feed anderer Blogs ausgelesen werden und hier als eigene Einträge erscheinen. Damit der Fehler reproduzierbar ist, müssen folgende Voraussetzungen erfüllt sein:
– Bei FeedWordpress muss unter Einstellungen -> „Posts & Links“ -> Permalink auf „point to the copy on the original website“ stehen
– der letzte Eintrag der Seite muss ein per Feed importierter Eintrag sein
– Das Widget „Recent_Comments“ oder jede andere Funktion, dass einen Permalink per „get_permalink()“ zu holen versucht, muss „nach“ diesem bestimmten Beitrag ausgeführt werden

Um den Fehler zu verstehen, schauen wir kurz in die „feedwordpress.php“ im Pluginverzeichnis.
Dort steht folgendes:

function syndication_permalink ($permalink = '') {
	if (get_option('feedwordpress_munge_permalink') != 'no'):
		$uri = get_syndication_permalink();
		return ((strlen($uri) > 0) ? $uri : $permalink);
	else:
		return $permalink;
	endif;
} // function syndication_permalink ()

In unserem Fall ruft er also die Funktion „get_syndication_permalink()“ ohne Parameter auf:

function get_syndication_permalink ($id = NULL) {
	list($u) = get_post_custom_values('syndication_permalink', $id); return $u;
}

Als Defaultwert ist NULL angegeben. Ein Blick in den WordPress-Codex verrät, dass er das Benutzerdefinierte Feld des aktuellen Eintrags laden versucht. Das ist logischerweise noch der aus dem Feed importierte Eintrag und daher lädt er eine falsche URL.

Um das Problem zu beheben, einfach den Code oben durch folgenden ersetzen:

function syndication_permalink ($permalink = '') {
	$id = url_to_postid($permalink);
	if (get_option('feedwordpress_munge_permalink') != 'no'):
		$uri = get_syndication_permalink($id);
		return ((strlen($uri) > 0) ? $uri : $permalink);
	else:
		return $permalink;
	endif;
} // function syndication_permalink ()

Die „url_to_postid()“ ist eine WordPress-eigene Funktion. Nun funktioniert es wieder. Darauf muss man erstmal kommen!

C# – PrintDialog.ShowDialog() funktioniert nicht

Bin gerade auf ein sehr merkwürdiges Problem gestoßen, dass doch locker eine Stunde wertvolle Lebenszeit gekostet hat.
Folgender Code:

PrintDialog pd = new PrintDialog();
if (pd.ShowDialog() == DialogResult.OK)
{
    // do nothing

}

Nichts großes, sollte einfach nur so ein Druckerfenster öffnen, wo der Drucker ausgewählt wird etc. Leider öffnete sich der erhoffte Dialog nicht. Der Debugger läuft dahin, aber er führt den ShowDialog() einfach nicht aus.

Wenn ich die Eigenschaft „UseEXDialog“ auf „true“ setze, funktioniert es.
Jedoch wollte ich nicht den XP-Dialog, sondern den anderen. Auch im Netz fand ich keine wirkliche Lösung.
Da diese Codezeilen aus einem bestehenden Projekt stammen, habe ich kurzerhand neue Projekte in den Frameworks 2.0, 3.5 und 4.0 angelegt. Jeweils mit dem Codeschnippsel oben. Und siehe da, es funktioniert problemlos, in jeder Frameworkversion. Nun die Unterschiede gesucht.

Fündig wurde ich den Projekteigenschaften unter „Build“ bzw. „Erstellen“.
Ich muss dazu sagen, dass die Applikation vorher auf einem anderen Rechner mit einem 32-bit Windows entwickelt wurde. So stand hier unter dem Punkt „Platform target:“ (auf Deutsch vermutlich Zielplattform) „Any CPU“.
Stellt die Anwendung hier auf 32-bit (x86) und der PrintDialog() wird hervorragend funktionieren. x64 oder Any CPU funktioniert nicht.
Auf so etwas muss man erstmal kommen, warum das so ist, keine Ahnung.

So habe ich noch mal in der MSDN nachgeschlagen:

This class may not work on AMD64 microprocessors unless you set the UseEXDialog property to true.

Ich bin zwar nun nicht der technisch versierte Mensch, aber für mich hört sich das nach einem Problem mit einem AMD Prozessor an, ich habe jedoch einen Intel (ich lasse es mir aber dennoch gerne erklären).

Meine T-Mobile Kündigung – Teil 1

Ich habe mir vor kurzem ein O² Vertrag mit dem Palm Pre besorgt. Da mein Vertrag bei T-Mobile demnächst ausläuft, wollte ich meine Rufnummer mit übernehmen. Leider machte mir T-Mobile einen Strich durch die Rechnung. Daher zeig ich euch erstmal, wann mein Vertrag auslaufen sollte, nach meiner Meinung:

29.05.2006 – Vertrag bei T-Mobile, 24 Monate Laufzeit
10.04.2008 – Vertragsverlängerung um 24 Monate

So, was meint ihr, wann der Vertrag ausläuft? Also meiner Rechnung nach am 28.05. 2010. Bei T-Mobile am 09.04.2010. Daher ist meine Kündigung laut deren Meinung auch zu spät rausgegangen, so das sie meinen Vertrag erst zum 09.04.2011 kündigen wollen. Nun hab ich gestern da angerufen und wollte wissen, wie die darauf kommen. Nach langem hin und her konnte mir der Supporter auch nicht sagen, warum das alles so ist. Nun wird mein Anliegen an die Reklamationsabteilung weitergeleitet, die wollen sich Montag melden.
Ich bin gespannt.

Basta! Spring 2010

Mein erster Tag auf der Basta ist rum und ich bin echt erschlagen. Es ist sehr viel Input. Ich habe heute unter anderem zwei Sessions von Oliver Sturm rund um das neue C# 4.0 Feature „dynamic„. Ich fand die Vorträge sehr gut und nun weiß ich auch, dass man „dynamic“ auch zu mehr benutzen kann als Exceldaten zu lesen ;). Eigentlich wollte ich nur die erste Session besuchen, aber Oliver hat es so gut rüber gebracht, da bin ich praktisch gleich sitzen geblieben (in Wirklichkeit war ich Mittag essen).

Leider gab es auch eine Session, wo ich mir doch mehr versprochen habe. Sie hatte den schönen Namen „Nein! – Meinen Code und meine Daten bekommst du nicht“. Es ging darum, wie man den Code (und die Daten) seiner .NET-Anwendung so „verschlüsseln“ kann, dass niemand ran kommt (Stichwort Reflection). Es wurden dabei einige Beispiele und Möglichkeiten mit ihren Vor- und Nachteilen genannt. Die wohl am besten zu nutzende ist eine, bei der der Code der Methoden verschlüsselt wird und zur Laufzeit wieder entschlüsselt wird. Hört sich für mich etwa nach eval() in PHP an. Egal, ein Beispiel wurde leider nicht gezeigt, denn als man ja die beste Möglichkeit präsentiert hatte, wurde gleich das Hauseigene Produkt vorgestellt, dass natürlich genau diese und noch einige andere Features bietet. Schade eigentlich. Ich hätte jetzt keine genaue funktionsweise ihrer kostenpflichtigen Anwendung erwartet, aber so beispielhafte Applikationen wären schon wünschenswert. Ich bin halt naiv.

Morgen geht es weiter. Ich werde morgen mit dem Tipps und Tricks rund um die VS IDE anfangen. Interessant wird auch parallele Entwicklung in .NET 4 und LINQ nach PLINQ. Am Nachmittag werde ich mich über Freeware Security Tools informieren. Und abends gehts dann in die Piano Bar, Casino 🙂

Und heute solls noch Freibier geben, ich muss es nur noch finden :p