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

<channel>
	<title>Intelligensbestien &#187; Development</title>
	<atom:link href="http://www.intelligensbestien.de/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.intelligensbestien.de</link>
	<description>Just another private weblog</description>
	<lastBuildDate>Sat, 04 Feb 2012 18:45:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Omen</title>
		<link>http://www.intelligensbestien.de/2010/02/16/omen/</link>
		<comments>http://www.intelligensbestien.de/2010/02/16/omen/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 10:56:13 +0000</pubDate>
		<dc:creator>SeveQ</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Fundstücke]]></category>
		<category><![CDATA[Quatsch]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[1984]]></category>
		<category><![CDATA[Doctrine]]></category>
		<category><![CDATA[George Orwell]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Überwachung]]></category>

		<guid isPermaLink="false">http://www.intelligensbestien.de/2010/02/16/omen/</guid>
		<description><![CDATA[Was muss ich heute als neues Mitglied in der Doctrine-Group bei Google sehen? Das: Ein böses böses Omen. Nebenbei: Doctrine ist ein OR-Mapper (abstrakt gesagt, ein Weg zur Datenbankanbindung) für PHP. Kein eben schlechter, wie ich zugeben muss.]]></description>
			<content:encoded><![CDATA[<p>Was muss ich heute als neues Mitglied in der Doctrine-Group bei Google sehen? Das:</p>
<p><a href="http://www.intelligensbestien.de/wp-content/uploads/2010/02/image3.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.intelligensbestien.de/wp-content/uploads/2010/02/image_thumb3.png" width="437" height="146" /></a> </p>
<p>Ein böses böses Omen. <img src='http://www.intelligensbestien.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  <img src='http://www.intelligensbestien.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  <img src='http://www.intelligensbestien.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><font color="#808080">Nebenbei: <a href="http://www.doctrine-project.org" target="_blank">Doctrine</a> ist ein OR-Mapper (abstrakt gesagt, ein Weg zur Datenbankanbindung) für PHP. Kein eben schlechter, wie ich zugeben muss. </font></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.intelligensbestien.de%2F2010%2F02%2F16%2Fomen%2F&amp;title=Omen" id="wpa2a_2"><img src="http://www.intelligensbestien.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p> <p><a href="http://www.intelligensbestien.de/?flattrss_redirect&amp;id=676&amp;md5=0cd82605eff150aff00236918605bfe7" title="Flattr" target="_blank"><img src="http://www.intelligensbestien.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.intelligensbestien.de/2010/02/16/omen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="http://www.intelligensbestien.de/?flattrss_redirect&amp;id=676&amp;md5=0cd82605eff150aff00236918605bfe7" type="text/html" />
	</item>
		<item>
		<title>REST, WCF (Windows) und PHP (Linux/Apache2) mit JSON Kodierung &#8211; Teil 1</title>
		<link>http://www.intelligensbestien.de/2009/12/22/rest-wcf-windows-und-php-linuxapache2-mit-json-kodierung-teil-1/</link>
		<comments>http://www.intelligensbestien.de/2009/12/22/rest-wcf-windows-und-php-linuxapache2-mit-json-kodierung-teil-1/#comments</comments>
		<pubDate>Tue, 22 Dec 2009 16:45:41 +0000</pubDate>
		<dc:creator>SeveQ</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[WCF]]></category>
		<category><![CDATA[WebService]]></category>

		<guid isPermaLink="false">http://blog.seveq.de/2009/12/22/rest-wcf-windows-und-php-linuxapache2-mit-json-kodierung-teil-1/</guid>
		<description><![CDATA[Ich habe einige Zeit gesucht, bis ich die richtigen Antworten hatte. Aber auf welche Frage? Nun, wie lasse ich eine in C#/.NET3.5 entwickelte Anwendung mit einem Webserver kommunizieren, ohne die ganze Kommunikationsschicht selber bauen zu müssen? Die kurze Antwort darauf lautet: WCF, REST und JSON. Die lange Antwort möchte ich hier nun auch in Form [...]]]></description>
			<content:encoded><![CDATA[<p>Ich habe einige Zeit gesucht, bis ich die richtigen Antworten hatte. Aber auf welche Frage? Nun, wie lasse ich eine in C#/.NET3.5 entwickelte Anwendung mit einem Webserver kommunizieren, ohne die ganze Kommunikationsschicht selber bauen zu müssen? Die kurze Antwort darauf lautet: WCF, REST und JSON. Die lange Antwort möchte ich hier nun auch in Form eines Tutorials geben.</p>
<p>Im ersten Teil dieses Tutorials werde ich die Erstellung eines REST Services unter PHP erklären. Der zweite Teil folgt später und wird die Erstellung eines Clients in C# beinhalten. </p>
<span id="Kurzer_Exkurs_zu_REST_vereinfacht"><h3>Kurzer Exkurs zu REST (vereinfacht)</h3></span>
<p>Was ist denn REST überhaupt? REST ist die Abkürzung für <b>Representational State Transfer</b>. Es ist eine Spezifikation für die Kommunikation mit Diensten in sogenannten Hypermedia-Informationssystemen wie das World Wide Web. Die Kommunikation findet dabei über HTTP statt. Aufrufe von Funktionen REST implementierter Dienste werden dabei in der aufgerufenen URL kodiert. Beispielsweise sieht die URL für den Aufruf einer Funktion namens “<strong>foo”</strong> möglicherweise folgendermaßen aus: <a href="http://www.meinserver.de/rest/foo">http://www.meinserver.de/rest/foo</a></p>
<p>Aufrufparameter, sofern erforderlich, werden dabei im Inhalt des HTTP Requests übermittelt. Aus diesem Grund sollten serverseitig Funktionen, die Argumente erfordern, so implementiert sein, dass sie über die HTTP Methode “POST” (statt standardmäßig “GET”) erreicht werden. Näheres dazu weiter unten. Man kann Aufrufparameter auch über die HTTP Methode “GET” übermitteln, sie landen dann in der URL in der Form </p>
<p>&lt;url&gt;?parameter1=wert1&amp;parameter2=wert2</p>
<p>und so weiter. Ist im Endeffekt Geschmackssache, wirkt sich aber auf die Implementierung sowohl der Funktion serverseitig als auch des Interfaces clientseitig aus. Ich beschreibe in diesem Blogpost nur die Vorgehensweise bei der Implementierung mit HTTP Methode POST für Funktionen mit Parametern (ohne Parameter ist eigentlich immer GET). </p>
<span id="Wer_ist_dieser_JSON"><h3>Wer ist dieser JSON?</h3></span>
<p>JSON (JavaScript Object Notation) ist eine Syntax, mit der Daten, Objekte, Variablen in Textform über beispielsweise das Web übermittelt werden können. Näheres dazu findet man bei <a href="http://de.wikipedia.org/wiki/JSON" target="_blank">Wikipedia</a>. Das Format selber ist für dieses Tutorial nicht wichtig, da WCF und PHP so gut wie alles selber machen und hier auch mal sehr kompatibel erscheinen. </p>
<span id="Den_Apache_vorbereiten"><h3>Den Apache vorbereiten</h3></span>
<p>Damit wir überhaupt mit REST arbeiten können, müssen wir dem Apache noch sagen, dass er alle Anfragen, die auf nicht existierende Dokumente führen, auf eine PHP Datei umlenken soll. Standardmäßig wird das die index.php sein. Um ihm dies zu sagen, benötigen wir im Document Root der Webanwendung eine Datei namens “.htaccess”. Diese muss folgendes beinhalten:</p>
<blockquote><p>RewriteEngine On      <br />RewriteCond %{REQUEST_FILENAME} !-f       <br />RewriteCond %{REQUEST_FILENAME} !-d       <br />RewriteCond %{REQUEST_FILENAME} !-l </p>
<p>RewriteRule .* index.php [L]</p>
</blockquote>
<p>Außerdem muss das Modul mod_rewrite aktiviert sein. Näheres dazu kann man aber auch ergooglen. Was macht nun diese Datei? Sie sagt dem Apache, dass alles (“.*”), was nicht (“!”)</p>
<ul>
<li>eine existierende Date (“-f”) </li>
<li>ein existierendes Verzeichnis (“-d”) </li>
<li>ein existierender Symlink (“-l”) </li>
</ul>
<p>ist, auf die <strong>index.php</strong> umgelenkt werden soll. Außerdem aktiviert es in der ersten Zeile die Rewrite Engine natürlich. </p>
<span id="Der_REST_Server"><h3>Der REST Server</h3></span>
<p>Als REST Server verwende ich eine PHP Anwendung auf einem Apache/Linux System. Ein REST Server ist relativ schnell implementiert. Wir brauchen eine Weichen-Funktion, die bei jedem Aufruf des PHP Dokuments (ich verwende hier ausschließlich die <strong>index.php</strong>; andere Namen sind natürlich möglich, dann muss aber der Eintrag in der .htaccess Datei entsprechend angepasst werden) ausgeführt wird:</p>
<blockquote><pre><span style="color: #0000ff">&lt;?</span>php	<a style="color: #0000ff" href="http://www.php.net/function">function</a> RESTServer()
	{
		$callback = NULL;

		<a style="color: #0000ff" href="http://www.php.net/if">if</a>(<a style="color: #ffa500" href="http://www.php.net/preg_match">preg_match</a>('<span style="color: #8b0000">/rest\/([^\/]+)/</span>', $_SERVER['<span style="color: #8b0000">REQUEST_URI</span>'], $m))
		{
			<a style="color: #0000ff" href="http://www.php.net/if">if</a>(isset($GLOBALS['<span style="color: #8b0000">RESTmap</span>'][$_SERVER['<span style="color: #8b0000">REQUEST_METHOD</span>']][$m[1]]))
			{
				$callback = $GLOBALS['<span style="color: #8b0000">RESTmap</span>'][$_SERVER['<span style="color: #8b0000">REQUEST_METHOD</span>']][$m[1]];
			}
		}
		<a style="color: #0000ff" href="http://www.php.net/else">else</a>
		{
			<a style="color: #0000ff" href="http://www.php.net/return">return</a> FALSE;
		}

		<a style="color: #0000ff" href="http://www.php.net/if">if</a>(is_callable($callback))
		{
			$data = NULL;

			<a style="color: #0000ff" href="http://www.php.net/if">if</a>($_SERVER['<span style="color: #8b0000">REQUEST_METHOD</span>'] == '<span style="color: #8b0000">GET</span>')
			{
				$data = $_GET;
			}
			<a style="color: #0000ff" href="http://www.php.net/else">else</a> <a style="color: #0000ff" href="http://www.php.net/if">if</a> ($tmp = file_get_contents('<span style="color: #8b0000">php://input</span>'))
			{
				$data = json_decode($tmp);
			}

			<a style="color: #ffa500" href="http://www.php.net/header">header</a>(&quot;<span style="color: #8b0000">{$_SERVER['SERVER_PROTOCOL']} 200 OK</span>&quot;);
			<a style="color: #ffa500" href="http://www.php.net/header">header</a>('<span style="color: #8b0000">Content-Type: application/json</span>');

			<a style="color: #ffa500" href="http://www.php.net/print">print</a> json_encode(<a style="color: #ffa500" href="http://www.php.net/call_user_func">call_user_func</a>($callback, $data));
		}
		<a style="color: #0000ff" href="http://www.php.net/else">else</a>
		{
			<a style="color: #ffa500" href="http://www.php.net/header">header</a>(&quot;<span style="color: #8b0000">{$_SERVER['SERVER_PROTOCOL']} 404 Not Found</span>&quot;);
		}
		<a style="color: #0000ff" href="http://www.php.net/return">return</a> TRUE;
	}

<span style="color: #0000ff">?&gt;</span></pre>
</blockquote>
<p>Diese Funktion wird bei jedem Aufruf des Dokuments ausgeführt. Sie holt sich die aufrufende URL (wie oben erwähnt: aufgrund der Umleitung in der .htaccess Datei landet jeder Aufruf, der nicht direkt ein existierendes Dokument anspricht, auf der index.php) und extrahiert daraus, sofern in URL und auch in der Function-Map (siehe weiter unten) vorhanden, die aufgerufene REST Funktion. Stimmt die URL nicht mit der Konvention “&lt;url&gt;/rest/function” überein, so kehrt die Weichen-Funktion mit einem FALSE zurück. Hat die URL jedoch das entsprechende Format, so schaut die Funktion in die Function-Map, ob sie zur HTTP Methode und zum Funktionsnamen einen Eintrag findet. Konnte in der Function-Map kein entsprechender Eintrag gefunden werden, so sendet die Weichen-Funktion ein HTTP 404 (nicht vorhanden) an den Client, der entsprechend reagiert. </p>
<span id="Die_Function-Map"><h3>Die Function-Map</h3></span>
<p>Was aber ist nun diese ominöse Function-Map? Im Grunde ist es nichts anderes als ein mehrdimensionales Array, das folgendermaßen aussieht:</p>
<blockquote>
<pre><span style="color: #0000ff">&lt;?</span>php	<span style="color: #008000">/********************************************************************************
		REST function mappings for access via HTTP GET method
	*********************************************************************************/</span>
	$GLOBALS['<span style="color: #8b0000">RESTmap</span>'] = <a style="color: #ffa500" href="http://www.php.net/array">array</a>();

	$GLOBALS['<span style="color: #8b0000">RESTmap</span>']['<span style="color: #8b0000">GET</span>'] =
		<a style="color: #ffa500" href="http://www.php.net/array">array</a>(
		);

	$GLOBALS['<span style="color: #8b0000">RESTmap</span>']['<span style="color: #8b0000">POST</span>'] =
		<a style="color: #ffa500" href="http://www.php.net/array">array</a>(
		);

	$GLOBALS['<span style="color: #8b0000">RESTmap</span>']['<span style="color: #8b0000">PUT</span>'] =
		<a style="color: #ffa500" href="http://www.php.net/array">array</a>(
		);

	$GLOBALS['<span style="color: #8b0000">RESTmap</span>']['<span style="color: #8b0000">DELETE</span>'] =
		<a style="color: #ffa500" href="http://www.php.net/array">array</a>(
		);
<span style="color: #0000ff">?&gt;</span></pre>
</blockquote>
<p>Wir legen also eine globale Variable mit dem Namen RESTmap als Array an. Sie erhält vier Einträge, jeweils einen für die entsprechende HTTP Aufrufmethode GET, POST, PUT und DELETE. PUT und DELETE lasse ich außen vor, beziehe mich in diesem Text nur auf GET und POST. </p>
<p>Jeder Eintrag des Arrays ist wiederum selbst ein assoziatives Array (d.h. mit Namen als Index, statt Nummern). Um nun eine PHP-Funktion beispielsweise mit dem Namen “get_Foo” über REST erreichbar zu machen, muss man sie folgendermaßen in diese Map eintragen:</p>
<blockquote>
<pre><span style="color: #0000ff">&lt;?</span>php
	$GLOBALS['<span style="color: #8b0000">RESTmap</span>']['<span style="color: #8b0000">GET</span>'] =
		<a style="color: #ffa500" href="http://www.php.net/array">array</a>(
			'<span style="color: #8b0000">foo</span>' =&gt; '<span style="color: #8b0000">get_Foo</span>',
		);
<span style="color: #0000ff">?&gt;</span></pre>
</blockquote>
<p>Ein Aufruf der URL “http://blahblubb/rest/foo” führt also nun dazu, dass eine PHP-Funktion namens get_Foo aufgerufen wird. Ihr Rückgabewert wird in JSON kodiert an den Aufrufer zurückgegeben. Man muss also dafür sorgen, dass die Daten, die man gerne clientseitig verarbeiten würde, in Form eines Objektes oder eines Arrays oder einer Variablen per <font color="#0000ff">return</font> zurückgegeben werden. Die Kodierung übernimmt unsere oben beschriebene Weichen-Funktion. Eine beispielhafte Implementierung der foo-Funktion:</p>
<blockquote>
<pre><span style="color: #0000ff">&lt;?</span>php
	<a style="color: #0000ff" href="http://www.php.net/function">function</a> foo()
	{
		<a style="color: #0000ff" href="http://www.php.net/return">return</a> &quot;<span style="color: #8b0000">Hallo Welt!</span>&quot;;
	}
<span style="color: #0000ff">?&gt;</span></pre>
</blockquote>
<p>PHP kodiert den Rückgabewert dann am Ende der Weichen-Funktion in einen JSON Term und sendet ihn an den Client zurück (ein Browser würde ihn also anzeigen oder eventuell, aufgrund des Content-Types, auch als Download anbieten; jedenfalls reagiert mein FireFox mit einem Downloadfenster auf solch eine Antwort). </p>
<p>Soweit zum serverseitigen Teil der Verbindung. </p>
<p><strong>Die Implementierung des Clients folgt in Teil 2</strong></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.intelligensbestien.de%2F2009%2F12%2F22%2Frest-wcf-windows-und-php-linuxapache2-mit-json-kodierung-teil-1%2F&amp;title=REST%2C%20WCF%20%28Windows%29%20und%20PHP%20%28Linux%2FApache2%29%20mit%20JSON%20Kodierung%20%26ndash%3B%20Teil%201" id="wpa2a_4"><img src="http://www.intelligensbestien.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p> <p><a href="http://www.intelligensbestien.de/?flattrss_redirect&amp;id=623&amp;md5=33d28f973f8f47a5d9d47c979a2f88e4" title="Flattr" target="_blank"><img src="http://www.intelligensbestien.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.intelligensbestien.de/2009/12/22/rest-wcf-windows-und-php-linuxapache2-mit-json-kodierung-teil-1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<atom:link rel="payment" href="http://www.intelligensbestien.de/?flattrss_redirect&amp;id=623&amp;md5=33d28f973f8f47a5d9d47c979a2f88e4" type="text/html" />
	</item>
		<item>
		<title>Namespacing bei E-Mail Adressen</title>
		<link>http://www.intelligensbestien.de/2009/12/17/namespacing-bei-e-mail-adressen/</link>
		<comments>http://www.intelligensbestien.de/2009/12/17/namespacing-bei-e-mail-adressen/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 10:16:05 +0000</pubDate>
		<dc:creator>SeveQ</dc:creator>
				<category><![CDATA[Anleitungen]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Spam]]></category>

		<guid isPermaLink="false">http://blog.seveq.de/2009/12/17/namespacing-bei-e-mail-adressen/</guid>
		<description><![CDATA[Fefe brachte mich darauf, dass man bei sendmail Namensräume für E-Mail Adressen verwenden kann. Das sieht dann so aus: blahblubb+hallowelt@meinsendmailserver.de Eine Mail an diese Adresse würde bei einem solchen Server an blahblubb@meinsendmailserver.de weitergegeben. Das hat den Vorteil, dass man damit quasi “markieren” kann, wofür man eine solche Mail-Adresse verwendet hat. Man kann damit leicht ermitteln, [...]]]></description>
			<content:encoded><![CDATA[<p>Fefe brachte mich darauf, dass man bei <em>sendmail</em> Namensräume für E-Mail Adressen verwenden kann. Das sieht dann so aus:</p>
<blockquote><p><a href="mailto:blahblubb+hallowelt@meinsendmailserver.de">blahblubb+hallowelt@meinsendmailserver.de</a></p>
</blockquote>
<p>Eine Mail an diese Adresse würde bei einem solchen Server an <a href="mailto:blahblubb@meinsendmailserver.de">blahblubb@meinsendmailserver.de</a> weitergegeben. Das hat den Vorteil, dass man damit quasi “markieren” kann, wofür man eine solche Mail-Adresse verwendet hat. Man kann damit leicht ermitteln, wer die verwendete E-Mail-Adresse weitergegeben hat, wenn man darauf auf einmal Spam empfängt (man sieht’s dann ja im “To:”-Header). Voraussetzung dafür ist natürlich, dass</p>
<p>1. der Betreiber der Webseite, bei der man sich damit registriert hat, den Namensraum bei der Weitergabe drin behält, respektive der Bot, der die Adressen ab sammelt, diesen nicht automatisch entfernt und</p>
<p>2. das Registrierungsformular der jeweiligen Webseite solche Mail-Adressen akzeptiert</p>
<p>Letzteres ist leider oft nicht der Fall, wie ich leidlich feststellen musste. Darum mein Aufruf an alle Webseitenbetreiber und Entwickler von Content Management Systemen und anderen Frameworks, wo man sich registrieren kann: lasst in euren Registrierungsformularen Namensräume zu, um zur Eindämmung von Spam beizutragen! </p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.intelligensbestien.de%2F2009%2F12%2F17%2Fnamespacing-bei-e-mail-adressen%2F&amp;title=Namespacing%20bei%20E-Mail%20Adressen" id="wpa2a_6"><img src="http://www.intelligensbestien.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p> <p><a href="http://www.intelligensbestien.de/?flattrss_redirect&amp;id=617&amp;md5=da3f816f573426bb564b19be0d44d561" title="Flattr" target="_blank"><img src="http://www.intelligensbestien.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.intelligensbestien.de/2009/12/17/namespacing-bei-e-mail-adressen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="http://www.intelligensbestien.de/?flattrss_redirect&amp;id=617&amp;md5=da3f816f573426bb564b19be0d44d561" type="text/html" />
	</item>
		<item>
		<title>bahn.de &#8211; was ich mir w&#252;nschen w&#252;rd</title>
		<link>http://www.intelligensbestien.de/2009/09/29/bahn-de-was-ich-mir-wnschen-wrd/</link>
		<comments>http://www.intelligensbestien.de/2009/09/29/bahn-de-was-ich-mir-wnschen-wrd/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 19:12:38 +0000</pubDate>
		<dc:creator>SeveQ</dc:creator>
				<category><![CDATA[Computer]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[Bahn]]></category>
		<category><![CDATA[Bastelstunde]]></category>

		<guid isPermaLink="false">http://blog.seveq.de/2009/09/29/bahn-de-was-ich-mir-wnschen-wrd/</guid>
		<description><![CDATA[Eine Schnittstelle, sei es als XML-RPC oder so wie die Google-API das macht oder halt sonst wie standardisiert, mit der ich schlicht und einfach Fahrplan-Daten aus einem eigenen Programm heraus abfragen kann. Völlig banal, im Grunde. Gibt’s das? Nö! Aber was erwarte ich auch von der Bahn?! Ich bastel nämlich gerade an ‘nem Tool, das [...]]]></description>
			<content:encoded><![CDATA[<p>Eine Schnittstelle, sei es als XML-RPC oder so wie die Google-API das macht oder halt sonst wie standardisiert, mit der ich schlicht und einfach Fahrplan-Daten aus einem eigenen Programm heraus abfragen kann. Völlig banal, im Grunde. </p>
<p>Gibt’s das? Nö! Aber was erwarte ich auch von der Bahn?! </p>
<p>Ich bastel nämlich gerade an ‘nem Tool, das mir meinen aktuellen Vorlesungsplan vernünftig aufgeschlüsselt darstellen kann. Da würde ich gern eine Funktion einbauen, mit der ich mir, nach Eingabe meines Wohnortes, die beste Bahnverbindung für den entsprechenden Tag automatisiert ausgeben lassen kann. </p>
<p>Aber neeeee, geht nicht. Selbst die Idee, die Abfrage über das HTML Formular der Website zu simulieren hab ich ad acta gelegt. Ist mir zu aufwändig, mich dort durch den Source Code zu wühlen. </p>
<p><em>Die Bahn kommt</em>… *hust* nicht in die Hufe. *kopfschüttel*</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.intelligensbestien.de%2F2009%2F09%2F29%2Fbahn-de-was-ich-mir-wnschen-wrd%2F&amp;title=bahn.de%20%26ndash%3B%20was%20ich%20mir%20w%26uuml%3Bnschen%20w%26uuml%3Brd" id="wpa2a_8"><img src="http://www.intelligensbestien.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p> <p><a href="http://www.intelligensbestien.de/?flattrss_redirect&amp;id=581&amp;md5=eb7eab9d18e122cfe423cf1e71b1d0e4" title="Flattr" target="_blank"><img src="http://www.intelligensbestien.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.intelligensbestien.de/2009/09/29/bahn-de-was-ich-mir-wnschen-wrd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="http://www.intelligensbestien.de/?flattrss_redirect&amp;id=581&amp;md5=eb7eab9d18e122cfe423cf1e71b1d0e4" type="text/html" />
	</item>
		<item>
		<title>CitiesXL Demo &#8211; Method verify Access failed &#8211; Workaround</title>
		<link>http://www.intelligensbestien.de/2009/09/02/citiesxl-demo-method-verify-access-failed-workaround/</link>
		<comments>http://www.intelligensbestien.de/2009/09/02/citiesxl-demo-method-verify-access-failed-workaround/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 23:02:48 +0000</pubDate>
		<dc:creator>SeveQ</dc:creator>
				<category><![CDATA[Anleitungen]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Videogames]]></category>
		<category><![CDATA[CitiesXL]]></category>
		<category><![CDATA[Hexediting]]></category>

		<guid isPermaLink="false">http://blog.seveq.de/2009/09/02/citiesxl-demo-method-verify-access-failed-workaround/</guid>
		<description><![CDATA[Bei vielen Spielern der Demo von CitiesXL tritt statt eines normalen Starts die Fehlermeldung “Method verify Access failed” auf. Dieses Problem scheint mit Windows Vista zusammen zu hängen. Es gibt nun zwei Methoden, das Problem zu beheben. Die 1. ist, das Spiel im Windows 98 Kompatibilitätsmodus zu starten. Dies soll aber bei einigen zu Problemen [...]]]></description>
			<content:encoded><![CDATA[<p>Bei vielen Spielern der Demo von <strong><a href="http://www.citiesxl.com">CitiesXL</a></strong> tritt statt eines normalen Starts die Fehlermeldung “Method verify Access failed” auf. Dieses Problem scheint mit Windows Vista zusammen zu hängen. Es gibt nun zwei Methoden, das Problem zu beheben. Die 1. ist, das Spiel im Windows 98 Kompatibilitätsmodus zu starten. Dies soll aber bei einigen zu Problemen mit der Performance geführt haben. Die 2. Methode ist eine Änderung an der CitiesXL_Game.exe. Dazu nun im Folgenden eine…</p>
<span id="Anleitung_zum_Modifizieren_der_CitiesXL_Game.exe"><h3>Anleitung zum Modifizieren der <em>CitiesXL_Game.exe</em></h3></span>
<p>Ausführung der folgenden Schritte <strong><u>auf eigenen Gefahr</u></strong>! Ich übernehme <strong>keine Haftung für irgendwelche Effekte</strong>, die die Änderung haben könnte. Man sollte diese Änderungen nur dann ausführen, wenn man weiß, was man da tut. </p>
<ol>
<li>Backup der original CitiesXL_Game.exe anfertigen!</li>
<li>öffnen der <em><strong>CitiesXL_Game.exe</strong></em> aus dem CitiesXL Demo Ordner in einem Hex-Editor (beispielsweise UltraEdit)</li>
<li>an Position <em>0x000012C3</em> muss der Hex-Wert <strong><font color="#800000">84</font></strong> stehen. Diesen in <strong><font color="#008000">85</font></strong> ändern. Falls dort nicht 84 steht, lasst es lieber bleiben!</li>
<li>abspeichern und Hex-Editor schließen</li>
<li>Spiel normal starten </li>
</ol>
<p>Damit sollte <strong>(!)</strong> es auch ohne Kompatibilitätsmodus funktionieren. Tut es jedenfalls bei mir.</p>
<p>&#160;</p>
<p>Hier nochmal ein Screenshot von der Änderung:</p>
<p><a href="http://blog.seveq.de/wp-content/uploads/2009/09/CitiesXL_Game.exe_modification.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="CitiesXL_Game.exe_modification" border="0" alt="CitiesXL_Game.exe_modification" src="http://blog.seveq.de/wp-content/uploads/2009/09/CitiesXL_Game.exe_modification_thumb.jpg" width="356" height="134" /></a></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.intelligensbestien.de%2F2009%2F09%2F02%2Fcitiesxl-demo-method-verify-access-failed-workaround%2F&amp;title=CitiesXL%20Demo%20%26ndash%3B%20Method%20verify%20Access%20failed%20%26%238211%3B%20Workaround" id="wpa2a_10"><img src="http://www.intelligensbestien.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p> <p><a href="http://www.intelligensbestien.de/?flattrss_redirect&amp;id=571&amp;md5=e01f65e598dd2e5470f2a247c4d52e68" title="Flattr" target="_blank"><img src="http://www.intelligensbestien.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.intelligensbestien.de/2009/09/02/citiesxl-demo-method-verify-access-failed-workaround/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="http://www.intelligensbestien.de/?flattrss_redirect&amp;id=571&amp;md5=e01f65e598dd2e5470f2a247c4d52e68" type="text/html" />
	</item>
		<item>
		<title>TrueCrypt Automounter in der Mache&#8230;</title>
		<link>http://www.intelligensbestien.de/2009/08/11/truecrypt-automounter-in-der-mache/</link>
		<comments>http://www.intelligensbestien.de/2009/08/11/truecrypt-automounter-in-der-mache/#comments</comments>
		<pubDate>Tue, 11 Aug 2009 20:25:52 +0000</pubDate>
		<dc:creator>SeveQ</dc:creator>
				<category><![CDATA[Computer]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[TrueCrypt]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://blog.seveq.de/2009/08/11/truecrypt-automounter-in-der-mache/</guid>
		<description><![CDATA[Ich arbeite zur Zeit an einem kleinen Programm, das es mir ermöglicht, meine Laufwerke unabhängig von der Zuteilung der IDs in Vista automatisch zu mounten. TrueCrypt selbst ist dazu nicht in der Lage, weil es die Favoriten nur vom Index und vom DiskIndex der jeweiligen Partition abhängig mountet, die Vista gern mal beim Booten verbiegt. [...]]]></description>
			<content:encoded><![CDATA[<p>Ich arbeite zur Zeit an einem kleinen Programm, das es mir ermöglicht, meine Laufwerke unabhängig von der Zuteilung der IDs in Vista automatisch zu mounten. TrueCrypt selbst ist dazu nicht in der Lage, weil es die Favoriten nur vom Index und vom DiskIndex der jeweiligen Partition abhängig mountet, die Vista gern mal beim Booten verbiegt. </p>
<p>Es gibt da ein paar gute Programme, die mir allerdings alle nicht 100% zusagen. Darum bau ich mir so’n Ding nun selber. Ein Screenshot von einer sehr frühen Version des Tools: </p>
<p><a href="http://blog.seveq.de/wp-content/uploads/2009/08/image3.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blog.seveq.de/wp-content/uploads/2009/08/image_thumb.png" width="358" height="229" /></a> </p>
<p>Mal sehen, wie weit ich mit dem Projekt komme, bevor es mir wieder einschläft. <img src='http://www.intelligensbestien.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.intelligensbestien.de%2F2009%2F08%2F11%2Ftruecrypt-automounter-in-der-mache%2F&amp;title=TrueCrypt%20Automounter%20in%20der%20Mache%26hellip%3B" id="wpa2a_12"><img src="http://www.intelligensbestien.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p> <p><a href="http://www.intelligensbestien.de/?flattrss_redirect&amp;id=560&amp;md5=5a7e964bd1faef5df4a361d5b947321a" title="Flattr" target="_blank"><img src="http://www.intelligensbestien.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.intelligensbestien.de/2009/08/11/truecrypt-automounter-in-der-mache/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="http://www.intelligensbestien.de/?flattrss_redirect&amp;id=560&amp;md5=5a7e964bd1faef5df4a361d5b947321a" type="text/html" />
	</item>
		<item>
		<title>Gem&#252;tliche Eisbl&#246;cke vs. Leucht-Obst</title>
		<link>http://www.intelligensbestien.de/2009/05/14/gemtliche-eisblcke-vs-leucht-obst/</link>
		<comments>http://www.intelligensbestien.de/2009/05/14/gemtliche-eisblcke-vs-leucht-obst/#comments</comments>
		<pubDate>Thu, 14 May 2009 17:34:13 +0000</pubDate>
		<dc:creator>SeveQ</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Fundstücke]]></category>
		<category><![CDATA[Golem]]></category>
		<category><![CDATA[OLED]]></category>
		<category><![CDATA[Technologie]]></category>

		<guid isPermaLink="false">http://blog.seveq.de/2009/05/14/gemtliche-eisblcke-vs-leucht-obst/</guid>
		<description><![CDATA[OLED gibt’s schon lange. Organic Light Emitting Diode – eine organische LED, die unseren Beleuchtungsmarkt revolutionieren soll. Energiesparend, modern, preiswert, flexibel. Besser also als die im Volksmund liebevoll als Glühbirne bezeichnete betagte und bald verbotene Glühlampe. So heißt es jedenfalls werbend aus der Richtung der Hersteller dieser Leuchtmittel. Doch wie schaut nun eine Lampe mit [...]]]></description>
			<content:encoded><![CDATA[<p>OLED gibt’s schon lange. Organic Light Emitting Diode – eine organische LED, die unseren Beleuchtungsmarkt revolutionieren soll. Energiesparend, modern, preiswert, flexibel. Besser also als die im Volksmund liebevoll als Glühbirne bezeichnete betagte und bald verbotene Glühlampe. So heißt es jedenfalls werbend aus der Richtung der Hersteller dieser Leuchtmittel.</p>
<p>Doch wie schaut nun eine Lampe mit einer OLED überhaupt aus? Dazu hier ein kleines Video (Quelle: Golem): </p>
<p><object width="480" height="270"><param name="movie" value="http://video.golem.de/player/videoplayer.swf?id=1997&amp;autoPl=false"></param><param name="allowFullScreen" value="true"></param><param name="AllowScriptAccess" value="always"><embed src="http://video.golem.de/player/videoplayer.swf?id=1997&amp;autoPl=false" type="application/x-shockwave-flash" allowfullscreen="true" AllowScriptAccess="always" width="480" height="270"></embed></object></p>
<div style="text-align: center; width: 480px; font-family: verdana,sans-serif; font-size: 0.8em"><a href="http://video.golem.de/audio-video/1997/oled-licht-video.html">Video: OLED-Licht &#8211; Video</a> (1:06)</div>
</p>
<p>Praktisch mögen sie sein, die Lampen der Zukunft. Energiesparend sehr wahrscheinlich auch. Doch frage ich mich eines: wie passt eine solche Lampe in das Wohnzimmer einer durchschnittlichen Familie, möglicherweise sogar vom Lande? Junge Leute, die sich gerade ihr eigene Wohnung einrichten, Singles, junge Pärchen, zu ihnen und auch zum restlichen Equipment im jugendlich modern eingerichteten Wohnzimmer kann dieses und ähnliche Designs passen. Doch in ein gemütliches Kamin-Zimmer mit antiken Sesseln, Stuck-Decken, Fresken, Parkett-Fußboden mit Flokati mag das kalte moderne Design nicht so recht passen. </p>
<p>Es muss also eine Form her, die zum Ambiente passt. Schwierig wird es sein, die alte Birne mit ihrem jahrhunderte alten Charme durch OLEDs oder Leuchtstofflampen zu ersetzen. Sie ähneln der Glühlampe zwar inzwischen in ihrer Form, möglicherweise senden sie auch ein ähnliches Licht aus, doch ist sie unter einem Glas-Schirm nicht zu übersehen, denn transparent gibt es sie noch nicht. </p>
<p>Hat man eine Lampe, die den Blick auf den Leuchtkörper ungehindert durchlässt, so muss man sich fragen: will man die Lichtquelle zu jeder Tageszeit unübersehbar im Raum schweben haben? Macht man sich lieber auf die Suche nach einem neuen Lampenschirm, der die hässliche neue weiße Birne gekonnt versteckt? Oder schließt man sich den vielen Menschen an, die sich nun aufgemacht haben, die letzten Vorräte der noch verfügbaren guten alten Glühbirne aufzukaufen und das Unvermeidliche damit ein Stück hinaus zu schieben?</p>
<p>Ich bin der Meinung, der Hersteller, der dieses Leuchtmittel zu 100% am Markt etablieren will, muss dafür sorgen, dass es auch zu 100% optisch mit der Glühbirne und den zugehörigen Lampen vereinbar ist. Es darf auf den ersten Blick kein Unterschied zu erkennen sein.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.intelligensbestien.de%2F2009%2F05%2F14%2Fgemtliche-eisblcke-vs-leucht-obst%2F&amp;title=Gem%26uuml%3Btliche%20Eisbl%26ouml%3Bcke%20vs.%20Leucht-Obst" id="wpa2a_14"><img src="http://www.intelligensbestien.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p> <p><a href="http://www.intelligensbestien.de/?flattrss_redirect&amp;id=490&amp;md5=0d65663049b8a101a810bc2f2e411983" title="Flattr" target="_blank"><img src="http://www.intelligensbestien.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.intelligensbestien.de/2009/05/14/gemtliche-eisblcke-vs-leucht-obst/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="http://www.intelligensbestien.de/?flattrss_redirect&amp;id=490&amp;md5=0d65663049b8a101a810bc2f2e411983" type="text/html" />
	</item>
		<item>
		<title>Waffen kotzen (updated)</title>
		<link>http://www.intelligensbestien.de/2008/02/04/waffen-kotzen/</link>
		<comments>http://www.intelligensbestien.de/2008/02/04/waffen-kotzen/#comments</comments>
		<pubDate>Mon, 04 Feb 2008 08:40:58 +0000</pubDate>
		<dc:creator>SeveQ</dc:creator>
				<category><![CDATA[Computer]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Vista]]></category>

		<guid isPermaLink="false">http://seveqs.wordpress.com/?p=205</guid>
		<description><![CDATA[Ich muss mal eine Lanze brechen für ein Unternehmen, das ich vor einigen Jahren noch genau so verflucht habe, wie so manch anderer: Microsoft. Was habe ich damals zeitweise geflucht. Auf das Betriebssystem aus dem Hause Microsoft, auf deren Verhalten am Markt (Monopolitis), auf deren Support-Politik etc. Was haben die an Schrott produziert, den trotzdem [...]]]></description>
			<content:encoded><![CDATA[<p>Ich muss mal eine Lanze brechen für ein Unternehmen, das ich vor einigen Jahren noch genau so verflucht habe, wie so manch anderer: Microsoft. Was habe ich damals zeitweise geflucht. Auf das Betriebssystem aus dem Hause Microsoft, auf deren Verhalten am Markt (Monopolitis), auf deren Support-Politik etc. Was haben die an Schrott produziert, den trotzdem jeder irgendwie haben wollte oder musste?! Tja. Und heute? Heute motzt jeder über Vista. Scheint immer noch <i>in</i> zu sein, Microsoft für seine Produkte zu verdammen. Aber&#8230;</p>
<p>Was stört an Vista <i>wirklich</i>? Was ist es, das dieses Produkt so benutzer<b>un</b>freundlich macht, daß jeder darüber lästert und meckert? Was machen andere Betriebssysteme besser? Linux. Mac. Wobei ich zugeben muss, daß ich bei letzterem nicht mitreden kann. Ich kenne es nicht. Linux hingegen kenne ich durch meinen Arbeitsplatz sehr gut. Ich habe bereits ein Linux From Scratch gebaut (rein aus Sourcen), was nicht viele von sich behaupten können. Ich kenne Linux. Und ich kenne Windows. Und ganz ehrlich: was Microsoft mit Windows Vista abgeliefert hat, übertrifft in Sachen Stabilität und Benutzerfreundlichkeit meiner Meinung nach alle bisher von Microsoft entwickelten Betriebssysteme und bezüglich Benutzerfreundlichkeit auch (noch) Linux.</p>
<p>Ich benutze Vista nun schon eine ganze Weile. Mein Ehrenwort drauf: ich hatte bis jetzt noch keinen einzigen Absturz, der dazu geführt hätte, daß ich den Reset-Knopf betätigen musste. Einige wenige Neuinstallationen waren nötig; das liegt aber an meiner eigenen Unordnung. Ich hab die blöde Angewohnheit, mein System mit der Zeit immer mehr vollmüllen zu lassen mit diversen Anwendungen, Tools, Spielen, etc. Ich deinstalliere selten etwas. Vista verhält sich da jedoch wesentlich dickfelliger, als XP oder 2000 oder gar 95/98/ME. Vista bleibt stabil, wird kaum langsamer. Klar, der Bootvorgang dauert länger, je mehr Autostartprogramme und Dienste man installiert, aber das ist unter XP/2000 und auch unter Linux ebenso der Fall.</p>
<p>Die neue Sicherheitsmaßnahme UAC mag den ein oder anderen stören. Sie lässt sich abschalten.  Aero finden die einen schick (ich auch), die anderen nicht. Es lässt sich abschalten. Alles andere ist eine Sache der Gewöhnung; wie überall anders auch. XP war gegenüber 2000 sicher auch eine Umgewöhnung. 2000 gegenüber NT, respektive 95/98/ME (letzteres, das gebe ich zu, war wirklich Schrott) sicherlich auch.</p>
<p>Also frage ich: <b>Was</b> ist an Vista so mies, daß jeder darüber meckert? Wirklich stichhaltige Argumente habe ich bisher keine finden können.</p>
<blockquote><p><i><b>Update: </b></i>okay&#8230; Also <b>DAS </b>finde ich dann auch nicht gut. Benutzer, die bereits ein Vista besitzen, sollen erst im April in den Genuss des neuen Service Pack 1 kommen (per Auto Update). Alle, die sich Vista erst jetzt zusammen mit einem neuen PC zulegen, bekommen das SP1 schon <b>JETZT</b>. Dreck! Sauerei! Gut, da kann Vista nichts für. Das ist Produktpolitik bei Microsoft. Das macht Vista nicht besser oder schlechter, als es ohnehin schon ist.</p></blockquote>
<p>Ein weiterer Punkt, wo ich Microsoft wirklich loben muss, ist die Entwicklung der Laufzeitumgebung .NET.</p>
<p>Kurz gesagt, .NET ist ein Framework für Windows-Anwendungen. Das beschreibt aber lange nicht einmal nur oberflächlich, was .NET wirklich ist. Ich kann das nur aus Sicht eines Softwareentwicklers sagen: .NET ist für die Windows-Entwicklung eine Offenbarung. Insbesondere C#.NET, allen voran die neue C# Version des .NET Framework 3.5, WPF, WCF etc.</p>
<p>Beispiel: die Entwicklung von Datenbank-Anwendungen hat damit eine Einfachheit erlangt, wie nie zuvor. Man hat eine Liste von Objekten (oder anderen Daten, völlig egal aus welcher Quelle), man möchte diese auf der Oberfläche darstellen und auch verändern können. In Windows Forms war es damals noch nötig, die Verbindung zwischen Oberfläche und Datenbasis auszuprogrammieren. In WPF gibt es nun das DataBinding (gab&#8217;s auch schon in früheren Versionen, aber nicht derart komfortabel). Man sagt dem Programm in der Beschreibungssprache XAML lediglich, <b>wie </b>die Daten dargestellt werden sollen, bindet die Liste an ein Oberflächen-Objekt (beispielsweise eine ListBox) und WPF erledigt den Rest. Bearbeiten von Werten inklusive.</p>
<p>LINQ ist ein weiterer Edelstein Microsoft&#8217;scher Technologie. <font color="#ff0000">L</font>anguage <font color="#ff0000">IN</font>tegrated <font color="#ff0000">Q</font>uery bietet einem die Möglichkeit, in C# mit einer an SQL angelehnten Abfragesyntax Listen von Objekten zu filtern, zu sortieren und zu modifizieren, bevor diese Listen beispielsweise mit <font color="#3366ff">foreach</font> weiterverarbeitet oder über DataBinding einem GUI Control zugewiesen werden. Früher musste man, um eine Liste in <font color="#3366ff">foreach</font> nach einem Wert zu filtern, innerhalb der Schleife abfragen, ob dieser Wert zutrifft oder nicht und entsprechend mit <font color="#3366ff">continue</font> reagieren. Mit LINQ ist dies nicht mehr nötig. Eine <font color="#3366ff">where</font>-Klausel in der LINQ Query und schon arbeitet die <font color="#3366ff">foreach</font>-Schleife nur noch mit den ausgesuchten Objekten. Eine <font color="#3366ff">order by</font>-Klausel in die Query und schon ist die Liste auch noch sortiert. Einfacher geht es kaum.</p>
<p>Das ist nur ein kleines Beispiel dessen, was Microsoft hier abgeliefert hat. Es fehlt noch ein bisschen was, aber alles in allem hat das, womit Microsoft uns seit spätestens 2007 versorgt, wahrlich Hand und Fuß.</p>
<p>Gegenargumente, Kritik und weitere Beispiele für die vorzügliche Arbeit der MS-Entwickler sind natürlich gern gesehen!</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.intelligensbestien.de%2F2008%2F02%2F04%2Fwaffen-kotzen%2F&amp;title=Waffen%20kotzen%20%28updated%29" id="wpa2a_16"><img src="http://www.intelligensbestien.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p> <p><a href="http://www.intelligensbestien.de/?flattrss_redirect&amp;id=257&amp;md5=dd44978277b568a879d7b899b3548ce2" title="Flattr" target="_blank"><img src="http://www.intelligensbestien.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.intelligensbestien.de/2008/02/04/waffen-kotzen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="http://www.intelligensbestien.de/?flattrss_redirect&amp;id=257&amp;md5=dd44978277b568a879d7b899b3548ce2" type="text/html" />
	</item>
		<item>
		<title>eBay Extension für TYPO3</title>
		<link>http://www.intelligensbestien.de/2007/11/05/ebay-extension-fur-typo3/</link>
		<comments>http://www.intelligensbestien.de/2007/11/05/ebay-extension-fur-typo3/#comments</comments>
		<pubDate>Mon, 05 Nov 2007 13:56:11 +0000</pubDate>
		<dc:creator>SeveQ</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[TYPO3]]></category>

		<guid isPermaLink="false">http://seveqs.wordpress.com/2007/11/05/ebay-extension-fur-typo3/</guid>
		<description><![CDATA[Ich hab mir mal die Mühe gemacht, eine TYPO3 Extension zu entwickeln, die einem die Artikel eines bestimmten Verkäufers anzeigt. Sie befindet sich noch im Anfangsstadium, kann aber unter http://www.buechner-grimm.de/ebay.html (bitte JavaScript aktivieren) schon mal begutachtet werden. Ich habe sie auch soeben im TER zur Verfügung gestellt. Version 0.0.1 Experimental, wie immer, wenn ich was [...]]]></description>
			<content:encoded><![CDATA[<p>Ich hab mir mal die Mühe gemacht, eine TYPO3 Extension zu entwickeln, die einem die Artikel eines bestimmten Verkäufers anzeigt. Sie befindet sich noch im Anfangsstadium, kann aber unter <a href="http://www.buechner-grimm.de/ebay.html" title="http://www.buechner-grimm.de/ebay.html">http://www.buechner-grimm.de/ebay.html</a> (bitte JavaScript aktivieren) schon mal begutachtet werden.</p>
<p>Ich habe sie auch soeben im TER zur Verfügung gestellt. Version 0.0.1 Experimental, wie immer, wenn ich was neu reinpacke. Ext.Key lautet <strong><em>svq_ebay</em></strong>. Sie benötigt die <em>t3mootools</em> Extension.</p>
<p>Ach ja, just for Info: man braucht auch &#8216;nen eBay API Key, der frei erhältlich ist, muss sich also als Developer registrieren, wenn man die Extension einsetzen will.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.intelligensbestien.de%2F2007%2F11%2F05%2Febay-extension-fur-typo3%2F&amp;title=eBay%20Extension%20f%C3%BCr%20TYPO3" id="wpa2a_18"><img src="http://www.intelligensbestien.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p> <p><a href="http://www.intelligensbestien.de/?flattrss_redirect&amp;id=235&amp;md5=8d5e08f4bc89aa48bf7ed6c6862b8556" title="Flattr" target="_blank"><img src="http://www.intelligensbestien.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.intelligensbestien.de/2007/11/05/ebay-extension-fur-typo3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<atom:link rel="payment" href="http://www.intelligensbestien.de/?flattrss_redirect&amp;id=235&amp;md5=8d5e08f4bc89aa48bf7ed6c6862b8556" type="text/html" />
	</item>
		<item>
		<title>Bastelwastel</title>
		<link>http://www.intelligensbestien.de/2007/09/28/bastelwastel/</link>
		<comments>http://www.intelligensbestien.de/2007/09/28/bastelwastel/#comments</comments>
		<pubDate>Fri, 28 Sep 2007 10:25:01 +0000</pubDate>
		<dc:creator>SeveQ</dc:creator>
				<category><![CDATA[...die die Welt nicht braucht]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>

		<guid isPermaLink="false">http://seveqs.wordpress.com/2007/09/28/bastelwastel/</guid>
		<description><![CDATA[Hab gebastelt&#8230; mir war langweilig, und mich nervte das ständige manuelle Umformatieren der Chatlogs für German-Bash.org. Da hab ich mir gedacht, ich bau mal &#8216;n Programm, das das macht. And here it comes&#8230; Bedienungsanleitung Einfach Chatlog einfügen, Nicknames einzeln markieren und über den Button &#8220;Add selected text as nickname&#8221; als solche der Liste hinzufügen und [...]]]></description>
			<content:encoded><![CDATA[<p>Hab gebastelt&#8230; mir war langweilig, und mich nervte das ständige manuelle Umformatieren der Chatlogs für <a href="http://www.german-bash.org">German-Bash.org.</a> Da hab ich mir gedacht, ich bau mal &#8216;n Programm, das das macht.</p>
<p><a href="http://downloads.syncro-community.de/gboformatt0r.rar">And here it comes&#8230; </a></p>
<p><strong>Bedienungsanleitung</strong></p>
<p>Einfach Chatlog einfügen, Nicknames <strong>einzeln </strong>markieren und über den Button &#8220;Add selected text as nickname&#8221; als solche der Liste hinzufügen und dann auf &#8220;Format it!&#8221; klicken. Alles, was vor den Nicknames bis zum Anfang der Zeile kommt, wird entfernt, die Nicknames mit &lt;&gt; umschlossen und Doppelpunkte nach den Nicks entfernt. Der Rest bleibt wie er ist.</p>
<p>Was sagt ihr dazu? Ein essenzielles Must Have und völlig sinnbefreit oder?! <img src='http://www.intelligensbestien.de/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p><strong><em>Update:</em></strong> So, nachdem ich da nochma drübergeschaut hab, heißt das Programm jetz im Setup auch nicht mehr &#8220;Setuo&#8221;, sondern korrekterweise &#8220;GBO Formatt0r&#8221;. Außerdem funktioniert es jetzt auch. <img src='http://www.intelligensbestien.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.intelligensbestien.de%2F2007%2F09%2F28%2Fbastelwastel%2F&amp;title=Bastelwastel" id="wpa2a_20"><img src="http://www.intelligensbestien.de/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p> <p><a href="http://www.intelligensbestien.de/?flattrss_redirect&amp;id=227&amp;md5=76bb95a987cf5d0b5aff7476aae79776" title="Flattr" target="_blank"><img src="http://www.intelligensbestien.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.intelligensbestien.de/2007/09/28/bastelwastel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="http://www.intelligensbestien.de/?flattrss_redirect&amp;id=227&amp;md5=76bb95a987cf5d0b5aff7476aae79776" type="text/html" />
	</item>
	</channel>
</rss>

