<?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>Flash Systems</title>
	<atom:link href="http://www.flashsystems.de/feed" rel="self" type="application/rss+xml" />
	<link>http://www.flashsystems.de</link>
	<description>Hompage von Daniel Goß</description>
	<lastBuildDate>Mon, 07 May 2012 12:36:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Gastnetz und VLANs mit DD-WRT</title>
		<link>http://www.flashsystems.de/articles/1730</link>
		<comments>http://www.flashsystems.de/articles/1730#comments</comments>
		<pubDate>Sun, 08 Apr 2012 22:00:20 +0000</pubDate>
		<dc:creator>dgoss</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Knowledge Base]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Netzwerk]]></category>
		<category><![CDATA[DD-WRT]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[WRT54GL]]></category>

		<guid isPermaLink="false">https://ssl.kundenserver.de/flashsystems.de/?p=1730</guid>
		<description><![CDATA[Der Linksys Wireless Router WRT54GL ist bei Amazon schon für unter 40€ zu haben. Das Gerät hat es wirklich in sich. Es beherrscht echte 802.1q VLANs und dazu noch Multi-SSID. Was liegt also näher, als endlich ein Gast-WLAN aufzubauen, welches Freunden und Bekannten bequemen Zugriff ins Internet ermöglicht, ohne dass deren Geräte sich direkt im [...]]]></description>
			<content:encoded><![CDATA[<p>Der Linksys Wireless Router WRT54GL ist bei <a href="www.amazon.de/s/field-keywords=wrt54gl">Amazon</a> schon für unter 40€ zu haben. Das Gerät hat es wirklich in sich. Es beherrscht echte 802.1q VLANs und dazu noch Multi-SSID. Was liegt also näher, als endlich ein Gast-WLAN aufzubauen, welches Freunden und Bekannten bequemen Zugriff ins Internet ermöglicht, ohne dass deren Geräte sich direkt im internen Netzwerk einbuchen müssen.<span id="more-1730"></span></p>

<h1>Einleitung</h1>

<p>Für meinen Zweck läuft die Firewall mit DHCP-Server, DNS-Dienst und NAT auf einem eigenen Server. Daher verwende ich diese Features von DD-WRT nicht. Wer sie nutzen möchte, findet im <a href="http://www.dd-wrt.com/wiki/index.php">DD-WRT Wiki</a> viele Anregungen.</p>

<p>Diese Anleitung beschreibt »lediglich« die Nutzung eines DD-WRT Accesspoints für mehrere SSIDs. Dabei wird jeder SSID ein eigenes VLAN zugeordnet. Das Routing, sowie DHCP und DNS wird nicht weiter beschrieben, da das bei mir der Server erledigt.</p>

<p>Interessanterweise habe ich für diesen einfachen Anwendungsfall keine Anleitung im Netz finden können. Falls mein Router also einmal die Konfiguration vergessen sollte, habe ich hier die Schritte zum Einrichten dieser Konfiguration festgehalten. Hoffentlich hilft es dem Einen oder Anderen weiter:</p>

<h2>Vorbereitungen</h2>

<p>Als erstes muss natürlich DD-WRT auf dem Router installiert werden. Das geht ziemlich einfach und problemlos, sofern man sich sklavisch an die <a href="http://www.dd-wrt.com/wiki/index.php/Linksys_WRT54GL">Anleitung</a> hält. Jede Abkürzung kann dazu führen, dass man anschließend nur noch einen blau-schwarzen Briefbeschwerer mit zwei Antennen hat. Also, auch wenn 90 Sekunden Taste drücken für einen Factory-Reset etwas übertrieben erscheinen, die (insgesamt 3) Extraminuten sollte es einem wert sein. Anschließend hat man einen Wireless-Router, der alles kann, was man je brauchen wird und dazu noch viele Features bietet, von denen man nicht einmal wusste, dass man sie brauchen könnte.</p>

<p>Gut bewährt hat sich die Firmware-Version »<code>DD-WRT v24-sp2 (10/10/09) mini - build 13064</code>″. Das mini-Build enthält auch schon alles, was für die hier beschriebene Konfiguration notwendig ist. So dass man nicht unbedingt auf eines der größeren Builds wechseln muss.</p>

<p>Nach der Installation sollte man sich erst einmal um die Grundeinrichtung kümmern. Also Kennwort setzen, IP-Adresse vergeben, primäres WLAN einrichten, etc. Danach, kann es mit dem Einrichten des Gastnetzes weitergehen.</p>

<h2>Ports</h2>

<p>Da der Linksys Router fünf Ports besitzt, muss man sich zuerst entscheiden wie man diese nutzen möchte. Intern sind diese mit einem VLAN-Switch verbunden, welcher eine Trennung zwischen den Ports ermöglicht. Die nachfolgend dargestellte Konfiguration macht den mit »WAN« beschrifteten Anschluss zum VLAN-Trunk (dieser führt die VLANs also zu einem 802.1q fähigen Switch — in meinem Fall einem HP ProCurve den ich wirklich empfehlen kann). Die anderen vier LAN-Ports sind dem VLAN 1 zugeordnet und sind somit einfach mit dem internen (privaten) Netzwerk verbunden. So hat man dort, wo der Router installiert ist, noch vier interne LAN-Ports zusätzlich.</p>

<p>Wenn man sich hier für eine andere Konfiguration entscheidet, sind die einzelnen Punkte der Anleitung ggf. entsprechend abzuwandeln.</p>

<h1>Multi-SSID</h1>

<p>Um mehrere WLANs mit unterschiedlichen Namen nutzen zu können, muss die Funkhardware des WRT54GL dies auch können. Da es hier unterschiedliche Hardwarerevisionen gibt, muss man zuerst prüfen, welche in der Kiste steckt. Hierfür gibt es ein Konsolenkommando. Nach dem Login per Telnet gibt man also auf der Konsole des Routers folgenden Befehl ein.</p>

<pre class="hlcode hlcode-bash"><code><ol class="bash"><li class="li1"><div class="de1">nvram get wl0_corerev</div></li>
</ol></code></pre>

<p>Dabei wird eine einzelne Zahl ausgegeben, die wie folgt zu interpretieren<sup id="fnref:hw_revision"><a href="#fn:hw_revision" rel="footnote">1</a></sup> ist:
<table>
<thead>
<tr>
  <th>Hardwareversion</th>
  <th>Multi-SSID fähigkeit</th>
</tr>
</thead>
<tbody>
<tr>
  <td>0 bis 4</td>
  <td>Schade, keine Multi-SSID-Unterstützung.</td>
</tr>
<tr>
  <td>5 bis 8</td>
  <td>Multi-SSID ist möglich, allerdings nur mit der gleichen MAC-Adresse. Das kann bei einigen Wireless-Geräten zu Problemen führen. Probieren geht über studieren.</td>
</tr>
<tr>
  <td>9 oder höher</td>
  <td>Perfekt. Die Multi-SSID-Unterstützung ist komplett vorhanden. Auch mit einer eigenen MAC-Adresse je virtuellem WLAN.</td>
</tr>
</tbody>
</table></p>

<p>Gut, nachdem das geklärt ist und hoffentlich eine 9 auf der Konsole aufgetaucht ist, geht es jetzt an die Konfiguration des zweiten WLANs. Ich gehe davon aus, dass das erste WLAN bereits konfiguriert ist. Dieses wird als internes (privates) WLAN verwendet. Also muss jetzt noch das Gastnetz hinzugefügt werden.</p>

<p><strong>Wichtig</strong>: Wie bei allen Konfigurationsänderungen sollte man diese lieber über die normale Netzwerkverbindung als über das WLAN durchführen. Bei mir hat es zwar auch über das WLAN gut geklappt. Das ständige Auf– und Abbauen der Verbindung kann aber ganz schön nerven. Außerdem geht über Funk doch schnell mal die Verbindung verloren. Also besser doch ein Kabel in den Router stecken.</p>

<h2>Zweites WLAN einrichten</h2>

<p>Weiter geht es auf dem Reiter »Wireless« — »Basic Settings«. Hier kann nun das zweite, virtuelle WLAN eingerichtet werden. Einfach den »Add«-Button drücken und eine weitere (natürlich von der ersten verschiedene) SSID für das Gast-WLAN vergeben:
<div id="attachment_1750" class="wp-caption alignnone" style="width: 306px"><a class="medialink" href="https://ssl.kundenserver.de/flashsystems.de/articles/1730/ddwrt-wlan" rel="attachment wp-att-1750"><img src="http://www.flashsystems.de/wp-content/uploads/ddwrt-wlan-296x300.png" alt="Einrichten des zweiten WLANs (gast)" title="DD-WRT WLAN Konfiguration" width="296" height="300" class="size-medium wp-image-1750" /></a><p class="wp-caption-text">Einrichten des zweiten WLANs (gast)</p></div>
Ich habe das WLAN für dieses Beispiel einfach »gast»<sup id="fnref:kreativ"><a href="#fn:kreativ" rel="footnote">2</a></sup> genannt. Natürlich sollte man sich hier einen eigenen, schönen Namen ausdenken. Die weiteren Optionen für das WLAN sollten folgendermaßen gesetzt sein:
<table>
<thead>
<tr>
  <th>Option</th>
  <th>Wert</th>
  <th>Kommentar</th>
</tr>
</thead>
<tbody>
<tr>
  <td>Wireless SSID Broadcast</td>
  <td>Enabled</td>
  <td>Die Gäste sollen das WLAN ja auch finden können.</td>
</tr>
<tr>
  <td>AP Isolation</td>
  <td>Enabled</td>
  <td>Die Gäste sollen sich nicht gegenseitig sehen.</td>
</tr>
<tr>
  <td>Network Configuration</td>
  <td>Bridged</td>
  <td>Wichtig, sonst funktioniert die restliche Konfiguration nicht.</td>
</tr>
</tbody>
</table></p>

<p>Die Einstellungen werden anschließend über die Schaltfläche »Apply Settings« gespeichert.</p>

<h2>Sicherheit</h2>

<p><div id="attachment_1751" class="wp-caption alignright" style="width: 160px"><a class="medialink" href="https://ssl.kundenserver.de/flashsystems.de/articles/1730/ddwrt-wsec" rel="attachment wp-att-1751"><img src="http://www.flashsystems.de/wp-content/uploads/ddwrt-wsec-150x128.png" alt="DD-WRT Wirless Security" title="DD-WRT Wirless Security" width="150" height="128" class="size-thumbnail wp-image-1751" /></a><p class="wp-caption-text">DD-WRT Wirless Security</p></div>
Weiter geht es auf der Seite »Wireless« — »Wireless Security«. Hier muss für das neue WLAN natürlich noch die Verschlüsselung aktiviert und ein geeignetes Kennwort gesetzt werden. Auch bei einem Gast-WLAN möchte man ja schließlich keine ungebetenen Gäste.</p>

<p>Auch hier werden die Einstellungen wieder über die Schaltfläche »Apply Settings« gespeichert.</p>

<p>Sind die Sicherheitseinstellungen korrekt konfiguriert geht es jetzt mit dem Einrichten der VLANs weiter.</p>

<h1>VLANs</h1>

<p>Diese Konfiguration lässt sich paradoxerweise am einfachsten über das WLAN durchführen. Da hierbei die Einstellungen des in den WRT54GL integrierten Switches verändert werden, ist über WLAN die Gefahr sich auszusperren am geringsten.</p>

<p>Auf der Seite »Setup« — »VLANs« müssen nun die VLANs konfiguriert werden. Dabei habe ich folgende VLAN-Zuordnung gewählt. Natürlich können auch andere VLANs verwendet werden:
<table>
<thead>
<tr>
  <th>VLAN</th>
  <th>Zweck</th>
</tr>
</thead>
<tbody>
<tr>
  <td>1</td>
  <td>Internes Netzwerk</td>
</tr>
<tr>
  <td>12</td>
  <td>Gastnetz</td>
</tr>
</tbody>
</table></p>

<p>Wie das nachfolgende Bild zeigt, müssen nun die einzelnen VLANs den Anschlüssen des WRT54GL zugewiesen werden. In diesem Fall müssen also die VLANs 1 und 12 auf den WAN-Anschluss. Zusätzlich werden die anderen Switchports dem VLAN 1 zugeordnet, damit diese ebenfalls noch als LAN-Ports nutzbar sind.</p>

<div id="attachment_1749" class="wp-caption alignnone" style="width: 228px"><a class="medialink" href="https://ssl.kundenserver.de/flashsystems.de/articles/1730/ddwrt-vlan" rel="attachment wp-att-1749"><img src="http://www.flashsystems.de/wp-content/uploads/ddwrt-vlan-218x300.png" alt="DD-WRT VLAN Einstellungen" title="DD-WRT VLAN Einstellungen" width="218" height="300" class="size-medium wp-image-1749" /></a><p class="wp-caption-text">DD-WRT VLAN Einstellungen</p></div>

<p>Wichtig ist der Haken »Tagged« in der Spalte »W«. Dieser macht aus dem WAN-Anschluss einen VLAN-Trunk, bei welchem die Pakete mit einem 802.1q-Tag versehen werden. Die verwendeten Ports sollte man, ebenso wie das WLAN, noch der LAN-Bridge zuordnen.</p>

<p>Anschließend natürlich nicht das Speichern über die Schaltfläche »Apply Settings« vergessen.</p>

<h2>Verbinden der einzelnen Interfaces</h2>

<p>Jetzt müssen die einzelnen Interfaces noch passend miteinander verbunden werden. Die folgende Tabelle gibt erst einmal einen Überblick über die relevanten Interfaces:
<table>
<thead>
<tr>
  <th>Interface</th>
  <th>Beschreibung</th>
</tr>
</thead>
<tbody>
<tr>
  <td>eth1</td>
  <td>Primäres Wireless-Interface (erste SSID — internes Netzwerk)</td>
</tr>
<tr>
  <td>wl0.1</td>
  <td>Sekundäres Wireless-Interface (zweite SSID — Gast-Netzwerk)</td>
</tr>
<tr>
  <td>vlan1</td>
  <td>VLAN mit ID 1 (intern) auf dem internen Switch</td>
</tr>
<tr>
  <td>vlan12</td>
  <td>VLAN mit ID 12 (Gast) auf dem internen Switch</td>
</tr>
</tbody>
</table></p>

<p>Es sind also zwei Bridges notwendig um die Interfaces korrekt zu verbinden. Aktuell müssten alle Interfaces der Bridge br0 zugeordnet sein. D.h. die vier Netzwerkinterfaces sind alle miteinander verbunden. Korrekt wäre jedoch folgende Zuordnung:</p>

<table>
<thead>
<tr>
  <th>Bridge</th>
  <th>Interfaces</th>
</tr>
</thead>
<tbody>
<tr>
  <td>br0</td>
  <td>eth1, vlan1</td>
</tr>
<tr>
  <td>br1</td>
  <td>wl0.1, vlan12</td>
</tr>
</tbody>
</table>

<p>Um das zu erreichen muss zuerst eine weitere Bridge angelegt werden. Hierzu dient die  »Add«-Schaltfläche im Abschnitt »Create Bridge« der DD-WRT Verwaltung. Man sollte sich bei der neuen Bridge nicht von der Beschriftung der ersten Zeile irritieren lassen. Hier steht zwar »Bridge 0″ aber in das erste Feld muss trotzdem »br1« eingetragen werden (»br0« ist immer vorhanden und zählt daher anscheinend nicht). STP kann normalerweise abgeschaltet werden. Die restlichen Werte lässt man einfach auf den Standardeinstellungen.</p>

<p>Jetzt braucht die Bridge noch eine IP-Adresse aus dem Netzwerksegment des Gastnetzes (VLAN 12).</p>

<p>Ist alles eingestellt kann die Bridge über die »Apply Settings«-Schaltfläche angelegt werden. Was jetzt noch fehlt ist die Zuordnung der Interfaces zur neuen Bridge.</p>

<p>Über die »Add«-Schaltfläche im Abschnitt »Assign to Bridge« können Interfaces einer Bridge zugeordnet werden. Nach dem ersten Klick auf »Add« wird die Bridge »br1« ausgewählt und das Interface »wl0.1″ zugeordnet. Die Standardpriorität kann man hierbei getrost beibehalten. Anschließend muss man nochmals auf »Add« klicken und auch das Interface »vlan12« der Bridge »br1« zuweisen.</p>

<p>Die Änderungen werden wieder über die Schaltfläche »Apply Settings« gespeichert. Am Ende sollte alles so aussehen wie auf dem folgenden Screenshot:
<div id="attachment_1748" class="wp-caption alignnone" style="width: 203px"><a class="medialink" href="https://ssl.kundenserver.de/flashsystems.de/articles/1730/ddwrt-tagging" rel="attachment wp-att-1748"><img src="http://www.flashsystems.de/wp-content/uploads/ddwrt-tagging-193x300.png" alt="DD-WRT VLANs und Bridges" title="DD-WRT VLANs und Bridges" width="193" height="300" class="size-medium wp-image-1748" /></a><p class="wp-caption-text">DD-WRT VLANs und Bridges</p></div></p>

<h1>Finale Konfiguration</h1>

<p>Jetzt sind die VLANs passend eingerichtet. Auf dem WAN-Port erscheinen nun Pakete mit dem 802.1q VLAN-Tags 1 und 12. Je nach verwendetem WLAN bzw. Port am WRT54GL. Was jetzt noch fehlt ist die Konfiguration am zentralen Netzwerkswitch. Hier muss der Anschluss, an welchem der WAN-Port des Wireless-Routers angebunden ist, noch als Trunk für die VLANs 1 und 12 konfiguriert werden. Natürlich ist es auch hilfreich das »Ingress Filtering« passend für die verwendeten VLANs zu konfigurieren und zu aktivieren<sup id="fnref:vergessen"><a href="#fn:vergessen" rel="footnote">3</a></sup>.</p>

<p>Falls ein DHCP-Server verwendet wird (wovon ich fast einmal ausgehe), muss dieser noch für das neue VLAN konfiguriert werden. Läuft der VLAN-Trunk bis zur Firewall/zum Server auf welchem der DHCP-Server sitzt, braucht dieser natürlich noch ein neues, virtuelles Interface im passenden VLAN um die DHCP-Anfragen zu beantworten.</p>

<h2>Test, Test</h2>

<p>Ist alles konfiguriert, kann man zuerst einmal versuchen, die IP-Adresse der Bridge »br1« zu pingen. Klappt das, ist das VLAN schon einmal korrekt von der Firewall/vom Server bis zum Wireless-Router eingerichtet. Sobald der DHCP-Server läuft kann man versuchen einen Client mit dem neuen Gastnetzwerk zu verbinden, was eigentlich auf Anhieb klappen sollte. Wenn nicht: Viel Spaß beim Fehler suchen <img src='http://www.flashsystems.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<div class="footnotes">
<hr />
<ol>

<li id="fn:hw_revision">
<p>Quelle: <a href="http://www.dd-wrt.com/wiki/index.php/Multiple_WLANs">DD-WRT Wiki</a> <a href="#fnref:hw_revision" rev="footnote">↩</a></p>
</li>

<li id="fn:kreativ">
<p>Bin ich nicht kreativ <img src='http://www.flashsystems.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  <a href="#fnref:kreativ" rev="footnote">↩</a></p>
</li>

<li id="fn:vergessen">
<p>Das hatte ich am Anfang vergessen, was zu unnötigem Frust geführt hat, da das VLAN 12 einfach nicht funktionieren wollte. <a href="#fnref:vergessen" rev="footnote">↩</a></p>
</li>

</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.flashsystems.de/articles/1730/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Treiber Version 9.2 für Atheros AR5Bxx</title>
		<link>http://www.flashsystems.de/articles/1708</link>
		<comments>http://www.flashsystems.de/articles/1708#comments</comments>
		<pubDate>Fri, 30 Mar 2012 04:00:16 +0000</pubDate>
		<dc:creator>dgoss</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Netzwerk]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Treiber]]></category>

		<guid isPermaLink="false">https://ssl.kundenserver.de/flashsystems.de/?p=1708</guid>
		<description><![CDATA[Wie man erkennen kann, dreht sich bei mir aktuell einiges um LAN und WLAN. Nach der Umrüstung meines Linksys Accesspoints auf DD-WRT (was sehr zu empfehlen ist) hatte ich ein Problem mit meinem Acer Aspire One A150 Netbook. Dieses läuft seit Monaten mit Windows 7 sehr zufriedenstellend, jedoch kam es mit der Treiberversion 7.0.x.x des [...]]]></description>
			<content:encoded><![CDATA[<p>Wie man erkennen kann, dreht sich bei mir aktuell einiges um LAN und WLAN. Nach der Umrüstung meines Linksys Accesspoints auf DD-WRT (was sehr zu empfehlen ist) hatte ich ein Problem mit meinem Acer Aspire One A150 Netbook. Dieses läuft seit Monaten mit Windows 7 sehr zufriedenstellend, jedoch kam es mit der Treiberversion 7.0.x.x des WLAN-Treibers für das Atheros AR5BXB63 WLAN-Modul immer wieder zu Verbindungsabbrüchen.<span id="more-1708"></span></p>

<h1>Alte Hardware, alte Leier</h1>

<p>Wie immer gibt es für alte Hardware vom Hersteller keinen Support und keine neuen Treiber mehr. Ich wollte jedoch keine Treiber aus irgendwelchen Foren einspielen. Hier weiß man einfach nicht, was man bekommt. Im besten Fall fehlen einige wichtige Dateien, im schlechtesten erhält man einen Trojaner oder ein Backdoor gratis dazu. Also habe ich mich auf der Acer-Seite auf die Suche nach einem aktuelleren Notebook/Netbook-Model gemacht, welches ebenfalls einen Atheros Chip unterstützt.</p>

<h2>Neue Treiber auf alter Hardware</h2>

<p>Fündig wurde ich beim Aspire One AO722. Dieses Netbook findet man auf der Acer-Seite über »Support« &gt; »Treiber &amp; Downloads«. Anschließend wählt man »Netbook« &gt; »Aspire One« &gt; »AO722« und wählt dann das korrekte Betriebssystem (in meinem Fall »Windows 7 Professional x86«) aus. In der Treiberliste taucht dann der aktuelle Atheros Treiber mit der Versionsnummer 9.2.x.x auf. Diese Datei sollte man jetzt herunterladen.</p>

<div id="attachment_1711" class="wp-caption alignnone" style="width: 310px"><a class="medialink" href="https://ssl.kundenserver.de/flashsystems.de/articles/1708/acer_ao722" rel="attachment wp-att-1711"><img src="http://www.flashsystems.de/wp-content/uploads/acer_ao722-300x92.png" alt="Auswahl Acer Aspire One 722" title="Acer Aspire One 722" width="300" height="92" class="size-medium wp-image-1711" /></a><p class="wp-caption-text">Auswahl des Acer Aspire One 722</p></div>

<h2>Installation</h2>

<p>Da ich die Installationsprogramme der Hersteller (welche immer allerlei Schrott mit installieren) nicht mag und diese auf dem Netbook nur für noch mehr träge Masse sorgen, habe ich den Treiber über den Gerätemanager installiert.</p>

<p>Hierfür entpackt man die heruntergeladene ZIP-Datei. Im Unterordner <code>WLAN_Atheros_9.2.0.469_W7x86\ndis6xWin7\</code> findet man nun alle für die Installation nötigen Dateien. Über den Gerätemanager sucht man nun den Wireless-Adapter heraus und vergewissert sich noch einmal auf dem Reiter Details, dass man es wirklich mit einem Atheros-Adapter zu tun hat. Ist dies der Fall, wechselt man auf den Reiter »Treiber« und wählt »Treiber aktualisieren…«. Dort klickt man »Auf dem Computer nach Treibersoftware suchen.« an und wählt als Speicherort den vorhin entpackten Ordner <code>ndis6xWin7</code> aus. Nun installiert Windows den neuen WLAN-Treiber.</p>

<h1>Ergebnis</h1>

<p>Die sporadischen Disconnects, welche mein Aspire One geplagt hatten, sind mit der neuen Treiberversion verschwunden. Nun ist die WLAN-Verbindung auch mit dem neuen Accesspoint und DD-WRT stabil.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flashsystems.de/articles/1708/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mediatomb und BDP7500/MKII</title>
		<link>http://www.flashsystems.de/articles/1696</link>
		<comments>http://www.flashsystems.de/articles/1696#comments</comments>
		<pubDate>Sun, 25 Mar 2012 10:49:00 +0000</pubDate>
		<dc:creator>dgoss</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Knowledge Base]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Netzwerk]]></category>
		<category><![CDATA[Philips]]></category>

		<guid isPermaLink="false">https://ssl.kundenserver.de/flashsystems.de/?p=1696</guid>
		<description><![CDATA[Nachdem es mich mehrere Tage gekostet hat, die richtigen Einstellungen für das reibungslose Streaming auf den Philips Blue-Ray-Player BDP7500/MKII zu finden, möchte ich diese hier einfach dokumentieren. Zusätzlich gibt es einen kleinen Tipp für die Nutzung als Medienplayer, wenn man nicht immer den Fernseher einschalten möchte. Mediatomb Einstellungen Die wichtigste Einstellung, damit die Wiedergabe nicht [...]]]></description>
			<content:encoded><![CDATA[<p>Nachdem es mich mehrere Tage gekostet hat, die richtigen Einstellungen für das reibungslose Streaming auf den Philips Blue-Ray-Player BDP7500/MKII zu finden, möchte ich diese hier einfach dokumentieren. Zusätzlich gibt es einen kleinen Tipp für die Nutzung als Medienplayer, wenn man nicht immer den Fernseher einschalten möchte.<span id="more-1696"></span></p>

<h2>Mediatomb Einstellungen</h2>

<p>Die wichtigste Einstellung, damit die Wiedergabe nicht stottert, ist <code>&lt;protocolInfo extend="yes"/&gt;</code>. Diese stellt sicher, dass der Player alle notwendigen Informationen erhält um MP3-Dateien problemlos wiederzugeben. Ansonsten gibt es Aussetzer oder die Wiedergabe funktioniert überhaupt nicht.</p>

<p>Zusätzlich sollte man die Einstellungen für den Zeichensatz im Abschnitt <code>import</code> prüfen und ggf. anpassen. Unter Linux kann man heutzutage fast alles auf UTF8 stellen. Falsche Sonderzeichen können sonst auch den Player zum Absturz bringen.</p>

<pre class="hlcode hlcode-xml"><code><ol class="xml"><li class="li1"><div class="de1"><span class="sc3"><span class="re1">&lt;filesystem-charset<span class="re2">&gt;</span></span></span>UTF-8<span class="sc3"><span class="re1">&lt;/filesystem-charset<span class="re2">&gt;</span></span></span></div></li>
<li class="li1"><div class="de1"><span class="sc3"><span class="re1">&lt;metadata-charset<span class="re2">&gt;</span></span></span>UTF-8<span class="sc3"><span class="re1">&lt;/metadata-charset<span class="re2">&gt;</span></span></span></div></li>
<li class="li1"><div class="de1"><span class="sc3"><span class="re1">&lt;playlist-charset<span class="re2">&gt;</span></span></span>UTF-8<span class="sc3"><span class="re1">&lt;/playlist-charset<span class="re2">&gt;</span></span></span></div></li>
</ol></code></pre>

<h1>Blindbedienung</h1>

<p>Wenn man den Player als Musikspieler einsetzt, möchte man natürlich nicht immer den Fernseher einschalten um Musik abzuspielen. Leider lässt sich das Hauptmenü blind nicht wirklich gut bedienen. Nur durch Zufall ist mir jedoch aufgefallen, dass wenn man die Home-Taste drückt, der Player die zuletzt genutzte Funktion erneut aufruft. Wenn man also vor dem Ausschalten immer kurz auf die Medienauswahl für das LAN wechselt, kann man diese beim nächsten Einschalten blind über die Home-Taste aufrufen. Wenn man nur einen Medienserver hat und die Playlist so benennt, das sie an erster Stelle steht, kann man einfach durch wiederholtes Drücken der »Nach rechts«-Taste die Playlist auswählen, ohne den Fernseher einschalten zu müssen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flashsystems.de/articles/1696/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Datumsrechnung in Shell-Scripten</title>
		<link>http://www.flashsystems.de/articles/1521</link>
		<comments>http://www.flashsystems.de/articles/1521#comments</comments>
		<pubDate>Tue, 14 Feb 2012 23:00:56 +0000</pubDate>
		<dc:creator>dgoss</dc:creator>
				<category><![CDATA[Knowledge Base]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Bash]]></category>

		<guid isPermaLink="false">http://www.flashsystems.de/?p=1521</guid>
		<description><![CDATA[Wer häufiger Shellscripte für Linux erstellt, hatte bestimmt schon häufiger das Problem, dass er das Datum des nächsten Ersten oder die Uhrzeit minus eine Stunde ermitteln musste. In vielen Scripten wird dann wild mit Shellvariablen und Shell-Funktionen herumoperiert. Dabei gibt es doch unter Linux einen viel einfacheren — und besseren — Weg mit dem Datum [...]]]></description>
			<content:encoded><![CDATA[<p>Wer häufiger Shellscripte für Linux erstellt, hatte bestimmt schon häufiger das Problem, dass er das Datum des nächsten Ersten oder die Uhrzeit minus eine Stunde ermitteln musste. In vielen Scripten wird dann wild mit Shellvariablen und Shell-Funktionen herumoperiert. Dabei gibt es doch unter Linux einen viel einfacheren — und besseren — Weg mit dem Datum zu jonglieren:<span id="more-1521"></span></p>

<p>Das date-Kommando, welches die meisten Linux-Distributionen standardmäßig mitliefern, wird meist nur zur formatierten Datumsausgabe verwendet. Das Kommando <code>date +"%d.%m.%Y"</code> gibt das aktuelle Datum in deutscher Schreibweise [Tag].[Monat].[Jahr] aus. Doch <code>date</code> kann noch viel mehr:</p>

<h1>Datum mit Format</h1>

<p>Das <code>date</code>–Kommando kann das Datum in unterschiedlichen Formaten ausgeben. Hierbei wird das gewünschten Format nach einem <code>+</code>–Zeichen übergeben. Bestimmte Zeichenkombinationen werden hierbei durch Werte aus dem aktuellen Datum ersetzt. Einen Überblick gibt die folgende Tabelle:
<table>
<thead>
<tr>
  <th>Zeichen</th>
  <th>Bedeutung</th>
</tr>
</thead>
<tbody>
<tr>
  <td>%%</td>
  <td>Ein %-Zeichen.</td>
</tr>
<tr>
  <td>%a</td>
  <td>Abgekürzter Name des Wochentages (z.B. Son, Mon). Abhängig von der aktuell eingestellten Locale.</td>
</tr>
<tr>
  <td>%A</td>
  <td>Der vollständige Name des Wochentages (z.B. Sonntag). Abhängig von der aktuell eingestellten Locale.</td>
</tr>
<tr>
  <td>%b</td>
  <td>Abgekürzter Name des Monats (z.B. Jan, Feb). Abhängig von der aktuell eingestellten Locale.</td>
</tr>
<tr>
  <td>%B</td>
  <td>Der vollständige Name des Monats (z.B. Januar). Abhängig von der aktuell eingestellten Locale.</td>
</tr>
<tr>
  <td>%c</td>
  <td>Datum und Uhrzeit in der Formatierung der aktuellen Locale.</td>
</tr>
<tr>
  <td>%C</td>
  <td>Das Jahrhunder. Im Prinzip die ersten beiden Stellen der Jahreszahl.</td>
</tr>
<tr>
  <td>%d</td>
  <td>Tag im Monat inkl. führender Null. (z.B. 01, 11, etc.).</td>
</tr>
<tr>
  <td>%D</td>
  <td>Das aktuelle Datum. Entsprich <code>date +"%m/%d/%y"</code>.</td>
</tr>
<tr>
  <td>%e</td>
  <td>Tag im Monat. Bei den Tagen 1–9 mit vorangestelltem Leerzeichen. Entsprich <code>%_d</code>.</td>
</tr>
<tr>
  <td>%F</td>
  <td>Vollständiges Datum. Entsprich <code>date +"%Y-%m-%d"</code>.</td>
</tr>
<tr>
  <td>%g</td>
  <td>Die letzten beiden Stellen des Jahres der aktuellen ISO-Woche. D.h. zum Jahreswechsel zählt das Jahr, zu welchem die aktuelle Kalenderwoche (nach ISO) gehört.</td>
</tr>
<tr>
  <td>%G</td>
  <td>Das Jahr der aktuellen ISO-Woche (vierstellig). D.h. zum Jahreswechsel zählt das Jahr, zu welchem die aktuelle Kalenderwoche (nach ISO) gehört. Wird normalerweise in Kombination mit <code>%V</code> verwendet.</td>
</tr>
<tr>
  <td>%h</td>
  <td>Entspricht <code>%b</code>.</td>
</tr>
<tr>
  <td>%H</td>
  <td>Stunde im 24-Stunden-Format (00–23).</td>
</tr>
<tr>
  <td>%I</td>
  <td>Stunde im 12-Stunden-Format (01–12).</td>
</tr>
<tr>
  <td>%j</td>
  <td>Tag des Jahres (001–366).</td>
</tr>
<tr>
  <td>%k</td>
  <td>Stunde ohne führende 0 im 24-Stunden-Format (00–23).</td>
</tr>
<tr>
  <td>%l</td>
  <td>Stunde ohne führende 0 im 12-Stunden-Format (0–12).</td>
</tr>
<tr>
  <td>%m</td>
  <td>Monat mit führender 0 (01–12).</td>
</tr>
<tr>
  <td>%M</td>
  <td>Minute mit führender 0 (00–59).</td>
</tr>
<tr>
  <td>%n</td>
  <td>Ein Newline-Zeichen (\n).</td>
</tr>
<tr>
  <td>%N</td>
  <td>Nanosekunden (000000000..999999999)</td>
</tr>
<tr>
  <td>%p</td>
  <td>Darstellung von AM und PM in der lokalen Schreibweise.</td>
</tr>
<tr>
  <td>%P</td>
  <td>Wie %p nur in Kleinbuchstaben (nicht ganz logisch — ich weiß)</td>
</tr>
<tr>
  <td>%r</td>
  <td>Uhrzeit im 12-Stunden-Format in der lokalen Schreibweise.</td>
</tr>
<tr>
  <td>%R</td>
  <td>Uhrzeit im 24-Stunden-Format in der lokalen Schreibweise.</td>
</tr>
<tr>
  <td>%s</td>
  <td>Sekunden seit 01.01.1970 00:00:00 Uhr UTC.</td>
</tr>
<tr>
  <td>%S</td>
  <td>Sekunden</td>
</tr>
<tr>
  <td>%t</td>
  <td>Ein Tab.</td>
</tr>
<tr>
  <td>%T</td>
  <td>Uhrzeit im Format %H:%M:%S.</td>
</tr>
<tr>
  <td>%u</td>
  <td>Wochentag (1..7). 1 entspricht dem Montag.</td>
</tr>
<tr>
  <td>%U</td>
  <td>Wochennummer im Jahr. Dabei wird der Sonntag als erster Tag der Woche angenommen.</td>
</tr>
<tr>
  <td>%V</td>
  <td>ISO-konforme Wochennummer (01..53).</td>
</tr>
<tr>
  <td>%w</td>
  <td>Wochentag (0..6). 0 entspricht dem Sonntag.</td>
</tr>
<tr>
  <td>%W</td>
  <td>Wochennummer im Jahr. Dabei wird der Montag als erster Tag der Woche angenommen.</td>
</tr>
<tr>
  <td>%x</td>
  <td>Datumsangabe in der aktuellen, lokalen Schreibweise.</td>
</tr>
<tr>
  <td>%X</td>
  <td>Zeitangabe in der aktuellen, lokalen Schreibweise.</td>
</tr>
<tr>
  <td>%y</td>
  <td>Die letzten zwei Stellen der Jahreszahl.</td>
</tr>
<tr>
  <td>%Y</td>
  <td>Vierstellige Jahreszahl.</td>
</tr>
<tr>
  <td>%z</td>
  <td>Zeitzone als nummerische Repräsentation (z.B. +0100 für MEZ).</td>
</tr>
<tr>
  <td>%:z</td>
  <td>Zeitzone in der Darstellung Shh:mm (z.B. +01:00 für MEZ).</td>
</tr>
<tr>
  <td>%::z</td>
  <td>Zeitzone in der Darstellung Shh:mm:ss (z.B. +01:00:00 für MEZ).</td>
</tr>
<tr>
  <td>%Z</td>
  <td>Darstellung der Zeitzone als Abkürzung (z.B. MEZ).</td>
</tr>
</tbody>
</table></p>

<p>Wird nach dem Prozentzeichen eine Längenangabe eingefügt, füllt <code>date</code> die fehlenden Stellen standardmäßig mit Nullen auf. Die folgenden zusätzlichen Flags können dem <code>%</code>–Zeichen folgen um dies zu ändern:
<table>
<thead>
<tr>
  <th>Zeichen</th>
  <th>Bedeutung</th>
</tr>
</thead>
<tbody>
<tr>
  <td>-</td>
  <td>Das Feld nicht auffüllen.</td>
</tr>
<tr>
  <td>_</td>
  <td>Das Feld mit Leerzeichen auffüllen.</td>
</tr>
<tr>
  <td>0</td>
  <td>Das Feld mit Nullen auffüllen.</td>
</tr>
<tr>
  <td>^</td>
  <td>Wenn möglich Großbuchstaben verwenden.</td>
</tr>
<tr>
  <td>#</td>
  <td>Wenn möglich Kleinbuchstaben verwenden.</td>
</tr>
</tbody>
</table></p>

<p>Nach diesen Flags wird dann noch eine Zahl für die Feldlänge eingefügt. So gibt beispielsweise <code>date +"%09Y"</code> das Jahr mit 9 Stellen (z.B. <code>000002012</code>) aus.</p>

<h1>Gestern, heute, morgen</h1>

<p>Der häufig nicht beachtete, dafür aber um so nützlichere, Parameter heißt <code>-d</code>. Er erlaubt es, das Datum, welches Date ausgeben soll, zu spezifizieren. Das alleine ist noch nicht sehr spektakulär, jedoch kann <code>-d</code> auch ungewöhnliche Datumsangaben wie »gestern« (<code>yesterday</code>) oder »morgen« (<code>tomorrow</code>) verarbeiten. Die folgenden Beispiele zeigen, was mit Datumsberechung alles möglich ist:</p>

<pre class="hlcode hlcode-bash"><code><ol class="bash"><li class="li1"><div class="de1"><span class="co0"># Gibt das Datum des gestrigen Tages aus:</span></div></li>
<li class="li1"><div class="de1"><span class="kw2">date</span> <span class="re5">-d</span> <span class="st0">&quot;yesterday&quot;</span> +<span class="st0">&quot;%d.%m.%Y&quot;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co0"># Gibt das morgige Datum aus:</span></div></li>
<li class="li1"><div class="de1"><span class="kw2">date</span> <span class="re5">-d</span> <span class="st0">&quot;tomorrow&quot;</span> +<span class="st0">&quot;%d.%m.%Y&quot;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co0"># Gibt das Datum von heute in einer Woche aus:</span></div></li>
<li class="li1"><div class="de1"><span class="kw2">date</span> <span class="re5">-d</span> <span class="st0">&quot;+1 week&quot;</span> +<span class="st0">&quot;%d.%m.%Y&quot;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co0"># Gibt das Datum des gestrigen Tages vor 2 Jahren aus:</span></div></li>
<li class="li1"><div class="de1"><span class="kw2">date</span> <span class="re5">-d</span> <span class="st0">&quot;yesterday 2 years ago&quot;</span> +<span class="st0">&quot;%d.%m.%Y&quot;</span></div></li>
</ol></code></pre>

<h1>Zeit und… äh, Zeit</h1>

<p>Natürlich funktionieren diese Angaben auch mit Zeitwerten. Dass heißt, auch die folgenden Angaben sind möglich und liefern das gewünschte Ergebnis:</p>

<pre class="hlcode hlcode-bash"><code><ol class="bash"><li class="li1"><div class="de1"><span class="co0"># Datum und Uhrzeit vor 2 Stunden</span></div></li>
<li class="li1"><div class="de1"><span class="kw2">date</span> <span class="re5">-d</span> <span class="st0">&quot;2 hours ago&quot;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co0"># Datum und Uhrzeit in einer Woche und zwei Stunden</span></div></li>
<li class="li1"><div class="de1"><span class="kw2">date</span> <span class="re5">-d</span> <span class="st0">&quot;+1 week +2 hours&quot;</span></div></li>
</ol></code></pre>

<h1>Nicht jetzt, später</h1>

<p>Ich hoffe das Prinzip ist inzwischen klar geworden. Nun stellt sich nur noch die Frage: »Was tun, wenn ich nicht mit dem aktuellen Datum rechnen will?»
Auch daran haben die Macher von <code>date</code> gedacht. Man kann die Datums-Offsets auch mit einer Datumsangabe kombinieren:
<code>date -d "2011-01-01 +1 month"</code> gibt wie gewünscht <code>Tue Feb  1 00:00:00 CET 2011</code> aus. Man stellt also ein, von <code>date</code> akzeptiertes Datum, vor den Zeitoffset und schon verwendet <code>date</code> dieses Datum als Basis für die Offset-Berechnung.</p>

<p>Wer mehr über das <code>date</code> Kommando erfahren möchte, der sollte sich die meist installierte Info-Seite über den Befehl <code>info date</code> ansehen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flashsystems.de/articles/1521/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Header für Bash Shellscripte</title>
		<link>http://www.flashsystems.de/articles/1520</link>
		<comments>http://www.flashsystems.de/articles/1520#comments</comments>
		<pubDate>Thu, 02 Feb 2012 23:00:33 +0000</pubDate>
		<dc:creator>dgoss</dc:creator>
				<category><![CDATA[Knowledge Base]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Bash]]></category>

		<guid isPermaLink="false">http://www.flashsystems.de/?p=1520</guid>
		<description><![CDATA[Für Shell-Scripte unter Linux gilt das gleiche wie für jedes andere Programm: »Das aktuelle Arbeitsverzeichnis wird durch den Aufrufer bestimmt.« Das ist natürlich dann ein Problem, wenn man bestimmte Konfigurationsdateien oder Programme im aktuellen Arbeitsverzeichnis erwartet. Daher füge ich in meine Shellscripte gerne folgenden Header ein: #!/bin/bash fullScriptName=$&#40;readlink -qe &#34;$0&#34;&#41; fullScriptPath=${fullScriptName%/*} pushd $fullScriptPath Dieses Stück [...]]]></description>
			<content:encoded><![CDATA[<p>Für Shell-Scripte unter Linux gilt das gleiche wie für jedes andere Programm: »Das aktuelle Arbeitsverzeichnis wird durch den Aufrufer bestimmt.« Das ist natürlich dann ein Problem, wenn man bestimmte Konfigurationsdateien oder Programme im aktuellen Arbeitsverzeichnis erwartet.<span id="more-1520"></span> Daher füge ich in meine Shellscripte gerne folgenden Header ein:</p>

<pre class="hlcode hlcode-bash"><code><ol class="bash"><li class="li1"><div class="de1"><span class="co0">#!/bin/bash</span></div></li>
<li class="li1"><div class="de1"><span class="re2">fullScriptName</span>=$<span class="br0">&#40;</span><span class="kw2">readlink</span> <span class="re5">-qe</span> <span class="st0">&quot;$0&quot;</span><span class="br0">&#41;</span></div></li>
<li class="li1"><div class="de1"><span class="re2">fullScriptPath</span>=<span class="co1">${fullScriptName%/*}</span></div></li>
<li class="li1"><div class="de1"><span class="kw3">pushd</span> <span class="re1">$fullScriptPath</span></div></li>
</ol></code></pre>

<p>Dieses Stück Bash-Shellscript setzt den aktuellen Pfad auf das Verzeichnis, in welchem das Shellscript abgelegt ist. Da pushd verwendet wird, wird der Pfad beim verlassen des Scriptes automatisch wieder auf das vorhergehende Verzeichnis zurückgesetzt. So arbeitet das Script immer in seinem Installationsverzeichnis, ohne das das aktuelle Arbeitsverzeichnis der aufrufenden Shell verbogen wird.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flashsystems.de/articles/1520/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eclipse Workspace wird immer fetter</title>
		<link>http://www.flashsystems.de/articles/1662</link>
		<comments>http://www.flashsystems.de/articles/1662#comments</comments>
		<pubDate>Sat, 28 Jan 2012 11:15:34 +0000</pubDate>
		<dc:creator>dgoss</dc:creator>
				<category><![CDATA[Knowledge Base]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Entwicklung]]></category>

		<guid isPermaLink="false">http://www.flashsystems.de/?p=1662</guid>
		<description><![CDATA[Manchmal zeigt der Eclipse Workspace, gerade bei größeren Projekten, die Neigung immer mehr anzuwachsen. Mir ging es vor ein paar Wochen mit einem PHP-Projekt so. Irgendwann hatte der Workspace mehr als 40 MiByte. Eine kurze Suche mit WinDirStat hat gezeigt, dass die Datei .metadata&#46;plugins\org.eclipse.dltk.core.index.sql.h2 der Verursacher des Größenzuwachses ist. Diese Datei enthält die Eclipse DLTK [...]]]></description>
			<content:encoded><![CDATA[<p>Manchmal zeigt der Eclipse Workspace, gerade bei größeren Projekten, die Neigung immer mehr anzuwachsen. Mir ging es vor ein paar Wochen mit einem PHP-Projekt so. Irgendwann hatte der Workspace mehr als 40 MiByte. Eine kurze Suche mit <a href="http://windirstat.info/">WinDirStat</a> hat gezeigt, dass die Datei <code>.metadata&#46;plugins\org.eclipse.dltk.core.index.sql.h2</code> der Verursacher des Größenzuwachses ist.<span id="more-1662"></span></p>

<p>Diese Datei enthält die Eclipse <a href="http://wiki.eclipse.org/DLTK">DLTK</a> Datenbank. Aus Gründen, welche mir nicht ganz klar sind, wird diese bei umfangreichen Änderungen im Projekt immer größer. Eclipse nimmt es aber offensichtlich nicht übel, wenn diese Datei einfach gelöscht wird.</p>

<p>Wenn also der Eclipse-Workspace immer größer wird, einfach die Entwicklungsumgebung schließen. Die Datei <code>.metadata&#46;plugins\org.eclipse.dltk.core.index.sql.h2</code> löschen und Eclipse anschließend neu starten. Danach baut Eclipse den DLTK-Index neu auf. Bei mir schrumpfte die neue Index-Datei auf etwas 10% der alten Größe.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flashsystems.de/articles/1662/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Deklaratives Multithreading</title>
		<link>http://www.flashsystems.de/articles/1666</link>
		<comments>http://www.flashsystems.de/articles/1666#comments</comments>
		<pubDate>Tue, 22 Nov 2011 18:49:46 +0000</pubDate>
		<dc:creator>dgoss</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Neuigkeiten]]></category>
		<category><![CDATA[Think Tank]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Knowledge Base]]></category>

		<guid isPermaLink="false">http://www.flashsystems.de/?p=1666</guid>
		<description><![CDATA[Heute habe ich meinen Artikel zum Thema »Deklaratives Multithreading« auf CodeProject online gestellt. Da es mein erster, komplett in englisch verfasster Artikel ist, bin ich auf das Feedback ziemlich gespannt. Wer also etwas über meinen — ich denke sehr interessanten — Ansatz zum Thema Multithreading in C# wissen möchte, der kann sich den Artikel hier [...]]]></description>
			<content:encoded><![CDATA[<p>Heute habe ich meinen Artikel zum Thema »Deklaratives Multithreading« auf CodeProject online gestellt. Da es mein erster, komplett in englisch verfasster Artikel ist, bin ich auf das Feedback ziemlich gespannt.<span id="more-1666"></span></p>

<p>Wer also etwas über meinen — ich denke sehr interessanten — Ansatz zum Thema Multithreading in C# wissen möchte, der kann sich den Artikel <a href="http://www.codeproject.com/KB/threads/declarative_threading.aspx">hier</a> ansehen.</p>

<p>Je nach Bewertung werde ich den Sourcecode und evtl. noch etwas »Bonusmaterial« hier veröffentlichen… Den Aufwand mache ich mir aber nur, wenn der Artikel auch ankommt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flashsystems.de/articles/1666/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>eGalax Touchscreen in Debian Squeeze</title>
		<link>http://www.flashsystems.de/articles/1612</link>
		<comments>http://www.flashsystems.de/articles/1612#comments</comments>
		<pubDate>Wed, 09 Nov 2011 20:06:37 +0000</pubDate>
		<dc:creator>dgoss</dc:creator>
				<category><![CDATA[Knowledge Base]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Touchscreen]]></category>

		<guid isPermaLink="false">http://www.flashsystems.de/?p=1612</guid>
		<description><![CDATA[Wie ich bereits im Artikel Touchscreen Rechtsklick in Ubuntu erwähnt habe, ist mein Acer Aspire One seit einiger Zeit mit einem Touchscreen ausgestattet. Bisher hatte ich Ubuntu auf dem Netbook verwendet. Da ich jedoch mit Ubuntus »Volks Desktop« Unity nicht wirklich klar komme und es mich außerdem nervt, als Poweruser einen Kindergartendesktop zwangsverordnet zu bekommen, [...]]]></description>
			<content:encoded><![CDATA[<p>Wie ich bereits im Artikel <a href="/articles/1187">Touchscreen Rechtsklick in Ubuntu</a> erwähnt habe, ist mein Acer Aspire One seit einiger Zeit mit einem Touchscreen ausgestattet. Bisher hatte ich Ubuntu auf dem Netbook verwendet. Da ich jedoch mit Ubuntus »Volks Desktop« Unity nicht wirklich klar komme und es mich außerdem nervt, als Poweruser einen Kindergartendesktop zwangsverordnet zu bekommen, bin ich auf Debian ausgewichen — auf dem Ubuntu ja schließlich basiert.
Nun blieb nur die Frage offen, wie bekomme ich den Touchscreen wieder zum Laufen und wie kann ich ihn kalibrieren?<span id="more-1612"></span></p>

<p>Erfreulicherweise wird der Touchscreen von eGalax bei Debian automatisch über das Modul <code>usbtouchscreen</code> erkannt. Klickt man auf den Bildschirm, springt der Cursor also gleich nach der Installation fröhlich durch die Gegend. Dummerweise fehlt allerdings das Tool, um den Touchscreen zu kalibrieren…</p>

<h2>Tools nachinstallieren</h2>

<p>Zuerst braucht man also das Tool <a href="http://www.freedesktop.org/wiki/Software/xinput_calibrator">xinput_calibrator</a>. Da es dieses nicht im Standardrepository von Debian gibt, muss man es gesondert herunterladen. Auf der <a href="http://www.freedesktop.org/wiki/Software/xinput_calibrator">Homepage</a> gibt es glücklicherweise ein Debian-Paket, so dass die Installation anschließend durch einen Doppelklick und auswählen des »Installieren«-Buttons erledigt ist.</p>

<p>Anschließend sollte man in einer Root-Shell noch schnell über den Befehl <code>apt-get install xinput</code> sicherstellen, dass <code>xinput</code> installiert ist.</p>

<h2>Zielübungen (Kalibrieren)</h2>

<p><div id="attachment_1640" class="wp-caption alignright" style="width: 160px"><a class="medialink" href="http://www.flashsystems.de/articles/1612/calibartor" rel="attachment wp-att-1640"><img src="http://www.flashsystems.de/wp-content/uploads/Calibartor-150x87.png" alt="Touchscreen Kalibrierung" title="xinput_calibrator" width="150" height="87" class="size-thumbnail wp-image-1640" /></a><p class="wp-caption-text">Touchscreen Kalibrierung</p></div>Nachdem alles installiert ist, kann der Touchscreen jetzt kalibriert werden. Es gibt dafür sogar einen Menüeintrag. Leider speichert dieser die gefundenen Einstellungen nicht ab, so dass nach einem Reboot die Kalibrierung wieder verschwunden ist.</p>

<p>Möchte man die Kalibrierung also permanent übernehmen, so ist man auf die Konsole angewiesen. Am einfachsten geht es, wann man die nachfolgende Befehlszeile in ein Konsolenfenster (keine Root-Shell!) kopiert:</p>

<pre class="hlcode hlcode-bash"><code><ol class="bash"><li class="li1"><div class="de1">xinput_calibrator <span class="re5">--output-type</span> xorg.conf.d<span class="sy0">|</span><span class="kw2">sudo</span> <span class="kw2">grep</span> <span class="re5">-A</span> <span class="nu0">20</span> <span class="st0">&quot;Section&quot;</span> <span class="sy0">&gt;</span> newcal <span class="sy0">&amp;&amp;</span> <span class="kw2">sudo</span> <span class="kw2">cp</span> newcal <span class="sy0">/</span>usr<span class="sy0">/</span>share<span class="sy0">/</span>X11<span class="sy0">/</span>xorg.conf.d<span class="sy0">/</span><span class="nu0">99</span>-calibration.conf</div></li>
</ol></code></pre>

<p>Nun öffnet sich das Kalibrierungsfenster und man muss wieder die angezeigten Punkte anklicken. Wird der Kalibrierungsvorgang erfolgreich abgeschlossen, so werden die neuen Einstellungen permanent in der Konfigurationsdatei <code>/usr/share/X11/xorg.conf.d/99-calibration.conf</code> gespeichert. Ggf. muss man hierfür im Konsolenfenster noch das eigene Kennwort eingeben. Beim Abbrechen des Vorgangs mit der ESC-Taste wird keine Änderung vorgenommen.</p>

<h2>Rechts klicken</h2>

<p>Der Rechtsklick lässt sich unter Debian wie im Artikel <a href="/articles/1187">Touchscreen Rechtsklick in Ubuntu</a> beschrieben einrichten. Im Gegensatz zu Ubuntu funktioniert in Debian Squeeze die Einstellung sogar meistens <img src='http://www.flashsystems.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>

<p>Leider klappt es gerade bei Firefox eher weniger gut. Wenn jemand also einen besseren Weg gefunden hat, mit nur einer Maustaste einen sekundären Klick hin zu bekommen, würde ich mich über einen Kommentar freuen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flashsystems.de/articles/1612/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Freihand Icons für WPF</title>
		<link>http://www.flashsystems.de/articles/1397</link>
		<comments>http://www.flashsystems.de/articles/1397#comments</comments>
		<pubDate>Fri, 07 Oct 2011 12:00:19 +0000</pubDate>
		<dc:creator>dgoss</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Think Tank]]></category>
		<category><![CDATA[Inkscape]]></category>
		<category><![CDATA[WPF]]></category>
		<category><![CDATA[XAML]]></category>

		<guid isPermaLink="false">http://www.flashsystems.de/?p=1397</guid>
		<description><![CDATA[Ich arbeite gerade an einer WPF-Applikation, welche wie ein Notizblock aussehen soll. Natürlich passen die von Windows bereitgestellten Icons und Buttons nicht wirklich zu diesem Design. Also habe ich überlegt, wie ich handgezeichnete Icons in WPF übernehmen kann. Der erste Versuch einfach eingescannte PNG-Bilder zu verwenden sah — zumindest in höheren Zoomstufen — schrecklich aus. [...]]]></description>
			<content:encoded><![CDATA[<p>Ich arbeite gerade an einer WPF-Applikation, welche wie ein Notizblock aussehen soll. Natürlich passen die von Windows bereitgestellten Icons und Buttons nicht wirklich zu diesem Design. Also habe ich überlegt, wie ich handgezeichnete Icons in WPF übernehmen kann. Der erste Versuch einfach eingescannte PNG-Bilder zu verwenden sah — zumindest in höheren Zoomstufen — schrecklich aus. Doch zum Glück gibt es eine Möglichkeit Icons als Vektorgrafik in WPF zu überführen. Ich habe mich für den aktuellen Anwendungsfall nur auf schwarz-weiße Strichzeichnungen beschränkt. Das Verfahren lässt sich jedoch auch auf andere Grafiken übertragen.<span id="more-1397"></span></p>

<h1>Vorbereitungen</h1>

<p>Zuerst benötigt man ein wenig Software. Diese sollte man sich zuerst herunterladen und ggf. installieren:</p>

<ul>
<li><p><a href="http://inkscape.org/download/?lang=de">Inkscape</a></p>

<p>Vektorzeichenprogramm welches seit Kurzem auch XAML speichern kann. Ich verwende es zum Vektorisieren der Grafiken.</p></li>
<li><p><a href="http://www.getpaint.net/download.html">Paint.NET</a></p>

<p>Rasterzeichenprogramm welches ich zum Einlesen des Scans und zur Aufbereitung der Vorlage benutzt habe. Hier funktioniert auch jeder andere Grafikeditor. Wer sich jedoch genau an das Tutorial halten will, sollte Paint.NET herunterladen und installieren.</p></li>
<li><p><a href="http://www.microsoft.com/visualstudio/en-us/products/2010-editions">Visual Studio 2010</a></p>

<p>Eigentlich ist Visual Studio nicht unbedingt notwendig. Ich verwende es jedoch für dieses Beispiel und daher habe ich es hier aufgeführt. Es funktioniert natürlich auch jedes andere IDE mit XAML-Support.</p></li>
</ul>

<p>Nachdem die ganze Software installiert ist, geht es erst einmal offline weiter.</p>

<h1>Icons entwerfen</h1>

<p><div id="attachment_1404" class="wp-caption alignright" style="width: 160px"><a class="medialink" href="http://www.flashsystems.de/articles/1397/scan" rel="attachment wp-att-1404"><img src="http://www.flashsystems.de/wp-content/uploads/scan-150x118.png" alt="" title="Scan der Icons in Rohform" width="150" height="118" class="size-thumbnail wp-image-1404" /></a><p class="wp-caption-text">Scan der Icons in Rohform</p></div>
Ich habe zuerst auf einem etwas festeren Karton (besserer Kontrast beim Scannen und kein Durchdrücken von Linien) mit Bleistift ein dünnes Raster vorgezeichnet. In dieses Raster habe ich dann die Icons gezeichnet. Zuerst sollte man den Entwurf mit Bleistift skizzieren. Vor dem Scannen werden dann die Linien mit einem Fineliner oder Tuschestift nachgezogen, damit diese sich gut abheben.</p>

<p>Anschließend wird erst einmal alles eingescannt. Dafür gibt es in Paint.NET den Menüpunkt »Datei« — »Übernehmen«. Dieser erlaubt es Daten von einem Scanner zu importieren. Das Ergebnis zeigt das nebenstehende Bild.</p>

<h1>Aufbereiten des Scans</h1>

<p><div id="attachment_1409" class="wp-caption alignright" style="width: 114px"><a class="medialink" href="http://www.flashsystems.de/articles/1397/paint_net_curve" rel="attachment wp-att-1409"><img src="http://www.flashsystems.de/wp-content/uploads/paint_net_curve-104x150.png" alt="" title="&quot;Kurven&quot;-Dialog mit Sprungfunktion" width="104" height="150" class="size-thumbnail wp-image-1409" /></a><p class="wp-caption-text">»Kurven«-Dialog mit Sprungfunktion</p></div>
Auch auf dem besten Scanner wird das eingelesene Bild nicht sofort für die Weiterverarbeitung brauchbar sein. Zuerst muss der Kontrast gesteigert und das Hintergrundraster entfernt werden. Hierfür bietet Paint.NET zum Glück eine elegante Möglichkeit: Nachdem die Zeichnungen (dank Fineliner oder Tusche) deutlich dunkler als die Hilfslinien oder eventuelle Störungen sind lassen sich diese leicht ausfiltern. Hierfür öffnet man den »Kurven«-Dialog über »Korrekturen« — »Kurven…«. Die »Kurven«-Funktion erlaubt es einer Eingangshelligkeit eine bestimmte Ausgangshelligkeit zuzuweisen. D.h. die Helligkeitsinformation der einzelnen Pixel wird durch die Kurve auf neue Helligkeitswerte abgebildet. Da der Kontrast des Bildes maximal erhöht werden soll, habe ich eine Sprungfunktion verwendet. D.h. alle Helligkeitswerte unterhalb einer bestimmten Schwelle werden auf Schwarz und alle Werte darüber auf Weiß abgebildet. Mit der Position und der Steilheit der Kurvenform muss man etwas experimentieren.</p>

<p>Erst wenn das Bild (fast) schwarz-weiß aussieht, geht es weiter. Der nachfolgende »Optimierte Scan« zeigt, wie die Grafiken aussehen sollten, bevor sie mit Inkscape weiterverarbeitet werden können.
<div id="attachment_1412" class="wp-caption alignnone" style="width: 160px"><a class="medialink" href="http://www.flashsystems.de/articles/1397/scan_curve" rel="attachment wp-att-1412"><img src="http://www.flashsystems.de/wp-content/uploads/scan_curve-150x116.png" alt="" title="Optimierter Scan" width="150" height="116" class="size-thumbnail wp-image-1412" /></a><p class="wp-caption-text">Optimierter Scan</p></div></p>

<h1>Vektorisieren</h1>

<p>Um die Grafiken schlussendlich in Vektorinformationen zu übersetzen (welche anschließend in XAML genutzt werden können), muss zuerst eine der Zeichnungen ausgeschnitten werden. Hierbei muss man nicht auf das letzte Pixel exakt arbeiten. Nach dem Vektorisieren werden weiße Bereiche noch entfernt. Als Beispiel habe ich habe mich für einen Zeichenstift entschieden. Dieser wird in Paint.NET markiert, kopiert (Strg+C) und anschließend in Inkscape eingefügt (Strg+V).
<div id="attachment_1417" class="wp-caption alignnone" style="width: 160px"><a class="medialink" href="http://www.flashsystems.de/articles/1397/inkscape" rel="attachment wp-att-1417"><img src="http://www.flashsystems.de/wp-content/uploads/Inkscape-150x133.png" alt="" title="Bitmap-Grafik in Inkscape" width="150" height="133" class="size-thumbnail wp-image-1417" /></a><p class="wp-caption-text">Bitmap-Grafik in Inkscape</p></div>
Die Bitmapgrafik muss jetzt vektorisiert werden. Das geht über den Menüpunkt »Pfad« — »Bitmap vektorisieren…«. Der Vektorisierungsdialog bietet einige Einstellungen, von denen nur wenige für diesen Zweck relevant sind. Wenn man andere Icons (z.B. in Farbe) vektorisieren möchte, so sollte man mit den Einstellungen etwas herumspielen. Dabei leistet die Vorschau auf der rechten Seite des Einstellungsdialogs gute Dienste. Für meine Schwarz-Weiß-Icons habe ich die »Graustufen«-Einstellung genutzt. Die Menge der Suchdurchgänge sollte man hierbei nicht zu groß wählen, da Inkscape sonst sehr viele Ebenen mit unterschiedlichen Graustufen erstellt. Für mich haben die folgenden Einstellungen gut funktioniert:
<div id="attachment_1426" class="wp-caption alignnone" style="width: 502px"><a class="medialink" href="http://www.flashsystems.de/articles/1397/inkscape_settings" rel="attachment wp-att-1426"><img src="http://www.flashsystems.de/wp-content/uploads/Inkscape_Settings.png" alt="" title="Einstellungen des Vektorisierers" width="492" height="117" class="size-full wp-image-1426" /></a><p class="wp-caption-text">Einstellungen des Vektorisierers</p></div>
Auf dem zweiten Reiter »Optionen« habe ich zwar keine Einstellungen vorgenommen, da ich aber nicht weiß, inwieweit die Standardwerte gleich bleiben, hier eine Kurze Übersicht der Einstellungen:
<div id="attachment_1431" class="wp-caption alignnone" style="width: 474px"><a class="medialink" href="http://www.flashsystems.de/articles/1397/inkscape_options" rel="attachment wp-att-1431"><img src="http://www.flashsystems.de/wp-content/uploads/Inkscape_options.png" alt="" title="Einstellungen auf dem Reiter &quot;Optionen&quot;" width="464" height="97" class="size-full wp-image-1431" /></a><p class="wp-caption-text">Einstellungen auf dem Reiter »Optionen«</p></div></p>

<p>Anschließend startet man mit einem Klick auf »Ok« die Vektorisierung. Der Dialog verschwindet aber danach nicht und muss über das »X« geschlossen werden. Ich habe beim ersten Mal ungefähr zehn vektorisierte Kopien erzeugt, bevor mir das aufgefallen ist.</p>

<p>Nun schiebt man erst einmal die vektorisierte Kopie von der Vorlage herunter und löscht die Vorlage aus dem Bearbeitungsfenster (»Entf«-Taste).<div id="attachment_1436" class="wp-caption alignnone" style="width: 160px"><a class="medialink" href="http://www.flashsystems.de/articles/1397/inkscape_src_dst" rel="attachment wp-att-1436"><img src="http://www.flashsystems.de/wp-content/uploads/Inkscape_Src_Dst-150x146.png" alt="" title="Bitmapvorlage und vektorisierte Kopie" width="150" height="146" class="size-thumbnail wp-image-1436" /></a><p class="wp-caption-text">Bitmapvorlage und vektorisierte Kopie</p></div>
Die vektorisierte Kopie besteht jetzt noch aus mehreren Ebenen in unterschiedlichen Graustufen. Da ich jedoch nur eine einzige Ebene (einen Pfad) haben wollte, musste ich diese Trennen. Hierfür klickt man mit der rechten Maustaste auf das Vektorobjekt und wählt im Kontextmenü »Gruppierung aufheben«. Die einzelnen Ebenen lassen sich dann einfach mit der Maus anklicken und auseinander schieben.
<div id="attachment_1439" class="wp-caption alignnone" style="width: 136px"><a class="medialink" href="http://www.flashsystems.de/articles/1397/inkscape_layers" rel="attachment wp-att-1439"><img src="http://www.flashsystems.de/wp-content/uploads/Inkscape_Layers-126x150.png" alt="" title="Unterschiedliche Ebenen" width="126" height="150" class="size-thumbnail wp-image-1439" /></a><p class="wp-caption-text">Unterschiedliche Ebenen</p></div>
<div id="attachment_1440" class="wp-caption alignright" style="width: 102px"><a class="medialink" href="http://www.flashsystems.de/articles/1397/inkscape_pagesize" rel="attachment wp-att-1440"><img src="http://www.flashsystems.de/wp-content/uploads/Inkscape_PageSize-92x150.png" alt="" title="Seite einpassen" width="92" height="150" class="size-thumbnail wp-image-1440" /></a><p class="wp-caption-text">Seite einpassen</p></div>
Meist ist die schwarze Ebene nicht unbedingt die beste. Die etwas dickere, dunkelgraue Ebene hat sich — gerade wenn das Icon relativ klein dargestellt wird — meist als besser erwiesen. Welche Ebene man am Ende benutzt ist Geschmackssache. Auf jeden Fall löscht man nun alle bis auf eine Ebene mit der »Entf«-Taste und färbt die verbleibende Ebene durch doppelklicken auf die Farbleiste schwarz ein.
Jetzt könnte man das ganze schon als XAML-Datei speichern. Doch dann würde das Icon irgendwo in der Pampa auftauchen, da der Ursprungspunkt des Exports die linke, untere Ecke des Zeichenblattes ist. Um dies zu vermeiden, muss das Zeichenblatt noch auf die Größe der Grafik angepasst werden. Dies geschieht am Einfachsten durch selektieren der Grafik und die Auswahl des Menüpunktes »Datei« — »Dokumenteneinstellungen«. Anschließend klappt man die Option »Ändern der Seitengröße auf Inhalt…« auf und wählt dort »Seite in Auswahl einpassen«. Anschließend lässt sich die Grafik über »Datei« — »Speichern unter…« als Dateityp »Microsoft XAML« abspeichern.</p>

<h1>Einbinden in XAML</h1>

<p>Nun erhält man eine XAML-Datei folgenden Inhalts (ich habe den Output einer einfacheren Grafik genutzt, um das Beispiel kurz zu halten):</p>

<pre class="hlcode hlcode-xml"><code><ol class="xml"><li class="li1"><div class="de1"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;UTF-8&quot;</span><span class="re2">?&gt;</span></span></div></li>
<li class="li1"><div class="de1"><span class="sc3"><span class="re1">&lt;Canvas</span> <span class="re0">xmlns</span>=<span class="st0">&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;</span> <span class="re0">Name</span>=<span class="st0">&quot;svg2&quot;</span> <span class="re0">Width</span>=<span class="st0">&quot;10&quot;</span> <span class="re0">Height</span>=<span class="st0">&quot;356&quot;</span><span class="re2">&gt;</span></span></div></li>
<li class="li1"><div class="de1">&nbsp; <span class="sc3"><span class="re1">&lt;Canvas.Resources</span><span class="re2">/&gt;</span></span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;Canvas</span> <span class="re0">Name</span>=<span class="st0">&quot;layer1&quot;</span><span class="re2">&gt;</span></span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;Canvas<span class="re2">&gt;</span></span></span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;Canvas.RenderTransform<span class="re2">&gt;</span></span></span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;TransformGroup<span class="re2">&gt;</span></span></span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc-1">&lt;!--g--&gt;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;TranslateTransform</span> <span class="re0">X</span>=<span class="st0">&quot;-139.77038&quot;</span> <span class="re0">Y</span>=<span class="st0">&quot;-89.362155&quot;</span><span class="re2">/&gt;</span></span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/TransformGroup<span class="re2">&gt;</span></span></span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/Canvas.RenderTransform<span class="re2">&gt;</span></span></span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;Path</span> <span class="re0">xmlns:x</span>=<span class="st0">&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;</span> <span class="re0">Name</span>=<span class="st0">&quot;path2996&quot;</span> <span class="re0">Fill</span>=<span class="st0">&quot;#000000&quot;</span> <span class="re0">Data</span>=<span class="st0">&quot;m 144.86526 434.61216 c -0.25947 -20.70258 -0.27379 -24.77728 -0.0993 -28.25 0.4676 -9.30421 -0.72411 -42.24365 -1.73517 -47.96132 -0.62841 -3.55372 -1.08318 -9.85372 -1.0106 -14 0.22408 -12.80188 0.32971 -30.33989 0.20802 -34.53868 -0.0638 -2.2 0.39953 -7.6 1.02953 -12 0.63 -4.4 1.06019 -8.45282 0.95597 -9.00626 -0.10421 -0.55345 -0.65714 -7.52845 -1.22873 -15.5 -1.1062 -15.42733 -1.35521 -17.68739 -2.80146 -25.42587 -0.52064 -2.78581 -0.55322 -6.26717 -0.0749 -8 0.4658 -1.68733 1.0748 -8.91787 1.35334 -16.06787 0.27855 -7.15 0.7603 -14.8 1.07057 -17 0.74087 -5.25328 0.66618 -47.32431 -0.1145 -64.5 -0.33749 -7.425 -0.58912 -15.975 -0.55917 -19 0.17463 -17.64079 0.33842 -21.12155 1.28224 -27.250005 0.9638 -6.258213 1.22187 -6.75 3.54206 -6.75 l 2.50252 0 -0.78419 7.25 c -0.43131 3.987495 -0.69388 10.258335 -0.58349 13.935185 0.1104 3.67684 -0.141 6.89766 -0.55867 7.15736 -0.41766 0.2597 -0.66199 4.45137 -0.54294 9.31482 0.81612 33.34021 0.96444 80.05177 0.26006 81.90442 -1.99696 5.2524 -3.09784 39.3782 -1.43355 44.43822 0.63315 1.925 1.01348 5.75 0.84519 8.5 -0.64719 10.575 -0.53962 14.22376 0.53723 18.2229 0.68838 2.55643 0.89403 8.27246 0.53814 14.95738 -1.43311 26.91945 -1.53547 31.67156 -1.18078 54.81972 0.13483 8.8 0.68888 16.675 1.23121 17.5 0.54233 0.825 1.08922 7.8 1.21531 15.5 0.1261 7.7 0.36953 20.75 0.54097 29 0.17144 8.25 0.11291 19.1625 -0.13008 24.25 -0.24654 5.16189 -0.41226 7.93524 -0.93581 8.95244 -0.30537 0.59328 -0.7533 0.29756 -1.35516 0.29756 -0.62892 0 -0.51137 0.26848 -1.26949 -0.17118 -1.07778 -0.62504 -0.63814 -4.49248 -0.71442 -10.57882 z&quot;</span><span class="re2">/&gt;</span></span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/Canvas<span class="re2">&gt;</span></span></span></div></li>
<li class="li1"><div class="de1">&nbsp; <span class="sc3"><span class="re1">&lt;/Canvas<span class="re2">&gt;</span></span></span></div></li>
<li class="li1"><div class="de1"><span class="sc3"><span class="re1">&lt;/Canvas<span class="re2">&gt;</span></span></span></div></li>
</ol></code></pre>

<p>Da Inkscape versucht, die einzelnen Layereigenschaften zu exportieren, ist der XAML-Output stärker geschachtelt als er eigentlich sein müsste. Das Canvas mit dem Namen »Layer1« und das darin enthaltene Canvas können entfallen. Auch die xmlns– und Name-Angaben sind überflüssig, wenn das Icon als Ressource genutzt wird. Ich habe den XML-Quelltext zuerst einmal in ein neues ResourceDictionary kopiert um ihn dort zu bereinigen. Wichtig ist dabei natürlich, dass der <code>&lt;?xml</code>–Header ebenfalls entfernt wird. Das erste Canvas benötigt dann natürlich noch ein x:Key-Tag, über welches auf die Ressource zugegriffen werden kann. Der endgültige Code sieht dann folgendermaßen aus:</p>

<pre class="hlcode hlcode-xml"><code><ol class="xml"><li class="li1"><div class="de1"><span class="sc3"><span class="re1">&lt;ResourceDictionary</span> <span class="re0">xmlns</span>=<span class="st0">&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;</span></span></div></li>
<li class="li1"><div class="de1"><span class="sc3"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">xmlns:x</span>=<span class="st0">&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;</span><span class="re2">&gt;</span></span></div></li>
<li class="li1"><div class="de1">&nbsp; <span class="sc3"><span class="re1">&lt;Canvas</span> <span class="re0">x:Key</span>=<span class="st0">&quot;VLine&quot;</span> <span class="re0">Width</span>=<span class="st0">&quot;10&quot;</span> <span class="re0">Height</span>=<span class="st0">&quot;356&quot;</span><span class="re2">&gt;</span></span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;Canvas.Resources</span><span class="re2">/&gt;</span></span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;Canvas.RenderTransform<span class="re2">&gt;</span></span></span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;TransformGroup<span class="re2">&gt;</span></span></span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;TranslateTransform</span> <span class="re0">X</span>=<span class="st0">&quot;-139.77038&quot;</span> <span class="re0">Y</span>=<span class="st0">&quot;-89.362155&quot;</span><span class="re2">/&gt;</span></span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/TransformGroup<span class="re2">&gt;</span></span></span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/Canvas.RenderTransform<span class="re2">&gt;</span></span></span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;Path</span> <span class="re0">Fill</span>=<span class="st0">&quot;#000000&quot;</span> <span class="re0">Data</span>=<span class="st0">&quot;m 144.86526 434.61216 c -0.25947 -20.70258 -0.27379 -24.77728 -0.0993 -28.25 0.4676 -9.30421 -0.72411 -42.24365 -1.73517 -47.96132 -0.62841 -3.55372 -1.08318 -9.85372 -1.0106 -14 0.22408 -12.80188 0.32971 -30.33989 0.20802 -34.53868 -0.0638 -2.2 0.39953 -7.6 1.02953 -12 0.63 -4.4 1.06019 -8.45282 0.95597 -9.00626 -0.10421 -0.55345 -0.65714 -7.52845 -1.22873 -15.5 -1.1062 -15.42733 -1.35521 -17.68739 -2.80146 -25.42587 -0.52064 -2.78581 -0.55322 -6.26717 -0.0749 -8 0.4658 -1.68733 1.0748 -8.91787 1.35334 -16.06787 0.27855 -7.15 0.7603 -14.8 1.07057 -17 0.74087 -5.25328 0.66618 -47.32431 -0.1145 -64.5 -0.33749 -7.425 -0.58912 -15.975 -0.55917 -19 0.17463 -17.64079 0.33842 -21.12155 1.28224 -27.250005 0.9638 -6.258213 1.22187 -6.75 3.54206 -6.75 l 2.50252 0 -0.78419 7.25 c -0.43131 3.987495 -0.69388 10.258335 -0.58349 13.935185 0.1104 3.67684 -0.141 6.89766 -0.55867 7.15736 -0.41766 0.2597 -0.66199 4.45137 -0.54294 9.31482 0.81612 33.34021 0.96444 80.05177 0.26006 81.90442 -1.99696 5.2524 -3.09784 39.3782 -1.43355 44.43822 0.63315 1.925 1.01348 5.75 0.84519 8.5 -0.64719 10.575 -0.53962 14.22376 0.53723 18.2229 0.68838 2.55643 0.89403 8.27246 0.53814 14.95738 -1.43311 26.91945 -1.53547 31.67156 -1.18078 54.81972 0.13483 8.8 0.68888 16.675 1.23121 17.5 0.54233 0.825 1.08922 7.8 1.21531 15.5 0.1261 7.7 0.36953 20.75 0.54097 29 0.17144 8.25 0.11291 19.1625 -0.13008 24.25 -0.24654 5.16189 -0.41226 7.93524 -0.93581 8.95244 -0.30537 0.59328 -0.7533 0.29756 -1.35516 0.29756 -0.62892 0 -0.51137 0.26848 -1.26949 -0.17118 -1.07778 -0.62504 -0.63814 -4.49248 -0.71442 -10.57882 z&quot;</span><span class="re2">/&gt;</span></span></div></li>
<li class="li1"><div class="de1">&nbsp; <span class="sc3"><span class="re1">&lt;/Canvas<span class="re2">&gt;</span></span></span></div></li>
<li class="li1"><div class="de1"><span class="sc3"><span class="re1">&lt;/ResourceDictionary<span class="re2">&gt;</span></span></span></div></li>
</ol></code></pre>

<p>In XAML kann das Icon nun beispielsweise als Hintergrund für einen Button genutzt werden. Über das Fill-Attribut des Path-Tags lässt sich die Farbe des Icons nachträglich noch anpassen.</p>

<pre class="hlcode hlcode-xml"><code><ol class="xml"><li class="li1"><div class="de1"><span class="sc3"><span class="re1">&lt;Button</span> <span class="re0">Width</span>=<span class="st0">&quot;32&quot;</span> <span class="re0">Height</span>=<span class="st0">&quot;32&quot;</span> <span class="re0">Style</span>=<span class="st0">&quot;{StaticResource FlowDocumentButton}&quot;</span><span class="re2">&gt;</span></span></div></li>
<li class="li1"><div class="de1">&nbsp; <span class="sc3"><span class="re1">&lt;Button.Background<span class="re2">&gt;</span></span></span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;VisualBrush</span> <span class="re0">Stretch</span>=<span class="st0">&quot;Uniform&quot;</span> <span class="re0">Visual</span>=<span class="st0">&quot;{StaticResource SaveIcon}&quot;</span><span class="re2">/&gt;</span></span></div></li>
<li class="li1"><div class="de1">&nbsp; <span class="sc3"><span class="re1">&lt;/Button.Background<span class="re2">&gt;</span></span></span></div></li>
<li class="li1"><div class="de1"><span class="sc3"><span class="re1">&lt;/Button<span class="re2">&gt;</span></span></span></div></li>
</ol></code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.flashsystems.de/articles/1397/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eclipse zerschießt SVN</title>
		<link>http://www.flashsystems.de/articles/1556</link>
		<comments>http://www.flashsystems.de/articles/1556#comments</comments>
		<pubDate>Sat, 01 Oct 2011 10:47:33 +0000</pubDate>
		<dc:creator>dgoss</dc:creator>
				<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Knowledge Base]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.flashsystems.de/?p=1556</guid>
		<description><![CDATA[Für das Entwickeln von Java-Anwendungen ist Eclipse — aus meiner Sicht — noch immer das Mittel der Wahl. Wenn man jedoch nicht die integrierten SVN-Features von Eclipse verwendet, sondern beispielsweise TortoiseSVN so wird beim Kompilieren das .svn–Verzeichnis aus dem Source-Baum in den Ausgabebaum kopiert. Dabei zerschießt Eclipse dann das Repository und das Einchecken funktioniert nicht [...]]]></description>
			<content:encoded><![CDATA[<p>Für das Entwickeln von Java-Anwendungen ist Eclipse — aus meiner Sicht — noch immer das Mittel der Wahl. Wenn man jedoch nicht die integrierten SVN-Features von Eclipse verwendet, sondern beispielsweise <a href="http://tortoisesvn.tigris.org/">TortoiseSVN</a> so wird beim Kompilieren das <code>.svn</code>–Verzeichnis aus dem Source-Baum in den Ausgabebaum kopiert. Dabei zerschießt Eclipse dann das Repository und das Einchecken funktioniert nicht mehr.<span id="more-1556"></span></p>

<h2>Eclipse das Handling des .svn-Ordners abgewöhnen</h2>

<p><div id="attachment_1562" class="wp-caption alignright" style="width: 310px"><a class="medialink" href="http://www.flashsystems.de/articles/1556/eclipse_svn_copy" rel="attachment wp-att-1562"><img src="http://www.flashsystems.de/wp-content/uploads/eclipse_svn_copy-300x222.png" alt="" title="Einstellung in Eclipse" width="300" height="222" class="size-medium wp-image-1562" /></a><p class="wp-caption-text">Einstellung in Eclipse</p></div>
Zum Glück lässt sich das Problem relativ einfach beheben. Man muss Eclipse nur abgewöhnen, sich um den Inhalt des <code>.svn</code>–Ordners zu kümmern. Hierfür öffnet man den Einstellungsdialog (Preferences) und wählt in der Seitenleiste Java –&gt; Compiler –&gt; Building aus. Anschließend klappt man »Output folder« auf und trägt unter »Filtered resources:« <code>.svn/</code> ein. Ab sofort ignoriert Eclipse den .svn-Ordner und Tortoise kann sich alleine um die Verwaltung des Repositories kümmern.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flashsystems.de/articles/1556/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

