Blog Home  Home RSS 2.0 Atom 1.0 CDF  
.NET (Compact) Framework
Haggy's technischer BLog
 
 Tuesday, October 28, 2008
Ab sofort ist eine 21 Tägige Demoversion des BE Gantts auf Anfrage verfügbar.
Ein kleiner Screencast sowie Codesamples folgen hier auch noch

10/28/2008 6:38:03 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | .NET Allgemein | BE Gantt  | 
 Wednesday, October 01, 2008
In den letzten Tagen häufen sich die Anfrage nach dem BE Gantt.

Das freut mich sehr und ich habe auch sehr gute Nachrichten. In absehbarer Zeit wird das BE Gantt verfügbar sein.
Bei einzelnen Kunden ist es bereits im Echteinsatz und deren Erfahrungswerte möchte ich noch abwarten.

Zuästzlich wird es demnächst einen OutlookStyle Monatskalender geben. Auch dafür folgen demnächst weitere Infos.

Also schonmal viel Spaß bei der Vorfreude :)

10/1/2008 4:52:59 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | BE Components | BE Gantt | Thir Party Tools  | 
 Friday, July 25, 2008
Die Prio 2008 beschäftigt sich dieses mal mit dem Thema Softwarearchitektur.
Letztes Jahr war das Thema Softwarequalität. Das in meinem Augen zeigt auch schon wie sich die Prio von anderen Konferenzen unterscheidet.

Es geht nicht um die neuesten Technologien oder den letzten GUI Schnickschnack ;) sondern viel mehr um Konzepte, Ideen und Erfahrungswerte.

Gerade das Thema Softwarearchitektur ist ein Thema das oft leider zu kurz kommt und so versteckt Kosten generiert derer sich vieler gar nicht bewusst sind.
Die Qualität der Konferenz vom letzten Jahr ist für mich ein Indiz dafür dass diese Konferenz wieder zu den besten diesen Jahres gehören wird.


7/25/2008 8:15:51 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | Konferenzen  | 
 Wednesday, July 02, 2008


Es war fast abzusehen ;)

mit VS2008 führte Microsoft .NET 3.5 und C# 2.0 ein. Folgerichtig musstem an sich fragen wie Themen wie Linq, WCF usw-. in die Zertifizierungsmöglichkeiten integriert werden sollen.

Nun ist es offiziell: Es wird für VS2008 (.NET 3.5 / c#2.0) aktualisierte Prüfungen geben. Alle bestehnden MCPD's / MCTS haben die Möglichkeit ihre Zertifizierungen mit einer Upgrade aktualisieren zu können.


Hier gibt es dazu eine sehr gute Übersicht: http://cid-17971e0c952a3d0a.skydrive.live.com/self.aspx/MSFT_Certification/VSMap.pdf
Eine allgemeine Seite zu den Prüfungen gibts hier:  http://www.microsoft.com/learning/mcp/mcpd/vstudio/2008/default.mspx

Bis jetzt habe ich noch keine Literatur empfehlung gefunden ( für tipps bin ich dankbar) aber ich vermute dass die Prüfung hauptsächlich themen wie Linq,ExtensionMethods etc... abdecken wird.


Viel Spaß beim Lernen !
7/2/2008 7:28:26 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [2]    | Zertifizierungen  | 
 Monday, June 30, 2008
Wir haben momentan eine offene Stelle für einen C# / .NET Entwickler zu besetzen.

Wer interesse hat kann sich gerne bei mir oder den Kontaktdaten auf der Anzeige melden.


6/30/2008 12:44:45 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | Stellenanzeige  | 
 Tuesday, June 17, 2008
Microsoft hat ein neues Portal mit Webcasts online gestellt s CastZone

Viel spaß beim Webcasten !

6/17/2008 11:54:46 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | .NET Allgemein | Tutorials  | 
 Friday, June 13, 2008
Für jeden Entwickler, der Debuggen für einen wichtigen Teil der Entwicklungsarbeit hält habe ich folgenden BLog von John Robbins als Tipp :

http://www.wintellect.com/cs/blogs/jrobbins/default.aspx

Es ist ebenfalls autor dieses Buches dass ich nur empfehlen kann:
 

6/13/2008 7:07:09 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | .NET Allgemein | BLogs | Buchempfehlungen  | 
 Sunday, June 08, 2008
Der Type Explorer hat nun , wie angekündigt, inkl. SourceCode sein Zuhause bei Codeplex gefunden.

s. http://www.codeplex.com/TypeExplorer

Geplanst sind als nächstes u.a. Integration in den Reflector sowie eine WPF GUI.


Feature Wünsche werden gerne entgegen genommen
6/8/2008 6:39:07 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | .NET Allgemein | BE Components | C# | Controls | Free Tools | Releases | Thir Party Tools | Tutorials | WinForm | WPF  | 
 Thursday, June 05, 2008
Durch einen Tipp von Neno Loje wurde ich auf den StyleCop Aufmerksam s. http://code.msdn.microsoft.com/sourceanalysis/

Dieses Tool analysiert Code auf der Source ebene und kann somit prüfen ob der geschriebene Code sich in einer gültigen Sturktur (z.bsp. Coding Konventionen) befindet.


Nochmal danke an Neno für den guten Tipp !
6/5/2008 7:51:19 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | .NET Allgemein | .NET Framework 3.0 | C# | Free Tools | Releases | Softwarequalität | Thir Party Tools  | 
 Saturday, May 31, 2008
Dank des Sponsorings meines Arbeitgebers der Firma B&R DV Informationssysteme Gmbh hatte ich den lauf mit ienem Sponsor absolvieren können.
Ebenfalls hat meine Freundin für jede gelaufene Runde die Spende erhöht.

Hier mal 2 Bilder:





5/31/2008 7:00:05 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [1]    | 
 Thursday, May 29, 2008
Hi

hier in aller Kürze etwas in Privater Sache:

Bei mir um die Ecke findet dieses Wochenende (29.05.2008) ein Wohltätigkeits lauf statt s. http://www.lebenslauf.blutev.de/index.php?cat=aktuell&id=flyer
Die Idee der Veranstalter ist, dass der Lauf kostenlos ist aber jeder Läufer sich "Sponsoren" sucht die einen Kleinenbetrag spenden.
Entweder für den Kompletten lauf oder etwas pro runde (max.8 wenn es meine Kondition zulässt) .

Es würde mich freuen wenn sich hier noch ein paar privat Leute oder Firmen als Sponsoren für diesen Guten Zweck finden lassen würden.
Lauf muss keiner das übernehme ich ;)

