Feed Icon
.NET User Group Leipzig

iTunes steht, wie ich mit große Dateien beim iPod übertragen geschrieben habe, des Öfteren in der Kritik. Bei mir persönlich ließ sich leider iTunes 7.2 nicht über iTunes 7.1 installieren. Ich nahm an, mit der Version 7.3 sollte dieses Problem behoben sein. Mit dem Start des iPhone am 29.06.2007 in den USA wurde auch iTunes 7.3 mittlerweile veröffentlicht, aber die Probleme sind leider dieselben geblieben¹.

iTunes Windows Vista - Fehlermeldung

Auch beim Support von Apple war keine Lösung für dieses Problem verfügbar, daher musste ich mich selber um eine solche kümmern.

Hier ist sie:

  • auf Start klicken
  • "Eingabe" eingeben
  • auf Eingabeaufforderung mit der rechten Maustaste klicken und Als Administrator ausführen wählen
  • bei Windows Vista in der Eingabeaufforderung cd %systemroot%\system  bzw. bei Windows Vista x64 cd %systemroot%\syswow64 eingeben
  • regsvr32 vbscript.dll eingeben
  • Eingabeauffoderung schließen und Setup von iTunes neu starten – nun sollte es keine Probleme mehr geben

Eingabeaufforderung bei Windows Vista als Administrator starten

¹ Ähnliche Probleme hatte ich bei der Installation des Casio ClassPadManagers. Auch diese sind mit der Anleitung behoben.

Philadelphia-Torte

30. June 2007

Zutaten

  • 2 Päckchen Götterspeise
  • 200 g Philadelphia Frischkäse
  • 500 g Quark
  • 3 Becher Schlagsahne
  • 1 Wiener Tortenboden
  • etwas Zucker
  • 1 Päckchen Vanillezucker
  • 1 kleine Tasse Wasser

Zubereitung

  • Götterspeise mit Wasser nur ganz kurz aufkochen, mit Zucker abschmecken, kalt stellen. Zucker, Quark, Frischkäse zusammenrühren, kalte Götterspeise + Rest mixen, auf Boden verteilen und in den Kühlschrank stellen.

.NET Rocks! .NET Summercamp 2007Für das .NET Summercamp 2007 vom 24.09. - 28.09. haben wir einen Pool an exzellenten Sprechern zur Verfügung und planen gerade die Agenda sowie Abendveranstaltungen wie beim .NET Wintercamp 2007. Hier war z. B. Tim Alexander Ackermann¹, Senior Recruitment Manager der Microsoft Deutschland GmbH, bei uns zu Besuch und hat einen gemeinsamen Grillabend mit uns veranstaltet. Wichtig bei solchen Veranstaltungen ist, ein gewisse „Sichtbarkeit“ zu haben, um das Zielpublikum auch erreichen zu können. Softwareentwickler und Studenten sind eher über andere Kanäle als eine Tageszeitung erreichbar. Beim .NET Wintercamp 2007 haben wir auch wie für die vorherigen Camps der .NET User Group Leipzig sehr viel LobTim Alexander Ackermann von der Microsoft Deutschland GmbH beim .NET Wintercamp 2007 in Leipzig erhalten und eine gewisse Sichtbarkeit auch für zukünftige Camps erreicht. Das war uns aber zu wenig. Mit der tatkräftigen Hilfe von Gunnar Boldhaus, Silke Lipinski, Antje Schlaf und natürlich Alex als auch Martin Wörner haben wir alle Berichte übersetzt und sind nicht nur bei der INETA Europe und der INETA, sondern auch bei .NET Rocks!², ³ sichtbarer geworden. Ja! .NET rockt, .NET User Group rockt! Danke Team!

¹ Danke noch einmal Tim, dass du kurzfristig für uns Zeit gefunden hast, trotz deiner langen Anreise.
² Den Beitrag gibt es hier zum Download (9:00, 45 MB).
³ Leipzig – trotz amerikanischen Akzent fast perfekt ausgesprochen von Carl und Richard.

iPod 80 GB - ModellIch besitze einen iPod mit ganzen 80 GB an Speicherplatz und bin auch "trotz iTunes", einer Anwendung, die oft in Kritik nicht nur von Alex und Scott Hanselman steht, sehr glücklich damit. Der iPod hat ein rundum wirklich gelungenes Design¹, ist gut mit einer Hand bedienbar und dazu noch sehr flach, kurz um – er ist smart. Ein Problem gibt es dennoch: Große Dateien.

Beispielsweise entstehen bei Sprachaufnahmen in einem Zeitraum von ca. 1 h bis 2 h wie mit einem Mikrophon von Belkin etwas um die 500 MB - 1 GB an Daten, die als eine WAV-Datei abgelegt werden. Leider hakt es hier. Dateien in dieser Größenordnung können leider nicht mittels des Windows Explorers, des TotalCommanders oder anderen Anwendungen auf den Desktop PC mit einem Microsoft Betriebssystem übertragen werden. Auf einem Mac mag es vielleicht funktionieren, bei Microsoft Betriebssystemen, zumindest bei Vista, kommt eine Fehlermeldung und die Übertragung der Datei bricht ab. Ah!? In welcher Art und Weise soll dann auf Dateien zugegriffen werden? Per iTunes, das die Audiodatei gleich am liebsten in die Bibliothek von iTunes übernehmen möchte?

