Donnerstag, 20. Dezember 2007

Umbraco - ein .NET OpenSource CMS

Umbraco? Noch nie gehört? Keine Angst, es handelt es sich dabei nicht um eine neue, hochansteckende Krankheit, sondern um ein auf Microsofts ASP.NET basierendes OpenSource CMS.
Das Potential, jemanden zu infizieren hat das System aber dennoch. Ich finde das System macht schon einen recht erwachsenen Eindruck und hat einiges auf der Pfanne. Allerdings muss man das System zunächst schon verstehen um zu ersten Erfolgserlebnissen zu kommen.
Das System verfügt natürlich über ein ausgeklügeltes Templatesystem, das den Masterpages in ASP.NET ähnelt.
Über Templats und Dokumententypen können die Eigenschaften einer Seite definiert werden, das Anlegen und Pflegen einer entsprechenden Seite ist danach sehr einfach.
Aber wie gesagt, den Durchblick der Zusammenhänge was die Dokumententypen und Templates angeht muss man erst mal haben, dann ist allerdings schon sehr viel geschafft und es wird klar wie das System tickt.
Im Prinzip kann man sich beliebig viele eigene Datentypen und auch Dokumententypen anlegen (zu den standarmäßig vorhadenen) womit eine maximale Flexibilität gegeben ist. Eigentlich kann man sagen, dass eine Dokumententyp aus einem oder mehreren Datentyen besteht, womit man sich beliebige Dokumententypen erzeugen kann (das könnte dann zum Beispiel ein Newsbeitrag mit Headline, Teaser, Text und ein Bild sein). Über ein News-Template könnten dann die entsprechenden Daten angezigt werden.

Damit aber nicht genug: Über ein Macro-System ist es möglich weitere Funktionalitäten (z.B. Listen) zu integrieren. Derzeit können diese Macros mit XML-Stylesheets (XSLT), .NET Usercontrols, .NET Customconmtrols (z.B. aus Assemblies) oder per Python umgesetzt werden; womit eigentlich keine Wünsche mehr offen bleiben
dürften.

Mein vorl. Fazit:
Auch wenn ich selbst erst vor Kurzem mal einen Blick auf Umbraco geworfen habe, bin doch positiv überrascht und von der Vielfalt der Möglichkeiten angetan. Dennoch schätze ich, dass wenn eine ernsthafte und tiefergehende Verwendung angestrebt werden sollte, doch einiges an Einarbeitungszeit nötig sein wird um in der Lage zu sein, komplexere Anwendungen umsetzen zu können.
Aber Trotzdem:
Wer ein cooles (freies) CMS auf .NET-Basis sucht, sollte sich Umbraco auf jeden Fall mal etwas näher anschauen. Das System kann unter Umbraco.org runtergeladen werden.

Anbei ein paar Screenshot des Adminbereiches



Mittwoch, 19. Dezember 2007

Subsonic - ein kleiner Erfahrungsbericht (Teil 1)

Seit gut einem halben Jahr verwende ich nun hin und wieder SubSonic. Darauf gekommen bin ich eigentlich mehr durch Zufall über das PayPal-Starterkit (inzwischen dashCommerce), welches mit Hilfe von SubSonic umgesetzt wurde.
Inzwischen habe ich SubSonic "lieb gewonnen ;-)" und möchte in kuzer Form meinen Eindruck vermitteln.

Mich überzeugt vor allem die einfache Verwendung und Einbindung von Subsonic in Projekten.
Nach nur wenigen Handgriffen (Subsonic-DLL referenzieren, web.config anpassen) und schon kann SubSonic verwendet werden.
Interessant ist auch, das Subsonic inzwischen auch in Winforms-Anwendungen verwendet werden kann. Meine Erfahrungen mit Subsonic beschränken sich bisher allerdings auf
die Verwendung mit ASP.NET.

Es gibt zwei wesentliche Methoden Subsonic zu verwenden.

a) Codegenerierung durch Subsonic
b) Zugriff auf die Datenquelle über die Subsonic-Querytool

Mit Hilfe der Codegenerierung erzeugt Subsonic den Quellcode für die Datenzugriffsschicht.
Über die web.config kann dabei festgelegt werden auf welche Art und Weise der Quellcode generiert werden soll.
Das bedeutet, dass man z.B. definieren kann, welchem Namespace die erzeugten Klassen zugeordnet werden sollen.
Auch kann festgelegt werden, ob abhängige Tabellen als Properties generiert werden sollen, ob für Stores Procedures ebenfalls Code erzeugt werden soll und und und ...
Prinzipiell wird für eine Tabelle eine Klasse erzeugt, die alle Spalten als Eigenschaften implementiert, und natürlich auch Methoden zur Bearbeitung der Daten bietet (Speichern, Hinzufügen löschen ...)
Zudem wird eine Controller-Klasse erzeugt, die verschiedene Methoden bietet, über die Datensätze in Form einer typisierten Collection zurückgegeben werden können.
Die Methode FetchAll() z.B. gibt eine Collection aller Datensätze der betreffenden Tabelle zurück.
Der generierte Code kann natürlich über ein Templatesystem beeinflusst werden.

Die Code-Erzeugung kann dabei über ein Webinterface der Beispielanwendung (wird weiter unten noch erwähnt), die Sonic.exe bzw. direkt aus VisualStudio erfolgen.

Prinzipiell folgt Subsonic dem Designpattern "ActiveRecord", d.h. pro Tabelle eine Klasse, pro Datensatz ein Objekt.

Neben der Codegenerierung bietet Subsonic mit dem Querytool die Möglichkeit durchaus auch komplexe Abfragen ohne das Schreiben von SQL-Befehlen zur Laufzeit auszuführen.
Intern verwendet SubSonic das SQlCommand-Objekt. Somit ist das Tool auch gegen böse Absichten per SQL-Injection gewappnet.

Ein weiteres, nettes Feature sind die Webtools und ASP.NET-Cntrols die mit Subsonic zur Verfügung stehen.
Die Beispiel-Webanwendung verfügt z.B. über einen Codegerator, der über ein Webinterface bedient werden kann. Dabei kann festgelegt werden, für welche Tabellen die Zugriffsklassen
erzeuigt werden sollen und in welchem lokalen Verzeichnis die erzeugten Klassen gespeichert werden sollen. Es ist dabei auch möglich auszuwählen, ob für die Stored Procedures ebenfalls
Code generiert werden soll. Dazu bieted die Beispielanwendung auch ein Interface, über das alle Daten aller Tabellen (sofern sie die Voraussetzungen erfüllen - z.B. über einen Primary Key verfügen)
angezeigt und auch bearbeitet werden können. Diese Seite verwendet dabei das in Subsonic enthaltene ASP.NET-Cntrol "Scaffold".

Derzeit gibt es folgende Controls, die einfach über die Referenzierung der Subsonic.dll verwebdet werden können:

  • Scaffold

  • QuickTable

  • ManyManyList

  • DropDown

  • RadioButtons


Mit dem Scaffold-Control können alle Daten einer Tabelle schnell und editierbar in einem Gridview dargestellt werden. Im Editiermodus werden dabei verknüpfte LookUp-tabellen berücksichtigt und die möglichen
Auswahlwerte in einer DropDownListe dargestellt.

Damit aber noch nicht genug. Subsonic kann ins VisualStudio integriert werden. Damit lässt sich per Knofdruck der Code generieren, das Datenbankschema und auch ein Sql-Script über das die vorhanden Daten (z.B. Standardwerte)
importiert werden können.

