Mit ‘C#’ getaggte Artikel

ASP.Net MVC 3

Donnerstag, 02. Februar 2012

Nachdem ich mir mal ASP.Net MVC 3 genauer angeschaut habe, habe ich beschlossen, dass Depon.Net 2.0 mit Hilfe von ASP.Net MVC entwickelt wird und ich den FBK und andere Technologien mit ASP.Net MVC kompatibel machen werde.

Eine erste Version (die eigentlich absolut statisch ist und ich nur das JavaScript testen wollte) kann man unter http://metahosting.depon.net anschauen.

image

Dies hat allerdings einen großen Nachteil:
Die Hintergrundjobs und Datenbank laufen nicht mehr im gleichen Prozess wie das Frontend. Damit ist der Kern des FBK-Konzepts ausgehöhlt und wird mit der MVC Entscheidung beendet.

Die Vorteile des MVC-Frameworks überwiegen die Nachteile einer Nachimplementierung. Weiterhin sind wir damit wieder ‘vollkommen’ kompatibel zur IIS-Welt und können damit Features wie IIS Express, Windows Azure oder vieles andere nutzen.

Visual C# Express und Visual Web Developer Express

Dienstag, 31. Januar 2012

Es ist eine Krux,

In Visual C# Express kann man Projekte für selbstausführende Dateien (.exe) erstellen,
in Visual Web Developer Express kann man dies nicht, dafür funktioniert NuGet. Web Developer unterstützt auch eine rudimentäre Plugin-Architektur, während in C# Express keinerlei Plugins zugelassen sind.

Dies hat reine Lizenzbeschränkungen.

Da beide Tools aber auf msbuild aufsetzen, kann man Projekte, die in C# Express erstellt worden sind auch in Web Developer öffnen und partiell auch umgekehrt.

Das Angenehme ist:
Erstellt man ein Projekt für selbstausführende Dateien in C# Express, so kann man es vollständig in Web Developer nutzen und auch debuggen. In Web Developer kann man auch  NuGet so konfigurieren, dass die msbuild-Anweisungen auch in C# Express funktionieren.

Ergo: Erstelle ein Projekt in C# Express und entwickle es in Web Developer.
Komische Welt, ist aber so.

Ich hoffe, dass die Unterscheidungen der verschiedenen Express-Versionen in zukünftigen Visual Studio-Versionen beendet wird und man ein kostenloses, globales Visual Studio erhält, bei dem gerne auch Professional-Features wie Unit-Tests, Multithreading-Debugging und ähnliches fehlt.

IlSpy

Samstag, 12. November 2011

Nach .Net Reflector gibt es nun die OpenSource-Variante namens IlSpy… Es arbeitet wunderbar mit SharpDevelop zusammen oder kann auch als eigenständiges Programm gestartet werden:

image

Zwar sehr C#-lastig, aber ich persönlich kann damit sehr gut leben!

Gut gefällt mir auch die Möglichkeit ein ganzes Assembly in ein C#-Projekt zu verwandeln.

Arduino Board

Samstag, 01. Oktober 2011

25 EUR, schönes Spielzeug.

Jann direkt per USB angesteuert werden, bietet digital und analog Ein- und Ausgänge und wird direkt in der C-Programmiersprache angesteuert.

Installation ist wirklich einfach.

Anstecken, Arduino-Software installieren, dem Windows den Treiber geben, Arduino-SW starten. Start!

WP_000029 (2)

WP_000031 (2)

image

Einfach nett.

Jetzt brauch ich nur noch eine Aufgabe.

Drei Tage und keine Lösung

Sonntag, 24. April 2011

Die letzten drei ‘Tage’ saß in an einem Problem zu dem ich keine Lösung finde.

http://www.mycsharp.de/wbb2/thread.php?postid=3675244#post3675244

BTW: Warum zur Hölle erstellt ObservableCollection<T> eine Kopie der übergebenen Liste und arbeitet nicht direkt auf dieser…

Demo-Webserver in C# und FBK

Sonntag, 13. März 2011

Nachdem Ausgliederung und Separierung des Webservers von dem FBK-Spielekern kann ich nun mit gutem Gewissen einen Demo-Webserver veröffentlichen.

Dieser Demo-Webserver nutzt die Windows http.sys-Bibliothek und lauscht auf dem Port 8081. Die Konfigurationsdatei ist offen und kann verändert werden.

Den komplette Sourcecode kann man über Bitbucket beziehen:

http://bitbucket.org/mbrenn/demo-webserver

Das Binary mit dem Demowebserver kann direkt heruntergeladen werden:

http://www.depon.net/downloads/webserver.zip