Alle Spender werden dann natürlich in diesem BLog dann erwähnt.
Für alle Spender gibts an der Strecke auch Rahmenprogramm und sind gern dazu eingeladen mich Runde für Runde nach vorne zu peitschen ;)

5/29/2008 10:01:22 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | 
 Sunday, May 25, 2008
In meinen Applikationen gibt es ab und an Manager, welche sich Referenzen auf Instanzen die sie selbst erzeugt hatten, merken sollen.

Diese Manager sollen aber die erzeugten Instanzen nicht unnötig am Leben halten. Deswegen verwende ich hierzu die System.WeakReference Klasse.
Das sieht dann so aus:

List<WeakReference> formRefs  =....
...

Form myForm = new Form();
WeakReference myRef = new WeakRefrence(myForm);
formRefs.add(myRef);

beim abrufen kann man nun prüfen ob die Instanz noch am leben ist und zwar so in der art

if(myRef.IsAlive && myRef.Target != null)
{
    Form myOldForm = myRef.Target as Form;
 
    if(myOldForm != null)
    {
        ....
    }
}



Allerdings hat mich das ständige casten schnell genervt und so habe ich eine generische Implementierung drauf gesetzt.

Mir dieser Klasse kann man sich eine WeakReference nun so erzeugen

WeakReference<Form> weakRef = new WeakReference<Form>(myForm);
und spart sich nun das ganze casten.

if(weakRef.IsAlive && weakRef.Target != null)
{
    Form myOldForm = weakRef.Target;

    //Sicherheitsprüfung, um auszuschließen dass der GC soeben asynchron das obejkt weggeworfen hat
    if(myOldForm != null)
    {
    }
}

Die Klasse gibts im Anhang

WeakReference.cs (2,2 KB)

Feedback welcome !
5/25/2008 9:52:24 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [4]    | .NET Allgemein | BE Components | C# | Free Tools | Softwarequalität | Tutorials  | 
 Sunday, May 11, 2008
Hier eine kurze Info zum BE Typetree und wie es damit weiter gehen wird.

Da die nachfrage an diesem kostenlosen Tool sehr groß war, habe ich mich entschlossen dieses Tool bei Codeplex online zu stellen.

So hat auch jeder die Chance selbst etwas beitragen zu können.

Indiesem Zuge werde ich das Tool auch zu "Type Explorer" umbennen.
Ebenfalls werde ich zusehen dass ich das Extensibility Interface des Relfectors implementiere so dass man den Typeexplorer auch von dort aus verwenden kann.

Feedback welcome ! :)

CodePlex URL wird noch folgen.

5/11/2008 12:14:05 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | .NET Allgemein | BE Components | Free Tools | Thir Party Tools  | 
 Sunday, May 04, 2008