Mein persönliches Fazit:
Daumen hoch! Ich finde das Tool sehr gelungen und insbesondere in kleineren Projekten sehr sehr hilfreich und zeitsparend. Vor allem die einfache Integration und Verwendung
überzeugt meiner Meinung nach. Ein wenig Erfahrung mit .NET vorausgesetzt und man kann ohne große Einarbeitung und Hürden mit Subsonic produktiv werden. Die vom Codegenerator
erzeugten Klassen sind ebenfalls einfach aufgebaut und lassen sich intuitiv verwenden. Ich bin gespannt, was zukünftige Versionen noch mit sich bringen.

Demnächst möchte ich auf meinem Blog noch etwas detailierter auf Subsonic eingehen - mit Codebeispielen etc. // to be continued

Hier findet Ihr alles weitere zuum Thema SubSonic

Mittwoch, 12. Dezember 2007

Microsoft Live Labs - Volta

"The Volta technology preview is a developer toolset that enables you to build multi-tier web applications by applying familiar techniques and patterns. First, design and build your application as a .NET client application, then assign the portions of the application to run on the server and the client tiers late in the development process. The compiler creates cross-browser JavaScript for the client tier, web services for the server tier, and communication, serialization, synchronization, security, and other boilerplate code to tie the tiers together."
Quelle: http://labs.live.com/volta/

Mit der Veröffentlichung von"Live Labs mit dem Volta Technology Preview" stellt Microsoft ein Toolset zur Verfügung, mit dem mehrschichtige Webanwednungen mit vertrauten Werkzeugen und Techniken erstellt werden können.
Mit dem integrierten End-to-end-Profiling-Mechanismus Rotunda können Entwickler die gesamte Performance ihrer Applikation überblicken und Engpässe aufdecken.

Mehr über Volta ...

Ich hab mir das Teil mal runtergeladen und ausprobiert. Ich muss sagen meine Begeisterung hält sich zunächst noch in Grenzen. Irgendwie war die Anwendung schwerfällig und träge (ich möchte aber nicht ausschließen, dass das an meiner VS 2008 Beta-Installation gelegen hat).
Allerdings brachten drei der Beipielprojekte meine(n) Browser zum Absturz bzw. benötigten eine eeeeeeewiiiiiigeeeee Ladezeit um dann nicht flüssig laufen zu wollen.
Aber ich will nicht meckern, ist ja bis jetzt nur ein "Technology Preview", und tut dem interessanten Ansatz keinen Abbruch.

Ready for take off - Microsoft Produktvorstellung

Der Countdown läuft – bis zur Produkteinführung von Microsoft Windows Server 2008, SQL Server 2008, Visual Studio 2008 und der Deutschen SharePoint Konferenz 2008.

Vom 19. – 21. Februar 2008 in Frankfurt am Main

Melden Sie sich an und erleben Sie mit einem Ticket zwei hochkarätige Veranstaltungen, auf denen Sie nicht nur die neuesten Microsoft-Produkte kennenlernen, sondern in dessen Eintrittspreis auch hochwertige Softwareprodukte* enthalten sind.

Mehr ...

Montag, 3. Dezember 2007

Visual Studio 2008 (Beta 2) deinstallieren

Wie man Visual Studio 8 (Beta 2) rückstandslos von seinem System deintstalliert, erklärt Scott Guthrie auf seinem Blog in seiner Schritt-für-Schritt-Anleitung (" Steps to Uninstall VS 2008 Beta2 before installing the VS 2008 Final Release").
Die Beta-Version sollte vor der Installation der Release-Version deinstalliert werden.

zur Anleitung ...

Samstag, 1. Dezember 2007

Strato Windows-Server - ein Update

Über ein halbes Jahr ist inzwischen vergangen, seit dem ich einen Windows Server bei Strato in Betrieb genommen habe. Nun möchte ich meine durchweg positiven Erfahrungen am Anfang ergänzen.

Der Server läuft einwandfrei und war noch kein einziges mal down oder nicht erreichbar (zumindest habe ich keinen Ausfall mitbekommen).
Die Performance und Erreichbarkeit lässt keine Wünsche offen.
Den Support habe ich einmal in Anspruch genommen, als ich den Server einmal nichterreichen konnte (was aber an unserer Firmen-Firewall lag, wie sich später herausstellte).
Ich hatte sofort einen kompetenten Ansprechpartner am Telefon, der auch das nötige Fachwissen hatte um weiterhelfen zu können.
Insgesamt bin ich also auch jetzt noch positiv von den Leistungen Stratos angetan.
Einzig die Web-Verwaltungs-Oberfläche kommt ein wenig "angestaubt" daher, nichtsdestotrotz lassen sich natürlich alle nötigen Aufgaben durchführen.
Leichte Kritik kann ich somit eigentlich nur an der Onlinehilfe und den FAQ anbringen. Die Menuführung ist meiner Meinung nach etwas unübersichtlich, und bestimmte Anleitungen und Hilfen habe ich nur nach einer Recherche über Google bekommen.

FAZIT:
Nach wie vor kann ich jedem mit ruhigem Gewissen einen Windowsserver bei Strato empfehlen. Das Preis-Leitungsverhältnis ist meiner (subjektiven) Meinung nach absolut super.

Dienstag, 27. November 2007

Onlinebwerbungen

Hallo zusammen,

ich habe heute einen Beitrag in der Internet-World zum Thema Online-Bewerbungen gelesen. Ich fand die Sache sehr interessant. Da ging es darum, wie Unternehmen mit den Bewerbungen umgehen, die online eingehen, sei es über eigens programmierte Verfahren oder einfach per E-Mail.
Ich fand den Artikel sehr aufschlussreich, und das Fazit, welches ich aus dem Artikel herauslese: Bewerbt euch altmodisch mit einer sorgfältig erstellenten "analogen" Bewerbungsmappe!!
In dem Artikel wurde ein Fall beschrieben, bei dem eine Bewerberin den vorgesehenen Online-Bewerbungs-Wizard durchlaufen hat, und ihr versichert wurde, dass die Bewerbung sorgfältig und individuell geprüft werden würde. Nur 60 Sekunden nach dem Absenden der Online-Bewerbung erhielt die Bewerberin eine Absage per E-Mail, in der geschrieben stand, dass sie nach eingehender und gründlicher Prüfung für die ausgeschriebene Stelle nicht in Frage käme ....
Nachdem die Bewerberin telefonisch der Sache nachging und dann klar war, dass sie mit ihrem Profil zu 100% dem Angebot entspricht, bekam sie doch noch ihr persönliches Gespräch.
Scheinbar ist eine altmodische Bewerbung doch noch wirksamer und erfolgreicher als der "moderne" Weg über das Internet.
Ist schon interessant, man kann sich als Bewerber nie sicher sein, ob ein einfacher Tippfehler das Aus für die Bewerbung bedeuten könnte. Die Unternehmen, die aber einen Mitarbeiter suchen (und ich gehe mal davon aus, dass ein fähiger Mitarbeiter gesucht wird), die Auswahl einer wie oben beschriebenen (scheinbar zweitklassigen) Programmroutine die Vorauswahl überlassen würden (zumindest für diejenigen, die den Service einer Onlinebewerbung nutzen - was in bestimmten Berufssparten ja vielleicht durchaus Sinn macht).
Sieht ganz so aus als wäre die klassische Bewerbung doch noch die Sinnvollste (Ausnahmen mögen natürlich die Regel bestätigen)