Ich habe das Problem mit 7-Zip gelöst. 7-Zip ist eine Anwendung zum Packen und Entpacken, die bei dem 7-Zip-Format sogar deutlich bessere Kompressionsraten erreicht als z. B. bei dem Zip-Format. Mikrophon von Belkin für den iPodSie ist außerdem aufgrund von Multithreading-Fähigkeiten für Besitzer von Mehrkern-Rechnern interessant¹. Eines kann 7-Zip darüberhinaus auch noch: Das Speichern von Dateien oder Ordnerstrukturen ohne jegliche Komprimierung. Der Trick ist nun dabei, auf den angeschlossen iPod, dort z. B. den Ordner Recordings zuzugreifen und die Dateien irgendwo auf dem Desktop PC mit den Optionen 7-z und Speichern zu sichern. So können auch die sonst "zu großen" Dateien vom iPod auf den Desktop PC überspielt werden.

7-Zip

¹ Gruß an Alex und an sein Intel Pentium 4-Stromschwein >:->

Ja genau, die technische Abteilung der Volksbanken Raiffeisenbanken führt eine Software-Aktualisierung für die Konkurrenz, den Sparkassen durch. Liebe Spammer, ich dachte ja, ihr habt schon bei Post von Spammern (1) – Nachricht vom LKA nicht mitgedacht, jetzt habt ihr einen neuen Tiefststand erreicht. Wenn das so weitergeht, braucht es bald keine Verfahren wie ein Greylisting mehr, dann reicht eine reine semantische Analyse.

Post_von_Spammern_neuer_Tiefstand

Creme für Erdbeeren, Erdbeertorten & Co.Zutaten

  • 1 Becher Schlagsahne
  • 2 Päckchen Sahnesteif
  • 1 Becher Frischkäse (naturell)
  • 100 - 150 g Puderzucker

Zubereitung

Schlagsahne mit Sahnesteif steif schlagen. Danach den Frischkäse mit dem Puderzucker verrühren und die Sahne unter den Frischkäse rühren. Auf einen Tortenboden aufbringen, mit Erdbeeren belegen und mit Tortenguß überziehen. Andere Früchte wie Aprikosen bis hin zu Kiwis sind auch möglich. Kann auch pur zu Erdbeeren & Co. genossen werden.

Seit einigen Wochen nenne ich einen dedizierten Server mein Eigentum. Virtualisierung ist gut, aber die Ressourcen eines virtualisierten Servers haben nicht mehr ausgereicht. Stefan Berger kennt sich hier besonders gut aus und hat die Angebote von Server4You empfohlen. Clever an deren Angebot ist, dass man gegen eine Verandkostenpauschale den eigenen Server nach 2 Jahren nach Hause geschickt bekommt. AMD Opteron 1210 64 Bit Prozessor, 160 GB Raid 1, NVidia Chipsatz, dass alles klingt nicht so, als ob es nach 2 Jahren nichts mehr wert sein würde und einem Verkauf bei eBay sollte nichts entgegenstehen. Stefan hat darüberhinaus noch empfohlen, Domains bei InterNetworX zu beziehen, weil man dort einer Domain hinsichtlich Leistungsmerkmalen keinerlei Kompromisse eingeht. Außerdem ist damit eine Domain von Provider und dem dort bezogenen Produkt entkoppelt.

Was kann damit machen? Beispielsweise die www.domain.de auf die IP-Adresse des Servers einstellen, aber home.domain.de stattdessen als ein Alias (CNAME) auf einen DNS-Eintrag bei einem Anbieter wie DynDNS, zu dem die aktuelle IP-Adresse des Routers bzw. Rechnerns von Zuhause übermittelt wird. Moderne DSL-Router wie die FritzBox! von AVM bringen solche Funktionalität mit, ansonsten gibt es auch entsprechende Anwendungen dafür.

CNAME bei InterNetworX

Fehlt nur noch SSL zum Glück und entsprechende Zertifikate sind relativ teuer. Falsch. Dieses Mal kommt die Empfehlung nicht von Stefan, sondern von mir, nämlich für Godaddy. Dort gibt es SSL-Zertifikate schon ab 17,99 USD. Bei den Preisen von Thwate und GeoTrust mit etwas ab 149 USD ist das schon ein Unterschied. Damit muss auch nicht ein über Werkzeuge wie SelfSSL erstelltes eigenes Zertifikat in dem Speicher für Vertrauenswürdige Stammzertifizierungsstellen installiert werden, wenn keine Warnung bei einer durch SSL geschützten Webanwendung durch die Browser angezeigt werden soll. Denn das ist für nicht wenige Benutzer, die nicht aus der Domäne der IT kommen, intransparent und schreckt ab.

Auf der BASTA! vom 17.09. - 21.09.2009 bin ich als Sprecher für folgende Themen zu Gast:

  • Mobile Anwendungen mit dem .NET Compact Framework 2.0, 19.09.2007, 08:30 - 09:45 Uhr
    Mit der zunehmenden Verbreitung von mobilen Geräten wie Pocket PCs und Smartphones wächst auch der Markt für mobile Anwendungen. In den kommenden Jahren wird sich der Trend zum mobilen Mitarbeiter weiter verstärken, was wiederum zu einer wachsenden Nachfrage nach entsprechender Software führen wird. Dafür erhalten Sie in diesem Vortrag einen umfassenden Leitfaden.
  • Web 2.0 bei mobilen Geräten, 19.09.2007, 17:30 - 18:45 Uhr
    Die Begriffe AJAX und Web 2.0 besitzen auf Entwickler eine magische Anziehungskraft. Häufig wird insbesondere die Unterstützung von den verschiedenen Browsern wie Internet Explorer, Mozilla, Safari oder Konqueror auf den verschiedenen Plattformen wie Windows oder Unix-Derivaten hervorgehoben. Doch neben den Desktop-PCs und Servern gibt es noch eine weitere Plattform: Die mobilen Geräte!
  • Multimedia, P/Invoke, SDF & Co. für mobile Anwendungen, 19.09.2007, ab 20:00 Uhr
    Bedingt durch das .NET Compact Framework als Subset des .NET Framework stehen bei mobilen Anwendungen weniger Steuerelemente und Funktionalität zur Verfügung. Doch wäre hätte gedacht, dass sich vieles mit Frameworks wie dem Smart Device Framework oder P/Invoke nachrüsten lässt. Der Vortrag zeigt wie das funktioniert, z. B. bei Videos.