Letztens bin ich darüber gestolpert, dass ich gerne von meiner Anwendung heraus einen Systemdialog anzeigen wollte.

Dies ist relativ einfach da man hierzu nur die zugehörige CPL Datei starten muss.

Dazu habe ich ein kleines Sample programm erstellt s. Anhang

Aktuell kann man Dialoge wie ODBC, Telephon einstellungen, Anzeigeeinstellungen , Windows Mobile Devices etc wählen das ganze ist aber natürlich beliebig erweiter bar.
Man muss lediglcih die Enumeration erweitern und im getDialogfile den entsprechenden Case einfügen.



Hier noch ein Screenshot der mini Testform



SystemDialoge.zip (55,79 KB)





5/4/2008 10:35:41 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | Free Tools | Tutorials  | 
 Friday, April 25, 2008
Microsoft bietet nun die Sessions des Launch events als Video download an.

s. http://www.microsoft.com/germany/msdn/launch2008/videos/default.mspx

4/25/2008 10:51:25 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | 
 Sunday, April 20, 2008
Diese Donnerstag werde ich auf der dotnetpro.jump sein. Vielleicht finden sich noch ein paar Leute die ich kenne und auch dort sind?

Wenn ja könnt ihr mir ja mal mailen.


Infos zur DotNetPro.Jump gibts hier http://www.prioconference.de/127.html

4/20/2008 9:25:06 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | 
 Saturday, April 19, 2008
Hier nun eine neue Version des BE Type Tree's


Hier erstmal ein kurzer Screencast zur Bedienung des Controls.

BETypeExplorerDemo.wmv (1,54 MB)


In der nächsten Version ist es geplant die einzelnen Controls für Ihre eigenen Projekte freizuschalten, so dass sie das Tree z.bsp. in die eigene Anwendung einbinden können!


Hier eine erste Alpha Version. Ich kann nicht ausschließen dass es da noch Bugs gibt, Benutzung auf eigene Gefahr. Über Feedback würde ich mich freuen !
BETypeTree.zip (175,62 KB)


4/19/2008 7:17:55 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | .NET Allgemein | BE Components | Free Tools  | 
 Friday, April 18, 2008
Der Type tree näher sich einer ersten Beta version und schon hat man Feature wünsche an mich heran getragen ;)

- Suchen von Typen nach ihrem Name (!= FullName)
- Merken der letzten Einstellungen
- Filter über Namespaces
-...

Werde ich die Tage auch noch implementieren und dann gibts die erste Beta. Wer interesse hat kann sich gern bei mir via ICQ oder Mail melden.

Hier noch einen kurzen Screencast

BE Type Tree Demo.wmv (1,12 MB)
4/18/2008 12:19:11 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | .NET Allgemein | BE Components | Controls | Free Tools | Thir Party Tools  | 
 Sunday, April 13, 2008
Ich bin ein großer Fan des Reflector Tools von Lutz Roeder s. http://www.aisto.com/roeder/dotnet/
Allerdings fehlten mir dort schon immer einige Features.

Häufig möchte ich innerhlab von Projekten mir schnell einen Überblick verschaffen. Welche Ableitungen einer Klasse gibt es in einem Projekt. Gibt es vielleicht eine Ableitung die nicht der geplanten Strategie entspricht ( falsche Basisklasse?).-

Man bekommt diese Informationen zwar mit dem Reflector heraus allerdings gibt es meines Wissens keine "schöne" Übersicht dafür.

Deswegen habe ich den TypeTree entwickelt ( gibts demnächst hier als Free Download)

Dort stellt ein Baum die Vererbungsverbindungen zwischen klassen dar.

Hier mal noch ein kleiner Screenshot


4/13/2008 1:16:07 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [2]    | .NET Allgemein | BE Components | C# | Free Tools  | 
 Thursday, March 20, 2008

Geschafft. Bin ab heute ein Microsoft Certified Professional Developer for Windows Forms Application .
Ab nun bleibt auch wieder bischen mehr Zeit für  diesen BLog :)
3/20/2008 1:09:27 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [3]    | Certifications  | 
 Wednesday, March 05, 2008
Microsoft bietet ein kostenloses DesktopSharing Tool an.

BLog eintrag dazu im Hanselmann BLog: http://www.hanselman.com/blog/KnowingWhenToAskForHelpMicrosoftSharedView.aspx
Download gibts unter http://connect.microsoft.com/site/sitehome.aspx?SiteID=94

3/5/2008 8:57:03 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | Free Tools  | 
 Sunday, February 17, 2008

Ein Geist geht um. So oder so ähnlich könnte man, wenn man betrachtet, was sich momentan in der Softwareentwicklung fast still schweigend bewegt.

