Posts Tagged ‘ .NET

Microsoft .NET vs Java

Sowohl Microsoft .NET als auch Java bieten inzwischen eine Vielzahl an Funktionen und welche von beiden Programmier­plattformen die bessere ist, daran scheiden sich die Geister – und das nicht nur fachlich – Hier und da mutiert eine Diskussion zu diesem Thema auch schon zu einer wahren Glaubensfrage. Erfreulich daher, dass man das Ganze auch mal von einer etwas humoristischen Seite aus betrachten kann:

[via mynethome.de]

Strings formatieren mit C#

Alex on ASP.NET liefert dazu eine nette Übersicht, die man auch noch lokalisieren kann.

ASP.NET 1. 1 – DefaultButton definieren

In ASP.NET 2.0 gibt es die Methode HtmlForm.DefaultButton, mit der man den DefaultButton eines Formularelements festlegen kann. Sehr nützlich wenn man ein Formular mit mehreren Buttons erstellt hat und der Benutzer durch drücken der ENTER-Taste auf einem Input-Feld eine Aktion auslösen soll wie z.B. verschiedene Suchoptionen. Leider bietet ASP.NET 1.1 keine Funktion dieser Art.

Bei kamp-hansen.dk bin ich auf einen Lösungsansatz gestoßen, der zwar leider in VB und nur für den IE gebaut wurde, aber im Grunde ist der Lösungsweg nicht schlecht. Der “C#-Way” sollte dann in etwas so aussehen:

public void DefaultButton(System.Web.UI.Page Page,
                                  System.Web.UI.WebControls.TextBox objTextControl,
                                  System.Web.UI.WebControls.Button objDefaultButton){

System.Text.StringBuilder sScript = new System.Text.StringBuilder();

sScript.Append("<script language=\"javascript\">");
sScript.Append("function GetKeyCodeIE(btn){");
sScript.Append("    if (event.keyCode == 13)");
sScript.Append("    { ");
sScript.Append("        event.returnValue=false;");
sScript.Append("        event.cancel = true;");
sScript.Append("        btn.click();");
sScript.Append("     } " );
sScript.Append(" } ");

sScript.Append(" function GetKeyCodeRest (Ereignis) { ");
sScript.Append("    if (!Ereignis) ");
sScript.Append("        Ereignis = window.event; ");
sScript.Append("    if (Ereignis.which) { ");
sScript.Append("           Tastencode = Ereignis.which; ");
sScript.Append("    } else if (Ereignis.keyCode) { ");
sScript.Append("           Tastencode = Ereignis.keyCode; ");
sScript.Append("    } ");
sScript.Append("     if (Tastencode == 13)");
sScript.Append("        document.getElementById(‘" + objDefaultButton.ClientID + "’).click();");
sScript.Append("} ");

sScript.Append(" var IE = document.all ? true : false;");
sScript.Append(" if (!IE){");
sScript.Append("   document.onkeydown = GetKeyCodeRest;");
sScript.Append("}");
sScript.Append("</script>");

objTextControl.Attributes.Add("onkeydown",
                                          "GetKeyCodeIE( document.all." + objDefaultButton.ClientID + ")");
Page.RegisterStartupScript("ForceDefaultToScript", sScript.ToString());
}

Der Aufruf erfolgt dann mittels

DefaultButton(Page,txtSearch,btnSearch)

Ok, ganz glücklich bin ich mit dieser Lösung auch nicht – einige werden mir da sicherlich zustimmen – , aber “auf die Schnelle” ein durchaus akzeptabler Ansatz.

Neues aus Redmond

RC1 für .Net 3.0 released
Microsoft hat heute den ersten Release Candidate für das neue .Net Frameworks 3.0 veröffentlicht. Das bis vor kurzem noch unter dem Namen WinFX geführte Framework umfasst die Windows Presentation Foundation, Windows Communication Foundation, Windows Workflow Foundation sowie Windows CardSpace.

