<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>xscDevBlog - LastSharp &#38; Co. &#187; Fundstücke</title>
	<atom:link href="http://dev.xscheme.de/category/found/feed/" rel="self" type="application/rss+xml" />
	<link>http://dev.xscheme.de</link>
	<description>Der xscheme-DevelopmentBlog</description>
	<lastBuildDate>Sun, 23 May 2010 11:40:10 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Zwischenstand: Universal Version Description (UVD) / Entwickler gesucht</title>
		<link>http://dev.xscheme.de/2009/05/zwischenstand-universal-version-description-uvd-entwickler-gesucht/</link>
		<comments>http://dev.xscheme.de/2009/05/zwischenstand-universal-version-description-uvd-entwickler-gesucht/#comments</comments>
		<pubDate>Wed, 13 May 2009 14:17:12 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Batch]]></category>
		<category><![CDATA[Codeschnipsel]]></category>
		<category><![CDATA[Fundstücke]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Lapicon]]></category>
		<category><![CDATA[Projekte]]></category>
		<category><![CDATA[Theorie]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://dev.xscheme.de/?p=755</guid>
		<description><![CDATA[Ich möchte an dieser Stelle einmal auf den aktuellen Stand des hier begonnenen Projekts verweisen, der sich wie folgt darstellt: Ich habe das UVD-Format weiter ausgearbeitet und angepasst und damit begonnen, eine C#-Bibliothek zu schreiben, die dessen Verarbeitung dient.
Als Beispiel sei die UVD von LastSharp gegeben, die wir im folgenden Codebeispiel mithilfe einer XSL-Transformation (DescriptionPage.xsl) [...]]]></description>
			<content:encoded><![CDATA[<p>Ich möchte an dieser Stelle einmal auf den aktuellen Stand des <a href="http://dev.xscheme.de/2009/05/universal-version-description-uvd/">hier</a> begonnenen Projekts verweisen, der sich wie folgt darstellt: Ich habe das UVD-Format weiter ausgearbeitet und angepasst und damit begonnen, eine C#-Bibliothek zu schreiben, die dessen Verarbeitung dient.</p>
<p>Als Beispiel sei die <a href="http://dev.xscheme.de/uvd/lastsharp.uvd.xml">UVD von LastSharp</a> gegeben, die wir im folgenden Codebeispiel mithilfe einer XSL-Transformation (<a href="http://dev.xscheme.de/uvd/DescriptionPage.xsl">DescriptionPage.xsl</a>) in eine HTML-Datei verwandeln. Das soll illustrieren, wie einfach die Verwendung von UVD sein kann, wenn entsprechende Bibliotheken vorhanden sind:</p>
<pre class="c-sharp:collapse" name="code">UVD lastsharp = UVD.Create("http://dev.xscheme.de/uvd/lastsharp.uvd.xml");
lastsharp.Save("c:/lastsharp.htm", "http://dev.xscheme.de/uvd/DescriptionPage.xsl");</pre>
<p>Nun haben wir eine Datei &#8220;lastsharp.htm&#8221;, die <a href="http://dev.xscheme.de/uvd/lastsharp.htm">hier</a> eingesehen werden kann und Beschreibungen in verschiedenen Sprachen und Längen bietet, Downloadlinks, etc&#8230; Außerdem sind (wie man bei der Ansicht des Quelltextes feststellen kann) auch die META-Tags zu Schlüsselwörtern und Beschreibungen bereits gesetzt, sodass die Seite auch für Suchmaschinen verwendbar ist.</p>
<p><span id="more-755"></span>Das UVD-Objekt (s. Code) bietet noch weitere Möglichkeiten, aber ich möchte nun auf den Update-Mechanismus zu sprechen kommen, den man mithilfe von UVD implementieren kann. Eine UVD kann einen Verweis auf die vorhergehende Version, sowie Informationen zum inkrementellen Update (lösche Datei X, aktualisiere Datei Y, &#8230;) enthalten, sodass man durch Untersuchen der Versionsgeschichte jede Version auf den neuesten Stand bringen kann.</p>
<p>Wir verwenden die folgenden (sinnlosen) Dateien zur Demonstration: <a href="http://dev.xscheme.de/uvd/updatetest1.xml">Version 1.2</a> &gt;&gt; <a href="http://dev.xscheme.de/uvd/updatetest2.xml">Version 1.1</a> &gt;&gt; <a href="http://dev.xscheme.de/uvd/updatetest3.xml">Version 1.0</a>. Mithilfe der UVDs läuft ein Update von Version 1.0 auf 1.2 folgendermaßen ab:</p>
<ol>
<li>Extrahiere aus der UVD zu Version 1.2 die URL zu Version 1.1!</li>
<li>Speichere die Update-Informationen in der UVD zu Version 1.1!</li>
<li>Führe nacheinander die Update-Schritte (1.0 &gt;&gt; 1.1) und (1.1 &gt;&gt; 1.2) aus!</li>
</ol>
<p>Die Bibliothek, an der ich gerade arbeite, verwendet hierfür sog. Update-Profile, die festlegen, welche Sprache und welches Betriebssystem für das Update berücksichtigt werden soll. Code:</p>
<pre class="c-sharp:collapse" name="code">UVD version12 = UVD.Create("http://dev.xscheme.de/uvd/updatetest1.xml");
UVDVersion currentVs = new UVDVersion(1, 0); // aktuelle Version
UpdateProfile profile = new UpdateProfile(); // OS und Sprache egal
Update u = profile.CreateUpdate(currentVs, version12);
foreach(UpdateSegment s in u)
{
    Console.WriteLine(s.ToString());
}
u.Execute("c:/program/"); // Programmverzeichnis muss angegeben werden!</pre>
<p>Das liefert folgende Ausgabe:</p>
<pre>[Add: file3.txt] http://www.download.de
[Execute: file3.txt]
[Remove: file4.txt]
[Add: file1.txt] http://www.download.de
[Update: file2.txt] http://www.download.de
[Execute: file3.txt]</pre>
<p>Anschließend werden genau diese Schritte ausgeführt. Bei der Erstellung des Updates wird im übrigen mehr oder weniger intelligent vorgegangen: wenn eine Datei in Version 1.2 gelöscht wird, wird sie in Version 1.1 gar nicht erst hinzugefügt. Und warum eine Datei hinzufügen, wenn sie irgendwann später überschrieben wird? Dieses Verhalten lässt sich über das Update-Profil festlegen. Wenn deaktiviert, lautet die Ausgabe:</p>
<pre><span style="text-decoration: underline;">[Add: file4.txt] http://www.download.de</span>
<span style="text-decoration: underline;">[Add: file2.txt] http://www.download.de</span>
[Add: file3.txt] http://www.download.de
[Execute: file3.txt]
<span style="text-decoration: underline;">[Remove: file4.txt]</span>
[Add: file1.txt] http://www.download.de
<span style="text-decoration: underline;">[Update: file2.txt] http://www.download.de</span>
[Execute: file3.txt]</pre>
<p>Soviel dazu. Was jetzt noch wichtig ist, ist die Übertragung der Bibliothek auf andere Programmiersprachen. <strong>Deswegen suche ich Entwickler, die mit mir gemeinsam UVD auf Java, PHP, etc&#8230; portieren.</strong> Bei Interesse einfach eine E-Mail schreiben an <a href="mailto:Yannick_Scherer@gmx.net">Yannick_Scherer@gmx.net</a>! Aber man sollte sich bewusst sein, dass das einiges an Arbeit bedeutet.</p>
<p>Mehr habe ich vorerst nicht vorzuweisen&#8230; Außer vielleicht das ultimative &#8220;einzeilige&#8221; Update (mit einer sinnvollen Datei funktioniert es dann auch&#8230;):</p>
<pre class="c-sharp:collapse" name="code">new UpdateProfile()
       .CreateUpdate(new UVDVersion(1, 0), UVD.Create("http://dev.xscheme.de/uvd/updatetest1.xml"))
       .Execute("c:/program/");</pre>
]]></content:encoded>
			<wfw:commentRss>http://dev.xscheme.de/2009/05/zwischenstand-universal-version-description-uvd-entwickler-gesucht/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Der große, rote Knopf &#8211; NICHT DRÜCKEN!</title>
		<link>http://dev.xscheme.de/2009/04/der-grose-rote-knopf/</link>
		<comments>http://dev.xscheme.de/2009/04/der-grose-rote-knopf/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 19:52:47 +0000</pubDate>
		<dc:creator>xsc</dc:creator>
				<category><![CDATA[Fundstücke]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://dev.xscheme.de/?p=704</guid>
		<description><![CDATA[Der grundlegendste Beweis für die menschliche Unvollkommenheit ist doch letztendlich, dass man, wenn irgendwo groß, dick, deutlich lesbar Auf keinen Fall machen!!! draufsteht, sofort in einen inneren Monolog/Dialog verfällt, der in etwa so abläuft:
Soll ich?
Nein. Das steht da nicht ohne Grund.
Aber&#8230;
Kein Aber.
Was wohl passiert?
Schlimme Sachen. Schonmal von Tschernobyl gehört?
Ach, ein klein bisschen&#8230;
Denk nicht mal dran!!
Was [...]]]></description>
			<content:encoded><![CDATA[<p>Der grundlegendste Beweis für die menschliche Unvollkommenheit ist doch letztendlich, dass man, wenn irgendwo groß, dick, deutlich lesbar <strong>Auf keinen Fall machen!!! </strong>draufsteht, sofort in einen inneren Monolog/Dialog verfällt, der in etwa so abläuft:</p>
<p>Soll ich?<br />
Nein. Das steht da nicht ohne Grund.<br />
Aber&#8230;<br />
Kein Aber.<br />
Was wohl passiert?<br />
Schlimme Sachen. Schonmal von Tschernobyl gehört?<br />
Ach, ein klein bisschen&#8230;<br />
Denk nicht mal dran!!<br />
Was soll&#8217;s.<br />
<em>AUTSCH!!!</em><br />
<span id="more-704"></span><br />
Dieses Verhalten wurde nun in ein spielerisches Konzept überführt. Und zwar <a href="http://www.i-am-bored.com/bored_link.cfm?link_id=9644">hier</a>. </p>
<p>Und jetzt, genau hinhören, <strong>NICHT AUF DEN ROTEN KNOPF DRÜCKEN!</strong><br />
<object width="480" height="430" data="http://www.85qm.de/up/BigRedButton.swf" type="application/x-shockwave-flash"><param name="movie" value="http://www.85qm.de/up/BigRedButton.swf" /></object><br />
Ich gebe zu, das ist einer meiner weniger vernünftigen Beiträge. Aber zumindest hat es mir Spaß gemacht.</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.xscheme.de/2009/04/der-grose-rote-knopf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>O&#8217;Reilly OpenBooks &#8211; IT-Wissen kostenlos</title>
		<link>http://dev.xscheme.de/2009/04/oreilly-openbooks-it-wissen-kostenlos/</link>
		<comments>http://dev.xscheme.de/2009/04/oreilly-openbooks-it-wissen-kostenlos/#comments</comments>
		<pubDate>Sat, 25 Apr 2009 14:10:33 +0000</pubDate>
		<dc:creator>xsc</dc:creator>
				<category><![CDATA[Fundstücke]]></category>

		<guid isPermaLink="false">http://dev.xscheme.de/?p=638</guid>
		<description><![CDATA[Jeder, der &#8211; sagen wir &#8211; eine neue Programmiersprache lernen, tiefere Einblicke in Systeme erlangen oder schlicht und einfach (&#8220;kurz &#38; gut&#8221;) Informationen zu irgendeinem der zahllosen Themen des Bereichs IT bekommen will, stolpert früher oder später über den Verlag O&#8217;Reilly.  Dessen Bücher genießen einen sehr guten Ruf und auch, wenn die Preise sich normalerweise [...]]]></description>
			<content:encoded><![CDATA[<p>Jeder, der &#8211; sagen wir &#8211; eine neue Programmiersprache lernen, tiefere Einblicke in Systeme erlangen oder schlicht und einfach (&#8220;kurz &amp; gut&#8221;) Informationen zu irgendeinem der zahllosen Themen des Bereichs IT bekommen will, stolpert früher oder später über den Verlag <strong>O&#8217;Reilly</strong>.  Dessen Bücher genießen einen sehr guten Ruf und auch, wenn die Preise sich normalerweise auf einem für den Inhalt angemessenen Niveau befinden, ist es manchmal einfach zu viel, als dass man geschwind und ohne nachzudenken zugreifen würde.</p>
<p>In Stefans <a href="http://allerlei.kilu.de/2009/04/kostenlose-oreilly-buecher-open-books/">Allerlei</a> bin ich nun zufällig über <a href="http://www.oreilly.de/online-books/"><strong>OpenBooks</strong></a> gestolpert. Gut, mag man jetzt sagen, damit bringe ich nicht unbedingt etwas Neues (Zitat auf der Seite: &#8220;Mit unseren OpenBooks geben wir <em>seit vielen Jahren</em> geballtes Wissen an die Community weiter (&#8230;)&#8221;) und ich frage mich auch, warum ich bisher noch nichts davon gehört habe &#8211; aber Fakt ist, dass so eine Plattform eigentlich zu jeder Zeit Erwähnung verdient.</p>
<p>Denn OpenBooks bietet <strong>kostenlose IT-Bücher im PDF-/HTML-Format</strong>, sowohl auf Deutsch als auch auf Englisch. Die Themen umfassen Werkzeuge wie <em>Samba</em> oder <em>GNU make</em>, OpenSource an sich, Linux, etc&#8230; Meine Favoriten auf den ersten Blick sind:  <span id="more-638"></span></p>
<table style="margin: 1em 0pt; width: 600px;" border="0">
<tbody>
<tr>
<td style="padding: 1em; width: 1px;"><a href="http://www.oreilly.de/german/freebooks/rubyonrailsbasger/"><img class="alignnone size-full wp-image-639" title="Praxiswissen Ruby On Rails" src="http://dev.xscheme.de/wp-content/uploads/2009/04/rubyonrailsbasgers.gif" alt="Praxiswissen Ruby On Rails" width="151" height="198" /></a></td>
<td style="padding: 1em; vertical-align: top; font-size: 10pt;"><strong>Praxiswissen Ruby on Rails,</strong> Deutsch, 2007 PDF (<a href="http://examples.oreilly.de/openbooks/pdf_rubyonrailsbasger.pdf">direkter Link</a>)</p>
<div style="margin-top: 1em;"><em> Kurzbeschreibung (von der OpenBooks-Seite)</em>:</div>
<div style="font-size: 8pt; text-align: justify;">Wer Schritt für Schritt wissen möchte, welches Potential im Web-Framework Ruby on Rails steckt, wer in einem Schnelldurchgang die Programmiersprache Ruby lernen möchte, wer durch interessante und praktische Programmierbeispiele die beeindruckenden Features umfassend kennen lernen möchte, der kommt an diesem Buch nicht vorbei.</div>
</td>
</tr>
<tr>
<td style="padding: 1em; width: 1px;"><a href="http://www.oreilly.de/german/freebooks/einmysql2ger/"><img class="alignnone size-full wp-image-640" title="Parktischer Einstieg in MySQL mit PHP" src="http://dev.xscheme.de/wp-content/uploads/2009/04/einmysql2gers.gif" alt="Parktischer Einstieg in MySQL mit PHP" width="151" height="198" /></a></td>
<td style="padding: 1em; vertical-align: top; font-size: 10pt;"><span class="book-title" style="font-weight: bold;"><strong>Praktischer Einstieg in MySQL mit PHP</strong></span>, Deutsch, 2007 PDF (<a href="http://examples.oreilly.de/openbooks/pdf_einmysql2ger.pdf">direkter Link</a>)</p>
<div style="margin-top: 1em;"><em> Kurzbeschreibung (von der OpenBooks-Seite)</em>:</div>
<div style="font-size: 8pt; text-align: justify;">Dieses Buch ist eine MySQL-Einführung für Webentwickler, die eine elegante Datenbanklösung für ihre Webseiten suchen. Es vermittelt praxisnah, wie Sie eine MySQL-Datenbank einrichten, administrieren und mittels PHP-Skripten in die Webseiten einbinden. Für die Neuauflage wurde das Buch komplett überarbeitet, behandelt werden die Versionen MySQL 5.0 und 5.1 (Beta) sowie PHP 5.2.</div>
</td>
</tr>
<tr>
<td style="padding: 1em; width: 1px;"><a href="http://www.oreilly.de/german/freebooks/einmysql2ger/"></a><a href="http://oreilly.com/catalog/wemedia/book/index.csp"><img class="alignnone size-full wp-image-641" title="We, the media" src="http://dev.xscheme.de/wp-content/uploads/2009/04/0596007337_cat.gif" alt="We, the media" width="151" height="198" /></a></td>
<td style="padding: 1em; vertical-align: top; font-size: 10pt;"><span class="book-title" style="font-weight: bold;"><strong>We the Media,</strong></span> Englisch, 2004, HTML (<a href="http://oreilly.com/catalog/wemedia/book/index.csp">direkter Link</a>)</p>
<div style="margin-top: 1em;"><em> Kurzbeschreibung (von der OpenBooks-Seite)</em>:</div>
<div style="font-size: 8pt; text-align: justify;">Grassroots journalists are dismantling Big Media&#8217;s monopoly on the news, transforming it from a lecture to a conversation. Not content to accept the news as reported, these readers-turned-reporters are publishing in real time to a worldwide audience via the Internet. The impact of their work is just beginning to be felt by professional journalists and the newsmakers they cover. In <em>We the Media: Grassroots Journalism by the People, for the People</em>, nationally known business and technology columnist Dan Gillmor tells the story of this emerging phenomenon, and sheds light on this deep shift in how we make and consume the news.</div>
</td>
</tr>
</tbody>
</table>
<p>Ich hoffe, damit habe ich allen, die sich für IT (und auch das Drumherum) interessieren, geholfen. Natürlich nur, falls sie, wie ich, bis heute keine Ahnung davon hatten&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.xscheme.de/2009/04/oreilly-openbooks-it-wissen-kostenlos/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>BadImageFormatException auf Vista x64 (.NET)</title>
		<link>http://dev.xscheme.de/2008/12/badimageformatexception-vista-x64/</link>
		<comments>http://dev.xscheme.de/2008/12/badimageformatexception-vista-x64/#comments</comments>
		<pubDate>Thu, 18 Dec 2008 01:10:48 +0000</pubDate>
		<dc:creator>xsc</dc:creator>
				<category><![CDATA[Fundstücke]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[64bit]]></category>
		<category><![CDATA[BadImageFormatException]]></category>
		<category><![CDATA[visual studio]]></category>

		<guid isPermaLink="false">http://dev.xscheme.de/?p=470</guid>
		<description><![CDATA[Dank einer Support-Anfrage im Forum (hier) bin ich nun anscheinend endlich der Wurzel eines Problems auf der Spur, das einige LastSharp-User auf dieser Welt nervt: die &#8220;settings.ini&#8221; wird nicht gespeichert, die MP3-Wiedergabe funktioniert nicht, manches Mal kommen noch weitere &#8220;Symptome&#8221; hinzu.  In der gestern geposteten Fehlermeldung war nun also von einer &#8220;BadImageFormatException&#8221; die Rede &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>Dank einer Support-Anfrage im Forum (<a href="http://devboard.xscheme.de/read.php?4,70">hier</a>) bin ich nun anscheinend endlich der Wurzel eines Problems auf der Spur, das einige LastSharp-User auf dieser Welt nervt: die &#8220;settings.ini&#8221; wird nicht gespeichert, die MP3-Wiedergabe funktioniert nicht, manches Mal kommen noch weitere &#8220;Symptome&#8221; hinzu.  In der gestern geposteten Fehlermeldung war nun also von einer &#8220;<strong>BadImageFormatException</strong>&#8221; die Rede &#8211; Grund genug, mich schlau zu machen.</p>
<p>Das irrKlang-Forum liefert sogleich den ersten Hinweis (<a href="http://www.ambiera.at/forum/Blah.pl?m-1229368915/">hier</a>):</p>
<p style="padding-left: 30px;">By default, a Visual Studio project is targeted for &#8220;Any CPU.&#8221; Unfortunately, when run on <strong>64-bit Vista</strong>, the default is a 64-bit application, which creates a conflict with the <strong>32-bit DLLs</strong>. Worse, this error only shows up at runtime, when the libraries bind to the executable.</p>
<p>Die Lösung wäre es unter Visual Studio, so wird weiter ausgeführt, die Projekteinstellungen zu öffnen und auf der Registerkarte &#8220;Erstellen&#8221; als Zielplattform &#8220;x86&#8243; auszuwählen. Blöd nur, dass die <a href="http://www.microsoft.com/germany/express/">Visual Studio Express Editions</a> diese Option gar nicht bieten&#8230;</p>
<p><strong>Erster Weg</strong></p>
<p>Ich folge dem Vorgehen von <a href="http://www.jenkz.org/2008/05/10/visual-c-2008-express/">jenkz.org</a> und editiere meine Projektdatei von Hand, indem ich in den zweiten PropertyGroup-Abschnitt die Zeile<code><span><span class="tag"> &lt;</span><span class="tag-name">PlatformTarget</span><span class="tag">&gt;</span><span>x86</span><span class="tag">&lt;/</span><span class="tag-name">PlatformTarget</span><span class="tag">&gt;</span></span> </code>einfüge.</p>
<p><strong>Zweiter Weg</strong></p>
<p>Ich nehme einen kleinen Umweg in Kauf und kann dann doch die Express Edition für diesen Zweck missbrauchen. Hierzu folge man den Instruktionen in <a href="http://wfrobozz.blogspot.com/2008/09/visual-c-2008-express-and-3264-bit.html">Frobozz&#8217;s Blog</a>.</p>
<p><strong>Fazit</strong></p>
<p><span style="text-decoration: line-through;">Ich bin gespannt, ob LastSharp damit 64-Bit-fähig wird&#8230;</span> LastSharp läuft damit auch auf Vista x64.</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.xscheme.de/2008/12/badimageformatexception-vista-x64/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>75 Bausteine für lebhaftere Websites</title>
		<link>http://dev.xscheme.de/2008/10/75-bausteine-fuer-lebhaftere-websites/</link>
		<comments>http://dev.xscheme.de/2008/10/75-bausteine-fuer-lebhaftere-websites/#comments</comments>
		<pubDate>Thu, 09 Oct 2008 18:24:00 +0000</pubDate>
		<dc:creator>xsc</dc:creator>
				<category><![CDATA[Fundstücke]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[web 2.0]]></category>
		<category><![CDATA[webdesign]]></category>

		<guid isPermaLink="false">http://dev.xscheme.de/?p=403</guid>
		<description><![CDATA[Javascript und Ajax sind nicht erst seit gestern in aller Munde: Bibliotheken wie Prototype oder Scriptaculous ermöglichen es schnell und einfach, Webseiten dynamischer zu gestalten, optisch ansprechende Effekte einzubauen, Daten ohne Neuladen der Seite zu verschicken, etc&#8230; Sie sind unzweifelhaft Teil des sog. &#8220;Web 2,0&#8243;, dieser &#8220;neuen&#8221; Version des Internets, die bestimmt ist durch Interaktion, [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-404" style="margin-right: 1em;" title="prototype_logo" src="http://dev.xscheme.de/wp-content/uploads/2008/10/prototype_logo.png" alt="" width="143" height="65" />Javascript und Ajax sind nicht erst seit gestern in aller Munde: Bibliotheken wie <a href="http://www.prototypejs.org/">Prototype</a> oder <a href="http://script.aculo.us/">Scriptaculous</a> ermöglichen es schnell und einfach, Webseiten dynamischer zu gestalten, optisch ansprechende Effekte einzubauen, Daten ohne Neuladen der Seite zu verschicken, etc&#8230; Sie sind unzweifelhaft Teil des sog. &#8220;Web 2,0&#8243;, dieser &#8220;neuen&#8221; Version des Internets, die bestimmt ist durch Interaktion, Kommunikation, Gemeinschaft und nicht zuletzt <em>Comfort&amp;Simplicity</em>. (Ein guter Artikel zu diesem Thema findet sich hier: <a href="http://www.romow.com/internet-blog/elements-of-web-20/">Elements of Web 2.0 (englisch)</a>)</p>
<p style="text-align: center;"><a href="http://devkick.com/lab/galleria/"><img class="size-full wp-image-405 aligncenter" title="galleria" src="http://dev.xscheme.de/wp-content/uploads/2008/10/galleria.jpg" alt="" width="500" height="455" /></a></p>
<p>Vor allem letzter Punkt macht natürlich Eindruck, äußert er sich doch in dynamischen Bildergallerien (z.B. <a href="http://devkick.com/lab/galleria/">Galleria</a>, s. Bild), Unterstützung des Users durch Auto-Complete und Auto-Suggest, Tooltips, sowie einer Menge an kleinen Mini-Applikationen und Widgets, die es einfach machen, die eigene Website um eine ganze Reihe an Funktionalitäten zu erweitern und aufzupeppen.</p>
<p>Die große Anzahl an Möglichkeiten lässt sich auf so wenig Platz natürlich nicht beschreiben, <a href="http://www.smashingmagazine.com/">Smashing Magazine</a> hat dennoch eine Liste mit <strong><a href="http://www.smashingmagazine.com/2008/09/11/75-really-useful-javascript-techniques/">75 (wirklich) nützlichen JavaScript-Techniken (englisch)</a></strong> [<a href="http://www.php-developer-blog.de/50226711/75_wirklich_natzliche_javascripttechniken.php">via</a>] herausgebracht, die ich hiermit jedem ambitionierten Web-Designer wärmstens ans Herz legen will.</p>
<p>Ich verwende selbst einige der dort vorgestellten Techniken (z.B. <a href="http://www.lokeshdhakar.com/projects/lightbox2/">Lightbox 2</a> oder den <a href="http://code.google.com/p/syntaxhighlighter/">Google Syntax Highlighter</a>) und muss sagen, dass in dieser Liste echt noch ein paar weitere Schmuckstücke vertreten sind, die super aussehen, praktisch sind und deshalb nur darauf warten, von mir sobald als möglich ausprobiert zu werden!</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.xscheme.de/2008/10/75-bausteine-fuer-lebhaftere-websites/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LastFmLib.Net</title>
		<link>http://dev.xscheme.de/2008/09/howto-lastfmlibnet/</link>
		<comments>http://dev.xscheme.de/2008/09/howto-lastfmlibnet/#comments</comments>
		<pubDate>Fri, 05 Sep 2008 15:38:29 +0000</pubDate>
		<dc:creator>xsc</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Fundstücke]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[lastfm]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[webservice]]></category>

		<guid isPermaLink="false">http://dev.xscheme.de/?p=277</guid>
		<description><![CDATA[UPDATE 12.12.2008: Veränderungen in den Namespaces von LastFmLib.Net!
Ich habe mich in letzter Zeit viel mit Last.FM beschäftigt, nicht zuletzt wegen meinen beiden Programmen LastSharp und Lea. Aufgrund eines Problems mit letzterem (Tracks/Künstler mit Umlauten machen Schwierigkeiten) habe ich mich ein wenig umgesehen und bin auf eine (angeblich vollständige) Implementierung des Last.FM-APIs in .NET gestoßen: LastFmLib.Net.

Und [...]]]></description>
			<content:encoded><![CDATA[<p><strong>UPDATE 12.12.2008: Veränderungen in den Namespaces von LastFmLib.Net</strong>!</p>
<p>Ich habe mich in letzter Zeit viel mit <a href="http://www.last.fm">Last.FM</a> beschäftigt, nicht zuletzt wegen meinen beiden Programmen <strong>LastSharp</strong> und <strong>Lea</strong>. Aufgrund eines Problems mit letzterem (Tracks/Künstler mit Umlauten machen Schwierigkeiten) habe ich mich ein wenig umgesehen und bin auf eine (angeblich vollständige) Implementierung des Last.FM-APIs in .NET gestoßen: <strong><a href="http://lastfmlibnet.sourceforge.net/">LastFmLib.Net</a></strong>.</p>
<p><span id="more-277"></span></p>
<p>Und weil diese Bibliothek wirklich einzigartig einfach zu verwenden ist (obwohl auch hier die Umlaute noch nicht extra betrachtet werden), möchte ich meine Erfahrungen gerne teilen und eine winzige, deutschsprachige Erklärung zu ihrer Verwendung bzw. Anwendung auf das <a href="http://www.lastfm.de/api/intro">API 2.0</a> schreiben.</p>
<p><strong>Vorbereitung</strong></p>
<p>Jeder, der den Last.FM-Webservice verwenden will, benötigt zuallererst einen öffentlichen und einen dazugehörigen geheimen API-Schlüssel, den man <a href="http://www.lastfm.de/api/account">hier</a> beantragen kann. Da LastFmLib.Net eine Klassenbibliothek für das .NET-Framework ist, wird eine entsprechende Entwicklungsumgebung (z.B. <a href="www.microsoft.com/germany/Express/">Visual C# Express Edition</a>) benötigt, um damit arbeiten zu können.</p>
<p>Hat man einen öffentlichen und einen geheimen API-Schlüssel (Key und Secret) erhalten, so muss man LastFmLib.Net diese beiden mitteilen. Dies geschieht, indem man das <em>LastFmLib.API20.Settings.AuthData</em>-Objekt neu setzt, in C# beispielsweise:</p>
<pre>LastFmLib.General.MD5Hash key
    = new LastFmLib.General.MD5Hash(<strong>"APIKey</strong>", true, Encoding.UTF8);
LastFmLib.General.MD5Hash secret
    = new LastFmLib.General.MD5Hash(<strong>"APISecret"</strong>, true, Encoding.UTF8);
LastFmLib.API20.Settings20.AuthData
    = new LastFmLib.API20.Types.AuthData(key, secret, null);</pre>
<p>Hat man das nun erledigt, kann man (nach der Authentifizierung) auf die einzelnen API-Methoden zugreifen.</p>
<p><strong>Allgemein: Request schicken</strong></p>
<p>In LastFmLib.Net sind alle Anfragen an das API in Klassen gekapselt. Für jede Art von Anfrage (Request) erstellt man also ein entsprechendes Objekt, startet die Verarbeitung, überprüft ob die Anfrage erfolgreich war und verarbeitet das Ergebnis. Alle Requests befinden sich im Namespace <em>LastFmLib.API20.&lt;Art&gt;</em>, wobei &lt;Art&gt; die entsprechende Obergruppe einer Anfrage ist, z.B. &#8220;Auth&#8221;, &#8220;User&#8221;, &#8220;Playlists&#8221;, etc&#8230; Diese Obergruppen sieht man auf der <a href="http://www.lastfm.de/api/intro">API-Seite</a> fettgedruckt in der Spalte links.</p>
<p>In C# würde das also so aussehen:</p>
<pre>LastFmLib.API20.&lt;Art&gt;.&lt;Irgendeine Request&gt; req
    = new LastFmLib.API20.&lt;Art&gt;.&lt;Irgendeine Request&gt;(&lt;notwendige Parameter&gt;);
req.Start();
if (req.Succeeded) {
    // Mach etwas mit dem Ergebnis
} else {
    // Mach etwas mit dem Fehler (req.ErrorMessage)
}</pre>
<p><strong>Authentifizierung</strong></p>
<p>Alles beginnt mit der Anmeldung des Users. Bei Last.FM geht dies in drei Schritten vonstatten:</p>
<ol>
<li>Holen des sog. &#8220;Tokens&#8221;, der sozusagen das Passwort für alle nun kommenden Anfragen darstellt und nur eine begrenzte Zeit gültig ist. Dies geschieht mit der API-Methode <em>getToken()</em>:
<pre>LastFmLib.API20.Auth.AuthGetToken req
    = new LastFmLib.API20.Auth.AuthGetToken();
req.Start();
if (req.Succeeded) {
    // Token speichern
    LastFmLib.API20.Settings20.AuthData.Token = req.Result;
} else {
    // Mach etwas mit dem Fehler
}</pre>
</li>
<li>Zulassung des Programms für den eigenen Last.FM-Account. Hierfür wird der Browser geöffnet, sodass der User sich einloggen und die entsprechende Berechtigung vergeben kann. LastFmLib.Net stellt hierfür auch gleich eine Funktion bereit (1.Parameter: Anwendung unterbrechen, 2. Parameter: Timeout):
<pre>LastFmLib.API20.Settings.AuthData.AskUserToGrantPermissions(false, 0);</pre>
</li>
<li>Holen der Session-Informationen (Benutzername, Session-Key, Subscriber-Status) mit der Methode <em>getSession(token)</em>. Achten Sie darauf, dass dieser Schritt auch wirklich erst nach der Bestätigung im Browser ausgeführt wird, ansonsten klappt das Holen der Informationen nämlich nicht.
<pre>LastFmLib.API20.Auth.AuthGetSession sk =
    new LastFmLib.API20.Auth.AuthGetSession(LastFmLib.API20.Settings20.AuthData.Token, false);
sk.Start();
if (sk.Succeeded)
{
    // Session speichern
    LastFmLib.API20.Settings20.AuthData.Session = sk.Result;
}
else {
    // Mach etwas mit dem Fehler
}</pre>
</li>
</ol>
<p>Wenn diese drei Schritte erfolgreich ausgeführt wurden, kann man die eigentlichen Anfragen starten, immer nach dem oben genannten Muster.</p>
<p><strong>Beispiel: Playlisten eines Users holen</strong></p>
<pre>LastFmLib.API20.User.UserGetPlaylists req =
    new LastFmLib.API20.User.UserGetPlaylists(LastFmLib.API20.Settings20.AuthData.Session.Username);
gp.Start();
if (gp.Succeeded)
{
    foreach (LastFmLib.API20.Types.SimplePlaylist pl in gp.Result) {
        // Playliste verarbeiten
    }
} else {
    // Mach etwas mit dem Fehler
}</pre>
<p><strong>Anmerkungen</strong></p>
<p>Der Aktualität halber sollte man nicht die vorgefertigte DLL von der Website des Entwicklers laden, sondern die neuesten Quelldateien aus dem SVN-Verzeichnis, um daraus die letztendliche Bibliothek zu erstellen. Dies geht mithilfe von <a href="http://subversion.tigris.org/">Subversion</a> und dem Befehl:</p>
<p><code>svn co https://lastfmlibnet.svn.sourceforge.net/svnroot/lastfmlibnet lastfmlibnet</code></p>
<p>Eine entsprechende Dokumentation der Klassenbibliothek findet sich auch im SVN-Verzeichnis. Vor allem, wenn man keine Möglichkeit hat, über die Entwicklungsumgebung Informationen zu einzelnen Funktionen zu erhalten (Parametertypen/-anzahl, Rückgabetyp), sollte man sich darin vertiefen.</p>
<p>Mein Programm <em>Lea </em>(ab Version 1.2) ist dank LastFmLib.Net keine große Sache mehr, dafür (hoffentlich) um einiges stabiler und wartungsfreundlicher.</p>
<p>So, ich hoffe, dieses HowTo hat ein wenig geholfen. Weitere Informationen und natürlich auch Support gibt es auf der <a href="http://lastfmlibnet.sourceforge.net/">Website des Entwicklers</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.xscheme.de/2008/09/howto-lastfmlibnet/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