Ich versuche Software möglichst modularisiert und entkoppelt zu entwickeln. Die Vorteile liegen für mich auf der Hand.

Gerade die Idee von Ralf Westphal     (s. seinen BLog  Software als System) wie man Softwareentwickeln sollte, zeigt Vorteile auf .

Wenn Teile einer Software (egal ob man sie nun Service ,Komponente, Klasse oder sonst wie bezeichnet) so modular und entkoppelt sind, dass man sie austauschen kann ist diese Software deutlich besser Testbar und ermöglicht es andere Komponenten gedanklich ausblenden zu können.

Die Idee der Softwarezelle ist neiner Meinung nach ein sehr guter Ausgangspunkt um einen verbesserten Softwareprozess zu entwickeln.
Dieses System beschreibt einen sehr organisierten und geplanten Softwareentwicklungszyklus welcher sich den Vorgehensweisen denen in der Industrie annähert.

Und genau das ist etwas wonach ich schon seit einiger Zeit strebe aber immer wieder feststelle, dass in bei vielen noch kein adäquates Bild von Softwareentwicklung besteht.
Die leider nur zu oft an den Tag gelegene Haltung zur Softwareentwicklung ist, dass man ja nur „CodeZeilen“ schreibt. Text also. Die Eigentliche Schwierigkeit der Softwareentwicklung wird selbst heute noch leider nur all zu oft in dem Schreiben der Syntax, also im Schreiben des Textes, fast dem sequentiellen Drücken der Tasten gesehen.

Wozu also der unnötige Aufwand?


Das finde ich immer recht verwunderlich, denn wer würde behaupten, dass das Problem bei dem Bau einer Kathedrale das Anrühren des Betons wäre? Oder das bei dem Gemälde in der Sixtinischen Kapelle die größte Leistung des Künstler darin liegen würde dass er in der Lage ist einen Pinsel zu verwenden?

Es ist viel mehr das Zusammenwirken vieler Faktoren,  das Gesamtbild und die Zusammenhänge darin, die die Schwierigkeit einer Software ausmachen.

Doch warum wird Gegenteiliges bei der Softwareentwicklung erwartet? Es ist meine Überzeugung, dass hinter jeder Haltung eine Motivation steckt und dass Prinzipiell jeder Mitarbeiter einer Firma  dazu beitragen möchte, dass die Firma Erfolg hat.
Wieso also gibt es hier so grundsätzlich verschiedene Überzeugungen (Zumeist zwiscehn Stakeholder und Softwareentwickler) wie Software entwickelt werden sollte?

Der Grund hierfür liegt meiner Meinung nach darin, dass große Teile des Personals in der IT Branche hineingewachsen sind. Sehr viele Projektleiter waren mal selbst Softwareentwickler. Was dazu führt, dass sie sich ja „eigentlich auskennen“ selbst “Männer/ Frauen vom Fach sind“.
Dies wiegt Führungspersonen verständlicherweise leicht in einem trügerischen Sicherheitsgefühl. Denn bei den meisten sind die letzten produktiven Codezeilen doch schon eine Weile her. Auch verbringen sie in der Regel keine 8-16  Std am Tag mit Softwareentwicklung. Können Sie somit auf dem gleichen Stand sein wie der Softwareentwickler ?

Ich behaupte: Nein !

Wenn man sich nun anschaut wie die Anforderungen an Software im Allgemeinen vor 10 oder 20 Jahren aussahen, hat das mit heutiger Softwareentwicklung nichts mehr zu tun.

Aus simplen EAV Consolen Anwendungen wurden Datenbank Windows Anwendungen, aus diesen wiederum  Verteile Applikationen welche Webservice anbinden und am besten im Internat auf Desktops, PocketPcs und in Outlook laufen sollen. Und dementsprechend beeinflussen die Anforderungen auch die Art wie Software entwickelt wird. Oder würden Sie ein Bau eines Hochhaus genauso angehen wie Sie ein Iglu bauen würden?

Sehr oft existiert auch ein Art „pseudo Wissen“, das daraus resultiert dass Motivierte Projektleiter versuchen noch Schritt zu halten und somit versuchen sich nebenbei Wissen anzueignen.

Es ist für mich aber ganz wichtig, dass nicht falsch zu verstehen, denn ein Kundenbetreuer muss meiner Meinung nach auch nicht wirklich wissen was SOA bedeutet, oder was nun WCF besser macht als „reine“ Webservices. Denn es gehört doch gar nicht zu seinem Aufgabenbereich. Es wäre in meinen Augen sogar sehr ineffizient wenn nun alle Chefs, Kundenbetreuer etc. anfängen würden zu erlenen wie man verteilte Applikationen entwickelt und jeden Tag Zeit in das erlernen neuer Techniken oder Softwareprodukten stecken würden. Denn der Bereich der Softwareentwickler ist so groß, dass sich schon die „VollzeitSoftwareentwickler“ spezialisieren müssen und das Leiten einer Firma ist auch nicht gerade Trivial.