Die BASTA! habe ich schon im Frühjahr 2007 besucht und fand sie wirklich großartig. Nicht nur, weil man dort Top-Speaker wie Dirk Primbs, Sebastian Weber oder Christian Weyer trifft – ich kann gar nicht alle aufzählen und alle anderen mögen mir verzeihen, hier nur drei genannt zu haben... Aber halt, das Bild kenne ich doch; ich bin unter die Top-Speaker gerutscht? Irgendwer fand also das Ergebnis des Feedbacks meiner Vorträge wirklich ganz gut – vielen Dank!

Mobile-Experte Torsten Weber

Eine Einladung zur MEDC 2007, einer Konferenz für Mobility Geeks, habe ich auch erhalten. Dort kann man z. B. Ilya Bukhsteyn, Direktor EMEA von Windows Embedded und natürlich auch Frank Prengel, Embedded Developer Evangelist, beide von Microsoft, interviewen und sich die neuesten Produkte zeigen sowie die strategische Ausrichtung der Division erläutern lassen.

Mit Franks berühmten Worten "man sieht sich"...

 Schweinefilet mit Curry Zutaten (für 4 Portionen)

  • 600 g Schweinefilet oder Schweinelende¹
  • 1 kleine Dose Aprikosen (420 g)
  • 3 Frühlingszwiebeln
  • 4 EL Öl
  • Salz
  • Pfeffer
  • 1 bis 2 TL Curry
  • ¼ l Hühnerbrühe
  • 1 Beutel 8-Minuten-Reis
  • 2 bis 3 EL Sojasoße²
  • Zucker
  • 2 bis 3 EL helles Soßenbindemittel
  • 20 g Butter
  • 150 g Erbsen (Dose oder TK)

 Wan Kwai Ketjap Asin Zubereitung

  • 1. Minute: Das Schweinefilet zuerst in Scheiben, dann wiederum in Streifen schneiden. Die Aprikosen abtropfen lassen, den Saft dieser dabei auffangen, die Früchte einmal durchschneiden. Bei einer Schweinelende nicht vergessen, die Sehnen zu entfernen.
  • 4. Minute: Die Frühlingszwiebeln waschen, putzen und schräg in Ringe schneiden.
  • 7. Minute: Das Fleisch im heißen Öl kurz anbraten, herausnehmen, salzen und pfeffern, dann Curry und Frühlingszwiebeln im Bratfond andünsten und Brühe zugießen.
  • 12. Minute: Den Reis nach Packungsanweisung garen. Die Soße mit Sojasoße, Salz, Pfeffer und Zucker würzen, aufkochen lassen und mit Soßenbindemittel verrühren. Fleisch und Aprikosen zugeben³.
  • 16. Minute: Butter im Topf schmelzen. Die Erbsen zugedeckt 4 Minuten darin dünsten. Den Reis zugeben, mit Salz und Zucker würzen, zum Fleisch servieren.

¹ Sehr lecker ist auch die Kombination von einer Schweinelende und marinierten Putenfilets (2 mittlere Stücke). Schweinelende und Putenfilets getrennt anbraten.
² Ketjap Asin von Wan Kwai passt durch den leicht süßlichen Geschmack perfekt. Gibt es beispielsweise in der Metro.
³ Kann mit Sahne noch etwas verfeinert werden.

Autogramm von Ralf Westphal in .NET kompaktVor einiger Zeit hatte mir Ralf Westphal ein Rezensionsexemplar seines und Christian Weyers Buch .NET 3.0 kompakt geschickt. Die beiden habe ich im Sommer 2003 beim .NET Summercamp kennengelernt, die die .NET User Group Leipzig schon seit einiger Zeit in eigener Regie organisiert¹. Seitdem haben wir uns näher kennengelernt, nicht nur, weil ich damals für .NET kompakt ein Autogramm haben wollte und Ralf im ersten Moment ziemlich perplex deswegen war. Meine Antwort damals auf seine "Schreibblockade" beim Autogramm war: "Wer Bücher schreibt, muss auch Autogramme geben" und schon hatte ich eines, nachdem sich Ralf dafür selber einen Text dazu einfallen musste. Das von Christian Ad hoc als Text vorgeschlagene "In Liebe" hat er dann doch nicht geschrieben. ;)

Damit gleich zur Frage – kann man mit dem Buch .NET 3.0 kompakt ".NET lieben lernen"? Was ist .NET eigentlich, in was man sich möglicherweise verliebt? Ist das etwas Ernstes, Sinnvolles fürs Leben oder ist es nur einfach wieder ein Hype, quasi wie eine Affäre, nichts langfristiges und auf lange Zeit reizvolles?

