F# Observations
August 12th, 2007
I’m feeling all mad-scientistic tonight, sipping coke, with 30 tabs open in Opera :)
On my journey into the weird world of functional programming on the .NET CLR, I continue to stumble upon interesting stuff. Papers, articles, interviews, each worthy of hours of dedication. Alas, my day still has only 24 hours (I need to work around that somehow), so at the time being I can’t do much more than glance over everything. Read the rest of this entry »
Hey Hey OCaml
August 7th, 2007
Wie’s aussieht hat sich auch Steve Yegge schon damit beschäftigt:
OCaml has threads, exceptions, call-with-continuation, calling conventions to and from C, a rich standard library with collections, networking, I/O, graphics, a complete interface to the Unix programming API, and a powerful module system that blows Java’s packages away. It has interfaces and bindings for Oracle, MySQL, postgres, berkeley DBs, CORBA, COM, xml-rpc, SOAP, XML, perl-compatible regular expressions… the list goes on. You name it, it’s there.
OCaml has the potential to make me happy as a programmer, finally.
Mjamm :) Read the rest of this entry »
Microsoft Student Technology Conference Tag 2
June 6th, 2007

Der zweite Tag fing unerfreulich an.
Um 10h sollte es mit der Keynote losgehen, um 8 stand ich auf und schwang mich auf mein Motorrad um um kurz nach 9h in der Gebläsehalle zu sein und noch in Ruhe was vom Frühstück mitzunehmen.
Es gab nur leider kein Frühstück und ich war so ziemlich der erste der so früh da war. Selbst die Leute vom Event-Team sahen alle noch ziemlich verpennt aus. Nach 20 Minuten tauchte Sarah auf, dir wir am Abend zuvor kennengelernt hatten. Zwischen zwei Tassen Kaffe konnte ich in einer unbeobachteten Sekunde eine Banane klauen, musste danach aber bis nach der Keynote knurrenden Magens ausharren.
Keynote - Comparing UNIX to Windows NT Architecture
Dave Proberts Vortrag war hochspannend weil er über das eng umrissene Thema, das der Titel nahelegt, einige wesentlich tiefgreifendere Denkansätze mit sich brachte. Natürlich ging es zunächst um Betriebssystemarchitektur im Vergleich zwischen Windows und Unix. Probert brachte einige interessante Anekdoten mit, z.B. was den Ursprung des fork() Systemaufrufs in Unix betrifft. Dessen heute merkwürdiges Verhalten war damals zu seiner Ursprungszeit vollkommen logisch, nur so konnte im Paging-Betrieb ein neuer Prozess instanziiert werden. Diesen und andere Umstände nahm Probert zum Anlass, das Publikum anzuregen technische Lösungen zu hinterfragen, auch mal über den Tellerand zu schauen und sich nicht nur auf das zu verlassen was man kennt. Eingebettet bzw. motiviert war sein ganzer Vortrag aber von der Frage, warum Computer nach wie vor so schwer zu bedienen sind. Glaubhaft berichtete er davon, wie er bei Microsoft als Kernelarchitekt anfing um das Betriebssystem neu zu erfinden und die Welt zu verändern. Ich habe nicht mehr alle Details des Vortrags im Kopf, aber sein Argument war (ungefähr), dass die Beschränkungen von Programmiersprachen und Betriebssystemen Monokulturen in Entwicklerköpfen erzeugen und man, um die Anwendungen zu revolutionieren, erst das Betriebssystem revolutionieren muss.
Leider ging Probert am Ende die Zeit aus, sein Vortrag war für gut das doppelte der veranschlagten Zeit ausgelegt. So standen bis etwa eine dreiviertelstunde später noch eine Traube Studenten um ihn herum und diskutierten.
Klickt Ihr oben auf Daves Namen, bringt euch das zu einer Serie von Channel9 Shows in denen es nochmal genau um die Themen geht, über die er auf der Conference gesprochen hat. Wärmste Empfehlung!
Vorträge
Zu dieser Zeit wollte ich eigentlich bei Entwickeln hochqualitativer Software im Team — mit Visual Studio Team System sitzen, hab’ es dort aber keine 10 Minuten ausgehalten. Stattdessen tinglete ich zwischen Proberts Studententraube, der endlich offenen Häppchen-Bar und dem Stehtisch herum, der für den weiteren Tag unser Stammplatz werden sollte.
Die 12h Vorträge konnte ich mir nicht anhören, da ging es nämlich daran, meinen Gewinn einzulösen: **Abseilen vom Hochofen. Nachdem ich erst den *falschen Hochofen rauf- und wieder runtergeklettert bin, ging es mit den anderen 14 Gewinnern und unseren 2 Bergführern auf den richtigen Ofen. Richtig spannend zu erzählen war die Aktion wirklich nicht. Erst gab es eine kurze Einweisung, dann wurden uns die Geschirre angelegt und hoch gings. Oben nochmal letzte Anweisungen für jeden, ein wenig Starthilfe und dann gings abwärts. Anfangs war der Anblick der 35m in die Tiefe schon respekteinflößend und vor allem das Übersteigen der Brüstung kostete einige Überwindung, aber einmal im Seil hängend kann man eigentlich nichts mehr tun als langsam runterzukommen und sich nicht den Kopf am Hochofen zu stoßen.
Wieder in der Gebläsehalle war die Schlange zum Mittagessen schon 20m lang. Ganz so toll wie das Barbecue am Montag abend war’s zwar diesmal nicht, aber trotzdem noch lange kein Grund sich am Buffet zurückzuhalten ;-)
Der letzte Vortrag für mich war anschließend Viren, Rootkits und Co. — Digitales E605 von Michael Willers. Erst ging es ein bißchen um die Entstehung von Rootkits und Trojanern, wie es überhaupt zu derlei Angriffen kommen kann, anschließend schrieb Michael aus dem Kopf im Notepad ein als Gerätetreiber getarntes Rootkit. Ziemlich beeindruckend, vor allem da Michael wirklich verstand wovon er da redete — keine Selbstverständlichkeit im Rahmen der Konferenz.
Den letzten Vortragsblock haben wir uns geschenkt und stattdessen lieber das Wetter genossen.
Um 16h wurde die Veranstaltung offiziell beendet, es gab warme Worte und Präsente für die Gewinner diverser Wettbewerbe, anschließend wurden die deutschen Sieger des ImagineCup gekürt.
Fazit
Die Konferenz hat Spaß gemacht. Microsoft hat keine Mühen gescheut um das ganze Drumherum der Veranstaltung angenehm zu gestalten. Leider blieb die Qualität der Vorträge weit hinter der des Caterings zurück. Von einer Veranstaltung die *Student
- Technology
Conference* heisst erwarte ich einfach mehr Technologie und weniger Blabla.
Somit war das beste was ich von diesen zwei Tagen mit nach Hause nehmen konnte ein paar nette Erinnerungen und Steve McConnels wirklich unglaublich gutes Code Complete für läppische 30€
Weitere Eindrücke
…schildern Christopher Harms und Jonas John
Microsoft Student Technology Conference Tag 1
May 26th, 2007