Wieso entsteht nun aber überhaupt die Situation, dass die großen und kleinen „Chefs“ anfangen sich halbwisse anzueignen und wieso passt die Art Softwareentwicklung nicht mehr zu der Art wie man Software vor 20 Jahren entwickelt hat?

Im Endeffekt würde ich sagen „Features“. Kunden erwarten mehr. Windows bietet immer mehr Funktionalität und auch wenn viele bei Vista die Nase rümpfen: „Den Glass Effekt oder die Zoomable GUI oder die Ribbons in unserer Anwendung zu bekommen wäre schon der Hammer…“.

Durch steigende Informationsmengen steigt auch der Wert der Informationen und damit auch die Notwendigkeit diese Effizient und Zeitnah auswerten zu können. Wir sind es gewohnt fast 24h am Tag online gehen zu können und diese Erwartungshaltung gilt auch auf für die Software die wir erstellen.
Haben wir ein nun ein Tool mit den wichtigsten Informationen, die wir uns vorstellen können aber dieses Tool sagt „starten Sie mich bitte nur zwischen 9 und 17 uhr“  würden uns doch ein komisches Gefühl überkommen.

Diese gesteigerten Erwartungshaltungen führen auch zu neuen Anforderungen in der Software . Auf einmal soll eine alte Win32 Exe auch übers Internet laufen ?  Webservice, Webseite ? , Vielleicht noch in Outlook integriert, damit man dort direkt seine Aufgaben bearbeiten kann und achja alles soll am besten gestern Fertig sein… Bei einer nicht geplanten und 5 oder 10 Jahren alten Anwendung vermutlich nicht mehr effizient machbar.

Die Entwicklung in der Softwareentwicklung geht eindeutig in die Richtung

-          Mehr Anforderungen

-          Größere Anwendungen => Komplexere Software

-          Häufig  variierende Anforderungen => Flexibler

-          Größere Informationsmengen schneller und intelligenter abfragen

Auf dem VS2008 Release Event wurde es in der Keynote gesagt „…Softwareentwicklung verändert sich notwendigerweise …„genau JETZT“.

Bei dieser Weiterentwicklung fehlen aber alle die nicht mehr aktiv bei der Softwareentwicklung sind, woraus ein implizit unterschiedliches Verständnis von Software existiert.

Doch was hat dies zur Folge?  Ich sage  folgende Punkte sind Basisanforderungen, die man an eine Softwareentwicklung stellen sollte:

1.       Vertrauen. Denn nur dann kann man effizient arbeiten. Wenn der Consultant der Kontakt zum Kunden hat, zu 100% seinen Mitarbeiter Vertrauen kann, dass diese Wissen wen man wofür fragen muss, welche Technologien es zu evaluieren gibt, dann kann sich der Leiter auf seine Arbeit konzentrieren und man kann sich auf eine definierte Schnittstelle einigen die dafür sorgt dass aus Kundenwünschen, Anwendungen entstehen.

2.       Planung geplante Software kann die Flexibilität steigern und auch die Komplexität für andere Entwicklern  deutlich verringern.

3.       Architekt Gerade bei größeren Anwendungen halte ich es inzwischen für notwendig, dass es eine Zentrale Stelle für Planungen in der Softwarearchitektur gibt. Die Person an dieser Stelle sollte bei jeder neuen Anforderung der primäre Ansprechpartner sein. Der Architekt kann dann entsprechend des Themen Bereiches die betroffenen Entwickler hinzu ziehen,

4.       Spezialisierung Chefs und Kunden Betreuer sollten sich auf ihr jeweiliges Gebiet spezialisieren und von einander profitieren. Eine Mischung ist für beide Position Ineffizent. Es muss lediglich ein gemeinsamer Kommuninkationsweg gefunden werden

5.       Konstruktive Kritik Jedes Teil des Teams sollte offensiv und konstruktiv Kritik suchen und geben um so Schwachstellen in der Planung und Umsetzung von Softwareprojekten zu finden.

 
In diesem Sinn geht eine Veränderung fast Geisterhaft um. Die Änderung von intuitiver Softwareentwicklung zu einer geplanten. Doch gerade die Entscheidungsträger die solche Strukturen formen müssen sind in den meisten Fällen nicht auf dem technischen und „erahnen“ höchstens die Vorteile.
 Es gab nie (und wird es wohl auch nie geben)  eine Schlagzeile die sagt: „Ab morgen geplante Software!“