.NET 3.0 kompaktSchon bei der Einführung von .NET 1.0 im Jahr 2002 war .NET nicht leicht zu umreißen, zumal plötzlich der Begriff bei den gängigen Produkten von Microsoft wie den Serverbetriebssystemen vom Marketing als Attribut regelrecht missbraucht wurde. .NET war inhärent dabei, selbst, wenn es das nicht war. Schon mit dem Buch .NET kompakt hat Ralf meiner Meinung nach sehr nachvollziehbare Argumentationsketten geschrieben, was .NET ist und was nicht. Auch bei .NET 3.0 kompakt hat er, dieses Mal zusammen mit Christian, das erneut getan. Dass Ralf ab und zu zulässige, aber für den einen oder anderen Leser etwas an gewöhnungsbedürften Formulierungen verwendet wie ein "... stellt sich wie schon in .NET 2.0... was denn .NET überhaupt sei?" statt einem "was denn .NET überhaupt ist" oder "... der .NET Framework... " statt "das .NET Framework"² tut dem Inhalt nichts ab. Ich finde, das ist irgendwie ein Markenzeichen von Ralf. Doch zurück zu der Frage, ob .NET etwas fürs Leben ist. Das muss jeder selber entscheiden und auch .NET hat irgendwann wie alles einen Nachfolger. Das Buch hilft bei einer Einschätzung dabei und stellt einleitend neben der Beantwortung der Frage was .NET ist und was nicht, auch das veränderte Ökosystem in diesem Umfeld dar. Mit Ökosystem ist dabei das Wirkungsgefüge bei der Softwareentwicklung und mit Veränderung der Weg vom Generalisten zu Spezialisten gemeint. In den wenigsten Büchern steht so was, zumeist werden die jeweiligen Technologien wie ADO.NET oder ASP.NET bzw. ganz dedizierte Themen wie Smart Clients mit .NET in den Vordergrund gerückt aber eine wichtige Einordnung dieser Themengebiete und Hinweise auf Lernkurven fehlen².

Ich bin kein Freund von ewig langen Rezensionen von Büchern, es sei denn, es geht um eine akademisch anspruchsvolle Analyse oder eine Rezension von Ausmaßen der eines Marcel Reich-Ranicki oder Hellmuth Karasek. Zumeist geht es mehr oder weniger um eine Kaufempfehlung für die potentiellen Leser. Ist das Buch gut lesbar oder nicht? Hat es eine klar definierte Zielgruppe oder nicht und trifft der Inhalt die Bedürfnisse dieser? Kommt es mit einer großen Aufmache aber beinhaltet nur heiße Luft? Nicht selten hat ein Buch bei Amazon & Co. schon eine negative Rezension von Kunden bezüglich dieser Punkte erhalten. Demzufolge dürfte es sich um das handeln, was es potentielle Käufer interessiert: Was steht also in dem Buch und wie ist dieser Inhalt? Lohnen sich 17 EUR für Christians und Ralfs Buch?

Das Buch geht auf 221 Seiten auf folgende Inhalte ein

  • Was .NET ist
  • Welche Leistungsmerkmale von .NET 2.0 / 3.0 die Softwareentwicklung weiter vereinfachen
  • Wie Workflows in Anwendungen Einzug halten können
  • Wie der SAA-Standard (CUA) überwunden und neue Oberflächen entworfen werden können
  • Wie Systeme miteinander verbunden werden können
  • Was nach .NET 2.0 / 3.0 kommt

Resultat: Für alle die, die .NET als etwas nicht fassbares, als eine Art "Wolke" Technologie empfinden, ist das Buch lesenswert. Der Begriff .NET wird verständlicher, auch wenn er dadurch nicht unbedingt sofort greifbarer wird, denn wie "ein Mycel durchdringt es die Produkte und Technologien von Microsoft"4. Eingangs wird des Öfteren auf .NET kompakt verwiesen aber ich denke, für jeden .NET-Beginner reichen die Erläuterungen in .NET 3.0 kompakt. Wer .NET wiederum schon kennt, bekommt im Managerstil kurz und prägnant die mit .NET 2.0 / 3.0 verbundenen Neuerungen. Wer dann Lust auf Extension Methods, Lamba-Ausdrücke, Anonyme Typen oder gar LINQ verspürt, findet zwar immer ein kleines Beispiel, aber um von einem "ich hab's mal gesehen" zu "ich kann es anwenden und weiß auch wo und wann" zu kommen, reichen die Inhalte im Buch bei Weitem nicht . Ist das schlimm? Nein, ich finde damit entspricht es sicherlich der Zielgruppe und auch deren Erwartungen und so kann ich es .NET-Beginnern und auch den -Entwicklern, die einen Überblick über neues im .NET-Universum haben möchten, nur empfehlen.

--

