Home  |  Über den Autor  |  Impressum  |  .NET Developer Group Braunschweig  |  Hönigsberg & Düvel

RSS 2.0 | Atom 1.0 | CDF | Send mail to the author(s)  
 Thursday, September 11, 2008
dotnet-braunschweig
 
Das nächste Treffen der .NET Developer Group Braunschweig findet am 16.09.08, ab 19:00 in Kilian's Raffinerie statt. Stefan Lieser wird einen Vortrag zum Thema Software Design halten:
 
Software Design Principles
Referent: Stefan Lieser

Software muss in der Regel über lange Zeiträume gepflegt werden. Die Wartbarkeit einer Software ist daher ein wichtiges Kriterium bei der Entwicklung. Stefan Lieser geht in seinem Vortrag der Frage nach welche Prinzipien bei der Softwareentwicklung hilfreich sind um wartbare Software zu erhalten.
 
Stefan Lieser (http://lieser-online.de) ist regelmäßiger Sprecher bei den .NET Usergroups Köln und Bonn. Er ist der Entwickler des ReSharper NHibernate Plugin (http://code.google.com/p/nhplugin/).
 
Ich bin sehr gespannt auf seinen Vortrag, da dies ein Thema ist, dass alle Entwickler interessieren sollte.
 
posted on 9/11/2008 10:22:42 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]

 Wednesday, September 10, 2008

Gerade bei Golem gelesen. Der T9-Erfinder Cliff Kushler und Randy Marsden haben ein neues System entwickelt um Texte mit einem Touchscreen einzugeben. Das revolutionäre daran ist, dass man die Buchstaben eines Wortes nicht einzelt antippt, sondern mit dem Finger von einem Buchstaben zum nächsten rutscht. Erst bei einem neuen Wort setzt man den Finger ab.

Auf dem Video sieht das ganze schon eindrucksvoll flink aus. Fragt sich nur wie hoch die Lernkurve dabei ist, bis man den "richtigen Schwung" raus hat...

 

posted on 9/10/2008 2:09:07 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]

 Thursday, August 14, 2008
dotnet-braunschweig
 
Das nächste Treffen der .NET Developer Group Braunschweig findet am 19.08.08, ab 19:00 in Kilian's Raffinerie statt. Wir haben diesmal gleich zwei Vorträge:
 
.Net Webseiten lesen lassen – HTML elegant geparst mit dem Html-Agility-Pack
Referent: Werner Mager

Webservices sind mittlerweile der Standard zur Kommunikation über das Internet für Applikationen. Leider steht nicht immer ein Webservice zur Verfügung, so dass einem nichts anderes übrig bleibt, als aus der eigenen Applikation heraus dynamische Html-Seiten zu lesen. Diese sind jedoch in den seltensten Fällen zur programmatischen Auswertung geeignet. Wohlgeformtes XML ist hier nicht zu finden. Mit der Open Source Bibliothek Html-Agility-Pack wird diese Lücke geschlossen. In dem Vortrag von Werner Mager wird die Bibliothek kurz vorgestellt und in praktischen Beispielen gezeigt, wie Daten von verschiedenen Webseiten (Google.de, dotnet-braunschweig.de …) abgefragt und per XPath-Query verarbeitet werden können. Ergänzend wird ein Hilfstool vorgestellt, mit dem die XPath-Abfragen getestet und visualisiert werden können.

VSTO 3.0 - Was gibt es neues in der Office Entwicklung? 
Referent: Lars Keller

Die mit Visual Studio 2008 ausgelieferte VSTO 3.0 Komponente und die frisch erschienenen VSTO Power Tools bringen zahlreiche Neuerungen für die Office Entwicklung mit sich. Ein wichtiges neues Feature in Office 2007 ist die Ribbon UI. Aber wie kann man diese anpassen? Was kann der neue Ribbon-Designer in VS 2008? Kann WPF in Office angewendet werden und wie passt LINQ dazu? Diese und weitere Fragen werden in dem Vortrag von Lars Keller behandelt. Die Theorie wird dabei durch viele kleine Live-Coding Beispiele abgerundet.

Ich freue mich
 
Weitere Infos:
 
posted on 8/14/2008 2:42:54 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]

 Wednesday, August 13, 2008

Neulich habe ich an einem WPF-Projekt gearbeitet und plötzlich wurde mir obige Fehlermeldung im WPF-Designer angezeigt. Komisch, da ich bevor mir der Fehler angezeigt wurde nichts am XAML verändert hatte. Nachdem Rebuild und Neustart von VS2008 und Rechner nichts gebracht hat, habe ich bei Google den Hinweis gefunden, dass eventuell das Löschen der *.suo Datei (Visual Studio Solution User Options) helfen könnte. Was es dann auch tat :)

