<?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>tinowagner.com // Blog &#187; Programmieren</title>
	<atom:link href="http://blog.tinowagner.com/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.tinowagner.com</link>
	<description>Dies und das.</description>
	<lastBuildDate>Wed, 25 Nov 2009 00:44:06 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>750 frames of chaos</title>
		<link>http://blog.tinowagner.com/2009/11/25/750-frames-of-chaos/</link>
		<comments>http://blog.tinowagner.com/2009/11/25/750-frames-of-chaos/#comments</comments>
		<pubDate>Wed, 25 Nov 2009 00:44:06 +0000</pubDate>
		<dc:creator>Tino Wagner</dc:creator>
				<category><![CDATA[Bilder]]></category>
		<category><![CDATA[Physik]]></category>
		<category><![CDATA[Programmieren]]></category>

		<guid isPermaLink="false">http://blog.tinowagner.com/?p=76</guid>
		<description><![CDATA[Here&#8217;s a video my graphics card has just finished. It&#8217;s a travel lasting 750 frames from a friction coefficent of 0.05 to 1.0 and my &#8222;standard&#8220; setting of three magnets below the pendulum&#8217;s body (see here and here for more information).

]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a video my graphics card has just finished. It&#8217;s a travel lasting 750 frames from a friction coefficent of 0.05 to 1.0 and my &bdquo;standard&ldquo; setting of three magnets below the pendulum&#8217;s body (see <a href="http://blog.tinowagner.com/2009/11/23/magnetic-pendulum-the-opencl-way/">here</a> and <a href="http://blog.tinowagner.com/2009/07/13/das-magnetpendel/">here</a> for more information).</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/I11gxf3IIb0&#038;hl=de_DE&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/I11gxf3IIb0&#038;hl=de_DE&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tinowagner.com/2009/11/25/750-frames-of-chaos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Magnetic pendulum, the OpenCL way.</title>
		<link>http://blog.tinowagner.com/2009/11/23/magnetic-pendulum-the-opencl-way/</link>
		<comments>http://blog.tinowagner.com/2009/11/23/magnetic-pendulum-the-opencl-way/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 18:48:21 +0000</pubDate>
		<dc:creator>Tino Wagner</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Physik]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[magnetic pendulum]]></category>
		<category><![CDATA[Magnetpendel]]></category>
		<category><![CDATA[OpenCL]]></category>

		<guid isPermaLink="false">http://blog.tinowagner.com/?p=70</guid>
		<description><![CDATA[For the last couple of days I did some effort on porting my Python implementation of a magnetic pendulum (German post here, the slides include lots of pictures) to OpenCL. It&#8217;s really cool to leverage GPU power for your own benefit.
If you&#8217;d like to see code rather than words, you should come around at my [...]]]></description>
			<content:encoded><![CDATA[<p>For the last couple of days I did some effort on porting my Python implementation of a <a href="http://www.inf.ethz.ch/personal/muellren/pendulum/index.html">magnetic pendulum</a> (German post <a href="http://blog.tinowagner.com/2009/07/13/das-magnetpendel/">here</a>, the <a href="http://tinowagner.com/projekte/magnetic_pendulum/vortrag_short-web.pdf">slides</a> include lots of pictures) to <a href="http://en.wikipedia.org/wiki/OpenCL">OpenCL</a>. It&#8217;s really cool to leverage <span class="caps">GPU</span> power for your own benefit.</p>
<p>If you&#8217;d like to see code rather than words, you should <a href="http://github.com/tuxu/magnetic_pendulum">come around at my Git repository</a>. Just to quote from the <a href="http://github.com/tuxu/magnetic_pendulum/blob/master/README">README</a> file:</p>
<blockquote><p>
This is an implementation of a magnetic pendulum in OpenCL. A spherical pendulum is influenced by magnets. For every point of origin the program finds the magnet the pendulum&#8217;s body will be nearest when it comes to rest (friction is taken into account). It will create an image, where every pixel (points in the <img src="http://blog.tinowagner.com/wp-content/cache/tex_1ed346930917426bc46d41e22cc525ec.png" align="absmiddle" class="tex" alt="\phi" />-<img src="http://blog.tinowagner.com/wp-content/cache/tex_2554a2bb846cffd697389e5dc8912759.png" align="absmiddle" class="tex" alt="\theta" />-plane) is mapped to a color representing each magnet.</p>
<p>The problem is ideally suited for parallel computing as every initial condition can be solved independently from the others. I did a Python version some time ago that utilized Scipy. Although it was quite optimized with C code, it performed very bad. To create a map of 1600&#215;1600 pixels, it took about 2700 minutes! Leveraging the power hidden in GPUs, I wanted to know what speed-up would be reached.</p>
<p>The code works quite good so far. I began coding a <span class="caps">CPU</span> version in C that is a lot faster than the original Python version, but even my decent <span class="caps">GPU</span> outperforms that by a factor of ten. The map from above can now be done in 284 seconds. That is seconds, not minutes! <img src='http://blog.tinowagner.com/wp-content/plugins/smilies-themer/Silk/emoticon_smile.png' alt=':-)' class='wp-smiley' /> </p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://blog.tinowagner.com/2009/11/23/magnetic-pendulum-the-opencl-way/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Asus DH Remote: Crafting an OS X driver</title>
		<link>http://blog.tinowagner.com/2009/11/02/asus-dh-remote-crafting-an-os-x-driver/</link>
		<comments>http://blog.tinowagner.com/2009/11/02/asus-dh-remote-crafting-an-os-x-driver/#comments</comments>
		<pubDate>Mon, 02 Nov 2009 22:23:40 +0000</pubDate>
		<dc:creator>Tino Wagner</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[Programmieren]]></category>

		<guid isPermaLink="false">http://blog.tinowagner.com/?p=57</guid>
		<description><![CDATA[Some ASUS mainboards are supplied with a remote control, the &#8222;Asus DH Remote&#8220;. I&#8217;m running Mac OS X Snow Leopard on a P5W DH Deluxe, which is quite old from a technical point of view, but actually doing a good job. As often, there are only Windows drivers for the remote, but none for Linux [...]]]></description>
			<content:encoded><![CDATA[<p>Some <span class="caps">ASUS</span> mainboards are supplied with a remote control, the <a href="http://www.techspot.com/articles-info/11/images/image_14.jpg">&bdquo;Asus DH Remote&ldquo;</a>. I&#8217;m running <a href="http://en.wikipedia.org/wiki/Mac_OS_X_Snow_Leopard">Mac OS X Snow Leopard</a> on a <a href="http://www.asus.com/product.aspx?P_ID=m4cR4iaPdABNLtQa">P5W DH Deluxe</a>, which is quite old from a technical point of view, but actually doing a good job. As often, there are only Windows drivers for the remote, but none for Linux or even OS X. For the Linux part, there is already a <a href="http://www.lirc.org/html/table.html">driver for LIRC</a>. </p>
<p>When I realized that the IR receiver is a simple <a href="http://en.wikipedia.org/wiki/USB_HID"><span class="caps">USB</span> HID</a> device, I started brewing an OS X user-space utility together that interfaces the receiver. It is merely a hack based off example code I found at the <a href="http://developer.apple.com/mac/library/documentation/DeviceDrivers/Conceptual/HID/intro/intro.html">Mac Dev Center</a>, but that got it to work in a short time.</p>
<p>Basically, what you get from the receiver is the message that a key on the remote was pressed or released. Using this information, the tool is using Brandon Holland&#8217;s <a href="http://www.brandon-holland.com/irkeyboardemu.html">IRKeyboardEmu</a> to emulate <span class="caps">HID</span> command reports sent by an Apple Remote. This allows you to use the Asus DH Remote as a controller for <a href="http://en.wikipedia.org/wiki/Frontrow">FrontRow</a> or iTunes!</p>
<p>It is far from being perfect, but I think it&#8217;s a good starting point for your own inventions.</p>
<p>
<h3>Download</h3>
<p>
Source and Universal Binary: <a href="http://www.tinowagner.com/projekte/asus_remote/AsusRemote-v0.1.zip">AsusRemote-v0.1.zip</a></p>
<p>
<h3>Installation</h3>
<p></p>
<ol></p>
<li>Download and extract the archive.</li>
<p></p>
<li>Install the binary:<br />
<code># sudo cp AsusRemote /usr/local/bin/AsusRemote<br />
# sudo chown root:wheel /usr/local/bin/AsusRemote<br />
# sudo chmod +s /usr/local/bin/AsusRemote<br />
</code><br />
Note the <span class="caps">SUID</span> bit for AsusRemote. It needs superuser rights to interface to IRKeyboardEmu! Else it will issue an error issuing a <em>sysctl</em> command. </li>
<p></p>
<li>To be able to use the daemon right after booting OS X, you need to copy <em>com.tinowagner.AsusRemote.plist</em> to <em>/Library/LaunchDaemons/</em>:<br />
<code># sudo cp com.tinowagner.AsusRemote.plist /Library/LaunchDaemons/<br />
# sudo chown root:wheel /Library/LaunchDaemons/com.tinowagner.AsusRemote.plist<br />
</code>
</li>
<p></p>
<li>Finally, you should <a href="http://www.brandon-holland.com/irkeyboardemu.html">download the newest binary of IRKeyboardEmu</a> and copy it to /System/Library/Extensions. Just follow the instructions in the readme.</li>
<p></p>
<li>After rebooting, check that the daemon is running. There should be a process called AsusRemote.</li>
</ol>
<p>
<h3>Key assignment</h3>
<p>
This is a hard coded part. It tries to match the keys on the Apple Remote.</p>
<ol></p>
<li><strong>AP LAUNCH</strong>: Menu. Start FrontRow.</li>
<p></p>
<li><strong>+ and &#8211; </strong>: Up and down arrows, Volume up/down.</li>
<p></p>
<li><strong>Reverse and Forward</strong>: Previous/Rewind, Next/Fast-forward</li>
<p></p>
<li><strong>Play/Pause</strong>: Enter, Play/Pause</li>
<p>
</ol>
<p>
There is no action assigned to the other keys.</p>
<p>
<h3>Troubleshooting</h3>
<p>
If nothing happens after pressing a key, try running AsusRemote from command line. First kill the daemon running in the background:<br />
<code># sudo killall AsusRemote<br />
# AsusRemote<br />
</code><br />
You should now see a version message. Pressing an arbitrary key on the remote should produce an output:</p>
<blockquote><p>AsusRemote v0.1<br />
2009, (c) Tino Wagner &lt;ich@tinowagner.com&gt;</p>
<p>Key:          Plus<br />
Key:          Minus<br />
Key:          Reverse<br />
Key:          Forward<br />
Key:          Play/Pause<br />
Key pressed:  Plus<br />
Key released: Plus<br />
Key pressed:  Minus<br />
Key released: Minus<br />
Key pressed:  Forward<br />
Key released: Forward<br />
Key pressed:  Reverse<br />
Key released: Reverse<br />
Key:          AP Launch<br />
Key:          AP Launch<br />
^C
</p></blockquote>
<p>
<h3>Notes</h3>
<p>
Feel free to modify the code to your likes! But please drop me a note if it&#8217;s an improvement that could be useful for everybody, so I can post it here.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tinowagner.com/2009/11/02/asus-dh-remote-crafting-an-os-x-driver/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Das Magnetpendel</title>
		<link>http://blog.tinowagner.com/2009/07/13/das-magnetpendel/</link>
		<comments>http://blog.tinowagner.com/2009/07/13/das-magnetpendel/#comments</comments>
		<pubDate>Mon, 13 Jul 2009 18:08:18 +0000</pubDate>
		<dc:creator>Tino Wagner</dc:creator>
				<category><![CDATA[Physik]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Magnetpendel]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blog.tinowagner.com/?p=50</guid>
		<description><![CDATA[Als Projektarbeit f&#252;r Computational Physics habe ich ein Magnetpendel programmiert. Geschrieben in Python mit wxWidgets und Pyglet, parallelisiert mit IPython.

Pr&#228;sentation des Projekts: PDF (Kurzfassung, 1 MB), PDF (Langfassung mit weiteren Fraktalen, 14 MB)
Dokumentation: hier
Quelltext


]]></description>
			<content:encoded><![CDATA[<a rel="lightbox" href="http://tinowagner.com/projekte/magnetic_pendulum/screen.jpg"><img title="Screenshot des Magnetpendels" src="http://tinowagner.com/projekte/magnetic_pendulum/screen.jpg" alt="Screenshot des Magnetpendels" width="400" height="248" /></a>
<a rel="lightbox" href="http://tinowagner.com/projekte/magnetic_pendulum/map.png"><img title="Beispiel f&#252;r eine berechnete Karte" src="http://tinowagner.com/projekte/magnetic_pendulum/map.png" alt="Beispiel f&#252;r eine berechnete Karte" width="200" height="200" /></a>
<p>Als Projektarbeit f&#252;r <a title="Computational Physics" href="http://www.comp-phys.tu-dresden.de/cp2009/">Computational Physics</a> habe ich ein <a title="Magnetpendel" href="http://de.wikipedia.org/wiki/Magnetpendel">Magnetpendel</a> programmiert. Geschrieben in Python mit wxWidgets und <a href="http://pyglet.org/">Pyglet</a>, parallelisiert mit <a title="IPython" href="http://ipython.scipy.org/doc/stable/html/parallel/index.html">IPython</a>.</p>
<ul>
<li>Pr&#228;sentation des Projekts: <a title="Kurzfassung" href="http://tinowagner.com/projekte/magnetic_pendulum/vortrag_short-web.pdf">PDF</a> (Kurzfassung, 1 MB), <a title="Langfassung" href="http://tinowagner.com/projekte/magnetic_pendulum/vortrag.pdf">PDF</a> (Langfassung mit weiteren Fraktalen, 14 MB)</li>
<li>Dokumentation: <a href="http://tinowagner.com/projekte/magnetic_pendulum/docs/">hier</a></li>
<li><a title="Quelltext" href="http://tinowagner.com/projekte/magnetic_pendulum/magnetic_pendulum-src.zip">Quelltext</a></li>
<p>
</ul></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tinowagner.com/2009/07/13/das-magnetpendel/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>M&#246;ge es doppel-pendeln!</title>
		<link>http://blog.tinowagner.com/2008/04/02/doppelpendel/</link>
		<comments>http://blog.tinowagner.com/2008/04/02/doppelpendel/#comments</comments>
		<pubDate>Wed, 02 Apr 2008 21:24:04 +0000</pubDate>
		<dc:creator>Tino Wagner</dc:creator>
				<category><![CDATA[Physik]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[ODE]]></category>
		<category><![CDATA[Pendel]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blog.tinowagner.com/?p=36</guid>
		<description><![CDATA[Die Semesterferien neigen sich dem Ende zu, und nach all der Pr&#252;fungszeit wollte ich mal wieder was programmieren. Doch was? Nun, ich glaube ein Physikstudent sollte zumindest einmal in seinem Leben eine Simulation eines Doppelpendels programmieren  Es ist nicht nur sch&#246;n anzusehen, sondern auch als wohl einfachstes chaotisches System ein physikalisch interessanter Fall.
Die Herleitung [...]]]></description>
			<content:encoded><![CDATA[<p>Die Semesterferien neigen sich dem Ende zu, und nach all der Pr&#252;fungszeit wollte ich mal wieder was programmieren. Doch was? Nun, ich glaube ein Physikstudent sollte zumindest einmal in seinem Leben eine <em>Simulation eines Doppelpendels</em> programmieren <img src='http://blog.tinowagner.com/wp-content/plugins/smilies-themer/Silk/emoticon_wink.png' alt=';)' class='wp-smiley' /> Es ist nicht nur sch&#246;n anzusehen, sondern auch als wohl einfachstes <a href="http://de.wikipedia.org/wiki/Chaos">chaotisches System</a> ein physikalisch interessanter Fall.</p>
<p>Die Herleitung der Bewegungsgleichungen ist dank zwei Semestern theoretischer Physik und <a href="http://de.wikipedia.org/wiki/Lagrange-Formalismus">Lagrange II</a> nicht schwer, wird aber auch bei <a href="http://scienceworld.wolfram.com/physics/DoublePendulum.html">Eric Weisstein&#8217;s World Of Physics</a> sehr sch&#246;n beschrieben. </p>
<p>Die dort hergeleiteten Gleichungen sind</p>
<p><img src="http://blog.tinowagner.com/wp-content/cache/tex_4c0b069366cd66db675f5ef26ccc5f13.png" align="absmiddle" class="tex" alt="M l_1 \ddot \phi_1 + m_2 l_2 \ddot \phi_2 \cos (\phi_1 - \phi_2) + m_2 l_2 \dot \phi^2_2 \sin (\phi_1 - \phi_2) + M g \sin \phi_1 = 0" /></p>
<p><img src="http://blog.tinowagner.com/wp-content/cache/tex_b82ee2f519fdc535351739816840e1d5.png" align="absmiddle" class="tex" alt="m_2 l_2 \ddot \phi_2 + m_2 l_1 \ddot \phi_1 \cos (\phi_1 - \phi_2) - m_2 l_1 \dot \phi^2_1 \sin (\phi_1 - \phi_2) + m_2 g \sin \phi_2 = 0" /></p>
<p>mit <img src="http://blog.tinowagner.com/wp-content/cache/tex_48d58b8640f6c04b8315fe838e2d51bb.png" align="absmiddle" class="tex" alt="M = m_1 + m_2" />  als Gesamtmasse.</p>
<p>Bleibt noch das Problem sie zu l&#246;sen. Analytisch ist das aber ohne N&#228;herung nicht m&#246;glich. (Schon das einfache Fadenpendel l&#228;&#223;t sich analytisch nur f&#252;r kleine Winkel exakt l&#246;sen!)</p>
<p>Also numerisch.</p>
<p>Angefangen mit <a href="http://www.python.org/">Python</a> und dem Rechenpaket <a href="http://scipy.org/">SciPy</a> habe ich also ein Einfach- und ein Doppelpendel nebeneinander aufgeh&#228;ngt. (F&#252;r die Grafkausgabe OpenGL und <a href="http://www,pyglet.org/">Pyglet</a>)</p>
<p>Das gekoppelte Differentialgleichungssystem 2. Ordnung mu&#223; man hierbei zur numerischen L&#246;sung in ein Differentialgleichungssystem 1. Ordnung umformen, damit die Integrationsroutinen aus SciPy anwendbar sind. Aber das ist zum Gl&#252;ck immer m&#246;glich.</p>
<p>Weil es aber langweilig ist, eine fertige Funktion zu nutzen, habe ich auch diese Routinen noch umgesetzt. Genauer gesagt drei verschiedene: das <a href="http://de.wikipedia.org/wiki/Explizites_Euler-Verfahren">Euler-Verfahren</a>, das <a href="http://de.wikipedia.org/wiki/Klassisches_Runge-Kutta-Verfahren">klassische Runge-Kutta-Verfahren</a> mit fester Schrittweite und das Runge-Kutta-Verfahren nach <a href="http://en.wikipedia.org/wiki/Dormand-Prince">Dormand und Prince</a> mit einer sich anpassenden Schrittweite, wie es in <a href="http://www.nrbook.com/">Numerical Recipes</a> beschrieben ist.</p>
<p><a href="http://www.tinowagner.com/projekte/double_pendulum-r25.zip"><img class="alignnone size-medium wp-image-37 image" title="Doppelpendelsimulation mit Python" src="http://blog.tinowagner.com/wp-content/uploads/double_pendulum.png" alt="Doppelpendel" /></a></p>
<p>Lange Rede, kurzer Sinn. Den Python-Code gibt&#8217;s hier: <a href="http://www.tinowagner.com/projekte/double_pendulum-r25.zip">klick</a>. Ausf&#252;hren mit &bdquo;python -O simulation.py&ldquo;.</p>
<p>Zur Ausf&#252;hrung wird, wie gesagt, weiterhin das Modul <a href="http://pyglet.org/download.html">Pyglet</a> ben&#246;tigt. In <em>ode.py</em> findet sich die Implementation der <a title="ODE" href="http://de.wikipedia.org/wiki/Gew&#246;hnliche_Differentialgleichung">ODE</a>-Integrationsroutinen. Um die Pendelparameter zu &#228;ndern, liefere ich eine einfaches und schnell zusammengeschustertes Widget-Toolkit mit, das das Unterfenster erzeugt.</p>
<p><a href="http://www.tinowagner.com/projekte/jpendulum/webstart/launch.jnlp"><img class="aligncenter size-full wp-image-38 image" title="Doppelpendelsimulation mit Java" src="http://blog.tinowagner.com/wp-content/uploads/jpendulum.png" alt="" /></a></p>
<p>Da ich aber auch mal wieder was mit Java machen wollte, habe ich das Doppelpendel noch mit Java, <a href="http://www.netbeans.org/">NetBeans</a> und <a href="https://jogl.dev.java.net/">JOGL</a> (OpenGL-Binding f&#252;r Java) umgesetzt. &bdquo;umgesetzt&ldquo; hei&#223;t hierbei, da&#223; ich den Code nahezu 1:1 von meinem urspr&#252;nglichen Python-Code &#252;bersetzt habe. Die Java-Simulation l&#228;uft etwas schneller und dank Java Web Start kann ich hier auch einen <a href="http://www.tinowagner.com/projekte/jpendulum/webstart/launch.jnlp">Link bieten, um sich das ganze sofort anzuschauen</a>.</p>
<p>Den Quelltext gibt&#8217;s nat&#252;rlich <a href="http://www.tinowagner.com/projekte/jpendulum/jpendulum-r21.zip">auch</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tinowagner.com/2008/04/02/doppelpendel/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Standard auf Umwegen</title>
		<link>http://blog.tinowagner.com/2007/10/03/standard-auf-umwegen/</link>
		<comments>http://blog.tinowagner.com/2007/10/03/standard-auf-umwegen/#comments</comments>
		<pubDate>Wed, 03 Oct 2007 15:53:44 +0000</pubDate>
		<dc:creator>Tino Wagner</dc:creator>
				<category><![CDATA[Web-Dev]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Webdesign]]></category>

		<guid isPermaLink="false">http://blog.tinowagner.com/2007/10/03/standard-auf-umwegen/</guid>
		<description><![CDATA[Ich hatte ja schon manche Albtr&#228;ume, weil der Internet-Explorer sich nicht an Vereinbarungen h&#228;lt. Gl&#252;cklicherweise lassen sich die vielen Ecken und Kanten daran etwas gl&#228;tten. Gewu&#223;t wie!
Daher hier eine kurze Liste mit informativen Links:

Das Verhalten dieses Browsers wird stark davon ab, da&#223; bestimmte Elemente &#8222;Layout&#8220; bekommen (oder nicht). Damit lassen sich etwa die doppelten Margins [...]]]></description>
			<content:encoded><![CDATA[<p>Ich hatte ja schon manche Albtr&#228;ume, weil der Internet-Explorer sich nicht an <a href="http://www.w3.org/">Vereinbarungen</a> h&#228;lt. Gl&#252;cklicherweise lassen sich die vielen Ecken und Kanten daran etwas gl&#228;tten. Gewu&#223;t wie!</p>
<p>Daher hier eine kurze Liste mit informativen Links:</p>
<ul>
<li>Das Verhalten dieses Browsers wird stark davon ab, da&#223; bestimmte Elemente &bdquo;Layout&ldquo; bekommen (oder nicht). Damit lassen sich etwa die doppelten Margins entfernen, die der IE merkw&#252;rdigerweise gerne bei gefloateten Elementen setzt. Mehr dar&#252;ber hier: <a href="http://www.satzansatz.de/cssd/onhavinglayout.html">On having layout</a> (<a href="http://onhavinglayout.fwpf-webdesign.de/">Deutsche &#220;bersetzung</a>)</li>
<li>Workarounds f&#252;r Browser-Bugs bei <a href="http://www.css-technik.de/rubrik/5/CSS-Browser-Bugs.htm">CSS-Technik</a></li>
<li><a href="http://standards.webmasterpro.de/index-article-min_height.html">&sbquo;min-height&lsquo; f&#252;r den Internet-Explorer</a>. Sogar das l&#228;&#223;t sich bewerkstelligen. </li>
<li>Eine umfangreiche Liste, welche CSS-Eigenschaften von den einzelnen Browsern unterst&#252;tzt werden findet sich <a href="http://www.css4you.de/browsercomp.html"><span class="caps">CSS</span> 4 you</a>.</li>
</ul>
<ul>
<li><a href="http://www.positioniseverything.net/">/* Position is Everything */</a>, sehr ausf&#252;hrliche Seite, die CSS-Bugs in modernen Browsern beschreibt, Beispiele zeigt und sagt, wie man sie behebt.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.tinowagner.com/2007/10/03/standard-auf-umwegen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ich mach dann mal weiter.</title>
		<link>http://blog.tinowagner.com/2007/10/02/ich-mach-dann-mal-weiter/</link>
		<comments>http://blog.tinowagner.com/2007/10/02/ich-mach-dann-mal-weiter/#comments</comments>
		<pubDate>Tue, 02 Oct 2007 21:03:03 +0000</pubDate>
		<dc:creator>Tino Wagner</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Web-Dev]]></category>
		<category><![CDATA[bloggen]]></category>
		<category><![CDATA[gepard//cms]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://blog.tinowagner.com/2007/10/02/ich-mach-dann-mal-weiter/</guid>
		<description><![CDATA[Es ist schon einige Zeit vergangen seit dem letzten Eintrag hier. Eigentlich schade, dachte ich mir. Ich denke sowieso die ganze Zeit nach. &#220;ber dies und das. Warum dann nicht aufschreiben, was mich bewegt?
Wenn ich t&#228;glich auf Seiten im Netz sto&#223;e, die Sachen ganz toll erkl&#228;ren, n&#252;tzlich sind oder vielleicht witzig, dann w&#252;rden sich vielleicht [...]]]></description>
			<content:encoded><![CDATA[<p>Es ist schon einige Zeit vergangen seit dem letzten Eintrag hier. Eigentlich schade, dachte ich mir. Ich denke sowieso die ganze Zeit nach. &#220;ber dies und das. Warum dann nicht aufschreiben, was mich bewegt?</p>
<p>Wenn ich t&#228;glich auf Seiten im Netz sto&#223;e, die Sachen ganz toll erkl&#228;ren, n&#252;tzlich sind oder vielleicht witzig, dann w&#252;rden sich vielleicht auch andere dar&#252;ber freuen, das mitzubekommen. Oder wenn ich Artikel lese, an denen mir etwas nicht pa&#223;t. Daf&#252;r w&#228;re doch das Blog die ideale Plattform. Und deshalb werde ich die Plattform jetzt wohl &#246;fter nutzen, um was reinzuschreiben.</p>
<p>Zum Reinschreiben verwende ich nun die Weblog-Software <a href="http://www.wordpress.org/">Wordpress</a>, die ich schon mal installiert hatte. Danach, das hei&#223;t die letzten beiden Jahre, war <a href="http://www.s9y.org/">Serendipity</a> an der Reihe. Konnte mich aber auch nicht zum Schreiben bewegen.</p>
<p>Das soll nun anders werden. Damit das funktioniert, habe ich meine <a href="http://www.tinowagner.com/">Website</a> neu gestaltet. Sieht jetzt moderner aus, denk ich. Hat auch ne Menge Arbeit und schlaflose Tage gekostet.</p>
<p>Meine Website selbst l&#228;uft weiterhin unter <a href="http://gepard.tinowagner.com/">gepard//cms</a>, das ich &sbquo;damals&lsquo; f&#252;r meine <a href="http://www.gymnasium-lichtenstein.de/">Schule</a> programmiert habe.</p>
<p>Das entwickelte Design an Wordpress anzupassen stellte sich als die schwierigste Angelegenheit heraus. Bevor ich die Eingebung bekam, das einfachste aller mitgelieferten Themes als &bdquo;Schablone&ldquo; zu verwenden, habe ich mich stundenlang mit <a href="http://www.getk2.com/">K2</a> auseinandergesetzt. Ich h&#228;tte mich wohl noch einige Stunden mehr damit besch&#228;ftigen m&#252;ssen, ehe alles zu meiner Zufriedenheit funktioniert h&#228;tte. Aber es war die richtige Entscheidung, das mitgelieferte Kubrick-Theme als Basis zu nehmen. (Viel davon ist jetzt trotzdem nicht mehr &#252;brig.) Einfach, schlicht und vor allem &#252;berschaubar.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tinowagner.com/2007/10/02/ich-mach-dann-mal-weiter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wikispam</title>
		<link>http://blog.tinowagner.com/2005/01/01/wikispam/</link>
		<comments>http://blog.tinowagner.com/2005/01/01/wikispam/#comments</comments>
		<pubDate>Sat, 01 Jan 2005 19:19:45 +0000</pubDate>
		<dc:creator>Tino Wagner</dc:creator>
				<category><![CDATA[Web-Dev]]></category>
		<category><![CDATA[Spam]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[Wiki]]></category>

		<guid isPermaLink="false">http://tinowagner.comentwicklung/wikispam/</guid>
		<description><![CDATA[Im Lamppix-Wiki meinen immer wieder findige Unternehmer, ihre Internetadressen hinterlassen zu m&#252;ssen. Das verbessert nat&#252;rlich deren Google-Ranking, sie werden bekannt und bekommen mehr Besuch.
So glaubt man, funktioniert die Branche.
Dieser Spam im Wiki ging mir aber langsam und sicher so sehr auf den Senkel, da&#223; ich etwas dagegen tun mu&#223;te. Hier ist also der ultimative Blacklist-Hack [...]]]></description>
			<content:encoded><![CDATA[<p>Im <a href="http://lamppix.tinowagner.com/wiki/">Lamppix-Wiki</a> meinen immer wieder findige Unternehmer, ihre Internetadressen hinterlassen zu m&#252;ssen. Das verbessert nat&#252;rlich deren Google-Ranking, sie werden bekannt und bekommen mehr Besuch.</p>
<p>So glaubt man, funktioniert die Branche.</p>
<p>Dieser Spam im Wiki ging mir aber langsam und sicher so sehr auf den Senkel, da&#223; ich etwas dagegen tun mu&#223;te. Hier ist also der ultimative Blacklist-Hack f&#252;r <a href="http://phpwiki.sf.net/">PhpWiki</a></p>
<p><span id="more-17"></span></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span> ?
<span style="color: #666666; font-style: italic;">// blacklist hack, tino wagner, 2005-01-01</span>
<span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span>blacklistFile<span style="color: #339933;">,</span> <span style="color: #0000ff;">'black.list'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">function</span> blacklistCheck<span style="color: #009900;">&#40;</span><span style="color: #000088;">$text</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$lines</span> <span style="color: #339933;">=</span> <span style="color: #990000;">file</span><span style="color: #009900;">&#40;</span>blacklistFile<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$lines</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$line</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">stristr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$text</span><span style="color: #339933;">,</span> <span style="color: #990000;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$line</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">return</span> <span style="color: #990000;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$line</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Diese Funktion in eine neue Datei &bdquo;lib/blacklist.php&ldquo; speichern. (&bdquo;lib&ldquo; ist ein Unterverzeichnis von PhpWiki)</p>
<p>In der Datei index.php von PhpWiki gibt es die Stelle <em>include &bdquo;lib/stdlib.php&ldquo;;</em>. Gleich darunter sollte diese Zeile eingetragen werden:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">include</span> <span style="color: #0000ff;">&quot;lib/blacklist.php&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Letzter Schritt: Die Blacklist endg&#252;ltig aktivieren.<br />
Dazu &bdquo;lib/savepage.php&ldquo; &#246;ffnen und diese Stelle suchen:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// set new pageinfo</span>
<span style="color: #000088;">$pagehash</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'lastmodified'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">time</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$pagehash</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'version'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">++;</span>
<span style="color: #000088;">$pagehash</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'author'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$remoteuser</span><span style="color: #339933;">;</span></pre></div></div>

<p><strong>Dar&#252;ber</strong> folgende Zeilen eintragen:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// check if the new page contains blacklisted strings</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$blacklistedWord</span> <span style="color: #339933;">=</span> blacklistCheck<span style="color: #009900;">&#40;</span><span style="color: #000088;">$content</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	GeneratePage<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'MESSAGE'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;&lt;p&gt;I'm sorry, but &quot;</span><span style="color: #339933;">.</span>
		<span style="color: #0000ff;">&quot;your content contained blacklisted URLs, words &quot;</span><span style="color: #339933;">.</span>
		<span style="color: #0000ff;">&quot;or whatever.&lt;/p&gt;&lt;p&gt;Check for &lt;b&gt;&lt;i&gt;&quot;</span><span style="color: #339933;">.</span>
		<span style="color: #000088;">$blacklistedWord</span><span style="color: #339933;">.</span>
		<span style="color: #0000ff;">&quot;&lt;/i&gt;&lt;/b&gt; to correct this.&lt;/p&gt;&quot;</span><span style="color: #339933;">,</span>
		<span style="color: #990000;">sprintf</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">gettext</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Problem while updating <span style="color: #009933; font-weight: bold;">%s</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
		<span style="color: #000088;">$pagename</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
		<span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #990000;">exit</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Jetzt fehlt blo&#223; noch die Blacklist selbst. Eine Datei mit dem Namen &bdquo;black.list&ldquo; im selben Verzeichnis wie index.php erstellen und dort alle URLs oder W&#246;rter eintragen (eine Zeile &#8212; ein Eintrag), nach denen gesucht werden soll.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tinowagner.com/2005/01/01/wikispam/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spam im Blog! Oh! Nein!</title>
		<link>http://blog.tinowagner.com/2004/12/03/spam-im-blog-oh-nein/</link>
		<comments>http://blog.tinowagner.com/2004/12/03/spam-im-blog-oh-nein/#comments</comments>
		<pubDate>Fri, 03 Dec 2004 16:36:16 +0000</pubDate>
		<dc:creator>Tino Wagner</dc:creator>
				<category><![CDATA[Web-Dev]]></category>
		<category><![CDATA[bloggen]]></category>
		<category><![CDATA[Captcha]]></category>
		<category><![CDATA[Spam]]></category>

		<guid isPermaLink="false">http://tinowagner.comweb-dev/spam-im-blog!-oh!-nein!/</guid>
		<description><![CDATA[Gestern fing es an. Ich bekam im Minutentakt E-Mails von meinem Blog. Die Spammer schrecken also vor nichts zur&#252;ck, greifen jetzt schon unschuldige Blogs an, posten Kommentare in Massen.

Das durfte nat&#252;rlich nicht so weitergehen. Da hab ich was nettes gefunden &#8212; einen WordPress-Hack, der es den Spammern schwer macht: AuthImage. L&#228;&#223;t sich schnell installieren und [...]]]></description>
			<content:encoded><![CDATA[<p>Gestern fing es an. Ich bekam im Minutentakt E-Mails von meinem Blog. Die Spammer schrecken also vor nichts zur&#252;ck, greifen jetzt schon unschuldige Blogs an, posten Kommentare in Massen.</p>
<p><span id="more-14"></span></p>
<p>Das durfte nat&#252;rlich nicht so weitergehen. Da hab ich was nettes gefunden &#8212; einen WordPress-Hack, der es den Spammern schwer macht: <a href="http://www.gudlyf.com/index.php?p=376">AuthImage</a>. L&#228;&#223;t sich schnell installieren und ist wirksam. Das Ergebnis zeigt sich ganz unten, wenn man einen Kommentar schreiben will. Jetzt mu&#223; man, damit der Kommentar angenommen wird, auch noch den Text einer Grafik abschreiben.</p>
<p>Der Spam kam von gewissen Personen, die sich so nannten: &bdquo;texas hold&#8217;em poker&ldquo;, &bdquo;casino&ldquo;, &bdquo;free online casino&ldquo;, &bdquo;blackjack&ldquo;, &bdquo;online casino games&ldquo;, &bdquo;free poker online&ldquo;, &bdquo;free online poker&ldquo;, &bdquo;online poker&ldquo;, &bdquo;poker rooms&ldquo;, &bdquo;wsop&ldquo;, &bdquo;internet casino&ldquo;. Jeder Kommentar kam von einer anderen IP, die geposteten Texte waren ziemlich sinnfrei.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tinowagner.com/2004/12/03/spam-im-blog-oh-nein/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS-Schriften</title>
		<link>http://blog.tinowagner.com/2004/08/12/css-schriften/</link>
		<comments>http://blog.tinowagner.com/2004/08/12/css-schriften/#comments</comments>
		<pubDate>Thu, 12 Aug 2004 23:40:05 +0000</pubDate>
		<dc:creator>Tino Wagner</dc:creator>
				<category><![CDATA[Fundstücke]]></category>
		<category><![CDATA[Web-Dev]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Schrift]]></category>
		<category><![CDATA[Webdesign]]></category>

		<guid isPermaLink="false">http://tinowagner.comweb-dev/css-schriften/</guid>
		<description><![CDATA[Pervers!
Stu Nicholls zeigt auf seiner Website, wie man Schriften per CSS realisieren kann. Das gibt der Bezeichnung »Div-Suppe« eine v&#246;llig neue Dimension!  
Aber er schreibt ja selbst, da&#223; er es nicht ernsthaft einsetzen w&#252;rde.
]]></description>
			<content:encoded><![CDATA[<p>Pervers!</p>
<p><a href="http://www.stunicholls.myby.co.uk/">Stu Nicholls</a> zeigt auf seiner Website, wie man <a href="http://www.stunicholls.myby.co.uk/menu/cssfont.html">Schriften per CSS</a> realisieren kann. Das gibt der Bezeichnung »Div-Suppe« eine v&#246;llig neue Dimension! <img src='http://blog.tinowagner.com/wp-content/plugins/smilies-themer/Silk/emoticon_wink.png' alt=';)' class='wp-smiley' /> </p>
<p>Aber er schreibt ja selbst, da&#223; er es nicht ernsthaft einsetzen w&#252;rde.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tinowagner.com/2004/08/12/css-schriften/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