Als ich heute morgen losgezogen bin Richtung Langschaftspark wusste ich bis auf die Themen der Vorträge absolut nicht was mich erwarten würde. Das Wochenende war recht schlaflos verlaufen und entsprechend kaputt hing ich auf der Rolltreppe ins zweite Untergeschoss des Hauptbahnhofs zur 903.
Am Bahnsteig sprach mich ein nicht mehr ganz frischer Kerl im Gruschel mich T-Shirt an, wo es denn zum Landschaftspark ginge. Zusammen in der 903 stellte er sich auf meine Frage ob er Vortragender sei mit Rolf vor und nein, er sei Student. Weitere Konversation mit Rolf blieb mir erspart als ich an der Haltestelle Landschaftspark auf eine stattliche Gruppe mit bekannten Gesichtern aus Dortmund traf.
Die Registrierung ging ruckzuck, der erste Weg führte zum Catering. Meine Herrschaften! Allein für die Wraps, gefüllt mit eingelegten Tomaten, Zucchini und allerhand anderem leckeren Zeug, hatte sich der Weg gelohnt. Um 10:00 ging dann die Keynote los.
Keynote
Die Begrüßung durch Ingo, dessen Nachname mir momentan leider entfallen ist, wirkte bemüht locker, im Abgang aber doch eher uncool. Im Anschluss stellte Paramesh Vaidyanathan Popfly vor, einen nagelneuen Service von Microsoft, der mit Hilfe von Silverlight das blitzschnelle Erstellen von Mashups aus Webservices auch und vor allem für technisch unbedarfte User ermöglicht.
Obwohl die Präsentation mit erheblichen technischen Schwierigkeiten zu kämpfen hatte, wurde das Potential dieser Technik deutlich. In einem FlowChart-ähnlichen Boxsystem klickt der User sich seine Anwendung ganz einfach zusammen, kann sie anderen zur Verfügung stellen oder sie in Popfly Pages einbauen.
Die Oberfläche von Popfly ist beeindruckend. Wenn Silverlight abhebt, und danach sieht es wirklich aus, kommen spannende Zeiten auf das Internet zu. Popfly verkörpert somit eine ganze Reihen von Microsofts neuen Zielen und Eigenschaften:
- Nutzbarmachung neuer Technologien für Amateure
- Offener
- User Experience
Neue Technologien für Amateure
Damit seien jetzt mal alle Nicht-Programmierer gemeint. Zum einen also Endanwender die mit Technologien wie Popfly Web-Services nutzen können um eigene MashUps zu kreieren, zum anderen Hobby Entwickler die mit Visual Studio Express ins .NET Boot geholt werden oder Gamer denen mit XNA die Möglichkeit geboten wird, vergleichsweise einfach Spiele zu entwickeln.
Offenerer Umgang mit der Entwicklergemeinde
Das beste Beispiel hierfür ist Silverlight. Von Anfang an auch für Firefox und Mac verfügbar, vereint es nicht nur Javascript und .NET Sprachen, sondern auch Python und Ruby in der DLR (Dynamic Language Runtime) die in Zukunft auch andere Sprachen beherbergen kann. Die Möglichkeit, mit den abgespeckten aber dennoch brauchbaren Express-Versionen der Entwicklertools herumzuspielen dürfte eine Menge Leute zu .NET und C# ziehen die sich andernfalls vielleicht für Java entschieden hätten.
User Experience
Offensichtlichster Kern dieses neuen Aspekts sind die neuen Oberflächen von Vista und Office 2007. Über den Geschmack der Designer kann man sich durchaus streiten, nicht leugnen lässt sich jedoch, dass Microsoft sowohl mit diesen Maßnahmen ihre CI strafft als auch mit WPF und XAML darum bemüht ist, dass das Interface-Design, bei Windows-Entwicklern bisher generell eher vernachlässigt, ansprechender und einfacher zu gestalten.
Weitere Vorträge
Die weiteren Vorträge der Conference waren leider größtenteils enttäuschend.
In Kleines 1×1 der Spielentwicklung — wichtige Begriffe, Prozesse und Überblick plauderte Dirk Primbs über das geschäftliche Umfeld in dem Spielentwicklung stattfindet. Für mich enthielt der Vortrag keinerlei neue Information.
Design Patterns wurde von Wolfram Burgard, Professor an der Uni Freiburg, gehalten. Dass der gute Mann gleich zu Beginn seiner Präsentation darauf hinwies, von dem Thema eigentlich keine Ahnung zu haben, um daraufhin einen extrem allgemeinen und oberflächlichen Abriss des über 10 Jahre alten Klassikers der Gang of Four vorzutragen ließ mich den Software Development Saal nach 15 Minuten verlassen um mir AntMe! — Teil 1 anzuhören. Bei AntMe! handelt es sich um einen Ameisensimulator der Spieler die KI von Ameisenvölkern in C# beeinflussen lässt. Ganz nett, etwas ähnliches haben wir in der zwölften Klasse in Pascal geschrieben. Für Informatiker im achten Semester eher uninteressant.
Nach der Mittagspause führte mein Weg mich zum Web Development im Nebengebäude, wo Lori Grosling etwas über Design & User Experience @ Microsoft erzählen wollte. Eine halbe Stunde gehaltloses Anklicken von Web-Demos wurde von einer Viertelstunde “That’s cool, isn’t it?” und oberflächliches Klagen über die Schwierigkeit der GUI-Programmierung eingerahmt.
WPF und Silverlight
Der nächste Vortrag ging nur ein wenig mehr in die Tiefe. Oliver Scheer stellte XAML vor, eine XML-basierte Sprache um GUIs für Silverlight oder WPF zu beschreiben. Oliver kannte sich mit der Technik offensichlich kaum besser aus als Lori, so stellte er uns WPF Features als XAML Features vor und beschrieb die Sprache als tollen Weg für Designer, ohne Programmierung GUIs zu gestalten. Das es sich bei XAML eigentlich bloß um ein leicht beschreibbares Austausch- und Beschreibungsformat für den gleichen Kram, den man auch mit .NET-Code erreichen kann, handelt war ihm entweder nicht bekannt oder es wurde uns verschwiegen. Dabei zuzusehen, wie er sich im Expression Studio Blend austobte ohne auf konkrete technologische Vorzüge von WPF einzugehen machte die Sache nicht besser.
Nach der Kaffeepause war Oliver nochmal dran, nun mit UX out-of-the-box: ASP.NET AJAX, WPF and Silverlight. Das gesamte Publikum war da um etwas über Silverlight zu erfahren, wurde aber zunächste eine halbe Stunde mit der komplett unspannenden Ajax Implementierung in ASP.NET gelangweilt. Die Silverlight Vorführung beschränkte sich dann wieder darauf, dass Oliver geistesabwesend im Expression Studio herumbastelte. Ganz toll.
Ziemlich gefrustet verließen am Ende alle den Raum, meine nächste Station war Engineering Excellence - some things a new Microsoft Developer learns von Frank Fischer. Die anfängliche Skepsis war schnell verflogen, Franks Vortrag war der erste der mich wirklich begeistert hat. Es ging um das Trainingsprogramm bei Microsoft, darum wie dort Software entwickelt wird, welche Werte hinter den Entwicklungsprozessen stehen und welcher Aufwand betrieben wird um Fehler zu vermeiden. Am interessantesten war dabei die Beschreibung des Nightly Build Prozesses und wie mit dort auftauchenden Fehlern umgegangen wird.
Das Team, dessen Teil die Tests stört oder gar keine korrekte Compilierung verhindert, muss diesen Fehler bis zum nächsten Tag behoben haben. Wer viermal in Folge den Nightly Build verpatzt kriegt ein Gummihuhn an die Tür genagelt, muss fortan in Schande leben und den anderen Teams für niedere Tätigkeiten zu Diensten sein.
Frank Vortrag enthielt genau die richtigen Stichworte um mich die ganze Zeit die Ohren spitzen zu lassen. Auch wenn es nach aussen manchmal anders aussieht, so scheint man bei Microsoft doch eine Menge Erfahrung damit zu haben, enorme Softwareprojekte einigermaßen erfolgreich über die Bühne zu bringen. Besonders gefiel mir der absolut vernünftige Ansatz, nicht dogmatisch an Vorgehensmodellen oder Prinzipien zu hängen, sondern stets das richtige Tool für den Job zu verwenden. Für kleine Anwendungen kommen aufgrund ihrer Vorteile bei diesen Größenordnungen durchaus Agile Methoden zum Einsatz, während man sich nicht der Illusion hingibt dass diese Vorgehensweise für alle Arten von Projekten angemessen ist.
Abendprogramm
Das Vortragsprogramm für den ersten Tag war damit zuende und die abendliche Unterhaltung ging los, angefangen mit einem opulenten Barbecue. Wer wollte konnte danach kickern, sich das Duell der beiden Fischertechnik Roboter-Teams ansehen, am AntMe! Programmierwettbewerb teilnehmen, bei PGR3 auf der Xbox ein paar Runden drehen oder mit ferngesteuerten Monstertrucks ein bißchen Staub aufwirbeln. Die Fischertechnik Roboter wurden beide von Teams der Universität Dortmund programmiert, die Zelte dafür waren heiß und stickig, also habe ich mich zu den Monstertrucks gesellt und mit ruhigem Finger als erster meiner Runde das Ziel passiert. Bei PGR habe ich gegen Kollegen Boris zwar gewonnen, für eine Platzierung in der Gesamtliste hat es dann aber doch nicht gereicht.
Gegen 22h hab ich mich auf nach Hause gemacht, wer noch dablieb konnte bei einer GPS-Rallye und den sehr empfehlenswerten Nachtlichtführungen durch den Landschaftspark teilnehmen. Wieder in meiner Wohnung habe ich mich sofort an diesen Beitrag hier gesetzt, war allerdings ziemlich erledigt, so hat sich seine Fertigstellung dann bis heute hingezogen.
Ich lag schon im Bett, da bimmelt mein Handy:
Hallo Jan. Du hast beim Autorennen das Abseilen vom Hochofen gewonnen. Bitte Dein Ticket bis morgen 11h00 an der Information abholen.
Yay.
Mehr dazu im Bericht von Tag 2.
Web 2.0 für den Desktop
April 20th, 2007
Wenn es euch so geht wie mir, habt ihr eine Menge cooler Ideen für Anwendungen und eine grobe Vorstellung wie diese Ideen sich schnell und leicht in Rails umsetzen ließen.
…wenn bloß die Anwendungen selbst als Webanwendungen geeignet wären.
Meine “Finanzbuchhaltung” sieht zum Beispiel so aus: Meine Arbeitszeiten werden auf einem Zettel eingetragen, wenn dieser voll ist, tippe ich ihn in OpenOffice Calc ab. Um daraus Rechnungen zu machen, öffne ich in Writer meine Rechnungsvorlage, passe die Posten an, übertrage von Hand die Anzahl der Stunden und suche aus alten Rechnungen die Adresse heraus um Sie — wieder von Hand — in das Adressfeld zu posten.
Das hat in der Vergangenheit ausgereicht, aber allmählich wird mir dieses Prozedere zu blöd. Als Datenbankanwendung in Rails wäre diese Aufgabe trivial zu lösen. Eine Tabelle mit den Kunden, eine Tabelle mit den Stunden, eine Tabelle mit Rechnungen, eine mit Rechnungsposten. Mit wenigen Zeilen wären die Assoziationen hergestellt, als Frontend würde für’s erste Streamlined reichen, das Rendern der Rechnungen kann schnell in HTML erfolgen.
Ich habe bloß keine Lust, eine solche Anwendung mit einigermaßen sensiblen Daten auf einem Webserver laufen zu lassen, andererseits schreckt mich aber auch die Mühe, das ganze in Objective C oder Java zu schreiben, der Overhead durch das Fehlen von Streamlined und ActiveRecord wäre kaum gerechtfertigt.
“Wenn ich doch bloß ein Framework wie Rails für Offlineanwendungen hätte” schießt es mir jedesmal durch den Kopf…
Dabei sind entsprechende Lösungen auf dem Weg. Joyent stellte diese Woche Slingshot vor, eine Umgebung die genau das ermöglicht:
Joyent Slingshot allows developers to deploy Rails applications that work the same online and offline (with synchronization) and with drag into and out of the application just like a standard desktop application. We have Joyent Connector and a select group of third party applications working under Joyent Slingshot. Joyent plans to have Slingshot available for general release on both Windows and Macintosh OS X in late April, 2007. If you would like to be considered for a spot an early release tester, please send email to slingshot [at] joyent.com You must be a Rails developer with an application we believe would help us put the final polish on Slingshot.
Slingshot schlägt damit in eine ähnliche Kerbe wie Adobes Apollo, Firefox 3 oder Dojo.
Das Problem der Offline-Verfügbarkeit für viele ein Manko webbasierter Applikationen auch wenn die Web 2.0 Prominenz von dieser Meinung abweicht (hier und hier). Applikationen und Technologien wie die genannten könnten könnten es endlich beseitigen. Interessanter finde ich aber, dass es dadurch auch möglich wird, dediziert Web-Technologien zu benutzen um für den Desktop zu programmieren. Wenn sich dieser Trend weiterentwickelt, würde vielleicht eine Menge der brillianten Köpfe, die da draußen ihre mehr oder weniger nützlichen Webanwendungen entwickeln, den Weg zurück zum Desktop finden.
Denkt man diesen Gedanken allerdings zuende, gelangt man schnell an die Frage: Wie sind wir eigentlich an die Stelle geraten an der wir uns zur Zeit in der Softwareentwicklung befinden? Was zieht alle Entwickler ins Web? Woher kommen die ganzen Grabreden auf den Desktop? Ich glaube kaum dass die Antwort wirklich da liegt wo die Web-2.0 Enthusiasten sie gerne hätten. Soziale Netze, REST-APIs und verschmelzende Datenbanken sind vielleicht nette Resultate der momentanen Situation, aber was einen Entwickler wirklich treibt, sich ins Netz zu begeben ist die Art und Weise wie dort entwickelt wird. Durch mächtige Tools, Sprachen, Protokolle und Frameworks wie Rails, Django, Ajax, HTML und REST sowie die vollkommene Kontrolle über den laufenden Code macht die Entwicklung im Web einfach irre Spaß.
Die Einschränkungen die diesen Elementen zugrunde liegen, sorgen aber gleichzeitig für 4 große Probleme:
- Die Interoperabilität zwischen Webanwendungen ist stark eingeschränkt. Und mit Interoperabilität meine ich Interoperabilität auf Benutzerseite. Eine noch so schöne API ist nach wie vor nur für Entwickler nutzbar. Der Benutzer der Daten von eine Anwendung zur nächsten transportieren will braucht dafür standardisierte Austauschformate und einfache Mittel diese Lesen, Schreiben und übertragen zu können.
- AJAX und Prototype haben HTML als Benutzerinterface zwar einen gigantischen Schritt weitergebracht, die Trennung zwischen Anwendung und Browser sorgt allerdings weiterhin für Einschränkungen. Drag-and-Drop über Webseiten hinweg? Nahtlose Einbindung von nicht-HTML Elementen? Fehlanzeige.
- Offline-Verfügbarkeit habe ich weiter oben bereits als Problem angesprochen. Hierüber lässt sich vielleicht streiten,
- Vor allem aber sind Webanwendungen für Aufgaben mit hoher Interaktivität oder großen Datenaufkommen nicht geeignet.
Aus diesem Dilemma sehe ich zwei Auswege: Fix Webapps oder Fix the Desktop
Fix Webapps
Daran, das WWW benutzbarer und mächtiger zu machen, arbeiten eine Menge schlauer Leute. Was mich daran stört, ist das grundlegende Vorgehen. Dabei wird HTML (nebst Unterstützungs-Technologien wie Javascript) allmählich zu einem schizophrenen Ungetüm umgebaut, das nicht weiss, ob es Dokumentenbeschreibungssprache oder GUI-Toolkit sein will. Die Anforderungen sind durchaus verschieden; Dokumente sind statisch und eher seriell aufgebaut während GUIs dynamisch sind, mit vielen parallelen Elementen.
Ersatztechnologien die traditionelles GUI-Design mit Netzwerktechnologien kombinieren und so (zumindest potentiell) dynamische Oberflächen und Kommunikation mit anderen Programmen ermöglichen sind seit Java verfügbar, konnten sich aber nie richtig durchsetzen. Ein Fehler dabei waren sicherlich die Orientierungsschwierigkeiten mit denen Java anfangs zu kämpfen hatte, ebenso das fürchterliche AWT-Toolkit.
Die größte Hürde war aber wohl, dass die frühe Desktop-Orientierung genau die Komplexitätsprobleme mit sich brachte, die Webentwickler heute vermeiden. Umständlich zu programmierende Klassenbibliotheken, wenig Unterstützung durch Frameworks, zuviele Freiheiten.
Gebranntes Kind scheut das Feuer, daher scheint es wahrscheinlich, dass auch die aktuellen Versuche von Adobe mit Flex sich nicht durchsetzen werden und die Entwicklergemeinde stattdessen den HTML-Weg beibehalten wird. Mit XML/XHTML und CSS3 sind damit dann vielleicht irgendwann tatsächlich brauchbare GUIs machbar.
Vielleicht.
Fix the Desktop
Wenn fehlende Frameworks den Desktop also so in Ungnade gebracht haben, wird die nahe Zukunft spannend. Während Java allmählich in die Jahre kommt, sind die .NET Sprachen und besonders C# 3.0 extrem vielversprechend. Das .NET Framework ist sicher nicht frei von Mängeln, besonders was die komplizerteren Windows Forms Controls angeht, aber verglichen mit den MFC ist .NET ein gewaltiger Schritt nach vorn.
Vorn heisst dabei allerdings mal wieder soviel wie “da wo Apple vor Jahren war”. Nach meinen jüngsten Ausflügen in die Welt von Cocoa Programmierung mit Objective-C weiss ich womit ich meine nächsten Tools programmiere. Das Macs bei Entwicklern nicht zuletzt aufgrung von DHH und Rails an Popularität gewonnen haben ist kein Geheimnis. Der Mac ist wirklich eine Plattform auf der Softwareentwicklung Spaß macht. Dazu liefert Apple ein hervorragendes Framework und eine starke Programmierumgebung.
Genau das führt dann letztendlich auch dazu, dass tatsächlich coole Software entwickelt wird. Disco, Textmate, Delicious Library, Yep, und, und, und…
Wenn sich diese Kultur kreativer Software auf Basis starker Technologien und Fromeworks verbreitet, sei es nun durch .NET auf Windows oder durch die zunehmende Verbreitung von Macs (was mir natürlich lieber wäre :), stehen uns spannende Zeiten bevor.
How to globalize a .NET Property Grid
December 10th, 2006
It’s pretty simple once you’ve seen the Solution:
public class GlobalizedDescriptionAttribute :
System.ComponentModel.DescriptionAttribute
{
String n;
public GlobalizedDescriptionAttribute(string s) { n = s; }
public override string Description {
get {
return Project.Properties.Resources.
ResourceManager.GetString(n);
}
}
}
public class GlobalizedDisplayNameAttribute :
System.ComponentModel.DisplayNameAttribute
{
String n;
public GlobalizedDisplayNameAttribute(string s) { n = s; }
public override string DisplayName {
get {
return Project.Properties.Resources.
ResourceManager.GetString(n);
}
}
}
You can then use those attributes with your objects properties:
…
[GlobalizedDisplayName("whatever")]
[GlobalizedDescription("whateverthisdoes")]
public int FooBar {
get { … }
set { … }
}
…
Globalizing the Category follows the same Pattern, extending CategoryAttribute.
There are some traps to avoid though:
- Fetching the String in the Constructor does not seem to work.
- If you use the Globalized…Attribute with an Identifier not in your Resources, the Program might throw OutOfMemoryExceptions at startup.