Freitag, 23. November 2007

Visual Studio 2008 - die Finale Version ist da!!

Früher als geplant ist die finale Version von Visual Studio da! Ab zum Download ..

Mittwoch, 7. November 2007

.NET BlogBook - Ausgabe 4

Das .NET BlogBook ist als offline Nachschlagewerk für jeden .NET Entwickler gedacht. Es finden sich darin gesammelt viele hilfreiche Tipps und Tricks, als auch Diskussionen zu allgemeinen Designthemen. Aktuell sind ausgesuchte und überarbeitete Einträge von Kai Gloth und Norbert Eder enthalten.

Die Ausgabe enthält auf 280 Seiten umfangreiche Informationen zu den Themen Basis Framework, Windows Forms, ASP.NET, Services, Windows Presentation Foundation, Windows Communication Foundation, LINQ, C# 3.0 und vielem mehr bereit.

zum Download ...

Dienstag, 18. September 2007

Probleme mit VerifyRenderingInServerForm

Wer in Zeiten von Web 2.0 und AJAX (andere Gründe solls natürlich auch geben ;-)) schon mal den HTML-Code eines GridViews mit der Methode RenderControl() erzeugen wollte, ist villeicht schon mal über die Fehlermeldung

Das Steuerelement vom Typ GridView muss in einem Formulartag mit runat=server positioniert werden.



gestolpert.
Das Problem kann auf einfache Art und Weise (wenn auch unverständlich) mit dem Überschreiben der Methode VerifyRenderingInServerForm() behoben werden.
Dazu muss einfach diese Methode überschrieben werden, ohne dass sie etwas tut.

public override void VerifyRenderingInServerForm(Control control)
{
}


Siehe da, die Fehlermeldung ist weg. Wer genauer wissen möchte was die Methode normalerweise macht kann bei Microsoft nachlesen.
Für mich fällt dieses Vorgehen unter die Rubrik "Kopf schütteln, verwenden und nicht weiter damit belasten ;-)"

Montag, 17. September 2007

GridView-Spalten dynamisch anzeigen

Manchmal kommt man in die Verlegenheit, über ein GridView Spalten dynamisch anzuzeigen, z.B. wenn man mit einem GridView verschiedene Tabellen darstellen möchte; aber ohne die AutoGenerateColumns-Eigenschaft.
Das Vorgehen ist recht einfach:

BoundField dynField = new BoundField();
dynField.DataField = "SpaltenName";
dynField.HeaderText = "Überschrift im GridView";
GridviewControl.Columns.Add(dynField);

Freitag, 7. September 2007

Verschiedene DLL-Versionen in einem Workflow verwenden

Die Windows Workflow Foundation hat einiges zu bieten! In vielen Fällen wird es bei der Verwendung von Workflows zu längeren "Laufzeiten" kommen. D.h. zwischen den verschiedenen Schritten kann es natürlich durchaus vorkommen, dass mal Tage Wochen oder noch mehr Zeit vergeht. Während dieser "inaktiven" Zeit wird der Workflow zwischengespeichert (z.B. auf einem SQL-Server). Damit kann auch ein Serverreboot oder Ähnliches die Wiederaufnahme des Workflows nicht verhindern.
Bei der Speicherung des Workflows wird ein komplettes Abbild des aktuellen Zustandes gespeichert. Das bedeutet, dass alle Einstellungen etc. weggespeichert werden, somit auch die Zustände eigener Klassen (z.B. der Wert einer Property o.ä).
Was ist aber wenn sich während der Zeit eines ruhenden Workflows eine neue Version der eigenen Klassen und deren DLL auf den Server gespielt wird (z.B. bei einem Workflow in einer ASP.NET-Anwendung), und diese Version neue, erforderliche Properties verwendet oder noch schlimmer - alte nicht mehr vorhanden sind? Bei Wiederaufnahme des Workflows würde eine derartige Änderung ev. in einer Exception enden und das Programm/Workflow könnte nicht zu Ende geführt werden.
Dafür gibt es eine einfache Lösung: man verwendet den GAC anstatt dem bin-Verzeichnis der Web-Anwendung, da im GAC veschiedenen Versionen einer DLL abgelegt werden können. Alte Worklfows könnten damit auf die "alte Art und Weise" beendet werden, neue könnten die neue Version verwenden.

Mittwoch, 18. Juli 2007

Microsoft Surface - das finde ich COOL


Schon die ersten "Virtual Reality"-Lösungen haben mich in den Bann gezogen. Daher bin ich schon immer für neuartigen Methoden ein "Programm" zu bedienen offen.
Eine dieser "Neuen Methoden" stellt Microsoft Surface dar!
6 Jahre Entwicklungszeit steckt inzwischen in dem neuen Userinterface drin, darum verwundert es natürlich auch nicht, dass dabei deutlich mehr als ein einfacher "Touchscreen" dahinter steckt.
Als ich den Film "Minority Report" sah, dachte ich noch: "Cool, wenn so die Zukunft aussieht, was die Bedieung eines Computers betrifft."
Microsoft Surface scheint den User dieser Zukunft ein Stück näher zu bringen.

Aber lassen wir Bilder für sich sprechen:


Besonders interessant finde ich die Möglichkeit, der Interaktion mit beliebigen Objekten wie z.B. dem Pinsel etc.

Wer mehr erahren will, bitte: http://www.microsoft.com/surface/

ENDLICH: Visual Studio 2008, SQL Server 2008 und Windows Server 2008

Auf der Worldwide Partner Conference in Denver hat Microsoft den Launch von Visual Studio 2008, SQL Server 2008 und Windows Server 2008 für Februar 2008 angekündigt.
Der offizielle Launch soll am 27. Februar in Los Angeles stattfinden.
Na, da bin ich ja mal gespannt ob es dabei bleibt ;-)

3. Ausgabe des .NET BlogBook draußen

Bei dem .NET BlogBook handelt es sich um eine Sammlung überarbeiteter Blogeinträge, die Informationen verständlich rüber bringen sollen. Zudem sollen sie als Offline-Nachschlagewerk benutzt werden können.
Anschauliche Sourcecode-Beispiele bringen Lösungsansätze für z.B. ASP.NET, dem Basis-Framework oder auch der Windows Presentation Foundation auf den Tisch.
Die dritte Ausgabe stellt eine komplette Überarbeitung der vergangenen beiden Ausgaben dar, in komplett neuen Design. Die neue Ausgabe ist kostenlos zu haben.

Montag, 16. Juli 2007

Deutschsprachige Community zum Thema Silverlight

Microsofts Silverlight ist derzeit in aller Munde und wird von Microsoft derzeit extrem gepusht. Inzwischen haben sich bereits viele Foren zum Thema Silverlight gebildet. Es sind komplett neu Foren entstanden, aber natürlich findet man auch auf den einschlägigen Communities bereits viel zum Thema.
Eine deutschsprachige Community, die sich ausschließlich mit dem Thema Silverlight beschäftigen möchte findet Ihr unter www.silverlightcorner.de . Hier stehen zahlreiche Foren zum Thema Silverlight bereit und laden zur regen Diskussion und Meinungsaustausch ein. Wer möchte kann auf Anfrage einen eigenen Blog auf silverlightcorner.de betreiben. Neben dem Forum findet Ihr dort auch einen Downloadbereich, Fotots/Grafiken und Blogs.
Wäre schön wenn Du zur "Geburt" der neuen Community beitragen würdest.

Freitag, 13. Juli 2007

