Neuer Artikel: Validierung unter WPF

In der aktuellen Ausgabe der Visual Studio One findet sich mein neuester Artikel Validierung unter WPF.

Intuitive Anwendungen weisen den Benutzer auf Fehleingaben hin. Idealerweise geschieht dies direkt in der UI, frühzeitig, ohne lange Wartezeiten. Zusätzlich ist es notwendig, Daten in der Businesslogik auf Korrektheit und Vollständigkeit zu prüfen. Norbert Eder diskutiert die Validierungsmöglichkeiten im Rahmen der Windows Presentation Foundation.


Weitere Informationen finden sich auf der Homepage von Visual Studio One.

Glückwunsch zum Microsoft MVP 2009!

Herzlichen Glückwunsch! Wir freuen uns, Ihnen den Microsoft® MVP Award 2009 verleihen zu können! Diese Auszeichnung wird an herausragende, führende Mitglieder der technischen Communities verliehen, die ihre wertvollen praktischen Erfahrungen mit anderen Menschen teilen. Wir schätzen Ihren außerordentlich bedeutenden Beitrag in den technischen Communities zum Thema Client App Dev im vergangenen Jahr hoch ein.

Ein Jahr ist rum und auch dieses Mal darf ich mich über die Verleihung des MVP Awards freuen. Dies macht Mut, so weiter zu machen und auch weiterhin mit vollem Elan, Teil dieser wunderbaren Community zu sein. Ein herzliches Dankeschön, ich fühle mich geehrt!

Gezippt unter .NET

Zippen unter .NET ist gar nicht so einfach. Zwar gibt es unterschiedliche 3rd-Party-Libraries, die eingebunden werden können, aber dann hat es sich auch schon wieder. Das .NET Framework bietet zwar den DeflateStream an, aber auch das ist nicht so wirklich das Wahre, da man damit doch sehr eingeschränkt ist.
Microsoft hat dies erkannt und die Library DotNetZip auf CodePlex zur Verfügung gestellt, die hier eine wesentliche Verbesserung bringt.
Hier ein Auszug aus der Beschreibung:

DotNetZip works on PCs with the full .NET Framework, and also runs on mobile devices that use the .NET Compact Framework. Create and read zip files in VB, C#, or any .NET language, or any scripting environment. DotNetZip supports these scenarios:

  • an ASP.NET app that dynamically creates ZIP files and allows a browser to download them
  • a Windows Service that periodically zips up a directory for backup and archival purposes
  • a WPF program that modifyies an existing archive – renaming entries, removing entries from an archive, or adding new entries to an archive
  • a Windows Forms app that creates AES-encrypted zip archives for privacy of archived content.
  • An administrative script in PowerShell or VBScript that performs backup and archival.
  • a WCF service that receives a zip file as an attachment, and dynamically unpacks the zip to a stream for analysis
  • creating zip files from stream content, saving to a stream, extracting to a stream, reading from a stream
  • creation of self-extracting archives.

Ein Blick auf diese Library lohnt sich auf jeden Fall für diejenigen, die mit ZIPs zu tun haben.
Ebenfalls wichtig: Die Library ist kostenlos.

Effizienz durch Kreativität und Intuition steigern

Das Gehirn besteht bekanntlich aus zwei Hälften. Der logisch und der kreativ geprägten. Der logische Part ist zuständig für Logik, Analyse, Sprache, Regeln usw. Die rechte Gehirnhälfte ist verantwortlich für unsere Phantasie, Kreativität, Gefühl, Formen und unsere Intuition. Als Softwareentwickler ist man geneigt, hauptsächlich den logischen Part des Gehirns zu nutzen. Klar, beschäftigen wir uns hauptsächlich mit der Analyse von Problemen, wollen wir doch Lösungswege finden und diese klar strukturiert umzusetzen.

Wie oft passiert es aber, dass wir vor einem Problem sitzen, dieses immer und immer wieder durchgehen und analysieren, ohne jedoch eine wirkliche Lösung zu finden. Diese trudelt dann bei einer niedrigen Tätigkeit ein, beispielsweise beim Ausräumen des Geschirrspülers, beim Staubsaugen, beim Laufen, Spazieren oder Wandern. Wie kommt es dazu?