Kein Wachrütteln, kein Alarmton, Kein Kampfschrei,…. deswegen wird wohl in den meisten Fällen der Leidensdruck entscheidend sein ab wann nun Software geplant und nach Standards entwickelt wird.

Schlimmer noch es gibt nicht einmal „Die Lösung  wie man Software entwicklen sollte wodurch nicht nur jeder selbst in der Verantwortung zu lernen ist sondern selbst auch in der Verantwortung ist herauszufinden ob es etwas zu lernen gibt.

2/17/2008 8:28:05 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | .NET Allgemein | Software Life Cycle  | 
 Wednesday, February 13, 2008
In Köln findet eine Afterlauch Konferenz zum VS2008 statt.

Die Konferenz kostet lediglich eine Schutzgebühr von 10 € s.
für weitere Infos s. http://www.afterlaunch.de/default.aspx

2/13/2008 9:06:24 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | Konferenzen  | 
 Sunday, February 10, 2008

Wann sind eigentlich 2 Objekte gleich ?

Wenn man 2 Objekte A und B hat und es gilt A.Value = 2 und B.Value=2 gilt dann A== B ?

Diese Frage ist nicht ganz so einfach zu beantworten, denn die Frage ob 2 Objekte gleich sind hängt von den Umständen ab. Denn im ersten Schritt hängt die Gleichheit der Objekte im .NET Frameowrk von der Implementierung der Equals Methode ab.

Die Standard Implementierung prüft darauf ob es wirklich das gleiche Objekt ist. In diesem fall wäre A== B => False

Equals

Gibt es nun eine eigene Implementierung der Equals Methode, welche die Value Eigenschaft der beiden Objekte vergleicht, so könnte das Ergebnis von A==B => true sein.

Wie sollte aber nun eine eigene Implementierung dieser Methode aussehen ? Zunächst einmal sollte man wissen dass jedes Objekt eine Equals() Methode besitzt das sie eine virtuelle Methode des Typs Object ist. Deswegen kann diese Methode in jeder eigenen Ableitung überschrieben werden

Bei diesen vergleichen gibt es einige Sonderfälle zu beachten weswegen allgemein folgende dringenden Empfehlungen für die eigene Implementierung von Equals gelten:

-          Ist das übergebene Objekt null ist das Ergebnis false (denn das aktuelle Objekt ist ja offensichtlich nicht null)

-          Hat das Übergebene Objekt einen anderen Typ ist das Ergebnis false

-          Es sollten alle Instanzwerte der Objekte gegeneinander verglichen werden

-          Wenn die Basisklasse != Object ist so sollte auch die Basis Implementierung der Methode aufgerufen werden und mit einem AND Operator mit dem aktuellen Ergebnis verarbeitet werden

-          Es soll gelten:  x.Equals(y) == y.Equals(x)

-           