Was ist mir bei der Lektüre aufgefallen? Einfach so drauf los geschrieben:

  • Bei domänenspezifischen Sprachen sind die Autoren durcheinandergekommen: Sie schreiben von "domänenspezifischen grafischen", dann von "grafischen domänenspezifischen" Sprachen sowie "grafischen Programmiersprachen". Besser ist: Visuelle domänenspezifische Sprachen. Siehe Seite 6, 19 und 209.
  • Die Autoren schreiben von der Trennung von Programmcode vom HTML einer Webanwendung und dem Namen dieser Technologie als Code Behind. Der geneigte Leser mag vielleicht denken, dass diese Technologie auch bei .NET 2.0 so heißt. Sie heißt hier ein wenig anders, nämlich Code Beside5. Mit Code Beside kommt die Mächtigkeit dieser Technologie besser zum Ausdruck. Da läuft nicht ominös und nicht-transparent Anwendungscode im Hintergrund, sondern fügt sich neben selbst geschriebenen Anwendungscode und weiteren Beschreibungssprachen nahtlos ein. Diese Technologie ist auch als ein Unterschied der Modellgetriebenen Architektur (MDA; engl. Model Driven Architecture, MDA) zu den domänenspezifischen Sprachen zu sehen. Während bei MDA Anwendungscode in dafür vorgesehende Slots eingefügt wird, wird beim Ansatz der DSLs Anwendungscode neben dem generierten Anwendungscode gestellt. Siehe Seite 22, 105, 110, 128 und noch ein paar Mal mit Buch irgendwo.
  • Ich denke "Werttyp-Daten" gibt es nicht und verwirrt nur, besser wäre einfach "Werttypen". Siehe Seite 26.
  • Wissen die Leser was mit "... Boxing führt zu einem erhöhten Druck auf den Heap..." gemeint ist? Ich habe da meine Bedenken – es ist ein unglücklich gewähltes Bild. Siehe Seite 27.
  • "... den Delegaten-Typ Predicate<T> haben Sie oben ja schon..." – nur leider ist "oben" Seite 33. Ein Buch wird nicht unbedingt linear vom Anfang zum Ende gelesen. Ein Verweis von Seite 47 auf Seite 33 ohne Seitenangabe ist sehr unschön.
  • Wir – gemeinsam sind wir stark! Die wichtigste Regel, die leider aber von den wenigsten Autoren beherzigt wird, ist, nicht in der Wir- oder in der Uns-Form zu schreiben. Sehr fraglich, warum das durch das Lektorat gegangen ist, bei den meisten Verlagen ist es absolutes Tabu. Christian wird sich vielleicht noch an das "Wie geht's und denn heute?" erinnern: Vielleicht sind die paar "Wir" eine Hommage an die Kellnerin des Marriott? ;) Im Buch insbesondere ab Seite 61 ff. zu finden.
  • "... Bildschirmfoto...", "... Exempel..." – vielleicht meinte der Autor ja "example"? Ein Exempel lässt die Lateiner (lat. exemplum) aufhorchen, denn es ist ein warnendes Beispiel und man spricht daher auch vom Exempel statuieren. Bestimmt ist statt Exempel Beispiel gemeint. Gesehen auf Seite 67, 68 und 98.
  • Zwischen dem Kapitel "Code vereinfachen" und "Logik fließen lassen" gibt es einen Stilbruch. Das Kapitel "Code vereinfachen" ist sehr technisch, arbeitet dazu mit wenig bildhaften Darstellungen und enthält sehr viele Fachbegriffe. Das Kapitel "Logik fließen lassen" ist sehr locker geschrieben, und enthält viele Fakten. Das gilt auch für die beiden folgenden Kapitel "Oberfläche aufpeppen" und "Systeme verbinden". Das vorletzte Kapitel "Jenseits von .NET 3.0" ist wiederum im Stil wie "Code vereinfachen" geschrieben. Bei den genannten drei Kapiteln in der Mitte hätte ich mir also weniger Fakten und dafür ein paar mehr Visionen, halt etwas Raum für Ideen was man damit machen kann, gewünscht.
  • Das Kapitel "Logik fließen lassen" ist mir persönlich zu lang geraten. Nach etwas mehr als der Hälfte des Kapitels mit insgesamt 43 Seiten, musste ich schauen, wie viel noch kommt. Drei, vier Seiten weniger, damit weniger über Activity-Kategorien, weniger über HandleExternalEventActivity und mehr was man damit machen kann, als wie es funktioniert und das Kapitel wäre optimal.
  • "Sie riechen auch... sicherlich... einen erhöhten Mehraufwand in der Programmierung... mit den richtigen Werkzeugen... werden diese... Konzepte schnell automatisiert genutzt werden können." Wo sind Verweise auf das Web? Wo sind Verweise auf Literatur? Das sich irgendwie, irgendwann irgendetwas, irgendwo für die Windows Communication Foundation schon finden wird, ist klar. ;). Gesehen auf Seite 155.
  • Sehr gut finde ich, dass die beiden Autoren Web Services "zurechtstutzen". Sie sind "... im WCF-Kontext nur ein kleines Implementierungsdetail in Form eines Bindings...". Vollkommen richtig, doch nach wie vor sind leider einige Berater nicht nur im Bezug auf die Windows Communication Foundation gegenüber "eine Serviceorientierung heißt nicht Web Service-Orientierung" resistent. .NET-Einsteigern sollte das von Anfang an bewusst sein. Gefunden auf Seite 161.
  • Manche der Abbildungen sind ganz "schrecklich" – sie haben einen schwarzen Hintergrund. Siehe Seite 99, 128 und Seite 179.
  • Die Autoren schreiben, dass Iteratoren und Generics nur eher Verfeinerungen und evolutionäre Schritte gegenüber beispielsweise partiellen Typen sind, die einen größeren Impact haben sollen. Ich finde das stimmt nicht. Sicherlich gibt es solche Techniken schon länger, wie den Templates bei C++ und es gibt auch viel mächtigere Vorangehensweisen wie non-invasive Frames und auch ich hätte mir Generics schon bei .NET 1.0 gewünscht – aber das sie nur eine Verfeinerung sein sollen, würdigt nicht ihre Bedeutung. Mit Generics können Entwurfsmuster wie das Singleton variabel gemacht werden, Generics ermöglichen erst die ab der Aussage, dass es sich bei nur um Verfeinerungen handelt, kommenden 24 Seiten über LINQ & Co. Generics finden eine breite Anwendung. Sie sind mehr als eine einfache Verfeinerung. Warum das auch so in einem früheren Kapitel mit "Generics sind wahrscheinlich das am meisten thematisierte Sprachfeature des .NET Frameworks 2.0... eine gleichermaßen grundlegende wie rundum positive Erweiterung... kaum noch ohne sie auskommen werden." steht? Ich denke da war nicht ein- und derselbe Autor am Werk. Siehe Seite 27 und 185.
  • Im Kapitel "Weiterführende Informationen" und dort in den Abschnitten "Literatur" sowie "Links" werden Verweise auf das Internet in Form einiger langer URLs aufgeführt. Ich finde, URLs mit um die 20 Zeichen und mehr sind out, nicht nur, weil Verweise ins Internet relativ schnell veralten. Da muss was anderes her, sei es in der Form wie tinyurl oder einem Werkzeug dafür, sobald es mehr Verweise werden (wie in Programmieren mit dem .NET Compact Framework – ohne jetzt dafür Werbung machen zu wollen und nur weil Ralf diese Lösung selbst gelobt hat). Siehe Seite 210 ff.
  • Im Buch wird "Fließquelltext" verwendet; dass erste Buch, was mir in dieser Form aufgefallen ist. Das gefällt mir sehr gut.