Fangen wir bei der inneren Stimme an. Diese Stimme (und hoffentlich ist es nur eine) brabbelt ständig vor sich hin und spiegelt unsere logische Welt (also die linke Gehirnhälfte) wider. Sie erzählt uns, was wir bewusst wissen. Alles was in unserem Gehirn indiziert wurde und in Worten auszudrücken ist. Während dieser Zeit ist unsere rechte Gehirnhälfte blockiert. Kreativität kann sich nicht entfalten, unterbewusste Ereignisse, Ideen etc. können nicht aufgearbeitet werden. Sobald wir uns aber um niedrige Tätigkeiten kümmern, die schnell zu Langeweile führen, schaltet unser logischer Part ab. Die innere Stimme reißt ab und aktiviert dadurch unser kreativ geprägtes Wesen. Dieses kann nun Dinge, die uns beschäftigen, im Hintergrund aufarbeiten, was schlussendlich irgendwann zu einem Ergebnis führt. Und schwupp, wir haben eine Idee, einen Lösungsansatz. Eventuell können wir nicht nachvollziehen, woher diese kommt, oder wie wir darauf gekommen sind, aber wir können damit arbeiten.

Was möchte ich damit sagen? In vereinfachten Worten: Wir Softwareentwickler sind sehr logisch ausgeprägt. Alles muss seine Ordnung, seinen Ablauf und seine Regeln haben. Viele Entscheidungen werden jedoch intuitiv getroffen (wie war das mit Entscheidungen aus dem Bauch fällen?). Dazu wird die kreative Gehirnhälfte gebraucht, die von uns jedoch nicht ausreichend trainiert wird. Durch eine verbesserte Verkopplung beider Gehirnhälften können beide „Seiten“ benutzt werden. Das führt zu mehr Kreativität, zu höherer Leistung, zum schnelleren Erfassen des Kontextes, in dem wir uns bewegen, oder aber unser Problem.
Dies kann man trainieren. Durch einfachste Mittel. Schreiben ist eines davon. Viele schreiben Blogs. Das ist durchaus ein erster Schritt, kreativ zu werden und seine rechte Gehirnhälfte mit einzubeziehen. Um dies bewusst zu fördern bieten sich jedoch so genannte Morgenseiten an. Diese werden vorwiegend den Autoren unter uns bekannt sein. Zu den Morgenseiten muss ich etwas ausholen:

Während wir schlafen, existiert unsere innere Stimme nicht. Diese Welt gehört der kreativen Seite. Das spiegelt sich in unserem Träumen wider. In unseren Träumen sehen wir Bilder, eventuell ganze „Filme“. Diese entspringen nicht nur unserer Phantasie, sondern es werden auch Erlebnisse, Ereignisse, Fragestellungen und Probleme unterbewusst aufgearbeitet. An manches können wir uns nach dem Aufstehen erinnern, an manches nicht. Aber immer kann es uns weiterhelfen, wenn auch manches nicht wörtlich beschrieben werden kann. Wer kennt das Gefühl, in der Früh aufzustehen und eine Lösung zu haben?

Werden wir munter, schalten wir nicht sofort vollständig in den Logikmodus. Es bedarf einer bestimmten Zeit, die rechte Gehirnhälfte zu verlassen. Dies ist genau der richtige Zeitpunkt, um sich mit seinen Morgenseiten zu beschäftigen. Einfach ein paar Zettel und einen Stift zur Hand nehmen und einfach drauflos schreiben. Dabei ist es nicht wichtig, WAS man schreibt, sondern, dass man es tut. Anfangs weiß man nicht, was man schreiben soll, dann schreibt man eben das nieder. Aber es wird immer besser und schlussendlich werden äußerst hilfreiche Notizen zu Papier gebracht, die in vielen Situationen entscheidend sein können. Wichtig ist, nicht nur zwei Zeilen zu schreiben. Idealerweise schreibt man bis zu drei Seiten. Das hört sich nach viel an, ist es aber nicht. Außerdem sollten diese Seiten VOR ALLEM anderen geschrieben werden, sollte also die erste Aufgabe des Tages sein. Noch vor dem Kaffee, der Dusche oder dem Frühstück.

Wer dieses Vorgehen über einen Zeitraum von einigen Wochen probiert, wird außerordentliche Fortschritte erleben. Versprochen.
By the way: Immer den Kontext beachten!

Getting Ideas Done

Der Weg von einfachen Ideen zu tatsächlich Umsetzbarem ist nicht einfach. So müssen Ideen erst geboren werden. Anschließend müssen sie verfeinert und schlussendlich zur Umsetzung gebracht werden. Ein langer Weg, nutzt man keine zusätzlichen Hilfsmittel.

