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

<channel>
	<title>on.shore</title>
	<atom:link href="http://blog.shore.be/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.shore.be</link>
	<description>my thoughts, programming, stuff</description>
	<pubDate>Sun, 18 Apr 2010 11:19:06 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Creating a Report with Camelot</title>
		<link>http://blog.shore.be/2010/04/creating-a-report-with-camelot/</link>
		<comments>http://blog.shore.be/2010/04/creating-a-report-with-camelot/#comments</comments>
		<pubDate>Fri, 16 Apr 2010 22:51:14 +0000</pubDate>
		<dc:creator>jeroen</dc:creator>
		
		<category><![CDATA[camelot]]></category>

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

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

		<guid isPermaLink="false">http://blog.shore.be/?p=166</guid>
		<description><![CDATA[UPDATE: this tutorial has been added to the Camelot documentation: http://downloads.conceptive.be/downloads/camelot/doc/sphinx/build/tutorial/reporting.html. It has better code display. Even with indentations!
This is a tutorial i made for the Camelot Project . It starts where the introduction tutorial left off. You might wanna follow that one first, as the base classes are constructed and explained there.
I apologize for [...]]]></description>
			<content:encoded><![CDATA[<p style="background:#FEFF7F; border:1px solid black; clear:both; padding:3px;">UPDATE: this tutorial has been added to the Camelot documentation: <a title="Camlot documentation" href="http://downloads.conceptive.be/downloads/camelot/doc/sphinx/build/tutorial/reporting.html" target="_blank">http://downloads.conceptive.be/downloads/camelot/doc/sphinx/build/tutorial/reporting.html</a>. It has better code display. Even with indentations!</p>
<p>This is a tutorial i made for the <a title="http://www.python-camelot.com/" href="http://www.python-camelot.com/" target="_blank">Camelot Project</a> . It starts where the <a title="Introduction tutorial" href="http://www.conceptive.be/~downloads/camelot/doc/sphinx/build/tutorial/videostore.html" target="_blank">introduction tutorial</a> left off. You might wanna follow that one first, as the base classes are constructed and explained there.</p>
<p>I apologize for the lack of indentation of the code on this page, i am too lazy to install a code syntax plugin addon thingamagiggy.</p>
<p>With the Movie Database Application from the introduction tutorial as our starting point, we’re going to use the reporting framework in this tutorial. We will create a report of each movie, which we can access from the movie detail page.</p>
<p><strong>Massaging the model</strong></p>
<p>First of all we need to create a button to access our report. This is easily done by specifying a form_action, right in the Admin subclass of the model. Our appended code will be:</p>
<blockquote><p>form_actions = [MovieSummary('Summary')]</p></blockquote>
<p>The action is described in the MovieSummary class, which we’ll discuss next. Note that it needs to imported, obviously:</p>
<blockquote><p>from movie_summary import MovieSummary</p></blockquote>
<p>So the movie model admin will look like this:</p>
<blockquote><p>class Admin(EntityAdmin):<br />
from movie_summary import MovieSummary</p>
<p>verbose_name = &#8216;Movie&#8217;<br />
list_display = [<br />
'title',<br />
'short_description',<br />
'release_date',<br />
'genre',<br />
'director'<br />
]<br />
form_display = [<br />
'title',<br />
'cover_image',<br />
'short_description',<br />
'release_date',<br />
'genre',<br />
'director'<br />
]<br />
form_actions = [<br />
MovieSummary('Summary')<br />
]</p></blockquote>
<p><strong>The Summary class</strong></p>
<p>In the MovieSummary class, which is a child class of camelot.admin.form_action.PrintHtmlFormAction, we need to override just one method; the html method, which takes the Movie object as its argument. This makes accessing its members very easy as we’ll see in a minute. The html method will return &#8230;, have a guess&#8230;. Exactly, html. This will be displayed in a print preview:</p>
<blockquote><p>from camelot.admin.form_action import PrintHtmlFormAction<br />
class MovieSummary(PrintHtmlFormAction):<br />
def html(self, o):<br />
return &#8220;&lt;h1&gt;This will become the movie report of %s!&lt;/h1&gt;&#8221; % o.title</p></blockquote>
<p>You can already test this. You should see a button in the “Actions” section, on the right of the Movie detail page. Click this and a print preview should open with the text you let the html method return.</p>
<p><img class="size-medium wp-image-168 alignnone" title="action_button" src="http://blog.shore.be/wp-content/uploads/2010/04/action_button-300x226.png" alt="action_button" width="300" height="226" /></p>
<p><img class="alignnone size-medium wp-image-167" title="simple_report" src="http://blog.shore.be/wp-content/uploads/2010/04/simple_report-300x226.png" alt="simple_report" width="300" height="226" /></p>
<p>Now let’s make it a bit fancier.</p>
<p><strong>Using Jinja templates</strong></p>
<p>Install and add Jinja2 to your PYTHONPATH. You can find it here: http://jinja.pocoo.org/2/ or at the cheeseshop http://pypi.python.org/pypi/Jinja2 . Now let’s use its awesome powers.</p>
<p>First we’ll make a base template. This will determine our look and feel for all the report pages. This is basically html and css with block definitions. Later we’ll create the page movie summary template which will contain our model data. The movie summary template will inherit the base template, and provide content for the aforementioned blocks. The base template could look something like:</p>
<blockquote><p>&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;{% block page_head_title %}{% endblock %}&lt;/title&gt;<br />
&lt;meta http-equiv=&#8221;Content-Type&#8221; content=&#8221;text/html; charset=UTF-8&#8243; /&gt;<br />
&lt;style type=&#8221;text/css&#8221;&gt;<br />
body, html {<br />
font-family: Verdana, Arial, sans-serif;<br />
}<br />
{% block styles %}{% endblock %}<br />
&lt;/style&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;</p>
<p>&lt;table id=&#8221;page_header&#8221; width=&#8221;100%&#8221;&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;&lt;h1&gt;{% block page_header %}{% endblock %}&lt;/h1&gt;&lt;/td&gt;<br />
&lt;td align=&#8221;right&#8221;&gt;{% block page_header_right %}{% endblock %}&lt;/td&gt;<br />
&lt;/tr&gt;</p>
<p>&lt;/table&gt;<br />
&lt;hr&gt;<br />
&lt;h2 id=&#8221;page_title&#8221;&gt;&lt;center&gt;{% block page_title %}{% endblock %}&lt;/center&gt;&lt;/h2&gt;<br />
&lt;hr&gt;<br />
{% block page_content %}{% endblock %}<br />
&lt;hr&gt;<br />
&lt;div id=&#8221;page_footer&#8221;&gt;{% block page_footer %}{% endblock %}&lt;/div&gt;</p>
<p>&lt;/body&gt;<br />
&lt;/html&gt;</p></blockquote>
<p>We’ll save this file as base.html in a directory called templates in our videostore. Like this base template, the movie summary template is html and css. Take a look at the example first:</p>
<blockquote><p>{% extends &#8216;base.html&#8217; %}<br />
{% block styles %}{{ style }}{% endblock %}<br />
{% block page_head_title %}{{ title }}{% endblock %}<br />
{% block page_title %}{{ title }}{% endblock %}<br />
{% block page_header %}{{ header }}{% endblock %}<br />
{% block page_header_right %}<br />
&lt;img src=&#8221;media/covers/{{ header_right }}&#8221; alt=&#8221;"&gt;{% if header_right %}<br />
{% else %}<br />
(no cover)<br />
{% endif %}<br />
{% endblock %}<br />
{% block page_content %}{{ content }}{% endblock %}<br />
{% block page_footer %}{{ footer }}{% endblock %}</p></blockquote>
<p>First we extend the base template, that way we don’t need to worry about the boilerplate stuff, and keep our pages consistent, provided we create more reports of course. We can now fill in the blanks, erm blocks from the base template. We do that with placeholders which we’ll define in the html method of our MovieSummary class. This way we can even add style to the page:</p>
<blockquote><p>{% block styles %}{{ style }}{% endblock %}</p></blockquote>
<p>We’ll define this later. The templating language also allows basic flow control:</p>
<blockquote><p>{% if cover %}<br />
&lt;img src=&#8221;media/covers/{{ cover }}&#8221; alt=&#8221;"&gt;<br />
{% else %}<br />
(no cover)<br />
{% endif %}</p></blockquote>
<p>If there is no cover image, we’ll show the string “(no cover)”. We’ll save this file as movie_summary.html in the templates directory.</p>
<p>Like i said earlier, we now need to define which values will go in the placeholders, so let’s update our html method in the MovieSummary class. First, we import the needed elements:</p>
<blockquote><p>import datetime<br />
from jinja import Environment, FileSystemLoader<br />
from pkg_resources import resource_filename<br />
import videostore</p></blockquote>
<p>We’ll be printing a date, so we’ll need datetime. The Jinja classes to make use of our templates. And to locate our templates, we’ll use the resource module, with our videostore. And load up the Jinja environment &#8230;</p>
<blockquote><p>fileloader = FileSystemLoader(resource_filename(videostore.__name__, &#8216;templates&#8217;))<br />
e = Environment(loader=fileloader)</p></blockquote>
<p>Now we need to create a context dictionary to provide data to the templates. The keys of this dictionary are the placeholders we used in our movie_summary template, the values we can use from the model, which is passed as the o argument in the html method:</p>
<blockquote><p>context = {<br />
&#8216;header&#8217;:o.title,<br />
&#8216;title&#8217;:'Movie Summary&#8217;,<br />
&#8217;style&#8217;:&#8217;.label { font-weight:bold; }&#8217;,<br />
&#8216;content&#8217;:'&lt;span class=&#8221;label&#8221;&gt;Description:&lt;/span&gt; %s&lt;br&gt;\<br />
&lt;span class=&#8221;label&#8221;&gt;Release date:&lt;/span&gt; %s&lt;br&gt;\<br />
&lt;span class=&#8221;label&#8221;&gt;Genre:&lt;/span&gt; %s&lt;br&gt;\<br />
&lt;span class=&#8221;label&#8221;&gt;Director:&lt;/span&gt; %s&#8217;<br />
% (o.short_description, o.release_date, o.genre, o.director),<br />
&#8216;cover&#8217;: os.path.join( resource_filename(videostore.__name__, &#8216;media&#8217;), &#8216;covers&#8217;, o.cover_image.name ),<br />
&#8216;footer&#8217;:'&lt;br&gt;copyright %s - Camelot&#8217; % datetime.datetime.now().year<br />
}</p></blockquote>
<p>Plain old Python dictionary. Check it out, we can even pass css in our setup.</p>
<p>Finally, we’ll get the template from the Jinja environment and return the rendered result of our context:</p>
<blockquote><p>t = e.get_template(&#8217;movie_summary.html&#8217;)<br />
return t.render(context)</p></blockquote>
<p>So our finished method eventually looks like this:</p>
<blockquote><p>from camelot.admin.form_action import PrintHtmlFormAction<br />
class MovieSummary(PrintHtmlFormAction):<br />
def html(self, o):<br />
import datetime<br />
import os<br />
from jinja import Environment, FileSystemLoader<br />
from pkg_resources import resource_filename<br />
import videostore<br />
fileloader = FileSystemLoader(resource_filename(videostore.__name__, &#8216;templates&#8217;))<br />
e = Environment(loader=fileloader)<br />
context = {<br />
&#8216;header&#8217;:o.title,<br />
&#8216;title&#8217;:'Movie Summary&#8217;,<br />
&#8217;style&#8217;:&#8217;.label { font-weight:bold; }&#8217;,<br />
&#8216;content&#8217;:'&lt;span class=&#8221;label&#8221;&gt;Description:&lt;/span&gt; %s&lt;br&gt;\<br />
&lt;span class=&#8221;label&#8221;&gt;Release date:&lt;/span&gt; %s&lt;br&gt;\<br />
&lt;span class=&#8221;label&#8221;&gt;Genre:&lt;/span&gt; %s&lt;br&gt;\<br />
&lt;span class=&#8221;label&#8221;&gt;Director:&lt;/span&gt; %s&#8217;<br />
% (o.short_description, o.release_date, o.genre, o.director),<br />
&#8216;cover&#8217;: os.path.join( resource_filename(videostore.__name__, &#8216;media&#8217;), &#8216;covers&#8217;, o.cover_image.name ),<br />
&#8216;footer&#8217;:'&lt;br&gt;copyright %s - Camelot&#8217; % datetime.datetime.now().year<br />
}<br />
t = e.get_template(&#8217;movie_summary.html&#8217;)<br />
return t.render(context)</p></blockquote>
<p>What are you waiting for? Go try it out! You should see something like this:</p>
<p><img class="alignnone size-medium wp-image-174" title="final_report" src="http://blog.shore.be/wp-content/uploads/2010/04/final_report-300x227.png" alt="final_report" width="300" height="227" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.shore.be/2010/04/creating-a-report-with-camelot/feed/</wfw:commentRss>
		</item>
		<item>
		<title>what do you know</title>
		<link>http://blog.shore.be/2009/06/what-do-you-know/</link>
		<comments>http://blog.shore.be/2009/06/what-do-you-know/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 12:11:21 +0000</pubDate>
		<dc:creator>jeroen</dc:creator>
		
		<category><![CDATA[personal development]]></category>

		<category><![CDATA[software development process]]></category>

		<guid isPermaLink="false">http://blog.shore.be/?p=106</guid>
		<description><![CDATA[
It occurs to me that people are at the center of our society. I&#8217;ll give you a couple of seconds to digest that bombshell &#8230; Granted, my mayonnaise runs slow; i still don&#8217;t fully grasp the concept of humans. Which is odd, because i&#8217;ve been one for almost thirty years. Shouldn&#8217;t i get it by [...]]]></description>
			<content:encoded><![CDATA[<p><img style="float:right" class="size-medium wp-image-159" title="Say whut?!" src="http://blog.shore.be/wp-content/uploads/2009/06/the-swan-300x256.jpg" alt="Say whut?!" width="180" height="154" /><br />
It occurs to me that people are at the center of our society. I&#8217;ll give you a couple of seconds to digest that bombshell &#8230; Granted, my mayonnaise runs slow; i still don&#8217;t fully grasp the concept of humans. Which is odd, because i&#8217;ve been one for almost thirty years. Shouldn&#8217;t i get it by now? Nope, au contraire, every day i get a bit dumber. Almost every day i see things that i just can&#8217;t process. For instance when i see a commercial for yet another reality show on the idiot box. Do you feel me? Man &#8230; Where are we going with this? I can&#8217;t be an old fart complaining all the time already, right?</p>
<p>The problem is that i still try to hold on to logic. And well, it&#8217;s no secret that logical, our society ain&#8217;t. Or is it? I found that when someone does something weird in this world, it frequently boils down to very simple motivations. More often than not one of three; money, power or sex. The key to enlightenment there is information. And a sufficient understanding of that information. Too bad the trail to that information alone grows to an ungraspable complexity in no time, not to mention the connection between the related pieces that make up the whole &#8220;information&#8221;.<br />
As an outsider it&#8217;s hard to populate all the variables, let alone define them. Look at the number of unsolved crimes. People with the right tools and training still fail regularly at solving the hard ones. And i don&#8217;t think they need to be ashamed of this, because it happens all around us, every day; people&#8217;s amount of stored information and their grasp thereof is almost arbitrary.</p>
<p><img class="size-medium wp-image-145" style="float:left; margin: 25px 10px 0 0;" title="Kickin' it at the summit" src="http://blog.shore.be/wp-content/uploads/2009/06/yeltsin_clinton-300x216.jpg" alt="Kickin' it at the summit" width="168" height="121" /></p>
<p>With that in mind, eviler minds than mine state that when you&#8217;re in a discussion, it&#8217;s not so much knowing the subject through and through, but knowing what your colleague debater&#8217;s level of knowledge on the subject is. I guess that&#8217;s one of the reasons not everyone can join in on some discussions, like say G7 summits. (Wouldn&#8217;t it be a hoot though?)</p>
<p>In my opinion, nobody can know everything, and an informal discussion is only useful if it leads somewhere&#8230; i know, informal discussions barely be useful. It&#8217;s a shame that we have this human condition to drag with us everywhere; If one person gives up because he thinks he&#8217;s under qualified this might be a shame, because the other person might as well be bluffing, or wording things wrongly, etc.<br />
The angle at which you look at knowledge can be different too; a programming language as seen by a business developer or an academic for instance.<br />
So i guess the weaponry sold in this piece is &#8220;know your meta&#8221;. Recognizing at which angle people are speaking at any given moment, makes for efficient communication. But hey, don&#8217;t expect logic of course&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.shore.be/2009/06/what-do-you-know/feed/</wfw:commentRss>
		</item>
		<item>
		<title>just start, but have a goal</title>
		<link>http://blog.shore.be/2009/04/just-start-but-have-a-goal/</link>
		<comments>http://blog.shore.be/2009/04/just-start-but-have-a-goal/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 18:51:12 +0000</pubDate>
		<dc:creator>jeroen</dc:creator>
		
		<category><![CDATA[personal development]]></category>

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

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

		<guid isPermaLink="false">http://blog.shore.be/?p=18</guid>
		<description><![CDATA[I had a bad summer once, back when i was a teenager. Couldn&#8217;t get interested in anything. Bored of procrastinating like hell. You can imagine my dad was getting pretty annoyed with my self pity and the behavioral consequences. He said, &#8220;Quit your whining and make yourself useful. Go nail some boards to cover that [...]]]></description>
			<content:encoded><![CDATA[<p>I had a bad summer once, back when i was a teenager. Couldn&#8217;t get interested in anything. Bored of procrastinating like hell. You can imagine my dad was getting pretty annoyed with my self pity and the behavioral consequences. He said, &#8220;Quit your whining and make yourself useful. Go nail some boards to cover that hole in the shed.&#8221;<br />
<img style="float:right; margin-top: 25px;" class="alignright size-thumbnail wp-image-88" title="The shed in better times" src="http://blog.shore.be/wp-content/uploads/2009/04/brak-150x150.png" alt="The shed in better times" width="150" height="150" /><br />
It used to be a barbecue hangout, but it promised to be more useful in the form of a garage, carhole if you will. Nothing fancy, just a wooden shed with corrugated plastic roofing. One side was left open, but the new destiny of the structure needed the entrance to be on the other side, which meant the former had to be closed up.</p>
<p>Okay, that was my &#8220;project&#8221; for the day. Whooptydoo. Ah heck, it was easy and it would shut the old man up&#8230; Not like i had big plans or anything&#8230;</p>
<p>Funny thing was, this stupid chore meant a turning point that summer. When i was done and took a few steps back, i was surprised to sense a feeling of content. Hey, i dare say some pride was involved. It was an eye-opener and the remaining weeks of the holiday i was looking for stuff to fix and to do, just to get that feeling again. And it happened a lot. It&#8217;s what keeps me going still. I start stuff out of anticipation and belief it will be gratifying and rewarding.</p>
<p>It doesn&#8217;t even have to result in the thing you set out to do. For example: it&#8217;s okay to learn controversial stuff a certain way, possibly the wrong way. In the vain of &#8220;make one to throw away&#8221;, failure is an option. And this doesn&#8217;t have to mean that you should throw it away entirely. Code reuse for example can come in small packages, even reusing some basic structures or idea in another project.</p>
<p>As long as you remember that what you are learning might be wrong in the future - i.e. when you gather more knowledge on the topic - it&#8217;s okay. If you know the wrong way, you will grok the right way better. Often you&#8217;ll see why best practices are just that, by going through the process of bumping into walls yourself.</p>
<p>My main mantra since Project Nail-the-Shed has always been &#8220;you gotta do stuff, just start&#8221;. It doesn&#8217;t really matter what others say, or whether you think you&#8217;re on the wrong track. Perfectionists probably know what i mean here; it&#8217;s not easy to let go, but sometimes letting go and letting yourself be lead by the process is more rewarding than dotting all the i&#8217;s.  </p>
<p>But even if you don&#8217;t quite get there, it&#8217;s important to have a goal in the back of your noggin though. Preferably a high level one, that keeps you on track. It&#8217;s easy to lose yourself in either experimentation or details. Those are traps of not getting things done at all.</p>
<p>I know these thoughts will not resonate with everyone; i found that some people can plot out entire processes in their minds before trying anything out. Unfortunately, i am not one of those people, and i suspect most of us aren&#8217;t. So i need to try things out. If i don&#8217;t, there is no progression at all.</p>
<p>My father - as you already know, a wise man - had an interesting view on the saying &#8220;ignorance is bliss&#8221;; people who don&#8217;t see possible benefits or  problems just go for it, just for the sake of doing stuff. They are more likely to strike gold, because they are not hindered by contemplation. So don&#8217;t fret too much on the details.</p>
<p>And the shed? Well, it got burnt to the ground by our neighbour. He thought scorching a piece of garden to clean it up was a good idea.</p>
<p style="text-align: center;"><img class="size-full wp-image-75 aligncenter" title="The Mother  of All Games" src="http://blog.shore.be/wp-content/uploads/2009/04/scorched.png" alt="The Mother  of All Games" width="320" height="153" /></p>
<p>Ah well, it was full of useless car parts anyway. And the insurance inspectors weren&#8217;t what you call gear heads&#8230; Even when it doesn&#8217;t work out, there&#8217;s always something to gain. *wink* &#8230; I didn&#8217;t mind really, failure was an option, even for the shed.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.shore.be/2009/04/just-start-but-have-a-goal/feed/</wfw:commentRss>
		</item>
		<item>
		<title>advice is relative</title>
		<link>http://blog.shore.be/2009/03/advice-is-relative/</link>
		<comments>http://blog.shore.be/2009/03/advice-is-relative/#comments</comments>
		<pubDate>Wed, 11 Mar 2009 11:06:03 +0000</pubDate>
		<dc:creator>jeroen</dc:creator>
		
		<category><![CDATA[personal development]]></category>

		<guid isPermaLink="false">http://blog.shore.be/?p=20</guid>
		<description><![CDATA[On the internets, lots of advice is given, many times as a reaction to a bad practice. This is often singularly &#8220;away&#8221; from the bad practice, as far as possible. Although the advice provider means well, it creates cultures of extremes, which is a shame.
A lot of people need to stay up to date with [...]]]></description>
			<content:encoded><![CDATA[<p>On the internets, lots of advice is given, many times as a reaction to a bad practice. This is often singularly &#8220;away&#8221; from the bad practice, as far as possible. Although the advice provider means well, it creates cultures of extremes, which is a shame.</p>
<p>A lot of people need to stay up to date with a lot of stuff, while they don&#8217;t always have the time to research in great depth (I&#8217;m looking at you, managers!). So a lot of that &#8220;counter-advice&#8221; is taken as an absolute truth and imposed upon others, who might have more knowledge on the subject, but do not have the mandate to counter such decisions.<br />
An example; in html we have the internet-age old discussion of tables versus &#8220;divs&#8221;. This leads to the impression in some that no other element is needed, or worse, desired. Every time i hear table-design, i know what is meant. Every time is hear &#8220;div-design&#8221;, i get a strong stabbing sensation in my right hemisphere.<br />
Another example; Joel Spolsky claims programmers can never report to program managers (<a href="http://blog.stackoverflow.com/2009/03/podcast-45/" target="_blank">http://blog.stackoverflow.com/2009/03/podcast-45/</a>) and CTO&#8217;s should never write a spec (<a href="http://www.joelonsoftware.com/items/2009/03/09.html" target="_blank">http://www.joelonsoftware.com/items/2009/03/09.html</a>). I understand where this is coming from, but what about small companies, where the aforementioned roles are of the same person? Of course, this is a minor technicality, a discrepancy if you will. But it also implies that the reader is left with the responsibility to ignore the word &#8220;never&#8221; in these statements.</p>
<p>My conclusion is to learn from advice, but not to copy it blindly. Always allow an open mind and common sense into the picture. And always allow yourself to see the individuality of cases. Patterns can be productive, but can be dangerous at the same time. You might overlook a detail which changes the best way to handle the problem altogether &#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.shore.be/2009/03/advice-is-relative/feed/</wfw:commentRss>
		</item>
		<item>
		<title>First post!!</title>
		<link>http://blog.shore.be/2009/03/first-post/</link>
		<comments>http://blog.shore.be/2009/03/first-post/#comments</comments>
		<pubDate>Tue, 10 Mar 2009 10:19:19 +0000</pubDate>
		<dc:creator>jeroen</dc:creator>
		
		<category><![CDATA[obligatory]]></category>

		<guid isPermaLink="false">http://blog.shore.be/?p=3</guid>
		<description><![CDATA[Finally, i got first post. It&#8217;s been long overdue.
I&#8217;d like to start off by shamelessly stealing from one of my good friends, http://mathiasbaert.be : &#8220;I was never going to blog, and here it is&#8221;. If you&#8217;d told me a year ago this blog would be up, i would&#8217;ve probably spat in your face (&#8230;, immediately [...]]]></description>
			<content:encoded><![CDATA[<p>Finally, i got first post. It&#8217;s been long overdue.</p>
<p>I&#8217;d like to start off by shamelessly stealing from one of my good friends, <a href="http://mathiasbaert.be" target="_blank">http://mathiasbaert.be</a> : &#8220;I was never going to blog, and here it is&#8221;. If you&#8217;d told me a year ago this blog would be up, i would&#8217;ve probably spat in your face (&#8230;, immediately falling to my knees and asking for forgiveness).<br />
But hey, things change, you gotta go with the flow. Over these couple of years that i&#8217;m in the software development business, i learned that it costs too much energy to resist stuff, though i am still naturally sceptical of new trends.</p>
<p>Anyway, this is my blog. Welcome. First intention is to post thoughts about software development, social pseudo-psychology, and maybe puppies (cats is so 2006). But who knows how the blog might meander, i will certainly let it. The main goal is to better my wrtining skills and force me to order my thoughts. It would be nice if i could profile myself in a positive way too. Comments are absolutely welcome of course. Hope to see you again! KTHXBAI (&#8230; dammit! i wasn&#8217;t gonna do that again &#8230;)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.shore.be/2009/03/first-post/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