¹ Das nächste .NET Summercamp läuft vom 24.09. - 28.09.2007 – Informationen dazu gibt es hier.
² Specializing Generalist – das ist die "besondere" Ausprägung vom Weg zur Spezialisierung. Was soll es ausdrücken? Am besten passt ein Verweis: David Perkins is a specializing generalist. This means that David has applied his general skill set into multiple types of specialized roles. David has consistently used his general skills of problem solving, process identification, and planning to achieve superior results. David has specialized his general skills into the areas of business analysis, solution architecture, high reliability software development, systems engineering, process procedure implementation and project management.
³ Das .NET Framework oder der .NET Framework? Welcher Artikel ist richtig? Für das Genus gibt es bei Entlehnungen bzw. Fremdwörtern zwar keine festen Regeln, aber bestimmte Prinzipien. Ein häufig angewandtes Prinzip ist, dass das Genus der deutschen Entsprechung oder eines sinnverwandten deutschen Wortes übernommen wird. Das wäre bei -work "_das_ Werk". Das komplexe Wort "Framework" hat die Struktur einer Zusammensetzung, wo das Zweitglied Wortart, bei Substantiven auch das Genus und die Bedeutung bestimmt (NET ist dann wieder eine nähere Bestimmung dazu). Man kann sich also auch an analogen Fällen wie _Teamwork, Network_ orientieren, die beide sächlich sind. Teamwork findet man auch im Rechtschreibduden, Network immerhin im "Duden. Deutsches Universalwörterbuch". Die Unsicherheit entsteht sicher hier auch dadurch, dass ".NET Framework" wie ein Eigenname meist ohne Artikel verwendet wird.
Quelle: Frau Dr. Hannelore Poethe von der Universität Leipzig.
4 S. 7
5 Alex Kommentar: Bei ASP.NET 2.0 heißt das Tag, sicher aus Gründen einer Abwärtskompatibilität, immer noch codebehind.

Durch einen Singleton-Provider bzw. einer -Base, die jeweils mit generischen Typen in C# 2.0 (Generics) implementiert werden, wird der Freiheitsgrad eines Softwarentwicklers stark eingeschränkt. Statt dieses Entwurfsmuster immer wieder pro Klasse neu zu implementieren, ist nur die einmalige Implementierung eines Singleton-Providers notwendig. Dieser ermöglicht dann die Anwendung auf (fast) jede Klasse. Das heißt konkret, dass mitttels SingletonProvider<MeineKlasse>.Instance.MethodeA() auf die MethodeA() im Sinne eines Singleton zugegriffen werden, ohne dass ein Singleton-Entwurfsmuster in der Klasse MeineKlasse überhaupt implementiert wurde.

Doch damit nicht genug. Der Freiheitsgrad kann weiter eingeschränkt werden. Und zwar indem der Singleton-Provider bzw. die -Base bei Bedarf einfach automatisch generiert oder sogar als Bibliothek eingebunden werden. Solche Techniken forciert insbesondere der Ansatz der Software Factories, wie er von Jack Greenfield und Keith Short definiert wurde. Grund genug für Microsoft, für die Entwicklung von und mit Software Factories auch entsprechend benötigte Tools wie das Guidance Automation- und das DSL-Toolkit (GAT) zur Verfügung zu stellen und in naher Zukunft durch weitere zu ergänzen.

Inwieweit mit den wichtigsten Konzepten wie Automatisierung (Guidance and Automation) oder auch der domänenspezifischen Modellierung (DSM) die Ziele von Software Factories erreicht werden kann, zeigt der Artikel "Industrialisierung der Wiederverwendung – Software Factories"¹, ².

Nachfolgend ist ein Singleton-Provider und eine -Base dargestellt, die jeweils getrennt herunterladbar sind. Ein Visual Studio 2005-Projekt gibt es hier: Singleton.zip (40,21 KB).

Singleton-Provider

Stellt ein Singleton-Muster zur Verfügung. Dabei auftretene Ausnahmen bei der Initialisierung werden gefangen und können abgefragt bzw. erneut geworfen werden.

using System;

namespace Patterns
{
    /// <summary>
    /// Stellt ein Singleton-Muster direkt zur Verfügung.
    /// </summary>
    /// <typeparam name="T">Der Typ, für den ein Singleton erstellt werden soll.</typeparam>
    public sealed class SingletonProvider<T> where T : new()
    {
        #region Classes
        /// <summary>
        /// Innere Klasse für Singleton-Pattern.
        /// </summary>
        private class SingletonCreator
        {
            /// <summary>
            /// Aufgetretene Exception im Initialisieren/Instanzieren.
            /// </summary>
            internal static readonly Exception s_InitializationException = null;
            /// <summary>
            /// Die Instanz.
            /// </summary>
            internal static readonly T s_Instance = default(T);