Der Release Candidate kann für 32- und 64-Bit-Systeme von den Servern in Redmond heruntergeladen werden und lässt sich mit Visual Studio 2005 und Visual Studio Express nutzen. Von einem Einsatz in Produktivumgebungen rät Microsoft ab … is ja schließlich auch nur eine Beta!

Windows Vista RC 1 Final ist da
Auch aus der Betriebssystem-Ecke bei Microsoft gibt es neues. So haben die Entwickler aus Redmond nun den Release Candidate 1 für Windows Vista fertig. Zunächst bekommen aber, wie gewohnt, nur TechNet- und MSDN-Abonnenten Zugriff auf diese Version. Um den 7. September 2006 soll dann aber auch die Allgemeinheit den RC1 herunterladen können, wobei zu erwarten ist, das auch dieses mal die Anzahl der Downloads eingeschränkt ist.

[via Golem.de]

Mono 1.1.17 released

mono-logo.pngDie freien Implementierung von Microsofts .NET-Umgebung Mono wurde in der Version 1.1.17 released.

Die neue Version behebt 134 Bugs (gegenüber der Version 1.1.16) und wartet mit diversen neuen Funktion und Implementierungen wie z.B. der Unterstützung von COM-Objekte auf. Noch nicht fertig ist allerdings der neuer Basic-Compiler, der kompatibel zu Microsofts VB 2005 sein soll.

Alle Änderungen sowie Informationen über die behobenen Bugs können wie immer der Release Note entnommen werden.

Phalanger – PHP-Compiler für .NET

Eine neue Version des PHP-Compiler Phalanger wurde auf Codeplex veröffentlicht. Die Version 2.0 Beta 2 soll sich nun auch in Visual Studio 2005 integrieren lassen und aus PHP-Skripten Binaries erzeugt, die in der CLR des .NET-Framework 2.0 laufen können. Die zur Integration des Compilers notwendige Software, ist allerdings noch nicht verfügbar.

Sicher interessant zu sehen, ob der Compiler hält, was er verspricht. Laut den Entwicklern wurde alle in PHP vorhandenen Funktionen für .NET nachgebaut, so das sich PHP-Skripte ohne Änderungen mit Phalanger übersetzen lassen. Ob damit dann auch eine reibungslose Migration von LAMP auf einen ASP.NET-Web-Server möglich ist, bleibt abzuwarten. Da im Moment lediglich PHP4 unterstützt wird, sehe ich zumindest für ein paar meiner Projekte schwarz :)

Für die OpenSource .NET- Variante Mono existiert übrigends ebenfalls ein Compiler dieser Art. Der Informatikstudenten Raphael Romeikat von der Universität Augsburg hat mit PHP4Mono schon vor gut einem 3/4 Jahr einen Compiler entwickelt, mit dessen Hilfe sich PHP-Skripte im MONO (.NET) Framework ausführen lassen.

Ip2Nation – the c# way

Eine IP-Adressen einem Land programmatisch zuzuweisen ist eigentlich nicht schwer. Im Netz finden sich einige freie Datenbanken, aus denen man die notwendigen Informationen abgreifen kann. Auf www.ip2nation.com findet man z.B. einen MySQL Dump sowie diverse Beispielscripte, um eine Abfrage dieser Art in PHP zu bauen.

Mehr oder weniger problematisch wird das ganze allerdings, wenn man versucht eines der Beispiele von ip2nation für C#.NET umzubauen. Zwar lassen sich die etsprechenden Tabelle und Inhalte recht einfach auch in einen MS SQL Server importieren (lediglich der Datentyp der Spalte ip in der Tabelle ip2nation muß in den Datentyp bigint geändert werden). T-SQL verfügt allerdings nicht über eine INET_ATON-Funktion, wie man sie z.B. von MySQL kennt.

Kurz zum Verständnis: INET_ATON ist eine MySQL Funktion, die eine Ganzzahl zurück gibt, welche den numerischen Wert einer Netzwerk-Adresse darstellt.

Für C# benötigen wir daher zunächst mal ein entsprechendes Äquvalent für die INET_ATON Funktion:

private double DotNetINET_ATON(string RealIP)
{
        int x;
        string [] arrIPSplit;
        double num = 0;
        if RealIP == "")
        {
                return 0;
        }
        else
        {
                arrIPSplit = RealIP.Split(‘.’);
                for(x = arrIPSplit.Length - 1; x >= 0 ; x )
                {
                        num += ((int.Parse(arrIPSplit[x])%256) * Math.Pow(256 ,(3 - x )));
                }
                return num;
        }
}

Das SQL Statement kann dann auch schon fast so bleiben wie es im Beispiele von ip2nation angezeigt wird, lediglich das “LIMIT 0,1″ sollte man gegen ein TOP 1 austauschen, da MS SQL diesen Befehl nicht kennt. Im Rahmen einer Stored Procedure würde das Ganze dann etwa so aussehen:

ALTER  PROCEDURE GetNation
(
        @ip bigint = NULL
)
AS

SELECT  TOP 1
        c.country
FROM
        ip2nationCountries c,
        ip2nation i
WHERE
        i.ip < @ip
AND
        c.code = i.country
ORDER BY
        i.ip DESC

Und das war´s eigentlich auch schon. Nun sollte ein einfacher Aufruf DotNetINET_ATON(ip) den numerischen Wert einer Netzwerk-Adresse zurückgeben, die man dann auf die Datenbank bzw. Stored Procedure jagen kann.

Ob der Code richtig arbeitet, kann man übrigends leicht durch die IP 127.0.0.1 feststellen. Hier sollte DotNetINET_ATON als Return-Wert 2130706433 zurückgeben.

Regular Expression Library

Wer mal schnell eine Regular Expression braucht oder ein selbsterstelltes Regex-Pattern testen möchte, sollte auf jeden Fall mal bei regexlib.com vorbeischauen.

In einer sehr umfangreichen Datenbank kann man dort nach eventuell schon vorhandenen Patterns suche oder, falls man eigene erstellt hat, diese dort testen.

Update
Wer nur mal schnell seine eigenen Patterns testen möchte, hier gibt es eine “Regular Expressions Tester”-Extension für den FireFox

PDF-Erstellung mit C#

Tools zum Erstellen von PDF Dateien gibt es für c# zu hauf, in der Regel muss man sie aber für teures Geld von Drittanbietern erstehen. Aber es geht auch kostenlos: Mit iTextSharp findet man auf Sourceforge ein sehr mächtiges Tool zurGenerierung von PDF-Dokumenten in C#.

Das erste PDF-Dokument ist mittels iTextSharp sehr schnell erstellt:

Document document = new Document();
try {
   PdfWriter.getInstance(document, new FileStream(“Chap0101.pdf”, FileMode.Create));
   document.Open();
   document.Add(new Paragraph(“Hello World”));
}
catch(DocumentException de) {
   Console.Error.WriteLine(de.Message);
}
catch(IOException ioe) {
   Console.Error.WriteLine(ioe.Message);
}
document.Close();

Etwas komplizierter (aber nicht unmöglich) wird es, wenn man z.B. Daten aus einer SQL-Tabelle darstellen will. Hierfür bietet das Framework neben einfachen Tabellen das PdfPTable-Object an.

Mit ein wenig Übung und der sehr umfangreichen Tutorial-Sammlung lassen sich so sehr schnell durchaus ansehnliche PDF-Dokumente “on the fly” erstellen.

Essential Tools for Visual Studio Developer

James Avery hat zum zweiten Mal im MSDN Magazine seine “Ten Essential Tools” vorgestellt. 2004 gab es ja schon mal einen ähnlichen Artikel, damals richtete dieser sich allerdings an alle .NET Entwickler.

In der 2005 Version der Ten Essential Tools richtet sich Avery nun ausschließlich an Visual Studio Entwickler und stellt die, seiner Meinung nach, 10 besten Add Ins für die .NET IDE von Microsoft vor. Auf jeden Fall ein lesenswerter Artikel für alle Visual Studio Entwickler.