<?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>X-Developer</title>
	<atom:link href="http://philippmuenzel.de/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>http://philippmuenzel.de/wordpress</link>
	<description>Cross-platform development in C++, Flight Simulation</description>
	<lastBuildDate>Thu, 17 May 2012 21:55:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Getting rid of things that annoy me, part 1 of n</title>
		<link>http://philippmuenzel.de/wordpress/getting-rid-of-things-that-annoy-me/</link>
		<comments>http://philippmuenzel.de/wordpress/getting-rid-of-things-that-annoy-me/#comments</comments>
		<pubDate>Thu, 17 May 2012 21:43:49 +0000</pubDate>
		<dc:creator>philipp</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[car]]></category>
		<category><![CDATA[simplify your life]]></category>
		<category><![CDATA[tco]]></category>

		<guid isPermaLink="false">http://philippmuenzel.de/wordpress/?p=320</guid>
		<description><![CDATA[There are two kinds of computer users: "Closers" and "Tabbers". You can tell them apart by pressing Alt-Tab (Cmd-Tab on Mac) on their keyboard: Closers have only a very limited number of programs running in parallel, and if they need an application to accomplish subtask X, they start the program, do X, and quit it [...]]]></description>
			<content:encoded><![CDATA[<p>There are two kinds of computer users: "Closers" and "Tabbers". You can tell them apart by pressing Alt-Tab (Cmd-Tab on Mac) on their keyboard: Closers have only a very limited number of programs running in parallel, and if they need an application to accomplish subtask X, they start the program, do X, and quit it afterwards. Tabbers instead have a long list of running applications, and if they need to do X, they Alt-Tab to the program, do what needs to be done, and then tab back.</p>
<p><img src="http://www.howtogeek.com/wp-content/uploads/2009/10/image64.png" alt="Sample image of a "Tabber"" /> (Example of a tabber)</p>
<p>I'm the kind of person who closes programs running in the background. If you Cmd-Tab on my Mac, you usually see three programs: Finder, because thats what runs the Desktop, you can't close it, QtCreator, because that's the tool I work with and Chrome, because I've always 5-10 open tabs of documentation and reference manuals. </p>
<p>On Windows, I used to be a "systray-nazi". No one f*cked with my systray! If you were a program and you installed a "speed launcher" in my systray, you got nuked from my harddrive immediately.<br />
Today, even with 8 Gigabytes of RAM, I still close every process and service that I don't need right now, even if it needs only 640k.</p>
<p>And that's a principle that applies to my whole life, not just to my computer. I'm the kind of person who gets nervous when he owns too many things. Every thing I own is like a background process running in my brain, occupying 640k of memory to remember where I left it.<br />
Using a little kitchen sink psychology, I assume this comes from me losing a lot of things when I was a child. I was always scatterbrained, and every week I would forget something, lose my pencil case when changing classrooms, forget my phone card (no cell phones these days!), forget my lunchbox, lose the gym bag on the bus and forget the writing pad with my homework. The latter was particularly annoying, because I didn't take homework assignments too seriously anyway, so then I had ACTUALLY DONE my homework but forgot the goddamn pad or folder at home. I grew up getting more aware of the things I have to look after, and me coming home with my mother looking at me saying "where did you leave your X?" became more rare an event. </p>
<p><a href="http://www.youtube.com/watch?v=1ySI8yxZ97I" title="George Carlin on losing things" target="_blank"><img src="http://comedy-quotes.com/images/comedians/george-carlin-small.jpg" alt="George Carlin on losing things" />("You what?" I lost my yo-yo. "Well where did you have it last? "Eh! If I knew that... I'd still have my yo-yo.)</a></p>
<p>But this came at a considerable waste of computing power in my brain.<br />
Right now, I have kind of a list of all the things I own in my head, and I know where each of these items is. Each item on that list is like a background process, because it occupies a little bit of my brain. Perhaps 640k. And you know what I do with background processes, right?<br />
That's the reason why I hate this list becoming too long.<br />
So I try to not have too many things I don't really need.</p>
<ul>
Actually, there is exactly only one item that I really, really, really need. And thats the RSA-key for my repository server. I've stored that quadruply redundant on every harddrive and USB-pen that I have. If the whole building burnt down, leaving me with nothing but what I have in my pockets, all I need would be a computer with internet connection, and I could resume work. If and only if my apartment burns down at the same time my hoster goes out of service, I'd be in trouble. </ul>
<p>Why am I writing this stuff? Because I today decided to kill one of those brain's background processes of mine, and get rid of a thing that's been getting on my nerves for a long time. I decided to sell my car. Since I've moved to Frankfurt, this thing was parked for two months. Not moved an inch. I live 300 meters from the train station now. Yesterday I was forced to start my car and drive a few kilometers. The goddamn thing runs worse than a cement mixer, because the mass airflow meter is fried. I have no idea why, it worked okay last time I checked. The spare part isn't expensive. Replacing it is so easy, even I could do it. But I don't want to dedicate a single thought anymore to this thing. So I came back home today, parked the car, went up to my apartment, switched on the printer, printed two "FOR SALE" signs, went down to the car and put them in the rear windows. </p>
<p>I however did bother a few minutes to browse the usual used car websites to look up an adequate price. And I realized that this thing has cost me more than 4000€ since I bought it, only for owning it, not driving one kilometer. Not including tax. Not including insurance. Only loss of value. And by the way, gas is currently $8.05/gal (€1.64/ltr) in Germany.<br />
What few people realize, is that the TCO of a car is obscene. And loss of value is the biggest factor. All people talk about this for computers or smartphones, but with cars it's much worse. A car is even worse than a Windows PC in this respect.</p>
<p>Here's the deal: For the money I save by not having a car, I could easily afford a "Bahn Card 100". That's a yearly subscription for the german railroad system. You pay about 3800€ per year and then you don't have to buy a train ticket, you just jump on any train and go wherever you want. Many people think 3800€ is expensive. It's not. It's cheaper than owning a car.</p>
<p>And I don't care about broken mass airflow meters anymore. I don't care about having to change tires. I don't care about having to find a parking spot (a REAL problem in German cities!). I don't care about gas prizes going up and down.<br />
This frees up so much resources in my brain, it's incredible.<br />
Plus, I can read stuff while going somewhere. Try that with a car <img src='http://philippmuenzel.de/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
<p>Next up on the list of things to ged rid of (2 of n): my new Dell Notebook. It's fast, it's shiny, and I bloody hate it. Because Dell doesn't know how to build a good notebook anymore, but that's for a different blogpost. My old Dell Latitude D620, that's a great notebook. I dropped it to the floor a few times already. I spilled tea on it. It has so many scratches and dents, it looks awful. And it's too slow for X-Plane 10. But I love it. Because: It. Simply. Works.</p>


	<a rel='nofollow'  href='http://delicious.com/post?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fgetting-rid-of-things-that-annoy-me%2F&amp;title=Getting%20rid%20of%20things%20that%20annoy%20me%2C%20part%201%20of%20n&amp;notes=' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/delicious.png' title='del.icio.us' alt='del.icio.us' class='' /></a>
	<a rel='nofollow'  href='http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fgetting-rid-of-things-that-annoy-me%2F&amp;title=Getting%20rid%20of%20things%20that%20annoy%20me%2C%20part%201%20of%20n&amp;bodytext=' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/digg.png' title='Digg' alt='Digg' class='' /></a>
	<a rel='nofollow'  href='mailto:?subject=Getting%20rid%20of%20things%20that%20annoy%20me%2C%20part%201%20of%20n&amp;body=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fgetting-rid-of-things-that-annoy-me%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/email_link.png' title='email' alt='email' class='' /></a>
	<a rel='nofollow'  href='http://www.facebook.com/share.php?u=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fgetting-rid-of-things-that-annoy-me%2F&amp;t=Getting%20rid%20of%20things%20that%20annoy%20me%2C%20part%201%20of%20n' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/facebook.png' title='Facebook' alt='Facebook' class='' /></a>
	<a rel='nofollow'  href='http://www.google.com/reader/link?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fgetting-rid-of-things-that-annoy-me%2F&amp;title=Getting%20rid%20of%20things%20that%20annoy%20me%2C%20part%201%20of%20n&amp;srcURL=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fgetting-rid-of-things-that-annoy-me%2F&amp;srcTitle=X-Developer+Cross-platform+development+in+C%2B%2B%2C+Flight+Simulation' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/googlebuzz.png' title='Google Buzz' alt='Google Buzz' class='' /></a>
	<a rel='nofollow'  href='http://identi.ca/notice/new?status_textarea=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fgetting-rid-of-things-that-annoy-me%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/identica.png' title='Identi.ca' alt='Identi.ca' class='' /></a>
	<a rel='nofollow'  href='http://www.mister-wong.com/addurl/?bm_url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fgetting-rid-of-things-that-annoy-me%2F&amp;bm_description=Getting%20rid%20of%20things%20that%20annoy%20me%2C%20part%201%20of%20n&amp;plugin=soc' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/misterwong.png' title='MisterWong' alt='MisterWong' class='' /></a>
	<a rel='nofollow'  href='http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fgetting-rid-of-things-that-annoy-me%2F&amp;t=Getting%20rid%20of%20things%20that%20annoy%20me%2C%20part%201%20of%20n' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/myspace.png' title='MySpace' alt='MySpace' class='' /></a>
	<a rel='nofollow'  href='http://promote.orkut.com/preview?nt=orkut.com&amp;du=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fgetting-rid-of-things-that-annoy-me%2F&amp;tt=Getting%20rid%20of%20things%20that%20annoy%20me%2C%20part%201%20of%20n' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/orkut.png' title='Orkut' alt='Orkut' class='' /></a>
	<a rel='nofollow'  href='http://www.printfriendly.com/print?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fgetting-rid-of-things-that-annoy-me%2F&amp;partner=sociable' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/printfriendly.png' title='Print' alt='Print' class='' /></a>
	<a rel='nofollow'  href='http://reddit.com/submit?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fgetting-rid-of-things-that-annoy-me%2F&amp;title=Getting%20rid%20of%20things%20that%20annoy%20me%2C%20part%201%20of%20n' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/reddit.png' title='Reddit' alt='Reddit' class='' /></a>
	<a rel='nofollow'  href='http://philippmuenzel.de/wordpress/feed/' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/rss.png' title='RSS' alt='RSS' class='' /></a>
	<a rel='nofollow'  href='http://slashdot.org/bookmark.pl?title=Getting%20rid%20of%20things%20that%20annoy%20me%2C%20part%201%20of%20n&amp;url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fgetting-rid-of-things-that-annoy-me%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/slashdot.png' title='Slashdot' alt='Slashdot' class='' /></a>
	<a rel='nofollow'  href='http://www.stumbleupon.com/submit?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fgetting-rid-of-things-that-annoy-me%2F&amp;title=Getting%20rid%20of%20things%20that%20annoy%20me%2C%20part%201%20of%20n' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/stumbleupon.png' title='StumbleUpon' alt='StumbleUpon' class='' /></a>
	<a rel='nofollow'  href='http://technorati.com/faves?add=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fgetting-rid-of-things-that-annoy-me%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/technorati.png' title='Technorati' alt='Technorati' class='' /></a>
	<a rel='nofollow'  href='http://twitter.com/home?status=Getting%20rid%20of%20things%20that%20annoy%20me%2C%20part%201%20of%20n%20-%20http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fgetting-rid-of-things-that-annoy-me%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/twitter.png' title='Twitter' alt='Twitter' class='' /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://philippmuenzel.de/wordpress/getting-rid-of-things-that-annoy-me/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Compile-time checked to not fly a pretzel</title>
		<link>http://philippmuenzel.de/wordpress/compile-time-checked-to-not-fly-a-pretzel/</link>
		<comments>http://philippmuenzel.de/wordpress/compile-time-checked-to-not-fly-a-pretzel/#comments</comments>
		<pubDate>Wed, 21 Mar 2012 14:34:37 +0000</pubDate>
		<dc:creator>philipp</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[X-Plane Plugin Development]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[CRJ]]></category>

		<guid isPermaLink="false">http://philippmuenzel.de/wordpress/?p=308</guid>
		<description><![CDATA[The CRJ 1.4.5 update is uploading to the publishers now, and you will see it on your machines this week. The biggest advance is what I call the no-more-pretzels-technology. The CRJ was notorious for doing awkward things when trying to enter a holding pattern. Entering a holding in what was supposed to be a parallel [...]]]></description>
			<content:encoded><![CDATA[<p>The CRJ 1.4.5 update is uploading to the publishers now, and you will see it on your machines this week.</p>
<p>The biggest advance is what I call the no-more-pretzels-technology. The CRJ was notorious for doing awkward things when trying to enter a holding pattern. Entering a holding in what was supposed to be a parallel entry looked more like flying a pretzel. </p>
<p>If you are not interested in software development, you can stop reading here. Just believe me it works great now. If you want to know why, read on.</p>
<p>How does no-more-pretzels work?<br />
It is all about treating object-oriented design as type-design. Just like Scott Meyers says in <a href="http://www.amazon.de/Effective-Specific-Addison-Wesley-Professional-Computing/dp/0321334876">Effective C++</a> (i take it for granted you all have a copy of this book besides your bed. If not, buy it now!) you're not doing object-oriented design right unless you treat class design as type design. </p>
<p>The key to get the holdings right was to solve the confusion I was having about the four types of "course" there are:</p>
<ul>
<li>True Track</li>
<li>Magnetic Track</li>
<li>True Heading</li>
<li>Magnetic Heading</li>
</ul>
<p>If you are passing around courses as numbers (floats), you are in the constant state of wondering "wait, is this magnetic? And what about wind here anyway? Is the wind direction magnetic or true? Can I add a correction with regard to magnetic wind on this true course?".<br />
Believe me, you will screw that big times. My git log shows I touched the holding and holding entry code a gazillion times correcting such problems.</p>
<p>Now types to the rescue: A true track is not a float! A true track is a type! And a true course is a different type!</p>
<p>So here's how it works: You can't compare a true track to a magnetic heading. Because there is no operator for that. You can't add a magnetic wind correction on a true heading. No operator for that. </p>
<p>Compare this code:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">float</span> crs <span style="color: #000080;">=</span> <span style="color: #0000dd;">315</span>.<span style="color: #007788;">f</span><span style="color: #008080;">;</span> <span style="color: #666666;">// is this 315 true or magnetic ???</span>
crs <span style="color: #000040;">+</span><span style="color: #000080;">=</span> mag_var<span style="color: #008080;">;</span> <span style="color: #666666;">// did we just correct from true to mag or the other way?</span>
crs <span style="color: #000040;">+</span><span style="color: #000080;">=</span> wca<span style="color: #008080;">;</span> <span style="color: #666666;">// did we just convert track to heading or heading to track???</span></pre></div></div>

<p>with this code:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #666666;">// MagenticTrack holding_inbd = 315._degm;  </span>
<span style="color: #ff0000; font-style: italic;">/* You can do this if your compiler supports C++11 user-defined 
literals, which for now only a gcc 4.7 pre-release does */</span>
MagenticTrack holding_inbd <span style="color: #000080;">=</span> MagneticTrack<span style="color: #008080;">::</span><span style="color: #007788;">fromDegrees</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">315</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> 
WindCorrection wca <span style="color: #000080;">=</span> WindCorrection<span style="color: #008080;">::</span><span style="color: #007788;">fromTrackAndWind</span><span style="color: #008000;">&#40;</span>holding_inbd, 
                                                      wind,
                                                      groundspeed<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #666666;">// operator+ overloading ftw!</span>
MagneticHeading crs_to_steer <span style="color: #000080;">=</span> holding_inbd <span style="color: #000040;">+</span> wca<span style="color: #008080;">;</span></pre></div></div>

<p>More verbose, certainly, but compile-time checked to make sense.</p>
<p>Compile-time checked to not fly pretzels. </p>


	<a rel='nofollow'  href='http://delicious.com/post?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fcompile-time-checked-to-not-fly-a-pretzel%2F&amp;title=Compile-time%20checked%20to%20not%20fly%20a%20pretzel&amp;notes=' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/delicious.png' title='del.icio.us' alt='del.icio.us' class='' /></a>
	<a rel='nofollow'  href='http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fcompile-time-checked-to-not-fly-a-pretzel%2F&amp;title=Compile-time%20checked%20to%20not%20fly%20a%20pretzel&amp;bodytext=' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/digg.png' title='Digg' alt='Digg' class='' /></a>
	<a rel='nofollow'  href='mailto:?subject=Compile-time%20checked%20to%20not%20fly%20a%20pretzel&amp;body=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fcompile-time-checked-to-not-fly-a-pretzel%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/email_link.png' title='email' alt='email' class='' /></a>
	<a rel='nofollow'  href='http://www.facebook.com/share.php?u=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fcompile-time-checked-to-not-fly-a-pretzel%2F&amp;t=Compile-time%20checked%20to%20not%20fly%20a%20pretzel' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/facebook.png' title='Facebook' alt='Facebook' class='' /></a>
	<a rel='nofollow'  href='http://www.google.com/reader/link?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fcompile-time-checked-to-not-fly-a-pretzel%2F&amp;title=Compile-time%20checked%20to%20not%20fly%20a%20pretzel&amp;srcURL=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fcompile-time-checked-to-not-fly-a-pretzel%2F&amp;srcTitle=X-Developer+Cross-platform+development+in+C%2B%2B%2C+Flight+Simulation' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/googlebuzz.png' title='Google Buzz' alt='Google Buzz' class='' /></a>
	<a rel='nofollow'  href='http://identi.ca/notice/new?status_textarea=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fcompile-time-checked-to-not-fly-a-pretzel%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/identica.png' title='Identi.ca' alt='Identi.ca' class='' /></a>
	<a rel='nofollow'  href='http://www.mister-wong.com/addurl/?bm_url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fcompile-time-checked-to-not-fly-a-pretzel%2F&amp;bm_description=Compile-time%20checked%20to%20not%20fly%20a%20pretzel&amp;plugin=soc' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/misterwong.png' title='MisterWong' alt='MisterWong' class='' /></a>
	<a rel='nofollow'  href='http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fcompile-time-checked-to-not-fly-a-pretzel%2F&amp;t=Compile-time%20checked%20to%20not%20fly%20a%20pretzel' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/myspace.png' title='MySpace' alt='MySpace' class='' /></a>
	<a rel='nofollow'  href='http://promote.orkut.com/preview?nt=orkut.com&amp;du=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fcompile-time-checked-to-not-fly-a-pretzel%2F&amp;tt=Compile-time%20checked%20to%20not%20fly%20a%20pretzel' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/orkut.png' title='Orkut' alt='Orkut' class='' /></a>
	<a rel='nofollow'  href='http://www.printfriendly.com/print?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fcompile-time-checked-to-not-fly-a-pretzel%2F&amp;partner=sociable' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/printfriendly.png' title='Print' alt='Print' class='' /></a>
	<a rel='nofollow'  href='http://reddit.com/submit?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fcompile-time-checked-to-not-fly-a-pretzel%2F&amp;title=Compile-time%20checked%20to%20not%20fly%20a%20pretzel' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/reddit.png' title='Reddit' alt='Reddit' class='' /></a>
	<a rel='nofollow'  href='http://philippmuenzel.de/wordpress/feed/' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/rss.png' title='RSS' alt='RSS' class='' /></a>
	<a rel='nofollow'  href='http://slashdot.org/bookmark.pl?title=Compile-time%20checked%20to%20not%20fly%20a%20pretzel&amp;url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fcompile-time-checked-to-not-fly-a-pretzel%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/slashdot.png' title='Slashdot' alt='Slashdot' class='' /></a>
	<a rel='nofollow'  href='http://www.stumbleupon.com/submit?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fcompile-time-checked-to-not-fly-a-pretzel%2F&amp;title=Compile-time%20checked%20to%20not%20fly%20a%20pretzel' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/stumbleupon.png' title='StumbleUpon' alt='StumbleUpon' class='' /></a>
	<a rel='nofollow'  href='http://technorati.com/faves?add=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fcompile-time-checked-to-not-fly-a-pretzel%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/technorati.png' title='Technorati' alt='Technorati' class='' /></a>
	<a rel='nofollow'  href='http://twitter.com/home?status=Compile-time%20checked%20to%20not%20fly%20a%20pretzel%20-%20http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fcompile-time-checked-to-not-fly-a-pretzel%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/twitter.png' title='Twitter' alt='Twitter' class='' /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://philippmuenzel.de/wordpress/compile-time-checked-to-not-fly-a-pretzel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IPv6 &#8230; isn&#8217;t!</title>
		<link>http://philippmuenzel.de/wordpress/ipv6-isnt/</link>
		<comments>http://philippmuenzel.de/wordpress/ipv6-isnt/#comments</comments>
		<pubDate>Thu, 01 Dec 2011 21:00:30 +0000</pubDate>
		<dc:creator>philipp</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[X-Plane Plugin Development]]></category>
		<category><![CDATA[CRJ]]></category>
		<category><![CDATA[cross-platform]]></category>
		<category><![CDATA[ipv4]]></category>
		<category><![CDATA[ipv6]]></category>
		<category><![CDATA[networking]]></category>

		<guid isPermaLink="false">http://philippmuenzel.de/wordpress/?p=301</guid>
		<description><![CDATA[Yesterday we shipped the 1.3 update for the CRJ. It included the much-awaited remote CDU functionality, which is basically a web server running in the plugin, serving the CDU screen in HTML format via Ajax. The webserver in the plugin is a very basic HTTP server built with boost.asio, an incredibly powerful cross-platform asynchronous network [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday we shipped the 1.3 update for the CRJ. It included the much-awaited remote CDU functionality, which is basically a web server running in the plugin, serving the CDU screen in HTML format via Ajax.<br />
The webserver in the plugin is a very basic HTTP server built with <a href="http://www.boost.org/doc/libs/1_48_0/doc/html/boost_asio.html">boost.asio</a>, an incredibly powerful cross-platform asynchronous network library.</p>
<p>Thinking progressive as I always do, I of course built the webserver with IPv6 support, and configured it to always start in dual-stack mode, that means it serves the CDU both via IPv4 and IPv6.<br />
I thought I could relax on that basis, and not touch this code again until <a href="http://xkcd.com/865/">the IPv6 address space is full</a>.</p>
<p>I was so wrong!<br />
Reports from customers kept coming in, that they couldn't start the CRJ any more. A very helpful customer showed me a gdb stacktrace of what was wrong. Guess what: it couldn't open a listening socket on 0::0, the "any" IP address in IPv6.<br />
No, this guy was not using Windows 98. He was using the latest and greatest Ubuntu Linux. SRSLY, WTF?! It is 2011 and Ubuntu 11.10 has IPv6 support disabled by default?<br />
Next customer with this problem was using Windows XP. Still the most popular MS OS these days. Guess what, no IPv6 enabled by default! </p>
<p>After instructing those guys how to enable IPv6 on their machines, I coded a patch for the server, to fallback to IPv4 only when dual-stack is unavailable. This is released as the 1.3.1 hotfix now.</p>
<p>I wonder how this planet is going to make the transition to IPv6 any time soon, when about 25% of my customers just can't use it without browsing through cryptic knowledgebase articles...</p>


	<a rel='nofollow'  href='http://delicious.com/post?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fipv6-isnt%2F&amp;title=IPv6%20...%20isn%27t%21&amp;notes=' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/delicious.png' title='del.icio.us' alt='del.icio.us' class='' /></a>
	<a rel='nofollow'  href='http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fipv6-isnt%2F&amp;title=IPv6%20...%20isn%27t%21&amp;bodytext=' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/digg.png' title='Digg' alt='Digg' class='' /></a>
	<a rel='nofollow'  href='mailto:?subject=IPv6%20...%20isn%27t%21&amp;body=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fipv6-isnt%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/email_link.png' title='email' alt='email' class='' /></a>
	<a rel='nofollow'  href='http://www.facebook.com/share.php?u=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fipv6-isnt%2F&amp;t=IPv6%20...%20isn%27t%21' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/facebook.png' title='Facebook' alt='Facebook' class='' /></a>
	<a rel='nofollow'  href='http://www.google.com/reader/link?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fipv6-isnt%2F&amp;title=IPv6%20...%20isn%27t%21&amp;srcURL=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fipv6-isnt%2F&amp;srcTitle=X-Developer+Cross-platform+development+in+C%2B%2B%2C+Flight+Simulation' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/googlebuzz.png' title='Google Buzz' alt='Google Buzz' class='' /></a>
	<a rel='nofollow'  href='http://identi.ca/notice/new?status_textarea=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fipv6-isnt%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/identica.png' title='Identi.ca' alt='Identi.ca' class='' /></a>
	<a rel='nofollow'  href='http://www.mister-wong.com/addurl/?bm_url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fipv6-isnt%2F&amp;bm_description=IPv6%20...%20isn%27t%21&amp;plugin=soc' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/misterwong.png' title='MisterWong' alt='MisterWong' class='' /></a>
	<a rel='nofollow'  href='http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fipv6-isnt%2F&amp;t=IPv6%20...%20isn%27t%21' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/myspace.png' title='MySpace' alt='MySpace' class='' /></a>
	<a rel='nofollow'  href='http://promote.orkut.com/preview?nt=orkut.com&amp;du=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fipv6-isnt%2F&amp;tt=IPv6%20...%20isn%27t%21' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/orkut.png' title='Orkut' alt='Orkut' class='' /></a>
	<a rel='nofollow'  href='http://www.printfriendly.com/print?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fipv6-isnt%2F&amp;partner=sociable' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/printfriendly.png' title='Print' alt='Print' class='' /></a>
	<a rel='nofollow'  href='http://reddit.com/submit?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fipv6-isnt%2F&amp;title=IPv6%20...%20isn%27t%21' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/reddit.png' title='Reddit' alt='Reddit' class='' /></a>
	<a rel='nofollow'  href='http://philippmuenzel.de/wordpress/feed/' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/rss.png' title='RSS' alt='RSS' class='' /></a>
	<a rel='nofollow'  href='http://slashdot.org/bookmark.pl?title=IPv6%20...%20isn%27t%21&amp;url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fipv6-isnt%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/slashdot.png' title='Slashdot' alt='Slashdot' class='' /></a>
	<a rel='nofollow'  href='http://www.stumbleupon.com/submit?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fipv6-isnt%2F&amp;title=IPv6%20...%20isn%27t%21' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/stumbleupon.png' title='StumbleUpon' alt='StumbleUpon' class='' /></a>
	<a rel='nofollow'  href='http://technorati.com/faves?add=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fipv6-isnt%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/technorati.png' title='Technorati' alt='Technorati' class='' /></a>
	<a rel='nofollow'  href='http://twitter.com/home?status=IPv6%20...%20isn%27t%21%20-%20http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fipv6-isnt%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/twitter.png' title='Twitter' alt='Twitter' class='' /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://philippmuenzel.de/wordpress/ipv6-isnt/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Fun with clang or: How to build Qt 4.8 with clang 3 without going insane</title>
		<link>http://philippmuenzel.de/wordpress/fun-with-clang-or-how-to-build-qt-4-8-with-clang-3-without-going-insane/</link>
		<comments>http://philippmuenzel.de/wordpress/fun-with-clang-or-how-to-build-qt-4-8-with-clang-3-without-going-insane/#comments</comments>
		<pubDate>Wed, 07 Sep 2011 15:37:12 +0000</pubDate>
		<dc:creator>philipp</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[clang]]></category>
		<category><![CDATA[gcc]]></category>

		<guid isPermaLink="false">http://philippmuenzel.de/wordpress/?p=285</guid>
		<description><![CDATA[Given that XCode 4 on Mac ships with the the clang frontend for LLVM now, I wanted to give this new compiler a try and see if it can replace gcc for me. To compile the CRJ plugin, I need Qt of course, and given this entry in the Qt blogs I thought it would be [...]]]></description>
			<content:encoded><![CDATA[<p>Given that XCode 4 on Mac ships with the the clang frontend for LLVM now, I wanted to give this new compiler a try and see if it can replace gcc for me.</p>
<p>To compile the CRJ plugin, I need Qt of course, and given <a href="http://labs.qt.nokia.com/2010/10/29/compiling-qt-with-clang/">this entry in the Qt blogs</a> I thought it would be fairly easy to get this to work.</p>
<p>I was wrong.</p>
<p>First try: I checked out the Qt 4.8 branch from gitorious, and configured with <span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">-platform unsupported/macx-clang</span> but I soon ran into a compile error complaining about an undeclared identifier "SetRect".</p>
<p>Second try: I checked out the specific git revision mentioned in the blog post, and re-configured. Build stops with the same error.</p>
<p>Thrid try: Given that the most recent clang is the 3.0 branch and that Apple ships 2.1, I decided to get myself a more recent clang. I checked out the llvm sources via svn, then the clang sources in the appropriate subdirectory, configured for a release-optimzed build (to boldly go...) and make'd. Some 10 or 20 minutes later I had a clang 3.0. I edited the mkspecs/common/clang.conf to point to my freshly compiled clang in /usr/local/bin and reconfigured Qt (I checked out master/HEAD before).  Now the built took longer before it stopped, this time everything of QtCore compiled, but when linking, I got an "undefined symbol for architecture i386: ___eprintf". Oh well.</p>
<p>Fourth try: Google pointed me to <a href="http://comments.gmane.org/gmane.comp.compilers.llvm.devel/40132">this thread</a> which indicated I must built the compiler runtime also. So I did another svn checkout (compiler-rt into llvm/projects/), make clean'd, re-configured and built llvm/clang/compiler-rt again. The built aborted mocking about some missing headers for ARM.</p>
<p>Fifth try: I reconfigured llvm with --enable-architecture=x86 instead of the default --enable-architecture=all, which would built all kinds of backend. The next built took somewhat longer and perhaps 30 minutes later I was ready to try again: with the freshly installed clang I went ahead to compile Qt again. This time it actually linked QtCore, but when compiling QtGui it stopped again with a compiler error:</p>
<pre>src/gui/kernel/qt_cocoa_helpers_mac_p.h:218:10: error:
cannot initialize return object of type 'NSString *'
with an rvalue of type 'const NSString *'</pre>
<p>Apparently, clang doesn't like Cocoa.</p>
<p>Sixth try: I make confclean'd and re-configured Qt to build with -carbon. Unfortunately, the next make stopped at exactly the same location, at the Cocoa-helpers. Apparently this header is pulled in every time regardless whether we actually use Cocoa or not.</p>
<p>At this point, I decided to give up on OSX and try my luck on Linux.</p>
<p>I svn co'd llvm, clang and compiler-rt to my Suse, configured for optimzed built and started make. Short time after that *KABOOOM!*. No, not a compile error. GCC crashed. My compiler trapped during compiling. Seriously, WTF? I was first confused by the print output of GCC, that referred to a source file that I wasn't compiling at all, until it occurred to me that the indicated source was a source of GCC, a GCC function that crashed.</p>
<p>Oh the humanity! I went to the #clang channel on irc.freenode.net and luckily some helpful soul indicated what I should do. GCC would break regularly during optimized clang compiles. The way to go would be to build clang with clang</p>
<ol>
<li>First, build clang in debug mode without optimizations with gcc</li>
<li>Then, use the un-optimized clang to build an optimized clang</li>
</ol>
<p>Luckicly, this guy was spot on. I had encountered <a href="https://bugs.gentoo.org/show_bug.cgi?id=PR43653">this error </a>that prevents GCC 4.5.0 to build clang with -ftree-vectorize. So the non-optimized built succeeded, and then I was able to bootstrap the optimized clang from it.</p>
<p>I checked out Qt master again and configured with -platform unsupported/linux-clang. Build was uneventful, and my minimal testing-Qt (without webkit, Javascript, QtScript, QDeclarative, etc...) was ready within some 30 or 45 minutes.</p>
<p>Configuring Qt-Creator 2.3 to recognize clang as compiler and display its warnings was straightforward.</p>
<p>Now I took a deep breath and compiled my airnav library on <tt>-Wall</tt>, which is a lot more pedantic than the <tt>-Wall</tt> of gcc. And bingo!!<br />
The <tt>-Wall -Wextra</tt> compile however showed some minor warnings that I've never seen with gcc - it complained about an explicit template instantiation outside the namespace of the template. This was fixed changing two lines of code, and after that I got it through <tt>-Werror -Wall -Wextra</tt>. W00t!</p>
<p>Lessons learned:</p>
<ul>
<li>clang is not yet ready to be used on a regular day-to-day basis and still requires lots of fiddling</li>
<li>Qt's codebase is relatively clean, as it compiles with clang with relatively few warnings</li>
<li>the Cocoa headers of the 10.7 SDK however are not</li>
<li>It is great to have yet another reference compiler to check for code-cleanliness</li>
</ul>
<p>So I reached at least one of my goals: I have another reference compiler I can test my code against: I regularly compile my whole codebase with Visual C++ 10 and gcc 4. Now I have another testing point that reveals more potential issues (portability, unsafe assumptions).</p>
<p>I won't ship clang-compiled plugins to end-users soon, but I will definitely use clang-build plugins myself now for testing purposes.</p>


	<a rel='nofollow'  href='http://delicious.com/post?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Ffun-with-clang-or-how-to-build-qt-4-8-with-clang-3-without-going-insane%2F&amp;title=Fun%20with%20clang%20or%3A%20How%20to%20build%20Qt%204.8%20with%20clang%203%20without%20going%20insane&amp;notes=' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/delicious.png' title='del.icio.us' alt='del.icio.us' class='' /></a>
	<a rel='nofollow'  href='http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Ffun-with-clang-or-how-to-build-qt-4-8-with-clang-3-without-going-insane%2F&amp;title=Fun%20with%20clang%20or%3A%20How%20to%20build%20Qt%204.8%20with%20clang%203%20without%20going%20insane&amp;bodytext=' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/digg.png' title='Digg' alt='Digg' class='' /></a>
	<a rel='nofollow'  href='mailto:?subject=Fun%20with%20clang%20or%3A%20How%20to%20build%20Qt%204.8%20with%20clang%203%20without%20going%20insane&amp;body=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Ffun-with-clang-or-how-to-build-qt-4-8-with-clang-3-without-going-insane%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/email_link.png' title='email' alt='email' class='' /></a>
	<a rel='nofollow'  href='http://www.facebook.com/share.php?u=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Ffun-with-clang-or-how-to-build-qt-4-8-with-clang-3-without-going-insane%2F&amp;t=Fun%20with%20clang%20or%3A%20How%20to%20build%20Qt%204.8%20with%20clang%203%20without%20going%20insane' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/facebook.png' title='Facebook' alt='Facebook' class='' /></a>
	<a rel='nofollow'  href='http://www.google.com/reader/link?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Ffun-with-clang-or-how-to-build-qt-4-8-with-clang-3-without-going-insane%2F&amp;title=Fun%20with%20clang%20or%3A%20How%20to%20build%20Qt%204.8%20with%20clang%203%20without%20going%20insane&amp;srcURL=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Ffun-with-clang-or-how-to-build-qt-4-8-with-clang-3-without-going-insane%2F&amp;srcTitle=X-Developer+Cross-platform+development+in+C%2B%2B%2C+Flight+Simulation' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/googlebuzz.png' title='Google Buzz' alt='Google Buzz' class='' /></a>
	<a rel='nofollow'  href='http://identi.ca/notice/new?status_textarea=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Ffun-with-clang-or-how-to-build-qt-4-8-with-clang-3-without-going-insane%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/identica.png' title='Identi.ca' alt='Identi.ca' class='' /></a>
	<a rel='nofollow'  href='http://www.mister-wong.com/addurl/?bm_url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Ffun-with-clang-or-how-to-build-qt-4-8-with-clang-3-without-going-insane%2F&amp;bm_description=Fun%20with%20clang%20or%3A%20How%20to%20build%20Qt%204.8%20with%20clang%203%20without%20going%20insane&amp;plugin=soc' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/misterwong.png' title='MisterWong' alt='MisterWong' class='' /></a>
	<a rel='nofollow'  href='http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Ffun-with-clang-or-how-to-build-qt-4-8-with-clang-3-without-going-insane%2F&amp;t=Fun%20with%20clang%20or%3A%20How%20to%20build%20Qt%204.8%20with%20clang%203%20without%20going%20insane' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/myspace.png' title='MySpace' alt='MySpace' class='' /></a>
	<a rel='nofollow'  href='http://promote.orkut.com/preview?nt=orkut.com&amp;du=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Ffun-with-clang-or-how-to-build-qt-4-8-with-clang-3-without-going-insane%2F&amp;tt=Fun%20with%20clang%20or%3A%20How%20to%20build%20Qt%204.8%20with%20clang%203%20without%20going%20insane' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/orkut.png' title='Orkut' alt='Orkut' class='' /></a>
	<a rel='nofollow'  href='http://www.printfriendly.com/print?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Ffun-with-clang-or-how-to-build-qt-4-8-with-clang-3-without-going-insane%2F&amp;partner=sociable' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/printfriendly.png' title='Print' alt='Print' class='' /></a>
	<a rel='nofollow'  href='http://reddit.com/submit?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Ffun-with-clang-or-how-to-build-qt-4-8-with-clang-3-without-going-insane%2F&amp;title=Fun%20with%20clang%20or%3A%20How%20to%20build%20Qt%204.8%20with%20clang%203%20without%20going%20insane' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/reddit.png' title='Reddit' alt='Reddit' class='' /></a>
	<a rel='nofollow'  href='http://philippmuenzel.de/wordpress/feed/' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/rss.png' title='RSS' alt='RSS' class='' /></a>
	<a rel='nofollow'  href='http://slashdot.org/bookmark.pl?title=Fun%20with%20clang%20or%3A%20How%20to%20build%20Qt%204.8%20with%20clang%203%20without%20going%20insane&amp;url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Ffun-with-clang-or-how-to-build-qt-4-8-with-clang-3-without-going-insane%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/slashdot.png' title='Slashdot' alt='Slashdot' class='' /></a>
	<a rel='nofollow'  href='http://www.stumbleupon.com/submit?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Ffun-with-clang-or-how-to-build-qt-4-8-with-clang-3-without-going-insane%2F&amp;title=Fun%20with%20clang%20or%3A%20How%20to%20build%20Qt%204.8%20with%20clang%203%20without%20going%20insane' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/stumbleupon.png' title='StumbleUpon' alt='StumbleUpon' class='' /></a>
	<a rel='nofollow'  href='http://technorati.com/faves?add=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Ffun-with-clang-or-how-to-build-qt-4-8-with-clang-3-without-going-insane%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/technorati.png' title='Technorati' alt='Technorati' class='' /></a>
	<a rel='nofollow'  href='http://twitter.com/home?status=Fun%20with%20clang%20or%3A%20How%20to%20build%20Qt%204.8%20with%20clang%203%20without%20going%20insane%20-%20http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Ffun-with-clang-or-how-to-build-qt-4-8-with-clang-3-without-going-insane%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/twitter.png' title='Twitter' alt='Twitter' class='' /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://philippmuenzel.de/wordpress/fun-with-clang-or-how-to-build-qt-4-8-with-clang-3-without-going-insane/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8220;Please let me talk to a puke&#8221;</title>
		<link>http://philippmuenzel.de/wordpress/please-let-me-talk-to-a-puke/</link>
		<comments>http://philippmuenzel.de/wordpress/please-let-me-talk-to-a-puke/#comments</comments>
		<pubDate>Sun, 04 Sep 2011 14:07:51 +0000</pubDate>
		<dc:creator>philipp</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[rant]]></category>
		<category><![CDATA[tech-support]]></category>

		<guid isPermaLink="false">http://philippmuenzel.de/wordpress/?p=280</guid>
		<description><![CDATA[(Inspired by "Geben Sie mir bitte einen Kotzbrocken!" by vowe) There are two types of tech support guys: -the kind, well-behaved, polite and zealous guy who has absolutely no clue and is following his script -the grumpy, impolite, nearly-autistic nerd who lacks basic communication skills but knows his stuff I prefer being handled by the [...]]]></description>
			<content:encoded><![CDATA[<p><em>(Inspired by <a href="http://vowe.net/archives/011557.html">"Geben Sie mir bitte einen Kotzbrocken!"</a> by <a href="http://vowe.net">vowe</a>)</em></p>
<p>There are two types of tech support guys:<br />
-the kind, well-behaved, polite and zealous guy who has absolutely no clue and is following his script<br />
-the grumpy, impolite, nearly-autistic nerd who lacks basic communication skills but knows his stuff</p>
<p>I prefer being handled by the latter. Because he is the only one who can actually solve my problem.</p>
<p>To achieve this, I usually start each call or mail to tech-support by such a mass of geek-level detail that I get escalated to the "puke department" a.k.a. "second level support" fast.</p>
<p>So I considered myself safe when filling out the <a href="http://dev.x-plane.com/support/bugreport.html">bug report form</a> for X-Plane with a well-crafted stacktrace from the GNU Debugger, showing the source of a memory error in a Freetype component on OSX, showing up at every X-Plane startup.</p>
<p>I would be the happiest person on earth if I had only ONE customer being capable of using a debugger!</p>
<p>But what happened instead, is that I was trapped for the exchange of FOUR(!!!) additional emails before this apparently got passed on to someone who can actually read debugger output (Austin or Ben one presumes).</p>
<p>Tech supporters of the world:<br />
Please, stop wasting your (and MY!!!) time. If you get a mail from a nerd, pass it to a nerd. AND STOP BEING POLITE TO ME! I want a puke to talk to!</p>


	<a rel='nofollow'  href='http://delicious.com/post?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fplease-let-me-talk-to-a-puke%2F&amp;title=%22Please%20let%20me%20talk%20to%20a%20puke%22&amp;notes=' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/delicious.png' title='del.icio.us' alt='del.icio.us' class='' /></a>
	<a rel='nofollow'  href='http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fplease-let-me-talk-to-a-puke%2F&amp;title=%22Please%20let%20me%20talk%20to%20a%20puke%22&amp;bodytext=' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/digg.png' title='Digg' alt='Digg' class='' /></a>
	<a rel='nofollow'  href='mailto:?subject=%22Please%20let%20me%20talk%20to%20a%20puke%22&amp;body=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fplease-let-me-talk-to-a-puke%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/email_link.png' title='email' alt='email' class='' /></a>
	<a rel='nofollow'  href='http://www.facebook.com/share.php?u=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fplease-let-me-talk-to-a-puke%2F&amp;t=%22Please%20let%20me%20talk%20to%20a%20puke%22' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/facebook.png' title='Facebook' alt='Facebook' class='' /></a>
	<a rel='nofollow'  href='http://www.google.com/reader/link?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fplease-let-me-talk-to-a-puke%2F&amp;title=%22Please%20let%20me%20talk%20to%20a%20puke%22&amp;srcURL=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fplease-let-me-talk-to-a-puke%2F&amp;srcTitle=X-Developer+Cross-platform+development+in+C%2B%2B%2C+Flight+Simulation' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/googlebuzz.png' title='Google Buzz' alt='Google Buzz' class='' /></a>
	<a rel='nofollow'  href='http://identi.ca/notice/new?status_textarea=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fplease-let-me-talk-to-a-puke%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/identica.png' title='Identi.ca' alt='Identi.ca' class='' /></a>
	<a rel='nofollow'  href='http://www.mister-wong.com/addurl/?bm_url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fplease-let-me-talk-to-a-puke%2F&amp;bm_description=%22Please%20let%20me%20talk%20to%20a%20puke%22&amp;plugin=soc' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/misterwong.png' title='MisterWong' alt='MisterWong' class='' /></a>
	<a rel='nofollow'  href='http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fplease-let-me-talk-to-a-puke%2F&amp;t=%22Please%20let%20me%20talk%20to%20a%20puke%22' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/myspace.png' title='MySpace' alt='MySpace' class='' /></a>
	<a rel='nofollow'  href='http://promote.orkut.com/preview?nt=orkut.com&amp;du=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fplease-let-me-talk-to-a-puke%2F&amp;tt=%22Please%20let%20me%20talk%20to%20a%20puke%22' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/orkut.png' title='Orkut' alt='Orkut' class='' /></a>
	<a rel='nofollow'  href='http://www.printfriendly.com/print?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fplease-let-me-talk-to-a-puke%2F&amp;partner=sociable' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/printfriendly.png' title='Print' alt='Print' class='' /></a>
	<a rel='nofollow'  href='http://reddit.com/submit?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fplease-let-me-talk-to-a-puke%2F&amp;title=%22Please%20let%20me%20talk%20to%20a%20puke%22' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/reddit.png' title='Reddit' alt='Reddit' class='' /></a>
	<a rel='nofollow'  href='http://philippmuenzel.de/wordpress/feed/' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/rss.png' title='RSS' alt='RSS' class='' /></a>
	<a rel='nofollow'  href='http://slashdot.org/bookmark.pl?title=%22Please%20let%20me%20talk%20to%20a%20puke%22&amp;url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fplease-let-me-talk-to-a-puke%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/slashdot.png' title='Slashdot' alt='Slashdot' class='' /></a>
	<a rel='nofollow'  href='http://www.stumbleupon.com/submit?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fplease-let-me-talk-to-a-puke%2F&amp;title=%22Please%20let%20me%20talk%20to%20a%20puke%22' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/stumbleupon.png' title='StumbleUpon' alt='StumbleUpon' class='' /></a>
	<a rel='nofollow'  href='http://technorati.com/faves?add=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fplease-let-me-talk-to-a-puke%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/technorati.png' title='Technorati' alt='Technorati' class='' /></a>
	<a rel='nofollow'  href='http://twitter.com/home?status=%22Please%20let%20me%20talk%20to%20a%20puke%22%20-%20http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fplease-let-me-talk-to-a-puke%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/twitter.png' title='Twitter' alt='Twitter' class='' /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://philippmuenzel.de/wordpress/please-let-me-talk-to-a-puke/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Update Time!</title>
		<link>http://philippmuenzel.de/wordpress/update-time/</link>
		<comments>http://philippmuenzel.de/wordpress/update-time/#comments</comments>
		<pubDate>Thu, 25 Aug 2011 18:19:46 +0000</pubDate>
		<dc:creator>philipp</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Mac]]></category>

		<guid isPermaLink="false">http://philippmuenzel.de/wordpress/?p=252</guid>
		<description><![CDATA[With the .1 update out, I considered it safe to make the move to Lion. Upgrade itself was smooth and uneventful, but I have a few complaints: I downloaded from the AppStore 3 days after 10.7.1 was out, but it installed 10.7. I had to get the 10.7.1 update separately. Don't they update the installer [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_253" class="wp-caption alignnone" style="width: 310px"><a href="http://philippmuenzel.de/wordpress/update-time/screen-shot-2011-08-23-at-6-53-04-pm/" rel="attachment wp-att-253"><img src="http://philippmuenzel.de/wordpress/wp-content/uploads/2011/08/Screen-shot-2011-08-23-at-6.53.04-PM-300x43.png" alt="AppStore Lion Screenshot" title="AppStore Lion Screenshot" width="300" height="43" class="size-medium wp-image-253" /></a><p class="wp-caption-text">AppStore Lion Screenshot</p></div>
<p>With the .1 update out, I considered it safe to make the move to Lion.</p>
<p>Upgrade itself was smooth and uneventful, but I have a few complaints:</p>
<ul>
<li>I downloaded from the AppStore 3 days after 10.7.1 was out, but it installed 10.7. I had to get the 10.7.1 update separately. Don't they update the installer at all?</li>
<li>Why the **** did they make the Dashboard a separate space? Luckily you can change this in the "Mission Control" settings.</li>
<li>It is sloooooow. Going fullscreen is not smooth. Switching spaces is not smooth. Snow Leopard feels fast as hell. The Lion feels more like a Lion on Valium. Or like <a href="http://www.flickr.com/photos/chrisk-de/4071980544/">this one</a>.</li>
</ul>
<p>Other than that, transition was great. XCode 4 was installed in no time, preserving my old XCode3 installation, however I doubt I will ever start the IDE. I only use the command line tools, in combination with QtCreator. </p>
<p>I recompiled all my stuff with llvm-gcc and I look forward to exploring clang. Using the XCode4 tools however means dropping the support for the 10.5 SDK, which means the next CRJ will only run on 10.6+. </p>


	<a rel='nofollow'  href='http://delicious.com/post?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fupdate-time%2F&amp;title=Update%20Time%21&amp;notes=' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/delicious.png' title='del.icio.us' alt='del.icio.us' class='' /></a>
	<a rel='nofollow'  href='http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fupdate-time%2F&amp;title=Update%20Time%21&amp;bodytext=' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/digg.png' title='Digg' alt='Digg' class='' /></a>
	<a rel='nofollow'  href='mailto:?subject=Update%20Time%21&amp;body=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fupdate-time%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/email_link.png' title='email' alt='email' class='' /></a>
	<a rel='nofollow'  href='http://www.facebook.com/share.php?u=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fupdate-time%2F&amp;t=Update%20Time%21' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/facebook.png' title='Facebook' alt='Facebook' class='' /></a>
	<a rel='nofollow'  href='http://www.google.com/reader/link?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fupdate-time%2F&amp;title=Update%20Time%21&amp;srcURL=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fupdate-time%2F&amp;srcTitle=X-Developer+Cross-platform+development+in+C%2B%2B%2C+Flight+Simulation' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/googlebuzz.png' title='Google Buzz' alt='Google Buzz' class='' /></a>
	<a rel='nofollow'  href='http://identi.ca/notice/new?status_textarea=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fupdate-time%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/identica.png' title='Identi.ca' alt='Identi.ca' class='' /></a>
	<a rel='nofollow'  href='http://www.mister-wong.com/addurl/?bm_url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fupdate-time%2F&amp;bm_description=Update%20Time%21&amp;plugin=soc' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/misterwong.png' title='MisterWong' alt='MisterWong' class='' /></a>
	<a rel='nofollow'  href='http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fupdate-time%2F&amp;t=Update%20Time%21' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/myspace.png' title='MySpace' alt='MySpace' class='' /></a>
	<a rel='nofollow'  href='http://promote.orkut.com/preview?nt=orkut.com&amp;du=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fupdate-time%2F&amp;tt=Update%20Time%21' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/orkut.png' title='Orkut' alt='Orkut' class='' /></a>
	<a rel='nofollow'  href='http://www.printfriendly.com/print?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fupdate-time%2F&amp;partner=sociable' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/printfriendly.png' title='Print' alt='Print' class='' /></a>
	<a rel='nofollow'  href='http://reddit.com/submit?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fupdate-time%2F&amp;title=Update%20Time%21' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/reddit.png' title='Reddit' alt='Reddit' class='' /></a>
	<a rel='nofollow'  href='http://philippmuenzel.de/wordpress/feed/' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/rss.png' title='RSS' alt='RSS' class='' /></a>
	<a rel='nofollow'  href='http://slashdot.org/bookmark.pl?title=Update%20Time%21&amp;url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fupdate-time%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/slashdot.png' title='Slashdot' alt='Slashdot' class='' /></a>
	<a rel='nofollow'  href='http://www.stumbleupon.com/submit?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fupdate-time%2F&amp;title=Update%20Time%21' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/stumbleupon.png' title='StumbleUpon' alt='StumbleUpon' class='' /></a>
	<a rel='nofollow'  href='http://technorati.com/faves?add=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fupdate-time%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/technorati.png' title='Technorati' alt='Technorati' class='' /></a>
	<a rel='nofollow'  href='http://twitter.com/home?status=Update%20Time%21%20-%20http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fupdate-time%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/twitter.png' title='Twitter' alt='Twitter' class='' /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://philippmuenzel.de/wordpress/update-time/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Whether to sell on X-Plane.org or X-Aviation (UPDATED!)</title>
		<link>http://philippmuenzel.de/wordpress/whether-to-sell-on-x-plane-org-or-x-aviation/</link>
		<comments>http://philippmuenzel.de/wordpress/whether-to-sell-on-x-plane-org-or-x-aviation/#comments</comments>
		<pubDate>Tue, 16 Aug 2011 14:34:38 +0000</pubDate>
		<dc:creator>philipp</dc:creator>
				<category><![CDATA[Flight Simulation]]></category>
		<category><![CDATA[E-Commerce]]></category>
		<category><![CDATA[X-Plane]]></category>

		<guid isPermaLink="false">http://philippmuenzel.de/wordpress/?p=228</guid>
		<description><![CDATA[As a developer who sells his product on both platforms, I want to give other devs insight on the pros and cons of each platform. Don't expect a definite "winner" or a special recommendation for you, I'm just sharing my personal experience and thoughts here. Own website vs established shop First, let's talk about using [...]]]></description>
			<content:encoded><![CDATA[<p>As a developer who sells his product on both platforms, I want to give other devs insight on the pros and cons of each platform. Don't expect a definite "winner" or a special recommendation for you, I'm just sharing my personal experience and thoughts here.</p>
<h2>Own website vs established shop</h2>
<p>First, let's talk about using one of these platforms in the first place. As a newcomer, using a renowned shop platform is a must. You may think your product is good enough to be sold through your personal website only, you can do marketing and advertisement yourself, and you are trustworthy enough so people send you money.<br />
Trust me, you are most certainly wrong!<br />
Buying immaterial things like software online relies on trust, perhaps even more than buying things in real life.<br />
For the customer, buying on your personal website with Paypal button is like buying a used car from <a title="&quot;Honest Achmed&quot;" href="http://www.h-online.com/security/news/item/Honest-Achmed-asks-for-trust-1231314.html">"Honest Achmed"</a> in a shabby backyard, whereas buying on X-Aviation or X-Plane.org is more like going into a big Mercedes-Benz showroom and being served by a besuited official.</p>
<p>Sure, people like Peter Hager may be successful selling their planes through their own website, but few people in our community have earned the trust that every product of theirs is top-notch quality.<br />
So, unless you have a track record like Peter, you should rely on the trust that people have in the big online shops, with the thousands of customers already, various payment methods, buzzing support forums, and the strong feeling that you actually get something for your money.</p>
<p>Now that we have decided we must sell through an established selling platform, being X-Plane developers, our choice boils down to the above mentioned "Big Two".</p>
<h2>Shop websites</h2>
<p>First, the similarities: Both offer a top-notch e-commerce system with product categories, preview pages, shopping cart/checkout, customer database, the whole enchilada. Both offer your customers the option to checkout either with credit card or Paypal.<br />
Considering the overall visual appearance, the X-Aviation shop website wins. It looks tidier and more "Web 2.0"-like with the customer reviews built in. Also the graphics look sleek and modern, the animation is smooth and unobtrusive.<br />
X-Plane.org on the other hand is more like Amazon or the classic GMail. Rather basic in the visual appearance, but well structured and clear. The icons look a bit 1999 though.</p>
<h2>Support forums</h2>
<p>Also, both offer hosting the support forum for your product - here X-Plane.org is the clear winner. The "Invision Power" forum software they use is simply great. The moderation options are very intuitive to use. Posting multiple attachments and graphics is done easily. The search function is a bit strange though, as you have to be proficient in using the advanced search options to get good results. The quick search tries to be smart but fails often. Another big plus of the IPBoard software is the mobile version. Browsing the X-Plane.org forums on your IPhone or Android is a great experience and feels like a native app. <del datetime="2011-08-25T17:22:57+00:00">Browsing the X-Pilot.com forums on a mobile device is a pain, as you are constantly scrolling right and left.<br />
The X-Aviation support forum (X-Pilot.com) is a rather simple forum software that is also less intuitive to moderate.</del><br />
<ins datetime="2011-08-25T17:22:57+00:00">Update 2011-08-25: X-Aviation also uses IPBoard now, which is a huge step forward in usability of their online community. It is a newer software version than the one X-Plane.org uses. However, I've not yet got my moderator rights back which got lost in the migration process. So I can't comment on the moderation options of the latest IPBoard software. The mobile version however doesn't work at all for me. I tapped the link "mobile version" several times, but still get the standard layout on my Android. I heard from IPhone users that it works great there.</ins> I messed up more than one support thread when trying to split parallel discussions in a topic apart and literally spent half an hour getting a thread back together.<br />
A big plus for X-Aviation though is that given their smaller portfolio they are able to provide support themselves, as they know all the products they sell a lot better than it would be possible for X-Plane.org with a total of 435 products at the time of writing.<br />
I have complete confidence that when I'm unable to check the forum myself for a few days, Cameron will take care of all the obvious newbie questions, answer all installation-related issues and leave only the really hard-core questions for me to answer. That is something I can't and won't expect from the X-Plane.org store.</p>
<p>So much for the visible, the "customer" side. On the developer side there are huge differences.</p>
<h2>Distribution System and Reporting Software</h2>
<p>To put it in one sentence: X-Aviation offers a whole distribution system, X-Plane.org offers only a shop.<br />
Part of the excellent distribution system of X-Aviation is a GTK-based wrapper/installer that works the same on Windows, Linux and Mac. It is very user-friendly and goes hand-in-hand with the activation/copy-protection system. I know very little about the technical details, but I know for sure that this system has an unprecedented track record - I have not been able to find a working copy of one of the X-Aviation bestsellers on any of the usual suspect websites. Sure, every system can be broken, but I think X-Aviation set the bar very high on this. If anything can be improved in the installer, then it would be a detection for the folder the user selected. If it tested for the presence of X-Plane.app or X-Plane.exe to make sure the user selected the X-Plane main folder, it would score 100% on my personal scale. So it's only 99%.<br />
Getting all this to work requieres you only to link a ludicrously small static library to your plugin code. This static library is available for all platforms with the gcc compiler, and now -because of my demand- for Windows also with the MS Visual C++ 9.0 compiler.<br />
When sales begin, you can watch them live on the X-Aviation reporting system. The reporting screen is very intuitive and clear, you get the overview over the total sales and earnings on each day, summaries for each month, and a fancy little graph plotting your sales over time, which is extremely helpful if you want to see the impact of marketing like a paper advert. X-Aviation pays out every two weeks, and you may choose to be wired the money to your bank account or to use PayPal.</p>
<p>Compared to that, the X-Plane.org store is rather basic. It's more or less a way you can sell files. They don't provide an installer, a distribution system, or any means of activation or copy-protection. For many X-Plane products this is sufficient, as the typical X-Plane aircraft consists of a single folder you drop into one of the Aircraft/ subdirectories, and you're done. But as soon as you have to distribute other stuff, like the AIRAC data or additional frameworks your plugin requires, giving only a .zip-file to your customers is no longer an option. I resorted to using <a title="InnoSetup" href="http://www.jrsoftware.org/isinfo.php">InnoSetup </a>on Windows and <a title="InstallJammer" href="http://www.installjammer.com/">InstallJammer</a> on Linux. Both are very good solutions, easy to configure and the installers look instantly familiar to Windows users. The InstallJammer wizard panes are based on Tcl/Tk and try to resemble Windows Installer, which looks a bit awkward on Linux. For Mac I use Apple Package Maker, which is a huge pain in the ### to configure. Dear Apple, aren't you the company claiming to have the most intuitive UIs? Then go back to the drawing boards with Package Maker, will you?!<br />
Also, it is left up to you, the developer, to think of a way to protect your software against piracy. The X-Plane.org shop offers a system to distribute serial numbers with each purchase though. You can provide a list of pre-computed serial numbers to the shop, that are sequentially issued with the purchases.<br />
The reporting system of the X-Plane.org store also offers a live view and a month-summary, but it lacks many of the nice computations the X-Aviation system does for you, like the earnings-per-month and the neat graph.<br />
You may also choose to be notified of each single order via e-mail. Which I diverted to a separate account, because it totally clutters up my workflow. Payout is at the beginning of each month, preferred payout method is also PayPal.</p>
<h2>User base and marketing</h2>
<p>Now on to marketing. First thing to note is that X-Plane.org has a HUGE user base. Based on the registered users, the X-Plane.org newsletter is read by nearly ten times the people who read the X-Aviation newsletter. A single marketing action on X-Plane.org can have huge impact. Also, X-Plane.org often has special offers bundling two or three products to be sold at a discounted price. With more than 170.000 registered users, announcements on the X-Plane.org forums reach a lot more readers than on X-Aviation.<br />
<ins datetime="2011-08-25T17:22:57+00:00">Update 2010-08-25: It is also noteable that X-Plane.org ist the 3rd largest Flight sim site behind Avsim and flightsim.com (which are mostly FSX).<br />
Also according to Nicolas' statistics, users spend more time and view more pages per visit than any other flight sim website. Since Nicolas also runs the Avsim store, I trust him he has access to these statistics and knows how to read them.</ins></p>
<p>All things considered, I have to conclude that you can reach more potential customers when selling on X-Plane.org.</p>
<p>X-Aviation in turn is more like a place where they sell hand-picked jewelry. Less users, less potential customers. But customers that are used to very high quality standard. Probably more potent customers, looking for top-notch software. Your product has to be good to be sold on X-Aviation. If the quality of the X-Aviation users makes up for the lack of quantity I don't know yet.</p>
<h2>Summary</h2>
<p><strong>X-Aviation: Top-notch, state-of-the-art distribution system</strong><br />
<strong> X-Plane.org: MASSIVE user base</strong></p>
<p>No, there's no final recommendation. I'm happy to have my product sold on both platforms. I like Cameron as a business partner as much as I like Nicolas, and I don't care that they don't like each other. Perhaps it's "the mercy of late birth", as a former German chancellor put it, that I never engaged in the turf war between them, because the split happened long before I had my first encounter with X-Plane.</p>
<p>So I encourage any author of X-Plane software to find his/hers matching business partner and continue creating and selling great software!</p>
<p>PS: Unlike to my other posts, I allow comments on this. But when spamming gets too worse, I will eventually close them.</p>


	<a rel='nofollow'  href='http://delicious.com/post?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fwhether-to-sell-on-x-plane-org-or-x-aviation%2F&amp;title=Whether%20to%20sell%20on%20X-Plane.org%20or%20X-Aviation%20%28UPDATED%21%29&amp;notes=' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/delicious.png' title='del.icio.us' alt='del.icio.us' class='' /></a>
	<a rel='nofollow'  href='http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fwhether-to-sell-on-x-plane-org-or-x-aviation%2F&amp;title=Whether%20to%20sell%20on%20X-Plane.org%20or%20X-Aviation%20%28UPDATED%21%29&amp;bodytext=' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/digg.png' title='Digg' alt='Digg' class='' /></a>
	<a rel='nofollow'  href='mailto:?subject=Whether%20to%20sell%20on%20X-Plane.org%20or%20X-Aviation%20%28UPDATED%21%29&amp;body=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fwhether-to-sell-on-x-plane-org-or-x-aviation%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/email_link.png' title='email' alt='email' class='' /></a>
	<a rel='nofollow'  href='http://www.facebook.com/share.php?u=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fwhether-to-sell-on-x-plane-org-or-x-aviation%2F&amp;t=Whether%20to%20sell%20on%20X-Plane.org%20or%20X-Aviation%20%28UPDATED%21%29' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/facebook.png' title='Facebook' alt='Facebook' class='' /></a>
	<a rel='nofollow'  href='http://www.google.com/reader/link?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fwhether-to-sell-on-x-plane-org-or-x-aviation%2F&amp;title=Whether%20to%20sell%20on%20X-Plane.org%20or%20X-Aviation%20%28UPDATED%21%29&amp;srcURL=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fwhether-to-sell-on-x-plane-org-or-x-aviation%2F&amp;srcTitle=X-Developer+Cross-platform+development+in+C%2B%2B%2C+Flight+Simulation' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/googlebuzz.png' title='Google Buzz' alt='Google Buzz' class='' /></a>
	<a rel='nofollow'  href='http://identi.ca/notice/new?status_textarea=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fwhether-to-sell-on-x-plane-org-or-x-aviation%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/identica.png' title='Identi.ca' alt='Identi.ca' class='' /></a>
	<a rel='nofollow'  href='http://www.mister-wong.com/addurl/?bm_url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fwhether-to-sell-on-x-plane-org-or-x-aviation%2F&amp;bm_description=Whether%20to%20sell%20on%20X-Plane.org%20or%20X-Aviation%20%28UPDATED%21%29&amp;plugin=soc' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/misterwong.png' title='MisterWong' alt='MisterWong' class='' /></a>
	<a rel='nofollow'  href='http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fwhether-to-sell-on-x-plane-org-or-x-aviation%2F&amp;t=Whether%20to%20sell%20on%20X-Plane.org%20or%20X-Aviation%20%28UPDATED%21%29' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/myspace.png' title='MySpace' alt='MySpace' class='' /></a>
	<a rel='nofollow'  href='http://promote.orkut.com/preview?nt=orkut.com&amp;du=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fwhether-to-sell-on-x-plane-org-or-x-aviation%2F&amp;tt=Whether%20to%20sell%20on%20X-Plane.org%20or%20X-Aviation%20%28UPDATED%21%29' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/orkut.png' title='Orkut' alt='Orkut' class='' /></a>
	<a rel='nofollow'  href='http://www.printfriendly.com/print?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fwhether-to-sell-on-x-plane-org-or-x-aviation%2F&amp;partner=sociable' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/printfriendly.png' title='Print' alt='Print' class='' /></a>
	<a rel='nofollow'  href='http://reddit.com/submit?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fwhether-to-sell-on-x-plane-org-or-x-aviation%2F&amp;title=Whether%20to%20sell%20on%20X-Plane.org%20or%20X-Aviation%20%28UPDATED%21%29' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/reddit.png' title='Reddit' alt='Reddit' class='' /></a>
	<a rel='nofollow'  href='http://philippmuenzel.de/wordpress/feed/' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/rss.png' title='RSS' alt='RSS' class='' /></a>
	<a rel='nofollow'  href='http://slashdot.org/bookmark.pl?title=Whether%20to%20sell%20on%20X-Plane.org%20or%20X-Aviation%20%28UPDATED%21%29&amp;url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fwhether-to-sell-on-x-plane-org-or-x-aviation%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/slashdot.png' title='Slashdot' alt='Slashdot' class='' /></a>
	<a rel='nofollow'  href='http://www.stumbleupon.com/submit?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fwhether-to-sell-on-x-plane-org-or-x-aviation%2F&amp;title=Whether%20to%20sell%20on%20X-Plane.org%20or%20X-Aviation%20%28UPDATED%21%29' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/stumbleupon.png' title='StumbleUpon' alt='StumbleUpon' class='' /></a>
	<a rel='nofollow'  href='http://technorati.com/faves?add=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fwhether-to-sell-on-x-plane-org-or-x-aviation%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/technorati.png' title='Technorati' alt='Technorati' class='' /></a>
	<a rel='nofollow'  href='http://twitter.com/home?status=Whether%20to%20sell%20on%20X-Plane.org%20or%20X-Aviation%20%28UPDATED%21%29%20-%20http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fwhether-to-sell-on-x-plane-org-or-x-aviation%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/twitter.png' title='Twitter' alt='Twitter' class='' /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://philippmuenzel.de/wordpress/whether-to-sell-on-x-plane-org-or-x-aviation/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Kernelpanic</title>
		<link>http://philippmuenzel.de/wordpress/kernelpanic/</link>
		<comments>http://philippmuenzel.de/wordpress/kernelpanic/#comments</comments>
		<pubDate>Mon, 27 Jun 2011 19:19:14 +0000</pubDate>
		<dc:creator>philipp</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Mac]]></category>

		<guid isPermaLink="false">http://philippmuenzel.de/wordpress/?p=208</guid>
		<description><![CDATA[Yesterday was the first time I saw a Kernel Panic on Mac OSX. I wanted to play "The Rise and Fall of Ruby Woo" which I had ripped from a CD to my Notebook a long time ago and now transferred from my backup HD. So I selected the 12 tracks in the folder and double-clicked to [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday was the first time I saw a Kernel Panic on Mac OSX.</p>
<p>I wanted to play <a href="http://www.amazon.de/Rise-Fall-Ruby-Woo/dp/B000WQQ9LQ/">"The Rise and Fall of Ruby Woo"</a> which I had ripped from a CD to my Notebook a long time ago and now transferred from my backup HD.</p>
<p>So I selected the 12 tracks in the folder and double-clicked to open, expecting it would launch iTunes and create a Playlist, or something like that. What I didn't realize was that the tracks were .ogg files, not mp3s (I had ripped them with Rythmbox). Apparently, Google Chrome is the application of choice to play ogg files on my system.</p>
<p>So Chrome popped up, opening 12 new tabs, in each one starting a track, all at the same time.</p>
<p>When closing the tabs, suddenly all the chaotic sound got stuck in a loop and a grey window appeared that I never saw before:</p>
<div id="attachment_216" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-216" href="http://philippmuenzel.de/wordpress/kernelpanic/img_20110627_015005/"><img class="size-medium wp-image-216" title="IMG_20110627_015005" src="http://philippmuenzel.de/wordpress/wp-content/uploads/2011/05/IMG_20110627_015005-300x225.jpg" alt="Kernel Panic" width="300" height="225" /></a><p class="wp-caption-text">Kernel Panic</p></div>
<p>Reboot was uneventful and my uptime was already gone with the 10.6.8 update yesterday. I had DiskUtility check for errors though. Luckily, no problems.</p>


	<a rel='nofollow'  href='http://delicious.com/post?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fkernelpanic%2F&amp;title=Kernelpanic&amp;notes=' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/delicious.png' title='del.icio.us' alt='del.icio.us' class='' /></a>
	<a rel='nofollow'  href='http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fkernelpanic%2F&amp;title=Kernelpanic&amp;bodytext=' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/digg.png' title='Digg' alt='Digg' class='' /></a>
	<a rel='nofollow'  href='mailto:?subject=Kernelpanic&amp;body=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fkernelpanic%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/email_link.png' title='email' alt='email' class='' /></a>
	<a rel='nofollow'  href='http://www.facebook.com/share.php?u=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fkernelpanic%2F&amp;t=Kernelpanic' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/facebook.png' title='Facebook' alt='Facebook' class='' /></a>
	<a rel='nofollow'  href='http://www.google.com/reader/link?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fkernelpanic%2F&amp;title=Kernelpanic&amp;srcURL=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fkernelpanic%2F&amp;srcTitle=X-Developer+Cross-platform+development+in+C%2B%2B%2C+Flight+Simulation' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/googlebuzz.png' title='Google Buzz' alt='Google Buzz' class='' /></a>
	<a rel='nofollow'  href='http://identi.ca/notice/new?status_textarea=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fkernelpanic%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/identica.png' title='Identi.ca' alt='Identi.ca' class='' /></a>
	<a rel='nofollow'  href='http://www.mister-wong.com/addurl/?bm_url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fkernelpanic%2F&amp;bm_description=Kernelpanic&amp;plugin=soc' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/misterwong.png' title='MisterWong' alt='MisterWong' class='' /></a>
	<a rel='nofollow'  href='http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fkernelpanic%2F&amp;t=Kernelpanic' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/myspace.png' title='MySpace' alt='MySpace' class='' /></a>
	<a rel='nofollow'  href='http://promote.orkut.com/preview?nt=orkut.com&amp;du=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fkernelpanic%2F&amp;tt=Kernelpanic' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/orkut.png' title='Orkut' alt='Orkut' class='' /></a>
	<a rel='nofollow'  href='http://www.printfriendly.com/print?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fkernelpanic%2F&amp;partner=sociable' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/printfriendly.png' title='Print' alt='Print' class='' /></a>
	<a rel='nofollow'  href='http://reddit.com/submit?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fkernelpanic%2F&amp;title=Kernelpanic' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/reddit.png' title='Reddit' alt='Reddit' class='' /></a>
	<a rel='nofollow'  href='http://philippmuenzel.de/wordpress/feed/' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/rss.png' title='RSS' alt='RSS' class='' /></a>
	<a rel='nofollow'  href='http://slashdot.org/bookmark.pl?title=Kernelpanic&amp;url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fkernelpanic%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/slashdot.png' title='Slashdot' alt='Slashdot' class='' /></a>
	<a rel='nofollow'  href='http://www.stumbleupon.com/submit?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fkernelpanic%2F&amp;title=Kernelpanic' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/stumbleupon.png' title='StumbleUpon' alt='StumbleUpon' class='' /></a>
	<a rel='nofollow'  href='http://technorati.com/faves?add=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fkernelpanic%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/technorati.png' title='Technorati' alt='Technorati' class='' /></a>
	<a rel='nofollow'  href='http://twitter.com/home?status=Kernelpanic%20-%20http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fkernelpanic%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/twitter.png' title='Twitter' alt='Twitter' class='' /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://philippmuenzel.de/wordpress/kernelpanic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>snprintf is not _snprintf_s_WTF_SNAFU !</title>
		<link>http://philippmuenzel.de/wordpress/snprintf-is-not-_snprintf_s_wtf_snafu/</link>
		<comments>http://philippmuenzel.de/wordpress/snprintf-is-not-_snprintf_s_wtf_snafu/#comments</comments>
		<pubDate>Wed, 11 May 2011 21:24:36 +0000</pubDate>
		<dc:creator>philipp</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[ANSI C]]></category>
		<category><![CDATA[C99]]></category>
		<category><![CDATA[cross-platform]]></category>
		<category><![CDATA[dirty hack]]></category>

		<guid isPermaLink="false">http://philippmuenzel.de/wordpress/?p=210</guid>
		<description><![CDATA[The last three days were filled up with collecting all the customer reports and preparing the first service pack for the CRJ. Luckily, no real showstopper showed up, but one thing was strange: I was fixing the display of 25kHz spaced COM-frequencies, where the CRJ 1.0.0 software had a stupid rounding error. I implemented the [...]]]></description>
			<content:encoded><![CDATA[<p>The last three days were filled up with collecting all the customer reports and preparing the first service pack for the CRJ. Luckily, no real showstopper showed up, but one thing was strange:</p>
<p>I was fixing the display of 25kHz spaced COM-frequencies, where the CRJ 1.0.0 software had a stupid rounding error. I implemented the fix on my Linux Notebook, and was satisfied with the result. I pushed the fix to my git repository, pulled on my Windows PC and compiled again. Starting up the CRJ I had an instant crash with the dreaded "X-Plane.exe has stopped working"-window.</p>
<p>What had happened? To display the value on the small RTU display, I use a well-known C99 function called "snprintf()". It is the safe counterpart of sprintf() (Stream print formatted) that takes an additional argument, the maximum number of characters to be written to the destination buffer. What is great about snprintf() is that it guarantees the output buffer is null-terminated, even if when the output is truncated. And that was precisely what I wanted: The output had to be truncated to 7 characters, 3 characters the frequency before the decimal, then the decimal point, then two digits after the decimal, then the null-terminator. If I put in the frequency as 136.375 it should be truncated so the string reads 136.37\0</p>
<p>Fair enough, now why was the CRJ crashing so violently on Windows? The answer is: Visual C++ doesn't have an snprintf() function. There exist the following two "equivalents": _snprintf() and sprintf_s(). The former was what I used - and guess what - the Microsoft _snprintf() does NOT guarantee the null-terminator!!1!</p>
<p>So the frequency on the RTU read something like 136.375!$Dg=73*+#?§ with some random garbage behind the 7th character.</p>
<p>snprintf() is a C99 standardized function, for god's sake! It's not a GNU extension or a Torvalds memorial function. It's flipping C99 AND C++0x!</p>
<p>Google for the rescue! Apparently quite a lot of people on MSDN have already stumbled over the retarded _snprintf function and there is a workaround that behaves consistent to the C99 requirements:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#ifdef _MSC_VER</span>
<span style="color: #339933;">#include &amp;lt;cstdarg&amp;gt;</span>
<span style="color: #000000; font-weight: bold;">inline</span> <span style="color: #993333;">int</span> my_snprintf<span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span><span style="color: #339933;">*</span> str<span style="color: #339933;">,</span> size_t size<span style="color: #339933;">,</span> <span style="color: #993333;">const</span> <span style="color: #993333;">char</span><span style="color: #339933;">*</span> format<span style="color: #339933;">,</span> ...<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    size_t count<span style="color: #339933;">;</span>
    va_list ap<span style="color: #339933;">;</span>
    va_start<span style="color: #009900;">&#40;</span>ap<span style="color: #339933;">,</span> format<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    count <span style="color: #339933;">=</span> _vscprintf<span style="color: #009900;">&#40;</span>format<span style="color: #339933;">,</span> ap<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    _vsnprintf_s<span style="color: #009900;">&#40;</span>str<span style="color: #339933;">,</span> size<span style="color: #339933;">,</span> _TRUNCATE<span style="color: #339933;">,</span> format<span style="color: #339933;">,</span> ap<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    va_end<span style="color: #009900;">&#40;</span>ap<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> count<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #339933;">#define snprintf my_snprintf</span>
<span style="color: #339933;">#endif</span></pre></div></div>

<p>Now that's a kludgy workaround that keeps the CRJ flying...</p>


	<a rel='nofollow'  href='http://delicious.com/post?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fsnprintf-is-not-_snprintf_s_wtf_snafu%2F&amp;title=snprintf%20is%20not%20_snprintf_s_WTF_SNAFU%20%21&amp;notes=' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/delicious.png' title='del.icio.us' alt='del.icio.us' class='' /></a>
	<a rel='nofollow'  href='http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fsnprintf-is-not-_snprintf_s_wtf_snafu%2F&amp;title=snprintf%20is%20not%20_snprintf_s_WTF_SNAFU%20%21&amp;bodytext=' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/digg.png' title='Digg' alt='Digg' class='' /></a>
	<a rel='nofollow'  href='mailto:?subject=snprintf%20is%20not%20_snprintf_s_WTF_SNAFU%20%21&amp;body=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fsnprintf-is-not-_snprintf_s_wtf_snafu%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/email_link.png' title='email' alt='email' class='' /></a>
	<a rel='nofollow'  href='http://www.facebook.com/share.php?u=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fsnprintf-is-not-_snprintf_s_wtf_snafu%2F&amp;t=snprintf%20is%20not%20_snprintf_s_WTF_SNAFU%20%21' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/facebook.png' title='Facebook' alt='Facebook' class='' /></a>
	<a rel='nofollow'  href='http://www.google.com/reader/link?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fsnprintf-is-not-_snprintf_s_wtf_snafu%2F&amp;title=snprintf%20is%20not%20_snprintf_s_WTF_SNAFU%20%21&amp;srcURL=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fsnprintf-is-not-_snprintf_s_wtf_snafu%2F&amp;srcTitle=X-Developer+Cross-platform+development+in+C%2B%2B%2C+Flight+Simulation' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/googlebuzz.png' title='Google Buzz' alt='Google Buzz' class='' /></a>
	<a rel='nofollow'  href='http://identi.ca/notice/new?status_textarea=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fsnprintf-is-not-_snprintf_s_wtf_snafu%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/identica.png' title='Identi.ca' alt='Identi.ca' class='' /></a>
	<a rel='nofollow'  href='http://www.mister-wong.com/addurl/?bm_url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fsnprintf-is-not-_snprintf_s_wtf_snafu%2F&amp;bm_description=snprintf%20is%20not%20_snprintf_s_WTF_SNAFU%20%21&amp;plugin=soc' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/misterwong.png' title='MisterWong' alt='MisterWong' class='' /></a>
	<a rel='nofollow'  href='http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fsnprintf-is-not-_snprintf_s_wtf_snafu%2F&amp;t=snprintf%20is%20not%20_snprintf_s_WTF_SNAFU%20%21' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/myspace.png' title='MySpace' alt='MySpace' class='' /></a>
	<a rel='nofollow'  href='http://promote.orkut.com/preview?nt=orkut.com&amp;du=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fsnprintf-is-not-_snprintf_s_wtf_snafu%2F&amp;tt=snprintf%20is%20not%20_snprintf_s_WTF_SNAFU%20%21' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/orkut.png' title='Orkut' alt='Orkut' class='' /></a>
	<a rel='nofollow'  href='http://www.printfriendly.com/print?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fsnprintf-is-not-_snprintf_s_wtf_snafu%2F&amp;partner=sociable' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/printfriendly.png' title='Print' alt='Print' class='' /></a>
	<a rel='nofollow'  href='http://reddit.com/submit?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fsnprintf-is-not-_snprintf_s_wtf_snafu%2F&amp;title=snprintf%20is%20not%20_snprintf_s_WTF_SNAFU%20%21' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/reddit.png' title='Reddit' alt='Reddit' class='' /></a>
	<a rel='nofollow'  href='http://philippmuenzel.de/wordpress/feed/' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/rss.png' title='RSS' alt='RSS' class='' /></a>
	<a rel='nofollow'  href='http://slashdot.org/bookmark.pl?title=snprintf%20is%20not%20_snprintf_s_WTF_SNAFU%20%21&amp;url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fsnprintf-is-not-_snprintf_s_wtf_snafu%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/slashdot.png' title='Slashdot' alt='Slashdot' class='' /></a>
	<a rel='nofollow'  href='http://www.stumbleupon.com/submit?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fsnprintf-is-not-_snprintf_s_wtf_snafu%2F&amp;title=snprintf%20is%20not%20_snprintf_s_WTF_SNAFU%20%21' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/stumbleupon.png' title='StumbleUpon' alt='StumbleUpon' class='' /></a>
	<a rel='nofollow'  href='http://technorati.com/faves?add=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fsnprintf-is-not-_snprintf_s_wtf_snafu%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/technorati.png' title='Technorati' alt='Technorati' class='' /></a>
	<a rel='nofollow'  href='http://twitter.com/home?status=snprintf%20is%20not%20_snprintf_s_WTF_SNAFU%20%21%20-%20http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fsnprintf-is-not-_snprintf_s_wtf_snafu%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/twitter.png' title='Twitter' alt='Twitter' class='' /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://philippmuenzel.de/wordpress/snprintf-is-not-_snprintf_s_wtf_snafu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Analyzing how X-Plane propagates your position</title>
		<link>http://philippmuenzel.de/wordpress/analyzing-how-x-plane-propagates-your-position/</link>
		<comments>http://philippmuenzel.de/wordpress/analyzing-how-x-plane-propagates-your-position/#comments</comments>
		<pubDate>Thu, 05 May 2011 00:06:11 +0000</pubDate>
		<dc:creator>philipp</dc:creator>
				<category><![CDATA[X-Plane Plugin Development]]></category>
		<category><![CDATA[numerical recipies]]></category>
		<category><![CDATA[physics]]></category>
		<category><![CDATA[x-plane plugin]]></category>

		<guid isPermaLink="false">http://philippmuenzel.de/wordpress/?p=201</guid>
		<description><![CDATA[No, this is not a "it's been a while"-post. You probably all know what I've been working on. Instead, this is a "fancy engineering stuff" post. Let's discuss briefly how X-Plane knows where your planes is. X-Plane, as we all know, calculates the forces that act on your airplane. The force that the engine applies [...]]]></description>
			<content:encoded><![CDATA[<p>No, this is not a "it's been a while"-post. You probably all know <a href="http://www.x-aviation.com/catalog/product_info.php?products_id=68">what I've been working on</a>.</p>
<p>Instead, this is a "fancy engineering stuff" post.</p>
<p>Let's discuss briefly how X-Plane knows where your planes is. X-Plane, as we all know, calculates the forces that act on your airplane. The force that the engine applies to your airframe, for example. When you think back to your 9th grade physics class, you will recall that force is mass times acceleration. Or in other words, if you assume the mass of the airplane constant, force is a direct measure for the acceleration of your airplane.</p>
<p>Now recall that when you integrate acceleration over time, you get the speed. So by knowing the forces that X-Plane calculates based on the effect of the air on your plane, X-Plane knows the acceleration on your plane, and if you step forward a little discrete timestep ("one frame") and integrate this acceleration over time, X-Plane knows the speed of your plane.</p>
<p>Position (or, more accurately, distance) is velocity integrated over time. So when you progress another little discrete timestep and integrate the speed, you get the distance the plane has travelled. Add this distance to the point where your flight started and voila, X-Plane knows where your plane is now.</p>
<p>Okay, why do I care about this? When developing plugins for simulating, say, an FMC, I come across the need to know several parameters all the time, and these are, among others, position, groundspeed and true track (in X-Plane's jargon called "hpath"). The question I was asking myself was "I can get this out of the datarefs, of course. But could I possibly get this data like the real units do, from accelerometers and gyros?"</p>
<p>So what I tried to do is: Get the position out of X-Plane using ONLY a simulated accelerometer. The accelerometer is easy: X-Plane provides three datarefs to get the three local accelerations (sim/flightmodel/position/local_ax, .../local_ay, .../local_az).</p>
<p>So starting with nothing but an initial position and heading, I set up a flightloop callback that is called every frame, and in each callback I did what I know X-Plane must also do: Integrate the local accelerations twice and propagate from the last known position.</p>
<p>The first approach was like this:</p>
<ul>
<li>get speed by <a href="http://en.wikipedia.org/wiki/Euler_method">explicit Euler integration</a> of the acceleration</li>
<li>get distance by another explicit Euler integration of the speed</li>
<li>calculate the Place/Bearing/Distance point from the last known location (in Lat/Lon) by using the last known hpath and the distance I just calculated</li>
<li>Set this PBD point as the new position and start over</li>
</ul>
<p>Now this proved to be a bad idea: Position of X-Plane and my calculated position diverged rather quickly. After a minute of flight, I was more than a mile off.</p>
<p>I decided to scratch all the fancy great circle maths (needed for the Lat/Lon calculation), and stay in X-Plane's OpenGL coordinate system as long as I could.</p>
<p>My new approach was calculating the position entirely in this coordinate system and use <a href="http://www.xsquawkbox.net/xpsdk/mediawiki/XPLMLocalToWorld">XPLMLocalToWorld() </a>only as a finalizer when displaying the coordinates.</p>
<p>Much better! I was down to like a mile per 10 minutes of flight. Completely useless if you want to cross the pond based on this navigation, but hey, I'm learning here!</p>
<p>Now I began messing with the integration methods. Explicit Euler is a very rough approximation. I briefly thought about using some pre-calculations and using a <a href="http://en.wikipedia.org/wiki/Runge%E2%80%93Kutta_method">Runge-Kutta</a> integration, but then I thought I could just save the last acceleration data in a list and use a multistep method. <a href="http://en.wikipedia.org/wiki/Adams_Bashforth#Multistep_Method_Families">Adams-Bashfort</a> is the most straightforward to use.</p>
<p>So now I had my setup:</p>
<ul>
<li>push the acceleration into the list of acceleration history (and drop the oldest out of the history)</li>
<li>get speed by an Adams-Bashfort integration of the acceleration history</li>
<li>push this speed into the speed history and drop the oldest speed</li>
<li>do another Adams-Bashfort integration, this time on the speed history, which gives the travelled distance</li>
<li>add the travelled distanced onto the local OpenGL coordinates</li>
<li>transform to world coordinates and write those to datarefs</li>
</ul>
<p>The result is w00t! I flew the little Cirrus jet in bumpy weather for like an hour, before calculating the difference between my position and X-Plane's. The difference was less than 500 meters. Now this is a navigation system you can fly cross-the-pond with!</p>
<p>So what is all this about? It's the proof that you can simulate navigation in X-Plane WITHOUT using all the data that X-Plane gives you, but you don't have in real life applications. An FMS in the real world can't ask the plane for the groundspeed (unless you have a GPS receiver, of course), it can only ask accelerometers, laser gyros, air data sensors, etc.<br />
What my little experiment shows, is that you can do this in X-Plane and simulate an Inertial Reference Unit that allows you to navigate based solely on the output of the three datarefs, our simulated accelerometer.</p>
<p>However, there is one small problem you have to catch: X-Plane changes it's openGL reference frame as you travel (everytime you see new scenery being loaded, there also occurs a shift in the coordinate reference). So I need a little trick: Watch the datarefs for the reference point, and if they change, do an XPLMWorldToLocal() transform of my estimated position and overwrite my integrated position with these new local coordinates. Note that this does NOT reset the position to the "true" position, it just changes the reference frame in which my second integration is running.</p>
<p>So now on to even more advanced FMS simulations for X-Plane!</p>


	<a rel='nofollow'  href='http://delicious.com/post?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fanalyzing-how-x-plane-propagates-your-position%2F&amp;title=Analyzing%20how%20X-Plane%20propagates%20your%20position&amp;notes=' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/delicious.png' title='del.icio.us' alt='del.icio.us' class='' /></a>
	<a rel='nofollow'  href='http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fanalyzing-how-x-plane-propagates-your-position%2F&amp;title=Analyzing%20how%20X-Plane%20propagates%20your%20position&amp;bodytext=' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/digg.png' title='Digg' alt='Digg' class='' /></a>
	<a rel='nofollow'  href='mailto:?subject=Analyzing%20how%20X-Plane%20propagates%20your%20position&amp;body=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fanalyzing-how-x-plane-propagates-your-position%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/email_link.png' title='email' alt='email' class='' /></a>
	<a rel='nofollow'  href='http://www.facebook.com/share.php?u=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fanalyzing-how-x-plane-propagates-your-position%2F&amp;t=Analyzing%20how%20X-Plane%20propagates%20your%20position' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/facebook.png' title='Facebook' alt='Facebook' class='' /></a>
	<a rel='nofollow'  href='http://www.google.com/reader/link?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fanalyzing-how-x-plane-propagates-your-position%2F&amp;title=Analyzing%20how%20X-Plane%20propagates%20your%20position&amp;srcURL=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fanalyzing-how-x-plane-propagates-your-position%2F&amp;srcTitle=X-Developer+Cross-platform+development+in+C%2B%2B%2C+Flight+Simulation' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/googlebuzz.png' title='Google Buzz' alt='Google Buzz' class='' /></a>
	<a rel='nofollow'  href='http://identi.ca/notice/new?status_textarea=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fanalyzing-how-x-plane-propagates-your-position%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/identica.png' title='Identi.ca' alt='Identi.ca' class='' /></a>
	<a rel='nofollow'  href='http://www.mister-wong.com/addurl/?bm_url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fanalyzing-how-x-plane-propagates-your-position%2F&amp;bm_description=Analyzing%20how%20X-Plane%20propagates%20your%20position&amp;plugin=soc' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/misterwong.png' title='MisterWong' alt='MisterWong' class='' /></a>
	<a rel='nofollow'  href='http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fanalyzing-how-x-plane-propagates-your-position%2F&amp;t=Analyzing%20how%20X-Plane%20propagates%20your%20position' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/myspace.png' title='MySpace' alt='MySpace' class='' /></a>
	<a rel='nofollow'  href='http://promote.orkut.com/preview?nt=orkut.com&amp;du=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fanalyzing-how-x-plane-propagates-your-position%2F&amp;tt=Analyzing%20how%20X-Plane%20propagates%20your%20position' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/orkut.png' title='Orkut' alt='Orkut' class='' /></a>
	<a rel='nofollow'  href='http://www.printfriendly.com/print?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fanalyzing-how-x-plane-propagates-your-position%2F&amp;partner=sociable' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/printfriendly.png' title='Print' alt='Print' class='' /></a>
	<a rel='nofollow'  href='http://reddit.com/submit?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fanalyzing-how-x-plane-propagates-your-position%2F&amp;title=Analyzing%20how%20X-Plane%20propagates%20your%20position' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/reddit.png' title='Reddit' alt='Reddit' class='' /></a>
	<a rel='nofollow'  href='http://philippmuenzel.de/wordpress/feed/' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/rss.png' title='RSS' alt='RSS' class='' /></a>
	<a rel='nofollow'  href='http://slashdot.org/bookmark.pl?title=Analyzing%20how%20X-Plane%20propagates%20your%20position&amp;url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fanalyzing-how-x-plane-propagates-your-position%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/slashdot.png' title='Slashdot' alt='Slashdot' class='' /></a>
	<a rel='nofollow'  href='http://www.stumbleupon.com/submit?url=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fanalyzing-how-x-plane-propagates-your-position%2F&amp;title=Analyzing%20how%20X-Plane%20propagates%20your%20position' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/stumbleupon.png' title='StumbleUpon' alt='StumbleUpon' class='' /></a>
	<a rel='nofollow'  href='http://technorati.com/faves?add=http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fanalyzing-how-x-plane-propagates-your-position%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/technorati.png' title='Technorati' alt='Technorati' class='' /></a>
	<a rel='nofollow'  href='http://twitter.com/home?status=Analyzing%20how%20X-Plane%20propagates%20your%20position%20-%20http%3A%2F%2Fphilippmuenzel.de%2Fwordpress%2Fanalyzing-how-x-plane-propagates-your-position%2F' ><img src='http://philippmuenzel.de/wordpress/wp-content/plugins/one-social/images/default/16/twitter.png' title='Twitter' alt='Twitter' class='' /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://philippmuenzel.de/wordpress/analyzing-how-x-plane-propagates-your-position/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