            /// <summary>
            /// Inititialisiert eine Instanz des Typs T.
            /// </summary>
            static SingletonCreator()
            {
                try
                {
                    s_Instance = new T();
                }
                catch (Exception exception)
                {
                    s_Instance = default(T);
                    s_InitializationException = exception.InnerException;
                }
            }
        }
        #endregion

        #region Properites
        /// <summary>
        /// Ruft die Exception ab, aufgrund deren die Instanziierung/Initialisierung fehlgeschlagen ist.
        /// </summary>
        public static Exception InitializationException
        {
            get { return SingletonCreator.s_InitializationException; }
        }

        /// <summary>
        /// Ruft die Instanz ab.
        /// </summary>
        public static T Instance
        {
            get { return SingletonCreator.s_Instance; }
        }
        #endregion

        #region SingletonProvider
        /// <summary>
        /// Initialisiert eine neue Instanz der SingletonProvider-Klasse.
        /// </summary>
        private SingletonProvider() { }
        #endregion

        #region Methods
        /// <summary>
        /// Prüft ob beim Initialisieren einer Instanz einer Klasse eine Exception aufgetreten ist.
        /// Wenn ja, wird diese Exception geworfen.
        /// </summary>
        public static void CheckInitialization()
        {
            if (SingletonProvider<T>.InitializationException != null)
            {
                throw SingletonProvider<T>.InitializationException;
            }
        }
        #endregion
    }
}

SingletonProvider.zip (1 KB)


Singleton-Base

Stellt ein Singleton-Muster über Vererbung zur Verfügung. Auftretene Ausnahmen bei der Initialisierung werden gefangen und können abgefragt bzw. erneut geworfen werden.

using System;
using System.Reflection;

namespace Patterns
{
    /// <summary>
    /// Stellt ein Singleton-Muster über Vererbung zur Verfügung.
    /// </summary>
    /// <typeparam name="T">Der Typ, für den ein Singleton erstellt werden soll.</typeparam>
    public class SingletonBase<T> where T : class
    {
        #region Classes
        /// <summary>
        /// Innere Klasse für Singleton-Pattern.
        /// </summary>
        private class SingletonCreator
        {
            /// <summary>
            /// Aufgetretene Exception im Initialisieren/Instanzieren.
            /// </summary>
            internal static readonly Exception s_InitializationException = null;
            /// <summary>
            /// Die Instanz.
            /// </summary>
            internal static readonly T s_Instance = default(T);

            /// <summary>
            /// Inititialisiert eine Instanz des Typs T.
            /// </summary>
            static SingletonCreator()
            {
                try
                {
                    Type typeT = typeof(T);
                    ConstructorInfo constructorInfo = null;

                    constructorInfo = typeT.GetConstructor(
                        BindingFlags.DeclaredOnly |
                        BindingFlags.Instance |
                        BindingFlags.NonPublic,
                        null,
                        Type.EmptyTypes,
                        null);

                    if (constructorInfo == null)
                    {
                        // falls kein privater Konstruktur vorhanden
                        constructorInfo = typeT.GetConstructor(
                            BindingFlags.DeclaredOnly |
                            BindingFlags.Instance |
                            BindingFlags.Public,
                            null,
                            Type.EmptyTypes,
                            null);
                    }

                    Object o = constructorInfo.Invoke(null);
                    s_Instance = o as T;
                }
                catch (Exception exception)
                {
                    s_Instance = default(T);
                    s_InitializationException = exception.InnerException;
                }
            }
        }
        #endregion

        #region Properites
        /// <summary>
        /// Ruft die Exception ab, aufgrund deren die Instanziierung/Initialisierung fehlgeschlagen ist.
        /// </summary>
        public static Exception InitializationException
        {
            get { return SingletonCreator.s_InitializationException; }
        }

        /// <summary>
        /// Ruft die Instanz ab.
        /// </summary>
        public static T Instance
        {
            get { return SingletonCreator.s_Instance; }
        }
        #endregion

        #region Methods
        /// <summary>
        /// Prüft ob beim Initialisieren einer Instanz einer Klasse eine Exception aufgetreten ist.
        /// Wenn ja, wird diese Exception geworfen.
        /// </summary>
        public static void CheckInitialization()
        {
            if (SingletonBase<T>.InitializationException != null)
            {
                throw SingletonBase<T>.InitializationException;
            }
        }
        #endregion
    }
}

SingletonBase.zip (1 KB)


Beispiel der Verwendung des Singleton-Providers

SingletonProvider.<TestClass>.Instance.WriteHelloWorldOnConsole();

...

class TestClass
{
   public void WriteHelloWorldOnConsole()
   {
      Console.WriteLine("Hello World");
   }
}

Und abschließend noch ein Dankeschön an Dirk, der mich mit seinem Blog-Eintrag Das Singleton - das Unbekannte Wesen inspiriert hat.

¹ OBJEKTspektrum 03/2006, Gunther Lenz, Torsten Weber, "Industrialisierung der Wiederverwendung – Software Factories"
² Mehr Informationen zu den Themen Singleton, domänenspezifischen Sprachen und Software Factories:

Post von der Polizei

11. June 2007

