<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Dennis Kempin's Blog</title>
	
	<link>http://blog.denniskempin.com</link>
	<description>ux design freak. photoholic. mad coder. weird lifehacker.</description>
	<lastBuildDate>Thu, 01 Sep 2011 20:43:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/denniskempin" /><feedburner:info uri="denniskempin" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly></feedburner:browserFriendly><item>
		<title>3D Object recognition in 3D scenes using CUDA</title>
		<link>http://blog.denniskempin.com/2011/09/3d-object-recognition-in-3d-scenes-using-cuda/</link>
		<comments>http://blog.denniskempin.com/2011/09/3d-object-recognition-in-3d-scenes-using-cuda/#comments</comments>
		<pubDate>Thu, 01 Sep 2011 20:39:25 +0000</pubDate>
		<dc:creator>Dennis</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://blog.denniskempin.com/2011/09/3d-object-recognition-in-3d-scenes-using-cuda/</guid>
		<description><![CDATA[At the media computing group I was asked if it would be possible to detect 3D objects in the video stream of the Kinect camera. There is previous work by Chavdar Papazov and Darius Burschk on detecting 3D objects in noisy and occulded scenes, which uses a RANSAC based algorithm to detect objects in depth [...]]]></description>
			<content:encoded><![CDATA[<p>At the <a href="http://hci.rwth-aachen.de/">media computing group</a> I was asked if it would be possible to detect 3D objects in the video stream of the <a href="http://en.wikipedia.org/wiki/Kinect">Kinect camera</a>. There is previous work by Chavdar Papazov and Darius Burschk on <a href="http://www6.in.tum.de/Main/Publications/Papazov2010.pdf">detecting 3D objects in noisy and occulded scenes</a>, which uses a <a href="http://en.wikipedia.org/wiki/RANSAC">RANSAC</a> based algorithm to detect objects in depth images.<a href="http://blog.denniskempin.com/wp-content/uploads/2011/09/image.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 18px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.denniskempin.com/wp-content/uploads/2011/09/image_thumb.png" width="619" height="182" /></a></p>
<p><span id="more-366"></span><br />
<h4>Identifying the bottleneck</h4>
<p>This can be applied to the depth data provided by the Kinect, however a pure CPU based implementation is far too slow for real-time application. After some profiling we found out that most steps of the online recognition phase are very efficient, except for step 6: Testing and accepting the hypothesis. Which can take up to <strong>70 seconds in high quality recognition settings</strong>.</p>
<h4></h4>
<h4>Implementation on CUDA</h4>
<p>For one recognition phase there are about 100.000 hypotheses that need to be tested, each of them independently. So this is a scenario which fits very well with the SIMD structure of GPUs. </p>
<p>So my last project for the media computing group was to port this algorithm to utilize the GPU with <a href="http://en.wikipedia.org/wiki/CUDA">Nvidia CUDA</a>. Actually the CUDA part was very comfortable, the hypothesis testing algorithm does not require complicated data structures so I could just upload all information to the GPU and execute nearly the original C code on the GPU. </p>
<h4></h4>
<h4>Eigendecomposition on CUDA</h4>
<p>But there was one big challenge for me. The algorithm requires a <a href="http://en.wikipedia.org/wiki/Polar_decomposition">polar decomposition</a> of a real 3&#215;3 matrix. Which is based on a <a href="http://en.wikipedia.org/wiki/Singular_value_decomposition">singular value decomposition</a>, which then can be implemented using <a href="http://en.wikipedia.org/wiki/Eigendecomposition_of_a_matrix">eigen decompositions</a> of real, symmetric 3&#215;3 matrices. In the original code this is done using <a href="http://opencv.willowgarage.com/wiki/">OpenCV</a>, which cannot be ported to CUDA easily. </p>
<p>So I had to implement this from scratch. To be honest it was not very easy for me as I haven’t been using any linear algebra after the exam ~5 years ago. But as always with math, Wikipedia is a great help!</p>
<p>I based my implementation on an example by <a href="http://www.melax.com/diag">S. Melax</a>, and implemented some Matrix, Vector and Quaternion classes to get this running. A few days and nights later I was testing my CUDA based algorithm on millions of matrices and compared them to the OpenCV results. It works perfectly. Interestingly only in ~<strong>99.9975%</strong> of the cases, but for this application this is sufficient. </p>
<h4>Speedup</h4>
<p>Long story short. After putting it all together I achieved an approximate <strong>speedup of factor 7.</strong> Please remark that the test machine was using an very old Geforce 8600GT, one of the first CUDA capable devices. I believe much higher speedups can be expected on more modern GPUs. </p>
<p>The groundwork for real-time recognition is done, and I already have a hell lot of ideas how to further improve performance of this algorithm. Unfortunately my contract ends and my job here is over, but I am curious to see which further improvements will be made on this technique.&#160; </p>
<p>PS: You can download my <a href="http://dl.dropbox.com/u/346381/Static/SVD.h">C++ decomposition code</a>, it does not have any requirements except CUDA and the standard C math library. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.denniskempin.com/2011/09/3d-object-recognition-in-3d-scenes-using-cuda/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Talk: User Experience Design in Games</title>
		<link>http://blog.denniskempin.com/2011/07/talk-user-experience-design-in-games/</link>
		<comments>http://blog.denniskempin.com/2011/07/talk-user-experience-design-in-games/#comments</comments>
		<pubDate>Sun, 24 Jul 2011 11:08:57 +0000</pubDate>
		<dc:creator>Dennis</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://blog.denniskempin.com/2011/07/talk-user-experience-design-in-games/</guid>
		<description><![CDATA[Back in 2009 I have attended the first Devmania conference. The Devmania is the successor of the famous Dusmania conference of hobby and indie game developers, and there were a lot of interesting people and cool talks. I decided to get over myself and give a talk on my passion: User Experience Design. So I [...]]]></description>
			<content:encoded><![CDATA[<p>Back in 2009 I have attended the first Devmania conference. The Devmania is the successor of the famous Dusmania conference of hobby and indie game developers, and there were a lot of interesting people and cool talks. </p>
<p>I decided to get over myself and give a talk on my passion: User Experience Design.</p>
<p>So I wrote a lot of emails to game developer gurus and teams of professional UX designers to receive some great stories about how UX design is applied in computer games. I received a few answers and with some more research I put up a nice talk about my findings. </p>
<p>I gave a short glimpse into the work of professional user testing studios like Microsoft User Research and Bolt Peters, followed by a few tools that could be applied by the audience in their own games. </p>
<p>These tools were taken from a very diverse set of professions. The first is inspired by <a href="http://headrush.typepad.com/">Katy Sierras</a> talk on <strong>creating passionate users</strong>, which was held on the south by southwest conference. The second one is based <a href="http://sethgodin.typepad.com/">Seth Godin’s</a> concept of <strong>tribes</strong> in modern marketing, while the last one is taken from <strong>robotics</strong>, where the phenomenon of the <a href="http://en.wikipedia.org/wiki/Uncanny_valley">uncanny valley</a> was first observed.</p>
<p>The slides look very simplistic, but it was a hell lot of work to achieve this. I still think this is my best presentation design so far. </p>
<div style="width: 425px" id="__ss_8675557"><strong style="margin: 12px 0px 4px; display: block"><a title="Ux talk final" href="http://www.slideshare.net/denniskempin/ux-talk-final">Ux talk final</a></strong><object id="__sse8675557" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=uxtalkfinal-110724060135-phpapp01&amp;stripped_title=ux-talk-final&amp;userName=denniskempin" /><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><embed name="__sse8675557" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=uxtalkfinal-110724060135-phpapp01&amp;stripped_title=ux-talk-final&amp;userName=denniskempin" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></div>
<p>Unfortunately the video recording of this talk is not online anymore. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.denniskempin.com/2011/07/talk-user-experience-design-in-games/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Pencilcase on a birthday party</title>
		<link>http://blog.denniskempin.com/2011/07/pencilcase-on-a-birthday-party/</link>
		<comments>http://blog.denniskempin.com/2011/07/pencilcase-on-a-birthday-party/#comments</comments>
		<pubDate>Sun, 24 Jul 2011 10:52:43 +0000</pubDate>
		<dc:creator>Dennis</dc:creator>
				<category><![CDATA[Photography]]></category>

		<guid isPermaLink="false">http://blog.denniskempin.com/2011/07/pencilcase-on-a-birthday-party/</guid>
		<description><![CDATA[Interesting alternative to rock concert photos. Yesterday my favorite local band from Aachen was playing on a pretty big private birthday party. Energy saving garden lamps instead of an array of 500W concert lamps, and a relaxed acoustified set instead of rock action. But still Pencilcase was awesome and I even got a few nice [...]]]></description>
			<content:encoded><![CDATA[<p>Interesting alternative to rock concert photos. Yesterday my favorite local band from Aachen was playing on a pretty big private birthday party. Energy saving garden lamps instead of an array of 500W concert lamps, and a relaxed acoustified set instead of rock action. But still Pencilcase was awesome and I even got a few nice shots. </p>
<p>The early shots were still pretty easy technically, with F/2.0-2.8 I got perfectly lit pictures even during dawn. They look like I shot them during daylight, but it was already in the middle of dawn.</p>
<p>But as it got really dark, I had to switch up to ISO3200 even with F/1.4. The pictures got noisy and the lamps in front of the band were causing glares. </p>
<p>I used my usual trick for noisy concert pictures, and gave them some kind of grunge look. That means: </p>
<ul>
<li>Boost clarity</li>
<li>Boost Sharpening</li>
<li>Adjust B/W mixing to highlight the musicians and create strong contrasts</li>
<li>Adjust tone curves to give a very strong contrast</li>
</ul>
<p>My favorite pictures from this shooting:</p>
<p><a href="http://blog.denniskempin.com/wp-content/uploads/2011/07/DSC_1175.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 18px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="DSC_1175" border="0" alt="DSC_1175" src="http://blog.denniskempin.com/wp-content/uploads/2011/07/DSC_1175_thumb.jpg" width="163" height="244" /></a><a href="http://blog.denniskempin.com/wp-content/uploads/2011/07/DSC_1136.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 18px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="DSC_1136" border="0" alt="DSC_1136" src="http://blog.denniskempin.com/wp-content/uploads/2011/07/DSC_1136_thumb.jpg" width="244" height="163" /></a><a href="http://blog.denniskempin.com/wp-content/uploads/2011/07/DSC_1316.jpg"><img style="background-image: none; border-right-width: 0px; margin: 0px 0px 18px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="DSC_1316" border="0" alt="DSC_1316" src="http://blog.denniskempin.com/wp-content/uploads/2011/07/DSC_1316_thumb.jpg" width="163" height="244" /></a></p>
<p>The whole set is on facebook: <a href="https://www.facebook.com/media/set/?set=a.10150382627493312.438457.686118311&amp;l=67c40effdf&amp;type=1">Pencilcase on a 50th birthday party</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.denniskempin.com/2011/07/pencilcase-on-a-birthday-party/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Talk: Progressive Photon Mapping</title>
		<link>http://blog.denniskempin.com/2011/07/talk-progressive-photon-mapping/</link>
		<comments>http://blog.denniskempin.com/2011/07/talk-progressive-photon-mapping/#comments</comments>
		<pubDate>Sat, 16 Jul 2011 10:24:37 +0000</pubDate>
		<dc:creator>Dennis</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://blog.denniskempin.com/2011/07/talk-progressive-photon-mapping/</guid>
		<description><![CDATA[A few weeks ago I had to give a talk at the seminar of the computer graphics and multimedia institute of Prof. Leif Kobbelt. He chose the topic Progressive Photon Mapping for me and it turned out to be a really interesting technique for global illumination. I used my usual presentation template as I really [...]]]></description>
			<content:encoded><![CDATA[<p>A few weeks ago I had to give a talk at the seminar of the <a href="http://www.graphics.rwth-aachen.de/">computer graphics and multimedia institute</a> of Prof. Leif Kobbelt. He chose the topic Progressive Photon Mapping for me and it turned out to be a really interesting technique for global illumination.</p>
<p>I used my usual presentation template as I really like the style and up to now it proved to be very well accepted. The hardest part was to visualize the algorithms, especially the light paths. But I think I did a pretty good job, as people told me that this was much easier to understand than the usual bullet point and textual description.</p>
<p>You can find the original paper for this technique at the website of the University of San Diego: <a href="http://graphics.ucsd.edu/~henrik/papers/progressive_photon_mapping/">http://graphics.ucsd.edu/~henrik/papers/progressive_photon_mapping/</a></p>
<p>And here are my slides:</p>
<div style="width:425px" id="__ss_8611931"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/denniskempin/progressive-photon-mapping" title="Progressive photon mapping">Progressive photon mapping</a></strong><object id="__sse8611931" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=progressivephotonmapping-110716052051-phpapp02&amp;stripped_title=progressive-photon-mapping&amp;userName=denniskempin" /><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><embed name="__sse8611931" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=progressivephotonmapping-110716052051-phpapp02&amp;stripped_title=progressive-photon-mapping&amp;userName=denniskempin" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.denniskempin.com/2011/07/talk-progressive-photon-mapping/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Interactive Particle Tracing for Ventricular Assist Devices</title>
		<link>http://blog.denniskempin.com/2011/07/interactive-particle-tracing-for-ventricular-assist-devices/</link>
		<comments>http://blog.denniskempin.com/2011/07/interactive-particle-tracing-for-ventricular-assist-devices/#comments</comments>
		<pubDate>Sat, 16 Jul 2011 09:56:14 +0000</pubDate>
		<dc:creator>Dennis</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://blog.denniskempin.com/?p=345</guid>
		<description><![CDATA[&#160; This was one of my first big projects during my work at the Virtual Reality Group RWTH-Aachen. The DeBakey ventricular assist device (VAD) is basically a blood pump which is implanted on a human heart and the big challenge for engineers is to provide a pump layout that does as little damage to the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.denniskempin.com/wp-content/uploads/2011/07/bloodpump_view1.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 18px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="bloodpump_view" border="0" alt="bloodpump_view" src="http://blog.denniskempin.com/wp-content/uploads/2011/07/bloodpump_view_thumb1.png" width="699" height="134" /></a>&#160;
<p><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 18px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="Picture1" border="0" alt="Picture1" align="left" src="http://blog.denniskempin.com/wp-content/uploads/2011/07/Picture11.png" width="192" height="241" />This was one of my first big projects during my work at the <a href="http://www.vr.rwth-aachen.de">Virtual Reality Group RWTH-Aachen</a>. The DeBakey ventricular assist device (VAD) is basically a blood pump which is implanted on a human heart and the big challenge for engineers is to provide a pump layout that does as little damage to the blood cells as possible, while still providing enough flow to assist the heart. </p>
<p>To improve the engineering workflow the Virtual Reality Group developed technologies to visualize the blood damage of cells flowing through the VAD. As the blood damage estimation is a complex calculation, the software was not able to allow interactive seeding of particles, i.e. placing new blood cells into the device while the application is running. This had to be defined beforehand followed by a few hours of pre-computation.</p>
<p><span id="more-345"></span><br />
<h3>Interactive Particle Seeding</h3>
<p>The goal of me and a dear colleague of mine was to prove that this can be done in real-time, using the vast computational power in modern graphics accelerators. For this we had to reduce the complexity of the blood damage estimation and implement all calculations using NVidia CUDA. </p>
<p>In the end we were able to trace 65.000 particles in real-time on a cheap low end graphics card, but there were strong numeric instabilities as we apparently went too far with the removal of complexity. </p>
<p><a href="http://blog.denniskempin.com/wp-content/uploads/2011/07/screenshot.png"><img style="background-image: none; border-right-width: 0px; margin: 0px 0px 18px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="screenshot" border="0" alt="screenshot" src="http://blog.denniskempin.com/wp-content/uploads/2011/07/screenshot_thumb.png" width="700" height="271" /></a></p>
<p>But we were very optimistic that by iteratively introducing more accurate algorithms, the visualization can be done in real-time. We still had very big performance reserves, first of all because our target device had only 1/25th of the peak performance of more modern GPUs and due to the strong parallelism more complex calculations have a very small impact on the rendering speed. This approach is still further investigated by other people at the VR Group. </p>
<h3>GI Workshop VR/AR</h3>
<p>We presented this technique on the <a href="www.gi-workshop-vrar.org/">GI Workshop VR/AR</a> at the <a href="http://www.dlr.de/dlr/en/desktopdefault.aspx/tabid-10002/">DLR</a> in Braunschweig where we got great feedback from the German Virtual Reality Community.</p>
<p>Feel free to have a look at the paper: <a href="https://docs.google.com/viewer?a=v&amp;pid=explorer&amp;chrome=true&amp;srcid=0BzcW2jGrJ55LNmU4Yzc5MzUtM2M1Ny00OTkwLWEwMWEtODIzNWRlZTU3MmEw&amp;hl=en_US">Interactive Particle Tracing with Cumulative Blood Damage Computation for Ventricular Assist Devices</a></p>
<p>I have also put a lot of effort into the design of a good presentation. Bullet point free presentations are still pretty uncommon in Germany but we got great feedback for this. </p>
<div style="width: 425px" id="__ss_8611808"><strong style="margin: 12px 0px 4px; display: block"><a title="Talk GI Workshop VR/AR" href="http://www.slideshare.net/denniskempin/talk-gi-workshop-vrar">Talk GI Workshop VR/AR</a></strong><object id="__sse8611808" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=talkgiworkshop09-110716045147-phpapp02&amp;stripped_title=talk-gi-workshop-vrar&amp;userName=denniskempin" /><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><embed name="__sse8611808" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=talkgiworkshop09-110716045147-phpapp02&amp;stripped_title=talk-gi-workshop-vrar&amp;userName=denniskempin" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.denniskempin.com/2011/07/interactive-particle-tracing-for-ventricular-assist-devices/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Create your own Marketing WordPress Network</title>
		<link>http://blog.denniskempin.com/2010/11/create-your-own-marketing-wordpress-network/</link>
		<comments>http://blog.denniskempin.com/2010/11/create-your-own-marketing-wordpress-network/#comments</comments>
		<pubDate>Mon, 22 Nov 2010 07:50:13 +0000</pubDate>
		<dc:creator>Dennis</dc:creator>
				<category><![CDATA[Experiments]]></category>

		<guid isPermaLink="false">http://blog.denniskempin.com/2010/11/create-your-own-marketing-wordpress-network/</guid>
		<description><![CDATA[In the last days I have been experimenting with WordPress Network, to get them running for my marketing blogs. A WordPress Network allows you to host many blogs in one WordPress installation. So it is perfect when you have a lot of blogs to manage. Good thing is, you only need to install and configure [...]]]></description>
			<content:encoded><![CDATA[<p>In the last days I have been experimenting with WordPress Network, to get them running for my marketing blogs. A WordPress Network allows you to host many blogs in one WordPress installation. So it is perfect when you have a lot of blogs to manage.</p>
<p>Good thing is, you only need to install and configure your plugins once for the network, so you can setup a new blog within minutes.</p>
<p>So what are the requirements?</p>
<ul>
<li>File Caching – We will have many views but not much dynamics. So I want each page to be pre-cached automatically.</li>
<li>Fast Indexing – The faster I get indexed, the sooner I can rank</li>
<li>Spam Filter – Especially marketing blogs get a lot of spam by people looking for backlinks. I don’t want to care about those.</li>
<li>Domain Mapping – A new domain for each blog</li>
</ul>
<p>Of course we will need some additional plugins for Google Analytics, On-Page SEO, etc but they have to be configured for each blog separately.</p>
<h2>Setup a basic WordPress Network</h2>
<p>Okay, first we need a clean <a href="http://codex.wordpress.org/Installing_WordPress">wordpress installation</a>. To enable the blog network functionality we need to adjust the wp-config.php file and add the following line:</p>
<blockquote><p>define(&#8216;WP_ALLOW_MULTISITE&#8217;, true);</p></blockquote>
<p>After this you can log in into your backend and will find the Network page in the Tools menu. Use this to install your network and follow the instructions on the next page, as you need to make some changes to wp-config.php again, as well as to your .htaccess file.</p>
<p><a href="http://blog.denniskempin.com/wp-content/uploads/2010/11/image.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://blog.denniskempin.com/wp-content/uploads/2010/11/image_thumb.png" alt="image" width="490" height="229" border="0" /></a></p>
<p>&nbsp;</p>
<p><span id="more-232"></span>Please remark: Do <strong>NOT</strong> use the Sub-domains functionality as it will complicate things later. We will be using domain mapping anyway, so no one will see the difference.</p>
<p>When editing <strong>.htaccess</strong> please change the following: WordPress will ask you to edit (or create) the .htaccess file and put some contents in it. Before doing that Add # BEGIN WordPress and # END WordPress around it. So it will look like this:</p>
<blockquote><p># BEGIN WordPress<br />
RewriteEngine On<br />
RewriteBase /<br />
RewriteRule ^index\.php$ &#8211; [L]</p>
<p># uploaded files<br />
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]</p>
<p># add a trailing slash to /wp-admin<br />
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]</p>
<p>RewriteCond %{REQUEST_FILENAME} -f [OR]<br />
RewriteCond %{REQUEST_FILENAME} -d<br />
RewriteRule ^ &#8211; [L]<br />
RewriteRule  ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]<br />
RewriteRule  ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]<br />
RewriteRule . index.php [L]<br />
# END WordPress</p></blockquote>
<p>If you log in again you will now find the Super Admin Menu on the left. That’s it, your blog network.</p>
<h2>Create a test blog in your network</h2>
<p>That’s really easy. Go to <strong>Super Admin –&gt; Sites</strong>. There you can create a blog we can use for testing.</p>
<p><a href="http://blog.denniskempin.com/wp-content/uploads/2010/11/image1.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://blog.denniskempin.com/wp-content/uploads/2010/11/image_thumb1.png" alt="image" width="484" height="398" border="0" /></a></p>
<h2>Setup Domain Mapping</h2>
<p>All your new blogs will be in a sub directory on your network site. This is not just a bit ugly, but also bad for ranking. So we need to fetch the <a href="http://wordpress.org/extend/plugins/wordpress-mu-domain-mapping/">WordPress MU Domain Mapping</a> plugin. You cannot install it using the plugins screen in wordpress, you will have to do it by hand. There are two files you need to place</p>
<ul>
<li>Create the directory wp-content/mu-plugins</li>
<li>Put domain_mapping.php to wp-content/mu-plugins/</li>
<li>Put sunrise.php to wp-content/</li>
</ul>
<p><a href="http://blog.denniskempin.com/wp-content/uploads/2010/11/image2.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://blog.denniskempin.com/wp-content/uploads/2010/11/image_thumb2.png" alt="image" width="322" height="130" border="0" /></a></p>
<p>And add the following line to your wp-config.php</p>
<blockquote><p>define( &#8216;SUNRISE&#8217;, true );</p></blockquote>
<p>Now we can configure the domain mapping plugin:</p>
<p><a href="http://blog.denniskempin.com/wp-content/uploads/2010/11/image3.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://blog.denniskempin.com/wp-content/uploads/2010/11/image_thumb3.png" alt="image" width="487" height="342" border="0" /></a></p>
<p>That’s it.</p>
<h2>How to map a blog to a domain</h2>
<p>Easy. First you need to log into your blog. Either go to your blog, in my example <a href="http://network.denniskempin.com/test/">http://network.denniskempin.com/test/</a> and log in to the admin panel. Or use the faster way:</p>
<p>In your Super Admin –&gt; Sites menu you can click on Backend of each blog to get to the admin backend of each blog.</p>
<p>In Tools –&gt; Domain Mapping you can set the primary domain for your blog:</p>
<p><a href="http://blog.denniskempin.com/wp-content/uploads/2010/11/image4.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://blog.denniskempin.com/wp-content/uploads/2010/11/image_thumb4.png" alt="image" width="495" height="286" border="0" /></a></p>
<p>Remember that you have to set up the blog domain to point to the network domain. In Dreamhost this is called mirror, at other hosting companies it might be called alias.</p>
<h2>File Caching</h2>
<p>The Database at my hoster is really slow. And I don’t want people to wait for my websites especially not google. Since marketing blogs are usually not very dynamic we can use file caching. Each page of your blog is only created once and then stored to a file on the hard disk of the server.</p>
<p>Use the Plugins backend of your network to install “<strong>WP Super Cache”</strong>. Nice thing: You only need to configure it once and it will be used for all your blogs. Just select “Network Activate” instead of “Activate” in the plugins screen.</p>
<p>At Super Admin –&gt; WP Super Cache we will make some adjustments. Go to the Advanced Tab and set it up like this:</p>
<p><a href="http://blog.denniskempin.com/wp-content/uploads/2010/11/image5.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://blog.denniskempin.com/wp-content/uploads/2010/11/image_thumb5.png" alt="image" width="501" height="304" border="0" /></a></p>
<p>This will create a compressed cache and serve them without involving PHP which will make things really fast.</p>
<p>After clicking on &#8220;update status” you will see the warning “Rewrite rules must be updated”. Scroll down and hit “Update Mod_Rewrite Rules”.</p>
<p>One last thing. We will need a plugin for the plugin as we are using domain mapping. Enable it.</p>
<p><a href="http://blog.denniskempin.com/wp-content/uploads/2010/11/image6.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://blog.denniskempin.com/wp-content/uploads/2010/11/image_thumb6.png" alt="image" width="508" height="224" border="0" /></a></p>
<p>&nbsp;</p>
<h2>Fast indexing</h2>
<p>This means we need a sitemap. Sadly, there is no sitemap plugin at the moment that works totally fine with domain mapping. But we can try using the beta of the google xml sitemaps plugin. Grab it here:</p>
<p><a title="http://www.arnebrachhold.de/redir/sitemap-dl-beta/" href="http://www.arnebrachhold.de/redir/sitemap-dl-beta/">http://www.arnebrachhold.de/redir/sitemap-dl-beta/</a></p>
<p>Install it in your admin panel and activate it. It works out of the box for me, just “Network Activate” it. Test it by opening pointing your browser to <a href="http://yournetwork.com/sitemap.xml">http://yournetwork.com/sitemap.xml</a> and <a href="http://yourhostedblog.com/sitemap.xml">http://yourhostedblog.com/sitemap.xml</a>.</p>
<h2>Spam Filter</h2>
<p>Askimet is great, actually awesome. It requires a wordpress.com account to get an API key. After that you will barely notice any more spam on your blogs. By default you have to setup askimet for every single blog, but you can also add</p>
<blockquote><p>define(&#8216;WPCOM_API_KEY&#8217;,’your wordpress.com API key’);</p></blockquote>
<p>To your wp-config.php file so it will be working sitewide, so you can “Network Activate” this plugin.</p>
<h2>That’s it</h2>
<p>Well setup is a bit tricky sometimes, it took me a long time to find all those options for setting up the plugins for networks instead of single blogs. So I thought it is a good idea to share it. So what do we have?</p>
<p>We have a network of blogs on different domains, managed through one login into the backend, fast through caching, without spam and fast indexed by google using sitemaps.</p>
<p>What now? Well there are still some plugins that would be very useful. Like</p>
<p><a href="http://www.seologs.com/wordpress-duplicate-content-cure/">Duplicate Content Cure</a>, <a href="http://www.oratransplant.nl/uga/">Ultimate Google Analytics</a> and <a href="http://semperfiwebdesign.com/">All in One SEO Pack</a>. These plugins can all be installed and activated network wide. But of course you have to setup you Analytics ID and the All in One SEO options for each blog separately.</p>
<p>Any suggestions to this setup? Any plugins that would be useful? Please tell me if you find this useful.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.denniskempin.com/2010/11/create-your-own-marketing-wordpress-network/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instant Public Link for Dropbox</title>
		<link>http://blog.denniskempin.com/2010/10/instant-public-link-for-dropbox/</link>
		<comments>http://blog.denniskempin.com/2010/10/instant-public-link-for-dropbox/#comments</comments>
		<pubDate>Sun, 17 Oct 2010 21:37:21 +0000</pubDate>
		<dc:creator>Dennis</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://blog.denniskempin.com/2010/10/instant-public-link-for-dropbox/</guid>
		<description><![CDATA[I love dropbox! And I found it to be extremely useful to quickly share a file with someone I am chatting with. But still the process could be even easier. So I created a small, but useful tool. Drop a file to InstantLink and you will have a URL to that file in your clipboard. [...]]]></description>
			<content:encoded><![CDATA[<p>I love <a href="http://dropbox.com">dropbox</a>! And I found it to be extremely useful to quickly share a file with someone I am chatting with.</p>
<p>But still the process could be even easier. So I created a small, but useful tool.</p>
<p><strong>Drop a file to InstantLink and you will have a URL to that file in your clipboard. Ready to paste in a chat windows. </strong></p>
<p>That’s it.</p>
<h2>Features</h2>
<p>Well it’s a simple application. So don’t expect too much.</p>
<ul>
<li>Automatically Detects Dropbox Path.</li>
<li>Sorts files into Public/year/month folders. To keep some order.</li>
<li>Effortless setup. No config files editing or whatever.</li>
</ul>
<h2>Setup</h2>
<p>Just use this link to install it:</p>
<p><a title="http://dl.dropbox.com/u/346381/InstantLink/InstantLink.application" href="http://dl.dropbox.com/u/346381/InstantLink/InstantLink.application">http://dl.dropbox.com/u/346381/InstantLink/InstantLink.application</a></p>
<p>It will ask you to paste a some public link of yours to find your Dropbox ID. That’s all, you will find a shortcut to use on your desktop and in your send-to menu.</p>
<h2>Usage</h2>
<p>Well. Just drop files to InstantLink.</p>
<ul>
<li>Drop a single file: Uploads the file via Dropbox and puts the link to your clipboard.</li>
<li>Drop multiple files: Well, the same. You will get multiple links in your clipboard.</li>
<li>Rightclick any file and select SendTo-&gt;InstantLink will get you the same results.</li>
<li>Just run the tool without dropping a file: Will open the explorer in the current Public/Year/Month folder.</li>
</ul>
<p>That’s it. Have fun and leave some ideas suggestions in the comments!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.denniskempin.com/2010/10/instant-public-link-for-dropbox/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New Psycho-Cybernetics</title>
		<link>http://blog.denniskempin.com/2010/07/new-psycho-cybernetics/</link>
		<comments>http://blog.denniskempin.com/2010/07/new-psycho-cybernetics/#comments</comments>
		<pubDate>Sat, 31 Jul 2010 21:31:22 +0000</pubDate>
		<dc:creator>Dennis</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://blog.denniskempin.com/2010/07/new-psycho-cybernetics/</guid>
		<description><![CDATA[I started to listen to the audio book version of the New Psycho-Cybernetics. The description and reviews looked very promising, describing Psycho-Cybernetics as the grandfather of all self development techniques. Hearing the first 1 1/2 CDs (about 2 hours) I found myself more annoyed than inspired. Until now I did not hear not much more [...]]]></description>
			<content:encoded><![CDATA[<p>I started to listen to the audio book version of the New Psycho-Cybernetics. The description and reviews looked very promising, describing Psycho-Cybernetics as the grandfather of all self development techniques. Hearing the first 1 1/2 CDs (about 2 hours) I found myself more annoyed than inspired.</p>
<p>Until now I did not hear not much more than:</p>
<ul>
<li>Psycho-Cybernetics is the miracle that helped million of people </li>
<li>It is the base of absolutely every self-development technique </li>
<li>Whoever is successful is applying this, he maybe just does not know </li>
<li>At works without exception for everyone </li>
<li>Your self image controls who you are and who you become (the only hint what Psycho-Cybernetics actually is about) </li>
</ul>
<p>I love self development as well as life hacking, and yeah sometimes things are oversimplified or at least simplified models for the brain or our bodies are used to create simple and useful results. And yeah sometimes this even sounds a bit “esoteric”, but it is usually all backed up by scientific research and studies.</p>
<p>But seriously for me this book is one step too far into the “esoteric” direction. The book did not mention any scientific studies backing up the mentioned thesis, up to now there were only examples of people who used these techniques and that is, at least for me, not enough. Finding explanations that “sound nice” also does not do the trick for me.</p>
<p>The extreme and absolute formulation of the results of this book confirm this conception for me. There are no dead-simple solutions that work every-time, everywhere and for everyone. This sounds way too oversimplified for me, yet it is repeated over and over again. </p>
<p>Has anyone read this book? Am I wrong with my rating of this book from the first parts? For now I am not motivated to hear the book any further.. but please correct me if I am wrong. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.denniskempin.com/2010/07/new-psycho-cybernetics/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Dan Pink – Drive</title>
		<link>http://blog.denniskempin.com/2010/06/dan-pink-drive/</link>
		<comments>http://blog.denniskempin.com/2010/06/dan-pink-drive/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 17:03:15 +0000</pubDate>
		<dc:creator>Dennis</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://www.denniskempin.com/2010/06/dan-pink-drive/</guid>
		<description><![CDATA[“The Surprising Truth About What Motivates Us” Is actually not surprising to me at all. I have heard the first 1.5 hours of the audio book and find myself annoyed by the repetition of the same argument over and over again. Extrinsic motivation (mostly.. paying someone to do something) can have negative effect on motivation, [...]]]></description>
			<content:encoded><![CDATA[<p><img style="display: inline; margin-left: 0px; margin-right: 0px" align="right" src="http://ecx.images-amazon.com/images/I/418pHnJLHLL._SS500_.jpg" width="240" height="240" /></p>
<p><strong>“The Surprising Truth About What Motivates Us”</strong></p>
<p>Is actually not surprising to me at all. I have heard the first 1.5 hours of the audio book and find myself annoyed by the repetition of the same argument over and over again. Extrinsic motivation (mostly.. paying someone to do something) can have <strong>negative</strong> effect on motivation, performance and creativity. </p>
<p>Well this is something I experience day by day. I cannot force myself to do creative work just because I am paid for it, I rather perform best when I feel like doing so. When I am in a creative flow and you just can’t buy a creative flow. </p>
<p>Anyhow, as it seems this book is rather directed to business owners and managers who stick with the classic business models. Not to a student who spends lot of his time to work on projects he deeply enjoys. </p>
<p>Has anyone read this book? Are there any thrilling insights in the later parts of the book? I am definitely not motivated right now to read/hear any further ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.denniskempin.com/2010/06/dan-pink-drive/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>C# Style Properties in C++?</title>
		<link>http://blog.denniskempin.com/2010/06/c-style-properties-in-c/</link>
		<comments>http://blog.denniskempin.com/2010/06/c-style-properties-in-c/#comments</comments>
		<pubDate>Wed, 02 Jun 2010 10:52:10 +0000</pubDate>
		<dc:creator>Dennis</dc:creator>
				<category><![CDATA[Experiments]]></category>

		<guid isPermaLink="false">http://www.denniskempin.com/2010/06/c-style-properties-in-c/</guid>
		<description><![CDATA[I was in experimenting mood again. I got annoyed by writing the following code over and over again: class Test { private: int myVar; public: int GetMyVar() { return myVar; } } Sometimes additionally to that a Setter method which processes or checks the values. So how to make this more compact? With macro hacking! [...]]]></description>
			<content:encoded><![CDATA[<p>I was in experimenting mood again. I got annoyed by writing the following code over and over again:</p>
<pre class="brush: c++">class Test {
private:
	int myVar;
public:
	int GetMyVar() { return myVar; }
}</pre>
<p>Sometimes additionally to that a Setter method which processes or checks the values. </p>
<p>So how to make this more compact? With macro hacking! jippie! Yep macros are <em>bad</em>, but sometimes its nice to make some experiments, so here we go. </p>
<p><span id="more-135"></span></p>
<h2>Simple read only properties</h2>
<p>Well the most used case for me is: I want a property that can be read from the outside, but can only be written from “inside” the class. </p>
<p>So here we go: </p>
<pre class="brush: c++">class Test : EnableProperties&lt;test&gt; {
public:
	Property(ReadOnly, std::string) MyVar;
}</pre>
<p>Uuuh, magic macro hacking. So what can we do now with this variable? With the operator() we can set and get the value of this property, but for ease of use we can also use implicit conversion.</p>
<pre class="brush: c++">Test test;
test.MyVar(&quot;New String&quot;); // Access Error
std::string a = test.MyVar(); // Yep
std::string b = test.MyVar; // Fine too</pre>
<h2>Custom getter and setter</h2>
<p>Lets just say we want to do process the value of the property on each get. With even more macro and template hacking we get this:</p>
<pre class="brush: c++">class Test : EnableProperties&lt;test&gt; {
public:
	CustomProperty(Public, int) {
		Getter {
			return value * 42;
		}
	} MyVar;
}
Test test;
test.MyVar(10);
std::cout &lt;&lt; test.MyVar() &lt;&lt; std::endl; // 420</pre>
<p>I think this is a pretty funny experiment. There are still some issues left. For example: the custom getter and setter feature only works with VC. Still it is an very interesting concept and I think I will investigate it a little bit further. </p>
<h2>Code</h2>
<p>Want to see the strange macro hacking? Sure here you go :)</p>
<pre class="brush: c++; collapse: true;">template&lt;typename friendclass typename t,&gt; class ReadonlyProperty {
protected:
	typedef T ValueType;

	friend FriendClass;
	ValueType value;

	virtual void Set(const ValueType&amp; newValue) { value = newValue; }
	virtual const ValueType&amp; Get() { return value; }

public:
	inline void operator()(const ValueType&amp; newValue) { Set(newValue); }
	inline const ValueType&amp; operator()() { return Get(); }
	inline operator ValueType() { return Get(); }
};

template&lt;typename friendclass typename t,&gt; class PublicProperty {
protected:
	typedef T ValueType;

	friend FriendClass;
	ValueType value;

public:
	virtual void Set(const ValueType&amp; newValue) { value = newValue; }
	virtual const ValueType&amp; Get() { return value; }

	inline void operator()(const ValueType&amp; newValue) { Set(newValue); }
	inline const ValueType&amp; operator()() { return Get(); }
	inline operator ValueType() { return Get(); }
};

template&lt;typename t&gt; class EnableProperties {
protected:
	typedef T PropertyFriendClass;
};

#define Property(Access, type) class : public Access##Property&lt;type , PropertyFriendClass&gt; {}
#define CustomProperty(Access, type) class : public Access##Property&lt;type , PropertyFriendClass&gt;

#define Setter virtual void Set(const ValueType&amp; value)
#define Getter virtual const ValueType&amp; Get()</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.denniskempin.com/2010/06/c-style-properties-in-c/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss><!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->