In Erinnerung kommt hier Getting Things Done (GTD). Hierzu die Grundregel:

GTD basiert auf dem Prinzip, dass eine Person ihre anstehenden Tätigkeiten notiert und somit den Kopf frei hat für Wichtigeres.

Eigentlich einfach: Eine Aufgabe tut sich auf und wird sofort notiert. Daraus ergibt sich eine Liste von Aufgaben (Prioritäten etc. spielen natürlich auch eine Rolle), die man dadurch immer im Überblick hat und abarbeiten kann. Alle notierten Aufgaben muss man fortan nicht mehr in Gedanken halten, sie wurden niedergeschrieben, man kann nachsehen und muss nicht erst lange darüber nachdenken, was denn noch alles zu erledigen ist. Vorausgesetzt, man hat immer ein entsprechendes Werkzeug zur Hand, um Aufgaben niederschreiben und wieder nachlesen zu können.

Ähnlich verhält es sich mit Ideen. Jeder Mensch hat gute Ideen. Viele dieser Ideen werden jedoch nicht weiterverfolgt. Weiterverfolgt können sie nur werden, wenn man sich der Ideen bewusst ist und sich nachhaltig darum kümmert. Das Ziel ist nicht, sich an eine Idee zu erinnern, wenn man Fremdprodukte sieht und denkt: „An so etwas Ähnliches habe ich auch schon einmal gedacht.“. Ziel sollte es sein, aktiv mit den eigenen Ideen zu arbeiten, um sie auch verwirklichen zu können.

“Ich habe keine guten Ideen” mag nun der eine oder andere denken. Das mag vielleicht sogar korrekt sein und resultiert sehr wahrscheinlich daraus, dass nie auf geborene Ideen reagiert wurde. Das Gehirn hört auf, weitere Ideen zu produzieren, da diese ohnehin nicht weiterverfolgt werden. Wie also kann man aus diesem Dilemma ausbrechen?

GTD-Ansätze auch für den Umgang mit Ideen nutzen!

Die GTD-Ansätze können auch für unsere Ideen genutzt werden. Einfälle und Ideen sollten niedergeschrieben werden. Hierbei ist es nicht wichtig, in welches Medium sie eingetragen werden, es muss immer greifbar sein. Durch regelmäßige Durchsicht der Aufzeichnungen, gehen sie ins Unterbewusstsein ein. Das Gehirn kann an den Einfällen weiterfeilen, bis schlussendlich ein Ansatz geliefert wird, der tatsächlich Erfolg versprechen kann. Zu beachten ist, dass DER Einfall zu jeder Zeit kommen kann, auch wenn man aktuell mit gänzlich anderweitigen Dingen beschäftigt ist. Das Gehirn arbeitet in zwei unterschiedlichen Modi, einem linearen Modus (Sprechen etc.) und einem asynchronen Modus. Letzterer verwaltet Langzeitinformationen und ist für Intuition und Problemlösung verantwortlich, quasi eine Such- und Abfragemaschine mit bewusstseinserweiternden Fähigkeiten. Der Vorgang der Ideenfindung wird also asynchron ausgeführt. Wann dieser beendet ist, ist nicht vorhersagbar. Es kann sich um Minuten, Stunden, Tage, aber auch Wochen handeln.

Quintessenz ist daher: Nicht nur Aufgaben notieren, um den Kopf für „Wichtigeres“ frei zu bekommen. Auch Ideen, Ansätze und Einfälle sollten gleich behandelt werden. Eine regelmäßige Durchsicht zeigt dem Gehirn, dass Interesse daran besteht und weitergearbeitet werden soll. Ist dies erst einmal automatisiert, werden sich die ersten Erkenntnisse einstellen.

Ganz interessant dazu ist natürlich die Frage, wo sollen diese Aufzeichnungen vorgenommen werden. Hier bieten sich unterschiedlichste Hilfsmittel an. Vom Notizbuch bis hin zum Handy ist alles möglich. Wichtig ist nur, dass das Hilfsmittel immer zur Hand ist und sofort, ohne Aufwand verwendet werden kann.

Zu guter Letzt möchte ich noch auf den Artikel Warum Aufgabenlisten oft nicht funktionieren verweisen, da diese Themen sehr eng beinander liegen.

Update 31.1.2018: Einige Passagen wurden geändert. Es gab auch den Hinweis auf pocketmod.com. Das ist ein ganz nettes Konzept, war allerdings als Flash-Anwendung abgebildet. Damit gewinnt man heute nichts mehr. Laut Homepage soll etwas via Kickstarter kommen.

