
Original uploaded to flickr by martin_kelley
Ja, wie gesagt: Ich wünsche euch allen einen guten Rutsch und ein frohes und gesundes Jahr 2007. Ab Anfang Januar gibt’s dann hier auch wieder mehr zu lesen

Original uploaded to flickr by martin_kelley
Ja, wie gesagt: Ich wünsche euch allen einen guten Rutsch und ein frohes und gesundes Jahr 2007. Ab Anfang Januar gibt’s dann hier auch wieder mehr zu lesen
Die Adventskalender sind so gut wie geleert, der Baum ist geschmückt, das Feiertagsessen ist gekauft. Die Frau putzt noch die letzen Ecken der Wohnung und dann können sie kommen: Die Weihnachtsfeiertage. Und unsere Familien – die wir unvorsichtiger Weise dieses Jahr wieder zu uns eingeladen haben
Mit multiplen Familien und Weihnachten ist das ja immer so eine Sache. Also ganz besonders mit Heilig Abend. Denn da hat man als Paar/Familie eigentlich nur sechs Möglichkeiten:
Und wir haben uns dann halt für die letzte Version entschieden – weil die nämlich logistisch und emotional am klügsten erscheint. Abgesehen davon, dass man hierbei natürlich auch die meiste Arbeit hat. Aber man kann auch schon mal für die Zeit üben, in der man eigene Kinder hat – dann ist ja sowieso Schluss mit ruhig, was?
In diesem Sinne: Frohe (und nicht zu stressige) Weihnachten euch allen!
… darum ging es heute nachmittag bei uns daheim
Nach einem letzten Weihnachts-Shopping-Ausflug in die angenehmer Weise nicht übervollen Borsig-Hallen war endlich wieder – wie in jedem Jahr zur Weihnachtszeit – Plätzchen backen angesagt.
Das Backen der Plätzchen ist ja an sich eine leckere und relativ stressfreie Sache: Teig zubereiten (nein, nicht kaufen, der gekaufte schmeckt niemals so gut), kühlen (damit er beim Ausrollen nicht so klebt), x mal ausrollen und Plätzchen ausstechen, aufs Backblech, zehn Minuten in den 200°C warmen Backofen, fertig. Der anstrengende Teil kommt danach:
Dekorieren.
Und da haben wir uns dann dieses mal ein paar Gedanken vorher gemacht und eine Art "Dekorations-Straße" aufgebaut, welche den Zeitaufwand tatsächlich aufgrund der guten Vorbereitung mininierte. Ausgesehen hat das Ganze dann so:
Schmecken tun die leckeren Teile übrigens auch und bevor Fragen aufkommen: Nein, wir haben nichts zu verschenken
Microsoft hat gestern/heute eine Reihe für .NET – Entwickler interessante Updates veröffentlicht:
Besonders gespannt bin ich ja auf das VS2005 SP1. Falls danach nix mehr geht melde ich mich noch einmal