Einen Tag später hatte ich einen ähnlichen Fehler, nur das diesmal Visual Studio 2008 sofort abschmierte wenn ich es wagte eine XAML-Datei zu öffnen. Hier half nur vor dem Öffnen der XAML-Datei die Solution komplett neu zu builden.

Ich hoffe, dass solche Fehler nach der Installation von .NET 3.5 SP1 diese Fehler nun nicht mehr auftauchen. Ich bin gespannt...

posted on 8/13/2008 7:44:10 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [1]

 Monday, July 14, 2008
dotnet-braunschweig
 
Das nächste Treffen der .NET Developer Group Braunschweig findet am 15.07.08, ab 19:00 Uhr in Kilian's Raffinerie statt.
Unser Mitglied Sico Algermissen hält einen Vortrag zum Thema:
 
Microsoft SQL Server programmieren - Datenbank plus CLR = 2.5-tier Architektur
Viele Datenbankanwendungen sind als 2-tier Architektur realisiert. Das bedeutet, dass die jeweilige Anwendung  direkt mit der Datenbank kommuniziert. Aus diversen Gründen ist es jedoch wünschenswert, 3-tier Architekturen zu verwenden, bei denen eine Serverkomponente als Logikschicht zwischen Client und Datenbank vermittelt. Die Programmierbarkeit des Microsoft SQL Servers (ab 2005) ermöglicht es, anspruchsvolle Logik auf Basis der .Net CLR direkt im SQL-Server zu realisieren, so dass man in diesem Fall von einer 2.5-tier Architektur sprechen kann. Der Vortrag von Sico Algermissen beinhaltet eine Einführung in die Techniken SSIS, .Net Stored Procedures und Userdefined Functions, mit dessen Hilfe eine Logikschicht im SQL Server realisiert werden kann. Durch anschauliche Beispiele und Erfahrungsberichte aus Kundenprojekten werden die Möglichkeiten dieser Technologien verdeutlicht.
posted on 7/14/2008 8:03:17 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]

 Sunday, June 15, 2008
dotnet-braunschweig
 
 
Das nächste Treffen der .NET Developer Group Braunschweig findet am Dienstag, den 17.06.08, ab 19 Uhr statt in Kilian's Raffinerie statt.
 
Dieses Mal werde ich selber einen Vortrag zum Thema Silverlight halten:

Pac-Man meets Silverlight

Mit Version 2.0 von Silverlight geht für viele Webentwickler ein Traum in Erfüllung: Animierte Webanwendungen bauen ohne Flash und das auch noch in der eigenen .NET Lieblingssprache. In meinem Vortrag zeige ich am Beispiel von Pac-Man, wie man mit Silverlight 2.0 (Beta1 Beta2) ein kleines Spiel entwickeln kann. Dabei werde ich auch Expression Design und Expression Blend benutzen und die Zusammenarbeit mit Visual Studio zeigen.
 
 
Die Teilnahme ist wie immer kostenlos und neue Gesichter sind natürlich immer gerne gesehen.
 
 
Weitere Infos:
 

  

posted on 6/15/2008 12:47:28 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]

 Friday, May 16, 2008
dotnet-braunschweig
 
Das nächste Treffen der .NET Developer Group Braunschweig findet am Dienstag, den 20.05.08, ab 19 Uhr statt.
wir treffen uns dann zum ersten Mal in Kilian's Raffinerie. Auf der Homepage gibt es auch eine Anfahrtsbeschreibung. Echte .NET Freaks benutzen aber die Virtual Earth Karte auf der Homepage von .NET Braunschweig ;-)
 
 
Wir feiern bei diesem Treffen das Launch Event für Windows Server 2008, SQL Server 2008 und natürlich Visual Studio 2008.
Es wird Vorträge zum Thema geben und natürlich auch die eine oder ander Lizenz zu gewinnen geben.
 
 
Weitere Infos:
 
 
posted on 5/16/2008 9:44:55 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]

 Thursday, April 03, 2008

Heute will ich mal was dazu schreiben, wie man die LATIKA Knowledgebase an seine Bedürfnisse anpassen kann. Als Beispiel habe ich mir überlegt, wie man YouTube Videos in einen Artikel einbetten kann und zwar mit einem eigens "entwickelten" Tag. Aber vielleicht sollte ich erstmal erklären was ein Tag ist.

 

