<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Roam notebook</title><link href="http://roam.be/notebook/atom.xml" rel="self"/><link href="http://roam.be"/><updated>2010-07-27T20:09:49Z</updated><id>http://roam.be</id><entry><title>Five minutes a day, two days per year</title><author><name>Kevin Wetzels</name></author><link href="http://roam.be/notebook/2010/five-minutes-a-day-two-days-per-year.html"/><updated>2010-07-25T15:20:30Z</updated><published>2010-07-25T15:20:30Z</published><id>http://roam.be/notebook/2010/five-minutes-a-day-two-days-per-year.html</id><content type="html">
					
	&lt;div class=&quot;intro&quot;&gt;
		&lt;p&gt;
			&lt;!-- Hyde::Excerpt::Begin --&gt;

			People often hesitate to automate tasks. They reckon that that five-minute-once-a-day-thing doesn&#39;t really eat
			into their time and isn&#39;t worth the trouble of getting something else to do it for them instead.
			&lt;!-- Hyde::Excerpt::End --&gt;
		&lt;/p&gt;
	&lt;/div&gt;
	&lt;p&gt;
		Five minutes a day. It would mean &lt;em&gt;not&lt;/em&gt; rushing to pick up the kids from school. Laying in bed five minutes longer 
		each morning. Doesn&#39;t that sound good? It certainly does to me. Or look at it another way: &lt;strong&gt;five minutes per working 
		day adds up to about 20 hours per year&lt;/strong&gt;, or about two and a half days of working. Wouldn&#39;t it be great to have an extra two days 
		to do some &lt;em&gt;real work&lt;/em&gt;, or two more days&amp;nbsp;off?
	&lt;/p&gt;
	&lt;h2&gt;Decide what&#39;s important to&amp;nbsp;you&lt;/h2&gt;
	&lt;p&gt;
		Do yourself a favor and take some time to list your working day and look for the &quot;low-hanging fruit&quot;. Write down all those 
		dirty, boring little tasks and when you&#39;re done, get a developer you trust to have a look at it and let him pick out the 
		stuff that can be automated with&amp;nbsp;ease.
	&lt;/p&gt;
	&lt;p&gt;
		Before you know it you&#39;ll have something cheap that can perform those tasks by itself, leaving you your precious time with 
		family and friends, doing more interesting&amp;nbsp;things.
	&lt;/p&gt;

				</content></entry><entry><title>The value of one-man-shops</title><author><name>Kevin Wetzels</name></author><link href="http://roam.be/notebook/2010/the-value-of-one-man-shops.html"/><updated>2010-07-24T18:20:30Z</updated><published>2010-07-24T18:20:30Z</published><id>http://roam.be/notebook/2010/the-value-of-one-man-shops.html</id><content type="html">
					
	&lt;div class=&quot;intro&quot;&gt;
		&lt;p&gt;
			&lt;!-- Hyde::Excerpt::Begin --&gt;

			Businesses often shy away from hiring freelancers for a job. They might have valid reasons to do so,
			but as a freelancer myself, I mostly see benefits to hiring people like me.
			&lt;!-- Hyde::Excerpt::End --&gt;
		&lt;/p&gt;
	&lt;/div&gt;
	&lt;p&gt;
		You see, a freelancer doesn&#39;t have to rely on &lt;em&gt;someone else&lt;/em&gt; to tell him exactly what you, the customer,
		expects to get out of the project; he&#39;s right beside you every step of the way. He knows. And that&#39;s
		just the start. Contrary to big companies you know exactly who&#39;s working hard on delivering the goods.
		Got a question? Get an answer directly from the source. Got a request? Same thing. There&#39;s no need to
		do the hokey-pokey and wait for your contact to get the time to have a look at your e-mail, pass the
		question on and finally get back to you 2 days later with an&amp;nbsp;answer.
	&lt;/p&gt;
	&lt;h2&gt;It all boils down to&amp;nbsp;this&lt;/h2&gt;
	&lt;p&gt;
		You could write a book about the advantages and disadvantages of hiring a freelancer to build your next
		website or web application, but I feel the entire discussion can be reduced to the following&amp;nbsp;images.
	&lt;/p&gt;
	&lt;h3&gt;The&amp;nbsp;freelancer&lt;/h3&gt;
	&lt;img src=&quot;/media/img/notebook/minivan.jpg&quot; width=&quot;560&quot; height=&quot;284&quot; alt=&quot;Freelancers are like minivans&quot;&gt;
	&lt;p&gt;
		A freelancer is smaller, nimbler, more &quot;agile&quot;. He can park in front of your door, load your stuff in the 
		back and deliver the goods in a timely fashion. Like the driver of a&amp;nbsp;van.
	&lt;/p&gt;
	&lt;h3&gt;The&amp;nbsp;company&lt;/h3&gt;
	&lt;img src=&quot;/media/img/notebook/truck.jpg&quot; width=&quot;560&quot; height=&quot;258&quot; alt=&quot;Big companies are like big trucks&quot;&gt;
	&lt;p&gt;
		The company more closely resembles a truck. Depending on the size of your business it&#39;s already a bit
		of a hassle to get them to come over and find a spot and you better have something large to put
		in the back or you&#39;re not even worth looking at. Of course, it &lt;em&gt;is&lt;/em&gt; a bit pricey since there are more
		mouths to&amp;nbsp;feed.
	&lt;/p&gt;
	&lt;h3&gt;The&amp;nbsp;choice&lt;/h3&gt;
	&lt;p&gt;
		Got something big? Then only a truck will probably do. But for anything that fits the back of a delivery van,
		just get someone with a delivery van to help you out. It&#39;s faster, it&#39;s cheaper. If you&#39;re not sure about the 
		size of your &lt;del&gt;load&lt;/del&gt; project, ask a person who&#39;s judgement you trust to tell you what he thinks 
		about it. Hell, &lt;a href=&quot;#contact&quot;&gt;ask me&lt;/a&gt;.
	&lt;/p&gt;

				</content></entry><entry><title>Django 1.2 upgrade: unique_error_message</title><author><name>Kevin Wetzels</name></author><link href="http://roam.be/notebook/2010/django-1.2-upgrade-unique-error-message.html"/><updated>2010-06-19T11:03:21Z</updated><published>2010-06-19T11:03:21Z</published><id>http://roam.be/notebook/2010/django-1.2-upgrade-unique-error-message.html</id><content type="html">
					
	&lt;div class=&quot;intro&quot;&gt;
		&lt;p&gt;
			&lt;!-- Hyde::Excerpt::Begin --&gt;

			While upgrading a project from Django 1.1 to Django 1.2 everything went flawless. Well, expect this one thing...
			&lt;!-- Hyde::Excerpt::End --&gt;
		&lt;/p&gt;
	&lt;/div&gt;
	&lt;p&gt;
		In Django 1.1 you could customize the error messages for unique constraints over multiple fields by overriding 
		&lt;code&gt;unique_error_message&lt;/code&gt; in your form. In Django 1.2 much of the validation has been moved to the model, including 
		the &lt;code&gt;unique_error_message&lt;/code&gt; checks.
	&lt;/p&gt;
	&lt;p&gt;
		Using Django 1.1 you&#39;d use following code in your &lt;em&gt;form class&lt;/em&gt;:
	&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;unique_error_message&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;field&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;  
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;field&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;#39;field1&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;#39;field2&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;  
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;You should not do that&amp;quot;&lt;/span&gt;  
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MyForm&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;unique_error_message&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;field&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;
		In Django 1.2 you&#39;ll have to change this to the following code in your &lt;strong&gt;model class&lt;/strong&gt;:
	&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;unique_error_message&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;model_class&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;unique_check&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;unique_check&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;#39;field1&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;#39;field2&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;You should not do that&amp;quot;&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MyModel&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;unique_error_message&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;model_class&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;unique_check&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


				</content></entry></feed>