Diese Nacht wurde ich nach einem großartigen Fest¹ für Alex, das Marcel federführend organisiert hat, angehalten. Dabei wurde ich nicht von der Polizei am Straßenrand raus gewunken, nein, die Polizei fuhr hinter mir mit Blaulicht, Martinshorn und "STOP - POLIZEI". Einige Schrecksekunden später, dass ich eine rote Ampel überfahren habe, zu schnell gefahren bin, ohne Licht fahre, irgendwas am 1er ist, dachte ich, "die sollen nur kommen" und war mir keiner Schuld bewusst. Gerade in dem Moment als ich die linke Seitenscheibe in ehrbarer Absicht öffnete, bemerkte ich, dass eine Waffe auf mich gerichtet ist und hörte "Allgemeine Verkehrskontrolle – Bitte Ihre Papiere und den Fahrzeugschein".

Also richtete ich meine Aufmerksamkeit zuerst diesem der beiden anwesenden Polizisten zu, mit der Bitte, gefälligst die Waffe umgehend zu senken und höflich zu sein, danach den erbetenen Papieren und anschließend dem Test auf Alkohol. Als sie feststellten, dass alles in bester Ordnung ist, überprüften sie auch noch, ob das Auto gestohlen ist. Warum? Eigentümer und Besitzer können ja schon aus Gründen einer Ehe oder günstigeren Versicherung unterschiedlich sein. Aber wenn der Nachnahme und Anschrift diesselbe ist, tun sie die Kontrolle auch dann - Gruß an Wolfgang - wenn ich nur einen 10-Jahre alten Golf gefahren hätte? Oder tun sie es, weil ich mich über sie aufgeregt habe? Das Polizisten heutzutage gefährlich leben ist mir klar, aber dafür gibt es nun mal einen zweiten Mann zur Absicherung und schon gar nicht ist jeder Autofahrer automatisch ein Verbrecher. Natürlich wenn wie bei mir der zweite Mann aber anstatt einer Absicherung nur irgendwas unverständliches, Half Life 2 lässt grüßen, an Codes in sein Sprechfunkgerät stammelt, läuft der erste sicherlich mit gezogener Waffe herum. Vielleicht hat der andere gerade Essen beim Chinesen bestellt?

1 BMW 5-türig – TV-Spot der BMW Group
TV-Spot der BMW Group zum 1er BMW – 3 türig²

Jedenfalls, ein paar Minuten später wünschten mir beide eine gute Weiterreise, immerhin was – und ich hatte eine gewisse Versuchung im Bauch, schneller zu fahren, als erlaubt.

¹ Mit um die 25 an guten Freunden, einigen Kilos an Steaks, Würsten und Vegetarischem, 9 bestätigten Mückenstichen bei mir trotz Räucherstäbchen und Autan, einer genialen Geocaching-Tour sowie einem Lagerfeuer und Wasserraketen. Highlight bei allen war der Dildo fürs Gehirn und so kam noch schnell eine Sammelbestellung zusammen.
² Kennt zufällig jemand den Song³?
³ Alex hat ihn entdeckt: Er heißt "Je Ne Te Connais Pas", ist von der Band Prototypes und es gibt ihn zum kostenlosen Download (Stimuli, Prototypes).

Aktualisierung: Siehe auch diesen Blogeintrag zu Problemen mit der Sidebar.
---

Die Wetter-Minianwendung unter Windows Vista hat seit zwei Wochen bei mir ihre Funktion eingestellt. Nicht, dass ständige 21 °C und Sonnenschein schlecht wären, aber der Sinn dieser Minianwendung liegt nun darin, dass aktuelle Wetter und das der nächsten drei Tage anzuzeigen.

Wetter-Minianwendung unter Windows Vista

Wie bekommt man die Minianwendung wiederhergestellt¹?

  1. Minianwendung deinstallieren
    Entfernen der Wetter-Minianwendung unter Windows Vista
  2. Von einem Freund sich die Minianwendung schicken lassen (diese liegt unter C:\Program Files\Windows Sidebar\Gadgets\Weather.Gadget)
  3. Den Inhalt dieses Ordners zippen und in Weather.gadget umbenennen
  4. Den Ordner C:\Users\[Name des Benutzers]\AppData\Local\Microsoft\Windows Live\Services\Cache\weather löschen
  5. Minianwendung installieren

¹ Eine Alternative, die man voher noch probieren kann, ist, der Teilschritt vier. Danach muss die Sidebar beendet und neu gestartet oder das System neu gestartet werden. Hilft das nichts, ist bei Teilschritt eins zu beginnen. Siehe auch Position Sidebar & Minianwendungen verändert sich und dort "Sidebar_wiederherstellen_auto.bat" in "Sidebar_auto.zip", um den Cache der Wetter-Minianwendung automatisiert zu löschen.

Zu den Gadgets kann man übrigens sehr bequem über Start, der Eingabe von "Ausführen" bei Suche starten, Ausführen anklicken und der Eingabe dort von shell: gadgets oder shell: default gadgets gelangen.


Heute mit Alex bei Gesprächen mit der Leipziger Messe entdeckt:
Was soll einem das Schild "falsch" sagen? Wer weiß das schon so genau.
Die Gespräche waren jedenfalls sehr erfolgreich.

Schild "falsch" auf dem Gelände der Leipziger Messe

CEO bei GROSSWEBER, Entrepreneur, Entwickler, Finanzinvestor. Promoter von Community, Open Source und
Open Spaces.

Ich biete Consulting und Schulungen / Trainings, u. a. zu mobilen Geräten, Lync.
GROSSWEBER

Bei GROSSWEBER wird praktiziert, was gepredigt wird. Dort werden Schulungen für moderne Softwaretechnologien angeboten, wie Behavior Driven Development, Clean Code, Git oder HTML5. Their staff is fluent in a variety of languages, including English.

Categories

Calendar

<July 2014>
SunMonTueWedThuFriSat
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

Archive

My subscribed blogs

Blogs of good friends