Für LATIKA haben wir die LATIKA Markup Language (LML) entwickelt, dabei handelt es sich um eine erweiterte Markupsprache, um das Schreiben von Artikeln zu vereinfachen. Beispiele für Standardtags findet man hier.

Ein Tag hat folgenden Aufbau:

[[command:param_1;param_2;...;param_n]subject]

Die Parameter und das Subjekt sind je nach Kommando/Tag optional.

 

Ein Wiki-Tag im Bearbeitenmodus sieht zum Beispiel so aus:

LATIKA Tags unterstützen auch [[wiki]Javascript].

Im Lesemodus wird dann folgendes generiert:

LATIKA Tags unterstützen auch Javascript.

 

Die Tag-Konfiguration befindet sich in der Datei ~\Configuration\TagDecrypter\tagdecrypter.config und hat folgenden Aufbau:


<?xml version="1.0" encoding="utf-8" ?> 
<Tags>  
...  
<Tag> 
    <Command type="wiki">Verlinkt zu Wikipedia.</Command> 
    <Subject optional="false">Der zu verlinkende Text.</Subject> 
    <Params> 
    </Params> 
    <ErrorReplacement>$subject$</ErrorReplacement> 
    <Transformation type="SimpleTagTransformation" replaceEqualTags="true"
      <Html> 
        <![CDATA[<a href="http://de.wikipedia.org/wiki/$subject$" title="Definition von
'$subject$' bei Wikipedia nachschlagen" target="_blank">$subject$</a>]]>
 
      </Html> 
      <Text>$subject$</Text>       
    </Transformation> 
  </Tag> 
... 
</Tags>

 

Diese XML-Datei kann nach belieben verändert und ergänzt werden. Die Tags können von beliebig implementierbaren TagInterpretern verarbeitet werden. Ein TagInterpreter wiederum benutzt verschiedene TagTransformationen um die Tags zu rendern. Standardmässig wird die Knowledgebase nur mit der SimpleTagTransformation ausgeliefert. Mit einer SimpleTagTransformation können wir ein Tag durch einen statischen Inhalt austauschen, der über Parameter angepasst werden kann. Für die Zwecke meines Beispiels reicht eine SimpleTagTransformation aber vollkommen aus.

 

Ein eigenes Tag erstellen

So, kommen wir nun aber zum Thema: Videos von YouTube einbetten mit einem eigenem Tag.

Dafür hab ich mir mal folgendes Video rausgesucht: http://www.youtube.com/watch?v=U4sjNtH3pRI ...Wer mein Blog schon länger liest weiß warum ;-)

Es gibt auf der YouTube-Seite zu (fast) jedem Video ein Stück HTML-Code das man kopieren kann und somit in seine eigene Seite einbauen kann:

<object width="425" height="355">
  <param name="movie" value="http://www.youtube.com/v/U4sjNtH3pRI&hl=en"></param>
  <param name="wmode" value="transparent"></param>
  <embed src="http://www.youtube.com/v/U4sjNtH3pRI&hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed>
</object>

Natürlich könnten wir diesen Code auch nehmen, um ihn direkt in der Codeansicht des Bearbeitenmodus eines Artikels einzufügen. Ein Tag macht das Ganze aber noch etwas "smoother".

 

Die Basis

Als erstes kopieren wir ein beliebiges Tag aus der Tagkonfiguration und fügen es erneut ein. Nehmen wir zum Beispiel das oben bereits erwähnte wiki-Tag und löschen alle Inhalte:

<Tag> 
    <Command type=""></Command> 
    <Subject optional="false"></Subject> 
    <Params> 
    </Params> 
    <ErrorReplacement>$subject$</ErrorReplacement> 
    <Transformation type="SimpleTagTransformation" replaceEqualTags="true"
      <Html> 
        <![CDATA[...]]> 
      </Html> 
      <Text>$subject$</Text>       
    </Transformation> 
  </Tag> 

 

Als nächstes geben wir dem Tag einen Namen (youtube) und fügen den HTML-Code von der YouTube-Seite ein:

<Tag> 
    <Command type="youtube"></Command> 
    <Subject optional="false"></Subject> 
    <Params> 
    </Params> 
    <ErrorReplacement>$subject$</ErrorReplacement> 
    <Transformation type="SimpleTagTransformation" replaceEqualTags="true"
      <Html> 
        <![CDATA[<object width="425" height="355">
<param name="movie" value="http://www.youtube.com/v/U4sjNtH3pRI&hl=en"></param>
<param name="wmode" value="transparent"></param>
<embed src=http://www.youtube.com/v/U4sjNtH3pRI&hl=en" type="application/x-shockwave-flash"
wmode="transparent" width="425" height="355"></embed>
</object>]]>
 
      </Html> 
      <Text>$subject$</Text>       
    </Transformation> 
  </Tag> 

 

Der Code (U4sjNtH3pRI) über den das Video identifiziert wird, habe ich schwarz markiert. Dies sind die einzigen Stellen an denen sich der Code von den Videos unterscheidet.

Unser Tag könnte also wie folgt aussehen [[youtube:U4sjNtH3pRI]]

 

Dafür müssen wir aber noch einen erforderlichen Parameter definieren und an den entsprechenden Stellen einsetzen. Da wir kein Subjekt benötigen müssen wir das entsprechende Attribut auf "true" setzen.

Schließlich fügen wir für das Kommando und das Subjekt einen beschreibenden Text ein. Dies ist wichtig, da aus der Konfigurationsdatei auch gleichzeitig der Hilfetext für die Tags generiert wird. Jedes neue Tag das wir erstellen erscheint also auch automatisch in der Taghilfe (siehe Ende des Artikels).

 

<Tag> 
    <Command type="youtube">Einbetten eines YouTube-Videos.</Command> 
    <Subject optional="true"></Subject> 
    <Params> 
      <Param id="1" optional="false">Eindeutiger Code des Videos der aus dem URL (Parameter "v=") kopiert werden kann.</Param>
    </Params> 
    <ErrorReplacement>$subject$</ErrorReplacement> 
    <Transformation type="SimpleTagTransformation" replaceEqualTags="true"
      <Html> 
        <![CDATA[<object width="425" height="355">
<param name="movie" value="http://www.youtube.com/v/$param_1$&hl=en"></param>
<param name="wmode" value="transparent"></param>
<embed src=http://www.youtube.com/v/$param_1$&hl=en" type="application/x-shockwave-flash"
wmode="transparent" width="425" height="355"></embed>
</object>]]>
 
      </Html> 
      <Text>$subject$</Text>       
    </Transformation> 
</Tag> 

 

Nun können wir das Ganze auch mal testen:

 

Bearbeitungsmodus

latika_youtube_01

 

Lesemodus

latika_youtube_02

 

Funktionalität ergänzen

Um das Tag noch ein bisschen weiter auszubauen, habe ich mir überlegt, dass es ganz gut wäre, wenn man noch einen Textlink zur YouTube-Seite einbauen könnte. Weiterhin sollte man auswählen können, ob man nur das Video, nur den Link oder beides anzeigen lassen möchte. Mit ein bisschen Javascript-Unterstützung sieht das fertige Tag wie folgt aus:

 

<Tag> 
    <Command type="youtube">Einbetten eines YouTube-Videos.</Command> 
    <Subject optional="true"></Subject> 
    <Params> 
      <Param id="1" optional="false">Eindeutiger Code des Videos der aus dem URL (Parameter "v=") kopiert werden kann.</Param>
      <Param id="2" optional="true">0 = Video nicht einbetten.</Param>
    </Params> 
    <ErrorReplacement>$subject$</ErrorReplacement> 
    <Transformation type="SimpleTagTransformation" replaceEqualTags="true"
      <Html> 
        <![CDATA[
        <script>
          if("$subject$"!="") {
            document.write('<p><a href="http://www.youtube.com/watch?v=$param_1$" target="_blank">$subject$</a></p>');
          }
          if("$param_2$"!="0") {
            document.write('<object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/$param_1$"></param>
<param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/$param_1$&hl=en" type="application/x-shockwave-flash"
wmode="transparent" width="425" height="355"></embed></object>');
          }
        </script>]]>
      </Html> 
      <Text>$subject$</Text>       
    </Transformation> 
</Tag> 

 

Die Syntax für die 3 Fälle sieht wie folgt aus:

Nur Video
[[youtube:U4sjNtH3pRI]]

Video und Link
[[youtube:U4sjNtH3pRI]How We Do!]

Nur Link
[[youtube:U4sjNtH3pRI;0]How We Do!]

 

Zu guter Letzt werfen wir noch einen Blick auf die dynamisch generierte Hilfe:

latika_youtube_03

 

So, das wars erstmal. Ich denke in einem anderen Blogeintrag werde ich zeigen wie man eine eigene TagTransformation implementieren kann, die etwas mehr kann, als nur statisch Texte auszutauschen.

posted on 4/3/2008 1:51:17 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [1]