Filtern von Collections unter WPF

Daten können auf unterschiedlichste Weisen gefiltert werden. Eine Variante besteht darin, die Daten bereits gefiltert aus der Quelle (Datenbank, XML, etc.) zu lesen und in einem ItemsControl (ListBox, ComboBox, ListView etc.) anzuzeigen.

Soll nun dieselbe Collection in unterschiedlichen Elementen auf Basis einer bestimmten Filterung (festgelegt, oder definiert durch Benutzereingaben) angezeigt werden, dann bietet sich die Verwendung einer CollectionViewSource an. Dadurch werden insgesamt drei Möglichkeiten zur Verfügung gestellt:

  • Sortierung
  • Gruppierung
  • Filterung

Zur Filterung bietet die CollectionViewSource ein Ereignis Filter an. Dieses kann abonniert werden um eine Filterung vorzunehmen. Für jedes Item der Auflistung wird dieses Ereignis ausgelöst. Die EventArgs liefern hierbei das betroffene Item, als auch die EigenschaftAccepted. Entspricht das Item den gewünschten Filterkriterien ist diese Eigenschaft auf true zu stellen, andernfalls auf false.

Anstatt nun das ItemsControl direkt an eine Liste zu binden, wird sie an die jeweilige CollectionViewSource gebunden und somit mit der definierten Filterung versehen. Ein einfacher Weg, eine Filterung vorzunehmen.

Auf .NET GUI habe ich ein entsprechendes Beispiel veröffentlicht, welches den Umgang mit der CollectionViewSource zeigt.

WPF: Filtern von Collections.

Was geht?

Die Einträge waren spärlich in der vergangenen Zeit – zugegeben. Jede Menge war zu erledigen, viele Projekte, viele Aufgaben. Durchatmen ist angesagt. Nichts desto trotz haben sich durchaus auch für die Community einige Aspekte ergeben.

So hatte ich nicht nur einen Vortrag zu WPF auf den Student Big>Days, sondern auch die zweite Auflage meiner WPF-Vorlesung. Beide Engagements haben mir gezeigt, dass das Interesse für WPF stark am Wachsen ist. Zusätzlich konnte ich einen guten Überblick der wirklichen Hürden gewinnen, auf die ich in Zukunft vermehrt eingehen möchte. Dies wird sowohl hier in meinem Blog geschehen, als auch auf .NET GUI.

Damit wäre ich eigentlich auch schon bei einem weiteren Stichwort: Ja, es gibt zahlreiche deutschsprachige Communities, die sieh besser oder schlechter entwickeln. .NET GUI ist ja eine noch sehr junge Community. Doch können sich die Beiträge – vor allem zum Bereich WPF – durchaus sehen lassen. Selbst wer nicht aktiv teilnimmt, sondern lieber in bestehenden Beiträgen surft, sollte zu unterschiedlichsten Themengebieten zahlreiche Anregungen und Lösungen finden. Abgerundet wird das Angebot durch zahlreiche Tutorials als auch Kurzanleitungen (How To’s). Meine Liste der neuen Beiträge wird ebenfalls immer länger, es darf also mit zusätzlichen Inhalten von meiner Seite gerechnet werden.

Ach ja, für alle, die nach einem neuen Gewinnspiel gefragt haben: Demnächst geht ein neuer Contest an den Start und freut sich auf zahlreiche Teilnahmen. Als Themengebiete stehen Silverlight und WPF im Fokus.

Da ich gerade bei WPF bin: WPF-Blogger erfreut sich großer Beliebtheit, wodurch eine Aktualisierung in Angriff genommen wurde. Neben einer ganzheitlichen Umstellung im Hintergrund werden demnächst auch einige neue Features hinzukommen – quasi ein tatsächlicher Ausbau in Richtung Community.

Und dann sind da zahlreiche Stimmen, die sich Sorgen um das .NET BlogBook machen. Diese kann ich beruhigen: das Projekt lebt noch, unterliegt jedoch einem Wandel und ich muss die Zeit finden, alle Ideen und Anregungen einzubauen. Das wird sicherlich noch ein wenig Zeit in Anspruch nehmen. Es sollte jedoch im Frühsommer mit einer Aktualisierung zu rechnen sein.