Dieser Webserver enthält drei Beispiele:

  1. Einfache dynamische Seite: Hier wird gezeigt, wie man eine eigene C#-Klasse implementieren kann und die Ausgabe diese Klasse zur Ausgabe am Webserver genutzt werden kann.
  2. Vorlagenbasierte Seite: Ein nacktes Wiederausgaben einer vorlagenbasierten Seite. In diesem Beispiel etwas sinnlos, da ich den integrierten Parser nicht nutze.
  3. Vorlagenbasierte Seite mit Rahmenseite: Im ASP.Net-Jargon auch MasterPages genannt. Hier wird eine allgemeine Rahmenseite genommen und an einer bestimmten Stelle wird die konkrete Vorlage eingefügt und ausgegeben.

In den nächsten Wochen werde ich die Beispiele etwas ausbauen.

Der Webserver ist eine einfache .exe-Datei und kann per Doppelklick gestartet werden.

Fauler Dictionaries füllen

Mittwoch, 07. April 2010

Etwas aufwändig:

var result = new Dictionary<string, string>();
result["username"] = username;
result["mail"] = email;
return result;

Besser ist:

return new Dictionary<string, string>()
    .With("username", username)
    .With("mail", email);

Mit dieser Extension-Methode:

public static Dictionary<T, W> With<T, W>(this Dictionary<T, W> dict, T key, W value)
{
    dict[key] = value;
    return dict;
}

Klassenbrowser als Kommandozeilenapplikation

Sonntag, 08. November 2009

Um mir einen Überblick über die Namespaces, Klassen und Typen des FBK zu verschaffen, habe ich mir ein kleines Hilfsprogramm geschrieben. Dieses inspiziert eine Assembly und gibt das Ergebnis in verschiedenen Formaten aus:

  • Als pure Textdatei
  • Als Xml-Datei mit dem Schema: (assembly->class->(field|method|property)->Parameter)
  • Als baumartige Xml-Datei, bei der jeder Namensraum einen eigenen Xml-Knoten darstellt und die Klassen darunter angezeigt werden.

Das Programm ist unter http://www.depon.net/downloads/classbrowser.zip herunterladbar und über Kommandozeile aufzurufen:

ClassBrowser.exe Input.dll
    [-exportformat=xml|csv|xmlclasstree]
    [-compilergenerated=yes|no]
    [-onlyclasses=yes|no]
Input.dll
    Der erste Parameter wird immer als einzulesende Assembly gewertet.

-exportformat=xml|csv
    Optionaler Parameter, der festlegt in welchem Format die Ausgabe
    des Programmes auf Standard-Out durchgeführt werden soll.
    Wird kein Format angegeben, so erfolgt die Ausgabe im Xml-Format.

-compilergenerated=yes|no
    Optionaler Parameter, der festlegt, ob Compilergenerierte Klassen
    und Methoden mit dem CompilerGeneratedAttribute ebenfalls angezeigt
    werden sollen.
-onlyclasses=yes|no
    Optionaler Parameter, der festlegt, ob nur Klassen angezeigt werden
    sollen.

Ein kleiner Screenshot der mit ‘xmlclasstree’ erzeugten Xml-Datei.

image

SQLite und C#

Montag, 19. Oktober 2009

Gerade gefunden, werde ich mir nachher mal antun:

http://sqlite.phxsoftware.com/

Supported Platforms

Debugger anfordern

Samstag, 26. September 2009

Hin und wieder gibt es den Bedarf den Ablauf eines Programmes zu stoppen und in den Debugger zu springen. Visual Studio bietet hier die komfortable Möglichkeit der Haltepunkte (neudeutsch Breakpoints). Leider gibt es öfter Situationen, an denen ein einfacher Breakpoint nicht ausreicht. Dies ist insbesondere der Fall wenn die jeweilige Zeile 100fach ausgeführt wird, aber man nur bei einer bestimmten Nebenbedingung den Debugger auslösen möchte.

System.Diagnostics.Debugger.Break()

Diese Funktionalität nutze ich beim FBK. Wenn ich die Ausführung einer bestimmten Rolle testen möchte, trage ich in der Xml-Konfigurationsdatei das Attribut ‘debug’ ein.

        <role type="mutateresources" id="BeerMutating" debug="True">
          <input>
            <resource type="Hop" amount="8" />
            <resource type="Brewer" amount="8" />
          </input>
          <output>
            <resource type="Beer" amount="8" />
          </output>
          <outputresearcheffects>
            <researcheffect research="Brewery">
              <multiplicator type="exponential"
                             factor="1"
                             base="1.1"
                             exponentoffset="0"
                             offset="0" />
            </researcheffect>
          </outputresearcheffects>
        </role>

Wird diese Rolle nun ausgeführt, so hält Visual Studio die Ausführung an und ermöglicht ein einfaches Debuggen.

/// <summary>
/// Executes the role
/// </summary>
/// <param name="worldState">Current worldstate</param>
public void Execute(IWorldState worldState)
{
    if (this.Role.IsDebug)
    {
        Debugger.Break();
    }

    this.Role.ExecuteRole(this.RoleStatus, worldState);
}

Nettes Feature…