Wikipedia... In computer programming, code smell is any symptom in the source code of a computer program that indicates something may be wrong. It generally indicates that the code should be refactored or the overall design should be reexamined. The term appears to have been coined by Kent Beck on WardsWiki. Usage of the term increased after it was featured in Refactoring. Improving the Design of Existing Code. Das Thema ist wahrscheinlich so alt wie das Entwickeln selbst. Wie baue ich guten Code oder anders was macht guten Code aus. Im aktuellen Projekt bin ich viel in fremden Code unterwegs und es ist schon teilweise Wahnsinn was da alles produktiv! läuft... Es gibt zahlreiche Artikel, die sich mit dem Thema auseinander setzen bzw. gesetzt haben. Ich möchte mich an dieser Stelle nicht ausnehmen, manchmal ist der Zeitdruck einfach zu groß. Eine vernünftige Ausrede ist auch nicht. I know . Allerdings sollte ein konsequentes Code Refactoring dafür sorgen, dass wenigstens die Grundprinzipien eingehalten werden. Am Ende provitieren alle (Entwickler, Projektleiter, Anwender, Vertriebler, Manager, ...) davon, dass der Code sauber ist. Beim stöbern bin ich auf einen älteren Bericht von Jeff gestoßen, der wunderbar ein paar Dinge darlegt. Ebenso hat Tobi auch so einige nette Links zum Thema parat (btw interessante Linkadresse )
Wenn für das Debuggen von ASP.NET Anwendungen Firefox genutzt wird, kann es zu einer Verlangsamung von Firefox kommen. Scott hat sich ein wenig ausgiebiger damit beschäftigt um am Ende festzustellen, dass es hier schon längst eine Lösung für gibt... Consequently, to fix this problem of slow response times when visiting localhost using Firefox, either set the network.dns.diableIPv6 configuration property to true or set the network.dns.ipv4OnlyDomains configuration property to “localhost”. My search led me to many pages around the Web suggested that you set the nework.dns.disableIPv6 property to true, but this would disable IPv6 support for all sites visited by the browser (at least according to the Wiki documentation). Therefore I set the network.dns.ipv4OnlyDomains property to “localhost”. Gelesen bei Scott
Durch einen Artikel von James Nies auf CodeProject bin ich auf sein neueste Open Source Project NArrange aufmerksam geworden. Der erste Eindruck ist wirklich gut. Sortiert es Methoden, Attribute, usw. innerhalb von Klassen um und packt das ganze in einzelne Regions. Das Tool kann auch in Visual Studio integriert werden. 
Um Verbindungen zwischen managed und unmanaged Code herzustellen, gibt es die Möglichkeit Plattform Invoke einzusetzen. Allerdings ist es mitunter schwierig einzusetzen, da Datentypen auf beiden Seiten teils unterschiedlich benutzt werden. Ein Hilfsmittel stellt das Interop Tool dar. Zunächst kann die gewünschte Methode (unmanaged) ausgewählt werden und erhält dann ein Beispielskript (managed) für den Aufruf der Methode generiert. Also mir hätte das damals doch so einiges an Arbeit erspart. Gerade für den Einstieg in die Thematik ist es wirklich super. Ob es auch für "Spezialfälle", wie z.B. Übergabe von dynamischen Arrays (MFC <--> .NET) geeignet ist, bezweifle ich, allerdings ohne es genau zu wissen... MSDN Artikel Artikel zum Tool (VBTeam) Tool (Codeplex) Gelesen im Microsoft .NET Framework Feed
Wer eine Onlinealbum auf Basis von ASP.NET 2.0 mit AJAX sucht, dem kann der Gallery Server Pro empfohlen werden. Hier lassen sich die verschiedenste Medientypen, wie Bilder, Videos oder Dokumente in Alben verwalten. Und das alles kostenlos unter GNU Lizenz  Es gibt für den Code auch einen Beitrag bei CodeProject.
Wie auch einige andere Express Produkte, gibt MS jetzt auch den sogenannten Search Server 2008 in einer kostenlosen Version heraus. Ich muss zugeben, dass ich noch nicht viel mit den "Enterprise" Produkten gemacht habe, aber trotzdem find ich diese Strategie interessant. Sharepoint war damals eines der ersten Produkte die kostenlos herausgegeben wurden. Nach und nach folgten u.a. Visual Studio und der SQL Server. Ich glaube, dass dies für die Unternehmen bzw. die Dienstleister, die darauf basierende Lösungen anbieten, ein sehr großer Vorteil ist, einen Einstieg die MS Welt zu finden. Bleibt abzuwarten, was als nächstes kommt...
Gerade versuche ich mich, eine ASP.NET 3.5 Anwendung vom lokalen IIS 6.0 auf einem IIS 7.0 zu veröffentlichen. Obwohl ich den IIS 7.0 auf den Classic Mode geschaltet habe bekomme ich einige Fehler, die ich leider nicht so protokolliert habe, dass ich sie aufzählen könnte. Nur soviel, es ändert sich einiges! Folgende Seiten haben mir sehr gut weitergeholfen, da sie die grundlegenden Fehler aufzeigen und gleich auch eine gute Einführung geben, was alles anders ist beim IIS 7.0. Einführung in den IIS 7.0 Die wichtigsten Neuerungen Offizielle Seite von MS Die Vorteile vom Pipeline Mode des IIS
Eigentlich bin ich ja kein Freund von Kaffeeklatsch. Wie der Name einer neuen Zeitung entstanden ist, darf nur vermutet werden. Auf jeden Fall bietet das Magazin, welches monatlich per Mail verschickt wird, Informationen rund um Architekturen, Patterns, Softwareentwicklung im Bereich Java und .NET. Es gibt gar eine XING Gruppe. Also dann heißt es gemütliches Lesen bei Kaffee und Kuchen 
Die Seite www.dofactory.com ist für mich schon seit einiger Zeit ein sehr guter Anlaufpunkt für Design Patterns. Hier sind die "klassischen" Patterns der GoF und einige weitere zu finden. Alle inklusive Beispielcode und Diagrammen. Sehr übersichtlich aufbereitet. Fast ebenso interessant fand ich jetzt die AJAX Sparte. Hier gibt es Beispielcode auf Basis von ASP.NET. Absolut empfehlenswert für alle Entwickler, die immer die auf eine gute Referenz zurückgreifen wollen.
Scott hat in seinem Artikel auf neue Funktionen, in Bezug auf Veröffentlichung von Webseiten direkt von Visual Studio 2008 heraus, aufmerksam gemacht.
Direkt zum IIS Blog Artikel
An ein BoundField (oder ein anderes DataControlField) wird eine Spalte gebunden, die nur ein Datum, nicht aber die Zeit, darstellen soll. Dafür steht folgendes Konstrukt zur Verfügung: boundField.DataFormatString="{0:d}";
Allerdings scheint dies nicht zu Funktionieren. Es wird immer noch das Datum angezeigt. Hilfe bietet hier das boundField.HtmlEncode=false;
Jetzt klappts. Ich bin schon öfters drüber gestolpert und hab es immer wieder vergessen. So jetzt behalte ich es.. hoffentlich 
Auch wenn es schon etwas älter ist. Intressant ist es trotzdem. Bisher bin ich davon ausgegange, dass das Model View Presenter Pattern ein "Ersatz" für das Model View Controller Pattern für den Webbereich ist. Doch dem ist wohl nicht so... Dieser sehr gute Artikel von Jeremy klärt auf
Jeff hat einmal sehr gut dargestellt, welche unterschiedlichen Typen von Entwicklern es gibt. Er nutzt dabei wieder die weit verbreitete 80/20 Regel, die wie ich finde das Prinzip der Verteilung gut darstellt, aber nicht wörtlich zu nehmen ist. Er stellt diejenigen die immer bei neuen Betaversionen dabei sind, viel neues ausprobieren und verwenden und nebenbei noch bloggen als die Vorreiter der Entwickler dar (die 20%). So über einen Kamm scheren würde ich das allerdings nicht, da es genügend Leute gibt, die gern mit neuen Dingen umgehen, aber weniger aktiv sind. Also die Erfahrungen nicht unbedingt weitervermitteln. Ob sie nicht wollen oder können, lasse ich mal außen vor. Da zähle ich mich u.a. auch dazu. Daher finde ich den Ansatz an sich in Ordnung und insbesondere für eine Diskussion bestens geeignet, wie auch die Kommentare bestätigen, allerdings geht mir diese Pauschalisierung zu weit. Trotzdem ein lesenwerter Artikel.
Scott hat einen sehr guten Artikel zum mitgelieferten MVC Framework geschrieben. Er beschreibt sein Vorgehen anhand einer eCommerce Anwendung und stellt die einzelnen Schritte einfach dar. Vor allem das URL Mapping finde ich sehr interessant. So werden Teile der Url direkt auf Klassen gemappt. Zum Beispiel Product/List/Books auf die Klasse List die dann alle Bücher darstellt. Also viel Spaß beim Lesen
 Eigentlich hatte ich mir die Sache recht einfach vorgestellt. Service erstellen, Setupprojekt hinzufügen und das Ganze dann installieren. Tja falsch gedacht, zumindest auf dem ersten Blick. Nach ziemlich langem Suchen fand ich diesen Artikel. Der entscheidende Punkt war auf diesen, doch recht unscheinbaren Link zu klicken, um einen einfachen benutzerdefinierten Installer hinzuzufügen. Wichtig war auch dem Installer das richtige Benutzerkonto zuzuordnen. Am Ende klappt es ganz wie gedacht, nur um einige Erfahrungen reicher...