Möchte man nun aber (trotz überschreibung der Equals Methode Prüfen ob 2 Objekte die gleichen Objekte im Speichern sind ,kann man dies mit Object.ReferenceEquals() tun.

Wichtig ist auch zu beachten dass unter Umständen der == Operator nicht das gleiche ergebnis zurückliefert wie Equals() Deswegen muss u.U. der Operator auch noch überlagert werden.

Somit kann gelten A.Equals(b) != (A==B)

 

GetHashCode

Sobald man (nur) die Equals Methode überschrieben hat bekommt man vom VisualStudio eine Warnmeldung dass Equals aber nicht GetHashCode überschrieben wurde.

Dies hängt damit zusammen dass einige Klassen im .NET Framework die GetHashcode Methode verwenden um festzustellen ob und wo ein Element bereits existiert (z.bsp. Sortierungen oder Dictionary<>)

GetHashCode sollte so überschrieben werden:

-          Die Werte  sollten gut verteilt sein

-          Die Werte sollen Zufällig verteilt sein

-          Instanzfelder sollen in den Algorithmus einfließen

-          Gleiche Objekte (Equals) sollten auch gleiche Hashcodes zurückliefern

-          Hashcodes dürfen nie  persistiert werden, da sie sich ändern können ( Versionen der

-          Objekte)

Interfaces

Hat man nun die Herausforderungen der Equals und GetHashCode Methoden überwunden stellt man direkt vor der nächsten Frage: Was hat es mit den ganzen „Gleichheits Interfaces“ auf sich?

Es gibt nämlich im .NET Framework einige Interfaces welche anderen Objekten zum Vergleichen dienen.

Hier mal ein Paar:

-          ICompareAble / ICompareAble<T>

-          IComparer / IComparer<T>

-          IEQualityComparer

-          IEQuatable<T>

Bei der schier erschlagenden Anzahl an Gleichheiten kann es schwer werden, den Durchblick zu behalten. Sehr wichtig ist, dass sich diese Interfaces auch gleichverhalten. Liefert z.bsp. Equals bei A und B true so sollte dann auch die Methode von CompareTo ein true liefern. Ansonsten kann sich die Applikation schnell ungeplant verhalten. Ggf. hilft auch ein generelles auslagern in eine interne Vergleichsmethode die dann nur noch von den einzelnen Vergleichs Methoden / Interfaces aufgerufen wird.

 

Hier mal die Inferfaces in einer Kurzen Darstellung

ICompareAble : Gibt an dass ein Objekt vergleichbar ist. (Größer kleiner Gleich) http://msdn2.microsoft.com/en-us/library/system.icomparable.aspx

IComparer: Gibt an, dass das Objekte andere Objekte Vergleichen kann(Größer kleiner Gleich) http://msdn2.microsoft.com/en-us/library/system.collections.icomparer.compare(VS.80).aspx  http://technet.microsoft.com/de-de/library/8ehhxeaf.aspx

IEQualityComparer: Gibt an dass das Objekte andere Objekte auf Gleichheit vergleichen kann.  Z.bsp kann man dem OrderedDictionary einen eigenen IEQualityComparer übergeben, er dann die Gleichheitsprüfungen innerhalb des Dictionarys überprüft (Größer kleiner Gleich) http://msdn2.microsoft.com/de-de/library/system.collections.iequalitycomparer(VS.80).aspx 

IEQuatable: Gibt an dass das Objekt sich auf Gleichheit prüfbar ist. Ist ein z.bsp. IEquatable implementiert wird vom Dictionary<> diese Methode statt der EqualityComparer Methode verwendet. S. http://msdn2.microsoft.com/en-us/library/xfhwa508.aspx , http://msdn2.microsoft.com/en-us/library/xfhwa508.aspx

 

2/10/2008 8:57:13 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]   .NET Allgemein | Tutorials  | 
 Tuesday, December 04, 2007

Da ich letztens wieder einmal gefragt wurde „Wie bekomme ich eigentlich meine eigenen Controls in ein Toolstrip“ hier die Lösung.
Eigentlich ist das ganze dank der Möglichkeiten von .NET 2.0 sehr einfach. Das Schlüsselwort lautet ToolStripControlHost.

Dieses Element verpackt das eigene Control und tut alles notwendige andere Controls im Toolstripdarstellen zu können.
Hier das CodeBeispiel welches ein beliebiges UserControl in den ToolStrip bringt:

            //Erstellen eines Beliebigen Controls

            UserControl myCustomCtrl = new UserControl();

            //verpacken im Host für den ToolStrip

            ToolStripControlHost curHost = new ToolStripControlHost(myCustomCtrl);

            //Und den Host mit dem Control dem Toolstrip übergeben

            this.toolStrip1.Items.Add(curHost);

 

Und das wars auch schon. Feedback welcome!

12/4/2007 8:58:23 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | .NET Allgemein | C# | Controls | Tutorials  | 
 Monday, November 26, 2007
Manchmal gibts Zufälle ;)

Gerade letztens noch viel von mir gefragt "Wieso gibt es kaum Webcasts zu Softwarearchitektur" schon sind ebensolche beim MSDN Webcastfinder http://www.microsoft.com/germany/msdn/webcasts/finder/default.mspx zu finden:

- Architekturstrategien - Ohne Strategie geht gar nichts…
- Qualitätseigenschaften und Architekturreviews - Qualität - aber wie "messen" wir sie?
- Generelle Motivation für Softwarearchitektur und Softarearchitekten - Weshalb, wieso, warum…
- Softwareentwicklung mit Patterns - Herr Mustermann läßt grüßen
- Prozessprinzipien - Entwicklungsprozesse im Detail
Viel Spaß beim Schauen!

11/26/2007 12:28:13 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | .NET Allgemein  | 
 Monday, November 19, 2007
11/19/2007 8:16:19 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | .NET Allgemein | Releases  | 
 Sunday, November 18, 2007
Momentan  beschäftige ich mit VS2008 & den neuen Sprachfeatures in C#.
Aus diesem Grund wird es demnächst hier ein paar Postings zu Vs2008, Extension Methods , Lambda Expressiond & Linq geben.

Wünsche werden gerne entegegen genommen :)

11/18/2007 9:04:39 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | .NET Allgemein  | 
Letzten Dienstag und Mittwoch fand in Baden-Baden die Prioconference (s. www.PrioConference.de) mit dem Thema Softwarequalität statt.

