<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>UBTBlog</title>
	<atom:link href="http://bletra.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://bletra.wordpress.com</link>
	<description>Tipps und Tricks, Dies &#38; Das für alle ;-) Softwareentwickler/innen, Studierende,  Eltern, Lehrer/innen, ...</description>
	<lastBuildDate>Mon, 16 Jan 2012 07:27:46 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='bletra.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>UBTBlog</title>
		<link>http://bletra.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://bletra.wordpress.com/osd.xml" title="UBTBlog" />
	<atom:link rel='hub' href='http://bletra.wordpress.com/?pushpress=hub'/>
		<item>
		<title>happy new year</title>
		<link>http://bletra.wordpress.com/2012/01/16/happy-new-year/</link>
		<comments>http://bletra.wordpress.com/2012/01/16/happy-new-year/#comments</comments>
		<pubDate>Mon, 16 Jan 2012 07:25:48 +0000</pubDate>
		<dc:creator>bletra</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://bletra.wordpress.com/?p=1210</guid>
		<description><![CDATA[Hallo zusammen, eigentlich viel zu spät möchte ich allen Leserinnen und Lesern noch ein schönes neues Jahr 2012 wünschen und mich für das Interesse im vergangenen Jahr bedanken. 19.000 Besuche in 2011 sind eine beeindruckende Zahl. Die Artikelserie &#8222;von Spaghetticode zu MVVM&#8220; war mit Abstand am häufigsten nachgefragt. Ich werde mich bemühen, bald wieder mehr [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1210&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Hallo zusammen,</p>
<p>eigentlich viel zu spät möchte ich allen Leserinnen und Lesern noch ein schönes neues Jahr 2012 wünschen und mich für das Interesse im vergangenen Jahr bedanken. 19.000 Besuche in 2011 sind eine beeindruckende Zahl. Die Artikelserie &#8222;von Spaghetticode zu MVVM&#8220; war mit Abstand am häufigsten nachgefragt. Ich werde mich bemühen, bald wieder mehr von dieser Art zu bringen oder auch ganz neue Themen beleuchten. Aktuell ist es in diesem Blog leider etwas ruhiger geworden, da eine volle Stelle und Familie doch insgesamt sehr fordernd sind. Ich lese noch viel und arbeite mich in interessante Themen ein, jetzt müssen daraus &#8222;nur&#8220; noch Artikel werden &#8230; Ich hoffe, in den Semesterferien werde ich hier wieder produktiv.</p>
<p>Ich würde mich freuen, wenn Sie Themen, die Sie interessieren, per Mail oder als Kommentar schicken, oder wenn Sie gar einen Post selbst schreiben würden. Im letzten SS gab es einige interessante Posts von Studierenden. In Rücksprache mit dem Autor/der Autorin editiere ich gerne und veröffentliche unter dem angegebenen Namen/Pseudonym.</p>
<p>Viele Grüße und bis bald,</p>
<p>ubt</p>
<br />Einsortiert unter:<a href='http://bletra.wordpress.com/category/uncategorized/'>Uncategorized</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bletra.wordpress.com/1210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bletra.wordpress.com/1210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bletra.wordpress.com/1210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bletra.wordpress.com/1210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bletra.wordpress.com/1210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bletra.wordpress.com/1210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bletra.wordpress.com/1210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bletra.wordpress.com/1210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bletra.wordpress.com/1210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bletra.wordpress.com/1210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bletra.wordpress.com/1210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bletra.wordpress.com/1210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bletra.wordpress.com/1210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bletra.wordpress.com/1210/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1210&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bletra.wordpress.com/2012/01/16/happy-new-year/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/69a9c759ac5ec43eb217edc5d234ef39?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">bletra</media:title>
		</media:content>
	</item>
		<item>
		<title>JavaScript: Globale Variablen bei Event-Handlern</title>
		<link>http://bletra.wordpress.com/2011/11/24/javascript-globale-variablen-bei-event-handlern/</link>
		<comments>http://bletra.wordpress.com/2011/11/24/javascript-globale-variablen-bei-event-handlern/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 18:22:05 +0000</pubDate>
		<dc:creator>bletra</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[globals]]></category>
		<category><![CDATA[handler objektbasiert]]></category>
		<category><![CDATA[id]]></category>
		<category><![CDATA[onclick]]></category>

		<guid isPermaLink="false">http://bletra.wordpress.com/?p=1204</guid>
		<description><![CDATA[Gestern im Praktikum habe ich ein seltsames Verhalten beim Zusammenspiel von JavaScript und HTML kennen gelernt:Innerhalb eines click-Events sind je nach Browser Elemente mit einer id unter dieser id als globale Variable verwendbar. Der aktuelle IE macht dabei alle Ids verfügbar, während Firefox nur die Ids innerhalb des gleichen Formulars kennt. Betrachten Sie hierzu folgendes [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1204&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Gestern im Praktikum habe ich ein seltsames Verhalten beim Zusammenspiel von JavaScript und HTML kennen gelernt:Innerhalb eines click-Events sind je nach Browser Elemente mit einer id unter dieser id als globale Variable verwendbar. Der aktuelle IE macht dabei alle Ids verfügbar, während Firefox nur die Ids innerhalb des gleichen Formulars kennt. Betrachten Sie hierzu folgendes Beispiel:</p>
<p><pre class="brush: xml;">
&lt;h1&gt;Demo Auto-Globals&lt;/h1&gt;
&lt;input type=&quot;text&quot; name=&quot;name2&quot; id=&quot;name2&quot; /&gt;
&lt;form accept-charset=&quot;utf-8&quot; method=&quot;get&quot; action=&quot;demo.html&quot;&gt;
&lt;div&gt;
&lt;label for=&quot;firstName&quot;&gt;Vorname:&lt;/label&gt;&lt;input type=&quot;text&quot; name=&quot;name&quot; id=&quot;firstName&quot; /&gt;&lt;span id=&quot;x&quot;&gt;&lt;/span&gt;
&lt;button onclick=&quot;alert(firstName);&quot;&gt;test von firstName&lt;/button&gt;
&lt;button onclick=&quot;alert(name2);alert(x);&quot;&gt;test von span-Element und input außerhalb&lt;/button&gt;
&lt;/div&gt;
&lt;/form&gt;
</pre></p>
<p>Der erste Button zeigt sowohl im IE als auch im Firefox die Variable firstName als Input-Element an. Beim zweiten Button wird im Firefox nichts ausgegeben, während der IE sowohl das außerhalb des Form-Tags gelegene Input-Element als solches kennt, als auch das span-Tag.<br />
Möchte man diese Variablen dagegen per JavaScript innerhalb des Script-Tags oder innerhalb einer eingebundenen JavaScript-Datei verwenden, so stehen sie nicht zur Verfügung.<br />
Folgender Code zeigt somit nichts an:</p>
<p><pre class="brush: jscript;">
function globals()
{
  alert(firstName);
}
</pre></p>
<p>mit HTML-Code:</p>
<p><pre class="brush: xml;">
&lt;button onclick=&quot;demo();&quot;&gt;input-global in JS unbekannt&lt;/button&gt;
</pre></p>
<p>Falls Sie mit Objektschablonen und globalen &#8222;Instanzen&#8220; arbeiten, dann achten Sie darauf, diese globalen Variablen anders alle alle Ids Ihrer HTML-Tags zu nennen. Wie gesagt, diese nur den Click-Handlern bekannten Globals haben mich sehr überrascht.</p>
<br />Einsortiert unter:<a href='http://bletra.wordpress.com/category/webentwicklung/html/'>HTML</a>, <a href='http://bletra.wordpress.com/category/webentwicklung/javascript-webentwicklung/'>JavaScript</a> Tagged: <a href='http://bletra.wordpress.com/tag/globals/'>globals</a>, <a href='http://bletra.wordpress.com/tag/handler-objektbasiert/'>handler objektbasiert</a>, <a href='http://bletra.wordpress.com/tag/html/'>HTML</a>, <a href='http://bletra.wordpress.com/tag/id/'>id</a>, <a href='http://bletra.wordpress.com/tag/javascript/'>JavaScript</a>, <a href='http://bletra.wordpress.com/tag/onclick/'>onclick</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bletra.wordpress.com/1204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bletra.wordpress.com/1204/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bletra.wordpress.com/1204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bletra.wordpress.com/1204/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bletra.wordpress.com/1204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bletra.wordpress.com/1204/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bletra.wordpress.com/1204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bletra.wordpress.com/1204/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bletra.wordpress.com/1204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bletra.wordpress.com/1204/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bletra.wordpress.com/1204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bletra.wordpress.com/1204/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bletra.wordpress.com/1204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bletra.wordpress.com/1204/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1204&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bletra.wordpress.com/2011/11/24/javascript-globale-variablen-bei-event-handlern/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/69a9c759ac5ec43eb217edc5d234ef39?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">bletra</media:title>
		</media:content>
	</item>
		<item>
		<title>Barrierefreie Formularvalidierung mit JavaScript</title>
		<link>http://bletra.wordpress.com/2011/11/07/barrierefreie-formularvalidierung-mit-javascript/</link>
		<comments>http://bletra.wordpress.com/2011/11/07/barrierefreie-formularvalidierung-mit-javascript/#comments</comments>
		<pubDate>Mon, 07 Nov 2011 10:08:42 +0000</pubDate>
		<dc:creator>bletra</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Usability - Bedienbarkeit]]></category>
		<category><![CDATA[Webentwicklung]]></category>
		<category><![CDATA[Werkzeuge]]></category>
		<category><![CDATA[alert]]></category>
		<category><![CDATA[Barrierefreiheit]]></category>
		<category><![CDATA[className]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[JAWS]]></category>
		<category><![CDATA[Screenreader]]></category>

		<guid isPermaLink="false">http://bletra.wordpress.com/?p=1186</guid>
		<description><![CDATA[Die Validierung von Formularen auf dem Client ist eine Standardaufgabe bei Webapplikationen. Mit Html5 wird es hierfür hilfreiche Attribute geben. Momentan stehen diese jedoch noch nicht in allen Browsern benutzbar zur Verfügung. Daher erfolgt üblicherweise die clientseitige Validierung mit JavaScript, genauer gesagt ECMAScript. Die clientseitige Validierung von Formularen reduziert den Datentransfer und dient somit ausschließlich [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1186&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Die Validierung von Formularen auf dem Client ist eine Standardaufgabe bei Webapplikationen. Mit Html5 wird es hierfür hilfreiche Attribute geben. Momentan stehen diese jedoch noch nicht in allen Browsern benutzbar zur Verfügung. Daher erfolgt üblicherweise die clientseitige Validierung mit JavaScript, genauer gesagt ECMAScript. Die clientseitige Validierung von Formularen reduziert den Datentransfer und dient somit ausschließlich der Benutzerfreundlichkeit – serverseitige Validierung ist dennoch aufgrund von Sicherheitsanforderungen notwendig. In den Genuss der clientseitigen Validierung sollen auch Benutzer kommen, die Hilfsmittel zur Bedienung benötigen, z.B. blinde Menschen, die einen Screenreader benutzen.<br />
Damit stellt sich die Frage, welche Strategie zu verfolgen ist. Zunächst die Anforderungen:</p>
<ol>
<li>Bereits bei der Eingabe soll klar sein, was in dem jeweiligen Feld erwartet wird.</li>
<li>Ist JavaScript deaktiviert, erfolgt die Validierung ausschließlich auf dem Server. Das Formular wird dennoch abgeschickt.</li>
<li>Das Formular lässt sich auch mit der Tastatur allein korrekt ausfüllen und abschicken.</li>
<li>Unvollständig, falsch oder nicht ausgefüllte Formularfelder führen dazu, dass das Formular nicht abgeschickt wird (bei aktiviertem JavaScript).</li>
<li>Fehlermeldungen müssen für alle Benutzer wahrnehmbar und leicht verständlich sein und sind leicht zu korrigieren.</li>
<li>Die clientseitige Validierung ist eine gute Unterstützung für die Benutzer, das Formular effizient auszufüllen. Sie wird nicht als nervig wahrgenommen.</li>
<li>Fehlermeldungen sind leicht an die gewählte Sprache anpassbar (Internationalisierung).</li>
</ol>
<p>Die ersten Forderungen lassen sich einfach umsetzen:</p>
<p><strong>Zu 1.:</strong> Pflichtfelder werden typischerweise mit * markiert, ggf. gibt es zusätzliche Angaben in welchem Format die Eingabe (z.B. Telefon oder Datum) zu erfolgen hat. Damit bei der Eingabe in ein Formularelement auch vorgelesen werden kann, welche Information gewünscht ist, gehört zu jedem Eingabeelement (select, textarea, input type text oder password oder radio oder checkbox) ein Label-Element. Dabei wird das for-Attribut des Labels mit dem id-Attribut des Eingabeelements verknüpft, wie folgendes Beispiel zeigt:</p>
<p><pre class="brush: xml;">
&lt;label for=&quot;lastName&quot;&gt;Nachname:&lt;/label&gt;&lt;input type=&quot;text&quot; name=&quot;name&quot; id=&quot;lastName&quot; value=&quot;&quot; size=&quot;10&quot; /&gt;
</pre></p>
<p><strong>Zu 2.:</strong> Die Validierung wird im onsubmit-Attribut des Form-Tags aufgerufen und nicht an ein change-Ereignis o.ä. gebunden. Wird von der Methode ein &#8222;false&#8220; zurückgegeben, so wird durch die gezeigte Aufrufmethodik die Default-Action, also das Abschicken des Formulars, nicht ausgeführt.</p>
<p><pre class="brush: xml;">
&lt;form action=&quot;script.php&quot; method=&quot;post&quot; accept-charset=&quot;UTF-8&quot; onsubmit=&quot;return formOk();&quot;&gt;
</pre></p>
<p>Alternativ kann hier auch das Event übergeben werden und seit DOM2 mit preventDefault die Ausführung der Default-Action verhindert werden.</p>
<p><strong>Zu 3:</strong> Eingaben und Aktionen der Benutzer sind an entsprechende Formularfelder oder Links gebunden. Diese lassen sich generell mit Tabs fokussieren und durch ein Return wird auch ein click-Ereignis ausgelöst.</p>
<p><strong>Zu 4:</strong> Die in zu 2. verwendete JavaScript-Funktion formOk gibt im Fehlerfall &#8222;false&#8220; zurück. Damit wird die Default-Action des Formulars nicht ausgeführt, d.h. das Formular wird nicht abgeschickt. Bei deaktiviertem JavaScript wird das Formular an den Server geschickt.</p>
<p><strong>Zu 5-7:</strong> Schwieriger ist die Frage, wie die Fehlermeldungen zu kommunizieren sind. Früher wurde hierfür ausschließlich eine alert-Meldung verwendet. Diese fällt dem Benutzer direkt auf und wird auch vom Screenreader direkt vorgelesen. Mehrere alert-Fehlermeldungen werden als nervig empfunden und nachdem die Box weggeklickt wurde, hat man oft auch vergessen, was zu korrigieren ist. Zusätzlich ist also auch eine Markierung (roter Hintergrund, …) der fehlerhaften Eingabeelemente hilfreich. Alert-Boxen werden als „nicht schön“ empfunden und von Designern ungern eingesetzt. Daher werden häufig nur noch entsprechende Fehlertexte und Styleänderungen im HTML direkt vorgenommen. Diese Änderungen werden jedoch von Screenreadern nicht notwendigerweise bemerkt und somit nicht vorgelesen. Folgender Ansatz stellt Designer und Screenreader (getestet mit JAWS und Windows7-System-Reader) gleichermaßen zufrieden und ist daher uneingeschränkt zu empfehlen:<br />
Sie können in Ihrem HTML-Code Fehlermeldungen vorbereiten: Fügen Sie ein a-Tag mit href-Attribut als Fehlermeldung ein und setzen den Focus darauf. Idealerweise fügen Sie für alle fehlerhaften Felder ein a-Tag in eine Liste ein, diese Liste kann ggf. für sehende Menschen versteckt werden. Zusätzlich werden fehlerhafte Felder sichtbar markiert. Folgender Code veranschaulicht die dargestellte Strategie:</p>
<p>HTML-Seite:</p>
<p><pre class="brush: xml;">
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
&lt;title&gt;test&lt;/title&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;demo.js&quot;&gt;&lt;/script&gt;
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;demo.css&quot; /&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;Demo Formularvalidierung&lt;/h1&gt;
&lt;p id=&quot;formwarnings&quot;&gt;
&lt;a href=&quot;#&quot;&gt;Fehler in der Eingabe:&lt;/a&gt;
&lt;ul&gt;
&lt;li  id=&quot;link_name&quot;&gt;&lt;a href=&quot;#name&quot;&gt;Name ist ein Pflichtfeld&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;link_zip&quot;&gt;&lt;a href=&quot;#zip&quot;&gt;Postleitzahl ist ein Pflichtfeld, fünfstellige Zahl&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;form action=&quot;script.php&quot; accept-charset=&quot;utf-8&quot; method=&quot;post&quot; onsubmit=&quot;return isValid();&quot;&gt;
&lt;div&gt;
&lt;label for=&quot;name&quot;&gt;Name *&lt;/label&gt;&lt;input id=&quot;name&quot; name=&quot;name&quot; type=&quot;text&quot; /&gt;
&lt;label for=&quot;zip&quot;&gt;Postleitzahl *&lt;/label&gt;&lt;input id=&quot;zip&quot; name=&quot;name&quot; type=&quot;text&quot; /&gt;
&lt;input type=&quot;submit&quot; value=&quot;abschicken&quot; /&gt;
&lt;/div&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre></p>
<p>CSS:</p>
<p><pre class="brush: css;">
.hideWarning {display:none;}
.showWarning{display:block;}
.warning{border: 1px solid red;}
</pre></p>
<p>JavaScript:</p>
<p><pre class="brush: jscript;">
&quot;use strict&quot;;
function isValid()
{
  var ok = true;
  var pattern = /^[0-9]{5}$/;
  var inputField = document.getElementById(&quot;zip&quot;);
  if (!pattern.test(inputField.value))
  {
    ok = false;
    showWarning(&quot;zip&quot;);
    inputField.focus();
  }
  inputField = document.getElementById(&quot;name&quot;);
  if (inputField.value.length == 0)
  {
    ok = false;
    showWarning(&quot;name&quot;);
    inputField.focus();
  }
  return ok;
}

function showWarning(id)
{
  document.getElementById(id).className = &quot;warning&quot;;
  document.getElementById(&quot;link_&quot; + id).className = &quot;showWarning&quot;;
  document.getElementById(&quot;formwarnings&quot;).className = &quot;showWarning&quot;;
}
</pre></p>
<p>Wie Sie sehen, enthält der JavaScript-Code keine Strings zur Erzeugung von Fehlermeldungen, diese sind im HTML-Code bereits vorbereitet. Damit kann das Script auch in übersetzten HTML-Seiten eingesetzt werden, Internationalisierung ist somit vorbereitet.</p>
<h2>Links zum Thema:</h2>
<ul>
<li><a href="http://www.einfach-fuer-alle.de/wcag2.0/uebersetzungen/WCAG20-TECHS/SCR21/">Übersetzungen von WCAG2.0</a> und im <a title="WCAG2.0, in Englisch" href="http://www.w3.org/TR/WCAG20-TECHS/client-side-script">Original</a></li>
<li><a href="http://webaim.org/techniques/javascript/eventhandlers">barrierefreie Eventhandlers</a></li>
<li><a href="http://www.alistapart.com/articles/waiaria">WAI-ARIA</a></li>
<li>automatischer Test auf Barrierefreiheit:<a href="http://wave.webaim.org/"> WAVE</a></li>
</ul>
<br />Einsortiert unter:<a href='http://bletra.wordpress.com/category/webentwicklung/css/'>CSS</a>, <a href='http://bletra.wordpress.com/category/webentwicklung/html/'>HTML</a>, <a href='http://bletra.wordpress.com/category/webentwicklung/javascript-webentwicklung/'>JavaScript</a>, <a href='http://bletra.wordpress.com/category/webentwicklung/usability-bedienbarkeit/'>Usability - Bedienbarkeit</a>, <a href='http://bletra.wordpress.com/category/webentwicklung/'>Webentwicklung</a>, <a href='http://bletra.wordpress.com/category/webentwicklung/werkzeuge/'>Werkzeuge</a> Tagged: <a href='http://bletra.wordpress.com/tag/alert/'>alert</a>, <a href='http://bletra.wordpress.com/tag/barrierefreiheit/'>Barrierefreiheit</a>, <a href='http://bletra.wordpress.com/tag/classname/'>className</a>, <a href='http://bletra.wordpress.com/tag/dom/'>DOM</a>, <a href='http://bletra.wordpress.com/tag/javascript/'>JavaScript</a>, <a href='http://bletra.wordpress.com/tag/jaws/'>JAWS</a>, <a href='http://bletra.wordpress.com/tag/screenreader/'>Screenreader</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bletra.wordpress.com/1186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bletra.wordpress.com/1186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bletra.wordpress.com/1186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bletra.wordpress.com/1186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bletra.wordpress.com/1186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bletra.wordpress.com/1186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bletra.wordpress.com/1186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bletra.wordpress.com/1186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bletra.wordpress.com/1186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bletra.wordpress.com/1186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bletra.wordpress.com/1186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bletra.wordpress.com/1186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bletra.wordpress.com/1186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bletra.wordpress.com/1186/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1186&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bletra.wordpress.com/2011/11/07/barrierefreie-formularvalidierung-mit-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/69a9c759ac5ec43eb217edc5d234ef39?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">bletra</media:title>
		</media:content>
	</item>
		<item>
		<title>HowTo WPF</title>
		<link>http://bletra.wordpress.com/2011/11/01/howto-wpf/</link>
		<comments>http://bletra.wordpress.com/2011/11/01/howto-wpf/#comments</comments>
		<pubDate>Tue, 01 Nov 2011 20:28:14 +0000</pubDate>
		<dc:creator>bletra</dc:creator>
				<category><![CDATA[C# / VisualStudio]]></category>

		<guid isPermaLink="false">http://bletra.wordpress.com/?p=1183</guid>
		<description><![CDATA[Unter WindowsClient.Net von Microsoft gibt es zu fast allen Fragen rund um WPF kurze Videos. Sie möchten von WinForm auf WPF umsteigen, mit WPF anfangen, haben 10 Minuten nichts zu tun und möchten kurz etwas dazu lernen oder Sie müssen ein konkretes WPF-Problem lösen? Schauen Sie sich die Themen an, es ist sicher etwas dabei, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1183&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Unter <a href="http://windowsclient.net/learn/videos_wpf.aspx">WindowsClient.Net</a> von Microsoft gibt es zu fast allen Fragen rund um WPF kurze Videos. Sie möchten von WinForm auf WPF umsteigen, mit WPF anfangen, haben 10 Minuten nichts zu tun und möchten kurz etwas dazu lernen oder Sie müssen ein konkretes WPF-Problem lösen? Schauen Sie sich die Themen an, es ist sicher etwas dabei, das Ihnen weiter hilft.</p>
<br />Einsortiert unter:<a href='http://bletra.wordpress.com/category/c-visualstudio/'>C# / VisualStudio</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bletra.wordpress.com/1183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bletra.wordpress.com/1183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bletra.wordpress.com/1183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bletra.wordpress.com/1183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bletra.wordpress.com/1183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bletra.wordpress.com/1183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bletra.wordpress.com/1183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bletra.wordpress.com/1183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bletra.wordpress.com/1183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bletra.wordpress.com/1183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bletra.wordpress.com/1183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bletra.wordpress.com/1183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bletra.wordpress.com/1183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bletra.wordpress.com/1183/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1183&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bletra.wordpress.com/2011/11/01/howto-wpf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/69a9c759ac5ec43eb217edc5d234ef39?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">bletra</media:title>
		</media:content>
	</item>
		<item>
		<title>Entwickler/innen gefragt</title>
		<link>http://bletra.wordpress.com/2011/10/31/entwicklerinnen-gefragt/</link>
		<comments>http://bletra.wordpress.com/2011/10/31/entwicklerinnen-gefragt/#comments</comments>
		<pubDate>Mon, 31 Oct 2011 08:18:06 +0000</pubDate>
		<dc:creator>bletra</dc:creator>
				<category><![CDATA[Informatik]]></category>
		<category><![CDATA[Anwendungsentwicklung]]></category>
		<category><![CDATA[Fähigkeiten]]></category>
		<category><![CDATA[Zukunft]]></category>

		<guid isPermaLink="false">http://bletra.wordpress.com/?p=1175</guid>
		<description><![CDATA[Nach einer aktuellen Umfrage von Computerworld werden im nächsten Jahr vorwiegend folgende Fähigkeiten nachgefragt: Softwareentwicklung (insb. Anwendungsentwicklung für mobile Endgeräte): 61 % Projektmanagement: 44% Support: 35% Netzwerktechnik (insb. Cloud-Computing und Virtualisierung): 35 % Business Intelligence (BI): 23% Datenmanagement und Systemintegration: 18% Web 2.0: 18% Sicherheit: 17% Telekommunikation: 9% Grundkenntnisse in den genannten Bereichen sollte jeder [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1175&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Nach einer <a href="http://www.computerworld.com/s/article/358381/9_Hot_Skills_for_2012?source=rss_keyword_indepth">aktuellen Umfrage von Computerworld</a> werden im nächsten Jahr vorwiegend folgende Fähigkeiten nachgefragt:</p>
<ol>
<li>Softwareentwicklung (insb. Anwendungsentwicklung für mobile Endgeräte): 61 %</li>
<li>Projektmanagement: 44%</li>
<li>Support: 35%</li>
<li>Netzwerktechnik (insb. Cloud-Computing und Virtualisierung): 35 %</li>
<li>Business Intelligence (BI): 23%</li>
<li>Datenmanagement und Systemintegration: 18%</li>
<li>Web 2.0: 18%</li>
<li>Sicherheit: 17%</li>
<li>Telekommunikation: 9%</li>
</ol>
<p>Grundkenntnisse in den genannten Bereichen sollte jeder Informatik-Absolvent mitbringen. Wer sich gute Kenntnisse und Methoden in Softwareentwicklung angeeignet hat, kann sich auch in eine andere Entwicklungsumgebung und Programmiersprache einarbeiten. Viele Absolventen fangen als Entwickler an. Diese Studie verdeutlicht wieder einmal, wie wichtig es ist, als Informatiker wirklich programmieren zu können. Denn auch für alle anderen aufgelisteten Fähigkeiten sind Programmierkenntnisse zum Anpassen vorhandener Werkzeuge hilfreich. Für das Projektmanagement wird typischerweise eine entsprechende Berufserfahrung vorausgesetzt.</p>
<br />Einsortiert unter:<a href='http://bletra.wordpress.com/category/hochschule-uni-studierende/informatik-hochschule/'>Informatik</a> Tagged: <a href='http://bletra.wordpress.com/tag/anwendungsentwicklung/'>Anwendungsentwicklung</a>, <a href='http://bletra.wordpress.com/tag/fahigkeiten/'>Fähigkeiten</a>, <a href='http://bletra.wordpress.com/tag/informatik/'>Informatik</a>, <a href='http://bletra.wordpress.com/tag/zukunft/'>Zukunft</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bletra.wordpress.com/1175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bletra.wordpress.com/1175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bletra.wordpress.com/1175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bletra.wordpress.com/1175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bletra.wordpress.com/1175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bletra.wordpress.com/1175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bletra.wordpress.com/1175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bletra.wordpress.com/1175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bletra.wordpress.com/1175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bletra.wordpress.com/1175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bletra.wordpress.com/1175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bletra.wordpress.com/1175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bletra.wordpress.com/1175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bletra.wordpress.com/1175/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1175&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bletra.wordpress.com/2011/10/31/entwicklerinnen-gefragt/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/69a9c759ac5ec43eb217edc5d234ef39?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">bletra</media:title>
		</media:content>
	</item>
		<item>
		<title>Singleton vs. static</title>
		<link>http://bletra.wordpress.com/2011/10/27/singleton-vs-static/</link>
		<comments>http://bletra.wordpress.com/2011/10/27/singleton-vs-static/#comments</comments>
		<pubDate>Thu, 27 Oct 2011 15:53:17 +0000</pubDate>
		<dc:creator>bletra</dc:creator>
				<category><![CDATA[Informatik]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Entwurfsmuster]]></category>
		<category><![CDATA[Singleton]]></category>
		<category><![CDATA[static]]></category>

		<guid isPermaLink="false">http://bletra.wordpress.com/?p=1163</guid>
		<description><![CDATA[In der Vorlesung sprach ein Student den Unterschied zwischen Singletons und statischen Klassen an. Diese Frage möchte ich hier gerne aufgreifen. Methoden und Eigenschaften, die zu einer Klasse gehören, also nicht zu einer einzelnen Instanz, nennt man statisch. Hierfür dient das Schlüsselwort static. Unabhängig von der Anzahl der Instanzen einer Klasse, sind sie einmal vorhanden. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1163&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In der Vorlesung sprach ein Student den Unterschied zwischen Singletons und statischen Klassen an. Diese Frage möchte ich hier gerne aufgreifen.</p>
<p>Methoden und Eigenschaften, die zu einer Klasse gehören, also nicht zu einer einzelnen Instanz, nennt man statisch. Hierfür dient das Schlüsselwort <em>static</em>. Unabhängig von der Anzahl der Instanzen einer Klasse, sind sie einmal vorhanden. Statische Klassen &#8212; genauer gesagt statische Methoden oder Eigenschaften einer Klasse &#8212; können weder als Parameter übergeben noch von einer Methode zurückgegeben werden. Sie lassen sich auch nicht in eine Liste einfügen (z.B. bei Observer/Ereignissen). Daher können sie auch nicht Bestandteil eines Interfaces oder Eigenschaften anderer Klassen sein. Sie können somit nicht im Sinne von Aggregation oder Komposition verwendet werden. Ein Casten ist ebenfalls nicht möglich, da es keine Instanz zum Casten gibt.</p>
<p>Singleton ist ein Entwurfsmuster, dessen Implementation dafür sorgt, dass es nur eine Instanz dieser Klasse geben kann. Nach außen hin verhält sich ein Singleton wie eine normale Instanz einer Klasse, kann also als Parameter etc. verwendet werden. Ein Singleton kann auch einfach serialisiert werden und so z.B. remote oder in Webdiensten verwendet werden. Im Prinzip ist es ein Geheimnis der Klasse, dass diese einmalig ist, den Nutzern kann es egal sein. Das Singleton-Dasein gehört zur inneren Logik der Klasse. Das Testen von Singletons kann insbesondere bei asynchronen Prozessen schwierig sein. Die Implementation eines Singletons verwendet typischerweise eine statische Eigenschaft. Singletons lassen sich einfach durch polymorphe Klassen austauschen und somit gut bei automatischen Tests durch &#8222;Scheinobjekte&#8220; (mocking) simulieren.</p>
<p>Funktionsbibliotheken (z.B. mathematische Funktionen wie sin etc.) werden oft und sinnvollerweise als statische Methoden implementiert, da ihr Rückgabewert nur von den übergebenen Parametern abhängt. Singletons kommen im Kontext von Logging, Authorisierung, Monitoring, Druckaufträge und anderen Diensten zum Einsatz. Hier ist es wichtig, dass es ein hauptverantwortliches Objekt, eben das Singleton gibt. Beide Technologien werden manchmal verwendet, um globale Variablen &#8222;einzuschmuggeln&#8220;, hier ist natürlich Vorsicht geboten.</p>
<p>Bzgl. der Performance gibt es unterschiedliche Aussagen und je nach Implementation wird ein Singleton erst dann erzeugt, wenn es tatsächlich benötigt wird, während statische Eigenschaften direkt im Speicher angelegt werden. Im Allgemeinen, werden diese Performancedetails jedoch nicht als Argument für die eine odere andere Variante angeführt. Die Verwendung von Singleton bzw. statischen Methoden sollte sich an der Semantik und der geplanten Verwendung orientieren und damit aus dem Zusammenhang ergeben.</p>
<p>Links zum Thema:</p>
<ul>
<li><a href="http://de.wikipedia.org/wiki/Singleton_(Entwurfsmuster)" title="Singleton bei Wikipedia">Wikipedia</a></li>
<li><a href="http://www.dofactory.com/Patterns/Patterns.aspx" title="Singleton bei dofactory">.Net Design Patterns</a></li>
<li><a href="http://martinfowler.com/bliki/StaticSubstitution.html" title="Martin Fowler">Martin Fowler</a></li>
</ul>
<br />Einsortiert unter:<a href='http://bletra.wordpress.com/category/hochschule-uni-studierende/informatik-hochschule/'>Informatik</a> Tagged: <a href='http://bletra.wordpress.com/tag/design-pattern/'>Design Pattern</a>, <a href='http://bletra.wordpress.com/tag/entwurfsmuster/'>Entwurfsmuster</a>, <a href='http://bletra.wordpress.com/tag/singleton/'>Singleton</a>, <a href='http://bletra.wordpress.com/tag/static/'>static</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bletra.wordpress.com/1163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bletra.wordpress.com/1163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bletra.wordpress.com/1163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bletra.wordpress.com/1163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bletra.wordpress.com/1163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bletra.wordpress.com/1163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bletra.wordpress.com/1163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bletra.wordpress.com/1163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bletra.wordpress.com/1163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bletra.wordpress.com/1163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bletra.wordpress.com/1163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bletra.wordpress.com/1163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bletra.wordpress.com/1163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bletra.wordpress.com/1163/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1163&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bletra.wordpress.com/2011/10/27/singleton-vs-static/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/69a9c759ac5ec43eb217edc5d234ef39?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">bletra</media:title>
		</media:content>
	</item>
		<item>
		<title>Weboberflächen mit Selenium automatisiert testen</title>
		<link>http://bletra.wordpress.com/2011/10/19/weboberflachen-mit-selenium-automatisiert-testen/</link>
		<comments>http://bletra.wordpress.com/2011/10/19/weboberflachen-mit-selenium-automatisiert-testen/#comments</comments>
		<pubDate>Wed, 19 Oct 2011 15:10:47 +0000</pubDate>
		<dc:creator>bletra</dc:creator>
				<category><![CDATA[Webentwicklung]]></category>
		<category><![CDATA[Werkzeuge]]></category>

		<guid isPermaLink="false">http://bletra.wordpress.com/?p=1143</guid>
		<description><![CDATA[Im Praktikum der Veranstaltung &#8222;Entwicklung webbasierter Anwendungen&#8220;  ist eine integrierte webbasierte Anwendung zur Unterstützung eines Pizzaservices zu entwickeln. Bei der Bestellung kann der Kunde seine Pizzen aus der Speisekarte auswählen und in einen Warenkorb übernehmen. Die Applikation ist bewusst einfach gehalten, um anhand dieses Beispiels exemplarisch alle wesentlichen Technologien zu erarbeiten und die Aufgabe strukturiert [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1143&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Im Praktikum der Veranstaltung &#8222;Entwicklung webbasierter Anwendungen&#8220;  ist eine integrierte webbasierte Anwendung zur Unterstützung eines Pizzaservices zu entwickeln. Bei der Bestellung kann der Kunde seine Pizzen aus der Speisekarte auswählen und in einen Warenkorb übernehmen.<br />
<img class="alignleft" title="Bild Warenkorb" src="http://bletra.files.wordpress.com/2011/10/seleniumbspwarenkorb.png?w=150&#038;h=147" alt="" width="150" height="147" /><br />
Die Applikation ist bewusst einfach gehalten, um anhand dieses Beispiels exemplarisch alle wesentlichen Technologien zu erarbeiten und die Aufgabe strukturiert und wiederverwendbar zu entwickeln. Als Warenkorb wird daher eine einfache List-Box (HTML-Tag: Select) gewählt, in die die Pizzen als Option-Elemente eigefügt werden. Ein beispielhaft gefüllter Warenkorb (ohne Design) zeigt die Abbildung links.</p>
<p>Wesentlicher Ausschnitt des zugehörigen Markups:</p>
<p><pre class="brush: xml;">
&lt;form ...&gt;
&lt;p&gt;
&lt;select id=&quot;ShoppingCart&quot; ...&gt;
&lt;option ...&gt;Palermo&lt;/option&gt;
&lt;option ...&gt;Hawaii&lt;/option&gt;
&lt;option ...&gt;Vegetaria&lt;/option&gt;
&lt;option ...&gt;Salami&lt;/option&gt;
&lt;/select&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;TotalPrice&quot;&gt;23,50&lt;/span&gt; &amp;euro;&lt;/p&gt;
...
&lt;/form&gt;
</pre></p>
<p>Mit dem Firefox-Addin <a href="http://seleniumhq.org/">Selenium</a> lassen sich sehr einfach Web-Oberflächetests entwickeln. Was Sie hierfür tun müssen beschreiben ich anhand eines einfachen Anwendungsfall der gegebenen Pizzaanwendung.<br />
Gegeben sei folgender Anwendungsfall:<br />
Löschen im Warenkorb: Im Warenkorb kann man alle Pizzen oder auch mehrere ausgewählte Pizzen löschen. Der Preis wird aktualisiert.<br />
Test: Warenkorb füllen mit jeweils einer Palermo, Hawaii, Vegetaria und Salami. Dann die Salami und die Hawaii markieren und diese Auswahl löschen. Im Warenkorb verbleiben Palermo und Vegetaria. Neuer Preis: 13,50 €</p>
<p>Im Folgenden beschreibe ich die Umsetzung des dargestellten Test mit Selenium. Starten Sie hierzu Firefox-&gt;Webentwickler-&gt;Selenium IDE</p>
<p>Rechts-Klicken Sie auf den angelegten Testfall und wählen Sie Properties aus. Vergeben Sie einen sinnvollen Namen. Gehen sie nun in das Tab &#8222;Table&#8220; und drücken Sie den Aufnahmeknopf.<br />
Laden Sie Ihre Bestellseite, legen Sie die Pizzen Palermo, Hawaii, Vegetaria und Salami in den Warenkorb. Markieren Sie Salami und Hawaii im Warenkorb und wählen Sie &#8222;Auswahl löschen&#8220;. Beenden Sie die Testaufzeichnung.<br />
Nun müssen Sie noch überprüfen, ob die richtigen Pizzen im Warenkorb stehen und der Preis stimmt.<br />
Klicken Sie hierzu ans Ende der bisher erzeugten und in der Tabelle angezeigten Befehle und definieren Sie folgenden neuen Befehl:<br />
Command: assertText<br />
Target: TotalPrice<br />
Value: 13,50<br />
Die verbleibenden Pizzen im Select-Feld kann man mit folgendem Befehl überprüfen:<br />
Command: assertSelectOptions<br />
Target: ShoppingCart<br />
Value: Palermo,Vegetaria</p>
<p>Auf diese Weise kann man weitere Testfälle erstellen und in einer Suite speichern. Selenium verwendet hierzu eine leicht verständliche HTML-Struktur. Gut gefällt mir auch die Auto-Vervollständigung, so dass man bei den Asserts recht gut die passenden Befehle findet. Die Referenz der einzelnen Commands ist kompakt und dennoch verständlich gehalten.<br />
Die Tests können einzeln ausgeführt werden oder alle Tests einer &#8222;Suite&#8220; können ausgeführt werden. Es gibt Breakpoints und bei Asserts gibt es im Fehlerfall die übliche Meldung mit dem erwarteten und dem tatsächlichen Wert.</p>
<br />Einsortiert unter:<a href='http://bletra.wordpress.com/category/webentwicklung/'>Webentwicklung</a>, <a href='http://bletra.wordpress.com/category/webentwicklung/werkzeuge/'>Werkzeuge</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bletra.wordpress.com/1143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bletra.wordpress.com/1143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bletra.wordpress.com/1143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bletra.wordpress.com/1143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bletra.wordpress.com/1143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bletra.wordpress.com/1143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bletra.wordpress.com/1143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bletra.wordpress.com/1143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bletra.wordpress.com/1143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bletra.wordpress.com/1143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bletra.wordpress.com/1143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bletra.wordpress.com/1143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bletra.wordpress.com/1143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bletra.wordpress.com/1143/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1143&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bletra.wordpress.com/2011/10/19/weboberflachen-mit-selenium-automatisiert-testen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/69a9c759ac5ec43eb217edc5d234ef39?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">bletra</media:title>
		</media:content>

		<media:content url="http://bletra.files.wordpress.com/2011/10/seleniumbspwarenkorb.png?w=150" medium="image">
			<media:title type="html">Bild Warenkorb</media:title>
		</media:content>
	</item>
		<item>
		<title>Zeitmanagement</title>
		<link>http://bletra.wordpress.com/2011/10/10/zeitmanagement/</link>
		<comments>http://bletra.wordpress.com/2011/10/10/zeitmanagement/#comments</comments>
		<pubDate>Mon, 10 Oct 2011 07:54:52 +0000</pubDate>
		<dc:creator>bletra</dc:creator>
				<category><![CDATA[Hochschule / Uni / Studierende]]></category>

		<guid isPermaLink="false">http://bletra.wordpress.com/?p=1134</guid>
		<description><![CDATA[Im Zuge der Vorlesungsvorbereitung für dieses Semester habe ich einige Links gesammelt, die sich mit dem Thema Zeitmanagement beschäftigen. Ich denke, insbesondere mit dem Bologna-Prozess, also Bachelor und Master und den damit verbundenen hohen zeitlichen Anforderungen, ist es wichtig, effektiv zu arbeiten. Schauen Sie sich die Links an, reflektieren Sie, wie Sie momentan an die [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1134&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Im Zuge der Vorlesungsvorbereitung für dieses Semester habe ich einige Links gesammelt, die sich mit dem Thema Zeitmanagement beschäftigen. Ich denke, insbesondere mit dem Bologna-Prozess, also Bachelor und Master und den damit verbundenen hohen zeitlichen Anforderungen, ist es wichtig, effektiv zu arbeiten. Schauen Sie sich die Links an, reflektieren Sie, wie Sie momentan an die Aufgaben gehen und wählen Sie eine für Sie passende Technik aus. Vielleicht probieren Sie auch unterschiedliche Techniken oder mischen die Ansätze. Ich bin auf Ihre Erfahrungen gespannt!</p>
<p>Ich persönlich habe immer einen Zettel greifbar, auf dem ich alle ToDos notieren kann, eine einfache Txt-Datei auf dem Desktop, in der ich mir Links, Stichworte etc. notiere und in der Vorbereitungszeit natürlich einen Zeitplan. Zu Wochenbeginn räume ich immer meine Ablage und meine Mails auf. Aber, meine Anforderungen sind anders als Ihre.</p>
<p>Ein Student berichtete mir von positiven Erfahrungen mit der Pomodoro-Technik. Wie gehen Sie mit Ihren Aufgaben und Ihrer Zeit um?</p>
<p>Hier nun die Links:</p>
<ul>
<li><a href="http://de.wikipedia.org/wiki/Getting_Things_Done">Getting Things Done</a></li>
<li><a href="http://www.pomodorotechnique.com/">Pomodoro-Technik</a></li>
<li><a href="http://www.studienstrategie.de/">Empfehlungen bei Studienstrategie.de</a></li>
<li><a href="http://gettingresults.com/wiki/Main_Page">Getting Results the Agile Way</a></li>
<li><a href="http://arbeitsblaetter.stangl-taller.at/LERNTECHNIK/Zeitplanung.shtml">Empfehlungen von Werner Stangl</a></li>
</ul>
<p>Wenn Sie im Blick haben möchten, wofür Sie wie viel Zeit verwenden, dann schauen Sie sich <a href="http://bletra.wordpress.com/2009/10/30/wo-ist-meine-zeit-hin/">Klok</a> (auch als Freeware) an.</p>
<br />Einsortiert unter:<a href='http://bletra.wordpress.com/category/hochschule-uni-studierende/'>Hochschule / Uni / Studierende</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bletra.wordpress.com/1134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bletra.wordpress.com/1134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bletra.wordpress.com/1134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bletra.wordpress.com/1134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bletra.wordpress.com/1134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bletra.wordpress.com/1134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bletra.wordpress.com/1134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bletra.wordpress.com/1134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bletra.wordpress.com/1134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bletra.wordpress.com/1134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bletra.wordpress.com/1134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bletra.wordpress.com/1134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bletra.wordpress.com/1134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bletra.wordpress.com/1134/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1134&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bletra.wordpress.com/2011/10/10/zeitmanagement/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/69a9c759ac5ec43eb217edc5d234ef39?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">bletra</media:title>
		</media:content>
	</item>
		<item>
		<title>Das Zusammenfuddeln einer Skybox mittels XNA – C#</title>
		<link>http://bletra.wordpress.com/2011/10/06/das-zusammenfuddeln-einer-skybox-mittels-xna-%e2%80%93-c/</link>
		<comments>http://bletra.wordpress.com/2011/10/06/das-zusammenfuddeln-einer-skybox-mittels-xna-%e2%80%93-c/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 08:19:41 +0000</pubDate>
		<dc:creator>bletra</dc:creator>
				<category><![CDATA[C# / VisualStudio]]></category>
		<category><![CDATA[DefaultLightening]]></category>
		<category><![CDATA[Shader]]></category>
		<category><![CDATA[SkyBox]]></category>

		<guid isPermaLink="false">http://bletra.wordpress.com/?p=1051</guid>
		<description><![CDATA[Autoren: 2 Studierende der Veranstaltung .Net Framework und C# In diesem Artikel werden wir uns an eine Implementierung einer Skybox in XNA herantasten und hilfreiche Tipps geben, wie man diese schnell und unkompliziert in sein eigenes Projekt einbauen kann. Zunächst einmal: Was ist eigentlich eine Skybox? Eine Skybox besteht aus sechs Bildern, die man bildlich [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1051&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Autoren: 2 Studierende der Veranstaltung .Net Framework und C#</strong></p>
<p>In diesem Artikel werden wir uns an eine Implementierung einer Skybox in XNA herantasten und hilfreiche Tipps geben, wie man diese schnell und unkompliziert in sein eigenes Projekt einbauen kann.</p>
<p>Zunächst einmal: Was ist eigentlich eine Skybox?<br />
Eine Skybox besteht aus sechs Bildern, die man bildlich gesprochen auf einen Würfel, auf jede Seite natürlich ein Bild, aufpresst. Hinzu kommt, wie man unten sieht, dass die Skybox, wie auch andere 3D-Objekte aus Meshes besteht. Meshes sind nichts anderes als Ansammlungen von Polygonen, die man nach dem Laden nur noch zeichnen muss:</p>
<p>Codefragment 1:</p>
<p><pre class="brush: csharp;">
foreach (ModelMesh mesh in skyboxModel.Meshes)
{
  foreach (Effect currentEffect in mesh.Effects)
  {
    Matrix worldMatrix = skyboxTransforms[mesh.ParentBone.Index] *
    Matrix.CreateTranslation(cameraPosition);
    currentEffect.CurrentTechnique =
    currentEffect.Techniques[&quot;Textured&quot;];
    currentEffect.Parameters[&quot;xWorld&quot;].SetValue(worldMatrix);
    currentEffect.Parameters[&quot;xView&quot;].SetValue(viewMatrix);

    currentEffect.Parameters[&quot;xProjection&quot;].SetValue(projectionMatrix);

    currentEffect.Parameters[&quot;xTexture&quot;].SetValue(skyboxTextures[i++]);
  }
  mesh.Draw();
}
</pre></p>
<p>Zu den Effekte die in diesem Codefragment benutzt werden kommen wir später noch.</p>
<p>Hier entstand allerdings bereits ein Problem, mit dem wir klarkommen mussten: Unsere sechs Grafiken für die Skybox, die wir mit Hilfe von GIMP hergerichtet hatten, sahen in den Überschneidungsgebieten, also Ecken und Kanten zu den anliegenden Grafiken, nicht gut aus. Man sah jede Kante und spitzzulaufende Ecke.</p>
<p>Somit mussten wir unser Konzept, dass wir wirklich das Schiff in der Skybox bewegen, nochmal umkrempeln. Anstatt die Skybox „festzuhalten“ und das Schiff in ihr zu bewegen, haben wir es genau andersherum gemacht. Das Schiff ist immer an derselben Position, auch wenn man meint, man fliegt in eine Richtung. Wir bewegen alles um das Schiff herum. Somit sind wir der Problematik, eine dynamisch erweiternde Skybox zu bauen, direkt aus dem Weg gegangen. Man muss gestehen, wirklich schön ist diese Lösung nicht, aber praktikabel bei unserem kleinen Projekt.</p>
<p>Allerdings war das leider noch nicht alles. Eine weitere Implementierung muss man noch vornehmen, um diese schöne Weltraumansicht genießen zu können. Die Grafiken müssen natürlich noch irgendwie an die Skybox geklebt werden. Das Ganze machen wir über unsere „Skybox.x“ (Auszug im Anhang). Hier muss man seine 6 Skyboxgrafiken noch in die MeshMaterialList reinbasteln.</p>
<p>Eigentlich war es das dann auch schon. Eigentlich: Wir hatten herausgefunden, dass XNA einen Shader benötigt um Dreiecke zu zeichnen. Sprich: Ohne einen Effekt, kein Bild. Wir haben uns dazu einen BasicShader besorgt und somit nicht nur unsere Dreiecke gezeichnet, sondern auch ein DefaultLightening gewonnen.</p>
<p>Codefragment 2: Implementierung des Shaders</p>
<p><pre class="brush: csharp;">
effect = Content.Load&lt;Effect&gt;(&quot;effects&quot;);
</pre></p>
<p>Dieser Einzeiler reicht schon, um den Effekt zur Verfügung zu stellen.<br />
Je nach Anforderung muss man nun noch die entsprechenden Funktionen aufrufen, um die Effekte anzuwenden. Für das DefaultLightening muss man nur die gleichnamige Funktion aufrufen:</p>
<p>Codefragment 3:</p>
<p><pre class="brush: csharp;">
effect.EnableDefaultLighting();
</pre></p>
<p>Im Codefragment 1 werden vier Effektparameter und eine Effekttechnik verwendet. Diese sind soweit selbsterklärend, sodass die Technik, mit der wir unsere Welt darstellen, auf Texturen basieren. Es gibt auch noch weitere Techniken, die der Shader bereitstellt, zum Beispiel pretransformed, colored, Pointsprites und andere, mit denen wir uns aber nicht weiter auseinandergesetzt haben. Die Parameter, die wir dem Effekt zuweisen sind auch soweit logisch. Wir müssen unserem Effekt natürlich mitteilen, auf welche projektionsMatrix, viewMatrix, worldMatrix und welche Textur er sich bezieht. Somit wird der Effekt auf jedes Bild/Textur, dass durch die foreach-Schleife im Codefragment 1 gezogen wird, angewendet.</p>
<p>Quellen:</p>
<ul>
<li><a href="http://www.riemers.net/eng/Tutorials/XNA/Csharp/series1.php">http://www.riemers.net/eng/Tutorials/XNA/Csharp/series1.php</a> mit Unterseiten</li>
<li><a href="http://www.xnamag.de/articles.php?cid=6">http://www.xnamag.de/articles.php?cid=6</a> mit Unterseiten</li>
<li><a href="http://msdn.microsoft.com/de-de/library/bb198548.aspx">http://msdn.microsoft.com/de-de/library/bb198548.aspx</a></li>
</ul>
<br />Einsortiert unter:<a href='http://bletra.wordpress.com/category/c-visualstudio/'>C# / VisualStudio</a> Tagged: <a href='http://bletra.wordpress.com/tag/defaultlightening/'>DefaultLightening</a>, <a href='http://bletra.wordpress.com/tag/shader/'>Shader</a>, <a href='http://bletra.wordpress.com/tag/skybox/'>SkyBox</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bletra.wordpress.com/1051/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bletra.wordpress.com/1051/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bletra.wordpress.com/1051/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bletra.wordpress.com/1051/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bletra.wordpress.com/1051/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bletra.wordpress.com/1051/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bletra.wordpress.com/1051/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bletra.wordpress.com/1051/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bletra.wordpress.com/1051/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bletra.wordpress.com/1051/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bletra.wordpress.com/1051/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bletra.wordpress.com/1051/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bletra.wordpress.com/1051/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bletra.wordpress.com/1051/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1051&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bletra.wordpress.com/2011/10/06/das-zusammenfuddeln-einer-skybox-mittels-xna-%e2%80%93-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/69a9c759ac5ec43eb217edc5d234ef39?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">bletra</media:title>
		</media:content>
	</item>
		<item>
		<title>WPF: DataSet und DataGrid</title>
		<link>http://bletra.wordpress.com/2011/07/05/wpf-dataset-und-datagrid/</link>
		<comments>http://bletra.wordpress.com/2011/07/05/wpf-dataset-und-datagrid/#comments</comments>
		<pubDate>Tue, 05 Jul 2011 21:24:02 +0000</pubDate>
		<dc:creator>bletra</dc:creator>
				<category><![CDATA[C# / VisualStudio]]></category>
		<category><![CDATA[DataAdapter]]></category>
		<category><![CDATA[DataGrid]]></category>
		<category><![CDATA[DataSet]]></category>
		<category><![CDATA[DataView]]></category>
		<category><![CDATA[MVVM]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://bletra.wordpress.com/?p=1115</guid>
		<description><![CDATA[Nachdem ich mit mit WPF und MVVM beschäftigt habe, stellte sich mir die Frage, wie ein ViewModel mit einem DataGrid kommuniziert. Zunächst experimentierte ich mit INotifyPropertyChanged. Doch hat folgende Überlegung gewonnen, die auch noch leichter zu implementieren ist: Es sollen nicht alle Änderungen sofort in die Datenbank weggeschrieben werden, denn das ist doch gerade der [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1115&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Nachdem ich mit mit WPF und MVVM beschäftigt habe, stellte sich mir die Frage, wie ein ViewModel mit einem DataGrid kommuniziert. Zunächst experimentierte ich mit <em>INotifyPropertyChanged</em>. Doch hat folgende Überlegung gewonnen, die auch noch leichter zu implementieren ist: Es sollen nicht alle Änderungen sofort in die Datenbank weggeschrieben werden, denn das ist doch gerade der Clou eines verbindungslosen Datenobjekts (DataSet), die Benutzer sollen alle Änderungen in Ruhe durchführen und auf Knopfdruck werden diese auf einen Schlag in die Datenbank geschrieben.</p>
<p>Jetzt musste ich nur noch rausfinden, dass als zu bindendes Objekt DataView deutlich besser geeignet ist, als das DataSet selbst und folgender Code läuft wunderbar:</p>
<p><pre class="brush: csharp;">
//MainWindow.cs
InitializeComponent();
DataContext = new DBViewModel();

//DBViewModel.cs
class DBViewModel
{
  private const string CONN_STRING = @&quot;Server=localhost;Database=SQLLectureDemo;Uid=demo;Pwd=geheim;&quot;;
  private const string SELECT_SQL = &quot;SELECT Id, Name, Birthday, Matrikel FROM Student&quot;;
  private ICommand _saveCmd;
  private DataSet _students;

  public DBViewModel()
  {
    _students = ReadDataIntoDataSet();
    _saveCmd = new DelegateCommand((param) =&gt; SaveDataSetChangesToDb());
  }

  public DataView Students
  {
    get { return _students.Tables[0].DefaultView; }
  }

  public ICommand SaveCmd
  {
    get { return _saveCmd; }
  }

  private static DataSet ReadDataIntoDataSet()
  {
    DataSet myDataSet;
    using (MySqlConnection conn = new MySqlConnection(CONN_STRING))
    {
      conn.Open();
      MySqlCommand cmd = new MySqlCommand(SELECT_SQL, conn); //fetches primary key, as needed by commandbuilder
      MySqlDataAdapter myMySqlDataAdapter = new MySqlDataAdapter(cmd);
      myDataSet = new DataSet(); //disconnected storage
      myMySqlDataAdapter.Fill(myDataSet, &quot;Student&quot;);
      myMySqlDataAdapter.Dispose(); //not needed any longer!
      conn.Close();
    }
    return myDataSet;
  }

  private void SaveDataSetChangesToDb()
  {
    using (MySqlConnection conn = new MySqlConnection(CONN_STRING))
    {
      conn.Open();
      MySqlCommand cmd = new MySqlCommand(SELECT_SQL, conn);
      MySqlDataAdapter da = new MySqlDataAdapter(cmd); //select cmd as used to fill the dataset!
      MySqlCommandBuilder builder = new MySqlCommandBuilder(da); //needed to build the commands
      da.Update(_students, &quot;Student&quot;);
      conn.Close();
    }
  }
}
</pre></p>
<p>Mit MainWindow.xaml:</p>
<p><pre class="brush: xml;">
&lt;DataGrid  Height =&quot;250&quot; HorizontalAlignment=&quot;Stretch&quot; Margin=&quot;0&quot;  AutoGenerateColumns=&quot;True&quot;  ItemsSource=&quot;{Binding Path=Students}&quot;  Name=&quot;dataGrid&quot;  AlternatingRowBackground=&quot;#FF1ACE1A&quot; VerticalScrollBarVisibility=&quot;Visible&quot; HorizontalScrollBarVisibility=&quot;Visible&quot; /&gt;
&lt;Button Name=&quot;btnSave&quot; Content=&quot;write changes to database&quot; Command=&quot;{Binding Path=SaveCmd}&quot; /&gt;
</pre></p>
<p>Dabei verwende ich die in Artikel <a href="http://bletra.wordpress.com/2011/05/09/wpf-von-spaghetticode-zu-mvvm-teil-5-von-9/">&#8222;WPF: Von Spaghetticode zu MVVM – Teil 5 von 9&#8243;</a> eingeführte Klasse <em>DelegateCommand</em>.</p>
<p>Das Beispiel greift auf eine MySql-Datenbank zu. Wenn Sie den ConnectionString anpassen und bei den DB-Klassen anstelle des Prefixes <em>MySql</em> nur das Prefix <em>Sql</em> verwenden, so funktioniert das Beispiel auch für den Sql-Server von Microsoft.</p>
<br />Einsortiert unter:<a href='http://bletra.wordpress.com/category/c-visualstudio/'>C# / VisualStudio</a> Tagged: <a href='http://bletra.wordpress.com/tag/dataadapter/'>DataAdapter</a>, <a href='http://bletra.wordpress.com/tag/datagrid/'>DataGrid</a>, <a href='http://bletra.wordpress.com/tag/dataset/'>DataSet</a>, <a href='http://bletra.wordpress.com/tag/dataview/'>DataView</a>, <a href='http://bletra.wordpress.com/tag/mvvm/'>MVVM</a>, <a href='http://bletra.wordpress.com/tag/mysql/'>MySQL</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bletra.wordpress.com/1115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bletra.wordpress.com/1115/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bletra.wordpress.com/1115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bletra.wordpress.com/1115/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bletra.wordpress.com/1115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bletra.wordpress.com/1115/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bletra.wordpress.com/1115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bletra.wordpress.com/1115/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bletra.wordpress.com/1115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bletra.wordpress.com/1115/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bletra.wordpress.com/1115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bletra.wordpress.com/1115/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bletra.wordpress.com/1115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bletra.wordpress.com/1115/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1115&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bletra.wordpress.com/2011/07/05/wpf-dataset-und-datagrid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/69a9c759ac5ec43eb217edc5d234ef39?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">bletra</media:title>
		</media:content>
	</item>
		<item>
		<title>C#, XNA: Kostenloses eBook</title>
		<link>http://bletra.wordpress.com/2011/06/29/c-xna-kostenloses-ebook/</link>
		<comments>http://bletra.wordpress.com/2011/06/29/c-xna-kostenloses-ebook/#comments</comments>
		<pubDate>Wed, 29 Jun 2011 08:34:36 +0000</pubDate>
		<dc:creator>bletra</dc:creator>
				<category><![CDATA[C# / VisualStudio]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[free book]]></category>
		<category><![CDATA[mulitplayer]]></category>
		<category><![CDATA[XNA]]></category>

		<guid isPermaLink="false">http://bletra.wordpress.com/?p=1112</guid>
		<description><![CDATA[Wer eine ausführliche und gut aufgebaute Einführung in XNA sucht, der sollte sich folgendes kostenloses eBook von Rob Miles anschauen: Introduction to Programming Through Game Development Using Microsoft XNA Game Studio Dieses Buch ist ebenfalls dazu geeignet, sich über Spiele in C# und Visual Studio 2010 einzuarbeiten. Jedes Kapitel schließt mit w/f-Fragen ab, deren Lösungen [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1112&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Wer eine ausführliche und gut aufgebaute Einführung in XNA sucht, der sollte sich folgendes kostenloses eBook von Rob Miles anschauen: <a title="PDF des Buchs" href="https://www.facultyresourcecenter.com/curriculum/downloadFile.aspx?ObjectID=8119">Introduction to Programming Through Game Development Using Microsoft XNA Game Studio</a></p>
<p>Dieses Buch ist ebenfalls dazu geeignet, sich über Spiele in C# und Visual Studio 2010 einzuarbeiten. Jedes Kapitel schließt mit w/f-Fragen ab, deren Lösungen (mit Begründungen) am Buchende zu finden sind. Das Buch ist in drei Abschnitte gegliedert:</p>
<ol>
<li>Getting started</li>
<li>Images, Sound and Text</li>
<li>Writing proper games (including multiplayer network games!)</li>
</ol>
<p>Der Autor schreibt, dass das Buch zum Lernen von C# und objektorientierter Programmierung geeignet sei. Nach meiner Einschätzung wird dieses Ziel nicht erreicht.</p>
<br />Einsortiert unter:<a href='http://bletra.wordpress.com/category/c-visualstudio/'>C# / VisualStudio</a> Tagged: <a href='http://bletra.wordpress.com/tag/c/'>C#</a>, <a href='http://bletra.wordpress.com/tag/free-book/'>free book</a>, <a href='http://bletra.wordpress.com/tag/mulitplayer/'>mulitplayer</a>, <a href='http://bletra.wordpress.com/tag/xna/'>XNA</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bletra.wordpress.com/1112/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bletra.wordpress.com/1112/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bletra.wordpress.com/1112/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bletra.wordpress.com/1112/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bletra.wordpress.com/1112/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bletra.wordpress.com/1112/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bletra.wordpress.com/1112/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bletra.wordpress.com/1112/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bletra.wordpress.com/1112/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bletra.wordpress.com/1112/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bletra.wordpress.com/1112/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bletra.wordpress.com/1112/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bletra.wordpress.com/1112/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bletra.wordpress.com/1112/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1112&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bletra.wordpress.com/2011/06/29/c-xna-kostenloses-ebook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/69a9c759ac5ec43eb217edc5d234ef39?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">bletra</media:title>
		</media:content>
	</item>
		<item>
		<title>GameComponents in XNA</title>
		<link>http://bletra.wordpress.com/2011/06/24/gamecomponents-in-xna/</link>
		<comments>http://bletra.wordpress.com/2011/06/24/gamecomponents-in-xna/#comments</comments>
		<pubDate>Fri, 24 Jun 2011 11:14:15 +0000</pubDate>
		<dc:creator>bletra</dc:creator>
				<category><![CDATA[C# / VisualStudio]]></category>
		<category><![CDATA[GameComponent]]></category>
		<category><![CDATA[GameComponents]]></category>
		<category><![CDATA[LoadContent]]></category>
		<category><![CDATA[XNA]]></category>

		<guid isPermaLink="false">http://bletra.wordpress.com/?p=1060</guid>
		<description><![CDATA[Autoren: Daniel Träder und Sebastian Koralewski Bei der Entwicklung eines XNA-Spiels  sind von Entwicklungsstufe zu Entwicklungsstufe immer mehr Objekte zu zeichnen. Diese alle in einer Klasse zu verwirklichen führt  dazu, dass diese schnell unübersichtlich wird. Um dieses Problem modular zu lösen stellt XNA die sogenannten &#8222;GameComponent&#8220;s zu Verfügung.  Damit lässt sich beispielsweise die Hintergrundkarte unseres [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1060&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Autoren: Daniel Träder und Sebastian Koralewski</strong></p>
<p>Bei der Entwicklung eines XNA-Spiels  sind von Entwicklungsstufe zu Entwicklungsstufe immer mehr Objekte zu zeichnen. Diese alle in einer Klasse zu verwirklichen führt  dazu, dass diese schnell unübersichtlich wird. Um dieses Problem modular zu lösen stellt XNA die sogenannten &#8222;GameComponent&#8220;s zu Verfügung.  Damit lässt sich beispielsweise die Hintergrundkarte unseres Autorennspiels verwirklichen.</p>
<p><pre class="brush: csharp;">
public class MapComponent : Microsoft.Xna.Framework.GameComponent
{
  public MapComponent(Game game) : base(game)
  {
  }

  public override void Initialize()
  {
    base.Initialize();
  }

  public override void Update(GameTime gameTime)
  {
    base.Update(gameTime);
  }
}
</pre></p>
<p>Die Funktionen von GameComponents werden automatisch zur passenden Zeit vom XNA Framework aufgerufen, sobald man sie zu einer Collection von Components hinzugefügt hat.</p>
<p>GameComponents realisieren das Initialisieren und das Updaten einer Komponente. Um eine Komponente periodisch mitzeichnen zu lassen, ist das Interface DrawableGameComponent zu verwenden. Dieses erweitert die Klasse um die Funktionen</p>
<p>- Draw(),<br />
- LoadContent(),<br />
- UnloadContent().</p>
<p>Um nun verschiedene Karten benutzen zu können, wird der Konstruktor um einen Identifier erweitert, welcher in der Funktion „LoadContent“ genutzt wird, um die Textur der Karte zu laden. In der Funktion „Draw“ wir die Karte anschließend gezeichnet.</p>
<p><pre class="brush: csharp;">
public class MapComponent : Microsoft.Xna.Framework.DrawableGameComponent
{
  public MapComponent(Game game, string mapIdentifier)
    : base(game)
  {
  }

  public override void Initialize()
  {
    base.Initialize();
  }

  protected override void LoadContent()
  {
    _spriteBatch = new SpriteBatch(base.Game.GraphicsDevice);
    _map = base.Game.Content.Load&lt;Texture2D&gt;(_mapId);
  }

  protected override void UnloadContent()
  {
  }

  public override void Update(GameTime gameTime)
  {
  }

  public override void Draw(GameTime gameTime)
  {
    _spriteBatch.Begin();
    _spriteBatch.Draw(_map, new Vector2(0, 0), _map.Bounds, Color.White, 0f, new Vector2(0, 0), 1f, SpriteEffects.None, 1f);
    _spriteBatch.End();
  }
}
</pre></p>
<p>Um diese GameComponent nun in der Hauptklasse des Spieles einzufügen muss folgendes getan werden:</p>
<p><pre class="brush: csharp;">
MapComponent map;
public Game1()
{
  map = new MapComponent(this, „PFAD/ZUR/BILD_RESSOURCE “);
  Components.Add(map);
}
</pre></p>
<p>Das war alles, den Rest erledigt XNA automatisch.</p>
<p>Ein gutes Tutorial zu XNA-GameComponet findet man unter: <a href="http://www.xnamag.de/article.php?aid=16">http://www.xnamag.de/article.php?aid=16</a></p>
<br />Einsortiert unter:<a href='http://bletra.wordpress.com/category/c-visualstudio/'>C# / VisualStudio</a> Tagged: <a href='http://bletra.wordpress.com/tag/gamecomponent/'>GameComponent</a>, <a href='http://bletra.wordpress.com/tag/gamecomponents/'>GameComponents</a>, <a href='http://bletra.wordpress.com/tag/loadcontent/'>LoadContent</a>, <a href='http://bletra.wordpress.com/tag/xna/'>XNA</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bletra.wordpress.com/1060/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bletra.wordpress.com/1060/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bletra.wordpress.com/1060/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bletra.wordpress.com/1060/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bletra.wordpress.com/1060/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bletra.wordpress.com/1060/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bletra.wordpress.com/1060/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bletra.wordpress.com/1060/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bletra.wordpress.com/1060/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bletra.wordpress.com/1060/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bletra.wordpress.com/1060/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bletra.wordpress.com/1060/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bletra.wordpress.com/1060/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bletra.wordpress.com/1060/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1060&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bletra.wordpress.com/2011/06/24/gamecomponents-in-xna/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/69a9c759ac5ec43eb217edc5d234ef39?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">bletra</media:title>
		</media:content>
	</item>
		<item>
		<title>Schnelleinstieg: Crystal Reports</title>
		<link>http://bletra.wordpress.com/2011/06/23/schnelleinstieg-crystal-reports/</link>
		<comments>http://bletra.wordpress.com/2011/06/23/schnelleinstieg-crystal-reports/#comments</comments>
		<pubDate>Thu, 23 Jun 2011 09:25:18 +0000</pubDate>
		<dc:creator>bletra</dc:creator>
				<category><![CDATA[C# / VisualStudio]]></category>
		<category><![CDATA[Crystal Report]]></category>
		<category><![CDATA[CrystalReport]]></category>
		<category><![CDATA[CrystalReportViewer]]></category>
		<category><![CDATA[DataSet]]></category>
		<category><![CDATA[ReportDocument]]></category>

		<guid isPermaLink="false">http://bletra.wordpress.com/?p=1066</guid>
		<description><![CDATA[Autoren: 2 Studierende der Veranstaltung .Net Framework und C# Ein nützliches Mittel, um Berichte aus verschiedenen Datenquellen zu erstellen, ist Crystal Reports. Als Datenquelle kann man hier verschiedene Datenquellen angeben.  Es ist dann ebenfalls möglich, aus dieser Datenquelle nur eine bestimmte Menge beziehungsweise bestimmte Daten anzeigen zu lassen. In unserem Fall ist die Datenquelle eine [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1066&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Autoren: 2 Studierende der Veranstaltung .Net Framework und C#</strong></p>
<p>Ein nützliches Mittel, um Berichte aus verschiedenen Datenquellen zu erstellen, ist Crystal Reports. Als Datenquelle kann man hier verschiedene Datenquellen angeben.  Es ist dann ebenfalls möglich, aus dieser Datenquelle nur eine bestimmte Menge beziehungsweise bestimmte Daten anzeigen zu lassen. In unserem Fall ist die Datenquelle eine SQL-Datenbank. Eine Möglichkeit, diese Daten darzustellen, besteht darin, zuerst die Daten mittels <em>SqlDataAdapter</em> in ein <em>DataSet</em> zu schreiben und dieses anschließend als XML-Datei abzuspeichern. Danach fügt man zu dem Projekt einen Crystal-Report hinzu und wählt als Quelle diese XML-Datei aus, welche diesem Bericht als Struktur dient. Um nun einen Bericht im <em>CrystalReportViewer</em> anzeigen zu können, erstellt man erst einmal ein <em>ReportDocument</em> und ein <em>DataSet</em>:</p>
<p><pre class="brush: csharp;">
ReportDocument report = new ReportDocument();
DataSet myDataSet = new DataSet();
</pre></p>
<p>Dieses <em>DataSet</em> befüllt man wieder mit einem <em>SqlDataAdapter</em> und lädt dann den <em>CrystalReport</em> und setzt die Datenquelle:</p>
<p><pre class="brush: csharp;">
report.Load(@&quot;CCrystalReport1.rpt&quot;);
report.SetDataSource(myDataSet);
crystalReportViewer1.ReportSource = report;
</pre></p>
<br />Einsortiert unter:<a href='http://bletra.wordpress.com/category/c-visualstudio/'>C# / VisualStudio</a> Tagged: <a href='http://bletra.wordpress.com/tag/crystal-report/'>Crystal Report</a>, <a href='http://bletra.wordpress.com/tag/crystalreport/'>CrystalReport</a>, <a href='http://bletra.wordpress.com/tag/crystalreportviewer/'>CrystalReportViewer</a>, <a href='http://bletra.wordpress.com/tag/dataset/'>DataSet</a>, <a href='http://bletra.wordpress.com/tag/reportdocument/'>ReportDocument</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bletra.wordpress.com/1066/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bletra.wordpress.com/1066/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bletra.wordpress.com/1066/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bletra.wordpress.com/1066/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bletra.wordpress.com/1066/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bletra.wordpress.com/1066/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bletra.wordpress.com/1066/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bletra.wordpress.com/1066/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bletra.wordpress.com/1066/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bletra.wordpress.com/1066/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bletra.wordpress.com/1066/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bletra.wordpress.com/1066/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bletra.wordpress.com/1066/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bletra.wordpress.com/1066/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1066&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bletra.wordpress.com/2011/06/23/schnelleinstieg-crystal-reports/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/69a9c759ac5ec43eb217edc5d234ef39?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">bletra</media:title>
		</media:content>
	</item>
		<item>
		<title>Codeanalyse: Auswählen, erstellen und schreiben eigener Regeln in Visual Studio 2010</title>
		<link>http://bletra.wordpress.com/2011/06/22/codeanalyse-auswahlen-erstellen-und-schreiben-eigener-regeln-in-visual-studio-2010/</link>
		<comments>http://bletra.wordpress.com/2011/06/22/codeanalyse-auswahlen-erstellen-und-schreiben-eigener-regeln-in-visual-studio-2010/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 10:13:05 +0000</pubDate>
		<dc:creator>bletra</dc:creator>
				<category><![CDATA[C# / VisualStudio]]></category>
		<category><![CDATA[BaseIntrospectionRule]]></category>
		<category><![CDATA[Codeanalyse]]></category>
		<category><![CDATA[FixCategories]]></category>
		<category><![CDATA[FxCopSdk]]></category>
		<category><![CDATA[HintPath]]></category>
		<category><![CDATA[MessageLevel]]></category>
		<category><![CDATA[ProblemCollection]]></category>
		<category><![CDATA[Resolution]]></category>
		<category><![CDATA[RuleSet]]></category>
		<category><![CDATA[TargetVisibilities]]></category>
		<category><![CDATA[TypeName]]></category>

		<guid isPermaLink="false">http://bletra.wordpress.com/?p=1069</guid>
		<description><![CDATA[Autoren: Carsten Schorn und Pascal Brause Nachdem Entwickler ihr Projekt geschrieben haben, wünschen sich viele eine Bewertung oder Verbesserungsvorschläge ihres Codes herbei. Dafür gibt es bereits zahlreiche, automatisch generierte Analyestools und Metriken. Visual Studio bietet auch eine solche Form von Codeanalyse an, welche sehr umfangreich ist. Die Hinweise sind hier zahlreich: Sie reichen von der [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1069&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Autoren: Carsten Schorn und Pascal Brause</strong></p>
<p>Nachdem Entwickler ihr Projekt geschrieben haben, wünschen sich viele eine Bewertung oder Verbesserungsvorschläge ihres Codes herbei. Dafür gibt es bereits zahlreiche, automatisch generierte Analyestools und Metriken. Visual Studio bietet auch eine solche Form von Codeanalyse an, welche sehr umfangreich ist. Die Hinweise sind hier zahlreich: Sie reichen von der Sicherheit über Namenkonventionen und Design bis hin zur Performance. Doch wie kann ich das selbst bestimmen?</p>
<h2>Vorhandene Regeln und Regelsätze</h2>
<p>Unter den Projekteigenschaften findet sich der Tab &#8222;Codeanalyse&#8220;. Dort können wir einen von zahlreichen, von Microsoft zu Verfügung gestellten Regelsätzen, auswählen. Ein Regelsatz ist dabei eine Zusammenstellung von Regeln. Wird nun einer der Regelsätze geöffnet, offenbart sich bereits das gesamte Sortiment von vorhandener Regeln.</p>
<p><a href="http://bletra.files.wordpress.com/2011/06/ss11codeanalyse1.png"><img class="aligncenter size-medium wp-image-1074" title="Vorhandene Regeln von VS 2010" src="http://bletra.files.wordpress.com/2011/06/ss11codeanalyse1.png?w=450" alt="" width="450" /></a></p>
<p>Bild 1: Vorhandene Regeln von VS 2010</p>
<p>Nun können wir die uns zusagenden Regeln durch Selektieren zusammenstellen. Möchten wir nun diese Regeln auf unser Projekt anwenden, können wir einfach durch einen Rechtsklick im Projektmappenexplorer auf unser Projekt &#8222;Codeanalyse&#8220; auswählen. Schon prüft VS 2010 unser Projekt auf alle von uns ausgewählten Regeln des gegebenen Regelsatzes.</p>
<h2>Eigene Regelsätze erstellen</h2>
<p>Haben wir unsere Lieblingsregeln gefunden und wollen diese dauerhaft abspeichern, ist dies relativ schnell erledigt. Hierzu die gewünschten Regeln auswählen und anschließend unter &#8222;Datei&#8220; &#8222;speichern unter&#8220; auswählen. Am besten wird diese Datei (*.ruleset) unter dem angebotenen Pfad gespeichert (C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\Rule Sets bei 64-bit Systemen und C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\Rule Sets bei 32-bit Systemen). Wenn wir nun den Namen und die Beschreibung noch ein wenig aufhübschen wollen, können wir die eben abgespeicherte Datei mit einem Texteditor öffnen, editieren und die ersten beiden Zeilen mit folgendem Codefragment ersetzen.</p>
<p><pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;RuleSet Name=&quot;Regelname&quot; Description=&quot;Beschreibung der Regel.&quot; ToolsVersion=&quot;10.0&quot;&gt;
</pre></p>
<p>Nun wird auch in VS 2010 der korrekte Name mit passender Beschreibung angezeigt.</p>
<h2>Eigene Regel schreiben</h2>
<p>Doch was ist, wenn uns die von Microsoft gegebenen Regeln nicht ausreichen, sondern wir unsere eigene, spezielle Regel aufstellen wollen? Hier wird es ein wenig kniffliger, da Microsoft kaum bis gar keine Dokumentation dazu ausgibt. Doch erstmal eine kurze Erklärung, wie das ganze Konstrukt &#8222;eigene Regel&#8220; am einfachsten und effizientesten funktioniert: Wir erstellen ein neues Projekt, schreiben dort die Implementierung der Regel. In eine dazugehörige XML-Datei werden Metadaten hinterlegt, welche mit dem Projekt verknüpft sind. Anschließend bekommen wir eine *.dll-Datei erzeugt, welche unsere Regel darstellt. Zuletzt binden wir diese Regel noch in unseren Regelsatz ein und fertig! Aber alles noch mal Schritt für Schritt:</p>
<ol>
<li>Zuerst müssen wir eine neue Projektmappe erstellen und ein dazugehöriges Klassenbibliotheks-Projekt (welches uns die *.dll-Datei liefert) hinzufügen. Dieses haben wir in unserem Beispiel „MyCustomFxCopRules“ genannt (gleiche Namen von Projektmappe und Projekt sind hier wichtig!).</li>
<li>Nun müssen wir dem Projekt zwei Referenzen einverleiben, ohne welche unsere Regeln nicht funktionieren würden. Diese sind die FxCopSdk.dll und die Microsoft.Cci.dll. Dazu entladen wir unser Projekt (Rechtklick auf das Projekt, „Projekt entladen“) und öffnen die *.csproj- Datei (Rechtsklick auf das entladene Projekt).</li>
<li>Wir fügen dann folgenden Code in die <span style="color:#993300;">&lt;ItemGroup&gt;</span> ein:</li>
</ol>
<p><pre class="brush: xml;">
&lt;Reference Include=&quot;FxCopSdk&quot;&gt;
  &lt;HintPath&gt;$(CodeAnalysisPath)\FxCopSdk.dll&lt;/HintPath&gt;
  &lt;Private&gt;False&lt;/Private&gt;
&lt;/Reference&gt;
&lt;Reference Include=&quot;Microsoft.Cci&quot;&gt;
  &lt;HintPath&gt;$(CodeAnalysisPath)\Microsoft.Cci.dll&lt;/HintPath&gt;
  &lt;Private&gt;False&lt;/Private&gt;
&lt;/Reference&gt;
</pre></p>
<ol start="4">
<li>Nachdem wir gespeichert haben, laden wir das Projekt wieder (Rechtsklick auf das Projekt, “Projekt erneut laden“).</li>
<li>Jetzt müssen wir die erwähnte XML-Datei anlegen und mit Inhalt füllen. Dazu im Projektmappenexplorer eine XML-Datei hinzufügen (Rechtklick auf das Projekt, „Hinzufügen“, „Neues Element“, „XML-Datei“ auswählen). Diese haben wir hier „RuleMetadata.xml“ genannt.</li>
<li>In diese XML-Datei stecken wir den unten stehenden Code. <span style="color:#993300;">Resolution</span> entspricht hier dem Text, der im Fehlerliste-Fenster von VS 2010 angezeigt wird. <span style="color:#993300;">MessageLevel</span> besagt, was ausgeworfen werden soll, wenn die Regel eintritt. Ebenso <span style="color:#993300;">FixCategories</span>.</li>
</ol>
<p><pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;
&lt;Rules FriendlyName=&quot;My Custom FxCop Rules&quot;&gt;
  &lt;Rule TypeName=&quot;FalscheNotation&quot; Category=&quot;MyRules&quot; CheckId=&quot;CR1000&quot;&gt;
    &lt;Name&gt;FalscheNotation&lt;/Name&gt;
    &lt;Description&gt;Prüft, ob alle Felder einer bestimmten Schreibweise entprechen.&lt;/Description&gt;
    &lt;Resolution&gt;Feld {0} ist nicht in gewuenschter Notation. Feld Name sollte beginnen mit: '{1}'.&lt;/Resolution&gt;
    &lt;MessageLevel Certainty=&quot;100&quot;&gt;Warning&lt;/MessageLevel&gt;
    &lt;FixCategories&gt;NonBreaking&lt;/FixCategories&gt;
    &lt;Url /&gt;
    &lt;Owner /&gt;
    &lt;Email /&gt;
  &lt;/Rule&gt;
&lt;/Rules&gt;
</pre></p>
<p>Extrem wichtig ist, dass der <span style="color:#ff0000;">TypeName</span> genau der Klasse entspricht, wie wir sie in der Implementation benutzen. Das sehen wir jetzt, denn nun widmen wir uns der Implementierung: Diese eigene geschriebene Regel prüft lediglich, ob der Name eines static-Felds eine bestimmte Schreibweise hat bzw. ob der Name eines nicht-static-Felds eine bestimmte Schreibweise hat. In diesem konkreten Fall wird geprüft ob der Name eines statischen Feldes mit „static_“ beginnt. Sollte dies nicht der Fall sein, wird eine Warnung ausgegeben. Zweck des ganzen sollte vielmehr die Einbindung der Regel in Visual Studio und die Funktionsweise des ganzes sein.</p>
<ol start="7">
<li>In eine *.cs-Datei (Name in unserem Beispiel :„Definition.cs“, aber prinzipiell egal) fügen wir nun folgenden Code ein:</li>
</ol>
<p><pre class="brush: csharp;">
//Folgende Usings benötigt unser Code:
 using System;
 using System.Collections;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Xml;
 using Microsoft.FxCop.Sdk;
 //Muss immer im selben Namespace des Projektes geschrieben werden
 namespace MyCustomFxCopRules
 {
   // Die Standart-Klasse erbt von BaseIntrospectionRule, einer von FxCop vorgegeben Klasse
  internal abstract class BaseFxCopRule : BaseIntrospectionRule
  {
    //Deklaration der Rule (BaseFxCopRule), welche als Namen (&quot;MyCustomFxCopRules.RuleMetadata&quot;) unbedingt den Projektnamen + Namen der XML Datei beinhalten muss
    protected BaseFxCopRule(string ruleName) : base(ruleName, &quot;MyCustomFxCopRules.RuleMetadata&quot;, typeof(BaseFxCopRule).Assembly)
    { }
  }
  //Anschließend Kommt die &quot;eigentliche&quot; Klasse bzw. Rule, welche von der Standard-Klasse wiederrum erbt. Exakte Namenskonvention ist einzuhalten!
 internal sealed class FalscheNotation : BaseFxCopRule
 {
   public FalscheNotation()
     : base(&quot;FalscheNotation&quot;)
   { }
   //Hier müssen wir überschreiben, dass nicht-externe Code Elemente sichtbar gemacht werden, da es diese sind, die analysiert werden.
   public override TargetVisibilities TargetVisibility
   {
     get
     {
       return TargetVisibilities.NotExternallyVisible;
     }
   }
   //Überschreiben der Methode Check (von FxCop Basismethode zum Überprüfung allermöglichen Dinge). Hier geschieht die eigentliche Logik der Rule.
   //Der Returnwert ist vom Typ ProblemCollection, welcher signalisiert, ob ein Warning/Break/Error o.ä. ausgeworfen werden soll
   //Default wert ist null, was einem &quot;alles in Ordnung&quot; entspricht.
   public override ProblemCollection Check(Member member)
   {
     Field field = member as Field;
     if (field == null)
     {
       //Die Rule erscheint nun nur bei Field
       //Sollte nichts gefunden worden sein, wird ein null als ProblemCollection zurückgegeben, was ein &quot;alles in Ordnung&quot; repräsentiert.
      return null;
     }
     //Unterscheidung, ob das Feld, was gefunden wurde, statisch ist oder nicht....
     if (field.IsStatic)
     {
       //Nun wird geschaut ob ein &quot;static_&quot; vor dem Feld steht
       CheckFieldName(field, s_staticFieldPrefix);
     }
     else
     {
       //Nun wird geschaut ob ein &quot;nonStatic_&quot; vor dem Feld steht
       CheckFieldName(field, s_nonStaticFieldPrefix);
     }
     return Problems;
   }
   private const string s_staticFieldPrefix = &quot;static_&quot;;
   private const string s_nonStaticFieldPrefix = &quot;nonStatic_&quot;;
   //Wenn CheckFieldName ein Problem findet (also der string nicht dem entspricht, was in expectedPrefix steht), wird ein &quot;Problem&quot; von Typ ProblemCollection erzeugt.
   private void CheckFieldName(Field field, string expectedPrefix)
   {
     if (!field.Name.Name.StartsWith(expectedPrefix, StringComparison.Ordinal))
     {
       Resolution resolution = GetResolution(field, // Field {0} entspricht nicht der gewünschten Notation.
               expectedPrefix // Field Name sollte eigentlich beginnen mit: {1}.
       );
       Problem problem = new Problem(resolution);
       Problems.Add(problem);
     }
   }
 }
}
</pre></p>
<ol start="8">
<li>Wenn wir nun das Projekt erstellen, finden wir unsere gewünschte *.dll-Datei (im Verzeichnis: MyCustomFxCopRules\MyCustomFxCopRules) und kopieren diese in das VS 2010-Regel- Verzeichnis (C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\Rules bei 64-bit Systemen und C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\Rules bei 32-bit Systemen).</li>
<li>Nach einem Neustart von VS 2010 öffnen wir nun unser eigentliches Projekt, auf welches unsere Regel angewendet werden soll. Hier öffnen wir wieder unser vorhin erstellten Regelsatz (unser Beispiel: „MyCustomRuleSet“).</li>
<li>Nun sollte die erstellte Regel ganz unten unter „MyRules“ angezeigt werden. Wichtig ist, dass nicht aktivierte Regeln angezeigt werden (siehe Bild).<a href="http://bletra.files.wordpress.com/2011/06/ss11codeanalyse2.png"><img class="aligncenter size-medium wp-image-1077" title="Eigene Regel" src="http://bletra.files.wordpress.com/2011/06/ss11codeanalyse2.png?w=450" alt="" width="450" /></a>Bild 2: Eigene Regel</li>
<li>Selektieren wir unsere hinzugefügte Regel und speichern den Regelsatz, wird unsere Regel bei der Codeanalyse angewendet.</li>
</ol>
<p>Quellen:</p>
<ul>
<li><a href="http://msdn.microsoft.com/de-de/library/dd264974.aspx">Gewusst wie: Erstellen eines benutzerdefinierten Regelsatzes</a></li>
<li><a href="http://blogs.msdn.com/b/codeanalysis/archive/2010/03/26/how-to-write-custom-static-code-analysis-rules-and-integrate-them-into-visual-studio-2010.aspx">How to write custom static code analysis rules and integrate them into Visual Studio 2010</a></li>
</ul>
<br />Einsortiert unter:<a href='http://bletra.wordpress.com/category/c-visualstudio/'>C# / VisualStudio</a> Tagged: <a href='http://bletra.wordpress.com/tag/baseintrospectionrule/'>BaseIntrospectionRule</a>, <a href='http://bletra.wordpress.com/tag/codeanalyse/'>Codeanalyse</a>, <a href='http://bletra.wordpress.com/tag/fixcategories/'>FixCategories</a>, <a href='http://bletra.wordpress.com/tag/fxcopsdk/'>FxCopSdk</a>, <a href='http://bletra.wordpress.com/tag/hintpath/'>HintPath</a>, <a href='http://bletra.wordpress.com/tag/messagelevel/'>MessageLevel</a>, <a href='http://bletra.wordpress.com/tag/problemcollection/'>ProblemCollection</a>, <a href='http://bletra.wordpress.com/tag/resolution/'>Resolution</a>, <a href='http://bletra.wordpress.com/tag/ruleset/'>RuleSet</a>, <a href='http://bletra.wordpress.com/tag/targetvisibilities/'>TargetVisibilities</a>, <a href='http://bletra.wordpress.com/tag/typename/'>TypeName</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bletra.wordpress.com/1069/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bletra.wordpress.com/1069/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bletra.wordpress.com/1069/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bletra.wordpress.com/1069/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bletra.wordpress.com/1069/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bletra.wordpress.com/1069/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bletra.wordpress.com/1069/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bletra.wordpress.com/1069/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bletra.wordpress.com/1069/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bletra.wordpress.com/1069/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bletra.wordpress.com/1069/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bletra.wordpress.com/1069/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bletra.wordpress.com/1069/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bletra.wordpress.com/1069/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1069&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bletra.wordpress.com/2011/06/22/codeanalyse-auswahlen-erstellen-und-schreiben-eigener-regeln-in-visual-studio-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/69a9c759ac5ec43eb217edc5d234ef39?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">bletra</media:title>
		</media:content>

		<media:content url="http://bletra.files.wordpress.com/2011/06/ss11codeanalyse1.png?w=300" medium="image">
			<media:title type="html">Vorhandene Regeln von VS 2010</media:title>
		</media:content>

		<media:content url="http://bletra.files.wordpress.com/2011/06/ss11codeanalyse2.png?w=300" medium="image">
			<media:title type="html">Eigene Regel</media:title>
		</media:content>
	</item>
		<item>
		<title>Facebook-Pinnwandeintrag mit einer C# WPF-Desktopanwendung</title>
		<link>http://bletra.wordpress.com/2011/06/21/facebook-pinnwandeintrag-mit-einer-c-wpf-desktopanwendung/</link>
		<comments>http://bletra.wordpress.com/2011/06/21/facebook-pinnwandeintrag-mit-einer-c-wpf-desktopanwendung/#comments</comments>
		<pubDate>Tue, 21 Jun 2011 07:02:57 +0000</pubDate>
		<dc:creator>bletra</dc:creator>
				<category><![CDATA[C# / VisualStudio]]></category>
		<category><![CDATA[Access-Token]]></category>
		<category><![CDATA[Anwendungs-ID]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[FacebookClient]]></category>
		<category><![CDATA[NavigationEvents]]></category>
		<category><![CDATA[System.Dynamic.ExpandoObject]]></category>

		<guid isPermaLink="false">http://bletra.wordpress.com/?p=1044</guid>
		<description><![CDATA[Autoren: 2 Studierende der Veranstaltung .Net Framework und C# Facebook wird immer beliebter und immer mehr Facebook-Apps sprießen aus dem Boden. Jetzt stellt sich die Frage: Wie kann ich meine C#-WPF-Desktopanwendung mit der Facebook API erweitern, um z.B. einen Eintrag auf der eigenen Pinnwand zu veröffentlichen? Die Antwort darauf wird in diesem Blogeintrag gegeben! Verwendet [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1044&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Autoren: 2 Studierende der Veranstaltung .Net Framework und C#</strong></p>
<p>Facebook wird immer beliebter und immer mehr Facebook-Apps sprießen aus dem Boden. Jetzt stellt sich die Frage: Wie kann ich meine C#-WPF-Desktopanwendung mit der Facebook API erweitern, um z.B. einen Eintrag auf der eigenen Pinnwand zu veröffentlichen? Die Antwort darauf wird in diesem Blogeintrag gegeben!</p>
<p>Verwendet wird dabei das „Facebook C# SDK V5.0“, welches auf <a href="http://facebooksdk.codeplex.com/">http://facebooksdk.codeplex.com/</a> kostenlos zur Verfügung steht. Bevor es aber losgehen kann, muss man eine Anwendung bei Facebook registrieren. Dies funktioniert auf folgendem Formular: <a href="http://www.facebook.com/developers/createapp.php">http://www.facebook.com/developers/createapp.php</a>. Eine Anmeldung ist nur mit einem bestätigten Facebook-Account möglich. Dazu muss man seine Handynummer oder Kreditkarte angeben. Anschließend erhält man die, für die Entwicklung benötigte „<strong>Anwendungs-ID</strong>“. Damit ist es aber noch nicht genug, denn um auf die Pinnwand eines Benutzers schreiben zu können, muss er dies explizit erlauben. Diese Erlaubnis ist in einem so genannten „<strong>Access-Token</strong>“ verkörpert. Um das Access-Token zu erhalten, muss der Nutzer in der Anwendung erst auf eine Facebook-Webseite geleitet werden, auf der er die Nutzung seines Accounts mit der App freigibt. Dies lässt sich mit einem eingebetteten Webbrowser in der Oberfläche bewerkstelligt. Die URL setzt sich wie folgt zusammen:</p>
<p><pre class="brush: csharp;">
string u = &quot;https://graph.facebook.com/oauth/authorize?&quot;;

//Anwendungs-ID
u = u + &quot;client_id=XXXXXXXXXXXXXXXXXXX&quot;;

//Berechtigung
u = u + &quot;&amp;scope=publish_stream&quot;;

//URL, die nach Aufruf angezeigt wird
u = u + &quot;&amp;redirect_uri=http://www.facebook.com/connect/login_success.html&quot;;

//Login-Typ
u = u + &quot;&amp;type=user_agent&quot;;
u = u + &quot;&amp;display=popup&quot;;
</pre></p>
<p>Quelle:<a href="http://frank-it-beratung.com/2011/01/29/tutorial-ein-facebook-pinnwandeintrag-mit-visual-basic-oder-c-teil-2/"> http://frank-it-beratung.com/2011/01/29/tutorial-ein-facebook-pinnwandeintrag-mit-visual-basic-oder-c-teil-2/</a></p>
<p>Nachdem der Nutzer seine Eingaben gemacht hat, wird er von Facebook weitergeleitet. Anhand der Weiterleitungs-Url lässt sich der Erfolg erkennen. Enthält die URL den Parameter „access_token“, war dies erfolgreich. Mithilfe eines NavigationEvents lässt sich so das Access-Token bestimmen und zwischenspeichern:</p>
<p><pre class="brush: csharp;">
void webBrowser1_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
  //der Access-Token hängt an der URL
  string q = e.Uri.ToString();
  string txtAccessToken;

  //jetzt auslesen
  if (q.Contains(&quot;#access_token=&quot;))
  {
    q = q.Substring(q.IndexOf(&quot;access_token=&quot;) + 13);
    txtAccessToken = q.Substring(0, q.IndexOf(&quot;&amp;&quot;));
    hauptFenster.Fb.tmpAccessToken = txtAccessToken;
    this.Close();
  }
}

</pre></p>
<p>Nachdem das „Access-Token“ beschafft wurde, kann mit der Verwendung des <em>Facebook C# SDK</em>  begonnen werden. Hierzu erstellt man sich erst einen neuen <strong><em>FacebookClient</em></strong>, in dem das <em>AccessToken</em> gesetzt werden muss.</p>
<p><pre class="brush: csharp;">
Facebook.FacebookClient client = new FacebookClient(tmpAccessToken);

client.AccessToken = tmpAccessToken; //Access-Token setzen
</pre></p>
<p>Nun kann man darüber Befehle absetzen. In unserem Fall das Posten auf die eigene Pinnwand.</p>
<pre></pre>
<p>Für einen Post auf die Pinnwand können verschiedene Parameter in einem „<strong>System.Dynamic.ExpandoObject</strong>“ gesetzt werden. Darunter fallen z.B. der Text des Posts, eine Url zu einem Bild, Titel, externer Link,… Alle möglichen Parameter finden sich hier: <a href="http://developers.facebook.com/docs/reference/api/post/">http://developers.facebook.com/docs/reference/api/post/</a>. Anschließend wir das Ganze an die eigene Pinnwand (entspricht https://graph.facebook.com/me/feed) gesendet. Im Folgenden ist ein Beispiel für einen Spritrechner gegeben:</p>
<p><pre class="brush: csharp;">
dynamic par = new System.Dynamic.ExpandoObject();

par.message = message;
par.picture = &quot;http://dummyimage.com/600x300/3B5998/fff.jpg&amp;text=&quot; + averageConsuption + &quot; l/100km&quot;;
par.name = &quot;Durchschnittsverbrauch&quot;;
par.link = &quot;http://www.XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.com“;
par.description = averageConsuption + &quot; l/100km&quot;;

par.privacy = new
{
  value = &quot;ALL_FRIENDS&quot;,
};

client.PostAsync(&quot;https://graph.facebook.com/me/feed&quot;, par);
</pre></p>
<p>Und so sieht das Ergebnis auf Facebook aus:</p>
<p><a href="http://bletra.files.wordpress.com/2011/06/ss11facesprit.png"><img class="aligncenter size-medium wp-image-1047" title="SS11FaceSprit" src="http://bletra.files.wordpress.com/2011/06/ss11facesprit.png?w=300&#038;h=93" alt="Oberfläche FaceSprit" width="300" height="93" /></a></p>
<p>Viel Spaß beim Experimentieren mit der API!</p>
<br />Einsortiert unter:<a href='http://bletra.wordpress.com/category/c-visualstudio/'>C# / VisualStudio</a> Tagged: <a href='http://bletra.wordpress.com/tag/access-token/'>Access-Token</a>, <a href='http://bletra.wordpress.com/tag/anwendungs-id/'>Anwendungs-ID</a>, <a href='http://bletra.wordpress.com/tag/api/'>API</a>, <a href='http://bletra.wordpress.com/tag/facebook/'>Facebook</a>, <a href='http://bletra.wordpress.com/tag/facebookclient/'>FacebookClient</a>, <a href='http://bletra.wordpress.com/tag/navigationevents/'>NavigationEvents</a>, <a href='http://bletra.wordpress.com/tag/system-dynamic-expandoobject/'>System.Dynamic.ExpandoObject</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bletra.wordpress.com/1044/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bletra.wordpress.com/1044/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bletra.wordpress.com/1044/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bletra.wordpress.com/1044/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bletra.wordpress.com/1044/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bletra.wordpress.com/1044/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bletra.wordpress.com/1044/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bletra.wordpress.com/1044/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bletra.wordpress.com/1044/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bletra.wordpress.com/1044/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bletra.wordpress.com/1044/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bletra.wordpress.com/1044/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bletra.wordpress.com/1044/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bletra.wordpress.com/1044/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1044&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bletra.wordpress.com/2011/06/21/facebook-pinnwandeintrag-mit-einer-c-wpf-desktopanwendung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/69a9c759ac5ec43eb217edc5d234ef39?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">bletra</media:title>
		</media:content>

		<media:content url="http://bletra.files.wordpress.com/2011/06/ss11facesprit.png?w=300" medium="image">
			<media:title type="html">SS11FaceSprit</media:title>
		</media:content>
	</item>
		<item>
		<title>Kopfrechentrainer mit XNA</title>
		<link>http://bletra.wordpress.com/2011/06/20/kopfrechentrainer-mit-xna/</link>
		<comments>http://bletra.wordpress.com/2011/06/20/kopfrechentrainer-mit-xna/#comments</comments>
		<pubDate>Mon, 20 Jun 2011 08:01:23 +0000</pubDate>
		<dc:creator>bletra</dc:creator>
				<category><![CDATA[C# / VisualStudio]]></category>
		<category><![CDATA[XNA]]></category>

		<guid isPermaLink="false">http://bletra.wordpress.com/?p=1057</guid>
		<description><![CDATA[Gerne möchte ich auf einen Blogeintrag eines Studenten der Veranstaltung .Net Framework und C# aufmerksam machen, der einen Kopfrechentrainer für Kinder mit XNA implementiert hat: Ein eigenes Spiel mit XNA. Einsortiert unter:C# / VisualStudio Tagged: XNA<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1057&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Gerne möchte ich auf einen Blogeintrag eines Studenten der Veranstaltung .Net Framework und C# aufmerksam machen, der einen Kopfrechentrainer für Kinder mit XNA implementiert hat: <a href="http://xnafreak.wordpress.com/4-2/">Ein eigenes Spiel mit XNA</a>.</p>
<br />Einsortiert unter:<a href='http://bletra.wordpress.com/category/c-visualstudio/'>C# / VisualStudio</a> Tagged: <a href='http://bletra.wordpress.com/tag/xna/'>XNA</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bletra.wordpress.com/1057/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bletra.wordpress.com/1057/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bletra.wordpress.com/1057/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bletra.wordpress.com/1057/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bletra.wordpress.com/1057/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bletra.wordpress.com/1057/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bletra.wordpress.com/1057/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bletra.wordpress.com/1057/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bletra.wordpress.com/1057/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bletra.wordpress.com/1057/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bletra.wordpress.com/1057/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bletra.wordpress.com/1057/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bletra.wordpress.com/1057/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bletra.wordpress.com/1057/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1057&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bletra.wordpress.com/2011/06/20/kopfrechentrainer-mit-xna/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/69a9c759ac5ec43eb217edc5d234ef39?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">bletra</media:title>
		</media:content>
	</item>
		<item>
		<title>Zugriff auf eine MySQL-Datenbank mittels C#</title>
		<link>http://bletra.wordpress.com/2011/06/20/zugriff-auf-eine-mysql-datenbank-mittels-c/</link>
		<comments>http://bletra.wordpress.com/2011/06/20/zugriff-auf-eine-mysql-datenbank-mittels-c/#comments</comments>
		<pubDate>Mon, 20 Jun 2011 07:19:45 +0000</pubDate>
		<dc:creator>bletra</dc:creator>
				<category><![CDATA[C# / VisualStudio]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false">http://bletra.wordpress.com/?p=1040</guid>
		<description><![CDATA[Autoren: 2 Studierende der Veranstaltung .Net Framework und C# Für kleine Programme und vor allem auch für Webanwendungen wie Silverlight ist es oft ausreichend und sinnvoll, eine MySQL-Datenbank anstatt eines großen MS-SQL Servers zu verwenden. Außerdem haben viele PHP- und Java-Entwickler bereits Erfahrung mit MySQL und müssen sich nicht in ein neues DBMS einarbeiten. Da [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1040&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Autoren: 2 Studierende der Veranstaltung .Net Framework und C#</strong></p>
<p>Für kleine Programme und vor allem auch für Webanwendungen wie Silverlight ist es oft ausreichend und sinnvoll, eine MySQL-Datenbank anstatt eines großen MS-SQL Servers zu verwenden. Außerdem haben viele PHP- und Java-Entwickler bereits Erfahrung mit MySQL und müssen sich nicht in ein neues DBMS einarbeiten. Da die Verwendung von MySQL im .NET Framework standardmäßig nicht unterstützt wird, kann es bei der Einrichtung zu ein paar kleinen Problemen kommen. Aus diesem Grund erklären wir im Folgenden kurz und knapp wie man aus seiner C# Anwendung auf eine MySQL-Datenbank zugreifen kann.</p>
<ol>
<li>Zunächst muss man den ADO.NET Treiber für MySQL herunterladen. Dieser ist kostenlos bei MySQL unter folgender Adresse zu erhalten: <a href="http://dev.mysql.com/downloads/connector/net/">http://dev.mysql.com/downloads/connector/net/ </a></li>
<li>Unter Windows am besten die Windows Installer Version herunterladen. Bei der Installation ist nichts Weiteres zu Beachten und kann somit einfach „durchgeklickt“ werden.</li>
<li>Starten Sie Visual Studio (hier 2010) und legen Sie Ihr gewünschtes Projekt an.</li>
<li>Klicken Sie im Solution Explorer mit der rechten Maustaste auf „References“ (in einer Silverlight-Anwendung natürlich im Server-Teil des Projekts) und wählen „Add Reference…“ aus.</li>
<li>Öffnen Sie den Tab „Browse“ und wechseln in das Verzeichnis, in das Sie den MySQL-Connector installiert haben und wählen Sie im Unterverzeichnis „Assemblies\v2.0“ die Datei MySql.Data aus.</li>
<li> Im Folgenden ein Ausschnitt einer Klasse der zeigt, wie man nach Durchführung der Punkte 1 bis 5 auf eine MySQL-Datenbank zugreifen kann. Hier am Beispiel eines Webservices einer Silverlight-Applikation.</li>
</ol>
<p><pre class="brush: csharp;">
public class Service
{
  private MySqlConnection db;
  public Service()
  {
    db = new MySqlConnection(&quot;SERVER=;DATABASE=;UID=;PASSWORD=;&quot;);
    db.Open();
  }

  [OperationContract]
  public Boolean Login(String email, String passwd) {
  byte[] data = Encoding.Default.GetBytes(passwd);
  using (MD5 algorithm = MD5.Create())
  {
    String passwdHashed = BitConverter.ToString(algorithm.ComputeHash(data));

    MySqlCommand command = db.CreateCommand();
    command.CommandText = &quot;SELECT vvorname, nachname FROM mitglied WHERE email='&quot; + email + &quot;' AND passwort='&quot; + passwdHashed + &quot;' AND rechte='admin'&quot;;

    using (MySqlDataReader reader = command.ExecuteReader())
    {

      while (reader.Read())
      {
        // hier kann man nun auf die selektieren Spalten zugreifen
        // z.B: reader[`vorname`]
      }

      reader.Close();

…
    }
  }
}
</pre></p>
<p>Quelle:<br />
<a href="http://code-inside.de/blog/2007/11/27/howto-datenbankverbindungen-net-mysql/">http://code-inside.de/blog/2007/11/27/howto-datenbankverbindungen-net-mysql/</a></p>
<br />Einsortiert unter:<a href='http://bletra.wordpress.com/category/c-visualstudio/'>C# / VisualStudio</a> Tagged: <a href='http://bletra.wordpress.com/tag/mysql/'>MySQL</a>, <a href='http://bletra.wordpress.com/tag/silverlight/'>Silverlight</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bletra.wordpress.com/1040/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bletra.wordpress.com/1040/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bletra.wordpress.com/1040/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bletra.wordpress.com/1040/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bletra.wordpress.com/1040/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bletra.wordpress.com/1040/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bletra.wordpress.com/1040/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bletra.wordpress.com/1040/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bletra.wordpress.com/1040/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bletra.wordpress.com/1040/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bletra.wordpress.com/1040/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bletra.wordpress.com/1040/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bletra.wordpress.com/1040/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bletra.wordpress.com/1040/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1040&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bletra.wordpress.com/2011/06/20/zugriff-auf-eine-mysql-datenbank-mittels-c/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/69a9c759ac5ec43eb217edc5d234ef39?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">bletra</media:title>
		</media:content>
	</item>
		<item>
		<title>Über die Einfachheit  von Feeds-Verarbeitung in C#</title>
		<link>http://bletra.wordpress.com/2011/06/19/uber-die-einfachheit-von-feeds-verarbeitung-in-c/</link>
		<comments>http://bletra.wordpress.com/2011/06/19/uber-die-einfachheit-von-feeds-verarbeitung-in-c/#comments</comments>
		<pubDate>Sun, 19 Jun 2011 19:16:02 +0000</pubDate>
		<dc:creator>bletra</dc:creator>
				<category><![CDATA[C# / VisualStudio]]></category>
		<category><![CDATA[atom]]></category>
		<category><![CDATA[feed]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[Syndication]]></category>
		<category><![CDATA[SyndicationFeed]]></category>
		<category><![CDATA[WebClient]]></category>
		<category><![CDATA[XmlReader]]></category>

		<guid isPermaLink="false">http://bletra.wordpress.com/?p=1028</guid>
		<description><![CDATA[Autor: D. Büchsel Immer mehr Seiten im Netz unterstützen sogenannte (News-)Feeds. Die Vorteile liegen auf der Hand: Durch Feeds, seien es nun RSS- oder Atom-Feeds, lassen sich, insbesondere Newsseiten, einfach und unkompliziert überwachen und über etwaige  Änderungen informieren. Da ist es nicht verwunderlich, dass uns .NET hierfür eine gute, und vor allem eine einfache Schnittstelle [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1028&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Autor: D. Büchsel</strong></p>
<p>Immer mehr Seiten im Netz unterstützen sogenannte (News-)Feeds. Die Vorteile liegen auf der Hand: Durch Feeds, seien es nun RSS- oder Atom-Feeds, lassen sich, insbesondere Newsseiten, einfach und unkompliziert überwachen und über etwaige  Änderungen informieren. Da ist es nicht verwunderlich, dass uns .NET hierfür eine gute, und vor allem eine einfache Schnittstelle für diese Aufgaben bietet.</p>
<p>Im Folgenden möchten wir ein kleines Beispiel zum Thema Feeds behandeln, um zu zeigen wie einfach die Nutzung der entsprechenden Klassen ist. In unserem Beispiel möchten wir den RSS Feed des Fachbereichs Informatik der Hochschule Darmstadt [1] abfragen und in einer Liste speichern und ausgeben.</p>
<p>Herzstück unseres Programms sind die Syndication-Klassen[2][3], sowie die WebClient-Klasse[4], welche uns die nötigen Funktionalitäten bietet, um Atom1.0- sowie RSS2.0-Feeds zu verarbeiten. Damit wir die Syndication-Klassen nutzen können, müssen wir vorher die entsprechende Referenz einbinden. Dies ist die System.ServiceModel (in System.ServiceModel.dll). Für unser Beispiel benötigen wir zudem die Using-Direktiven für System.Collections.Generic, System.IO, System.Net, System.ServiceModel.Syndication und System.Xml.</p>
<p>Nun aber zu unserem Beispiel: Unser erster Schritt zur Verarbeitung der Feeds ist sicherlich überhaupt erst einmal die Feeds herunterzuladen. Wobei wir von einem Download abstrahieren möchten und das Einlesen der Datei als Stream bevorzugen. Das bietet nicht nur den Vorteil, dass wir die Datei nicht auf unserer Festplatte zwischenspeichern müssen, sondern bietet auch die Möglichkeit eines kürzeren und schöneren Codes.</p>
<p><pre class="brush: csharp;">
Uri url = new Uri(&quot;http://www.fbi.h-da.de/index.php?id=1955&amp;type=100&quot;); //Url zu Feed

WebClient request = new WebClient(); //stellt die Verbindung zur Webseite her
Stream stream = request.OpenRead(url); //öffnet Url als Stream
using (StreamReader reader = new StreamReader(stream)) //öffnen eines Readers auf dem Stream
{
    //TODO: Hier möchten wir unsere Feeds parsen
}
</pre></p>
<p>Wir haben nun einen StreamReader für unseren Feed (in diesem Fall ein RSS-Feed) geöffnet und können diesen nun an unseren XmlReader weitergeben. Der XmlReader stellt, wie der Name schon sagt, einen weiteren Reader zur Verfügung (noch haben wir nichts gelesen!). Den XmlReader übergeben wir wiederum als Parameter an die statische Load-Funktion von SyndicationFeed. Diese bietet uns als Rückgabe eine Instanz von SyndicationFeed, welche uns Zugriff auf die runtergeladenen Feeds bietet. Mittels Items-Property bekommen wir Zugriff auf die Feeds und können nun beliebige Operationen damit durchführen. Um das Beispiel nicht unnötig aufzublasen, fügen wir das Item nur einer Liste hinzu ohne weitere Operationen auszuführen. Hier könnten wir bspw. nur Feeds einfügen, die ein bestimmtes Keyword beinhalten oder von einem bestimmten Autor verfasst wurden.</p>
<p><pre class="brush: csharp;">
Uri url = new Uri(&quot;http://www.fbi.h-da.de/index.php?id=1955&amp;type=100&quot;); //Url zu Feed

List&lt;SyndicationItem&gt; collection = new List&lt;SyndicationItem&gt;();

WebClient request = new WebClient(); //stellt die Verbindung zur Webseite her
Stream stream = request.OpenRead(url); //öffnet Url als Stream
using (StreamReader reader = new StreamReader(stream)) //öffnen eines Readers auf dem Stream
{
    XmlReader xmlReader = XmlReader.Create(reader); //öffnet einen Reader zum XML parsen
    SyndicationFeed feed = SyndicationFeed.Load(xmlReader); //öffnet Parser für Feeds vom XML Reader

    //parsen:
    foreach (SyndicationItem item in feed.Items)
    {
        collection.Add(item);
    }
}
</pre></p>
<p>Schlussendlich möchten wir von unseren Feeds auch mal etwas sehen. SyndicationItem bietet uns hier einige Propertys um auf dessen Feed-Attribute zuzugreifen. Sind die entsprechenden Attribute nicht verfügbar, gibt das Property null zurück. In unserem Beispiel möchten wir den Titel (der sollte im Allgemeinen immer verfügbar sein) und wenn verfügbar, dessen Id auf der Konsole ausgeben. Eine vollständige Liste aller Propertys ist unter [3] zu finden.</p>
<p><pre class="brush: csharp;">
Uri url = new Uri(&quot;http://www.fbi.h-da.de/index.php?id=1955&amp;type=100&quot;); //Url zu Feed

List&lt;SyndicationItem&gt; collection = new List&lt;SyndicationItem&gt;();

WebClient request = new WebClient(); //stellt die Verbindung zur Webseite her
Stream stream = request.OpenRead(url); //öffnet Url als Stream
using (StreamReader reader = new StreamReader(stream)) //öffnen eines Readers auf dem Stream
{
    XmlReader xmlReader = XmlReader.Create(reader); //öffnet einen Reader zum XML parsen
    SyndicationFeed feed = SyndicationFeed.Load(xmlReader); //öffnet Parser für Feeds vom XML Reader

    //parsen:
    foreach (SyndicationItem item in feed.Items)
    {
        collection.Add(item);
    }
}

…

foreach (SyndicationItem item in collection)
{
    if (item.Id != null)
        System.Console.Write(item.Id + &quot;: &quot;);
    System.Console.WriteLine(item.Title.Text);
}
</pre></p>
<p>Wie man sehen kann, ist die Verarbeitung von RSS Feeds unter .NET im Vergleich mit anderen Lösungen (z. B. unter C++) kinderleicht. Dass ATOM- und RSS-Feeds dabei auf die gleiche Weise verwendet werden können, setzt dem ganzen noch ein i-Tüpfelchen oben drauf und bietet eine Menge Einsatzmöglichkeiten.</p>
<p>Referenzen:<br />
[1] <a href="http://www.fbi.h-da.de/index.php?id=1955type=100">http://www.fbi.h-da.de/index.php?id=1955type=100</a><br />
[2] <a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.syndication.syndicationfeed.aspx">http://msdn.microsoft.com/en-us/library/system.servicemodel.syndication.syndicationfeed.aspx</a><br />
[3] <a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.syndication.syndicationitem.aspx">http://msdn.microsoft.com/en-us/library/system.servicemodel.syndication.syndicationitem.aspx</a><br />
[4] <a href="http://msdn.microsoft.com/en-US/library/system.net.webclient%28v=VS.80%29.aspx">http://msdn.microsoft.com/en-US/library/system.net.webclient%28v=VS.80%29.aspx</a></p>
<br />Einsortiert unter:<a href='http://bletra.wordpress.com/category/c-visualstudio/'>C# / VisualStudio</a> Tagged: <a href='http://bletra.wordpress.com/tag/atom/'>atom</a>, <a href='http://bletra.wordpress.com/tag/feed/'>feed</a>, <a href='http://bletra.wordpress.com/tag/rss-2/'>rss</a>, <a href='http://bletra.wordpress.com/tag/syndication/'>Syndication</a>, <a href='http://bletra.wordpress.com/tag/syndicationfeed/'>SyndicationFeed</a>, <a href='http://bletra.wordpress.com/tag/webclient/'>WebClient</a>, <a href='http://bletra.wordpress.com/tag/xmlreader/'>XmlReader</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bletra.wordpress.com/1028/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bletra.wordpress.com/1028/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bletra.wordpress.com/1028/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bletra.wordpress.com/1028/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bletra.wordpress.com/1028/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bletra.wordpress.com/1028/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bletra.wordpress.com/1028/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bletra.wordpress.com/1028/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bletra.wordpress.com/1028/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bletra.wordpress.com/1028/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bletra.wordpress.com/1028/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bletra.wordpress.com/1028/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bletra.wordpress.com/1028/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bletra.wordpress.com/1028/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1028&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bletra.wordpress.com/2011/06/19/uber-die-einfachheit-von-feeds-verarbeitung-in-c/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/69a9c759ac5ec43eb217edc5d234ef39?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">bletra</media:title>
		</media:content>
	</item>
		<item>
		<title>Selektion einer Datenmenge innerhalb von Crystal-Reports</title>
		<link>http://bletra.wordpress.com/2011/06/18/selektion-einer-datenmenge-innerhalb-von-crystal-reports/</link>
		<comments>http://bletra.wordpress.com/2011/06/18/selektion-einer-datenmenge-innerhalb-von-crystal-reports/#comments</comments>
		<pubDate>Sat, 18 Jun 2011 13:11:27 +0000</pubDate>
		<dc:creator>bletra</dc:creator>
				<category><![CDATA[C# / VisualStudio]]></category>
		<category><![CDATA[CrystalReports]]></category>
		<category><![CDATA[ReportDocument]]></category>

		<guid isPermaLink="false">http://bletra.wordpress.com/?p=1023</guid>
		<description><![CDATA[Autoren: 2 Studierende der Veranstaltung .Net Framework und C# Oft ist es notwendig, innerhalb einer Tabelle einer Datenbank eine Auswahl zu treffen, welche der betroffenen Datensätze denn nun wirklich in Crystal-Reports angezeigt werden soll. Im folgenden Beispiel verwenden wir als Ausgangsbasis eine Datenbank mit drei Tabellen, in denen Adressen, Adressgruppen-Namen und deren Zuordnung zueinander gespeichert [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1023&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Autoren: 2 Studierende der Veranstaltung .Net Framework und C#</strong></p>
<p>Oft ist es notwendig, innerhalb einer Tabelle einer Datenbank eine Auswahl zu treffen, welche der betroffenen Datensätze denn nun wirklich in Crystal-Reports angezeigt werden soll. Im folgenden Beispiel verwenden wir als Ausgangsbasis eine Datenbank mit drei Tabellen, in denen Adressen, Adressgruppen-Namen und deren Zuordnung zueinander gespeichert sind. Die Namen der einzelnen Adress-Gruppen werden zu Beginn innerhalb eines Forms in eine Combo-Box geschrieben. Aufgrund dieser Auswah wird dann automatisch gefiltert.<br />
Gehen Sie, wie folgt vor:<br />
Klicken Sie im Report-Steuerelement mit der rechten Maustaste, wählen Sie aus: Bericht -&gt; Datensatz -&gt; Auswahlformel<br />
Es erscheint folgendes Fenster:</p>
<p><a href="http://bletra.files.wordpress.com/2011/06/ss11formelworkshop.png"><img class="aligncenter size-medium wp-image-1024" title="Crystal Reports Formeleditor" src="http://bletra.files.wordpress.com/2011/06/ss11formelworkshop.png?w=300&#038;h=145" alt="" width="300" height="145" /></a></p>
<p>Geben Sie ein: &lt;tabellenname.spaltenname&gt; = &lt;?Parameter&gt;<br />
Nun müssen Sie nur noch über den Quelltext diesen Parameter füllen und dies geht, wie folgt:</p>
<p><pre class="brush: csharp;">
ParameterFieldDefinitions crParameterFieldDefinitions;
ParameterFieldDefinition crParameterFieldDefinition;
ParameterValues crParameterValues = new ParameterValues();
ParameterDiscreteValue crParameterDiscreteValue = new ParameterDiscreteValue();
crParameterDiscreteValue.Value = comboBox1.SelectedItem.ToString();
crParameterFieldDefinitions = cryRpt.DataDefinition.ParameterFields;
crParameterFieldDefinition = crParameterFieldDefinitions[&quot;GruppeName&quot;];
crParameterValues = crParameterFieldDefinition.CurrentValues;
crParameterValues.Clear();
crParameterValues.Add(crParameterDiscreteValue);
crParameterFieldDefinition.ApplyCurrentValues(crParameterValues);

</pre></p>
<p>cryRpt ist das Objekt auf Basis eines Reports, der zuvor, wie folgt deklariert und an die Datenbank angebunden wurde:</p>
<p><pre class="brush: csharp;">
ReportDocument cryRpt = new ReportDocument();
cryRpt.Load(@&quot;CrystalReport4.rpt&quot;);
cryRpt.SetDatabaseLogon(BenutzerName,PassWord,ServerAdresse,DatenBankName);

</pre></p>
<p>Abschließend übergeben wir dann alles dem Crystal-Reports-Control und führen einen Refresh durch:</p>
<p><pre class="brush: csharp;">
crystalReportViewer1.ReportSource = cryRpt;
crystalReportViewer1.Refresh();

</pre></p>
<p>Das war es! Unser Report kann nun gefiltert über eine Spalte seine Daten bekommen.</p>
<p>Bei der Einarbeitung hat uns folgende Seite geholfen:</p>
<ul>
<li><a href="http://csharp.net-informations.com/">http://csharp.net-informations.com/</a></li>
</ul>
<br />Einsortiert unter:<a href='http://bletra.wordpress.com/category/c-visualstudio/'>C# / VisualStudio</a> Tagged: <a href='http://bletra.wordpress.com/tag/crystalreports/'>CrystalReports</a>, <a href='http://bletra.wordpress.com/tag/reportdocument/'>ReportDocument</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bletra.wordpress.com/1023/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bletra.wordpress.com/1023/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bletra.wordpress.com/1023/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bletra.wordpress.com/1023/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bletra.wordpress.com/1023/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bletra.wordpress.com/1023/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bletra.wordpress.com/1023/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bletra.wordpress.com/1023/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bletra.wordpress.com/1023/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bletra.wordpress.com/1023/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bletra.wordpress.com/1023/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bletra.wordpress.com/1023/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bletra.wordpress.com/1023/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bletra.wordpress.com/1023/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1023&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bletra.wordpress.com/2011/06/18/selektion-einer-datenmenge-innerhalb-von-crystal-reports/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/69a9c759ac5ec43eb217edc5d234ef39?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">bletra</media:title>
		</media:content>

		<media:content url="http://bletra.files.wordpress.com/2011/06/ss11formelworkshop.png?w=300" medium="image">
			<media:title type="html">Crystal Reports Formeleditor</media:title>
		</media:content>
	</item>
		<item>
		<title>WebRequest und WebResponse</title>
		<link>http://bletra.wordpress.com/2011/06/17/webrequest-und-webresponse/</link>
		<comments>http://bletra.wordpress.com/2011/06/17/webrequest-und-webresponse/#comments</comments>
		<pubDate>Fri, 17 Jun 2011 09:04:05 +0000</pubDate>
		<dc:creator>bletra</dc:creator>
				<category><![CDATA[C# / VisualStudio]]></category>
		<category><![CDATA[GetResponse]]></category>
		<category><![CDATA[HttpWebRequest]]></category>
		<category><![CDATA[WebRequest]]></category>
		<category><![CDATA[WebResponse]]></category>

		<guid isPermaLink="false">http://bletra.wordpress.com/?p=1001</guid>
		<description><![CDATA[Autoren: Marius Kolkowski und Jan Drietelaar WebRequest ist eine abstrakte Basisklasse die zum Anforderungs-/Antwortmodell von .Net gehört. Sie ist ab .Net Framework 2.0 verfügbar und ist vorerst protokoll-unabhängig. Klassen, die von dieser erben, können auf die verschiedenen Protokolle genauer eingehen. Um eine neue Instanz von WebRequest zu erstellen, sollte man die Funktion Create() benutzen. Hier [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1001&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Autoren: Marius Kolkowski und Jan Drietelaar</strong></p>
<p>WebRequest ist eine abstrakte Basisklasse die zum Anforderungs-/Antwortmodell von .Net gehört. Sie ist ab .Net Framework 2.0 verfügbar und ist vorerst protokoll-unabhängig. Klassen, die von dieser erben, können auf die verschiedenen Protokolle genauer eingehen. Um eine neue Instanz von WebRequest zu erstellen, sollte man die Funktion <em>Create()</em> benutzen. Hier wird dann der Eingabestring (die abzufragende URI) auf ihr Protokoll untersucht und eine Instanz einer abgeleiteten Klasse zurückgegeben. Sollte beispielsweise die Webseite <em>http://www.google.de</em> abgefragt werden, dann liefert uns die Funktion <em>Create()</em> des <em>WebRequests</em> ein Objekt einer davon abgeleiteten Klasse <em>HttpWebRequest</em>. Wollen wir jetzt eine Antwort der URI erhalten, können wir per <em>GetResponse</em>() diese protokollspezifisch bekommen. Dabei wird ein Instanz der Klasse <em>WebResponse</em> zurückgegeben &#8212; genauer ein HttpWebResponse-Objekt; denn auch hier ist es so, dass <em>WebResponse</em> eine abstrakte Basisklasse ist, welche protokollunabhängig funktioniert. Das alles hat den Sinn, um erst während der Laufzeit auf die Protokollart eingehen zu müssen. Nachdem wir unsere Antwort erhalten haben, können wir diese weiterverarbeiten und z.B. ausgeben lassen.</p>
<p><pre class="brush: csharp;">
// Erstellen eines WebRequests. Die Create-Methode gibt in diesem Fall ein HttpWebRequest-Objekt zurück.
HttpWebRequest req = WebRequest.Create(&quot;http://www.google.de&quot;);
// Die Antwort der URI wird in ein WebResponse-Objekt geladen und kann hier weiterverarbeitet werden. Auch hier wird ein Abgeleitetes WebResponse Objekt erstellt (ein HttpWebResponse Objekt).
WebResponse resp = req.GetResponse();
// Hier ein Beispiel, wie das WebResponse Objekt in eine string Variable weiterverarbeitet werden kann.
StreamReader sr = new StreamReader(resp.GetResponseStream());
// In unserem Beispiel enthält die string Variable jetzt den HTML Code der Webseite Google.
string htmlCode = sr.ReadToEnd();

</pre></p>
<br />Einsortiert unter:<a href='http://bletra.wordpress.com/category/c-visualstudio/'>C# / VisualStudio</a> Tagged: <a href='http://bletra.wordpress.com/tag/getresponse/'>GetResponse</a>, <a href='http://bletra.wordpress.com/tag/httpwebrequest/'>HttpWebRequest</a>, <a href='http://bletra.wordpress.com/tag/webrequest/'>WebRequest</a>, <a href='http://bletra.wordpress.com/tag/webresponse/'>WebResponse</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bletra.wordpress.com/1001/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bletra.wordpress.com/1001/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bletra.wordpress.com/1001/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bletra.wordpress.com/1001/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bletra.wordpress.com/1001/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bletra.wordpress.com/1001/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bletra.wordpress.com/1001/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bletra.wordpress.com/1001/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bletra.wordpress.com/1001/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bletra.wordpress.com/1001/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bletra.wordpress.com/1001/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bletra.wordpress.com/1001/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bletra.wordpress.com/1001/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bletra.wordpress.com/1001/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bletra.wordpress.com&amp;blog=9700941&amp;post=1001&amp;subd=bletra&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bletra.wordpress.com/2011/06/17/webrequest-und-webresponse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/69a9c759ac5ec43eb217edc5d234ef39?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">bletra</media:title>
		</media:content>
	</item>
	</channel>
</rss>