Auf Basis der Klasse DataGridViewColumn ist es möglich eigene Spaltentypen zu erzeugen. So z.B. eine Textbox, die beim Editieren einen DateTimePicker anzeigt. Die msdn enthält dazu eine gute Anleitung inkl. Code bereit.
Immer wieder vergesse ich diese Tastenkombination (Ctrl + 0) um NULL Werte in die Datenbank einzutragen. In der 2005 er Version vom SQL Server klappt es auch, wenn man 'NULL' eingibt. Allerdings nicht beim SQL Server 2000. Also merken merken merken 
Regions können manuell angelegt werden, wobei ich das des Öfteren beim Entwickeln vergesse :-/. Danach ist dann der Ärger groß, wenn die Verschieberei los geht. Regionerate versucht hier Abhilfe zu schaffen. Als Ausgangsbasis dient dabei ein Template, welches eigene Konventionen erlaubt. Somit läßt es sich schnell und einfach anpassen. Das Bild rechts ist mit dem Standardtemplate entstanden. Also bisher macht es ein sehr guten Eindruck... Gelesen bei artiso
Welche Optionen Google alles anbietet, hat Jospeh einmal zusammengetragen. Sehr schön für eigene Skripte geeignet. Via Thomas
In der aktuellen Ausgabe vom MSDN Magazin ist ein sehr schöner Artikel der sich die Web Client Software Factory genauer ansieht. Ein Blick ist für jedes größere Projekt auf jeden Fall lohnenswert, da hier von Grund auf an viele Standards und Ordnerstrukturen gedacht wird, die sonst eher unter den Tisch fallen könnten.
Eine sehr gute Zusammenstellung von Richtlinien für eine erfolgreiche und vor allem effiziente Entwicklung hat Patrick zusammengestellt.
Der Name Castle Project flog mir schon einige Male ins Gesicht, blieb aber nicht hängen. Ist das nicht schön umschrieben? Jetzt bin ich wieder darauf gestoßen und habe ich mal ein wenig umgesehen auf der Seite. Insbesondere das ActiveRecord Tool scheint mir sehr interessant. Unter der Haube arbeitet es mit NHibernate zusammen. Nach außen hin werden aber keine Kenntnisse von NHibernate benötigt. Es kommt sogar noch besser. Als störend empfand ich immer die zusätzlichen hbm.xml Templates. Ähnlich wie bei Gentle.NET gibt es bei ActiveRecord die Möglichkeit diese Attribute direkt in der Businessklasse zu definieren. Hier ein Beispiel: [ActiveRecord]
public class Category : ActiveRecordBase
{
private int id;
private string name;
private Category parent;
private IList subcategories;
[PrimaryKey]
public int Id
{
get { return id; }
set { id = value; }
}
[Property]
public string Name
{
get { return name; }
set { name = value; }
}
[BelongsTo("parent_id")]
public Category Parent
{
get { return parent; }
set { parent = value; }
}
[HasMany(typeof(Category))]
public IList SubCategories
{
get { return subcategories; }
set { subcategories = value; }
}
public static Category[] FindAll()
{
return (Category[]) ActiveRecordBase.FindAll(typeof(Category));
}
}
Mal sehen wann ich die Tage etwas Zeit finde, mich damit ein wenig mehr zu beschäftigen.
Wer auf der Suche nach einer netten Unterhaltung für zwischendurch ist, findet hier http://www.doolwind.com/index.php?page=11 einen Test zur Persönlichkeit eines Entwicklers. Mein Ergebnis möchte ich natürlich nicht vorenthalten  Your programmer personality type is: PHSB You're a Planner. You may be slow, but you'll usually find the best solution. If something's worth doing, it's worth doing right. You like coding at a High level. The world is made up of objects and components, you should create your programs in the same way. You work best in a Solo situation. The best way to program is by yourself. There's no communication problems, you know every part of the code allowing you to write the best programs possible. You are a liBeral programmer. Programming is a complex task and you should use white space and comments as freely as possible to help simplify the task. We're not writing on paper anymore so we can take up as much room as we need. Via The Ado Guy
Bei der Installation von der LINQ CTP (May 2006) gibt es Schwierigkeiten, wenn sich ein nichtenglisches Visual Studio auf dem Rechner befindet. Lange Zeit habe ich deshalb einen Bogen um LINQ gemacht, weil die workarounds einfach zu umständlich erschienen. Doch irgendwann konnte ich mich dem doch nicht verwehren... In der msdn ist ein workaround dazu. Nicht Abschrecken von der zusätzlichen Installation von Visual Studio Express und dem Anlegen von englischen Benutzergruppen....
Auf www.devexpress.com steht eine neue Version von Refactor 2.2 ASP.NET zum freien Download zur Verfügung. Das Tool unterstützt zum Beispiel, das Auslagern von ASP.NET Code in ein UserControl oder verschiebt Inline Code in die Code Behind Klasse. Via Peter.
Webdienste mit Visual Studio zu erstellen, geht eigentlich recht einfach von der Hand. Möchte ich die SOAP Nachrichten, die zwischen Server und Client versendet werden, einsehen, weiß ich mir nicht so schnell zu helfen. Vielleicht gibts da ja was?? Das frei verfügbare SoapUI ist da ein Weg um genau diesem Problem auf recht einfache Weise Herr zu werden.
Um Text zu einem Graphicsobjekt hinzuzufügen, kann die DrawString Methode verwendet werden. Was aber tun, wenn dieser Text gedreht werden soll? Folgende Zeilen lösen das Problem sehr einfach: Graphics g = Graphics.FromImage(strip);
Font f = new Font("Arial", 8);
Pen p = new Pen(Color.FromArgb(150, Color.Black));
//drehen des gesamten Graphicsobjektes
g.RotateTransform(90);
g.DrawString("vertikaler Text", f, p.Brush, new PointF(10, 10);
//Zurücksetzen der Drehung, nicht vergessen!!
g.ResetTransform();
Was jetzt hier natürlich fehlt sind, evtl. notwendige Transformationen. Diese können mit g.TranslateTransform() vorgenommen werden, waren in meinem Fall aber nicht notwendig.
Greasemonkey ist einer meiner Lieblingserweiterung für Firefox. Es stellt die Basis für die verschiedensten Scripte zur Verfügung, wie z.B. den Google Autopager. Damit spart man sich das Blättern in den Suchergebnissen und scrollt einfach weiter runter. Das Script lädt automatisch die Seiten nach. Manchmal sind es die einfachen Dinge, welche die Arbeit erleichtern  Update: Hab doch fast den Link zur Quelle vergessen. Via LifeHacker
Sehr guter Artikel wie eine Sitemap mehrsprachig gehalten werden kann.
Hier dreht es sich rund um Programmierstandards. Sehr lesenswerte und vor allem empfehlenswerte Dokumente finden sich dort.
Auf devx.com gibt es eine kompakte Einführung zu Patterns im ASP.NET Umfeld. Via Lars
Soll die IP Adresse per netsh an der Kommandozeile oder per Batch Job geändert werden, funktioniert folgende Zeile:
Scott hat ein sehr guten Artikel zum Thema Url Rewriting veröffentlicht. Bei der nächsten Gelegenheit werde ich das doch gleich mal ausprobieren.
Holger Schwichtenberg hat in seinem aktuellen Artikel kein gutes Haar an AJAX gelassen. Er moniert hauptsächlich die vielen Fehler die noch in der aktuellen Version 1.0 zu finden sind. Hmm also dort wo ich AJAX eingesetzt habe, arbeitet es meistens ohne Probleme. Hin und wieder treten auch kleinere Darstellungsfehler auf, die sich aber durch ein Aktualisieren der Ansicht beheben lassen. Des Weiteren bin ich sowieso der Meinung, dass clientseitige Skripte eher sparsam eingesetzt werden sollten. Also keine zusätzlichen Spielereien, da dies nur den Browser zusätzlich belastet.
Bei http://www.sistrix.com/service/ gibt es einige nette Tools für die Webseitenoptimierung. Dieses Gebiet gehörte nicht umbedingt zu meinen Lieblingsthemen. Aber irgendwann muss ich mich damit ja auch mal beschäftigen.
Sehr gutes Video.... (und nette Musik dazu) Vor einigen Tagen habe ich es bei Andreas gelesen, bin aber erst jetzt dazu gekommen. Es hat sich gelohnt.
Wird im Plugin ein Namespace verwendet, sollte dieser auch mit auftauchen im Typnamen. Zunächst hatte ich diesen vergessen und wunderte mich warum CreateInstance ständig null zurückliefert. Assembly ass = Assembly.LoadFrom(file);
string typeName = "ExportExcelPlugin.ExportExcelPlugin";
IPlugin plugin = (IPlugin) ass.CreateInstance(typeName);
|