Fahrrad Community mit Blog, Forum und Fotogallerie

Mal was anderes als .NET, PRogrammierung und CO.
Auf community.fahrradinfo.net gibt es einen neue Community zum Thema Fahrrad. Jeder Benutzer, der sich registriert erhält einen Blog in dem er z.B. seine Fahrradtouren, Reiseberichte oder sonstige Beiträge zum Thema Fahrrad, Radsport und Bike anlegen kann.
Zudem hat jeder Benutzer seine eigen Fotogallerie, in der man ebenfalls seinen eigenen Bilder von Fahrräder, Fahrradtouren etc. einstellen kann. Ein Forum läd zudem zum Diskutieren und Meinungsaustausch ein.

Nichts wie hin zur Fahrradcommunity ...

Dienstag, 10. Juli 2007

Communityserver Hauptnavigation bearbeiten bzw. erweitern

In meiner kleinen Rubrik "Communityserver" will ich ein paar kleine Hinweise und einfache Kniffe, die den Communityserver betreffen, geben.
Nach der Installation des Communityservers sind in der Haupt-Navigation immer die gleichen Menupunkte zu sehen (je nach Freigabe im Administrationsinterface).
Wenn alle Funktionen aktiviert sind, hat man die Punkte "Home", "Blog", "Forum", "Fotos" und "Download".

Beim ersten Mal habe ich auch ein wenig suchen müssen, um herauszufinden wo diese Punkte geändert bzw. erweitert werden können.

Man braucht dazu nur die SiteUrls.config zu bearbeiten. Ganz am Ende der originalen Datei findet man die Section "navigation". Hier kann man die vorhandenen Einträge ändern oder eigene hinzufügen.

Mit verschiedenen Eigenschaften können die Einträge beeinflusst werden:

name:
eindeutige Bezeichnung des Links
resourceUrl:
ordnet den Link einem vorhandenem Link in der SiteUrls zu
resourceName:
ordnet den Linktext der Sprachen-Datei zu
roles:
legt fest welche Benutzer den Link sehen können
(Beispiel: roles="ForumsAdministrator,Moderator" )

navigateUrl:
Zieladresse des Links

Ein einfaches Beispiel für einen eigenen Link:
<link name="meinLink" navigateUrl="http://wohinauchimmer.de" text="Mein Linktext" />

Ihr seht, das ganze ist nichts besonders anspruchsvoll, dennoch muss man zunächst wissen wo man hinfassen muss, um die Hauptnavigation zu verändern, ohne z.B. in den .master-Dateien rumwerkeln zu müssen.

Montag, 9. Juli 2007

Schnelle und einfache Installation eines Windows Service

Nicht oft, aber hin und wieder kommt es vor das ich einen kleinen Windows-Service programmieren muss. Das ist nicht mein täglich Brot, es macht aber Spaß zwischendurch mal was anderes zu machen.
Da es nicht möglich ist einen Service einfach mal soeben z.B. durch Doppelklick zu starten, muss der Service auf dem System installiert werden.
Ich möchte hier kurz eine einfache Möglichkeit beschreiben wie das mit einem "Applikationsinstaller" erreicht werden kann.

Mit Visual Studio ist das ganze einfach und schnell zu realisieren. Ich verwende dazu eine eigene Klasse, die dem WindowsService hinzugefügt wird.


[RunInstaller( true )]
public class demoWindowsInstaller : Installer
{
private ServiceInstaller _tService;
private ServiceProcessInstaller _tServiceProcess;

public demoWindowsInstaller()
{
_tService = new ServiceInstaller();
_terviceProcess = new ServiceProcessInstaller();

_tServiceProcess.Account = ServiceAccount.NetworkService;
_tService.ServiceName = "DemoService";


_tService.StartType = ServiceStartMode.Manual;

Installers.AddRange(new Installer[] { _tServiceProcess, _tService });

}
}


Am Ende sollte der fertige Windows-Service als EXE vorhanden sein. Da es sich dabei ja um einen Windows-Service handelt, kann die EXE eben nicht einfach durch Doppelklick ausgeführt werden, sondern muss installiert werden.
Das kann man einfach durch das Tool "installutil" erreichen, indem man das Tool mit der Befehlszeile

"installutil.exe DemoService.exe" ausführt.

Wenn alles geklappt hat, sollte der Service nun auf dem System installiert sein.
Je nachdem was man als StartTyp in der InstallKlasse angegeben hat muss man den Service nun noch Starten.
Deinstallieren kann man den Service auf einefache Weise mit dem Befehl

"installutil.exe /u DemoService.exe"

Das Tool installutil.exe liegt im .NET Verzeichnis der .NET-Installation.
Um den Windows-Service-Installer erstellen zu können, wird der Namespace "System.Configuration.Install" benötigt.

Freitag, 22. Juni 2007

ASP Konferenz in Burghausen

Vom 18. bis 19. Juni fand in diesem Jahr wieder die ASP Konferenz der ppedv AG in Burghausen statt.

Wie in jedem Jahr wurde wieder die neuesten Techniken rund um .NET und ASP.NET in parallel laufenden Sessions vorgestellt.

Besonders interessant (aus meiner Sicht) waren dabei die Sessions zu den Themen Silverlight, IIS 7 und Workflow.


Silverlight:
Das Thema Silverlight wird derzeit enorm gepusht und man darf gespannt sein wie es hier weitergeht. Wenn es Microsoft schafft hier stabile Release-Versionen auf den Markt zu bringen, darf man sich in Zukunft sicher auf eine schnelle Verbreitung der Technologie freuen. Zumal auch Microsoft-Kritische Designer sich durchaus aufgeschlossen für die neue Technologie zeigen. Wenn es soweit ist, wird die Verbereitung des Browser-Plugins sicher mit einem Windowsupdate "etwas" beschleunigt ;-)

IIS 7
Vom neuen WebServer aus dem Hause Microsoft bin ich persönlich wirklich begeistert.
Konfigurierbar bis ins letzte Detail und absolut einfach anzuprogrammieren und zu erweitern. Im Normalfall sollte der neue Webserver (IIS 7) auch den letzten Kritiker (ein wenig Subjektivität vorausgesetzt) zu einer positiven Meinung bewegen.
Insbesondere das neue FastCGI Module wird z.B- PHP Entwickler in Staunen versetzen. Damit laufen PHP-Anwendungen auf dem IIS 7 bis zu 25 mal schneller als mit dem alten CGI-Modul des IIS. (mehr hier ...).
Mit dem neuen FastCGI-Modul wird sich vermutlich auch der Apache-Server in Sachen Performance warm anziehen müssen ...

Kleine Randnotiz:
Auch der neue FTP-Server wird in Zukunft auch die Bezeichnung FTP-Server verdienen: Angefangen mit SSL-unterstützung und und und ...
Leider wird es den neuen Server wohl nur für den neuen Windowsserver Longhorn (in Zukunft wahrscheinlich Windowsserver 2008) geben und nicht als nachistallierbares Paket für ältere Serverversionen :-(

Workflow
Zum Thema Workflow zeigte Hardy Erlinger eine kleine Webanwendung die einen einfachen Workflow verwendet.
In einer Webanwendung einen Workflow zu integrieren wird nicht immer Sinn machen und verlangt auch ein wenig Verständnis der Funktionsweise der Workflow Foundation.
Durch die Speicherung der Workflowstates, können aber auch fr Webanwendungen Zustaände über lange Zeiträume gesoeichert werden und jederzeit wieder "aktiviert" werden. Allein dieser Aspekt wird die Verwendung (z.B. in Shoplösungen ...) von Workflows auch in Webanwendungen interessant machen.

Insgesamt war die Konferenz wieder eine runde Sache, bei der auch die Rahmenbedingungen wieder bestens waren. Neben einem reichhaltigen Angeot von Getränken und Verpflegung, war auch die Abendveranstaltung bei schönem Wetter bestens.

Anbei noch ein paar Bilder, die durch das ppedv-Taem während der Veranstaltung gemacht wurden.







Freitag, 1. Juni 2007

CommunityServer - Content Mirroring

Sollte jemand Probleme mit der Veröffentlichung externer RSS-Feeds auf dem CommunityServer haben, so kann dies am Trustlevel liegen.
Dieses Problem hatte ich jedenfalls. Nach dem Durchforsten des CommunityServer-Forums habe ich gesehen, dass ich nicht der Einzige mit dem Problem bin/war und es verschiedene Ursachen gibt warum die Feeds nicht in den Blogs angezeigt werden.

Bei mir lag es am Trust-Level. Den Einträgen im Forum nach zu urteilen ist dies aber das häufigste Problem.

Mehr dazu kannst du im CommunityServer-Forum nachlesen.
Forum zum Thema Content Mirroring
Thread zum Trustlevel

Vielleicht hilfts ja dem ein oder anderen ...

Mittwoch, 16. Mai 2007

UPDATE Trigger - schon mal reingefallen?

Vielleicht ist der ein oder andere schon mal darauf reingefallen:

Nach einem Update auf einen Datensatz einer Tabelle soll ein Update-Trigger, z.B. den PrimaryKey des aktualisierten Datensatzes verwendet um weitere Prozesse anzustoßen.
So sieht der Code dazu z.B. zunächst mal so aus:



CREATE TRIGGER [TRIGGER NAME] ON [dbo].[myTableName]
FOR INSERT, UPDATE, DELETE
AS
[dein Code ...]


Man kann nun im Codebereich eigene Variablen definieren und Werte des aktuell betroffenen Datensatzes weiterverarbeiten

Beispiel für einen hinzugefügten Datensatz


CREATE TRIGGER [TRIGGER NAME_Insert] ON [dbo].[myTableName]
FOR INSERT
AS
DECLARE @myInsertId int
SELECT @myInsertId=myTableId FROM INSERTED
[weitere Verarbeitung ...]

Damit kann deraktuell eingefügte Wert der Spalte myTableId weiter verarbeitet werden.

Das funktioniert natürlich auch beim Aktualisieren eines Datensatzes mit UPDATE.
Wer nun aber versucht mit folgendem Code zum Ziel zu kommen, wird bitter enttäuscht werden:



CREATE TRIGGER [TRIGGER_NAME_Insert] ON [dbo].[myTableName]
FOR UPDATE
AS
DECLARE @myInsertId int
SELECT @myInsertId=myTableId FROM UPDATED
[weitere Verarbeitung ...]


Der Teufel liegt hier im Detail. Die Codezeile

SELECT @myInsertId=myTableId FROM UPDATED

wird leider nicht den gewünschten Effekt haben und den Wert des aktualisierten Datensatzes für die Spalte myTableId liefern. Das liegt daran, dass der SQLServer ein Update auf einen Datensatz intern mit einem Delete und Insert abhandelt.
Der folgende Code sollte somit das Problem lösen:



CREATE TRIGGER [TRIGGER_NAME_Update] ON [dbo].[myTableName]
FOR UPDATE
AS
DECLARE @myInsertId int
SELECT @myInsertId=myTableId FROM INSERTED
[weitere Verarbeitung ...]


Damit kann man auch schön den alten und den neuen Wert einer Aktualisierung verarbeiten:


CREATE TRIGGER [TRIGGER_NAME_Update] ON [dbo].[myTableName]
FOR UPDATE
AS
DECLARE @myEmail_old varchar(150)
DECLARE @myEmail_new varchar(150)

SELECT @myEmail_old=myEmail FROM DELETED
SELECT @myEmail_new=myEmail FROM INSERTED

[weitere Verarbeitung ...]


Vielleicht hilfts ja dem ein oder anderen ;-)

Da wär noch was:
Thomas Glörfeld hat mich in seinem Blog darauf hingwiesen, dass man bei der Verwendung immer darauf achten sollte, dass bei einem Update meist möglichst viele betroffene Datensätze mit einem Statement zu aktualisieren, das o.a. Beispiel aber davon ausgeht dass eben nur ein Datensatz oder nur wenige davon betroffen sind - also für einen umfangreichen Update ungeeignet ist. Leider ist dort mein Beispiel etwas aus dem Zusammenhang gerissen.
Als "altgedienter" ;-) Programmierer verwende ich natürlich ebenfalls ein SQL-Statement zur Aktualisierung mehrer Datensätze (sofern möglich) und nicht einzelne SQL-Befehle die über eine Schleife o.ä. ausgeführt werden. Mein Beispiel sollte nur die Problematik mit dem Update-Trigger veranschaulichen.
Aber natürlich schließe ich mich Thomas' Empfehlung "Im Trigger selber bitte immer die Verarbeitung von mehreren Datensätzen vorsehen." gerne an!

Dienstag, 8. Mai 2007

Konvertieren von Zeichenfolgen in Format mit großen Anfangsbuchstaben

Manchmal kommt man in die Lage Zeichenfolgen, die ausschließlich klein geschrieben wurden (Gruß an alle E-Mail-Kleinschreiber ;-)), so zu konvertieren, dass die Anfangsbuchstaben der Wörter mit einem Großbuchstaben beginnen.
Das kann ganz einfach mit der Methode ToTitleCase() der Klasse TextInfo bewerkstelligt werden.
Um die Klasse TextInfo verwenden zu können, benötigt man ein Objekt der Klasse CultureInfo. Dazu kann fast immer die voreingestellte Culture verwendet werden, die man über den aktuellen Thread abrufen kann.


string beispielString = "mein blog";
CultureInfo ci = Thread.CurrentThread.CurrentCulture;
TextInfo ti = ci.TextInfo;
beispielString = ti.ToTitleCase(beispielString);


Das Beispiel konvertiert den String "beispielString" in das Ergebnis "Mein Blog".

Montag, 30. April 2007

Webseiten mit Root-Pfad testen

Manchmal ist nötig seine Web-Anwendung direkt im Root zu testen und/oder ohne Portinformation, zum Beispiel um eine Produktivumgebung zu simulieren. In Visualstudio kann man das ohne großen Aufwand bewerkstelligen.
Man kann sich über die externen Tools unter Extras einfach eine Webserver-Konfiguration, passend zum gerade aktuellen (Web-)Projekt, anlegen:



Befehl: (Beispiel)
c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\WebDev.WebServer.EXE
Argumente:
/port /path:$(ProjectDir)

Die CheckBox "Ausgabefendster verwenden" nicht vergessen zu markieren!

Um auf einfache Art diesen Webserver mit seinem aktuellen (Web-)Projekt zu verwenden, muss noch eine Einstellung bei dem (Web-)Projekt selbst vorgenommen werden.
Dazu einfach bei den ProjektEigenschaften (rechte Maustaste - Eigenschaftsseiten) unter dem Punkt Startoptionen die Option Start-Url aktivieren und als URL http://localhost sowie bei "Benutzerdefinierten Server verwenden - Basis Url:" ebenfalls http://localhost angeben.




Achtung:
Damit diese Lösung funktioniert, muss ein ev. vorhandener lokaler Webserver, der ebenfalls auf Port 80 und localhost hört deaktiviert werden, oder eben dem Argument (wie oben) /port noch den zu verwendenden Port mitteilen (Beispiel: /port:888)

Donnerstag, 26. April 2007

Strato Windows-Server

Seit einiger Zeit betreibe ich einen eigenen Windows-Server bei Strato. Ich möchte hier kurz meine Erfahrungen mit dem Windows Server bei Strato zum Besten geben - auch weil ich sebst keine vernünftigen Meinungen oder einen entesprechenden Strato Test zu diesem Thema gefunden habe. Deshalb nun hier mein persönlicher "Strato Test":

Die Bestellung:
Die Bestellung des Strato-Servers war unkompliziert und einfach. Nach dem Ausfüllen des Online-Formulars habe ich eine SMS bekommen, in der ein Code zur Bestätigung des Auftrags enthalten war. Nach Eingabe des Codes in einem weiteren Online-Formular war die Bestellung des Strato Windows Servers abgeschlossen.
Kurze Zeit später hatte ich die Bestätigung sowie die Zugangsdaten zum Starto-Kundenbereich per E-mail zugesendet bekommen.

Der Server selbst war, wenn ich mich recht entsinne, nach nur wenigen Stunden fertig eingerichtet und per RDP erreichbar.

Der Service:
Fragen zur Konfiguration etc. wurden vom Strato-Support binnen kurzer Zeit höflich und kompetent beantwortet. Weiteren Support habe ich bis dato noch nicht benötigt.

Der Server:
Die Serverdaten können bei Strato eingeshen werden. Das Betriebssystem (Windows Server2003 SE) war mit allen Windowseiegnene Securitytools (Firewall etc.) installiert, und das Handling per RDP fühlt sich gut an.
Ebenfalls fetig installiert waren natürlich .NET und der SqlEpress-Server 2005.
Die neuesten Patches etc. habe ich mir per Windows-Update selbst installiert. Überhaupt muss man für weitere Sicherheitsfeatures, die über die der Standardinstallation hinausgehen, selbst Hand anlegen (Anti-Virensoftware, Hardening etc.)

Fazit:
Ich muss sagen, bisher bin ich überaus zufrieden mit dem Paket. Innerhalb eines Tages hatte ich einen kompletten Server mit allem drum und dran, für meiner Meinung nach, echt günstige 69.- Euro / Monat (Mindest-Laufzeit allerdings 1 Jahr)
Das dazugehörende Softwarepaket sollte allerdings nicht als Entscheidungshilfe dienen - auch wenn eine Vollversion meines geliebten Texteditors Ultraedit dabei ist.

Kleine Helferlein - HTML-Code eines Webcontrols erzeugen

Manchmal kommt man in die Lage, den reinen HTML-Output eines Controls zu benötigen (z.B. für eine AJAX-Methode)
Für diese Aufgabe habe ichmir mal eine kleine Methode geschrieben die genau soetwas tut:

public string GetHtml(Control c)
{
StringBuilder sb = new StringBuilder();
HtmlTextWriter tw = new HtmlTextWriter(new StringWriter(sb));
c.RenderControl(tw);
return sb.ToString();
}


Ein kleines Beispiel für die Anwendnung (der Sinn sei mal dahingestellt):
Auf einer aspx-Seite wird beispielsweise ein Repeater-Control (ID=rep) verwendet, das irgendwelche Daten ausgibt.
Im der PageLoad der Seite könnte beispielsweise der Repeater befüllt werden und das Ergebnis (und nur das Ergebnis) als String zurückliefern. Den Output der aspx-Seite könnte man dann z.B. über eine AJAX-Funktion an anderen Stellen anzeigen lassen


protected void Page_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add("ID", System.Type.GetType("System.Int32"));
dt.Columns.Add("Text", System.Type.GetType("System.String"));
for (int i = 0; i < 50; i++)
{
DataRow dr = dt.NewRow();
dr["ID"] = 1;
dr["Text"] = String.Format("Text Nummer {0}", i.ToString());
dt.Rows.Add(dr);
}
rep.DataSource = dt;
rep.DataBind();
Response.Write(GetHtml(rep));
Response.End();
}

Das schöne daran ist, dass man wirklich alle Funktionen etc. der aspx-Seite verwenden kann um seine Ausgabe so zu erstellen wie man es braucht.

Dienstag, 24. April 2007

Einfache EMail-Maskierung

Es gibt inzwischen viele Lösungen um E-Mailadresse auf einer Homepage vor den unerwünschten E-Mail-Sammel-Robots zu schützen.

Eine ganz einfache aber flexible Lösung will ich hier kurz zeigen.
Sie beruht darauf, dass die E-Mail-Robots nach bekannten Zeichen wie zum Beispiel das @ im Quellcode suchen aber nicht auffinden können.

string eMail = "your@email-address.de";
char[] charArray = eMail.ToLower().ToCharArray();
string encodedEmail = String.Empty;
foreach(char aChar in charArray)
{
object tObject = encodedEmail;
encodedEmail = string.Concat(new object[] { tObject,"&#",Convert.ToInt32(aChar),";"});
}

Das Script liefert aus dem übergebenen (EMail)String folgenden Code:

&#121;&#111;&#117;&#114;&#64;&#101;&#109;&#97;&#105;&#108;&#45;&#97;&#100;&#100;&#114;&#101;&#115;&#115;&#46;&#100;&#101;

Dieser Code wird vom Browser korrekt interpretiert und stellt die E-Mailadresse völlig korrekt (inkl. @) dar. Ein weiterer Vorteil, der sich aus dieser Vorgehensweise ergibt ist, dass auch mailto-Links weiterhin wie gewohnt funktionieren, ohne das der Benutzer die Email-Adresse in seinen Mailclient eingeben oder berichtigen muss, wie es z.B. bei maskierten EMails (z.B. info [AT] domain.de) der Fall sein würde.

Dienstag, 10. April 2007

Windows Workflow Foundation Web Workflow Approvals Starter Kit

Das "Windows Workflow Foundation Web Workflow Approvals Starter Kit" ist ein Visual Studio 2005-Projekt, das die Verwendung der Windows Workflow Foundation für einen einfachen task-basierten Workflow in einer ASP.NET-Webanwendung demonstriert.

Zum Download / weitere Informationen

Mittwoch, 4. April 2007

"Transportable" Anwendungen

Wer kennt das Problem nicht?
Man arbeitet auf verschiedenen PC, Notebooks etc., hat aber z.B. einen Rechner (ev. zu Hause) auf dem die meisten Arbeiten verrichtet werden. Auf diesem hat man dann auch z.B. seinen E-Mail-Client (Outlook Express, Thunderbird etc.) installiert und verrichtet dort auch den größten Teil der E-Mail-Kommunikation inkl. Archivierung etc. Arbeitet man gerade nicht mit diesem PC, ruft man die E-Mails oftmals per Webinterface o.ä. ab. Schlussendlich arbeitet man mit 2 verschiedenen Systemen.
Besonders wenn mal wieder eine Systemneuinstallation ansteht darf man meist zunächst alle Einstellungen etc. speichern um diese anschließend wieder herstellen zu können.
"PortableApps" können diese Problemchen lösen.

Zugegeben:
Was ich hier verzapfe ist nicht neu und für den ein oder andren nicht relevant, weil er sich eine andere Lösung geschaffen hat - für den ein oder anderen ist aber vielleicht doch neu oder ein interessanter Lösungsansatz ;-)

