<?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"
	>

<channel>
	<title>Rioki's Corner</title>
	<atom:link href="http://www.rioki.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.rioki.org</link>
	<description>The awnser to rioki, the world and everyting.</description>
	<pubDate>Tue, 18 Nov 2008 21:07:00 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.1</generator>
	<language>en</language>
			<item>
		<title>Paper Prototyping my Wedding</title>
		<link>http://www.rioki.org/2008/10/18/paper-prototyping-my-wedding/</link>
		<comments>http://www.rioki.org/2008/10/18/paper-prototyping-my-wedding/#comments</comments>
		<pubDate>Sat, 18 Oct 2008 11:50:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[blog]]></category>

		<category><![CDATA[Paper Prototyping]]></category>

		<category><![CDATA[Real Life]]></category>

		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://www.rioki.org/?p=119</guid>
		<description><![CDATA[I am getting married soon and for that I had to design a proper settings arrangement.
I started by writing names down on a paper. But after a short time I only had a sub optimal solution, so I started to erase names. Very shortly after I had a big mess but no seating arrangement. I [...]]]></description>
			<content:encoded><![CDATA[<p>I am getting married soon and for that I had to design a proper settings arrangement.</p>
<p>I started by writing names down on a paper. But after a short time I only had a sub optimal solution, so I started to erase names. Very shortly after I had a big mess but no seating arrangement. I then thought hey when I have software probem that is hard to grasp I get paper, pen and scisors and make a paper prototype or CRC cards. So I put the names of the guests on pices of paper and aranged them aound paper tables on the floor. The advantage was that you could swap and move guests around easyly.  I finally got a seeting arragement in under 10 minutes&#8230;</p>
<p>On think I learned was: <strong>paper prototypes are also good for real life problems</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rioki.org/2008/10/18/paper-prototyping-my-wedding/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Compiling GtkGlExt on Windows</title>
		<link>http://www.rioki.org/2008/09/21/compiling-gtkglext-on-windows/</link>
		<comments>http://www.rioki.org/2008/09/21/compiling-gtkglext-on-windows/#comments</comments>
		<pubDate>Sun, 21 Sep 2008 13:47:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[atricles]]></category>

		<category><![CDATA[blog]]></category>

		<category><![CDATA[3D]]></category>

		<category><![CDATA[Games]]></category>

		<category><![CDATA[Gtk]]></category>

		<guid isPermaLink="false">http://www.rioki.org/?p=113</guid>
		<description><![CDATA[I was developing a 3D sample application wit Gtkmm and GtkGlExtmm. I needed to provide Windows binaries and that literally yesterday.
The developers of Gtkmm provide a all inclusive SDK and runtime installer, so that was not an issue. They actually took over maintenance for the installer and updated it to 2.12. It used to be [...]]]></description>
			<content:encoded><![CDATA[<p>I was developing a 3D sample application wit <a title="Gtkmm" href="http://www.gtkmm.org">Gtkmm</a> and <a title="GtkGlExtmm" href="http://gtkglext.sourceforge.net/">GtkGlExtmm</a>. I needed to provide Windows binaries and that literally yesterday.</p>
<p>The developers of Gtkmm provide a all inclusive <a title="Gtkmm on Microsoft Windows" href="http://live.gnome.org/gtkmm/MSWindows">SDK and runtime installer</a>, so that was not an issue. They actually took over maintenance for the installer and updated it to 2.12. It used to be a third party product that used in parts the <a title="Glade for Win32" href="http://gladewin32.sourceforge.net/">glade for windows</a> installer for <a title="GTK+" href="http://www.gtk.org">Gtk+</a> and was always a version old. The problem was that GtkGlExt and GtkGlExtmm is not bundled with that installer, unlike other things like libxml++ are bundled with it.</p>
<p>On the side of GtkGlExt, there was no real help, since the binaries provided for Windows are outdated and only for GtkGlExt and not GtkGlExtmm. So I had to install the two libraries from source.</p>
<p>The last time I seriously developed under Windows I used <a title="Cygwin" href="http://www.cygwin.com">Cygwin</a> and cross built to mingw32 (native Windows) target. The reason was that Cygwin provides all necessary tools in a sufficiently recent version to bootstrap any Automake/Autoconf project and proceeded replacements for POSIX only features.</p>
<p>So after installing the Cygwin with the bare bones development tools, I started to build GtkGlExt. Of course it failed to build the test program in configure. I disabled the test and got it almost to compile. I fixed on odd rule in a Makefile and it finally worked fine. The same was for GtkGlExtmm. Bot took forever to complete and needed a bit of touching up. Finally I got onto my actual program. It compiled fine and then crashed with a segmentation fault. At that point my hart skipped a beat.</p>
<p>The reason for the test to fail, seemed to have something to do with my general setup. The first odd thing was that I needed the cygwin.dll, though I had cross built to mingw32. Although this is a common problem with C++ programs, it normally is not an issue. So I installed gdb and painfully stepped through the program, only to find out that I crashed in some trivial code in Glib::RefPtr, Glibmm&#8217;s smart pointer class. This smelled of version and compiler settings mismatch; actually It stank. At that point confused and irritated, I did not know how to really fix the problem.</p>
<p>I looked at the Gtk and co. binaries and found out that they where perfectly mingw32 and had zero cygwin. I then looked at my program and it needed cygwin. Since I did not have any POSIX code, the need should not have been. I figured out that It must have not used mingw32 for everything.</p>
<p>Since I only wanted to compile GtkGlExt and my program, I figured I did not need anything that MinGW and MSys did not provide. So I decided to install <a title="MinGW" href="http://www.mingw.org/">MinGW </a>with MSys.</p>
<p>Configuring GtkGlExt went fine, even the test programs worked. This spurred some hope that I would get it done before this universe ends. The compile of GtkGlExt failed because some code generation scripts used from Glib needed perl. So I installed perl and cyrpt from the MSys packages and finally all went fine.</p>
<p>At first GtkGlExtmm did not work that fine. The reason was that there was a stray character in all CXXFLAGS within the Makefiles. Suddenly I remembered the other reason why I used cygwin last time. Well I found the stray SOH (Start of Heading) character and replaced it with a space. Now all worked fine.</p>
<p>I finally got my program to compile and run. Boy was I relived as this workd. The best part is I now have a sane build envirnement on my Windows PC for Gtk, something I pushed off for a relative long while.</p>
<h2>HOWTO Compile GtkGlExt on Windows</h2>
<p>You need:</p>
<ul>
<li><a href="http://sourceforge.net/project/showfiles.php?group_id=2435&amp;package_id=240780">Automated MinGW Installer</a>:  			<a id="showfiles_download_file_pkg0_1rel0_1" class="sfx_qalogger_element sfx_qalogger_clickable" onclick="window.location='/project/downloading.php?group_id=2435&amp;use_mirror=garr&amp;filename=MinGW-5.1.4.exe&amp;'+Math.floor(Math.random()*100000000); return false;" href="http://downloads.sourceforge.net/mingw/MinGW-5.1.4.exe?modtime=1209244789&amp;big_mirror=1">MinGW-5.1.4.exe</a></li>
<li><a id="pkg0_0" class="tup" onclick="report_expand('pkg0'); void(0); return false;" href="http://sourceforge.net/project/showfiles.php?group_id=2435&amp;package_id=24963#">MSYS Base System</a>: <a id="showfiles_download_file_pkg0_2rel0_1" class="sfx_qalogger_element sfx_qalogger_clickable" onclick="window.location='/project/downloading.php?group_id=2435&amp;use_mirror=garr&amp;filename=MSYS-1.0.10.exe&amp;'+Math.floor(Math.random()*100000000); return false;" href="http://downloads.sourceforge.net/mingw/MSYS-1.0.10.exe?modtime=1079444447&amp;big_mirror=1">MSYS-1.0.10.exe</a><span class="sfx_qalogger_element sfx_qalogger_clickable"> (core, C++ and make)</span><a id="showfiles_download_file_pkg0_2rel0_1" class="sfx_qalogger_element sfx_qalogger_clickable" onclick="window.location='/project/downloading.php?group_id=2435&amp;use_mirror=garr&amp;filename=MSYS-1.0.10.exe&amp;'+Math.floor(Math.random()*100000000); return false;" href="http://downloads.sourceforge.net/mingw/MSYS-1.0.10.exe?modtime=1079444447&amp;big_mirror=1"><br />
</a></li>
<li>From the <a href="http://sourceforge.net/project/showfiles.php?group_id=2435&amp;package_id=67879">MSYS Supplementary Tools</a> you need  			<a id="showfiles_download_file_pkg0_1rel0_63" class="sfx_qalogger_element sfx_qalogger_clickable" onclick="window.location='/project/downloading.php?group_id=2435&amp;use_mirror=heanet&amp;filename=perl-5.6.1-MSYS-1.0.11-1.tar.bz2&amp;'+Math.floor(Math.random()*100000000); return false;" href="http://downloads.sourceforge.net/mingw/perl-5.6.1-MSYS-1.0.11-1.tar.bz2?modtime=1206455338&amp;big_mirror=1">perl-5.6.1-MSYS-1.0.11-1.tar.bz2</a> and <a id="showfiles_download_file_pkg0_1rel0_20" class="sfx_qalogger_element sfx_qalogger_clickable" onclick="window.location='/project/downloading.php?group_id=2435&amp;use_mirror=heanet&amp;filename=crypt-1.1-1-MSYS-1.0.11-1.tar.bz2&amp;'+Math.floor(Math.random()*100000000); return false;" href="http://downloads.sourceforge.net/mingw/crypt-1.1-1-MSYS-1.0.11-1.tar.bz2?modtime=1206481779&amp;big_mirror=1">crypt-1.1-1-MSYS-1.0.11-1.tar.bz2</a> (dependency for Perl)</li>
<li><a href="http://live.gnome.org/gtkmm/MSWindows">Gtkmm Windows SDK Installer</a>: <a href="http://ftp.gnome.org/pub/GNOME/binaries/win32/gtkmm/2.12/gtkmm-win32-devel-2.12.7-3.exe">gtkmm-win32-devel-2.12.7-3.exe</a></li>
<li>GtkGlExt Sources: <a id="showfiles_download_file_pkg0_1rel0_2" class="sfx_qalogger_element sfx_qalogger_clickable" onclick="window.location='/project/downloading.php?group_id=54333&amp;use_mirror=garr&amp;filename=gtkglext-1.2.0.tar.gz&amp;'+Math.floor(Math.random()*100000000); return false;" href="http://downloads.sourceforge.net/gtkglext/gtkglext-1.2.0.tar.gz?modtime=1139081517&amp;big_mirror=1">gtkglext-1.2.0.tar.gz</a></li>
<li>GtkGlExtmm Sources: <a id="showfiles_download_file_pkg0_1rel0_2" class="sfx_qalogger_element sfx_qalogger_clickable" onclick="window.location='/project/downloading.php?group_id=54333&amp;use_mirror=garr&amp;filename=gtkglextmm-1.2.0.tar.gz&amp;'+Math.floor(Math.random()*100000000); return false;" href="http://downloads.sourceforge.net/gtkglext/gtkglextmm-1.2.0.tar.gz?modtime=1141064842&amp;big_mirror=1">gtkglextmm-1.2.0.tar.gz</a></li>
</ul>
<ol>
<li>Install MinGW. This should be stright forward, but check that g++ and make are installed.</li>
<li>Install MSys. Again simple installer.</li>
<li>Copy the perl and crypt package to a place you find again, like C:\msys\1.0\home\username.</li>
<li>Open a MSys shell and type <strong>cd /</strong></li>
<li>Untar perl: <strong>tar -xjf /home/usename/perl-5.6.1-MSYS-1.0.11-1.tar.bz2</strong></li>
<li>Untar crypt:<strong> tar -xjf </strong><strong>/home/usename/</strong><strong>crypt-1.1-1-MSYS-1.0.11-1.tar.bz2</strong></li>
<li>Copy GtkGlExt and GtkGlExtmm source to a place find again. C:\msys\1.0\home\username.</li>
<li>In the MSys shell go the place with your sources: <strong>cd /home/username</strong></li>
<li>Set the environement variable PKG_CONFIG_PATH to msys local path: <strong>export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig</strong></li>
<li>Untar GtkGlExt: <strong>tar -xzf gtkglext-1.2.0.tar.gz</strong></li>
<li>Enter the GtkGlExt source tree:<strong> cd gtkglext-1.2.0</strong></li>
<li>Configure, build and install GtkGlExt:<strong> ./configure &amp;&amp; make &amp;&amp; make install</strong></li>
<li>Exit GtkGlExt source tree:<strong> cd ..</strong></li>
<li>Untar GtkGlExtmm:<strong> tar -xzf gtkglextmm-1.2.0.tar.gz</strong></li>
<li>Enter the GtkGlExtmm source tree:<strong> cd gtkglextmm-1.2.0</strong></li>
<li>Configure, build and install GtkGlExtmm: <strong>./configure &amp;&amp; make &amp;&amp; make install</strong></li>
</ol>
<p>Now you are done. You can find the binaries in C:\msys\1.0\local\bin, along with all other stuff required to build your application.</p>
<h2>Binary GtkGlExt</h2>
<p>Alternativly you can use my build result and downlaod <a href="http://www.rioki.org/wp-content/uploads/2008/09/gtkglextmm-120-win32tar.gz">gtkglextmm-120-win32.tar.gz</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rioki.org/2008/09/21/compiling-gtkglext-on-windows/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Cyclic Dependencies: Clean the Up!</title>
		<link>http://www.rioki.org/2008/09/14/cyclic-dependencies-clean-the-up/</link>
		<comments>http://www.rioki.org/2008/09/14/cyclic-dependencies-clean-the-up/#comments</comments>
		<pubDate>Sun, 14 Sep 2008 11:07:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[blog]]></category>

		<category><![CDATA[C++]]></category>

		<category><![CDATA[Programming]]></category>

		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://www.rioki.org/?p=111</guid>
		<description><![CDATA[Cyclic dependencies are a challenge for any build system and code to handle. But I you look closely at cyclic dependencies, in most if not all cases they are a structural problem and not a technical problem. Cyclic dependencies indicate in most cases either that two modules belong together or one module implements two tasks.
Let&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>Cyclic dependencies are a challenge for any build system and code to handle. But I you look closely at cyclic dependencies, in most if not all cases they are a structural problem and not a technical problem. Cyclic dependencies indicate in most cases either that two modules belong together or one module implements two tasks.</p>
<p>Let&#8217;s take a projcect I am currently working on. There are two modules, the Interpester and the Object Manager, both are cyclic dependent. The Interpreter implements a virtual machine. The Object Manager implementes object serialisation and low level buissness logic. The basic contollflow is as follows: Object Manager calls Interpreter to evaluate some value and to do this the Interpreter calls back into the Object Manager get values to a given object.</p>
<p>If you read the above paragraph cloasly you will notice that the Object Manager implements <em>&#8220;object serialisation and low level buissness logic&#8221;</em>. Well as you can see there are two tasks that can and should be split in two seperate modules. If they are split in three modules there are no cyclic denendencies.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rioki.org/2008/09/14/cyclic-dependencies-clean-the-up/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Hosted Apps on SourceForge</title>
		<link>http://www.rioki.org/2008/09/13/hosted-apps-on-sourceforge/</link>
		<comments>http://www.rioki.org/2008/09/13/hosted-apps-on-sourceforge/#comments</comments>
		<pubDate>Sat, 13 Sep 2008 11:16:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[blog]]></category>

		<category><![CDATA[Open Source]]></category>

		<category><![CDATA[Source Forge]]></category>

		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.rioki.org/?p=109</guid>
		<description><![CDATA[I just got a e-mail from SourceForge about a new feature: Hosted Apps.
Its actually not much, you get a softwate like MediaWiki installed on your webspace and they mantain and update it.
This is one of the most usefull featues, they developed, since setup and maintingin the web software can be quite time consuming and the [...]]]></description>
			<content:encoded><![CDATA[<p>I just got a e-mail from <a title="SourceForge" href="http://www.sourceforge.org">SourceForge</a> about a new feature: <strong>Hosted Apps</strong>.</p>
<p>Its actually not much, you get a softwate like <a title="MediaWiki" href="http://www.mediawiki.org">MediaWiki</a> installed on your webspace and they mantain and update it.</p>
<p>This is one of the most usefull featues, they developed, since setup and maintingin the web software can be quite time consuming and the website is what most people look at a open source project.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rioki.org/2008/09/13/hosted-apps-on-sourceforge/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Cleaning up for libqgl-0.1.0</title>
		<link>http://www.rioki.org/2008/09/06/cleaning-up-for-libqgl-010/</link>
		<comments>http://www.rioki.org/2008/09/06/cleaning-up-for-libqgl-010/#comments</comments>
		<pubDate>Sat, 06 Sep 2008 18:59:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[blog]]></category>

		<category><![CDATA[libQGL]]></category>

		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://www.rioki.org/?p=105</guid>
		<description><![CDATA[Development on libQGL is going into the final stretch for the libqgl-0.1.0 release, which is scheduled for end of September. To hold the release date I had to scale down the feature set. As a result I will only put 2D graphic, mouse and keyboard input and the logic framework into the release. I want [...]]]></description>
			<content:encoded><![CDATA[<p>Development on <a title="Quick Game Library" href="http://www.libqgl.org">libQGL</a> is going into the final stretch for the libqgl-0.1.0 release, which is <a href="http://www.libqgl.org/wiki/road_map">scheduled</a> for end of September. To hold the release date I had to scale down the feature set. As a result I will only put 2D graphic, mouse and keyboard input and the logic framework into the release. I want rather a few solid good features than many half cooked ones.</p>
<p>I moved the code from the experimental branch to the main trunk and stated removing all bits and pieces that are not a feature. The code starts really to look quite clean. I will spend the next two weeks cleaning an compleating the code.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rioki.org/2008/09/06/cleaning-up-for-libqgl-010/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Back to Worpress</title>
		<link>http://www.rioki.org/2008/09/05/back-to-worpress/</link>
		<comments>http://www.rioki.org/2008/09/05/back-to-worpress/#comments</comments>
		<pubDate>Fri, 05 Sep 2008 07:29:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[blog]]></category>

		<category><![CDATA[DokuWiki]]></category>

		<category><![CDATA[News]]></category>

		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.rioki.org/?p=103</guid>
		<description><![CDATA[After (ab)using DokuWiki as blog and CMS software for about two years, I have migrated back to Wordpress.
My move away from Worpress was based on the fact that a number of limitations in the software was inhibiting its use. The latest release is quite usable and as a result the abuse of DokuWiki, which is [...]]]></description>
			<content:encoded><![CDATA[<p>After (ab)using <a href="http://www.dokuwiki.org/">DokuWiki </a>as blog and CMS software for about two years, I have migrated back to <a href="http://wordpress.org/">Wordpress</a>.</p>
<p>My move away from Worpress was based on the fact that a number of limitations in the software was inhibiting its use. The latest release is quite usable and as a result the abuse of DokuWiki, which is a WIki software not a blog software is not that appealing. DokuWiki is still the best Wiki software I have seen, but you got to use the right tools for the right job.</p>
<p>While I am migrating the posts onto the new site, here is the old one: <a href="http://old.rioki.org">http://old.rioki.org</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rioki.org/2008/09/05/back-to-worpress/feed/</wfw:commentRss>
		</item>
		<item>
		<title>We Need to Send our Kids to University</title>
		<link>http://www.rioki.org/2008/07/18/we-need-to-send-our-kids-to-university/</link>
		<comments>http://www.rioki.org/2008/07/18/we-need-to-send-our-kids-to-university/#comments</comments>
		<pubDate>Fri, 18 Jul 2008 08:40:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[blog]]></category>

		<category><![CDATA[Education]]></category>

		<category><![CDATA[Politics]]></category>

		<guid isPermaLink="false">http://www.rioki.org/?p=59</guid>
		<description><![CDATA[Lately in Germany there is a debate about immigration of highly skilled people. The issue arises from the fact that, in contrast to other countries, Germany does not really have a immigration policy biased towards qualified people.
This is all good and fine. A industry nation needs qualified workers to sustain itself. But what I don&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>Lately in Germany there is a debate about immigration of highly skilled people. The issue arises from the fact that, in contrast to other countries, Germany does not really have a immigration policy biased towards qualified people.</p>
<p>This is all good and fine. A industry nation needs qualified workers to sustain itself. But what I don&#8217;t get is the fact that there are so many children with such a bad education.</p>
<p><strong>I believe that a industry nation needs to send at least 3/4 of its children to complete a university degree or else it will perish in the long run.</strong></p>
<p>Immigration of qualified workers will help in the short run but this can not be a long term solution. If we just rely on immigration other nations will become technological leaders, such as India.</p>
<p>I am not patriotic in a general term, I would like to see the whole world in a state of prosperity. I believe it is possible to achieve it by automating all simple manual labor, thus removing low wage jobs and the need of modern slavery. But the consequence is that the biggest part of the population, if not all must do “thinking” jobs.</p>
<p>I can not understand why no real effort is done to educate the masses. There is only one way forward and that is education. We are in a technological state where most simple manual labor is not necessary and only keep most of it around so that low educated people have a job. This status quo can not be held for long and only on the back of people and nations that are exploited. The only reason why most products are cheap is because they are <em>made in china</em>.</p>
<p>All leaders of the world should work for a common goal: <strong>high education for the biggest part of humanity</strong>. There is much to lose.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rioki.org/2008/07/18/we-need-to-send-our-kids-to-university/feed/</wfw:commentRss>
		</item>
		<item>
		<title>CMS in 10 Minutes with Django</title>
		<link>http://www.rioki.org/2008/07/16/cms-in-10-minutes-with-django/</link>
		<comments>http://www.rioki.org/2008/07/16/cms-in-10-minutes-with-django/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 19:27:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[atricles]]></category>

		<category><![CDATA[Django]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.rioki.org/?p=61</guid>
		<description><![CDATA[Install Django

Fist you need to install Django. I will not repeat the documentation on Django. So you should read the Django&#8217;s Installation Guide.
There is to note that I am using the bleeding edge version from their subversion repository. This is done in anticipation of their 1.0 release, which is scheduled for beginning of September. You [...]]]></description>
			<content:encoded><![CDATA[<h2><a id="install_django" name="install_django">Install Django</a></h2>
<div class="level2">
<p>Fist you need to install Django. I will not repeat the documentation on Django. So you should read the <a class="urlextern" title="http://www.djangoproject.com/documentation/install/" href="http://www.djangoproject.com/documentation/install/">Django&#8217;s Installation Guide</a>.</p>
<p>There is to note that I am using the bleeding edge version from their subversion repository. This is done in anticipation of their 1.0 release, which is scheduled for beginning of September. You can use the 0.95 version, but It lacks some juicy bits.</p></div>
<h2><a id="create_a_project" name="create_a_project">Create a Project</a></h2>
<div class="level2">
<p>All Django project (website) starts the same way:</p>
<pre class="code bash">django-admin.py startproject rioki</pre>
<p>This will create a template, but usable website.</p></div>
<h2><a id="embedded_web_server" name="embedded_web_server">Embedded Web Server</a></h2>
<div class="level2">
<p>On of the nifty features is that Django comes with a embedded web server that can (and only should) be used for development. This feature really cuts down development time.</p>
<p>To use it launch the server (in the project directory):</p>
<pre class="code bash">./manage.py runserver</pre>
<p>You will now find your website under <a class="urlextern" title="http://127.0.0.1:8000/" href="http://127.0.0.1:8000/">http://127.0.0.1:8000/</a>.</p>
<p>Well it actually is only a page that tells you have not “configured any urls”. We will get to that soon.</p></div>
<h2><a id="configuration" name="configuration">Configuration</a></h2>
<div class="level2">
<p>Well the first step is to configure your site. This is a simple process, open <em>settings.py</em> in your favorite text editor and edit the file as appropriate.</p>
<p>Mine looks about so:</p>
<pre class="code python"><span class="kw1">from</span> <span class="kw3">os</span>.<span class="me1">path</span> <span class="kw1">import</span> join, dirname

DEBUG = <span class="kw2">True</span>
TEMPLATE_DEBUG = DEBUG

ADMINS = <span class="br0">(</span>
    <span class="br0">(</span><span class="st0">'Sean "Rioki" Farrell'</span>, <span class="st0">'i.dont.think@so.com'</span><span class="br0">)</span>,
<span class="br0">)</span>

MANAGERS = ADMINS

DATABASE_ENGINE = <span class="st0">'sqlite3'</span>
DATABASE_NAME = join<span class="br0">(</span>dirname<span class="br0">(</span>__file__<span class="br0">)</span>, <span class="st0">'database'</span><span class="br0">)</span>

TIME_ZONE = <span class="st0">'Europe/Berlin'</span>

LANGUAGE_CODE = <span class="st0">'en-us'</span>

SITE_ID = <span class="nu0">1</span>

USE_I18N = <span class="kw2">False</span>

MEDIA_ROOT = join<span class="br0">(</span>dirname<span class="br0">(</span>__file__<span class="br0">)</span>, <span class="st0">'media'</span><span class="br0">)</span>

MEDIA_URL = <span class="st0">'/media/'</span>

ADMIN_MEDIA_PREFIX = <span class="st0">'/admin_media/'</span>

SECRET_KEY = <span class="st0">'Mine, not yours...'</span>

TEMPLATE_LOADERS = <span class="br0">(</span>
    <span class="st0">'django.template.loaders.filesystem.load_template_source'</span>,
    <span class="st0">'django.template.loaders.app_directories.load_template_source'</span>,
<span class="br0">)</span>

MIDDLEWARE_CLASSES = <span class="br0">(</span>
    <span class="st0">'django.middleware.common.CommonMiddleware'</span>,
    <span class="st0">'django.contrib.sessions.middleware.SessionMiddleware'</span>,
    <span class="st0">'django.contrib.auth.middleware.AuthenticationMiddleware'</span>,
    <span class="st0">'django.middleware.doc.XViewMiddleware'</span>,
<span class="br0">)</span>

ROOT_URLCONF = <span class="st0">'rioki.urls'</span>

TEMPLATE_DIRS = <span class="br0">(</span>
    join<span class="br0">(</span>dirname<span class="br0">(</span>__file__<span class="br0">)</span>, <span class="st0">'templates'</span><span class="br0">)</span>
<span class="br0">)</span>

INSTALLED_APPS = <span class="br0">(</span>
    <span class="st0">'django.contrib.auth'</span>,
    <span class="st0">'django.contrib.contenttypes'</span>,
    <span class="st0">'django.contrib.sessions'</span>,
    <span class="st0">'django.contrib.sites'</span>,
<span class="br0">)</span></pre>
<p>I used a nifty trick for the different paths. For security and stability reasons, you are to give absolute paths for the values such as <code>MEDIA_ROOT</code>. Well I use <code>join(dirname(<em class="u">file</em>), &#8216;media&#8217;)</code>, which makes it relative to the <code>settings.py</code> file. As a result I can move the entire package around and always be right and an absolute path.</div>
<h2><a id="create_the_database" name="create_the_database">Create The Database</a></h2>
<div class="level2">
<p>Now is a good time to create the initial database:</p>
<pre class="code bash">./manage.py syncdb</pre>
<p>Well this will load the initial tables and ask you if you want to create a super user.</p></div>
<h2><a id="the_admin_backend" name="the_admin_backend">The Admin Backend</a></h2>
<div class="level2">
<p>One of the most powerful features is the admin backend. You might not see that in this post.</p>
<p>To use the admin you need to add <code>'django.contrib.admin</code>&#8216; to the  <code>INSTALLED_APPS</code>. You need to rerun <em>syncdb</em>, wich you must almost always do after you add something to <code>INSTALLED_APPS</code>.</p>
<pre class="code bash">./manage.py syncdb</pre>
<p>In addition uncomment lines for the admin in <em>urls.py</em>. You <em>urls.py</em> should about look like that:</p>
<pre class="code python"><span class="kw1">from</span> django.<span class="me1">conf</span>.<span class="me1">urls</span>.<span class="me1">defaults</span> <span class="kw1">import</span> *

urlpatterns = patterns<span class="br0">(</span><span class="st0">''</span>,
    <span class="br0">(</span>r<span class="st0">'^admin/'</span>, include<span class="br0">(</span><span class="st0">'django.contrib.admin.urls'</span><span class="br0">)</span><span class="br0">)</span>,
<span class="br0">)</span></pre>
<p>You can see the admin interface under <a class="urlextern" title="http://127.0.0.1:8000/admin/" href="http://127.0.0.1:8000/admin/">http://127.0.0.1:8000/admin/</a></p>
<p>Here you can see one of the nice features of Django: Instant pretty URLs. This comes from the fact that all incoming requests are matched against a table of regular expressions.</p>
<p>You might want to change the <em>Sites</em> entry from <em>example.com</em> to your website, but that&#8217;s all for now.</div>
<h2><a id="static_contentflatpages" name="static_contentflatpages">Static Content: Flatpages</a></h2>
<div class="level2">
<p>Django comes with a module for static content, that is <em>django.contrib.flatpages</em>.</p>
<p>To use it add <code>'django.contrib.flatpages</code>&#8216; to <code>INSTALLED_APPS</code> and <code>'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware</code>&#8216; to <code>MIDDLEWARE_CLASSES</code>.</p>
<p>Rerun <em>syncdb</em>:</p>
<pre class="code bash">./manage.py syncdb</pre>
<p>Now you can add some pages via the admin. I added ”/” for the portal page and ”/imprint/” for the imprint. You can find the pages you created at <a class="urlextern" title="http://127.0.0.1:8000/" href="http://127.0.0.1:8000/">http://127.0.0.1:8000/</a> and <a class="urlextern" title="http://127.0.0.1:8000/imprint/" href="http://127.0.0.1:8000/imprint/">http://127.0.0.1:8000/imprint/</a>.</p>
<p>Well actually, you can&#8217;t. It is still complaining about a missing template. Let&#8217;s create that.</p>
<p>Create the file <em>templates/flatpages/default.html</em>:</p>
<pre class="code html4strict"><span class="sc2"><a href="http://december.com/html/4/element/html.html"><span class="kw2">&lt;html&gt;</span></a></span>
    <span class="sc2"><a href="http://december.com/html/4/element/head.html"><span class="kw2">&lt;head&gt;</span></a></span>
        <span class="sc2"><a href="http://december.com/html/4/element/title.html"><span class="kw2">&lt;title&gt;</span></a></span>{{ flatpage.title }}<span class="sc2"><span class="kw2">&lt;/title&gt;</span></span>
    <span class="sc2"><span class="kw2">&lt;/head&gt;</span></span>
    <span class="sc2"><a href="http://december.com/html/4/element/body.html"><span class="kw2">&lt;body&gt;</span></a></span>
        <span class="sc2"><a href="http://december.com/html/4/element/h1.html"><span class="kw2">&lt;h1&gt;</span></a></span>{{ flatpage.title }}<span class="sc2"><span class="kw2">&lt;/h1&gt;</span></span>
        {{ flatpage.content }}
    <span class="sc2"><span class="kw2">&lt;/body&gt;</span></span>
<span class="sc2"><span class="kw2">&lt;/html&gt;</span></span></pre>
<p>As you can see the content is copied verbatim. You got two solutions you either write the content <acronym title="HyperText Markup Language">HTML</acronym> or use one of the built-in markup languages.</div>
<h2><a id="markup" name="markup">Markup</a></h2>
<div class="level2">
<p>Django comes bundled with 3 markup languages, that is Textile, Markdown and ReST. To enable those you need to add <code>'django.contrib.markup</code>&#8216; to your <code>INSTALLED_APPS</code>. And change the template to look like this:</p>
<pre class="code html4strict">{% load markup %}
<span class="sc2"><a href="http://december.com/html/4/element/html.html"><span class="kw2">&lt;html&gt;</span></a></span>
    <span class="sc2"><a href="http://december.com/html/4/element/head.html"><span class="kw2">&lt;head&gt;</span></a></span>
        <span class="sc2"><a href="http://december.com/html/4/element/title.html"><span class="kw2">&lt;title&gt;</span></a></span>{{ flatpage.title }}<span class="sc2"><span class="kw2">&lt;/title&gt;</span></span>
    <span class="sc2"><span class="kw2">&lt;/head&gt;</span></span>
    <span class="sc2"><a href="http://december.com/html/4/element/body.html"><span class="kw2">&lt;body&gt;</span></a></span>
        <span class="sc2"><a href="http://december.com/html/4/element/h1.html"><span class="kw2">&lt;h1&gt;</span></a></span>{{ flatpage.title }}<span class="sc2"><span class="kw2">&lt;/h1&gt;</span></span>
        {{ flatpage.content|textile }}
    <span class="sc2"><span class="kw2">&lt;/body&gt;</span></span>
<span class="sc2"><span class="kw2">&lt;/html&gt;</span></span></pre>
<p>As you can see we are using textile.</p></div>
<h2><a id="serving_media_files" name="serving_media_files">Serving Media Files</a></h2>
<div class="level2">
<p>During debug we are using the builtin server. That has the consequence that media files are not explicitly served. To fix this we we extend urls.py file:</p>
<pre class="code python"><span class="kw1">from</span> django.<span class="me1">conf</span>.<span class="me1">urls</span>.<span class="me1">defaults</span> <span class="kw1">import</span> *
<span class="kw1">from</span> django.<span class="me1">conf</span> <span class="kw1">import</span> settings

urlpatterns = patterns<span class="br0">(</span><span class="st0">''</span>,
    <span class="br0">(</span>r<span class="st0">'^admin/'</span>, include<span class="br0">(</span><span class="st0">'django.contrib.admin.urls'</span><span class="br0">)</span><span class="br0">)</span>,
<span class="br0">)</span>

<span class="kw1">if</span> settings.<span class="me1">DEBUG</span>:
    urlpatterns += patterns<span class="br0">(</span><span class="st0">''</span>,
        <span class="br0">(</span>r<span class="st0">'^media/(?P&lt;path&gt;.*)$'</span>, <span class="st0">'django.views.static.serve'</span>, <span class="br0">{</span><span class="st0">'document_root'</span>: settings.<span class="me1">MEDIA_ROOT</span><span class="br0">}</span><span class="br0">)</span>
    <span class="br0">)</span></pre>
<p>As you can see, the media files are only server through Django when in debug mode. In production mode, on the production website media is server through apache. This is a obvious performance issue.</p></div>
<h2><a id="design" name="design">Design</a></h2>
<div class="level2">
<p>Well so far we are “done”, except that the site looks really crappy. I took the design from this site, as it will replace it and just adapted it to Django.</p>
<p>I created the site rump <em>templates/default.html</em>:</p>
<pre class="code html4strict"><span class="sc2"><span class="kw2">&lt;</span>?xml <span class="kw3">version</span>=<span class="st0">"1.0"</span> encoding=<span class="st0">"UTF-8"</span>?<span class="kw2">&gt;</span></span>
<span class="sc0">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"&gt;</span>
<span class="sc2"><a href="http://december.com/html/4/element/html.html"><span class="kw2">&lt;html</span></a> xmlns=<span class="st0">"http://www.w3.org/1999/xhtml"</span> xml:<span class="kw3">lang</span>=<span class="st0">"en"</span><span class="kw2">&gt;</span></span>
    <span class="sc2"><a href="http://december.com/html/4/element/head.html"><span class="kw2">&lt;head&gt;</span></a></span>
        <span class="sc2"><a href="http://december.com/html/4/element/title.html"><span class="kw2">&lt;title&gt;</span></a></span>{% block title %}Rioki{% endblock %}<span class="sc2"><span class="kw2">&lt;/title&gt;</span></span>
        <span class="sc2"><a href="http://december.com/html/4/element/link.html"><span class="kw2">&lt;link</span></a> <span class="kw3">rel</span>=<span class="st0">"stylesheet"</span> <span class="kw3">type</span>=<span class="st0">"text/css"</span> <span class="kw3">href</span>=<span class="st0">"/media/design/default.css"</span> /<span class="kw2">&gt;</span></span>
    <span class="sc2"><span class="kw2">&lt;/head&gt;</span></span>
    <span class="sc2"><a href="http://december.com/html/4/element/body.html"><span class="kw2">&lt;body&gt;</span></a></span>
        <span class="sc2"><a href="http://december.com/html/4/element/div.html"><span class="kw2">&lt;div</span></a> <span class="kw3">class</span>=<span class="st0">"page"</span><span class="kw2">&gt;</span></span>
            <span class="sc2"><a href="http://december.com/html/4/element/div.html"><span class="kw2">&lt;div</span></a> <span class="kw3">class</span>=<span class="st0">"header"</span><span class="kw2">&gt;</span></span>
                {% block header %}
                    <span class="sc2"><a href="http://december.com/html/4/element/a.html"><span class="kw2">&lt;a</span></a> <span class="kw3">href</span>=<span class="st0">"/"</span><span class="kw2">&gt;</span></span>Start<span class="sc2"><span class="kw2">&lt;/a&gt;</span></span> |
                    <span class="sc2"><a href="http://december.com/html/4/element/a.html"><span class="kw2">&lt;a</span></a> <span class="kw3">href</span>=<span class="st0">"/blog/"</span><span class="kw2">&gt;</span></span>Blog<span class="sc2"><span class="kw2">&lt;/a&gt;</span></span> |
                    <span class="sc2"><a href="http://december.com/html/4/element/a.html"><span class="kw2">&lt;a</span></a> <span class="kw3">href</span>=<span class="st0">"/about/"</span><span class="kw2">&gt;</span></span>About<span class="sc2"><span class="kw2">&lt;/a&gt;</span></span> |
                    <span class="sc2"><a href="http://december.com/html/4/element/a.html"><span class="kw2">&lt;a</span></a> <span class="kw3">href</span>=<span class="st0">"/proejcts/"</span><span class="kw2">&gt;</span></span>Projects<span class="sc2"><span class="kw2">&lt;/a&gt;</span></span>
                {% endblock %}
            <span class="sc2"><span class="kw2">&lt;/div&gt;</span></span>
            <span class="sc2"><a href="http://december.com/html/4/element/div.html"><span class="kw2">&lt;div</span></a> <span class="kw3">class</span>=<span class="st0">"sidebar"</span><span class="kw2">&gt;</span></span>
                {% block sidebar %}
                    <span class="sc2"><a href="http://december.com/html/4/element/h3.html"><span class="kw2">&lt;h3&gt;</span></a></span>Sidebar:<span class="sc2"><span class="kw2">&lt;/h3&gt;</span></span>
                    <span class="sc2"><a href="http://december.com/html/4/element/ul.html"><span class="kw2">&lt;ul&gt;</span></a></span>
                        <span class="sc2"><a href="http://december.com/html/4/element/li.html"><span class="kw2">&lt;li&gt;</span></a></span><span class="sc2"><a href="http://december.com/html/4/element/a.html"><span class="kw2">&lt;a</span></a> <span class="kw3">href</span>=<span class="st0">"http://www.libqgl.org"</span><span class="kw2">&gt;</span></span>libQGL<span class="sc2"><span class="kw2">&lt;/a&gt;</span></span><span class="sc2"><span class="kw2">&lt;/li&gt;</span></span>
                        <span class="sc2"><a href="http://december.com/html/4/element/li.html"><span class="kw2">&lt;li&gt;</span></a></span><span class="sc2"><a href="http://december.com/html/4/element/a.html"><span class="kw2">&lt;a</span></a> <span class="kw3">href</span>=<span class="st0">"http://www.sf.net/projects/lunar-exodus"</span><span class="kw2">&gt;</span></span>Lunar Exodus<span class="sc2"><span class="kw2">&lt;/a&gt;</span></span><span class="sc2"><span class="kw2">&lt;/li&gt;</span></span>
                        <span class="sc2"><a href="http://december.com/html/4/element/li.html"><span class="kw2">&lt;li&gt;</span></a></span><span class="sc2"><a href="http://december.com/html/4/element/a.html"><span class="kw2">&lt;a</span></a> <span class="kw3">href</span>=<span class="st0">"/stl_algorithm_shortcuts"</span><span class="kw2">&gt;</span></span>STL Algorithm Shortcuts<span class="sc2"><span class="kw2">&lt;/a&gt;</span></span><span class="sc2"><span class="kw2">&lt;/li&gt;</span></span>
                        <span class="sc2"><a href="http://december.com/html/4/element/li.html"><span class="kw2">&lt;li&gt;</span></a></span><span class="sc2"><a href="http://december.com/html/4/element/a.html"><span class="kw2">&lt;a</span></a> <span class="kw3">href</span>=<span class="st0">"/tstring"</span><span class="kw2">&gt;</span></span>std::tstring<span class="sc2"><span class="kw2">&lt;/a&gt;</span></span><span class="sc2"><span class="kw2">&lt;/li&gt;</span></span>
                        <span class="sc2"><a href="http://december.com/html/4/element/li.html"><span class="kw2">&lt;li&gt;</span></a></span><span class="sc2"><a href="http://december.com/html/4/element/a.html"><span class="kw2">&lt;a</span></a> <span class="kw3">href</span>=<span class="st0">"/blog:itx_rock_my_web_app"</span><span class="kw2">&gt;</span></span>ITX Rock my Web App<span class="sc2"><span class="kw2">&lt;/a&gt;</span></span><span class="sc2"><span class="kw2">&lt;/li&gt;</span></span>
                        <span class="sc2"><a href="http://december.com/html/4/element/li.html"><span class="kw2">&lt;li&gt;</span></a></span><span class="sc2"><a href="http://december.com/html/4/element/a.html"><span class="kw2">&lt;a</span></a> <span class="kw3">href</span>=<span class="st0">"http://www.motivator-generator.com"</span><span class="kw2">&gt;</span></span>Motivator Generator<span class="sc2"><span class="kw2">&lt;/a&gt;</span></span><span class="sc2"><span class="kw2">&lt;/li&gt;</span></span>
                    <span class="sc2"><span class="kw2">&lt;/ul&gt;</span></span>
                {% endblock %}
            <span class="sc2"><span class="kw2">&lt;/div&gt;</span></span>
            <span class="sc2"><a href="http://december.com/html/4/element/div.html"><span class="kw2">&lt;div</span></a> <span class="kw3">class</span>=<span class="st0">"content"</span><span class="kw2">&gt;</span></span>
                {% block content %}No content here.{% endblock %}
            <span class="sc2"><span class="kw2">&lt;/div&gt;</span></span>
            <span class="sc2"><a href="http://december.com/html/4/element/div.html"><span class="kw2">&lt;div</span></a> <span class="kw3">class</span>=<span class="st0">"footer"</span><span class="kw2">&gt;</span></span>
                {% block footer %}
                    © 2006-2008 Sean Farrell<span class="sc2"><a href="http://december.com/html/4/element/br.html"><span class="kw2">&lt;br</span></a>/<span class="kw2">&gt;</span></span>
                    <span class="sc2"><a href="http://december.com/html/4/element/a.html"><span class="kw2">&lt;a</span></a> <span class="kw3">href</span>=<span class="st0">"/about/"</span><span class="kw2">&gt;</span></span>Imprint<span class="sc2"><span class="kw2">&lt;/a&gt;</span></span> |
                    <span class="sc2"><a href="http://december.com/html/4/element/a.html"><span class="kw2">&lt;a</span></a> <span class="kw3">href</span>=<span class="st0">"/contact/"</span><span class="kw2">&gt;</span></span>Contact<span class="sc2"><span class="kw2">&lt;/a&gt;</span></span>
                {% endblock %}
            <span class="sc2"><span class="kw2">&lt;/div&gt;</span></span>
        <span class="sc2"><span class="kw2">&lt;/div&gt;</span></span>
    <span class="sc2"><span class="kw2">&lt;/body&gt;</span></span>
<span class="sc2"><span class="kw2">&lt;/html&gt;</span></span></pre>
<p>I also put <acronym title="Cascading Style Sheets">CSS</acronym> style sheet and the images into <em>/media/design</em>.</p>
<p>This is nice, but the <em>flatpages</em> need the design. To do this I altered the template for the <em>flatpages</em> to be the following:</p>
<pre class="code html4strict">{% extends 'default.html' %}
{% load markup %}

{% block title %}{{ flatpage.title }}{% endblock %}

{% block content %}
    <span class="sc2"><a href="http://december.com/html/4/element/h1.html"><span class="kw2">&lt;h1&gt;</span></a></span>{{ flatpage.title }}<span class="sc2"><span class="kw2">&lt;/h1&gt;</span></span>
    {{ flatpage.content|textile }}
{%endblock %}</pre>
<p>And viola, the beauty of reuse.</p></div>
<h2><a id="done" name="done">Done?</a></h2>
<div class="level2">
<p>As far as it comes to static content, we are done. To be honest for many sites this is enough; but not for mine.</p>
<p>Firs of all we need the blog. This site is 90% blog, so it will really miss. I could realize it via <em>flatpages</em>, but that is slightly awkward.</p>
<p>An other issue is that media files need to be uploaded to the server via some file transfer process, I want to be able to do that via the admin, since I may not have access to the server directly.</p>
<p>As you can see the menus are hardwired to the template, this is Ok if they don&#8217;t change often. (Which might be the case here…) But I want to be able to change them at any time via the admin.</p>
<p>Finally textile is okish, but I don&#8217;t like it too much. The other markup languages are worse. I have once tried to implement the dokuwiki syntax in python, let&#8217;s see if that works out as template tag.</p>
<p>What needs to be done:</p>
<ul>
<li class="level1">
<div class="li">blog</div>
</li>
<li class="level1">
<div class="li">handling of media files via admin</div>
</li>
<li class="level1">
<div class="li">handling of menu via admin</div>
</li>
<li class="level1">
<div class="li">integrate dokuml</div>
</li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.rioki.org/2008/07/16/cms-in-10-minutes-with-django/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Tools of the Trade - Know Them</title>
		<link>http://www.rioki.org/2008/07/16/tools-of-the-trade-know-them/</link>
		<comments>http://www.rioki.org/2008/07/16/tools-of-the-trade-know-them/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 12:27:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[blog]]></category>

		<category><![CDATA[Programming]]></category>

		<category><![CDATA[Software Engineering]]></category>

		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.rioki.org/?p=63</guid>
		<description><![CDATA[

In my dally work I am astounded as how little your average programmer or rather software engineer knows about the common tools of the trade.
Under some of the books I own is:


Pragmatic Programmer - Andrew Hunt and David Thomas


Mythical Man Month - Fred Brooks


Design Patterns - Erich Gama et al.


Test Driven Design - Kent Beck


And [...]]]></description>
			<content:encoded><![CDATA[<h1><a id="tools_of_the_trade_-_know_them" name="tools_of_the_trade_-_know_them"></a></h1>
<div class="level1">
<p>In my dally work I am astounded as how little your average programmer or rather software engineer knows about the common tools of the trade.</p>
<p>Under some of the books I own is:</p>
<ul>
<li class="level1">
<div class="li">Pragmatic Programmer - Andrew Hunt and David Thomas</div>
</li>
<li class="level1">
<div class="li">Mythical Man Month - Fred Brooks</div>
</li>
<li class="level1">
<div class="li">Design Patterns - Erich Gama et al.</div>
</li>
<li class="level1">
<div class="li">Test Driven Design - Kent Beck</div>
</li>
</ul>
<p>And thew discuss a number of issues and tools every programmer should know<a id="fnt__1" class="fn_top" name="fnt__1" href="http://old.rioki.org/blog#fn__1">1)</a>.</p>
<p>Can you imagine that, as far as I have seen, at least 50% did not know about unit testing or design patterns?! I am not saying that you need to use them all the time, which is absolute folly. But not even knowing that they exist is a sin.</p>
<p>What is even more depressing is that the younger generation should and probably had these subjects mentioned during their university courses. How can people not take their job seriously and thus make their job herder and more turblesome.</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.rioki.org/2008/07/16/tools-of-the-trade-know-them/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Changing Packeting Strategy for libQGL</title>
		<link>http://www.rioki.org/2008/06/26/changing-packeting-strategy-for-libqgl/</link>
		<comments>http://www.rioki.org/2008/06/26/changing-packeting-strategy-for-libqgl/#comments</comments>
		<pubDate>Thu, 26 Jun 2008 12:01:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[blog]]></category>

		<category><![CDATA[libQGL]]></category>

		<guid isPermaLink="false">http://www.rioki.org/?p=65</guid>
		<description><![CDATA[

As I was playing with the height maps I needed Vectors and Quaternions. So I shamelessly copy and pasted the implementation from libQGL. After a while I suddenly realized that I had something useful on its own and decided to release only the math stuff from libQGL as libqgl-math.
After thinking for a while I noticed [...]]]></description>
			<content:encoded><![CDATA[<h1><a id="changing_packeting_strategy_for_libqgl" name="changing_packeting_strategy_for_libqgl"></a></h1>
<div class="level1">
<p>As I was playing with the height maps I needed Vectors and Quaternions. So I shamelessly copy and pasted the implementation from <em>libQGL</em>. After a while I suddenly realized that I had something useful on its own and decided to release only the math stuff from <em>libQGL</em> as <em>libqgl-math</em>.</p>
<p>After thinking for a while I noticed that the packeting strategy I have for libQGL is crap. I have a bunch of stuff that is useful on its own, but together is incomplete. As a result I decided to split libQGL up in relative little clearly contained packages.</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.rioki.org/2008/06/26/changing-packeting-strategy-for-libqgl/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
