VS2008ImageLibary.zip ist bekanntlich die "Image Library" von Visual Studio, die eine Vielzahl ganz netter, aber nicht unbedingt ausgefallener Icons für Symbol- und Menüleisten enthält. In meinem Visual Basic 2008-Kompendium erwähne ich sie auf Seite 65, da eine Bitmap aus dem Archiv in dem Beispielprogramm verwendet wird. Leider gibt es VS2008ImageLibary.zip nicht bei Visual Basic 2008 Express Edition (sie sollte sich im Ordner %ProgramFiles%\Microsoft Visual Studio 9.0\Common7 befinden). Ich habe diese "Kleinigkeit" leider übersehen, da ich beim Schreiben des Buches sowohl die Express als auch die Pro Version installiert hatte. Nicht nur für die Leser, die nur über die Express Edition verfügen, ist das ein wenig ärgerlich, zumal es keinen direkten Ersatz gibt. Ich habe mir vor einigen Monaten die wirklich gute Icon-Library Krypton Icon Pack gekauft (89 US$), da ich es leid war, im Internet immer wieder nach denselben Icons zu suchen, die eigentlich bei Visual Studio/Visual Basic fest dabei sein sollten, doch kommt diese Option sicher nicht für jeden in Frage (es gibt natürlich viele andere vergleichbare Icon-Libraries). Auch wenn ich es wirklich schade finde, dass die ImageLibrary bei den Express Editionen nicht dabei ist (gerade "Hobby-Programmierer" haben Zeit und im Allgemeinen auch Spaß daran, sich mit den optischen Details ihrer Anwendungen zu beschäftigen), muss man leider damit leben. Es gibt (mind.) 3 Alternativen: 1) Man besorgt sich VS2008ImageLibary.zip "irgendwo". Diese Variante zähle ich lediglich der Vollständigkeit halber auf und empfehle sie nicht, da es "lizenzrechtlich" nicht ganz sauber sein dürfte. 2) Man installiert die für 90 Tage gültige Testversion von VS 2008 Pro (bei VS 2005 sind sie unter dem Namen VS2005ImageLibrary.zip auch dabei). Bei der Installation kann die Grafikbibliothek explizit ausgewählt werden (die Option sollte gesetzt sein - auch bei dieser Variante sollte man die Lizenzbedingungen lesen). 3) Man begibt sich auf die "Jagd" nach kostenlosen Icons, was viel Ausdauer und sicher auch einen aktuellen Virenscanner und Popup-Blocker erfordert. Auch Microsoft offeriert ein paar kostenlose Icons (als "Dankeschön" für die Registrierung der Express Edition), die aber keinen allzu praxistauglichen Eindruck machen. Das "FreeIcon"-Angebot von FamFamFam macht einen ganz guten Eindruck. Also, mein Wunsch Nr. 1 für die nächste Version von Visual Basic Express sind natürlich eine umfangreiche Icon-Sammlung (neben einem "Ribbon-Designer", den es eventuell geben könnte, da die Multifunktionsleisten praktisch ein fester Teil von Windows 7 sein werden). Sollte jemand eine freie Icon-Library kennen, würde ich mich natürlich über einen Hinweis freuen.
Bei manchen Dingen erwartet man einfach, dass sie funktionieren. Oder andersherum: Wenn sich ein Programm wie der PowerPoint 2007-Viewer unter Windows Server 2008 (das vor ein paar Tagen frisch installiert wurde) nicht starten lässt, ist das ein wenig "seltsam". Nun, es kam vor und zunächst war ich ratlos bis ich in einem Forum die Lösung fand: 1) In %program files%\Microsoft Office\Office 12 einen Unterordner "1033" anlegen (die Zahl steht bekanntlich für LCID für Englisch(USA)) 2) Die Datei Ppvwintl.dll aus dem Unterordner 1031 in den neuen Ordner kopieren (der "Country Code" für Germany). Danach lässt sich der PowerPoint-Viewer starten. Welche dreistelligen Millionenbeträge für den Support Microsoft wohl jedes Jahr durch die Mitwirkung seiner Anwender in den unzähligen Foren einspart? PS: Eine Liste aller "Country Codes" findet man übrigens hier.
(neulich vor dem Apollo Hammersmith in London - Motörhead spielen hier in Kürze auch wieder) Vor kurzem wurde Silverlight 3 von Microsoft offiziell freigegeben und seit kurzem gibt es für VS 2008 SP1 und VS WebDeveloper Express SP1 die Silverlight 3 Tools, die aus Vorlagen, der Silverlight-Runtime und dem Silverlight SDK bestehen. Neben der Möglichkeit gestreamtes HD-Video ruckelfrei und, sofern wie Grafikkarte mitspielt, in voller Bildschirmauflösung darstellen zu können (wer sich davon überzeugen möchte, wie "Web-TV" in naher Zukunft aussehen könnte bzw. im Grunde schon aussieht, muss sich nur die Wimbledon 2009-Übertragungen im Fullscreen-Mode anschauen, die mit einer Kombination aus Silverlight 3-Client und IIS Stream Media Services realisiert wurden - wenn man lang genug durchhält, kann man auch die Kommentare von Boris Becker als Co-Kommentar in erstaunlich gutem Englisch genießen, wenngleich er einmal versehentlich "club" wie "cloub" aussprach, sich aber sofort selber korrigierte;) - Flash kann das im Prinzip auch, aber vermutlich nicht ganz so elegant) wurde vor allem etwas für die Anbindung von Datenbankinhalten über eine recht komfortable Datenbindung, ein leicht verbessertes DataGrid (das eine Gruppierung von Datensätzen bietet) und vor allem das neue DataForm-Control getan. So weit, so schön, doch wer als hoffnungsvoller Entwickler die "Zukunft" des SmartClient selber kennenlernen und seine erste Silverlight 3-Anwendung mit Datenbindung umsetzen möchte, wird vor unerwartete Probleme gestellt und man fragt sich irgendwann, ob es sich wirklich lohnt, dafür seine Zeit zu ver(sch)wenden. Um es kurz zu machen (das Ganze hat mich einen "halben Tag" gekostet), meine Erfahrung in Stichworten: >Fast alle Blog-Einträge, Tutorials, vor allem aber die "How to Videos" von Microsoft, die unmittelbar nach der Mix09 erschienen sind, basieren noch auf der ersten Beta. Im Vergleich zur finalen Version hat sich was die Datenbindung angeht praktisch "alles" geändert, so dass diese Videos und leider auch ein ansonsten sehr gut gemachter Artikel zum Thema DataForm, der vor kurzem im dot.net-Magazin erschien, unter diesem Hintergrund für einen Einsteiger relativ wertlos ist (die Betonung liegt auf relativ). >Die größte Änderung ist, dass das DataForm-Control nicht mehr Teil der Silverlight 3-Runtime ist, sondern in das Silverlight 3 Toolkit ausgelagert wurde, das einen separaten Download darstellt. Auch einige Schnittstellen (etwa IBindable) gibt es nicht mehr, genau wie die Assembly System.ComponentModel.dll, die man in einigen Tutorials erst einmal einbinden soll, die aus der Runtime wieder herausgenommen wurde. >Ich kann mir zwar keinen (vernünftigen) Grund vorstellen, warum ein Unternehmen mit soviel Erfahrung wie Microsoft so viele Änderungen noch in letzter Minute durchführt, aber irgendwelche Gründe wird es sicher geben und es ist auch alles haarklein in einem "Breaking Changes"-Dokument beschrieben, das mit den Silverlight 3 Tools daherkommt (und dass man unbedingt ausführlich lesen sollte). >Sehr viel ärgerlicher ist es, dass das alles anscheinend nur mit einem englischen VS 2008 SP1 funktioniert. Bei einem "deutschen" VS 2008 SP1 lassen sich die Silverlight 3 Tools nicht installieren bzw. es erscheinen keine Projektvorlagen, bei einem "Mix" (erst die deutschsprachige Version, dann die englische Version "drüberinstalliert", so dass man zwischen den Sprachen umschalten kann) funktioniert es nur scheinbar. Die Vorlagen werden angeboten, doch VS 2008 stürzt nach dem zweiten oder dritten Start der Anwendung schneller ab als man "so ein Sch..." aussprechen kann. Es ist richtig, dass in den Installationsvoraussetzungen der Silverlight 3 Tools angegeben wird, dass die VS-Sprachversion "ENU" sein muss, doch a) wer liest das so genau und b) warum muss es überhaupt so sein, zumal die Silverlight 3 Tools keine Beta oder CTP mehr sind, wo man das noch halbwegs nachvollziehen kann (bzw. wo es einfach so ist). Es wird wirklich Zeit, dass Microsoft seine "internationalen Kunden" etwas ernster nimmt und dafür sorgt, dass sich offizielle VS-Erweiterungen unter jeder Landessprache installieren lassen (mag sein, dass es noch kommt, denn neben der Englischen wird auch eine Japanische Version des Toolkits angeboten). Gerade als Buchautor kann und möchte ich mir nicht die englische Version installieren, zumal das Problem zu lösen wirklich nicht so schwer sein kann. Wer diese Hürde erfolgreich genommen hat (bei mir bedeutete es, zuerst VS 2008 DE komplett zu deinstallieren, um danach VS 2008 Pro ENU und danach VS 2008 SP1 ENU zu installieren - was unter Windows Server 2008, das bei mir in der wirklich sehr guten VirtualBox von Sun läuft, erstaunlich schnell ging), läuft alles ohne Probleme. Es ist wirklich beeindruckend, welche Möglichkeiten bei Silverlight 3 z.B. durch das DataForm-Control (das wie erwähnt inzwischen Teil der Silverlight Toolkits ist) zur Verfügung stehen, um "Geschäftsdaten" einzubinden. Richtig interessant wird es im Zusammenspiel mit den neuen .NET RIA Services, die aktuell noch als CTP vorliegen. Die .NET RIA Services verbinden einen (Silverlight-) Client mit einem (ASP.NET-) Backend und generieren Proxy-Klassen, die der Client benutzt, um über Funktionsaufrufe in der Anwendungslogik domainspezifische Operationen für Daten(bank)-abrufe und –Aktualisierungen und andere Service-Operationen durchzuführen und eine Datenbindung nutzen zu können, die nicht jedes Mal erneut implementiert werden müssen. Das erspart einem nicht nur das Hantieren mit WCF-Services oder ADO.NET Data Services, sondern auch das Schreiben des immer wieder gleichen Zugriffs- und Validierungscodes. Wer mehr über den Umgang mit den .NET RIA Services erfahren möchte, sollte das Walkthrough "Creating your first .NET RIA Services Application" durcharbeiten (ein Erfolgserlebnis ist hier praktisch garantiert) und nicht vergessen bei allen anderen Tutorials darauf zu achten, ob sie sich noch auf die Beta beziehen. PS: Wie man die Silverlight 3 Tools eventuell doch auf einem deutschen VS 2008 SP1 installieren könnte, beschreibt ein gewisser Florian Mätschke in seinem Blog (ich habe es nicht probiert und der Hinweis bezieht sich auch noch auf die Beta-Version).
(demnächst nicht mehr sharp genug?) Für eingefleischte VB-Entwickler mag sich der Titel meines Blogeintrags nach einem ähnlichen "Horror" (bezogen auf die filmische Qualität) wie der Kinostreifen "Alien vs Predator" anhören (egal wer gewinnt, wir verlieren), speziell für C#-Entwickler hat ein solcher Vergleich durchaus seinen Reiz, gilt für manche das kommende F# bereits als das künftige C# (wenngleich das mit Sicherheit nicht passieren wird). Ich halte F# für viel zu kompliziert und anspruchsvoll für den Alltagsgebrauch, so dass es maximal für eine kleine Minderheit (Elite) an C#-Entwicklern eine echte Alternative sein dürfte. Das folgende kleine Beispiel habe ich aus einer ganz gut gemachten, wenngleich recht spärlichen Einführung in F# unter http://fsharp.net (es ist erstaunlich schwierig funktionierende und vor allem aussagekräftige Beispiele zu finden) gezogen - es berechnet die Quadratzahlen der Zahlen von 1 bis 10: let Quadrat x = x * x let Zahlen = [1 .. 10] let Quadratwurzeln = List.map Quadrat Zahlen printfn "n^2 = %A"Quadratwurzeln Ein Schleifenbefehl wird nicht benötigt, List.map wendet stattdessen die Funktion Quadrat auf alle Elemente der Liste Zahlen an (eigentlich gar nicht sooo kompliziert). Dass auch C# 3.0 (und VB.NET 9.0) so etwas können, macht das folgende Beispiel deutlich: Func<int, int> Quadrat = x => x * x; var Zahlen = Enumerable.Range(1, 10); var QuadratWurzeln = Zahlen.Select(Quadrat); Console.WriteLine("n^2 = {0}", QuadratWurzeln.Aggregate("", (s, i) => s + " " + i)); Das ist nicht F#, sondern ganz normales C# 3.0 (in VB.NET würde es ähnlich aussehen). Fans funktionaler Ansätze bei der Programmierung müssen also nicht unbedingt auf F# warten. F# spielt seine wahren Vorzüge erst im Zusammenhang mit paralleler Programmierung und asynchroner Vorgänge aus. Themen, die Zukunft sicher deutlich wichtiger werden dürften. Einen ganz guten Überblick über F# gibt ein Wikipedia-Eintrag (Wikipedia hat anscheinend Probleme mit dem #) und ein recht umfangreiches Wiki. PS: In dem obigen Beispiel produziert Enumerable.Range(1,10) eine Collection mit den Zahlen von 1 bis 10. Eine Alternative wäre natürlich ein Array: int[] Zahlen = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; PSPS: Eine der Köpfe hinter F# bei Microsoft, Don Syme, war übrigens vor ein paar Wochen in München auf dem F# night talk. Für Entwickler, die bereits mit F# arbeiten, war es mit Sicherheit hochinteressant, für meinen Geschmack war es ein "wenig" zu anspruchsvoll (und akademisch trocken). (hier geht's lang zur möglichen Zukunft der Programmiersprachen)
(könnte in Zukunft eine wichtigere Rolle spielen - .NET unter Linux) Nach meinem "StackOverflow-Moment" gab es vor kurzem einen ebenso erfreulichen "Ubuntu-Moment". Gehört hatte ich natürlich schon eine Menge über diese Linux-Variante und seinen "Erfinder", den südafrikanischen Millionär/Milliardär(?) und Hobby-Astronauten Mark Shuttleworth, aber die Gelegenheit es selber auszuprobieren ergab sich bislang nicht (warum auch? War ich doch mit Windows mehr als zufrieden<Ironie/>). Die Installation könnte einfacher nicht sein. Im Virtual PC hat es leider nicht geklappt, trotz "Reparaturhinweisen" in verschiedenen Blogs erschien nach der Auswahl der ISO-Datei, die ich von der Ubuntu-Webseite heruntergeladen hatte, ein Haufen (mir) unverständlicher (Fehler-) Meldungen. Mit der VirtualBox (einem freien Download von Sun, den ich bislang ebenfalls nur namentlich kannte) hat es auf Anhieb funktioniert. Die Installation dauerte wenige Minuten und erforderte lediglich das Anlegen bzw. die Auswahl eines Benutzerkontos. Kurz danach boote der Ubuntu-Desktop auf meinem Windows XP-Desktop in einem Fenster, der optisch durchaus ansprechend wirkt (und bezüglich des Motivs ein wenig an Windows 7 erinnert;). Die Netzwerkverbindung hat auf Anhieb funktioniert, sowohl ins Internet als auch ins lokale Netzwerk, was zumindest bei mir beim Virtual PC bislang eher die Ausnahme als die Regel war). Klar, dass ich natürlich zuerst die neuste Mono-Version (2.4) installiert habe, was ebenfalls eine Angelegenheit von wenigen Minuten war. Dank MonoDevelop, das sich in der Version 2.x enorm verbessert hat, gibt es (endlich) eine IDE, die der von SharpDevelop recht nahe kommt, und mit der man bereits erstaunlich komfortabel arbeiten kann (theoretisch gibt es auch einen VB.NET-Compiler, aber bei Mono ist natürlich C# die Sprache). Als ein paar Minuten später das Game of Life (eines meiner Lieblings "Hallo, Welt"-Programme) in einem Gtk#-Fenster lief war ich positiv beeindruckt (und richtig happy - ein Gefühl, das ich bei Windows länger nicht mehr erlebt hatte). Mein erster Ausflug in die Open Source-Welt hat damit überaus vielversprechend begonnen.
(der Boss demnächst wieder in Deutschland) Manche Dinge sind so gut, dass man sie erst persönlich erlebt haben muss, um von einem Skeptiker zu einem überzeugten Anhänger zu werden (ein Bruce Springsteen-Konzert ist für einen solchen Moment immer noch sehr gut geeignet – ich bin sehr gespannt wie die Konzerte in München und Frankfurt werden – der Boss mit der E-Street Band am 3. Juli 2009 im Frankfurter Waldstadion weckt natürlich angenehme Erinnerungen an die legendäre BITSUSA-Tour –für Nicht-Insider – damit ist die Born in the USA –Tour, in diesem Fall aus dem Jahr 1985, gemeint - da dies noch Vor-Internet-Zeit war gibt es leider keine Konzertmitschnitte auf YouTube, was wahrscheinlich auch besser ist - dafür gab es damals die legendären Bootlegger und folglich gäbe es das Konzert rein theoretisch auf CD - alleine der Blick auf die Setlist ist die Suche wert, das Konzert dauerte über 3 Stunden, was für den Boss damals ein eher durchschnittlicher Wert war). Mir ging es vor kurzem so mit StackOverflow, einer Site, über die ich beim Googlen in den letzten Monaten natürlich immer wieder „gestolpert“ war, die mir bis dahin aber lediglich aufgrund ihrer etwas andersartigen Optik aufgefallen war (und die ich am Anfang aus welchen Gründen auch immer mit dem „Out of Coffee Exception“-Blog von Mathias Raake „verwechselt“ hatte). Nun, StackOverflow ist wirklich genial. Nachdem ich vor ein paar Tagen mit einem selbst gebauten Expression-Ausdruck nicht weiter kam beschloss ich es selber einmal zu probieren und stellt das Codeschnipsel, das nicht funktionieren wollte, online (natürlich hübsch formatiert, was sehr einfach ging). Ich hatte damit gerechnet, eventuell in ein paar Tagen eine Antwort zu erhalten, so wie es in vielen Newsgroups üblich, umso erfreuter war ich, dass ich praktisch unmittelbar eine Antwort erhielt mit einem Hinweis, der das kleine Problem löste (die Ursache war eine Art Flüchtigkeitsfehler, aber immerhin). Das Schöne an StackOverflow ist nicht nur die enorme Informationsdichte, das hohe fachliche Niveau (kein Problem erscheint zu speziell, um nicht in diesem Rahmen diskutiert werden zu können) und die moderne Optik, sondern auch der angenehme weil sachlich kurze Umgangston. Auch dass viele Teilnehmer mit Bild vertreten sind, dass keine Registrierung erforderlich ist (anmelden und identifizieren kann man sich u.a. mit seiner Google-ID), und dass es eine für alle Programmierthemen offene Plattform ist, machen StackOverflow sehr sympathisch. StackOverflow, das von einer kleinen Gruppe von Leuten anscheinend als eine Art Hobbyprojekt betrieben wird (einer der Gründer, Jarrod Dixon, war auf der letzten Mix-Konferenz beim Panel-Talk im Anschluss an die Developer Keynote anwesend und ging kurz auf die Entstehung von StackOverflow ein) ist auf eine gewisse Weise die Zukunft der technischen Newsgroups, die heute schon etwas ausgedünnt erscheinen und vielleicht auch der MSDN-Foren, die auf mich inzwischen relativ behäbig und vor allem schwer zugänglich wirken. Ich hoffe, dass der StackOverflow-Effekt noch lange anhält.
(StarTrek-Generations auf der Bühne - von links: Richard Arnold, Nana Visitor, Nichelle Nichols, Connor Trinneer, John Billingsley und Robert Picardo) Dieser Blog-Eintrag (nach länger Zeit der Abstinenz) hat zu mindestens indirekt etwas mit Programmierung zu tun, denn bekanntlich sind die meisten Entwickler mehr oder weniger StarTrek "afin" (wenn man sich permanent mit Themen beschäftigt, die erst in der Zukunft eine Rolle spielen, bleibt das nicht aus). Am letzten Sonntag war ich wieder einmal auf der StarTrek FedCon, inzwischen der 17ten (eine fiel offenbar aus demselben Grund aus, weswegen der Nachfolger von Office 2003 "Office 14" heißt bzw. hieß), die sich nach wie vor (oder inzwischen wieder?) einer recht großen Beliebtheit erfreut (immerhin kamen laut Veranstalter Teilnehmer aus 31 Ländern - davon kann eine Entwicklerkonferenz inklusive der "Branchenriesen" wie PDC, Apple WDC, SAPhire oder JavaOne, nur träumen). Weder der Veranstaltungsort (Bonn) noch das Veranstaltungshotel (Maritim) gehören zu meinen Lieblingsorten/Hotels, doch wer seit Mai 1972 treuer StarTrek-Fan ist, den kann das natürlich nicht abschrecken. Inzwischen geht es auf einer FedCon längst nicht mehr um das StarTrek-Universum alleine, StarGate, Babylon 5 und vor allem Battlestar Galactica wurden gleichberechtigt in das Programm aufgenommen und sogar die Storm Troopers 501st Legion aus dem StarWars-Universum, zu dem es normalerweise erstaunlich wenige bis gar keine Anknüpfungspunkte mit dem StarTrek-Pendant gibt, waren vertreten (der Trend zu den inhaltlich fragwürdigen Fantasyreihen á la Buffy ist anscheinend wieder vorbei, wobei man an den zahlreichen Merchandising-Ständen natürlich alles kaufen kann was auch nur halbwegs in das Genre passt). Der Reiz einer FedCon besteht darin, die Seriendarsteller aus nächster Nähe erleben zu können. Auf einem sog. Panel präsentieren sie sich ca. 1 Stunde den Fans und beantworten auf der Bühne Fragen, die ihnen von den Teilnehmern gestellt werden (geht man von den Detail- und Englischkenntnissen vieler Fragesteller aus könnte man den Eindruck gewinnen, dass der bzw. sehr oft auch die Fragestellerin gerade ihre Dissertation über den Schauspieler bzw. die Serie abgeschlossen hat, aber es dürften in erster Linie die Mitglieder diverser Fanclubs sein). Die ganze FedCon ist in ein ausgeklügeltes System an "Berechtigungsstufen" unterteilt - abhängig davon, wieviel Geld man bereit ist auszugeben. Von der einfachen Tageskarte für 40€ bis zum Gold-Ticket, das nicht nur den Eintritt für alle drei Tage, sondern auch garantierte Sitzplätze in den vorderen Reihen und sämtliche Autogrammkarten umfasst, für stolze 499€ (!) reicht das Spektrum. Wer was darf entscheiden die Farbe des Armbändchens sowie ein entsprechender Stempel auf dem Eintrittskärtchen. Da ich erst gegen 13 Uhr eintraf, konnte ich zwar ein Halbtagsticket für 20€ erstehen, erhielt mit dem grauen Bändchen aber auch das "Least Privileged Security Tocken" - und das bedeutet konkret, Sitzplatz auf der Empore (und nicht unten im Saal), kein T-Shirt, keine (kostenlose) Verpflegung und natürlich keine Autogrammkarte. Dass diese so wichtig ist liegt daran, dass die anwesenden Stars ihre Autogramme nur gegen Gutschein vergeben, den man zuvor erwerben muss. Der Preis für einen Gutschein richtet sich nach der "Beliebtheit" des Schauspielers und anderer Faktoren, die nicht öffentlich dokumentiert sind - für einen "unbekannten" Darsteller (jeder im StarTrek-Universum hat natürlich seine Fans) sind es 10€, für einen "Main Character" (etwa Nana Visitor bekannt aus DS9) 15€ und der Topstar (dieses Mal war es Edward James Olmos alias Commander Adama aus Battlestar Galactica alias Lt. Martin Castillo aus "der" 80er Jahre Kultserie Miami Vice) kostete stolze 40€. Für drei bis vier Autogramme (die optionalen Fotos, auf denen der Star dann eventuell ein "For Peter" setzt, kosten noch einmal ein paar Euro extra) gehen schon einmal 100€ drauf (generell scheint die Krise in diesem Sektor des Universums noch nicht angekommen zu sein, geht man nach den Besucherzahlen der FedCon und der Kauffreudigkeit der Teilnehmer). Dies sind natürlich die auf solchen "Fan-Conventions" obligatorischen und nicht zu vermeidenden Rahmenbedingungen, auf wenn sie zunächst etwas befremdlich erscheinen mögen, an denen sich scheinbar auch niemand groß stört. Die Gelegenheit, jene Schauspieler, die man seit Jahren, eventuell Jahrzehnten, aus dem Fernsehen kennt einmal live erleben zu können und das begehrte Autogramm mit Widmung erhalten zu können wiegt das "Pay per Autogramm"-Prinzip für die meisten Teilnehmer auf und bedeutet für den Schauspieler eine attraktive Einnahmequelle weit über das Serienende hinaus (mir waren die 40€ für das Autogramm von Edward James Olmos, der Almosen sicher noch nicht nötig haben dürfte, allerdings deutlich überteuert). Das absolute Highlight am Sonntagnachmittag war natürlich der Auftritt von Nichelle Nichols, alias Lt. Uhura, die sich nicht nur optisch in ähnlich bestechender Form präsentiert wie Tina Turner, und der man in keiner Sekunde anmerkt, dass sie den weiten Weg aus den USA eventuell nur aufgrund der Gage angetreten haben könnte. Auch wenn sie im Panel zusammen mit anderen Schauspielern der verschiedenen Star Trek-Epochen auf der Bühne stand (lediglich von den TNG-Schauspielern war leider niemand dabei) stand sie eindeutig im Mittelpunkt. Sie berichtete unter anderem wie sie zur Serie kam, von den schwierigen Anfängen (ihren Worten zufolge hat der Sender NBC die Serie von Anfang an "gehasst" und es war nur dem organisierten Druck der Zuschauer zu verdanken, dass sie nach der ersten Staffel nicht wieder eingestellt wurde). Sie wies (zurecht) darauf hin, wie positiv StarTrek und die Vision des Serienschöpfers Gene Roddenberry einer Welt, in der Kriege überwunden sind, die Rasse eines Menschen keine Rolle spielt (eine für die damalige Zeit gewagte und für das amerikanische Fernsehen sicher auch provokante Vision), die Entwicklung der Menschheit beeinflusst hat, und welches Geschenk es für sie war, an der Serie mitwirken zu dürfen und, z.B. als Botschafterin für die NASA, immer noch ein Teil der Bewegung zu sein (die Frage eines Zuschauers, warum in einer angeblich so friedvollen und zivilisierten Organisation wie der Sternenflotte militärische Ränge dominieren und die einzigen, die wirklich Entscheidungen treffen, "Militärs" seien, entgegnete sie, dass dies kein Widerspruch zur Vision sei und sich Gene Roddenberry damals lediglich der in der Marine üblichen Terminologie bedient habe, da die Enterprise nun einmal ein Schiff sei, und dass später von Paramount der "militärische" Aspekt stärker in den Vordergrund gerückt wurde - sie wies damit auch Richard Arnold (TNG-Consultant und angeblich lebende StarTrek-Enzyklopädie) sehr deutlich zurecht, der diesen puristischen Ansatz des verstorbenen StarTrek-Schöpfers indirekt ein wenig in Frage stellte). Überaus humorvoll war ihre Schilderung des ersten "inter racial kisses" im öffentlichen Fernsehen zwischen ihr und Captain Kirk, der damals in den USA im Jahre 1968 natürlich für Furore sorgte. Danach wollten die "Studiobosse" auch eine Variante der Szene ohne den Kuss, um später eventuell diese Szene verwenden zu können, doch als nach "mehren Dutzend" Kussszenen, die William Shatner anscheinend alle nicht intensiv genug waren, am Ende nur noch Zeit für eine Szene ohne Kuss blieb blinzelte Shatner im entscheidenden Augenblick in die Kamera, so dass die Einstellung unbrauchbar war und die Kussszene ausgetrahlt werden musste. Klar, dass sie am Ende mit Standing Ovations verabschiedet wurde. Auch das Panel mit Michael Hogan (Saul Tigh) und Edward James Olmos aus Battlestar Galactica (die verschiedenen BSG-Schauspieler vermieden Referenzen auf die 4te Staffel, die bei uns anscheinend noch nicht ausgestrahlt wurde) war die Reise wert, doch es würde ein wenig zu weit führen auch darüber noch zu berichten, zumal die meisten Fragen und ihre Antworten recht speziell waren (witzig war die Antwort von Olmos auf die Frage, warum er denn bei Miami Vice nur einen "Schreibtischjob" hatte während Crockett und Tubbs regelmäßig ihren Ferrari zu Schrott fahren durften - er antwortete, dass er selber alle Freiheiten gehabt hatte die Rolle zu gestalten und freiwillig auf die Action verzichtete). Interessant war auch der Hinweis, wie Ideen und Kommentare aus Blogs und Diskussionsforen zur Battlestar-Serie von den Drehbuchschreibern aufgegriffen werden (etwa zu brisanten Themen wie Folter, das bei den späteren Folgen ein zentrales Thema ist) und wie dadurch die Serie immer besser und inhaltlich intensiver wurde (ein absolutes Highlight muss der 3 Stunden dauernde Abschluss der 4ten und offenbar letzten Staffel sein). Alleine diese beiden Panels waren den Besuch am Sonntagnachmittag wert. Auch wenn das StarTrek-Merchandising-Universum offenbar nach wie vor stetig expandiert, der kommerzielle Aspekt bei dem Ganzen ein wenig zu sehr im Mittelpunkt steht, die überwiegende Zahl der Teilnehmer noch erstaunlich jung sind (klar, ab einem gewissen Alter und ab Erreichen einer gewissen intellektuellen Reife steht man natürlich über diesen Dingen) und man bei manchen der Fans das Gefühl nicht los wird, dass sie außerhalb ihrer "Sphäre" Menschen ohne ausgeprägte soziale Kontakte sein dürften, hat es Spaß gemacht, ein paar der "Helden" von früher wieder einmal live erleben zu können.
Ressourcen sind eine feine Sache, wenn man erst einmal den sprichwörtlichen Bogen raus hat. Mit .NET 2.0 und VS 2005 wurde der Umgang mit Ressourcen auf eine einheitlichere Grundlage gestellt und vor allem für die VB-Leute ein wenig vereinfacht. Dank des praktischen My-Namespaces könnte der Zugriff auf eine Projektressource (Ressourcen können auch direkt in die Assembly eingebettet werden - dieser Fall wird im Folgenden nicht betrachtet) einfacher kaum sein. Enthalten die Projektressourcen z.B. eine Bitmap mit dem Namen Bahamas.jpg, lädt der Befehl PictureBox1.Image = My.Ressources.Bahamas
die Bitmap in eine PictureBox. Möchte man, wozu es im Allgemeinen keinen Grund geben dürfte, ohne den My-Namespace auskommen, muss man sich die Mühe machen und die ResourceManager-Klasse im Namespace System.Resources bemühen. Das folgende Beispiel geht davon aus, dass die Projektressourcendatei Resources.resx heißt (was im Allgemeinen der Fall ist) und eine Bitmap Bahamas.jpg enthält:
Imports System.Reflection
Imports System.Resources
Dim Ass As Assembly = Assembly.GetExecutingAssembly()
Dim ResMan As ResourceManager = New ResourceManager("WindowsApplication1.Resources", Ass)
Dim Im As Bitmap = ResMan.GetObject("Bahamas")
PictureBox1.Image = Im
Etwas kniffliger wird es, wenn man die Namen aller Bitmaps einlesen möchte, um sie z.B. in einer ListBox zur Auswahl anzubieten. Diese Möglichkeit bietet die ResourceManager-Klasse nicht. Ein Befehl wie
Using St As Stream = Ass.GetManifestResourceStream("WindowsApplication1.Resources.resources")
liefert alle Ressourcen-Bitmaps in Gestalt eines zusammenhängenden Streams. Das "Zerlegen" in die einzelnen Ressourcen übernimmt die ResourceReader-Klasse, die einen (untypisierten) Enumerator liefert:
Using St As Stream = Ass.GetManifestResourceStream("WindowsApplication1.Resources.resources")
Dim ResRd As New ResourceReader(St)
Dim En As IEnumerator = ResRd.GetEnumerator
While En.MoveNext
ListBox1.Items.Add(En.Current.Key)
End While
End Using
Während die Key-Property für den Namen der Ressource steht, liefert die Value-Eigenschaft den Wert (z.B. als Bitmap).
Ist der Name der Ressource bekannt, kann der Zugriff auf die Ressource wieder über den ResourceManager erfolgen:
Dim Ass As Assembly = Assembly.GetExecutingAssembly()
Dim ResMan As ResourceManager = New ResourceManager("WindowsApplication1.Resources", Ass)
PictureBox1.Image = DirectCast(ResMan.GetObject(ListBox1.SelectedItem), Bitmap)
Unter WPF sieht alles ein wenig anders aus, aber nur ein wenig. Auch wenn WPF ein eigenes Ressourcenkonzept mitbringt, lassen sich auch WinForms-Ressourcen ansprechen. Am Prinzip des Zugriffs ändert sich (natürlich) nichts. Ein wenig "trickreich" ist lediglich der Umstand, dass es bei WPF keine Bitmap-, sondern eine BitmapSource-Klasse gibt, die sich beide ein wenig voneinander unterscheiden. Eine direkte Konvertierung ist anscheinend nicht möglich, aber mit ein wenig "Interop-Zauberei" ist auch das kein Problem. Die folgende Funktion erwartet eine System.Drawing.Bitmap als Parameter und gibt ein BitmapSource-Objekt zurück:
Function GetBitmapSourceFromBitmap(ByVal Bm As Bitmap) As BitmapSource
Return Im.Imaging.CreateBitmapSourceFromHBitmap(Bm.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, _
System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions())
End Function
Viel Spaß mit den WinForms-Ressourcen, mit denen einiges möglich ist, und die ich daher ausgiebig nutzen würde. Nicht nur Bitmaps, auch Zeichenketten oder XML-Daten lassen sich als Ressourcen ablegen und stehen damit als Teil der Assembly zur Verfügung. Möchte man eine Anwendung mehrsprachig halten, kommen die sprachabhängigen Ressourcen zum Einsatz. Hier gibt es einen guten Übersichtsartikel von Chris Sells, der zwar schon ein paar Jahre alt ist, aber das Thema gut zusammenfasst.
Letzte Woche fand, dieses Mal in relativer Nachbarschaft zum Darmstadter Hbf, die traditionelle Basta! Spring .NET-Entwicklerkonferenz statt. Traditionell, weil es die Basta! nun über 10 Jahren gibt (die ersten "Basic-Tage" fanden, soweit ich mich spontan erinnern kann, 1996 in Frankfurt statt). Die Spring-Variante der Basta! ist deutlich kleiner als die "große Herbst-Basta!, was in Hotel-Räumlichkeiten aber generell schwer zu beurteilen ist. Das Motto der Basta! lautete auch dieses Mal "Best Best Practices", was durchaus einen tieferen Sinn gibt, da es um die besten der Best Practices ging, die von praxis- und konferezerfahrenen Sprechern den Teilnehmern vermittelt wurden. Ich war dieses Mal nur Dienstag und den halben Mittwoch dabei. Am Dienstagmorgen gab ich im Rahmen des Visual Basic Days (der erfreulich gut besucht war - was natürlich an der Themenauswahl und der sehr guten Sprecher lag) einen Überblick über das "moderne Visual Basic" (wobei ich wieder einmal feststellen musste, dass auch viele erfahrene Entwickler mit Grundlagen wie Predicate- und Action-Delegates nicht allzu viel anfangen wissen, was aber auch daran liegt, dass man sie in der Praxis relativ selten braucht - für mich sind sie die Vorläufer der Funktionsausdrücke (Lambdas), auf denen wiederum LINQ basiert). Am Abend ging es im Rahmen der Night School deutlich "intimer" zu - gerade einmal 6 Teilnehmer hatten sich eingefunden, die sich aber als wahre VB6-Entwickler entpuppten, so dass eine sehr interessante und kurzweilige Diskussionsrunde entstand, was neben den Vorträgen den Reiz einer Konferenz wie der Basta! ausmacht). VB6 ist immer noch sehr populär. Das zeigen nicht nur die Aktivitäten auf Websites wie www.activevb.de, und die Leserbriefe, die ich hin und wieder bekomme, sondern belegen anscheinend auch Umfragen: http://geekswithblogs.net/iupdateable/archive/2009/02/17/results-of-the-visual-basic-survey-part-1-language-and.aspx Ich bin nicht sicher, ob das unbedingt ein Anlass zur Freude ist. Innovationen zu ignorieren ist am Ende kontraproduktiv, aber es zeigt sehr eindrucksvoll, dass die Lebenszeiten von Geschäftsanwendungen deutlich höher sind als es früher in den Raum gestellt wurde. Die "großen Konferenzthemen", soweit ich das aufgrund meiner recht kurzen Anwesenheit auf der Konferenz beurteilen konnte, waren u.a. Entity Framework und natürlich C# in allen Variationen (durch Oliver Sturm wie immer bestens besetzt). Eine der Fragen, die .NET-Entwickler derzeit beschäftigt ist WPF oder WinForms? Auch wenn aus meiner Sicht (passend zur Krise) zu viel mit dem "Angstfaktor" argumentiert wird (wird es sich durchsetzen, wird es die richtige Wahl sein und, das schwingt unausgesprochen natürlich immer mit, werde ich in der Lage sein WPF zu meistern?), ist es keine einfache Entscheidung. WPF wird sich durchsetzen, das alleine unterstreicht der Umstand, dass die nächste Visual Studio-Version auf WPF basieren wird und es inzwischen richtig interessante WPF-Anwendungen gibt. Auf der einen Seite darf die Einarbeitungszeit nicht unterschätzt werden und der Umstand, dass es nicht bei jeder Sorte von Anwendungen seine Vorteile ausspielen kann. Da aber WPF mit hoher Wahrscheinlichkeit in der Zukunft der meisten Entwickler liegen wird, würde ich mich lieber früher als später damit beschäftigen. Wer noch in diesem Jahr ein Projekt ausliefern muss, für den kommt WPF sicher noch nicht in Frage. Wer dagegen in 1-2 Jahren etwas ausliefern muss, sollte (sofern es nicht den einen Grund gibt, der dagegen spricht) den sprichwörtlichen Sprung ins kalte Wasser wagen. Hier noch etwas für die "Dinge, die man nicht ignorieren sollte"-Rubrik: http://www.silverlightshow.net/items/Building-a-Framework-for-Silverlight-Line-Of-Business-Applications.aspx Der Termin für die Herbst-Basta! steht bereits fest ( 25. bis 29. September 2009 - dann wieder wie jedes Jahr in Mainz). Dieses Mal wird es sogar einen "VB-Double-Day" geben. Vielleicht gibt es ja einen speziellen "WPF für Visual Basic"-Tag. PS: Die Folien zu einem "VB von 1 bis 10"-Vortrag gibt es hier. Es geht nicht nur um einen Überblick über das moderne Visual Basic, sondern auch um ein paar "Tipps on the run" (etwa, wie sich Konfigurationsdaten direkt auslesen lassen oder sich XML direkt in der Assembly unterbringen lässt) und eine Liste von Tools, die jeder kennen sollte.
|