Ich hoffe, dass ich die meisten mir gestellten Fragen beantworten konnte. Daher möchte ich mich auch gleich dafür entschuldigen, diesen Weg gewählt zu haben und nicht die persönliche Antwort auf jedes Email. Da sich die Fragen meist decken, erschien mir dieser Weg als der idealste.

Qualität als Weg aus der Wirtschaftskrise

Stefan Lieser hat einen Blog-Post verfasst, der sich mit Qualität und Wirtschaftskrise befasst. Darin schreibt er, dass sich Unternehmen mit hoher Qualität gerade in schlechten wirtschaftlichen Zeiten von der Konkurrenz absetzen und verbesserte Chancen haben. Unternehmen, die niedrigere Qualität bieten, bleiben auf der Strecke bzw. haben verschlechterte Chancen.

Grundsätzlich verstehe ich seine Argumentation. Aber trifft dies auf alle Branchen bzw. überhaupt zu – so, wie es Stefan beschreibt?

Ich würde es gerne so wie Stefan sehen, tue es aber nicht. Aus meiner Sicht verhält es sich so, dass Unternehmen gerade zu wirtschaftlich schwachen Zeiten ihre Budgets straffen und der Spar-Modus aktiviert wird. Qualität kostet Geld und verteuert entsprechend das resultierende Produkt. Unternehmen werden also dazu neigen, zu günstigeren Produkten zu greifen. Günstige Produkte bedeutet nicht zwangsweise hohe Qualität, eher im Gegenteil.

Daher sehe ich in wirtschaftlich schlechten Zeiten eher Unternehmen mit geringem Qualitätsbewusstsein, jedoch kurzen Umsetzungszeitpunkten im Vorteil. Besteht Wirtschaftswachstum, ist genügend Geld im Umlauf, darf das Produkt auch etwas kosten. Geld ist vorhanden, qualitative Werte werden daher eher berücksichtigt.
Ich will damit nicht sagen, dass es für Unternehmen von Vorteil ist, gerade jetzt qualitativ minderwertige Produkte auf den Markt zu werfen. Qualität zahlt sich immer aus – ganz klar. Nur sollte dieser Grundgedanke nicht erst jetzt greifen, sondern immer. Dazu gehört nicht nur das Unternehmen, sondern auch seine Mitarbeiter.

Office (VSTO) Community Day in Wien

In der Community tut sich etwas! So findet am 8. Mai 2009 der kostenlose Office (VSTO) Community Day im Microsoft Innovation Center (MIC) in Wien statt. Dieser Tag dreht sich komplett um die MS Office Entwicklung mit VSTO (Visual Studio Tools for Office). Mario Meir-Huber und Lars Keller hatten auf dem .NET Open Space in Leipzig die Idee, ein solches Event zu organisieren . Beide finden, dass das Thema Office Business Application häufig viel zu kurz kommt und möchten aus diesem Grund einen kompletten Tag zu dem Thema ausrichten. Hierzu laden sie alle VSTO Interessierten ein, zusammen mit ihnen einen Erfahrungsaustausch zu machen.

Das Community Event ist komplett kostenlos. Dennoch bitten Mario und Lars die Teilnehmer um eine Spende, um ein Catering anbieten zu können. Hierbei gilt: Keiner ist gezwungen zu spenden. Spende einfach soviel wie du möchtest.

Die Themen für diesen Tag sind:

  • Einführung in die VSTO
  • OpenXML: Das neue Office Format
  • VSTO Deployment
  • Sharepoint Workflows und Integration
  • Interaktionen in der "Office-Welt" mit .NET
  • Office plus Services

Ein Rahmenprogramm für danach ist angedacht!

Wer gedenkt daran teilzunehmen, der wird gebeten, sich unter www.vsto-taskforce.de/wikis/ocd/hauptseite.aspx einzutragen.

Cookie-Einstellungen
Auf dieser Website werden Cookie verwendet. Diese werden für den Betrieb der Website benötigt oder helfen uns dabei, die Website zu verbessern.
Alle Cookies zulassen
Auswahl speichern
Individuelle Einstellungen
Individuelle Einstellungen
Dies ist eine Übersicht aller Cookies, die auf der Website verwendet werden. Sie haben die Möglichkeit, individuelle Cookie-Einstellungen vorzunehmen. Geben Sie einzelnen Cookies oder ganzen Gruppen Ihre Einwilligung. Essentielle Cookies lassen sich nicht deaktivieren.
Speichern
Abbrechen
Essenziell (1)
Essenzielle Cookies werden für die grundlegende Funktionalität der Website benötigt.
Cookies anzeigen