dasBlog-Makro zum anzeigen von Kommentaren und Kommentar-Autoren

Saturday, March 10, 2007 10:02:54 PM (W. Europe Standard Time, UTC+01:00)

Da die vorhandenen DasBlog-Makros zum anzeigen von Kommentaren nicht ganz die Ausgabe erzeugen, die ich gerne haben wollte (und weil ich wegen einer neuen Kaffeemaschine und damit verbundenem zu hohen Kaffeekonsum nicht schlafen konnte), habe ich mir gestern Nacht zwei neue Makros geschrieben. Das eine zeigt die letzten 5 Kommentare, das andere eine Liste der Leute, die am häufigsten Kommentare in meinem Blog schreiben.

DasBlog lässt sich mit Makros sehr einfach um neue Funktionen erweitern. Wie das genau geht ist sehr schön auf der dasBlog Webseite beschrieben. Als Grundlage für meine Makros habe ich das Makro von Voidclass verwendet und erweitert.

Was man beachten sollte bei der Makroentwicklung: entwickelt man mit .NET 2.0, dann muss auch dasBlog auf 2.0 laufen, sonst funktioniert es natürlich nicht. Irgendwie hatte ich heute Nacht ein Brett vorm Kopf, ich habe ziemlich lange gebraucht um darauf zu kommen, obwohl ich das ja eigentlich wusste.

Den Quellcode zu meinen Makros gibt's auch zum Download: http://www.outofcoffeeexception.de/downloads/dasBlogCoffeeMacros.zip

Achtung: ich habe den Code irgendwann so um 4 oder 5 Uhr nachts geschrieben. Ich garantiere also für nichts. Der Code ist auch nicht besonders aufgeräumt oder gut kommentiert.

Und wer das Makro mal testen möchte, kann es ja direkt mit einem Kommentar zu diesem Eintrag ausprobieren :)

Technorati tags: , ,
Kick it on dotnet-kicks.de

Slides und Demos zu meinen VSone Vorträgen

Saturday, February 24, 2007 8:44:29 PM (W. Europe Standard Time, UTC+01:00)

Windows CardSpace
Nur Folien (1,2 MB, PDF) | Folien + Demos (9 MB)

ADO.NET Sync Services
Nur Folien (1 MB, PDF) | Folien + Demos (1,6 MB)

Die Demos sind wirklich nur Demos für meine Vorträge, und ansonsten nicht weiter dokumentiert. Ohne den Vortrag bringen sie also möglicherweise nicht viel, außerdem kann es sein dass auch nur die Teile der Demos funktionieren die ich im Vortrag gezeigt habe.

Für die CardSpace Demos müssen die Demo-Zertifikate (Fabrikam.com, ADatum.com usw.) aus den Demos von http://cardspace.netfx3.com installiert sein. CardSpace funktioniert nur mit gültigen Zertifikaten.

Kick it on dotnet-kicks.de

Windows PowerShell ist fertig!

Wednesday, January 31, 2007 8:47:43 PM (W. Europe Standard Time, UTC+01:00)

Schon seit 2 Tagen gibt es die Windows PowerShell in der finalen Version. Das besondere an PowerShell ist, dass es sich um eine objektorientierte Shell handelt. Dadurch kann man aus der PowerShell heraus mit .NET Objekten arbeiten. Außerdem erhält man als Ergebnis eines Kommandos in der Powershell nicht einfach nur eine textuelle Ausgabe des Ergebnisses, sondern Objekte.

Wenn man in einer "klassischen" Shell ein Kommando ausführt, erhält man das Ergebnis des Kommandos als Text, und kann diesen als Eingabe für weitere Kommandos nutzen. Das führt jedoch dazu, dass bestimmte Informationen oft umständlich aus der Ausgabe heraus geparst werden müssen (z.B. mit regulären Ausdrücken), um sie in die gewünschte Form für das nächste Kommando zu bekommen.

Beim Aufruf eines Kommandos in der Windows PowerShell erhält man als Ergebnis ein .NET Objekt (auch wenn man das auf den ersten Blick nicht sieht, denn in der Konsole wird eine textuelle repräsentation dieses Objekts ausgegeben). Dieses Objekt kann man an weitere Kommandos als Eingabeparameter übergeben, und diese können dann auf alle Eigenschaften und Methoden dieses Objekts zugreifen. Umständliches parsen von irgendwelchen Strings ist also nicht nötig.

Das folgende Beispiel zeigt die Version des Betriebssystems an. Ich verwende dazu die statische Eigenschaft OSVersion der Environment Klasse aus dem .NET Framework:

PS C:\Users\Mathias> [Environment]

IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True False Environment System.Object

PS C:\Users\Mathias> [Environment]::OsVersion