Ich hatte das Glück dort anwesend und somit auch die Vorträge hören zu können.

Interessant ist die Idee der PrioConference. Es geht dort nicht um die reine Verwendung einer Technologie,  wie es zumeist bei anderen Konferenzen der Fall ist. Sondern viel mehr um generelle Themen, welche meinem Gefühl nach beider Alltäglichen Softwareentwicklung zu oft zu kurz kommen.

So findet man Themen wie „Useability Engineering“ , „Von der Idee bis zur Implementierung“ ,“Production Debugging“ oder sogar „Soft Skills“ im Vortragsplan.

Abgerundet wurde das Programm durch Erfahrungsberichte zu Softwarequalität, wie man diese erreicht und hält, von Firmen / Entwicklerteams  wie Vanatec, sharpDevelop usw….

Viele der Sessions wären auch für Entwickler  geeignet gewesen ohne C# oder .NET zu kennen. Das begründet sich in  der Art  der Vorträge, welche sich mehr auf generische Sachverhalte bezogen die auf nahezu alle Entwicklungsumgebunden übertragbar waren.

Trotz des eher Theoretischen Inhalts waren, meinem Gefühl nach, die meisten Themen auf das tägliche Arbeiten übertragbar.  So konnte man einige Impulse und Anregungen für Optimierungen des täglichen Arbeitens mitnehmen.

Insgesamt drängten sich mit in den Tagen nach der Konferenz jedoch einige Frage auf, deren Beantwortung mir nicht leicht fällt.

Je mehr man sich mit Softwarequalität beschäftigt umso mehr kommt man meiner Meinung nach zu dem Schluss, dass Softwarequalität direkte Auswirkungen auf Stabilität, Flexibilität und fotlaufende Entwicklungsdauer für Erweiterungen und Bugfixes hat.

Insofern müsste doch bei jedem Softwareentwickler einer „großen“ Software  doch die Softwarequalität eine besonders große Priorität haben.   Gerade weil uns das .NET Framework immer größere Möglichkeiten bietet (z.bsp. WF & WPF)  werden sich doch die angebotene Software immer weniger durch extra Funktionalität als viel mehr durch Stabilität, Erweiterbarkeit und Usability unterscheiden.

Wann dann die eigene Struktur der Software nicht mehr tragfähig oder Flexibel genug ist ist bleibt die Frage wie man sich von anderen konkurierenden  Produkten  abheben kann.

Ist dann die eigene Anwendung noch Buggy so wird man wohl nicht lange bestehen können.

Im krassen gegensatz dazu steht aber meine Erfahrungen aus dem Internet. So werde ich viel häufiger gefragt wie man X,Y in der .NET Syntax implementieren kann als „Was wären denn logische Strukturen für meine Anwendung“. Schaut man sich die Webcasts beim MSDN Webcast Finder an so findet man hundere Webcasts zu verschiedensten Klassen & Namespaces im .NET Framework aber kaum etwas über Softwarearchitektur oder nur wenig zu Unittests.

MSDN Solve bietet wenigstens ein paar Webcasts zu Software Patterns aber auch das ist wohl eher nur ein Tropfen auf den heißen Stein.

 

Ich frage mich wieso ist das so ? Ist Softwarequalität eine theoretisch tolle und notwendige Sache ,die aber in der Praxis auf Grund Knapper Budgetpläne immer gekürzt wird?  Auch wenn das Bedeutet dass Nachfolgende Entwicklungen immer teurer werden, da die Software nicht stabil oder die Struktur zu inflexibel ist ? z.Bsp. habe ich bis jetzt nur sehr selten von jemanden gehört, der Konsequent Refactoring Pausen durchgezogen hat

 

Wie sind eure Erfahrungen und Meinungen zu dem Thema?

11/18/2007 8:19:28 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | .NET Allgemein | Konferenzen | Softwarequalität | Sonstiges & Offtopic  | 
 Sunday, November 04, 2007

Hier noch ein paar erste Screenshorts der BE des BEDayAgendaViews.
Das Agendaview dient dem darstellen von Terminen in einer Agendaform für einen Tag. Auch hier gilt, wie bei jedem anderne Control, dass Sämtliche visuelle Darstellungen, Datum & String formatierungen, frei einstellbar sind.

Da die BE Component Sammlung nun schon einige Componenten beinhaltet wäre nun auch wieder Platz für ein paar weiter Betatester.

Bei Interesse einfach hier oder bei mir melden


11/4/2007 6:58:55 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | .NET Allgemein | BE Components | C# | Thir Party Tools  | 
Copyright © 2010 Haggy. All rights reserved.
DasBlog 'Portal' theme by Johnny Hughes.
Pick a theme: