Code and more

ICommentable Blog

Mehrere SQL Server Express Instanzen auf einem Rechner

Hinterlasse einen Kommentar »

Die Frage kommt immer wieder auf: Kann man mehrere SQL Server Express Instanzen auf einem Rechner installieren? Ja man kann. Für jede Installation wird ein eindeutiger Instanz Name vergeben (Default: SQLEXPRESS). Zum Beispiel Rechnername\SQLEXPRESS, Rechnername\DEVDB usw.

Da jede Instanz standardmäßig dynamische Portzuweisungen benutzt, gibt es auch keine Schwierigkeiten mit belegten Ports.

Geschrieben von Herr W.

Oktober 16, 2009 um 3:59

Veröffentlicht in Tools

Getaggt mit

Projektsetup ASP.NET MVC Webapplikation

Hinterlasse einen Kommentar »

Da ich ohnehin gerade dabei bin mein “Default” Projektsetup für das interne Entwicklerhandbuch zu dokumentieren, kann genauso gut auch ein Blogpost daraus werden. Gelebte Zweitverwertung.

1. Entwicklungsumgebung

  • Visual Studio 2008 (optional aber dringend empfohlen ReSharper)
  • Subversion (wir nutzen seit Kurzem unfuddle.com für SVN und Projektmanagementunterstützung)
  • Virtual Box (VM für Testserver mit IIS und SQL Server Express)

2. Frameworks

  • ASP.NET MVC + JQuery als Webframework
  • Ninject für Dependency Injection
  • NUnit und Moq für TDD
  • log4net

3. Tools

  • LinqPad zum testen von Linq Queries
  • Notepad++ wenn es mal schnell gehen muss
  • Paint.Net für schnelle grafische Anpassungen
  • Expression Web zum Bauen von Templates und CSS
  • Balsamiq für UI Mockups

4. Struktur der Visual Studio Solution

Jede Solution wird in mehrere Projektmappen aufgeteilt:

struktur

Domain: Enthält alle Domainobjekte sowie die Schnittstellendefinitionen der Repositories.

Infrastructure.Data: Enthält die jeweiligen Implementierungen der Repositories abhängig von der gewählten Datenzugriffsstrategie (NHibernate, Linq2SQL, EF, etc.)

Infrastructure.Messaging: Enthält Serviceimplementierungen für Mail Versand und andere Messaging Dienste

Presentation.Mvc: Enthält das ASP.NET MVC Webprojekt

Test: Enthält alle Unit Tests des Gesamtprojekts

Geschrieben von Herr W.

Oktober 15, 2009 um 8:43

Veröffentlicht in Code

Getaggt mit , ,

ASP.NET MVC 2 Preview 2

Hinterlasse einen Kommentar »

Das Team um Phil Haack hat die 2. Preview der kommenden Version 2 des ASP.NET MVC Frameworks veröffentlicht. Die neue Version bringt einige Verbesserungen und Erweiterungen mit z.B.:

  • Client Side Validation
  • Model Validation Provider
  • Areas
  • Metadata Providers

Mehr Information in Phil Haack’s Blog

Geschrieben von Herr W.

Oktober 7, 2009 um 1:46

Veröffentlicht in News

Getaggt mit ,

Das kleine Schwarze

Hinterlasse einen Kommentar »

Lenovo-IdeaPad-S10,W-3-152787-3Nach Wochen der Entscheidungsfindung, schreibe ich diesen Beitrag nun von meinem nagelneuen Lenovo Ideapad S10.

Das vorinstallierte Windows XP habe ich durch den RC von Windows 7 ersetzt und muss sagen das ich ziemlich überrascht war wie reibungslos und schnell die Installation vonstatten ging. Sämtliche Geräte wurden anstandslos erkannt. Einzig der Treiber für das Energiemanagement musste manuell nachinstalliert werden.

Mein Eindruck nach den ersten Tagen ist durchweg positiv. Der Zwerg läuft ohne Probleme und verkraftet mehr als ich vermutet hätte. Visual Studio 2010 ließ sich ohne Widerstände installieren und auch recht flüssig bedienen. Aber was ist schon Visual Studio gegen Rhino, das mein Kollege auf seinem Netbook installiert hat. Laut seiner Aussage ginge das Arbeiten ganz gut nur das Rendern gestalte sich etwas zäh :-). 

Geschrieben von Herr W.

Juni 1, 2009 um 6:56

Veröffentlicht in Hardware

Getaggt mit

HowTo: Gravatar Helper für ASP.NET MVC

Hinterlasse einen Kommentar »

Gravatar ist ein öffentlicher und kostenloser Webdienst der die Verknüpfung eines Profilbildes oder auch Avatars mit einer Email-Adresse ermöglicht. Gravatar stellt somit einen Art globalen Avatar bereit.

Die Einbindung in eigene Seiten ist denkbar simpel.

To request a gravatar from our servers, you simply add an image to your users activity with an "src" attribute that points to our gravatar image generator and includes an MD5 hash of the user’s email address. Since all gravatars are rated with an MPAA style rating, you can restrict your site to show only gravatars whose content you are comfortable with. Quelle: http://en.gravatar.com

Für ASP.NET MVC basierte Projekte bietet es sich an, die Einbindung über einen eigenen HtmlHelper zu realisieren. Zunächst habe ich eine Klasse GravatarViewHelper in meinen MVC Projekt angelegt.

gravatarclass

Als nächstes werden nun die eigentlichen Extension Methoden definiert.

public static string GravatarLink(this HtmlHelper html, string id, 
                                  string alternateText, string email, 
                                  int size, string rating)
{
    return GravatarLink(html, id, alternateText, email, size, rating, null);
}

public static string GravatarLink(this HtmlHelper html, string id, 
                                  string alternateText, string email, 
                                  int size, string rating, object htmlAttributes)
{
    if (String.IsNullOrEmpty(email))
        return String.Empty;

    var url = BuildGravatarUrl(email, size, rating);
    var tag = BuildTag(id, url, htmlAttributes, alternateText);

    return tag;
}

 

Ziel der Methoden ist es ein <img> Tag zu rendern, dessen “src” Attribut die generierte Gravatar URL enthält. Das Erstellen der Gravatar URL erfolgt in 3 Schritten:

1. Zusammenbauen der Basis URL

2. Erzeugen des MD5 Hash aus der Email Adresse

3. Hinzufügen von Gravatar Optionen (Bildgröße, Rating)

private static string BuildGravatarUrl(string email, int size, string rating)
{
    var builder = new UriBuilder("http://www.gravatar.com/");
    builder.Path = "avatar/";
    builder.Path = builder.Path + CreateEmailMd5Hash(email);

    AppendQueryToGravatarUri(builder, "s="+size);
    AppendQueryToGravatarUri(builder, "r=" + rating);
    AppendQueryToGravatarUri(builder, "d=identicon");

    return builder.ToString();
}

Abschließend muss noch das img Tag erzeugt werden.

private static string BuildTag(string id, string url, 
                               object htmlAttributes, 
                               string alternateText)
{
    var builder = new TagBuilder("img");
    builder.GenerateId(id);
    builder.MergeAttribute("src", url);
    builder.MergeAttribute("alt", alternateText);
    builder.MergeAttributes(new RouteValueDictionary(htmlAttributes));

    return builder.ToString(TagRenderMode.SelfClosing);
}

Nun noch schnell im View ein Import Statement für den neuen HtmlHelper hinzufügen und fertig.

%@Import Namespace="Chessman.Mvc.Helper"%

<%
    foreach (var user in Model)
    {
%>
       <%= Html.GravatarLink("myGravatar", "Gravatar Image", user.Email, 80, "PG") %>
    
<% 
    } 
%>

 

Hier nochmal der komplette Code der GravatarViewHelper Klasse:

public static class GravatarViewHelper
{
    public static string GravatarLink(this HtmlHelper html, string id, 
                                      string alternateText, string email, 
                                      int size, string rating)
    {
        return GravatarLink(html, id, alternateText, email, size, rating, null);
    }

    public static string GravatarLink(this HtmlHelper html, string id, 
                                      string alternateText, string email, 
                                      int size, string rating, object htmlAttributes)
    {
        if (String.IsNullOrEmpty(email))
            return String.Empty;

        var url = BuildGravatarUrl(email, size, rating);
        var tag = BuildTag(id, url, htmlAttributes, alternateText);

        return tag;
    }

    private static string BuildGravatarUrl(string email, int size, string rating)
    {
        var builder = new UriBuilder("http://www.gravatar.com/");
        builder.Path = "avatar/";
        builder.Path = builder.Path + CreateEmailMd5Hash(email);

        AppendQueryToGravatarUri(builder, "s="+size);
        AppendQueryToGravatarUri(builder, "r=" + rating);
        AppendQueryToGravatarUri(builder, "d=identicon");

        return builder.ToString();
    }

    private static void AppendQueryToGravatarUri(UriBuilder builder, string query)
    {
        if (builder.Query != null && builder.Query.Length > 1)
            builder.Query = builder.Query.Substring(1) + "&" + query;
        else
            builder.Query = query;
    }

    private static string CreateEmailMd5Hash(string email)
    {
        var provider = new MD5CryptoServiceProvider();
        var bytesToHash = Encoding.UTF8.GetBytes(email);
        bytesToHash = provider.ComputeHash(bytesToHash);

        var result = String.Empty;
        foreach (var b in bytesToHash)
        {
            result = (result + b.ToString("x2"));
        }

        return result;
    }

    private static string BuildTag(string id, string url, object htmlAttributes, 
                                   string alternateText)
    {
        var builder = new TagBuilder("img");
        builder.GenerateId(id);
        builder.MergeAttribute("src", url);
        builder.MergeAttribute("alt", alternateText);
        builder.MergeAttributes(new RouteValueDictionary(htmlAttributes));

        return builder.ToString(TagRenderMode.SelfClosing);
    }
}


Geschrieben von Herr W.

Mai 16, 2009 um 8:25

Veröffentlicht in Code

Getaggt mit ,

ASP.NET MVC – RedirectToAction Firefox Ajax Problem

Hinterlasse einen Kommentar »

Manchmal ist es zum aus der Haut fahren. In meiner App wird eine Liste per Ajax geladen (Index Action). Jeder Eintrag der Liste stellt direkt eine Löschfunktion zur Verfügung. Zum Löschen wird die Delete Action per Ajax Post aufgerufen. Diese leitet nach getaner Arbeit mittels RedirectToAction an die Index Methode weiter. So weit, so gut.

Nun wird aber in der Index Action mit Request.IsAjaxRequest entschieden ob die ganze Seite oder nur die Liste  als PartialView gerendert werden soll. Die Request.IsAjaxRequest Abfrage müsste in meinem Fall “true” zurückgeben. Tut sie auch, allerdings nur im Internet Explorer. Im Firefox klappt es ums Verrecken nicht. Irgendwie gehen benötigte Header Informationen verloren oder werden nicht richtig gesetzt. 

Eine Möglichkeit zur Lösung oder besser Umgehung des Problems bietet sich mit TempData an. In der Delete Action wird eine Variable [IsActionRedirect] in TempData gesetzt und in der IndexAction abgefragt. (if (Request.IsAjaxRequest() || TempData["ActionRedirect"] != null)) Je nach Ergebnis wird dann der entsprechende View gerendert. Nicht schön aber es funktioniert.

Geschrieben von Herr W.

Mai 14, 2009 um 2:53

Veröffentlicht in Code

Getaggt mit ,

Internet Explorer 8 und ASP.NET MVC Ajax

Hinterlasse einen Kommentar »

Ich mag den neuen IE 8 wirklich. Aber manchmal treibt mich das Ding in den Wahnsinn. Folgendes Szenario: Ich rufe mittels jQuery $.getJson eine Action in meinem Controller auf, die mir das gewünschte Json Objekt zurückgibt. Das Ergebnis wird dann an eine bestehende Liste auf der Seite angefügt. So weit so gut. Beim ersten Aufruf funktioniert auch alles wunderbar. Aber ab dem zweiten Aufruf scheint der IE den Aufruf  zu cachen, denn er fügt zwar einen neuen Eintrag an allerdings hat dieser immer die gleichen Werte. Im Firefox funktioniert es einwandfrei. Benutzt man statt $.getJson die $.post Methode funktioniert es auch im IE. Abgesehen von der Tatsache das POST in meinem Fall kontextbezogen eh die bessere, weil logischere Methode war, wäre ich für eine Erklärung dankbar.

Geschrieben von Herr W.

April 18, 2009 um 10:31

Veröffentlicht in Code

Getaggt mit ,

Microsoft Web Platform Installer

Hinterlasse einen Kommentar »

Es ist schon beachtlich, welche Veränderungen bei Microsoft, insbesondere für Entwickler, in den letzten Monaten zu beobachten sind. Sei es die weitgehend Community-getriebene Entwicklung des ASP.NET MVC Frameworks, welches nun offiziell als Open Source verfügbar ist, oder die Einbindung populärer Open Source Projekte in eigene, freie Produkte. Als besonders gelungenes Beispiel sei hier der Web Platform Installer vorgestellt. Der Installer ermöglicht die Einrichtung einer kompletten .NET Entwicklungsumgebung per Mausklick.

The Microsoft Web Platform Installer 2.0 (Web PI) is a free tool that makes it simple to download, install and keep up-to-date with the latest components of the Microsoft Web Platform, including Internet Information Services (IIS), SQL Server Express, .NET Framework and Visual Web Developer. In addition, install popular open source ASP.NET and PHP web apps with the Web PI.

Die Benutzung ist in der Tat kinderleicht.

1. Download

2. Entwicklungsumgebung nach Wunsch zusammenstellen. Hier kann man sowohl aus vorgegebenen Profilen (ASP.NET Developer, PHP Developer, etc.) wählen und/oder die Komponenten individuell zusammenstellen.

image

3. Installieren

image

image

4. Fertig

Schon hat man eine vollständige Entwicklungsumgebung mit Visual Studio, SQL Server 2008, IIS und weiteren Tools auf dem Rechner und kann loslegen.

Geschrieben von Herr W.

April 3, 2009 um 10:18

Veröffentlicht in Tools

Getaggt mit , ,

HYVE NerdDay

mit einem Kommentar

Quelle: http://www.adrianagascoigne.com/2008/06/30/web-20-conference-snapshot/ Ende April werden wir unser erstes aber hoffentlich nicht letztes, HYVE internes Entwicklertreffen veranstalten. Neben Wein, Weib und Gesang, stehen einige interessante Sessions auf dem Programm.

Session 1: Michael Wallasch – The good, the bad and the ugly – Softwarearchitekturen und Code Qualität

Session 2 : Tobias Gassmann – PHP Frameworks I – Zend Framework

Session 3 : Wolff Schetula – Javascript Frameworks

Session 4 : Christian Puchinger – PHP Frameworks II

Session 5 : Markus Rieger – Grafikformate im Internet

Ich bin wirklich über alle Maßen gespannt und freue mich auf diesen Tag. Die Slides zu den einzelnen Session werde ich dann hier zeitnah zum Download zur Verfügung stellen.

 

[Update]: Das Treffen war ein voller Erfolg. Natürlich wurde der Zeitrahmen noch nicht mal ansatzweise eingehalten, so dass wir 3 Stunden nach dem geplanten Ende immer noch zusammen saßen und leidenschaftlich diskutieren. Beeindruckend war vor allem die Offenheit und der Wille zur eigenen Professionalisierung aller Beteiligten. Slides gibt es leider keine, da diese sehr schnell durch Demonstrationen “am lebenden Objekt” ersetzt wurden.

Geschrieben von Herr W.

April 3, 2009 um 9:13

Veröffentlicht in News

Getaggt mit

MOQ – Erste Eindrücke

Hinterlasse einen Kommentar »

Ich bin auf der Suche nach Alternative zu Rhino Mocks, meinem derzeitigen Mock Framework der Wahl. Nicht das ich grundsätzlich unzufrieden wäre, aber so richtig glücklich war und bin ich damit auch nicht. Irgendwie ist alles etwas zu sperrig. Also habe ich mir heute mal Moq etwas näher angesehen. Der erste Eindruck ist durchweg positiv. Klare API, kinderleicht zu benutzen und gut dokumentiert. Was will man mehr. Nun, eines vielleicht: Kein abstürzendes Visual Studio. Es ist wie verhext. Sobald ich die Setup Methode benutze und anfange die Lambda Expression zu schreiben, reißt es Visual Studio in den virtuellen Abgrund. Ich habe nicht den Hauch einer Idee woran das liegt. Ich bin frustriert.

[Update] Es lag offensichtlich am CodeRush Xpress Add-In. Sobald es entfernt war, funktionierte alles so wie es sollte.

Geschrieben von Herr W.

April 2, 2009 um 4:16

Veröffentlicht in Tools

Getaggt mit , ,