Original uploaded to flickr by LiminalMike
Da ich mich momenten mit der Performance-Optimierung einer ASP.NET – Anwendung beschäftige bin ich – natürlich – wie vermutlich schon x andere ASP.NET – Entwickler vor mir über den ViewState gestolpert. Dieser nahm nämlich schon beim ersten Laden quasi in der "Startseite" der Anwendung die stattliche Größe von etwa 64kB ein und wuchs nach einigem Hin- und Hernavigieren auf über 200kB an. Deutlich zu viel. Die Seite enthält im Grunde nur eine statische Tabelle und ein paar Listboxen. Je nach Listbox-Auswahl wird der Inhalt der Tabelle dann geändert (dynamisch per AJAX über ein Base64-codierte Properties der in der Seite enthaltenen ASP.NET – Controls zeigte sich nach dem decodieren des selbigen aus dem Quelltext der Seite im Browser (Base64-De-/Codierung gibt’s z.B. recht komfortabel online hier), warum er so unglaublich groß war: Der Inhalt der kompletten Tabelle sowie aller Listboxen auf der Seite ist im ViewState enthalten.
Das warf natürlich die Frage auf, ob das denn sein muss und wenn nicht wie dieses Verhalten zu verhindern ist. “ASP.NET: ViewState – Probleme und -Optimierung” weiter lesen…

Original uploaded to flickr by Simon Zirkunow
Werden für eine schöne, bunte und komfortable Webseite mehrere Extender aus dem AJAX Control Toolkit verwendet (wie z.B. der CollapsiblePanelExtender, der DropShadowExtender oder der RoundedCornerExtender) hat man ja öfter das Problem, dass die Seite beim Laden stark "flackert". Das wirkt natürlich ziemlich störend. Bei der Entwicklung von Windows-Anwendungen hat man in solch einem Fall immer noch die Option, das Neuzeichnen der Anwendungs-Oberfläche zu unterdrücken, bis alle Layout-Arbeiten beendet sind. Im Web ist das natürlich nicht möglich.
Deshalb kam ich auf die Idee, eine Art "Startbildschirm" (bzw. Startup Screen zu implementieren, der den eigentlichen Seitenaufbau verdeckt, bis die Seite komplett inklusive Layout fertig geladen ist. Das Prinzip dafür ist relativ simpel:
“ASP.NET AJAX: Startbildschirm gegen flackernde Seiten” weiter lesen…
Falls noch jemand ein Nikolausgeschenk für mich sucht – ich hätte da ‘was gefunden. Bei Amazon. Nur eine Kleinigkeit. Ein Buch.
Die Lieferung wäre sogar versandkostenfrei – wenn das nix ist…
Details dazu gibt’s hier.
Ich will auf dem Client – per JavaScript-Funktion – ein Element (Button, Label, <div>, x-beliebiges Control) manipulieren. Also zum Beispiel einen Button deaktivieren, ohne dass dafür ein PostBack zum Server notwendig ist.
Die Lösung dafür erscheint im Prinzip recht simpel: Per
document.getElementById("ID_MEINES_CONTROLS")
hole ich mir das Element und kann dann damit tun und lassen, was ich will. Die ID des Elementes kenne ich ja – schließlich habe ich die selbst festgelegt:
<asp:Button ID="buttonFoo" runat="server" />
Das JavaScript dafür müsste also im Prinzip so aussehen:
document.getElementById("buttonFoo").disabled = true;
Der Haken bei der Sache: Das wird so selten funktionieren. Nämlich immer dann nicht, wenn ich verschachtelte Control in meiner Seite habe. Das ist z.B. schon dann der Fall, wenn ich MasterPages benutze. Die IDs der Controls auf dem Client werden dann nämlich nach folgendem Muster generiert:
<parentControl.parentControl.ID>_<parentControl.ID>_<myControl.ID>
Weil ich dass weiß kann ich jetzt auch mein Control ermitteln:
document.getElementById("ctl000_ContentPlaceholder1_buttonFoo")
("ctl000" ist übrigens immer die ID der Master-Seite)
Soweit – so gut: Ändert sich aber nun das Layout meiner Seite, weil ich den Button z.B. noch in ein Panel verschiebe, dann ändert sich auch seine ID und ich muss das JavaScript wieder anpassen. Und um genau das zu verhindern gibt es in ASP.NET für die ASPX-Seiten eine Art schlaue Präprozessor-Funktion, die mir für ein Control immer die korrekte Client-ID zurück liefert. Das sieht dann (in der ASPX-Seite) so aus:
document.getElementById("<%= buttonFoo.ClientID%>")
Es ist vollbracht – gratuliert mir! Ich habe ein (metaphorisches) Monster erschlagen:
Die Tage meiner Genesungspause habe ich dazu genutzt, endlich den dritten Teil der "Bourne" – Trillogie von Robert Ludlum auszulesen – nach fast einem Jahr habe ich es nun tatsächlich geschafft
Nachdem ich die ersten beiden Teile der vom Buch nahezu vollständig abweichenden Verfilmungen im Kino sah ("Die Bourne Identität" und "Die Bourne-Verschwörung") hatte ich mir alle drei Bände der Trillogie in Buchform geleistet:
![]() Die Bourne Identität |
![]() Das Bourne Imperium |
![]() Das Bourne Ultimatum |
Normaler Weise habe ich mit guten Romanen kein Problem – nach maximal zwei Wochen sind 800 Seiten locker weggelesen. Hier fing es ähnlich an: Der erste Teil hat mich begeistert, der zweite Teil war ein Hammer – aber der dritte Teil war echt "schwere Lektüre". Aber was man begonnen hat muss man auch zu Ende bringen – und da ich nicht der Typ bin, der mehrere Bücher gleichzeitig liest habe ich auch das letzte Buch bis zum bitteren Ende niedergelesen
Und es ist an sich nicht schlechter, als die seine beiden Vorgänger, nur – wie ich finde – vom stilistischen Aspekt her schwer zu lesen.
Aber wie gesagt – nun ist es geschafft und mittlerweile sind auch die ersten 100 Seiten des nächsten Werkes durch meine Finger (und Augen) gewandert:

Original uploaded to flickr bei kegger
Um Temposündern die Einhaltung der vorgeschriebenen Geschwindigkeit schmackhaft zu machen gehen unsere skandinavischen Nachbarn inzwischen äußerst innovative Wege.
Guckst du hier: www.speedbandits.dk
[via Basic Thinking]


Original uploaded to flickr by OiMax
Eines der schönen und nützlichen, neuen Elemente, die ASP.NET AJAX bietet, ist der CollapsiblePanelExtender aus dem AJAX Control Toolkit. Dieser kann – wie der Name bereits vermuten lässt – dazu benutzt werden, Panels in einer WebPage um die Fähigkeit des Auf- und Zuklappens zu erweitern.
Das funktioniert auch ganz prima – allerdings gibt es Szenarien, in denen man den Status eines CollapsiblePanelExtenders bzw. des dazugehörigen Panels auch über einen Seitenwechsel heraus retten möchte. Beispiel: Ich habe eine Masterseite, welche am oberen Seitenrand (quasi als Header) interessante Status-Informationen o.ä. beinhaltet. Diese packe ich in ein zuklappbares Panel – damit der Anwender sie bei Bedarf ausblenden kann, um mehr vom eigentlich interessanten Inhalt der Seite zu sehen. Wird nun die Content-Seite gewechselt, so geht der Aufklapp-Status des Panels verloren – trotzdem man sich eigentlich immer noch in der gleichen Master-Seite befindet. Das heißt: Hatte der Anwender das Panel vor dem Seitenwechsel zugeklappt so ist es nun wieder geöffnet.
Diesem Verhalten kann jedoch mit 4 + 1 Zeile Code in der Codebehind-Datei der Masterseite entgegen gewirkt werden, vier Zeilen im Page_Load-Eventhandler und einer Zeile für die Deklaration einer statischen Variablen:
static string _topPanelCollapsed_ClientState;
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
_topPanelCollapsed_ClientState =
CollapsiblePanelExtender1.ClientState ;
else
CollapsiblePanelExtender1.ClientState =
_topPanelCollapsed_ClientState;
}
(Code-Stand: ASP.NET AJAX ControlToolkit Beta2)
Dass mein seine Arbeit (im Sinn von Job, Beruf, täglich Brot) wirklich mag merkt man am besten daran, dass man zwar krank zu Hause sitzt, aber viel lieber im Büro sitzen würde.
Und daran, dass man sich freut, wenn alle Stunde das Telefon klingelt und jemand aus der Firma etwas von einem will

Aus irgend einem Grund scheint mein WordPress in letzter Zeit sporadisch irgendwelche eigentlich schon Monate alte Trackbacks bzw. Pingbacks zu versenden… Und zwar sowohl intern (wenn ich auf eigene Artikel verweise) als auch extern (z.B. hier). Das ist ziemlich lästig.
Hat irgend jemand eine Idee, wieso? Und ob da wirklich WordPress schuld ist oder evtl. einer der Update-Services (Technorati, Ping-O-Matic)?
Zwar wurde am 06.11.2006 die Beta 2 von ASP.NET AJAX releast – ein nerviger Bug ist aber immer noch nicht verschwunden:

Original uploaded to flickr by cobalt123
Packt man einen TreeView in ein UpdatePanel hat das zwar den großartigen Effekt, dass die Webseite beim Selektieren eines Items bzw. beim Auf- oder Zuklappen eines Knotens nicht mehr neu geladen wird – allerdings schließt der Tree von sich aus den gesamten Zweig, innerhalb dessen ich gerade einen Knoten auf- oder zuklappen will. Hat man mehrere Wurzelknoten, d.h. mehrere Knoten auf der obersten Ebene des Baumes (die ja eigentlich die unterste Ebene ist, wenn man einmal davon ausgeht, dass ein Baum seine Wurzeln immer unten hat – aber die Informatik ist halt manchmal eine etwas abstrakte Wissenschaft
) so wird alles noch viel schlimmer.
Nun ist zwar davon auszugehen, dass der Fehler spätestens in der Final behoben sein wird (wenngleich ich schon auf die Beta 2 gehofft habe); wer aber so lange einigermaßen mit dem Tree arbeiten will, ohne auf AJAX verzichten zu müssen, ist auf einen akzeptablen Workaround angewiesen.
Dieser ist tatsächlich gar nicht so kompliziert: Man sorge dafür, dass der Tree nur einen einzigen Wurzelknoten besitzt und dieser immer aufgeklappt bleibt – egal, ob der TreeView der Meinung ist, ihn einklappen zu müssen oder nicht. Dafür hängt man sich beim TreeView an die Events OnSelectedNodeChanged, OnTreeNodeExpanded und OnTreeNodeCollapsed und sage dem Wurzelknoten, dass er verdammt nochmal aufgeklappt bleiben soll:
MyTreeView.Nodes[0].Expanded = true;
So erhält man bis zur endgültigen Lösung zumindest erst einmal eine halbwegs brauchbare Alternative.
Bei LIDL gibt es im Sortiment der vorweihnachtlichen Naschereien zur Zeit etwas wirklich extrem Leckeres:
Mini-Marzipanstollen!
Die Dinger schmecken (mir) wirklich sowas von gut – genial! Ein Hauch von Vanille, leichtes Butter-Aroma und ein kleiner Marzipankern. Und dabei nicht einmal teuer: Ich glaube, die 350g-Tüte hat EUR 1,99 gekostet. Also: Unbedingt ausprobieren!
Aber Vorsicht: Kann süchtig machen
So – zweiter Messetag geschafft. Mein Kollege Jens meinte gerade korrigierend, dass es eigentlich schon “Zwei-Drittel-Zeit” sei
Noch einmal essen, schlafen und auf die Messe – dann geht’s wieder heim.
Die Lokale hier in Wiesbaden sind übrigens durchaus empfehlenswert, sehr leckeres Essen und auch gemütlich. Bilder gibts dann, wenn ich wieder zu Hause bin – hab ja leider mein Notebook nicht mitgenommen (und dabei haben die hier im Hotel WLAN
) und daher auch keinen Kartenleser.
So, in ca. zwei Stunden geht’s für vier Tage auf die tekom nach Wiesbaden. Sechs Stunden Autofahrt, wird bestimmt lustig… Aber wir haben halt noch ein paar Kleinigkeiten mit zu nehmen.
Und dann: Präsenz zeigen, die Konkurrenz beschnüffeln, geniale Produkte vorführen und Kunden fangen
Ich werde mir Mühe geben, auch von dort zu bloggen – aber da muss ich natürlich schauen, wie das zeitlich so aussieht.
Einer der großen Vorteile von .NET (im Vergleich zum guten, alten C++ zum Beispiel) ist ja bekanntlich, dass der Entwickler nicht mehr daran denken muss, neu angelegte Objekte auch wieder zu löschen. Gleichzeitig ist das aber auch eines der größten Missverständnisse: Denn obwohl man sich nun sämtliche delete – Aufrufe sparen kann ist bei Architektur und Design des Codes doch ein gewisses Maß an Sorgfalt gefordert, damit die automatische Speicherbereinigung durch die .NET Garbage Collection (deutsch: Müllabfuhr) auch funktioniert wie erhofft.

Original uploaded to flicker by ♥ maggie
“Abfalltrennung: Den .NET Garbage Collector richtig nutzen” weiter lesen…