<?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>Semipol Blog</title>
	<atom:link href="http://www.semipol.de/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.semipol.de</link>
	<description>Wer braucht schon Untertitel?</description>
	<lastBuildDate>Fri, 27 Aug 2010 10:30:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Menü Titanic</title>
		<link>http://www.semipol.de/?p=282</link>
		<comments>http://www.semipol.de/?p=282#comments</comments>
		<pubDate>Fri, 27 Aug 2010 10:30:55 +0000</pubDate>
		<dc:creator>languitar</dc:creator>
				<category><![CDATA[Uni]]></category>
		<category><![CDATA[Mensa]]></category>
		<category><![CDATA[Speiseplan]]></category>

		<guid isPermaLink="false">http://www.semipol.de/?p=282</guid>
		<description><![CDATA[Speiseplan gestern in der Mensa: Frühlingsröllchen, Chili-Pfeffer-Dip, Reis, Eisberg mit Möhren, Kokosquark]]></description>
			<content:encoded><![CDATA[<p>Speiseplan gestern in der Mensa:</p>
<p>Frühlingsröllchen, Chili-Pfeffer-Dip, Reis, <em>Eisberg</em> mit Möhren, Kokosquark</p>
]]></content:encoded>
			<wfw:commentRss>http://www.semipol.de/?feed=rss2&amp;p=282</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ignoring Warnings from System Headers</title>
		<link>http://www.semipol.de/?p=275</link>
		<comments>http://www.semipol.de/?p=275#comments</comments>
		<pubDate>Fri, 20 Aug 2010 11:43:11 +0000</pubDate>
		<dc:creator>languitar</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[C/C++]]></category>
		<category><![CDATA[CMake]]></category>
		<category><![CDATA[GCC]]></category>

		<guid isPermaLink="false">http://www.semipol.de/?p=275</guid>
		<description><![CDATA[Compiling C and C++ code with the highest warning levels is a good practice and helps spotting potential errors. For GCC the flags -Wall -Wextra will generate a lot of useful warning messages about unused parameters etc. Unfortunately, this is not the common practice and often the own compiler settings concerning the warning level results [...]]]></description>
			<content:encoded><![CDATA[<p>Compiling C and C++ code with the highest warning levels is a good practice and helps spotting potential errors. For GCC the flags</p>
<pre class="brush: plain;">
-Wall -Wextra
</pre>
<p>will generate a lot of useful warning messages about unused parameters etc.<br />
Unfortunately, this is not the common practice and often the own compiler settings concerning the warning level results in dozens of warnings from system headers on which the own code relies, making it impossible to spot warnings from your own code in the endless mass of console output.<br />
Fortunately, GCC has a way to ignore warnings from foreign headers. Instead of using <code>-I</code> to specify an include path, <code>-isystem</code> tells the compiler to treat the includes from the given path as system headers where no warnings should be reported.</p>
<p>If CMake is used to create the Makefile, a special argument to the <code>INCLUDE_DIRECTORIES</code> function generates these compiler flags:</p>
<pre class="brush: plain;">
INCLUDE_DIRECTORIES(SYSTEM /usr/include /and/other /system/paths)
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.semipol.de/?feed=rss2&amp;p=275</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unused Parameters in C++</title>
		<link>http://www.semipol.de/?p=271</link>
		<comments>http://www.semipol.de/?p=271#comments</comments>
		<pubDate>Mon, 09 Aug 2010 21:05:27 +0000</pubDate>
		<dc:creator>languitar</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[C/C++]]></category>

		<guid isPermaLink="false">http://www.semipol.de/?p=271</guid>
		<description><![CDATA[Just some quick thought on how to handle compiler warnings about unused parameters in C++ code. While these warnings are helpful most of the time, sometimes you simply have to ignore a parameter that is required by an interface definition. Then you got three solutions to remove the warning: Change the compiler flags. The worst [...]]]></description>
			<content:encoded><![CDATA[<p>Just some quick thought on how to handle compiler warnings about unused parameters in C++ code. While these warnings are helpful most of the time, sometimes you simply have to ignore a parameter that is required by an interface definition. Then you got three solutions to remove the warning:</p>
<ol>
<li>Change the compiler flags. The worst solution. In other cases these warnings are really helpful. Generally I really like to compile with the highest warning level. Most of the warnings (at least for GCC) really have something to tell.</li>
<li>Use a macro to flag a variable as being unused, e.g. from Qt:
<pre class="brush: cpp;">
foo(int aParameter) {
    Q_UNUSED(aParameter)
}
</pre>
<p>Eventhough this looks like a reasonable solution it has the drawback of having a potential for confusion.  Maybe sometime later you need the parameter but forget to remove the Q_UNUSED macro, hence generating something like this:</p>
<pre class="brush: cpp;">
foo(int aParameter) {
    Q_UNUSED(aParameter)
    // 30 lines of other method code
    int anotherVariable = 30 * aParameter;
}
</pre>
<p>Suddenly your code documents that a variable isn&#8217;t used but actually it is and the compiler can&#8217;t detect this error.</li>
<li>Simply comment the variable name:
<pre class="brush: cpp; highlight: [3];">
foo(int /*aParameter*/) {
    // 30 lines of other method code
    int anotherVariable = 30 * aParameter;
}
</pre>
<p>Now the warning is gone, too and the compiler can detect either the illegal use of the variable in line three or the illegal statement that this variable is unused by purpose.
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.semipol.de/?feed=rss2&amp;p=271</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CMake: installing headers and preserving the directory structure</title>
		<link>http://www.semipol.de/?p=251</link>
		<comments>http://www.semipol.de/?p=251#comments</comments>
		<pubDate>Mon, 31 May 2010 13:47:23 +0000</pubDate>
		<dc:creator>languitar</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[CMake]]></category>
		<category><![CDATA[install]]></category>

		<guid isPermaLink="false">http://www.semipol.de/?p=251</guid>
		<description><![CDATA[CMake doesn&#8217;t provide a dedicated way to install header files (except for mac). What I wanted to do was to install all headers of my project using the same directory structure as in the source tree. This isn&#8217;t as easy as it sounds. Assume you have a list of header files: SET(HS folder/test.h folder/other/test2.h) A [...]]]></description>
			<content:encoded><![CDATA[<p>CMake doesn&#8217;t provide a dedicated way to install header files (except for mac). What I wanted to do was to install all headers of my project using the same directory structure as in the source tree. This isn&#8217;t as easy as it sounds. Assume you have a list of header files:</p>
<pre class="brush: plain;">
SET(HS folder/test.h folder/other/test2.h)
</pre>
<p>A simple call to <code>INSTALL</code> doesn&#8217;t preserve the folder structure:</p>
<pre class="brush: plain;">
INSTALL(FILES ${HS} DESTINATION include)
</pre>
<p>This results in all files being directly under <code>$prefix/include</code>.</p>
<p>To preserve the structure you can use this simple macro:</p>
<pre class="brush: plain;">
MACRO(INSTALL_HEADERS_WITH_DIRECTORY HEADER_LIST)

FOREACH(HEADER ${${HEADER_LIST}})
    STRING(REGEX MATCH &quot;(.*)[/\\]&quot; DIR ${HEADER})
    INSTALL(FILES ${HEADER} DESTINATION include/${DIR})
ENDFOREACH(HEADER)

ENDMACRO(INSTALL_HEADERS_WITH_DIRECTORY)

INSTALL_HEADERS_WITH_DIRECTORY(HS)
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.semipol.de/?feed=rss2&amp;p=251</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using googlemock with the Boost Test Library</title>
		<link>http://www.semipol.de/?p=237</link>
		<comments>http://www.semipol.de/?p=237#comments</comments>
		<pubDate>Tue, 13 Apr 2010 19:03:54 +0000</pubDate>
		<dc:creator>languitar</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[boost]]></category>
		<category><![CDATA[boost.test]]></category>
		<category><![CDATA[C/C++]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[googlemock]]></category>
		<category><![CDATA[Unit Testing]]></category>

		<guid isPermaLink="false">http://www.semipol.de/?p=237</guid>
		<description><![CDATA[googlemock is a framework that allows generating mock objects for unit tests. I&#8217;ve decided to use this framework as it looks wells designed and maintained. The default is to use googlemock with Google&#8217;s unit testing framework googletest, but as I was already using the Boost Testing Library, I was searching for a solution to use [...]]]></description>
			<content:encoded><![CDATA[<p><a title="googlemock" href="http://code.google.com/p/googlemock/">googlemock</a> is a framework that allows generating mock objects for unit tests. I&#8217;ve decided to use this framework as it looks wells designed and maintained. The default is to use googlemock with Google&#8217;s unit testing framework <a href="http://code.google.com/p/googletest/">googletest</a>, but as I was already using the <a title="Boost Testing Library" href="http://www.boost.org/doc/libs/1_42_0/libs/test/doc/html/index.html">Boost Testing Library</a>, I was searching for a solution to use googlemock in Boost Test. Fortunately this isn&#8217;t to hard to accomplish. You only have to create a TestEventListener that forwards all results supplied by googletest to the Boost Testing Framework:</p>
<pre class="brush: cpp;">
#include &lt;sstream&gt;

#include &lt;log4cxx/basicconfigurator.h&gt;

#include &lt;boost/test/included/unit_test.hpp&gt;

#include &lt;gtest/gtest.h&gt;
#include &lt;gmock/gmock.h&gt;

using namespace std;
using namespace testing;

class BoostTestAdapter: public EmptyTestEventListener {

    virtual void OnTestStart(const TestInfo&amp; /*testInfo*/) {
    }

    virtual void OnTestPartResult(
            const TestPartResult&amp; testPartResult) {
        if (testPartResult.failed()) {
            stringstream s;
            s &lt;&lt; &quot;Mock test failed (file = '&quot;
              &lt;&lt; testPartResult.file_name()
              &lt;&lt; &quot;', line = &quot;
              &lt;&lt; testPartResult.line_number()
              &lt;&lt; &quot;): &quot;
              &lt;&lt; testPartResult.summary();
            BOOST_FAIL(s.str());
        }
    }

    virtual void OnTestEnd(
            const ::testing::TestInfo&amp; /*testInfo*/) {
    }

};
</pre>
<p>Every time a partial test result of googletest is reported that fails, <code>BOOST_FAIL</code> is called.</p>
<p>The only thing that is left now is to install the newly created adapter in the googletest framework and initialize it properly. This can be done using a fixture class in Boost Test:</p>
<pre class="brush: cpp;">
class TestFixture {
public:

    TestFixture() {

        InitGoogleMock(
                &amp;boost::unit_test::framework::master_test_suite().argc,
                boost::unit_test::framework::master_test_suite().argv);
        TestEventListeners &amp;listeners =
                UnitTest::GetInstance()-&gt;listeners();
        // this removes the default error printer
        delete listeners.Release(
                listeners.default_result_printer());
        listeners.Append(new BoostTestAdapter);

    }

    ~TestFixture() {
        // nothing to tear down
    }

};
BOOST_GLOBAL_FIXTURE(TestFixture)
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.semipol.de/?feed=rss2&amp;p=237</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Doxygen Support in Eclipse CDT</title>
		<link>http://www.semipol.de/?p=230</link>
		<comments>http://www.semipol.de/?p=230#comments</comments>
		<pubDate>Mon, 12 Apr 2010 19:31:04 +0000</pubDate>
		<dc:creator>languitar</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[C/C++]]></category>
		<category><![CDATA[CDT]]></category>
		<category><![CDATA[Documentation]]></category>
		<category><![CDATA[Doxygen]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[IDE]]></category>

		<guid isPermaLink="false">http://www.semipol.de/?p=230</guid>
		<description><![CDATA[Since a long time I was wondering why CDT, the C++ support for the Eclipse IDE, doesn&#8217;t have a decent support for highlighting and creating comments in the Doxygen format. Today, while searching for customizable code templates per project, I found the setting to enable Doxygen support. It is located in the project properties at [...]]]></description>
			<content:encoded><![CDATA[<p>Since a long time I was wondering why <a title="CDT" href="http://www.eclipse.org/cdt/">CDT</a>, the C++ support for the <a title="Eclipse IDE" href="http://eclipse.org/">Eclipse IDE</a>, doesn&#8217;t have a decent support for highlighting and creating comments in the <a title="Doxygen" href="http://www.stack.nl/~dimitri/doxygen/">Doxygen</a> format. Today, while searching for customizable code templates per project, I found the setting to enable Doxygen support. It is located in the project properties at &#8220;C/C++ General&#8221;. Not that intuitive&#8230;</p>
<div id="attachment_231" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.semipol.de/wp-content/uploads/2010/04/eclipse-cdt-doxygen.png"><img class="size-medium wp-image-231" title="eclipse-cdt-doxygen" src="http://www.semipol.de/wp-content/uploads/2010/04/eclipse-cdt-doxygen-300x202.png" alt="" width="300" height="202" /></a><p class="wp-caption-text">Enable Doxygen support for Eclipse CDT.</p></div>
<p>With this, Doxygen tags in comments are highlighted and comments with parameters etc. are generated automatically like in Java. What&#8217;s still missing is the auto-formatter support for these comments and tag-completion.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.semipol.de/?feed=rss2&amp;p=230</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flickr machine tags for lenses</title>
		<link>http://www.semipol.de/?p=225</link>
		<comments>http://www.semipol.de/?p=225#comments</comments>
		<pubDate>Sat, 03 Apr 2010 17:03:35 +0000</pubDate>
		<dc:creator>languitar</dc:creator>
				<category><![CDATA[Fotografie]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[flickr]]></category>
		<category><![CDATA[Fotos]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.semipol.de/?p=225</guid>
		<description><![CDATA[I&#8217;ve added a simple script to the software section that allows adding machine tags to photos on your Flickr photo stream based on exif information found in the image. I use this script to tag photos with lens information but in general it can be used for every type of tag to add that can [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve added a simple script to the <a title="Software" href="?page_id=194">software section</a> that allows adding machine tags to photos on your Flickr photo stream based on exif information found in the image. I use this script to tag photos with lens information but in general it can be used for every type of tag to add that can be deduced from the exif information.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.semipol.de/?feed=rss2&amp;p=225</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C64 Revival &#8211; Pong Evolutions</title>
		<link>http://www.semipol.de/?p=186</link>
		<comments>http://www.semipol.de/?p=186#comments</comments>
		<pubDate>Sun, 08 Nov 2009 20:18:28 +0000</pubDate>
		<dc:creator>languitar</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Uni]]></category>
		<category><![CDATA[assembler]]></category>
		<category><![CDATA[c64]]></category>
		<category><![CDATA[pong]]></category>

		<guid isPermaLink="false">http://www.semipol.de/?p=186</guid>
		<description><![CDATA[Last year at university I was participating at course for game development on a C64 machine. Let&#8217;s get back to the 80s&#8230; Most of the time it was fun. But it was also challenging for us to develop thousands of lines of code in Assembler. Something completely different to the object oriented programming I do [...]]]></description>
			<content:encoded><![CDATA[<p>Last year at university I was participating at course for game development on a C64 machine. Let&#8217;s get back to the 80s&#8230; Most of the time it was fun. But it was also challenging for us to develop thousands of lines of code in Assembler. Something completely different to the object oriented programming I do normally.</p>
<p>The game we developed is based on the well known Pong but extends it with some interesting tweaks like two paddles per player etc.</p>
<p>Here are the downloads:</p>
<ul>
<li><a href="http://www.semipol.de/wp-content/uploads/2009/11/PongEvolutions.d64">PongEvolutions d64 image</a></li>
<li><a href="http://www.semipol.de/wp-content/uploads/2009/11/booklet.pdf">PongEvolutions Booklet / Manual</a></li>
</ul>
<p>The game should be playable on every modern C64 emulator or the real one. It was developed on <a title="vice" href="http://www.viceteam.org/">vice</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.semipol.de/?feed=rss2&amp;p=186</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Earth: Probleme beim Verarbeiten von Tracks</title>
		<link>http://www.semipol.de/?p=182</link>
		<comments>http://www.semipol.de/?p=182#comments</comments>
		<pubDate>Sun, 27 Sep 2009 19:35:14 +0000</pubDate>
		<dc:creator>languitar</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[Google Earth]]></category>
		<category><![CDATA[gpx]]></category>
		<category><![CDATA[kml]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.semipol.de/?p=182</guid>
		<description><![CDATA[In die aktuelle Linux-Version von Google Earth (5.1.3506.3999) scheint sich ein recht übler Bug, was das Verarbeiten von Tracks angeht, eingeschlichen zu haben.  Bisher hatte ich nie Probleme, GPX-Dateien von meine GPS zu Laden, doch als ich es heute zum ersten Mal mit dieser Version versucht hab, war mein Track nur eine senkrechte Linie auf [...]]]></description>
			<content:encoded><![CDATA[<p><!-- p, li { white-space: pre-wrap; } -->In die aktuelle Linux-Version von Google Earth (5.1.3506.3999) scheint sich ein recht übler Bug, was das Verarbeiten von Tracks angeht, eingeschlichen zu haben.  Bisher hatte ich nie Probleme, GPX-Dateien von meine GPS zu Laden, doch als ich es heute zum ersten Mal mit dieser Version versucht hab, war mein Track nur eine senkrechte Linie auf der Karte. Auch eine mit GPS-Babel nach *.kml konvertierte Variante hatte dieses Problem. Was hingegen funktioniert hat, war das Erstellen, Speichern und erneute Laden eines Tracks in Google Earth. Ein Vergleich meiner KML-Datei mit der von Google Earth selbst generierten hat einen netten Fehler aufgedeckt: Google hat wohl etwas zu viel i18n oder l10n gemacht, so dass beim Erstellen und Laden von Dateien das landestypische Dezimalzeichen (also mit deutscher Locale ein Komma) benutzt wird. Laut GPX- und KML-Spezifikation ist es natürlich totaler Müll, Koordinaten in der Form 52,xxx zu benutzen. Folgender Trick hat Google Earth dann davon überzeugt doch einen Punkt als Dezimaltrenner zu benutzen:<br />
<code>LANG="" googleearth</code><br />
So startet Google Earth auf Englisch.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.semipol.de/?feed=rss2&amp;p=182</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Geocaching II</title>
		<link>http://www.semipol.de/?p=168</link>
		<comments>http://www.semipol.de/?p=168#comments</comments>
		<pubDate>Sun, 16 Aug 2009 21:37:17 +0000</pubDate>
		<dc:creator>languitar</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[geocaching]]></category>

		<guid isPermaLink="false">http://www.semipol.de/?p=168</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[
<a href='http://www.semipol.de/?attachment_id=169' title='DSC00102'><img width="150" height="150" src="http://www.semipol.de/wp-content/uploads/2009/08/DSC00102-150x150.jpg" class="attachment-thumbnail" alt="DSC00102" title="DSC00102" /></a>
<a href='http://www.semipol.de/?attachment_id=170' title='DSC00104'><img width="150" height="150" src="http://www.semipol.de/wp-content/uploads/2009/08/DSC00104-150x150.jpg" class="attachment-thumbnail" alt="DSC00104" title="DSC00104" /></a>
<a href='http://www.semipol.de/?attachment_id=171' title='DSC00107'><img width="150" height="150" src="http://www.semipol.de/wp-content/uploads/2009/08/DSC00107-150x150.jpg" class="attachment-thumbnail" alt="DSC00107" title="DSC00107" /></a>
<a href='http://www.semipol.de/?attachment_id=172' title='DSC00110'><img width="150" height="150" src="http://www.semipol.de/wp-content/uploads/2009/08/DSC00110-150x150.jpg" class="attachment-thumbnail" alt="DSC00110" title="DSC00110" /></a>
<a href='http://www.semipol.de/?attachment_id=173' title='DSC00116'><img width="150" height="150" src="http://www.semipol.de/wp-content/uploads/2009/08/DSC00116-150x150.jpg" class="attachment-thumbnail" alt="DSC00116" title="DSC00116" /></a>
<a href='http://www.semipol.de/?attachment_id=174' title='DSC00118'><img width="150" height="150" src="http://www.semipol.de/wp-content/uploads/2009/08/DSC00118-150x150.jpg" class="attachment-thumbnail" alt="DSC00118" title="DSC00118" /></a>
<a href='http://www.semipol.de/?attachment_id=175' title='DSC00120'><img width="150" height="150" src="http://www.semipol.de/wp-content/uploads/2009/08/DSC00120-150x150.jpg" class="attachment-thumbnail" alt="DSC00120" title="DSC00120" /></a>
<a href='http://www.semipol.de/?attachment_id=176' title='DSC00126'><img width="150" height="150" src="http://www.semipol.de/wp-content/uploads/2009/08/DSC00126-150x150.jpg" class="attachment-thumbnail" alt="DSC00126" title="DSC00126" /></a>

]]></content:encoded>
			<wfw:commentRss>http://www.semipol.de/?feed=rss2&amp;p=168</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