Platform ServicePack Version VersionString
-------- ----------- ------- -------------
Win32NT 6.0.6000.0 Microsoft Windows NT 6.0.6...

PS C:\Users\Mathias> [Environment]::OsVersion.VersionString
Microsoft Windows NT 6.0.6000.0
PS C:\Users\Mathias> [Environment]::OsVersion.Version

Major Minor Build Revision
----- ----- ----- --------
6 0 6000 0

PS C:\Users\Mathias> [Environment]::OsVersion.Version.Major
6

Weitere Informationen zum Thema PowerShell gibt es z.B. unter:
http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx
http://blogs.msdn.com/powershell/

Technorati tags: , , ,
Kick it on dotnet-kicks.de

Studienarbeit

Saturday, November 25, 2006 7:29:48 PM (W. Europe Standard Time, UTC+01:00)

Ich habe noch weniger als eine Woche übrig und bin leider immer noch nicht fertig :(. Bis zum 01.12. habe ich sicher noch einige lange Nächte vor mir, aber es ist noch zu schaffen. Aber woran arbeite ich eigentlich?

Also mal ganz vereinfacht und an einem Beispiel erklärt geht es darum, dass aus einem Diagramm wie diesem hier (ein Visueller Kontrakt)

Spec#-Code erzeugt werden soll, der in etwa (die Beispiele sind nicht 100%ig gleich) so aussieht:

1 public Guid AddCartItem(System.Guid cartId, System.Guid productId, System.Int32 quantity) 2 requires 3 exists 4 { 5 Product product in this.ProductList; 6 Helper.IsEqual(product.ProductId, productId) 7 && exists 8 { 9 Cart cart in this.CartList; 10 Helper.IsEqual(cart.CartId, cartId) 11 && !exists 12 { 13 CartItem cartItem in cart.Items; 14 (cartItem.Product == product) 15 && Helper.IsEqual(cart.CartId, cartId) 16 } 17 } 18 }; 19 ensures 20 exists 21 { 22 Product product in this.ProductList; 23 Helper.IsEqual(product.ProductId, productId) 24 && exists 25 { 26 Cart cart in this.CartList; 27 exists 28 { 29 CartItem cartItem in cart.Items; 30 (cartItem.Product == product) 31 && (cartItem.Quantity == quantity) 32 && Helper.IsEqual(cart.CartId, cartId) 33 } 34 } 35 }; 36 { 37 // Code... 38 }

Der Code aus diesem Beispiel wurde schon so generiert, allerdings noch nicht aus dem Diagramm oben (das wird wahrscheinlich die Studienarbeit von Martin) sondern aus einem Objektmodell was das obige Diagramm repräsentiert. Mehr dazu blogge ich wenn ich (endlich) fertig bin.

Kick it on dotnet-kicks.de

AdventureWorks Cinema RssRepeater in eigenen Projekten verwenden

Thursday, June 08, 2006 3:42:26 PM (W. Europe Daylight Time, UTC+02:00)

In AdventureWorks Cinema haben wir zur Generierung von RSS Feeds ein modifiziertes Repeater-Control verwendet. Dieses kann man auch in eigenen Seiten verwenden, um bequem RSS Feeds in eine Seite einzuauen. Unsere RssRepeater-Control befindet sich sogar in einer eigenen Assembly, diese können Sie einfach als Referenz zu eigenen Projekten hinzufügen und verwenden.

  1. Die Assembly die man dafür benötigt ist die AdventureWorks.Cinema.Client.Rss.WebControls.dll. Diese müssen Sie per „Add Reference“ dem eigenen Projekt hinzufügen.
  2. Als nächstes benötigen Sie eine neue leere Seite, über diese soll später der RSS-Feed abrufbar sein. Fügen Sie dem Projekt eine neue Web Form hinzu, z.B. MeinRssFeed.aspx.
  3. In der leeren Seite müssen Sie nun die RssRepeater-Control registrieren. Fügen Sie dazu in der 2. Zeile, also nach <% Page ... %> die folgende Zeile ein:

<%@ Register

Assembly="AdventureWorks.Cinema.Client.Rss.WebControls"

Namespace="AdventureWorks.Cinema.Client.Rss.WebControls"

TagPrefix="adventureworks" %>

 

Dadurch können Sie innerhalb Ihrer Seite alle Controls aus der WebControls-Assembly verwenden.

 

  1. Nun benötigen Sie eine Datenquelle für Ihren RssRepeater. Um Beispielsweise Daten aus einer SQL-Server Datenbank zu verwenden müssen Sie ein SqlDataSource zu ihrer Seite hinzufügen. Die SqlDataSource müssen Sie innerhalb des <Form>...</Form> Tags einfügen. Über das ConnectionString-Attribut müssen Sie einen ConnectionString angeben, über den die Datenbankverbindung konfiguriert wird. Das SelectCommand-Attribut legt das SQL-Statement fest, das zur Abfrage der Daten verwendet wird. Beides lässt sich bequem über einen Wizard konfigurieren. Wechseln Sie dazu in die Design-Ansicht. Die SqlDataSource hat einen SmartTag, wenn Sie diesen öffnen finden Sie dort einen Eintrag „Configure Data Source“. Fertig konfiguriert könnte das SqlDataSource z.B. so aussehen:

<asp:SqlDataSource ID="SqlDataSource1" runat="server"

ConnectionString="<%$ ConnectionStrings:IhrConnectionString%>"

SelectCommand="SELECT [NewsID], [Titel], [Text], [Datum], [Bild] FROM [ugpb_News] ORDER BY [Datum] DESC" />

 

  1. Wechseln Sie nun zurück in die Source-Ansicht. Fügen Sie nun den RssRepeater in Ihre Seite ein, ebenfalls innerhalb des <Form>...</Form> Bereichs. Als DataSourceID müssen Sie die ID Ihrer SqlDataSource angeben. Außerdem können Sie z.B. eine Beschreibung und einen Link für Ihren RSS Feed konfigurieren:

<adventureworks:RssRepeater

ID="NewsRSSRepeater" runat="server"

DataSourceID="SqlDataSource1"

RssDescription="News der .NET User Group Paderborn"

RssLink="http://www.dotnet-paderborn.de"

RssTitle="News der .NET User Group Paderborn">

<ItemTemplate>

</ItemTemplate>

</adventureworks:RssRepeater>

 

  1. Abschließend müssen Sie nur noch festlegen, wie der Inhalt des RSS-Feeds aussehen soll. Wie einzelne Einträge im RSS-Feed aussehen, wird über ein ItemTemplate festgelegt. Ein Item innerhalb eines RSS-Feeds kann verschiedene Elemente enthalten, Details können Sie in der RSS-Spezifikation nachschlagen. Die wichtigsten Elemente sind <title> (Titel des Eintrags), <description> (Der Inhalt) und <pubDate> (Das Datum). Das ItemTemplate für die News der .NET User Group Paderborn sieht z.B. folgendermaßen aus:

 

<ItemTemplate>

<item>

<title><%# Eval("Titel") %></title>

<description><%# Eval("Text") %></description>

<pubDate><%# ((DateTime)DataBinder.Eval(Container.DataItem, "Datum")).ToUniversalTime().ToString("r") %></pubDate>

<guid><%# Eval("NewsID") %></guid>

</item>

</ItemTemplate>

 

Das war auch schon alles, Sie haben nun einen RSS-Feed in Ihre Seite eingebaut! Den übrigen Inhalt der Seite können Sie ignorieren, da der RssRepeater vor dem Rendern die übrige Ausgabe der Seite löscht. Es soll ja schließlich kein HTML erzeugt werden, sondern ein RSS-Feed.

Einige Browser (z.B. der Internet Explorer 7) können RSS Feeds direkt anzeigen. Um dem Browser mitzuteilen, dass es für Ihre Seite einen RSS-Feed gibt, können Sie ein spezielles <link...>-Element in Ihre Seite einbauen (nicht in die Seite die den RSS-Feed erzeugt, sondern in Ihre „richtige“ Web Seite), z.B. so:

<head runat="server">

<title>.NET User Group Paderborn</title>

<link rel="alternate"

type="application/rss+xml"

title="Termine der .NET User Group Paderborn"

href="http://www.dotnet-paderborn.de/TermineRSS.aspx" />

<link rel="alternate"

type="application/rss+xml"

title="News der .NET User Group Paderborn"

href="http://www.dotnet-paderborn.de/NewsRSS.aspx" />

</head>

 

Dadurch kann man in diesem Beispiel im Internet Explorer 7 beide RSS-Feeds direkt über das RSS-Icon in der Toolbar des Internet Explorer auswählen.

Mehr dazu wird es voraussichtlich demnächst auch in einer MSDN Webcast-Serie zu AdventureWorks Cinema geben. Ich werde in einem Webcast die AdventureWorks Cinema Web Seite und das RSS-Projekt vorstellen, von anderen Teammitgliedern wird es weitere Webcasts geben, z.B. zum Server und zum Windows Client. Die genauen Termine gibt es hier im Blog sobald sie feststehen.

Außerdem werden wir AdventureWorks Cinema auf der NRW06 Community-Konferenz vorstellen.

Kick it on dotnet-kicks.de
Previous Page Page 2 of 2 in the CodeBeispiele category