Mit sog. "PortableApps" bist du in der Lage z.B. einen E-Mail-Client wie Thundebird auf einem USB-Stick (oder sonstige externe Speichermedien) zu installieren und die Anwendung von hier aus zu benutzen als wäre Sie normal auf deinem System installiert. Das Coole daran ist aber, dass ich mit dem USB-Stick meinen Client und damit auch alle Einstellungen und Daten überall hin mitnehmen kann und immer mit der einen, gewohnten Anwendung arbeiten kann.

Natürlich ist das Ganze nicht auf einen E-Mail-Client beschränkt. Es gibt inzwischen ein ganze Reihe von Anwendungen aus den verschiedensten Bereichen, die auf diese Weise genutzt werden können (z.B. Filezilla,Firefox,GIMP,OpenOffice uvm.)

Weitere Informationen und Downloads zu dem Thema findets du unter: http://portableapps.com

Freitag, 30. März 2007

Internet Explorer 8

Nachdem sich Microsoft in der Vergangenheit mit neuen Versionen des Internet Explorers eher Zeit gelassen hat, und die aktuelle 7er Version noch lange nicht alle älteren Versionen auf den Rechnern der User abgelöst hat, werden nach und nach schon Spekulationen um den Internet Explorer 8 laut.

Scheinbar soll die neue Version des Internet Explorers keinen neuen Namen bekommen, sondern wie bisher auch einfach Internet Explorer heißen mit der neuen Versionsnummer 8.

Neben neuen, von Anwendern vorgeschlagenen, Funktionen wird es wohl Änderungen im Downloadmechanismus geben. Ein Plug-In System wie man es auch vom Firefox her kennt soll dann ebenfalls mit von der Partie sein wie die Verbesserung der CSS-Kompatibilität.

Erscheinen soll der neue Browser in 18-24 Monaten, aber na ja ....

Mittwoch, 28. März 2007

Das Dilemma

Heute möchte ich mal etwas über meine täglichen Problemchen loswerden.

Der ein oder andere, dem bestimmte Zwänge durch Infrastruktur, Projektvorgaben, Zeitmangel oder sonstigen Hürden in der Auswahl seiner Werkzeuge beschränkt wird, kann mich vielleicht verstehen.

Täglich kann man in Büchern, Fachzeitschriften, Blogs, Foren, auf Konferenzen und Seminaren etc. Informationen über neue Techniken, Softwarepakete, Vorgehensweisen etc. erhalten.
Manchmal, muss ich sagen, treibt mir das beinahe Tränen in die Augen ;-)
Da kommen mir immer wieder ganz verschiedene Gedanken, wie z.B.: "Cool, genau das was ich brauche"; "Shit, wenn ich dass mal voher gewusst hätte"; "Mensch, dass sollte ich mir mal genauer anschauen" oder "Hmmm, hier sollte ich den Anschluss nicht verpassen"

Vielleicht geht es dem ein oder anderen von euch auch manchmal so !?

Leider ist es eben oftmals so, dass:
  • man so in Projekte oder im tagesgeschäft involviert ist dass: man die neue Erkenntisse und Techniken nicht mehr einbringen kann, weil man schon mit einer andren Lösung zu weit fortgeschritten ist
  • man einfach keine Zeit hat sich in die neuen Materien einzuarbeiten oder einfach mal auszuprobieren
  • man durch z.B. innerbetriebliche Zwänge in absehbarer Zeit keine Chance hat neue Lösungen einzusetzen (ich denke da z.B. an den IIS7, weil man ebenbereits einen IIS6 in Betrieb hat)

Es gibt bestimmt noch mehr Gründe, warum man sich hier und da nicht mit Neuigkeiten in dem Maße auseinandersetzen kann, wie man das gerne hätte.

Bestimmt spielen da manchmal auch betriebliche Belange ein Rolle, wenn es z.B. darum geht mal eine Konferenz oder ein Weiterbildungsmaßnahme zu besuchen (z..B. weil die Veranstaltung zu teuer ist und/oder man durch Termindruck nicht abkömmlich ist etc.)
Ich kann mir auch vorstellen, dass sich die eigenen Interessen (in Punkto Technologie) mit den eingesetzten Technologien im Betrieb nicht immer oder nur teilweise decken. Ich denke, dann wird es immer schwierig.

Ich persönlich bin jedenfalls zu der grundlegenden Erkenntnis gekommen (auch wenn das nicht immer einfach ist) - "Bloß nicht verrückt machen lassen". Meine persönliche Meinung ist: Man sollte für sich selbst Schwerpunkte setzen, und sich konkrete (und natürlich erreichbare) Ziele stecken. Dazu gehört dann vielleicht auch mal sagen zu können: "Ok, das ist cool, gut zu wissen, aber das ist derzeit nicht relevant für mich"

Insgesamt gesehen sicher ein Thema über das man ausgeiebig diskutieren kann. Vielleicht liege ich mit meiner für mich gewonnenen Erkenntis auch falsch - aber wir sind ja flexibel ... ;-)

Update für SQL Server 2005 Service Pack 2

Das Update behebt ein Problem mit Wartungscleanup-Taskintervallen.

Weitere Infos und Donload ...

Dienstag, 27. März 2007

IIS 7 Reports Module: Server and Site Reports

