<?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>Tobias-Conradi</title>
	<atom:link href="http://tobias-conradi.de/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://tobias-conradi.de</link>
	<description></description>
	<lastBuildDate>Fri, 09 Mar 2012 12:54:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Etherpad-Lite auf Mac OS-X Server</title>
		<link>http://tobias-conradi.de/index.php/2011/08/19/etherpad-lite-auf-mac-os-x-server/</link>
		<comments>http://tobias-conradi.de/index.php/2011/08/19/etherpad-lite-auf-mac-os-x-server/#comments</comments>
		<pubDate>Thu, 18 Aug 2011 22:16:22 +0000</pubDate>
		<dc:creator>toco</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://tobias-conradi.de/?p=231</guid>
		<description><![CDATA[Hier einmal eine kurze Beschreibung wie man am besten Etherpad-Lite auf OS-X Installiert. Probiert habe ich es mit Mac OS-X 10.7 Server (Lion Server). Vorraussetzung für die Installation ist Xcode welches im Mac App Store runtergeladen werden kann. Der Packetmanager Homebrew kann die Installation vereinfachen, muss aber nicht genutzt werden. Möchte man Homebrew nicht verwenden [...]]]></description>
			<content:encoded><![CDATA[<p>Hier einmal eine kurze Beschreibung wie man am besten <a href="https://github.com/Pita/etherpad-lite" target="_blank">Etherpad-Lite</a> auf OS-X Installiert.</p>
<p>Probiert habe ich es mit Mac OS-X 10.7 Server (Lion Server).</p>
<p>Vorraussetzung für die Installation ist Xcode welches im Mac App Store <a href="http://itunes.apple.com/de/app/xcode/id448457090?mt=12" target="_blank">runtergeladen</a> werden kann.</p>
<p>Der Packetmanager Homebrew kann die Installation vereinfachen, muss aber nicht genutzt werden.</p>
<p>Möchte man Homebrew nicht verwenden kann einfach die <a href="https://github.com/Pita/etherpad-lite#readme" target="_blank">Installationsanleitung</a> für Linux befolgt werden.</p>
<p>Interessant wird es dann wieder bei der Einrichtung als LaunchDaemon.</p>
<p><strong>Installation mit Homebrew</strong></p>
<ul>
<li>Zu aller erst muss der Packetmanager <a href="http://mxcl.github.com/homebrew/" target="_blank">Homebrew</a> <a href="https://github.com/mxcl/homebrew/wiki/installation" target="_blank">installiert</a>werden:<code>/usr/bin/ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"</code></li>
<li>Dann sollte erstmal git installiert werden damit Homebrew anständig läuft:<span class="Apple-style-span" style="font-family: monospace;">brew install git</span></li>
<li>Mit <code>brew install node</code> wird <a href="http://nodejs.org/#download" target="_blank">node.js</a> installiert.</li>
<li>Der node Paketmanager <a href="http://npmjs.org/" target="_blank">npm</a>ist leider wegen Problemen nicht im Homebrew enthalten, muss also manuell installiert werden:<code>curl http://npmjs.org/install.sh | sh</code></li>
<p><span id="more-231"></span>
</ul>
<p>Sind alle Programme vorhanden um wirklich Etherpad-Lite zu installieren:</p>
<ul>
<li>Es muss in den Ordner gewechselt werden in dem Etherpad-Lite installiert werden soll. Bei mir:<code>cd /usr/local/</code></li>
<li>Dann wird mit git die aktuelle Version von Etherpad-Lite runtergeladen:<code>git clone 'git://github.com/Pita/etherpad-lite.git'</code></li>
<li>In den etherpad-lite Ordner wechseln<code>cd etherpad-lite</code></li>
<li>um noch weiter Abhängigkeiten mit npm und die Default-Configs zu installieren<code>bin/installDeps.sh</code></li>
<li>Jetzt kann Etherpad-Lite ausgeführt werden</li>
</ul>
<p><code>bin/run.sh</code></p>
<ul>
<li>Einen Browser öffnen und <a href="http://localhost:9001/" target="_blank">http://localhost:9001</a> eingeben.</li>
</ul>
<p>Das Etherpad-Lite sollte jetzt laufen!</p>
<p>Es können jetzt noch Einstellungen in settings.json angepasst werden.</p>
<p><strong>Konfiguration als LaunchDaemon</strong></p>
<p>Etherpad-Lite sollte unter einem extra Benutzer laufen. Dieser Benutzer heißt bei mir: etherpad</p>
<p>Wenn der Benutzer angelegt ist müssen die Rechte für den Etherpad-Ornder angepasst werden:</p>
<p><span class="Apple-style-span" style="font-family: monospace;">sudo chown -R etherpad /usr/local/etherpad-lite/</span></p>
<p><code></code>Jetzt muss noch im log-Verzeichnis ein Ordner für die Logs von Etherpad-Lite angelegt werden:</p>
<p><span class="Apple-style-span" style="font-family: monospace;">sudo mkdir /var/logs/etherpad-lite</span></p>
<p>Auch für diese Verzeichnis müssen die Rechte angepasst werden:</p>
<p><code>sudo chown etherpad /var/logs/etherpad-lite</code></p>
<p>Die LaunchDaemon-Plist muss unter <code>/Library/LaunchDaemons/org.etherpad.etherpad-lite.plist</code> gespeichert werden.</p>
<pre class="brush: plain; title: ; wrap-lines: false; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE plist PUBLIC &quot;-//Apple//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
&lt;plist version=&quot;1.0&quot;&gt;
&lt;dict&gt;
	&lt;key&gt;KeepAlive&lt;/key&gt;
	&lt;true/&gt;
	&lt;key&gt;Label&lt;/key&gt;
	&lt;string&gt;org.etherpad.etherpad-lite&lt;/string&gt;
	&lt;key&gt;ProgramArguments&lt;/key&gt;
	&lt;array&gt;
		&lt;string&gt;/usr/local/etherpad-lite/bin/safeRun.sh&lt;/string&gt;
		&lt;string&gt;/var/log/etherpad-lite/etherpad.log&lt;/string&gt;
	&lt;/array&gt;
	&lt;key&gt;RunAtLoad&lt;/key&gt;
	&lt;true/&gt;
	&lt;key&gt;StandardOutPath&lt;/key&gt;
	&lt;string&gt;/var/log/etherpad-lite/etherpad.log&lt;/string&gt;
	&lt;key&gt;StandardErrorPath&lt;/key&gt;
	&lt;string&gt;/var/log/etherpad-lite/etherpad-error.log&lt;/string&gt;
	&lt;key&gt;UserName&lt;/key&gt;
	&lt;string&gt;etherpad&lt;/string&gt;
	&lt;key&gt;GroupName&lt;/key&gt;
	&lt;string&gt;etherpad&lt;/string&gt;
&lt;/dict&gt;
&lt;/plist&gt;
</pre>
<p>Wurden andere Pfade benutz müssen diese in der Property-Liste angepasst werden.</p>
<p>Hat alles geklappt kann das Etherpad-Lite mit launchd gestartet werden:</p>
<p><code>sudo launchctl load /Library/LaunchDaemons/org.etherpad.etherpad-lite.plist</code></p>
<p>Jetzt sollte das Etherpad-Lite wieder unter <a href="http://localhost:9001/" target="_blank">http://localhost:9001</a> verfügbar sein.</p>
<p>&nbsp;</p>
<p><strong>Webapp</strong></p>
<p>In Lion Server kann man jetzt ziemlich einfach Proxies und Webservices on-demand laufen lassen mit WebApps.</p>
<p>Einen guten Überblick über webappctl verschafft <a href="http://www.dreness.com/blog/?p=219" target="_blank">dieser Artikel</a> und die manpages <a href="x-man-page://webappctl">x-man-page://webappctl</a> und <a href="x-man-page://webapp.plist">x-man-page://webapp.plist</a><br />
Die Konfigurationsdateien für Webapps liegen in <code>/etc/apache2/webapps/</code><br />
Für das Etherpad-Lite habe ich die Datei <code>org.etherpad.etherpad-lite.plist</code> hinzugefügt.</p>
<pre class="brush: plain; title: ; wrap-lines: false; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE plist PUBLIC &quot;-//Apple//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;

&lt;!-- See man pages for webapp.plist(5) and webappctl(8) for information about this example webapp.plist --&gt;

&lt;plist version=&quot;1.0&quot;&gt;
&lt;dict&gt;
	&lt;key&gt;includeFiles&lt;/key&gt;
	&lt;array&gt;		&lt;!-- Include files are activated in virtual host when webapp is started --&gt;
		&lt;string&gt;/etc/apache2/httpd_etherpad.conf&lt;/string&gt;
	&lt;/array&gt;
	&lt;key&gt;launchKeys&lt;/key&gt;
	&lt;array&gt;		&lt;!-- Launchd plists in /System/Library/LaunchDaemons are loaded when webapp is started --&gt;
&lt;!--		&lt;string&gt;com.example.mywebapp&lt;/string&gt; --&gt;
	&lt;/array&gt;
	&lt;key&gt;name&lt;/key&gt;
	&lt;string&gt;org.etherpad.etherpad-lite&lt;/string&gt;
	&lt;key&gt;proxies&lt;/key&gt;		&lt;!-- ProxyPass/ProxyPassReverse directives are activated when webapp is started --&gt;
	&lt;dict&gt;
		&lt;key&gt;/etherpad&lt;/key&gt;		&lt;!-- Sets up a reverse proxy --&gt;
		&lt;dict&gt;
			&lt;key&gt;path&lt;/key&gt;
			&lt;string&gt;/etherpad&lt;/string&gt;
			&lt;key&gt;urls&lt;/key&gt;		&lt;!-- URLs comprise a proxy_balancer group --&gt;
			&lt;array&gt;
				&lt;string&gt;http://localhost:9001&lt;/string&gt;
			&lt;/array&gt;
		&lt;/dict&gt;
	&lt;/dict&gt;
	&lt;key&gt;requiredModuleNames&lt;/key&gt;
	&lt;array&gt;		&lt;!-- Apache plugin modules are enabled when webapp is started --&gt;
		&lt;string&gt;proxy_module&lt;/string&gt;
	&lt;/array&gt;
        &lt;key&gt;requiredWebAppNames&lt;/key&gt;
        &lt;array&gt;         &lt;!-- Required web apps are started when this webapp is started --&gt;
&lt;!--                &lt;string&gt;com.example.webapp.myotherwebapp&lt;/string&gt; --&gt;
        &lt;/array&gt;

	&lt;key&gt;sslPolicy&lt;/key&gt;	&lt;!-- Determines webapp SSL behavior --&gt;
	&lt;integer&gt;0&lt;/integer&gt;	&lt;!-- 0: default, UseSSLWhenEnabled --&gt;
			&lt;!-- 1:	UseSSLAlways --&gt;
			&lt;!-- 2:	UseSSLOnlyWhenCertificateIsTrustable --&gt;
			&lt;!-- 3:	UseSSLNever --&gt;
			&lt;!-- 4:	UseSSLAndNonSSL --&gt;
&lt;/dict&gt;
&lt;/plist&gt;
</pre>
<p>Die eingebundene Konfiguration <code>/etc/apache2/httpd_etherpad.conf</code> enthält Einstellungen für die Authentifizierung. Nur Benutzer die in der Gruppe <code>etherpad_users</code> sind können auf das Etherpad zugreifen:</p>
<pre class="brush: plain; title: ; wrap-lines: false; notranslate">
#configuration File for Etherpad-Lite webapp
&lt;Location &quot;/etherpad&quot;&gt;
	AuthType Digest
	AuthName &quot;Access Etherpad&quot;
	Require group etherpad_users
&lt;/Location&gt;
</pre>
<p>Die Webapp starten:<br />
<code>sudo webappctl start org.etherpad.etherpad-lite</code></p>
<p>Das Etherpad solle jetzt unter <a href="http://localhost/etherpad" target="_blank">http://localhost/etherpad</a> erreichbar sein.</p>
]]></content:encoded>
			<wfw:commentRss>http://tobias-conradi.de/index.php/2011/08/19/etherpad-lite-auf-mac-os-x-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NSBezierPath-Additions</title>
		<link>http://tobias-conradi.de/index.php/2011/05/06/nsbezierpath-additions/</link>
		<comments>http://tobias-conradi.de/index.php/2011/05/06/nsbezierpath-additions/#comments</comments>
		<pubDate>Fri, 06 May 2011 10:17:00 +0000</pubDate>
		<dc:creator>toco</dc:creator>
				<category><![CDATA[Projekte]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[NSBezierPath]]></category>
		<category><![CDATA[ObjC]]></category>

		<guid isPermaLink="false">http://tobias-conradi.de/?p=217</guid>
		<description><![CDATA[Für das MTDrawing-Projekt musste ich aus Perfomancegründen zu malende Pfade vereinfachen. . Douglas-Peucker-Algorithmus Um den Douglas-Peucker-Algorithmus zu Implementieren habe ich eine C#-Implementierung als  Vorlage benutzt. Um die NSBezierPath_DouglasPeucker Category zu benutzen muss nur das NSBezierPath+DouglasPeucker.h Headerfile importiert werden. Dann kann man mit der Methode - (NSBezierPath *) pathFromDouglasPeuckerReduction:(double)tolerance; ein neuner vereinfachter NSBezierPath produziert werden. Damit die Methode funktioniert, darf [...]]]></description>
			<content:encoded><![CDATA[<p>Für das MTDrawing-Projekt musste ich aus Perfomancegründen zu malende Pfade vereinfachen.<br />
.</p>
<p><strong>Douglas-Peucker-Algorithmus</strong></p>
<p><strong> </strong>Um den <a href="http://de.wikipedia.org/wiki/Douglas-Peucker-Algorithmus" target="_blank">Douglas-Peucker-Algorithmus</a> zu Implementieren habe ich eine C#-Implementierung als  Vorlage benutzt.</p>
<p>Um die NSBezierPath_DouglasPeucker Category zu benutzen muss nur das NSBezierPath+DouglasPeucker.h Headerfile importiert werden. Dann kann man mit der Methode</p>
<p>- (NSBezierPath *) pathFromDouglasPeuckerReduction:(double)tolerance;</p>
<p>ein neuner vereinfachter NSBezierPath produziert werden.<br />
Damit die Methode funktioniert, darf der Pfad keine NSCurveToBezierPathElement-Elemente beinhalten.</p>
<p><strong>FitCurves-Algorithmus</strong></p>
<p>Der von Philip J. Schneider entwickelte <a href="http://tog.acm.org/resources/GraphicsGems/gems/FitCurves.c" target="_blank">FitCurves-Algorithmus</a> wurde 1990 in den <a href="http://www.graphicsgems.org/" target="_blank">GraphicGems</a> veröffentlicht.<br />
Die ANSI-C Implementierung ist theoretisch direkt in ObjC verwendbar. Ich musste die Funktionen aber noch soweit anpassen, dass ich einen NSBezierPath bilden konnte.<br />
Ruf man die Methode</p>
<p>- (int) schneiderCurveFit:(double) error;</p>
<p>auf wird der bisherige Pfad durch einen neuen Pfad mit NSCurveToPointElement-Elementen ersetzt.<br />
Der ursprüngliche Pfad darf keine NSCurveToPointElement-Elemente enthalten.</p>
<p>Durch die Benutzung beider Algorithmen nacheinander kann man die Elementzahl eines NSBezierPaths erheblich reduzieren und so auch die Zeichengeschwindigkeit beschleunigen</p>
<p>Die Categories können auf <a href="https://github.com/toco/NSBezierPath-Additions" target="_blank">GitHub runtergeladen</a> werden.<br />
Wenn jemand Verbesserungsvorschläge oder Anmerkungen hat, freue ich mich über Kommentare, Nachrichten oder Pull-Requests auf Github.</p>
]]></content:encoded>
			<wfw:commentRss>http://tobias-conradi.de/index.php/2011/05/06/nsbezierpath-additions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FolderAction: chmod public and attach to subfolders</title>
		<link>http://tobias-conradi.de/index.php/2010/10/02/folderaction-chmod-public-and-attach-to-subfolders/</link>
		<comments>http://tobias-conradi.de/index.php/2010/10/02/folderaction-chmod-public-and-attach-to-subfolders/#comments</comments>
		<pubDate>Sat, 02 Oct 2010 17:30:27 +0000</pubDate>
		<dc:creator>toco</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Apple-Script]]></category>
		<category><![CDATA[Folder Action]]></category>
		<category><![CDATA[OS-X]]></category>
		<category><![CDATA[Skript]]></category>

		<guid isPermaLink="false">http://tobias-conradi.de/?p=176</guid>
		<description><![CDATA[Hier ein Apple-Script, dass als Folder-Action an einen Ordner angefügt werden kann. Wenn eine Datei oder ein Ordner in den Ordner gelegt wird, werden automatisch die Zugriffsrechte für allen Unterobjekten auf Lese- und Schreibzugriff für alle Benutzer geändert (chmod 777), zusätzlich wird an jeden Unterordner das Skript als Folder-Action angefügt. Das Skript kann zum Beispiel [...]]]></description>
			<content:encoded><![CDATA[<p>Hier ein Apple-Script, dass als Folder-Action an einen Ordner angefügt werden kann.</p>
<p>Wenn eine Datei oder ein Ordner in den Ordner gelegt wird, werden automatisch die Zugriffsrechte für allen Unterobjekten auf Lese- und Schreibzugriff für alle Benutzer geändert (chmod 777), zusätzlich wird an jeden Unterordner das Skript als Folder-Action angefügt.</p>
<p>Das Skript kann zum Beispiel dazu genutzt werden auf einem File-Server alle Objekte in einer Freigabe für alle Benutzer les- und schreibbar zu halten, auch wenn ein Benutzer ausversehen ein Objekt mit &#8220;falschen&#8221; Zugriffsrechten in den Ordner kopiert.</p>
<pre class="brush: objc; title: ; wrap-lines: false; notranslate">
on adding folder items to this_folder after receiving added_items
	tell application &quot;Finder&quot;
		repeat with this_item in added_items
			my theScript(this_item)
			my subfolders(this_item)
		end repeat
	end tell
end adding folder items to

on subfolders(this_folder)
	tell application &quot;Finder&quot;
		repeat with each_folder in (get every folder of this_folder)
			my theScript(each_folder)
			my subfolders(each_folder)
		end repeat
	end tell
end subfolders

on theScript(action_folder)
	set script_file to ((path to library folder as Unicode text) &amp; &quot;Scripts:Folder Action Scripts:chmodPublic_and_addScript.scpt&quot; as Unicode text)
	tell application &quot;System Events&quot;
		attach action to (action_folder as alias) using (script_file as alias)
	end tell

	set posix_path to quoted form of POSIX path of action_folder as string
	set ScriptReturn to do shell script &quot;/bin/chmod -R -f 777 &quot; &amp; posix_path

end theScript
</pre>
]]></content:encoded>
			<wfw:commentRss>http://tobias-conradi.de/index.php/2010/10/02/folderaction-chmod-public-and-attach-to-subfolders/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TUIO Mouse Weiterentwicklung</title>
		<link>http://tobias-conradi.de/index.php/2010/08/06/tuio-mouse-weiterentwicklung/</link>
		<comments>http://tobias-conradi.de/index.php/2010/08/06/tuio-mouse-weiterentwicklung/#comments</comments>
		<pubDate>Fri, 06 Aug 2010 14:27:34 +0000</pubDate>
		<dc:creator>toco</dc:creator>
				<category><![CDATA[Multitouch Tisch]]></category>
		<category><![CDATA[TUIO Mouse]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[TUIO]]></category>

		<guid isPermaLink="false">http://tobias-conradi.de/?p=170</guid>
		<description><![CDATA[Nachdem ich durch Abistress und viele Veranstaltungen wie Abistreich, -entlassung und -ball lange keine Zeit mehr hatte an diesem Projekt weiterzuarbeiten habe ich mich jetzt mal wieder drangesetzt die TUIO Mouse weiter zu entwickeln. Ich habe jetzt den Rechtsklick implementiert. Wenn man mit zwei Fingern innerhalb einer einstellbaren Zeit die MT-Fläche berührt hat, wird in [...]]]></description>
			<content:encoded><![CDATA[<p>Nachdem ich durch Abistress und viele Veranstaltungen wie Abistreich, -entlassung und -ball lange keine Zeit mehr hatte an diesem Projekt weiterzuarbeiten habe ich mich jetzt mal wieder drangesetzt die TUIO Mouse weiter zu entwickeln.</p>
<p>Ich habe jetzt den Rechtsklick implementiert. Wenn man mit zwei Fingern innerhalb einer einstellbaren Zeit die MT-Fläche berührt hat, wird in der Mitte der beiden Punkte ein Rechtsklick gemacht.</p>
<p>Als nächsten Schritt möchte ich  Scrollen  implementieren.</p>
<p>Noch möchte ich das Programm nicht ganz öffentlich zur Verfügung stellen. Auf <a href="http://tobias-conradi.de/index.php/kontakt/">Anfrage</a> stelle ich es gerne zur Verfügung.</p>
]]></content:encoded>
			<wfw:commentRss>http://tobias-conradi.de/index.php/2010/08/06/tuio-mouse-weiterentwicklung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vuvuzela Filter</title>
		<link>http://tobias-conradi.de/index.php/2010/06/13/vuvuzela-filter/</link>
		<comments>http://tobias-conradi.de/index.php/2010/06/13/vuvuzela-filter/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 15:37:51 +0000</pubDate>
		<dc:creator>toco</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Garage Band]]></category>
		<category><![CDATA[OS-X]]></category>
		<category><![CDATA[Vuvuzela]]></category>

		<guid isPermaLink="false">http://tobias-conradi.de/?p=144</guid>
		<description><![CDATA[Das andauernde Vuvuzela-Geräusch in den Fernsehübertagungen der WM nervt viele Zuschauer. Um das Geräusch irgendwie wegzubekommen, aber gleichzeitig WM gucken zu können habe ich mir überlegt einfach mit nem Equalizer die Frequenzen der Vuvuzela rauszufiltern. Auf der Sucher nach den Vuvuzela-Frequenzen bin ich auf die Webseite von Tobias Herre gelandet, der die Frequenzen schon analysiert [...]]]></description>
			<content:encoded><![CDATA[<p>Das andauernde Vuvuzela-Geräusch in den Fernsehübertagungen der WM nervt viele Zuschauer.<br />
Um das Geräusch irgendwie wegzubekommen, aber gleichzeitig WM gucken zu können habe ich mir überlegt einfach mit nem Equalizer die Frequenzen der Vuvuzela rauszufiltern.<span id="more-144"></span></p>
<p>Auf der Sucher nach den Vuvuzela-Frequenzen bin ich auf die <a href="http://www.surfpoeten.de/tube/vuvuzela_filter" target="_blank">Webseite</a> von Tobias Herre gelandet, der die Frequenzen schon analysiert und mit Logic aus dem Tonsignal vom Fernseher rausgefiltert hat.</p>
<p>Mit Garageband und dem AUFilter als Effekt kann man recht einfach bestimmte Frequenzen rausfiltern.</p>
<p>Ich habe dann noch etwas an den Frequenzen rumgespielt und nach einen Blick auf <a href="http://www.arizona-software.ch/audioxplorer/" target="_blank">AudioXplorer</a> noch ein paar anderen hinzugefügt. Natürlich bekommt man das Geräusch der Vuvuzelas nicht ganz weg und der Kommentator klingt etwas verzerrt, es funktioniert aber trotzdem recht gut.</p>
<p style="text-align: center;"><img class="aligncenter size-medium wp-image-147" title="Spureffekte in GarageBand" src="http://tobias-conradi.de/wp-content/uploads/2010/06/Bildschirmfoto-2010-06-13-um-17.16.39-201x300.png" alt="" width="201" height="300" /> <img class="aligncenter size-full wp-image-146" title="AUFilter Einstellungen" src="http://tobias-conradi.de/wp-content/uploads/2010/06/Bildschirmfoto-2010-06-13-um-17.17.00.png" alt="" width="502" height="308" /></p>
<p style="text-align: center;">Wenn man dann Monitoring aktiviert kann man das Eingangssignal gefiltert ausgeben.<img class="aligncenter" title="Monitoring in GarageBand aktivieren" src="http://tobias-conradi.de/wp-content/uploads/2010/06/Bildschirmfoto-2010-06-13-um-17.18.51-300x102.png" alt="" width="300" height="102" /></p>
<p>Da ich über einen DVB-T-Stick am Computer gucke, musste ich mir eine Möglichkeit suchen das Audio-Signal von EyeTV in Garageband zu routen. <a href="http://cycling74.com/products/soundflower/" target="_blank">Soundflower</a> ist hier der Retter in Not. Einmal installiert bietet Soundflower virtuelle Audio-Devices an an die man in EyeTV als Ausgang einstellen kann und dann in Garageband als Eingang.</p>
<p style="text-align: center;"><img class="size-medium wp-image-148 aligncenter" title="EyeTV Audio-Einstellungen" src="http://tobias-conradi.de/wp-content/uploads/2010/06/Bildschirmfoto-2010-06-13-um-17.17.49-300x93.png" alt="" width="300" height="93" /><img class="size-medium wp-image-149 aligncenter" title="Garageband Audio-Einstellungen" src="http://tobias-conradi.de/wp-content/uploads/2010/06/Bildschirmfoto-2010-06-13-um-17.26.14-300x144.png" alt="" width="300" height="144" /></p>
<p>Danach kann man die WM-Übertagungen etwas Vuvuzela-freier genießen.<br />
Hoffentlich merken die Sender auch mal, dass man das Stadion-Vuvuzela-Geräusch nicht braucht und drehen die Stadion-Mikros ab&#8230;</p>
<p><del datetime="2010-06-14T15:42:08+00:00">Hier mein GarageBand Projekt zum Download: Vuvuzela Filter</del> (Update weiter unten)<br />
Ich hoffe der eine oder andere kann so die WM Vuvuzele-Gefiltert genießen.</p>
<p><strong>Nachtrag:</strong></p>
<p>Der von den Vuvuzelas erzeugte Grundton ist fast ein kleine Ais(ich habe 235Hz gemessen), doch lassen sich auch andere Töne der <a href="http://de.wikipedia.org/wiki/Naturtonreihe" target="_blank">Naturtonreihe</a> auf einer Vuvuzela spielen, also 470Hz, 705Hz, 940Hz, 1175Hz, 1410Hz, 1645Hz, 1880Hz, 2115Hz, usw.</p>
<p>Wenn diese Frequenzen aus dem Audio-Signal rausgefiltert werden sollten die Vuvuzelas nicht mehr hörbar sein.</p>
<p>Download mit aktualisierten Frequenzen: <a href="http://tobias-conradi.de/wp-content/uploads/2010/06/Vuvuzela-Filter.zip">Vuvuzela Filter</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tobias-conradi.de/index.php/2010/06/13/vuvuzela-filter/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>TUIO Mouse</title>
		<link>http://tobias-conradi.de/index.php/2010/05/23/mttuio-mouse/</link>
		<comments>http://tobias-conradi.de/index.php/2010/05/23/mttuio-mouse/#comments</comments>
		<pubDate>Sun, 23 May 2010 14:10:56 +0000</pubDate>
		<dc:creator>toco</dc:creator>
				<category><![CDATA[Multitouch Tisch]]></category>
		<category><![CDATA[TUIO Mouse]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[TUIO]]></category>
		<category><![CDATA[WS-Touch]]></category>

		<guid isPermaLink="false">http://tobias-conradi.de/?p=100</guid>
		<description><![CDATA[Um mich erstmal wieder in Cocoa einzufinden und in das Framework einzuarbeiten habe ich mir vorgenommen ein kleines, einfaches Projekt anzugehen. Mir kam die Idee, dass es doch ganz gut wäre, wenn man mit dem Tisch auch ganz normal im Finder navigieren kann. Also wäre eine &#8220;MT-Maus&#8221; ganz gut. Nachdem ich ein wenig im Internet [...]]]></description>
			<content:encoded><![CDATA[<p>Um mich erstmal wieder in Cocoa einzufinden und in das Framework einzuarbeiten habe ich mir vorgenommen ein kleines, einfaches Projekt anzugehen. Mir kam die Idee, dass es doch ganz gut wäre, wenn man mit dem Tisch auch ganz normal im Finder navigieren kann. Also wäre eine &#8220;MT-Maus&#8221; ganz gut. Nachdem ich ein wenig im Internet nach bisherigen Lösungen gesucht hatte und keine zufrieden stellende Lösung gefunden habe, war für mich klar, dass ich versuchen werde eine gute &#8220;MT-Maus&#8221; für den MT-Tisch zu entwickeln.</p>
<p><span id="more-100"></span>Das Framework von Touché ist recht einfach aufgebaut. Nachdem man den TFTrackingClient instanziert hat, setzt man einen Delegate der das TFTrackingClientDelegate-Protokoll unterstützen muss.</p>
<p>Um einen Mausklick zu simulieren gibt es eine sehr einfache CoreGraphics-Funktion:</p>
<pre class="brush: objc; title: ; wrap-lines: false; notranslate">
CGPoint hit = CGPointMake(450, 345);
CGEventRef mouseDownEv = CGEventCreateMouseEvent (
						  NULL, //CGEventSourceRef source
						  kCGEventLeftMouseDown, //CGEventType mouseType
										//kCGEventNull
										//kCGEventMouseMoved
										//kCGEventLeftMouseDragged
										//kCGEventLeftMouseDown
										//kCGEventLeftMouseUp
						  hit, //CGPoint mouseCursorPosition
						  kCGMouseButtonLeft //CGMouseButton mouseButton
										//kCGMouseButtonLeft
										//kCGMouseButtonRight
										//kCGMouseButtonCenter
						  );
CGEventPost(kCGHIDEventTap, mouseDownEv);
</pre>
<p>Wenn jetzt an der gleichen Position ein MouseUp-Event geschickt wird, ist es ein einfacher Links-Klick.</p>
<pre class="brush: objc; title: ; notranslate">
CGPoint hit = CGPointMake(450, 345);
CGEventRef mouseUpEv = CGEventCreateMouseEvent (NULL,kCGEventLeftMouseUp,hit,kCGMouseButtonLeft);
CGEventPost (kCGHIDEventTap, mouseUpEv );
</pre>
<p>Wird aber nach dem MouseDown-Event kein MouseUp-Event sondern ein MouseDragged-Event geschickt, kann man mit der Maus z.B. Fenster ziehen.</p>
<pre class="brush: objc; title: ; notranslate">
CGPoint hit = CGPointMake(512, 412);
CGEventRef mouseMovedEv = CGEventCreateMouseEvent (NULL,kCGEventLeftMouseDragged,hit,kCGMouseButtonLeft);
CGEventPost (kCGHIDEventTap, mouseMovedEv);
</pre>
<p>Mit den drei Mousevents sollte man erst einmal ausreichend im Finder navigieren können.</p>
<p>Während des Programmierens und Testens habe ich gemerkt, dass Touché leider nicht 100% zuverlässig läuft, auf jeden Fall hat die Wii-Remote-Implementation noch einige Fehler. Deshalb habe ich mich entschlossen die Abhängigkeit von Touché zu verringern und auf ein generelles TUIO-Framework umzusteigen.</p>
<p><a href="http://fieryferret.com/" target="_blank">Bridger Maxwell</a> hat ein <a href="http://code.google.com/p/tuioframework/" target="_blank">ObjC TUIO-Framework</a> geschrieben auf das ich schonmal im Zusammenhang mit dem <a href="http://tobias-conradi.de/index.php/tag/wiimote-whiteboard/">Wiimote Whiteboard</a> gestoßen bin.</p>
<p>Ich habe die Maus noch mal neu angefangen und sie mit dem TUIO-Framework aufgebaut. Daher auch der Name &#8220;TUIO Mouse&#8221;.</p>
<p>Ich habe &#8220;TUIO Mouse&#8221; als reines Kommandozeilen-Tool geschrieben, es kann aus dem Terminal gestartet werden, oder was meine eigentliche Idee ist, als LaunchAgent im Hintergrund laufen sobald sich der Benutzer anmeldet.<br />
Damit man trotzdem noch ein paar Sachen konfigurieren kann habe ich beschlossen sie mit dem Default-System von OS-X zu speichern. So kann ich auch relativ einfach von einem anderen (Konfigurations-)Programm auf die Einstellungen von &#8220;TUIO Mouse&#8221; zugreifen.</p>
<p>Leider hatte ich anfangs Probleme auf die Defaults-Domain zuzugreifen, da ein Kommandozeilen-Tool kein Bundle ist und auch kein Bundle-Identifier hat, der aber von dem NSUserDefaults-Objekt als Standard-Domain gewählt wird. Mit einiger Bastelei und der Hilfe eines Bekannten habe ich es dann doch geschafft auf die &#8220;fremde&#8221; Domain zuzugreifen ohne auf CFPreferences zugreifen zu müssen.<br />
Durch folgenden Code bekommt man ein NSDictionary mit den momentanen Defaults aus der angegebenen Domain.</p>
<pre class="brush: objc; light: true; title: ; notranslate">
NSDictionary *currentDefaults = [userDefaults persistentDomainForName:kDomainName];
</pre>
<p>Nachdem man das Dictionary bearbeitet hat kann man die Defaults der Domain wieder überschreiben. Leider werden alle Defaults, die nicht im Dictionary vorhanden sind überschrieben!</p>
<pre class="brush: objc; light: true; title: ; notranslate">
[userDefaults setPersistentDomain:newDefaults forName:kDomainName];
</pre>
]]></content:encoded>
			<wfw:commentRss>http://tobias-conradi.de/index.php/2010/05/23/mttuio-mouse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Software Planung</title>
		<link>http://tobias-conradi.de/index.php/2010/05/23/software-planung/</link>
		<comments>http://tobias-conradi.de/index.php/2010/05/23/software-planung/#comments</comments>
		<pubDate>Sun, 23 May 2010 11:05:19 +0000</pubDate>
		<dc:creator>toco</dc:creator>
				<category><![CDATA[Multitouch Tisch]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[TUIO]]></category>
		<category><![CDATA[WS-Touch]]></category>

		<guid isPermaLink="false">http://tobias-conradi.de/?p=97</guid>
		<description><![CDATA[Wenn die Hardware funktioniert werden Berührungen der Tischoberfläche auf dem Bild der Webcam als weiße Blobs sichtbar sein. Diese Blobs müssen von einer Software erkannt und verarbeitet werden. In dem Wiki der NUI Group bin ich auf eine Liste mit Frameworks, Software und Libraries zum schreiben von Multitouch(MT)-Programmen gestoßen. Für mich ist klar, dass mein [...]]]></description>
			<content:encoded><![CDATA[<p>Wenn die Hardware funktioniert werden Berührungen der Tischoberfläche auf dem Bild der Webcam als weiße Blobs sichtbar sein. Diese Blobs müssen von einer Software erkannt und verarbeitet werden.</p>
<p>In dem Wiki der <a href="http://www.nuigroup.com/" target="_blank">NUI Group</a> bin ich auf eine <a href="http://wiki.nuigroup.com/Applications_and_libraries" target="_blank">Liste</a> mit Frameworks, Software und Libraries zum schreiben von Multitouch(MT)-Programmen gestoßen. Für mich ist klar, dass mein Endprodukt auf einem Mac laufen soll und ich am liebsten Cocoa programmieren möchte um mich weiter in die Sprache einzuarbeiten. Das in der Liste aufgeführte <a href="http://gkaindl.com/software/touche" target="_blank">Touché</a> von Georg Kaindl macht einen recht ausgereiften Eindruck, ist komplett in Cocoa geschrieben, bringt ein eigenes Framework zur Entwicklung von eigener Software mit und die Beispielprogramme sind eine gute Basis um sich in das Framework und überhaupt MT-Programme einzuarbeiten.</p>
<p>Sehr schön finde ich auch, dass man auch eine Wii-Remote als Input benutzen kann und ich so auch meine Programme testen kann bevor der Tisch fertig gebaut ist. Touché kann auch <a href="http://tuio.org/" target="_blank">TUIO</a>-Nachrichten ausgeben und ist so auch als Tracker für andere MT-Programme geeignet.</p>
<p>Wie schon beschrieben soll man mit Berührungen auf dem Tisch Pfade zeichnen können, die an die Roboter übermittelt werden und dann von den Robotern abgefahren werden. Die Roboter sollen während der Fahrt aber Hindernissen ausweichen und so ist der gefahrene Pfad u.U. anders als der gezeichnete. Der gefahrene Pfad soll also vom Roboter an den Tisch übertragen und dort dargestellt werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://tobias-conradi.de/index.php/2010/05/23/software-planung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kommunikations-Protokoll</title>
		<link>http://tobias-conradi.de/index.php/2010/05/21/ws-touch-protokoll/</link>
		<comments>http://tobias-conradi.de/index.php/2010/05/21/ws-touch-protokoll/#comments</comments>
		<pubDate>Fri, 21 May 2010 16:57:34 +0000</pubDate>
		<dc:creator>toco</dc:creator>
				<category><![CDATA[Multitouch Tisch]]></category>
		<category><![CDATA[WS-Touch]]></category>

		<guid isPermaLink="false">http://tobias-conradi.de/?p=84</guid>
		<description><![CDATA[Die verschiedenen Module der Robotersteuerung müssen über ein Protokoll kommunizieren. Bei dem entwickelten Protokoll werden einzelne Elemente mit &#8220;,&#8221; getrennt. Ein Befehl wird mit &#8220;;&#8221; abgeschossen. Das GUI sendet und empfängt als erstes Element immer die ID vom Empfänger/Sender Kommandos die zwischen GUI und BTB gesendet werden: NXT-Kommandos: GUI&#60;-&#62;Bluetooth Bluetooth&#60;-&#62;NXT id = int  (id = [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">Die verschiedenen Module der Robotersteuerung müssen über ein Protokoll kommunizieren.</p>
<p style="text-align: left;">Bei dem entwickelten Protokoll werden einzelne Elemente mit &#8220;,&#8221; getrennt. Ein Befehl wird mit &#8220;;&#8221; abgeschossen.</p>
<p style="text-align: left;"><span id="more-84"></span><br />
Das GUI sendet und empfängt als erstes Element immer die ID vom Empfänger/Sender</p>
<p style="text-align: left;"><strong>Kommandos die zwischen GUI und BTB gesendet werden:</strong></p>
<pre class="brush: plain; light: true; title: ; notranslate">
getNxtIds	args:NO
nxtIds	 	args: id1, id2,…	int &gt; 0
</pre>
<p><strong>NXT-Kommandos:</strong></p>
<pre class="brush: plain; light: true; title: ; notranslate">
setPointToVisit		args: x, y			float 0..1
positionVisited		args: x, y			float 0..1
setPosition			args: x, y			float 0..1
getPosition			args:NO
delPoints			args:NO
drive				args:speed, angle	float -1..1, int -180..180
</pre>
<p style="text-align: left;">
<p style="text-align: left;">GUI&lt;-&gt;Bluetooth</p>
<pre class="brush: plain; light: true; title: ; notranslate">id, ack, cmd, arg1, arg2, argi;</pre>
<p style="text-align: left;">Bluetooth&lt;-&gt;NXT</p>
<pre class="brush: plain; light: true; title: ; notranslate">ack, cmd, arg1, arg2, argi;</pre>
<p style="text-align: left;">id = int  (id = 0 für BluetoothBridge, weitere für NXT)<br />
ack = bool 0/1 sagt aus ob eine Antwort erwartet wird oder nicht.</p>
<p style="text-align: left;">
<p style="text-align: left;"><strong>Beispielnachrichten</strong>:</p>
<pre class="brush: plain; light: true; title: ; notranslate">
## kommt vom GUI nach dem Start: ##
0,1,getNxtIds;
## von BTB
0,0,nxtIds,1,2,3,4;
## vom GUI an die einzelnen NXT: ##
1,1,getPosition;
2,1,getPosition;
3,1,getPosition;
4,1,getPosition;
## von BTB an das GUI: ##
1,0,setPosition,0.1,0.2;
2,0,setPosition,0.2,0.3;
3,0,setPosition,0.3,0.4;
4,0,setPosition,0.4,0.5;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://tobias-conradi.de/index.php/2010/05/21/ws-touch-protokoll/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Planung Hardware</title>
		<link>http://tobias-conradi.de/index.php/2010/05/21/planung-hardware/</link>
		<comments>http://tobias-conradi.de/index.php/2010/05/21/planung-hardware/#comments</comments>
		<pubDate>Fri, 21 May 2010 15:07:01 +0000</pubDate>
		<dc:creator>toco</dc:creator>
				<category><![CDATA[Multitouch Tisch]]></category>
		<category><![CDATA[WS-Touch]]></category>

		<guid isPermaLink="false">http://tobias-conradi.de/?p=56</guid>
		<description><![CDATA[Da ich in der Gruppe für die Table-Software bin, kann ich die Planung leider nur Auszugsweise wiedergeben. Der für den Multitouch-Tisch verfolgte Ansatz ist die Totalreflexion: Ein Stück Acryl-Glas wird von allen Seitenkanten von IR-LEDs beleuchtet. Da die Strahlen sehr flach auf die Flächen auftreten werden sie komplett reflektiert. (Die Lichtstrahlen werden an der Grenzfäche [...]]]></description>
			<content:encoded><![CDATA[<p><em>Da ich in der Gruppe für die Table-Software bin, kann ich die Planung leider nur Auszugsweise wiedergeben.</em></p>
<p>Der für den Multitouch-Tisch verfolgte Ansatz ist die <a title="Wikipedia: Totalreflexion" href="http://de.wikipedia.org/wiki/Totalreflexion" target="_blank">Totalreflexion</a>:<br />
Ein Stück Acryl-Glas wird von allen Seitenkanten von IR-LEDs beleuchtet. Da die Strahlen sehr flach auf die Flächen auftreten werden sie komplett reflektiert.<em> (Die Lichtstrahlen werden an der Grenzfäche reflektiert, da sie aus eine Medium mit hoher Brechzahl an die Grenze zur Luft mit niedrigerer Brechzahl in einem größeren Winkel als dem kritischen Winkel kommen.)<span id="more-56"></span><span style="font-style: normal;">Wenn man jetzt mit einem Finger auf das Acry-Glas drückt wird an dem Berühungspunkt Licht auch aus dem Glas herausreflektiert, da sich durch das andere Medium mit einer höheren Brechzahl als Luft der kritische Winkel geändert hat . Der Finger reflektiert das Licht zurück durch das Glas und wird für die unter der Glasscheibe montierte Kamera sichtbar.</span></em></p>
<p><em><span style="font-style: normal;"> Weitere Informationen gibt es <a href="http://wiki.nuigroup.com/FTIR">hier</a>.</span></em></p>
<p>Als Basis für den Tisch dient sehr stabiler alter Tisch der schon seit längerer Zeit im Computerraum rumsteht.<br />
Durch die Hausmeisterei werden mehrere Verstrebungen hinzugefügt, um die Last der Platte besser zu tragen. Das Acrylglas ist umgeben von drei Holzschichten, oben und unten sowie um die Platte herum. In dem Spalt zwischen dem Glas und der mittleren Holzschicht sollen auch die LEDs untergebracht werden.</p>

<a href='http://tobias-conradi.de/index.php/2010/05/21/planung-hardware/tisch-grundgerust1/' title='Tisch Grundgerüst' rel='gallery-56'><img width="150" height="150" src="http://tobias-conradi.de/wp-content/uploads/2010/05/Tisch-Grundgerüst1-150x150.jpg" class="attachment-thumbnail" alt="Grundgerüst von WS-Touch" title="Tisch Grundgerüst" /></a>
<a href='http://tobias-conradi.de/index.php/2010/05/21/planung-hardware/tisch-grundgerust-mit-verstrebungen/' title='Tisch mit Verstrebungen' rel='gallery-56'><img width="150" height="150" src="http://tobias-conradi.de/wp-content/uploads/2010/05/Tisch-Grundgerüst-mit-Verstrebungen-150x150.jpg" class="attachment-thumbnail" alt="Tisch mit Verstrebungen" title="Tisch mit Verstrebungen" /></a>
<a href='http://tobias-conradi.de/index.php/2010/05/21/planung-hardware/tisch-grundgerust-acryl-closeup/' title='Tisch Grundgerüst Acryl Closeup' rel='gallery-56'><img width="150" height="150" src="http://tobias-conradi.de/wp-content/uploads/2010/05/Tisch-Grundgerüst-Acryl-Closeup-150x150.jpg" class="attachment-thumbnail" alt="Tisch Grundgerüst Acryl Closeup" title="Tisch Grundgerüst Acryl Closeup" /></a>
<a href='http://tobias-conradi.de/index.php/2010/05/21/planung-hardware/tisch-grundgerust-holz-acryl-ohne-top/' title='Tisch Grundgerüst Holz Acryl ohne Top' rel='gallery-56'><img width="150" height="150" src="http://tobias-conradi.de/wp-content/uploads/2010/05/Tisch-Grundgerüst-Holz-Acryl-ohne-Top-150x150.jpg" class="attachment-thumbnail" alt="Tisch Grundgerüst Holz Acryl ohne Top" title="Tisch Grundgerüst Holz Acryl ohne Top" /></a>
<a href='http://tobias-conradi.de/index.php/2010/05/21/planung-hardware/tisch-grundgerust-holz-acryl-closeup/' title='Alle drei Holzschichten mit der Acrylplatte' rel='gallery-56'><img width="150" height="150" src="http://tobias-conradi.de/wp-content/uploads/2010/05/Tisch-Grundgerüst-Holz-Acryl-closeup-150x150.jpg" class="attachment-thumbnail" alt="Alle Schichten" title="Alle drei Holzschichten mit der Acrylplatte" /></a>
<a href='http://tobias-conradi.de/index.php/2010/05/21/planung-hardware/tisch-grundgerust-holz-acryl-gesamtsicht/' title='Tisch Grundgerüst Holz Acryl Gesamtsicht' rel='gallery-56'><img width="150" height="150" src="http://tobias-conradi.de/wp-content/uploads/2010/05/Tisch-Grundgerüst-Holz-Acryl-Gesamtsicht-150x150.jpg" class="attachment-thumbnail" alt="Tisch Grundgerüst Holz Acryl Gesamtsicht" title="Tisch Grundgerüst Holz Acryl Gesamtsicht" /></a>

<p>Die Glasplatte soll 109,5 cm x 81,00 cm x 1,5 cm groß, durchsichtig und an den Kanten poliert sein.<br />
Jeweils acht IR-LEDs in Reihe gelötet und die Achter-Gruppen in Parallelschaltung verkabelt sollen den Glasplatte von allen Seitenkanten beleuchten. Mit einem Vorwiderstand von 4,7Ω sollen sich die LEDs dann mit einem 12V Netzteil betreiben lassen.</p>
<p><em><span style="font-style: normal;"> </span></em></p>
]]></content:encoded>
			<wfw:commentRss>http://tobias-conradi.de/index.php/2010/05/21/planung-hardware/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WS-Touch ein Multitouch-Tisch</title>
		<link>http://tobias-conradi.de/index.php/2010/05/21/ws-touch-ein-multitouch-tisch/</link>
		<comments>http://tobias-conradi.de/index.php/2010/05/21/ws-touch-ein-multitouch-tisch/#comments</comments>
		<pubDate>Fri, 21 May 2010 12:20:24 +0000</pubDate>
		<dc:creator>toco</dc:creator>
				<category><![CDATA[Multitouch Tisch]]></category>
		<category><![CDATA[WS-Touch]]></category>

		<guid isPermaLink="false">http://tobias-conradi.de/?p=45</guid>
		<description><![CDATA[Die Idee Die Abi-Klausuren sind geschrieben und das vierte Semester bricht an. Dem letzten und sehr motivierten Informatik-Leistungskurs der Wichern-Schule fehlt es an Arbeit. Es werden Ideen gesammelt, was man die letzten Monate produktives machen könnte. Nach längeren Diskussionen fallen Ideen wie &#8220;3D-Tracking von Händen anhand der kapazitiven Verschiebung&#8221; oder &#8220;Warenhaus-Roboter&#8221; weg und die Idee eines [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Die Idee</strong></p>
<p>Die Abi-Klausuren sind geschrieben und das vierte Semester bricht an. Dem letzten und sehr motivierten Informatik-Leistungskurs der Wichern-Schule fehlt es an Arbeit. Es werden Ideen gesammelt, was man die letzten Monate produktives machen könnte. Nach längeren Diskussionen fallen Ideen wie &#8220;3D-Tracking von Händen anhand der kapazitiven Verschiebung&#8221; oder &#8220;Warenhaus-Roboter&#8221; weg und die Idee eines Multitouch-Tisches kristallisiert sich heraus.</p>
<p><span id="more-45"></span>Wichtig ist natürlich, dass es auch zum Lehrplan passt, also muss noch Robotik mit in den Kontext gebracht werden. Wie wäre es z.B. wenn man Lego-Mindstorms-NXTs über den Multitouch-Tisch steuern könnte, wenn man z.B. eine Linie auf den Tisch zeichnet und der Roboter fährt sie ab?</p>
<p><strong>Aufgabenbereiche</strong></p>
<p>Nachdem die Aufgabenstellung klar war, ging es an die Planung. Wir sind ein Kurs von 15 Personen, also wir die Aufgaben in verschiedene Aufgabenbereiche einteilen.<br />
- Table-Hardware<br />
- Table-Software<br />
- NXT-Software<br />
- Bluetooth-Kommunikation</p>
<p>Die Gruppe Table-Hardware sorgt dafür, dass der Tisch am Ende steht und in der Kamera ein Bild mit &#8220;Blobs&#8221; ankommen, die Table-Software kümmert sich darum, dass das Bild verarbeitet wird und Nachrichten an das GUI geschickt werden. Das GUI zeichnet anhand der &#8220;Blob&#8221;-Bewegungen Pfade, welche über Netzwerk an die Bluetooth-Kommunikation geschickt werden und von dort über Bluetooth an den NXT weitergeleitet werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://tobias-conradi.de/index.php/2010/05/21/ws-touch-ein-multitouch-tisch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