Von Carlos Aguilar Mares vom IIS7-Team gibt es jetzt ein IIS7 Add-In, mit dem man Zugriffsreports direkt aus der Adminkonsole erstellen kann. Dazu wird im Hintergrund der Log-Parser 2.2 verwendet.
Weitere Funktionen:
  • HTML -Export
  • Druckfunktion
  • Darstellung in verschiedenen Chart-Typen
  • Built-In Reports (Status Code, Treffer pro Url, Ttreffer je Stunde u.v.m.

Besucht einfach seine Seite ...

Montag, 26. März 2007

ACHTUNG Suchtgefahr !!

OK, lieber spät als nie. Ich hatte zwar schon mal von der Möglichkleit gehört, in einem vorgegebenen Szenario ein eigenes Ameisenvolk durch eigenen Programmcode zu steuern, aber hatte bisher nicht die Zeit mir die Sache mal genauer anzuschauen. Diese habe ich mir jetzt aber endlich mal genommen und mir die Voraussetzungen heruntergeladen und ein wenig rumprobiert.

Das Spielprinzip ist einfach aber meiner Meinung nach echt cool.
Die Spielgrundlagen (komplette VisualStudio Solution mit dem Spielfeld, die gesamte Infrastruktur etc.) sind komplett vorhanden. Man muss sich nur ein wenig mit den vorhanden Eigenschaften und Methoden auseinandersetzen und schon kann es losgehen.

Hier der Originaltext von der Microsoft-Seite:
**********************************************
Worum geht’s?
Jeder Spieler kontrolliert ein Ameisenvolk, das in einem virtuellen Wald auf Nahrungssuche geht. Wie im echten Leben ist die Menge an Futter begrenzt und überall lauern Feinde in Form von ameisenvertilgenden Käfern.

Der Clou: Das Verhalten der eigenen Ameisen wird durch ein kleines Programm gesteuert, welches jeder Spieler vor Spielbeginn selbst schreibt. Dabei kann er durch Programmcode auf verschiedene Ereignisse reagieren, beispielsweise darauf, dass die Ameise gerade einen Gegner sieht oder soeben Nahrung erspäht hat. Im Code wird dann festgelegt, wie die Ameise auf diese Ereignisse reagiert – soll sie einen Gegner attackieren oder lieber wegrennen? Soll sie andere Ameisen in der Nähe um Hilfe rufen? Und was, wenn nicht genug Kollegen in Reichweite sind? Durch clevere Programmierung und ausgefeilte Strategie-Routinen kann jeder Spieler seinem Volk zu einem Vorteil verhelfen.
*******************************************************


Die Spielroutinen sind einfach und wirklcih leicht verständlich. Und wem's hilft: alles ist auf Deutsch.

Durch geschickte Verwendung der vorhanden Methoden und Eigenschaften kann man sein individuelles Ameisenvolk erschaffen. Dadurch kannst du zum Beispiel ein aggresives Volk erschaffen, das z.B. jeden Käfer sofort attackiert oder eben ein eher defensives Volk, das allen Schwierigkeiten aus dem Weg geht und fleißig Nahrung sammelt.
Es ist echt cool zu sehen wie das Volk auch auf kleine Änderungen reagiert (vor allem DASS es dies auch tut)
Natürlich kann man sich auch mit anderen Spielern messen.

Ich finde, das Teil ist ein netter Zeitvertreib, nebenbei kann man noch ein wenig lernen.

So sieht die Spielfläche aus. Einfach, aber sehr interessant wenn man sieht wie sein eigenes Volk agiert.



Und so sieht der Code aus, den man mit eigenen Routinen füllen kann. (sehr übersichtlich und selbstsprechend)


using System;
using System.Collections.Generic;
using System.Text;
using AntMe;

namespace AntMe.Spieler.WolfgangGallo {

[Spieler(
Name = "",
Vorname = "",
Nachname = ""
)]

[Typ(
Name = "",
GeschwindigkeitModifikator = 0,
DrehgeschwindigkeitModifikator = 0,
EnergieModifikator = 0,
LastModifikator = 0,
ReichweiteModifikator = 0,
SichtweiteModifikator = 0
)]

public class MeineAmeise : Ameise {
public MeineAmeise(Volk volk, int typIndex)
: base(volk, typIndex) {
}

public static string BestimmeTyp(Dictionary anzahl) {
return "";
}

public override void Wartet() {
}

public override void Sieht(Zucker zucker) {
}

public override void Sieht(Obst obst) {
}

public override void Sieht(Käfer käfer) {
}

public override void Sieht(Markierung markierung) {
}

public override void GreiftAn(Käfer käfer) {
}

public override void ZielErreicht(Zucker zucker) {
}

public override void ZielErreicht(Obst obst) {
}

public override void IstUnterwegs() {
}

public override void IstMüde() {
}
}
}



Aber wie der Titel meines Blogeintrages schon sagt: Achtung Suchtgefahr ;-)

Und bevor ich es vergesse hier noch der Link zur AntMe-Seite

Also: unbedingt mal ausprobieren!!

Ach ja: Hier die aktuelle Highscoreliste

Sonntag, 25. März 2007

Wo wir schon dabei sind ...

Nicht wirklich dramatisch aber ärgerlich wenn man beim Testen eine Fehlermeldung bekommt, weil man mal wieder nicht daran gedacht hat, dass es so leider nicht geht!
Ich spreche vom Kopieren einer DataRow in eine andere DataTable.

Das naheliegende Vorgehen

datatable2.Rows.Add(datatable1.Rows[0]);

bringt einem die Fehlermeldung ein, das die verwendete DataRow zu einer anderen Tabelle (datatable1) gehört.

Funktionieren tut es mit der Methode "ImportRow()";

datatable2.ImportRow(datatable1.Rows[0]);

Samstag, 24. März 2007

Wie war das doch gleich ...?

Es gibt Momente im Leben eines Entwicklers, in denen man denkt "Da muss es doch was geben!"
Ich mache die Erfahrung immer dann, wenn ich mich mit Dingen beschäftige, die ich nicht jeden Tag brauche oder ganz neu für mich sind.

Die Methode Compute, die die Klasse DataTable zur Verfügung stellt gehört für den ein oder anderen bestimmt dazu. Wenn man nicht gerade der ausgewiesene ADO.NET Spezialist ist, aber dennoch hin und wieder mit DataTable, DataSets etc. arbeitet, stolpert man bestimmt früher oder später über das Problem Daten einer bereits gefüllten DataTable auf bestimmte Art und Weise zu berechnen (zum Beispiel mit Hilfe eines Aggregatausdrucks z.B. sum,avg ...)

Das geht auf einfache Weise über die Methode Compute. Die Methode Compute, die zwei Parameter erwartet:

expression
Der zu berechnende Ausdruck.
filter
Der Filter zum Begrenzen der Zeilen, die in dem Ausdruck ausgewertet werden.
Beispiel:
private void ComputeBySalesSalesID(DataSet dataSet)
{
// Presumes a DataTable named "Orders" that has a column named "Total."
DataTable table;
table = dataSet.Tables["Orders"];

// Declare an object variable.
object sumObject;
sumObject = table.Compute("Sum(Total)", "EmpID = 5");
}
Mich würde es nicht wundern, wenn der ein oder andere hier bereits schon mal einen eigenen Lösungsweg erstellt hat (z.B. Summierung der Werte einer Spalte mit Hilfe einer Schleife o.ä)

Weitere Informationen bei Microsoft

Freitag, 23. März 2007

Treffen mit Ralf Westphal

Ralf Westphal hatte am 20 März eine seiner Kaffehauskonsultationen in Ulm. Das wollte ich mir natürlich nicht entgehen lassen. So habe ich ihn spontan um einen Termin gebeten und war glücklicherweise einer der ersten.

Zugegeben, mein Problem eine einheitlichen single-sign-on-Lösung für eines unserer Portale ist sicher kein hochdramatisches Problem. Jedenfalls kamen wir am Ende auf die Lösung, die ich ohnehin schon angepeilt hatte.
Die anderen bekannten Szenarien hatten wir auch relativ schnell durch und wir hatten die Gelegenheit über viele andere Dinge aus dem Entwickleralltag oder auch den damit zusammenhängenden (oder auch nicht zusammenhängenden) persönlichen Belangen zu plaudern. Ich konnte für mich einige neue Erkkentnisse und Sichtweisen mitnehmen. War echt super! Danke Ralf. Jedenfalls hatte ich den Eindruck, das auch Ralf in der ein oder anderen Sache Erkenntnisse für sich gewinnen konnte.

Nach der Kaffeehauskonsultation hielt Ralf im Rahmen eines Treffens der .NET Usergroup Ulm noch einen Vortrag zum Thema "Echte Komponentenorientierung als Grundlage für die Testbarkeit". Ca. 40 Leute folgten interessiert den Ausführeungen Ralf Westphals.

Insgesamt ein gelungener Tag! Danke auch an Thomas Schissler, den Groupleiter der Usergroup Ulm, ohne den diese Veranstaltungen nicht stattgefunden hätten.

Auf dem Bild: Thomas Schissler (links), Ralf Westphal (mitte), ich selbst ;-)





Weiter Informationen zur Usergroup Ulm findest du uner http://www.dotnet-ulm.de

Visual Studio Extensions für SharePoint Services 3.0

Microsoft hat in seinem Download-Center die Visual Studio Extensions for Windows SharePoint Services 3.0 für Visual Studio 2005 veröffentlicht. Damit werden Entwicklern Project-Templates, Item-Templates und ein SharePoint Solution Generator zur Verfügung gestellt.

-- Download --