<?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>Jens&#039; Codelog</title>
	<atom:link href="http://blog.jenstinfors.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.jenstinfors.com</link>
	<description>All things geek</description>
	<lastBuildDate>Fri, 18 Jun 2010 11:12:45 +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>Installing wordpress 3 on Mac OS X 10.6</title>
		<link>http://blog.jenstinfors.com/2010/06/installing-wordpress-3-on-mac-os-x-10-6/</link>
		<comments>http://blog.jenstinfors.com/2010/06/installing-wordpress-3-on-mac-os-x-10-6/#comments</comments>
		<pubDate>Mon, 07 Jun 2010 11:24:36 +0000</pubDate>
		<dc:creator>jens</dc:creator>
				<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[config]]></category>
		<category><![CDATA[install]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[snow leopard]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wordpress3]]></category>

		<guid isPermaLink="false">http://blog.jenstinfors.com/?p=288</guid>
		<description><![CDATA[Installing wordpress on mac os x should be a simple famous 5 minute job. It is not. (Unless you read this article in advance). The one thing you have to do that differs from the standard installation instruction when installing &#8230; <a href="http://blog.jenstinfors.com/2010/06/installing-wordpress-3-on-mac-os-x-10-6/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Installing wordpress on mac os x should be a simple famous 5 minute job. It is not. (Unless you read this article in advance).</p>
<p>The one thing you have to do that differs from the standard installation instruction when installing on OS X is that if you run mysql on the same machine as wordpress itself it wont be able to connect to it. By default wordpress sets the variable DB_HOST to localhost, for some reason that doesn&#8217;t work, you have to set it to 127.0.0.1:3306 instead, like so:</p>
<pre class="brush: bash">define(&#039;DB_HOST&#039;, &#039;127.0.0.1:3306&#039;);</pre>
<p>Otherwise it won&#8217;t find the database server.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jenstinfors.com/2010/06/installing-wordpress-3-on-mac-os-x-10-6/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>JSTL forEach loop and its superscoped varStatus variable</title>
		<link>http://blog.jenstinfors.com/2010/05/jstl-foreach-loop-and-its-superscoped-varstatus-variable/</link>
		<comments>http://blog.jenstinfors.com/2010/05/jstl-foreach-loop-and-its-superscoped-varstatus-variable/#comments</comments>
		<pubDate>Fri, 28 May 2010 06:00:08 +0000</pubDate>
		<dc:creator>jens</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[foreach]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jsp]]></category>
		<category><![CDATA[jstl]]></category>

		<guid isPermaLink="false">http://blog.jenstinfors.com/?p=285</guid>
		<description><![CDATA[In the context of Web applications, iteration is primarily used to fetch and display collections of data, typically in the form of a list or sequence of rows in a table. The primary JSTL action for implementing iterative content is &#8230; <a href="http://blog.jenstinfors.com/2010/05/jstl-foreach-loop-and-its-superscoped-varstatus-variable/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In the context of Web applications, iteration is primarily used to fetch  and display collections of data, typically in the form of a list or  sequence of rows in a table. The primary JSTL action for implementing  iterative content is the <code>&lt;c:forEach&gt;</code> custom tag. This  tag supports two different styles of iteration: iteration over an  integer range (like the Java language&#8217;s <code>for</code> statement) and  iteration over a collection (like the Java language&#8217;s <code>Iterator</code> and <code>Enumeration</code> classes).</p>
<p>ForEach has a variable called varStatus assigned an instance of the <code>javax.servlet.jsp.jstl.core.LoopTagStatus</code> class. This class defines a set of properties like first, last, index and the likes. varStatus is a scoped variable. In fact it is so scoped that it cannot be reached by a nested loop. Consider the following:</p>
<pre class="brush: java">&lt;c:forEach items=&quot;${items}&quot; var=&quot;item&quot; varStatus=&quot;status&quot;&gt;
&lt;a href=&quot;${item.value}&quot; class=&quot;${status}&quot;&gt;yadda&lt;/a&gt;
&lt;/c:forEach&gt;</pre>
<p>fine.</p>
<p>Now consider this:</p>
<pre class="brush: java">&lt;c:forEach items=&quot;${items}&quot; var=&quot;item&quot;  varStatus=&quot;outerStatus&quot;&gt;
&lt;c:forEach items=&quot;${item.otherItems}&quot; var=&quot;thing&quot;  varStatus=&quot;innerStatus&quot;&gt;
&lt;a href=&quot;${thing}&quot; class=&quot;${outerStatus}&quot;&gt;yadda&lt;/a&gt;
&lt;/c:forEach&gt;
&lt;/c:forEach&gt;</pre>
<p>Not possible. The varStatus variable of the outer loop is so scoped that it cannot be reached by the inner loop.</p>
<p>Solution:</p>
<pre class="brush: java">&lt;c:forEach items=&quot;${items}&quot; var=&quot;item&quot;   varStatus=&quot;outerStatus&quot;&gt;
&lt;c:set var=&quot;statusclass&quot; value=&quot;outerStatus&quot;/&gt;
&lt;c:forEach  items=&quot;${item.otherItems}&quot; var=&quot;thing&quot;  varStatus=&quot;innerStatus&quot;&gt;
&lt;a href=&quot;${thing}&quot; class=&quot;statusclass&quot;&gt;yadda&lt;/a&gt;
&lt;/c:forEach&gt;
&lt;/c:forEach&gt;</pre>
<p>se tout!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jenstinfors.com/2010/05/jstl-foreach-loop-and-its-superscoped-varstatus-variable/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Telling xerces to ignore the DTD</title>
		<link>http://blog.jenstinfors.com/2010/05/telling-xerces-to-ignore-the-dtd/</link>
		<comments>http://blog.jenstinfors.com/2010/05/telling-xerces-to-ignore-the-dtd/#comments</comments>
		<pubDate>Wed, 05 May 2010 13:23:37 +0000</pubDate>
		<dc:creator>jens</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[DTD]]></category>
		<category><![CDATA[parser]]></category>
		<category><![CDATA[sax]]></category>
		<category><![CDATA[validation]]></category>
		<category><![CDATA[xerces]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://blog.jenstinfors.com/?p=278</guid>
		<description><![CDATA[You&#8217;d think flipping off DTD-validation would be an easy thing to do when parsing XML? You&#8217;d think you&#8217;d just turn it off and then it won’t matter? Wrong! Even with validation switched off, it still tries to load the DTD &#8230; <a href="http://blog.jenstinfors.com/2010/05/telling-xerces-to-ignore-the-dtd/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>You&#8217;d think flipping off DTD-validation would be an easy thing to do when parsing XML? You&#8217;d think you&#8217;d just turn it off and then it  won’t matter? Wrong! Even with validation switched off, it still tries  to load the DTD and you&#8217;ll get a FileNotFoundException thrown in your face.</p>
<p>However, by delving in the source code I finally found that if you  switch off two features, then it does ignore the external DTD. So add  this to your code if you want to ignore DTDs:</p>
<pre class="brush: java">
final SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();

final SAXParser saxParser = saxParserFactory.newSAXParser();
final XMLReader parser = saxParser.getXMLReader();

// Ignore the DTD declaration
parser.setFeature(&quot;http://apache.org/xml/features/nonvalidating/load-external-dtd&quot;, false);
parser.setFeature(&quot;http://xml.org/sax/features/validation&quot;, false);
</pre>
<p>Go fish</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jenstinfors.com/2010/05/telling-xerces-to-ignore-the-dtd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Downloading content from svtplay</title>
		<link>http://blog.jenstinfors.com/2010/04/downloading-content-from-svtplay/</link>
		<comments>http://blog.jenstinfors.com/2010/04/downloading-content-from-svtplay/#comments</comments>
		<pubDate>Mon, 19 Apr 2010 19:11:04 +0000</pubDate>
		<dc:creator>jens</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[mplayer]]></category>
		<category><![CDATA[svtplay]]></category>

		<guid isPermaLink="false">http://blog.jenstinfors.com/?p=246</guid>
		<description><![CDATA[Before I became a father I swore to never dump my kids in front of the TV.. It didn&#8217;t take long before I came to my senses. Currently my son loves a swiss clay animation series called Pingu. It is &#8230; <a href="http://blog.jenstinfors.com/2010/04/downloading-content-from-svtplay/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.jenstinfors.com/wp-content/uploads/2010/04/pingu15.jpg"><img class="size-full wp-image-254  alignright" title="pingu" src="http://blog.jenstinfors.com/wp-content/uploads/2010/04/pingu15.jpg" alt="hello from pingu" width="232" height="288" /></a></p>
<p>Before I became a father I swore to never dump my kids in front of the TV..</p>
<p>It didn&#8217;t take long before I came to my senses.</p>
<p>Currently my son loves a swiss clay animation series called Pingu. It is actually quite funny and well made. Our swedish state-TV keeps a 30 day repository of back episodes. This is great. It&#8217;s just that each episode is only 10 minutes long and so kiddo starts screaming way too often for me to help start the next. Aah but for resourceful dads who values their own hacking sessions our dear friend <a href="www.mplayerhq.hu/">mplayer</a> comes to rescue!</p>
<p>To download an episode from svtplay just surf to its webpage, view source to find the URL to the movie. For some reason it is often in windows media format so try searching for &#8220;wmv&#8221;. Once you&#8217;ve figured out the URL to the movie use this mplayer command to download it:</p>
<pre class="brush: bash">mplayer -user-agent NSPlayer/8.0.0.4477 -dumpstream -playlist &lt;URL&gt; -dumpfile &lt;filename&gt;</pre>
<p>For example, to download the latest episode just do:</p>
<pre class="brush: bash">mplayer -user-agent NSPlayer/8.0.0.4477 -dumpstream -playlist http://geoip.api.qbrick.com/services/rest/qticket/svtplay.aspx?vurl=http://secure-wm.qbrick.com/90807/kluster/20100418/PG-1117294-012A-PINGU.wmv -dumpfile /mnt/media/Videos/pingu_2010_04_19.wmv</pre>
<p>A discussion in swedish is going on the <a href="http://www.ubuntu-se.org/phpBB3/viewtopic.php?f=208&amp;t=36021&amp;start=20">swedish ubuntu forums</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jenstinfors.com/2010/04/downloading-content-from-svtplay/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://geoip.api.qbrick.com/services/rest/qticket/svtplay.aspx?vurl=http://secure-wm.qbrick.com/90807/kluster/20100418/PG-1117294-012A-PINGU.wmv" length="0" type="video/x-ms-asf;" />
		</item>
		<item>
		<title>Access localhost from virtualbox</title>
		<link>http://blog.jenstinfors.com/2010/04/access-localhost-from-virtualbox/</link>
		<comments>http://blog.jenstinfors.com/2010/04/access-localhost-from-virtualbox/#comments</comments>
		<pubDate>Sun, 18 Apr 2010 05:30:27 +0000</pubDate>
		<dc:creator>jens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[virtualbox]]></category>

		<guid isPermaLink="false">http://blog.jenstinfors.com/?p=241</guid>
		<description><![CDATA[To access services running on localhost from an instance of vmware fusion on mac os x you&#8217;d have to find out the ipaddress of vmnet8, add 1 and use that address from the guest os, like so. Lots of magic &#8230; <a href="http://blog.jenstinfors.com/2010/04/access-localhost-from-virtualbox/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>To access services running on localhost from an instance of <a href="http://www.vmware.com/products/fusion/">vmware fusion</a> on mac os x you&#8217;d have to find out the ipaddress of vmnet8, add 1 and use that address from the guest os, <a href="http://tumblr.jenstinfors.com/post/57262936/vmware-1">like so</a>. Lots of magic going on there..</p>
<p>To access services running on localhost from a <a href="http://www.virtualbox.org/">virtualbox</a> instance you&#8217;d want to use the ipaddress 10.0.2.2. For example, to access a tomcat server running on localhost from the guest OS use address 10.0.2.2:8080. Whats going here is that the guest os, in my case WinXP, has been given an ipaddress in the 10.0.2 range from virtualbox and 10.0.2.2 is the default gateway and thus our gateway to the hosting os.</p>
<div id="attachment_242" class="wp-caption alignleft" style="width: 479px"><a href="http://blog.jenstinfors.com/wp-content/uploads/2010/04/ipconfig.png"><img class="size-full wp-image-242" title="ipconfig" src="http://blog.jenstinfors.com/wp-content/uploads/2010/04/ipconfig.png" alt="ipconfig" width="469" height="110" /></a><p class="wp-caption-text">ipconfig</p></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.jenstinfors.com/2010/04/access-localhost-from-virtualbox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Howto redirect URL&#8217;s containing non-ASCII characters in apache</title>
		<link>http://blog.jenstinfors.com/2010/04/howto-redirect-urls-containing-non-ascii-characters-in-apache/</link>
		<comments>http://blog.jenstinfors.com/2010/04/howto-redirect-urls-containing-non-ascii-characters-in-apache/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 18:48:49 +0000</pubDate>
		<dc:creator>jens</dc:creator>
				<category><![CDATA[web]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[linnéuniversitetet]]></category>
		<category><![CDATA[lnu.se]]></category>
		<category><![CDATA[mod_rewrite]]></category>
		<category><![CDATA[redirect]]></category>

		<guid isPermaLink="false">http://blog.jenstinfors.com/?p=232</guid>
		<description><![CDATA[Redirection of URL&#8217;s in apache is done using its rewrite module. You&#8217;d normally specify a set of conditions followed by a rewrite statement using regular expressions. Like so: RewriteCond %{HTTP_HOST} !^www\.example\.com [NC] RewriteRule ^/(.*) http://www.example.com/$1 [L,R] To match a URL &#8230; <a href="http://blog.jenstinfors.com/2010/04/howto-redirect-urls-containing-non-ascii-characters-in-apache/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Redirection of URL&#8217;s in apache is done using its rewrite module. You&#8217;d normally specify a set of conditions followed by a rewrite statement using regular expressions. Like so:</p>
<pre>RewriteCond %{HTTP_HOST}   !^www\.example\.com [NC]
RewriteRule ^/(.*)         http://www.example.com/$1 [L,R]
</pre>
<p>To match a URL containing non-ASCII characters such as <a href="http://en.wikipedia.org/wiki/Germanic_umlaut">german umlauts</a> you&#8217;d want to use its internationalized domain name (IDN) equivalent. For example the IDN equivalent of linnéuniversitetet.se would be xn--linnuniversitetet-etb.se. Thus a rule to redirect linnéuniversitetet.se to lnu.se would look like the following:</p>
<pre>RewriteCond %{HTTP_HOST}   ^(www\.)?xn--linnuniversitetet-etb.se$ [NC]
RewriteRule ^/?(.*)         http://lnu.se/$1 [L,R=permanent,NE]</pre>
<p>For more info on what the rewrite module can do, have a look at <a href="http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html">Apache Module mod_rewrite</a> documentation.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jenstinfors.com/2010/04/howto-redirect-urls-containing-non-ascii-characters-in-apache/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Working from home in a scrum team</title>
		<link>http://blog.jenstinfors.com/2010/04/working-from-home-in-a-scrum-team/</link>
		<comments>http://blog.jenstinfors.com/2010/04/working-from-home-in-a-scrum-team/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 14:53:15 +0000</pubDate>
		<dc:creator>jens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.jenstinfors.com/?p=213</guid>
		<description><![CDATA[For the past year and a half I&#8217;ve been doing semi scrum, or fake scrum as its more commonly known. Fake because our team is not following the rather strict rules of scrum. We are breaking one of the more &#8230; <a href="http://blog.jenstinfors.com/2010/04/working-from-home-in-a-scrum-team/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>For the past year and a half I&#8217;ve been doing semi scrum, or fake scrum as its more commonly known. Fake because our team is not following the rather strict rules of scrum. We are breaking one of the more fundamental ones by not sitting together in one room. Our team is instead spread out across the country. We are located in three cities, two persons in each city.<br />
This of course has been a real problem because for one it makes collaboration much harder. For example it is impossible for us to just post questions to everyone in the room, because again, we have no physical room. To work around this problem we are using communication tools such as IM and VOIP (Skype).</p>
<p>Two months ago we lost one team mate and now had two peoples in one city, two others in another city and myself alone in the third city.</p>
<p>I have somewhere around 30minutes from door to door traveling from my house to the office. On my way to work in the morning I leave my kid to kindergarten, adding 20 or so minutes. So I thought to myself, hey I have no project pals at the office, I might as well try and work from home!</p>
<p>Tonight I was watching an <a href="http://www.youtube.com/watch?v=39VPMPmOIJc" target="_blank">interview with Jason Fried</a> of 37signals. In this interview he is talking about how they at 37signals have 10 employees spread out across 5 cities in north America and how they only meet face-to-face ones every other week. They primarily use text-based communication rather than voice to force each other to be brief. Of course using their own tools such as basecamp, but also iChat and screen sharing seems to be common. He says not interrupting each other is important and this is when it hits me.</p>
<p>For the past three months I&#8217;ve found myself being more productive than ever. I&#8217;ve found myself being able to focus better on the task at hand. At home there is no background noise, there is no one asking me about the weekend, the weather or lost season 14 episode 2.</p>
<p>Being a firm believer in scrum it is kinda hard for me to accept the fact that not working in a team room actually improves productivity. And being able to focus better when not interrupted I write better quality code, thus improving quality. Yet it is very much evident.</p>
<p>Here&#8217;s one more <a href="http://bigthink.com/ideas/18522">video of Jason</a> on the subject</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jenstinfors.com/2010/04/working-from-home-in-a-scrum-team/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installing Netgear Raidar on Linux</title>
		<link>http://blog.jenstinfors.com/2010/02/installing-netgear-raidar-on-linux/</link>
		<comments>http://blog.jenstinfors.com/2010/02/installing-netgear-raidar-on-linux/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 23:47:02 +0000</pubDate>
		<dc:creator>jens</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[installer]]></category>
		<category><![CDATA[nas]]></category>
		<category><![CDATA[netgear]]></category>
		<category><![CDATA[readynas]]></category>

		<guid isPermaLink="false">http://blog.jenstinfors.com/?p=203</guid>
		<description><![CDATA[Netgears ReadyNAS range of products is a series of network storage devices. I recently bought their DUO model for use as a safe storage of files and for media streaming of both music and movies. I chose the DUO for &#8230; <a href="http://blog.jenstinfors.com/2010/02/installing-netgear-raidar-on-linux/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Netgears ReadyNAS range of products is a series of network storage devices. I recently bought their <a href="http://www.netgear.com/Products/Storage/ReadyNASDuo.aspx">DUO</a> model for use as a safe storage of files and for media streaming of both music and movies. I chose the DUO for three reasons. One it has support for all popular clients OS&#8217;s, two it comes with a preinstalled squeezebox server and three my local dealer ran a campaign on them.</p>
<p>The client software called raidar has a somewhat broken installation script for linux. It is written for bash but specifies bourne shell in the shebang. This is solved by specifying bash when executing it, like so:</p>
<pre class="brush: bash">bash ./setup_Linux.sh</pre>
<p>Also if running from a machine without a graphical environment you&#8217;d want to add -c as an arg to the script to force it to run as a CLI installer, like so:</p>
<pre class="brush: bash">bash ./setup_Linux.sh -c</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.jenstinfors.com/2010/02/installing-netgear-raidar-on-linux/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Facebook And Usability</title>
		<link>http://blog.jenstinfors.com/2010/02/facebook-and-usability/</link>
		<comments>http://blog.jenstinfors.com/2010/02/facebook-and-usability/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 18:38:26 +0000</pubDate>
		<dc:creator>jens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://blog.jenstinfors.com/?p=193</guid>
		<description><![CDATA[[UPDATE 2010-02-24] There&#8217;s  an interesting discussion on the subject on the actual facebook. The popularity and broad adoption of facebook is impressive! So is its lack of usability. Not only do they break EVERY usability guideline out there! The UI &#8230; <a href="http://blog.jenstinfors.com/2010/02/facebook-and-usability/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>[UPDATE 2010-02-24]</strong> <em>There&#8217;s  an interesting discussion on the subject on the actual <a href="http://www.facebook.com/home.php?#!/topic.php?topic=6424&amp;post=72910&amp;uid=10157430556#post72910">facebook</a>.</em></p>
<p>The popularity and broad adoption of facebook is impressive! So is its lack of usability. Not only do they break EVERY usability guideline out there! The UI is  un-intuitive and chaotic. Simply amazing! Here are a few issues that has annoyed the crap out of me lately.</p>
<ul>
<li>No sense of home. This is step one in usability 101. The idea is to create a home or start -page that serves as a caring mother for all the child-pages. The user should feel comfortable in that he/she can always go back to the startpage and find common items such as menus. On facebook there&#8217;s a <strong> Home</strong> button which when clicked presents the user with content that differs slightly from whats displayed when clicking the  <strong>Facebook</strong> button, both differs slightly more compared with whats  displayed when clicking the <strong>Profile</strong> button. 3 different pages with similar or nearly identical content but no sense of home. What more; the same functionality is often found on all these pages, such as writing a note.</li>
<li>Navigational Structure. There are no navigational signposts to indicate where you are or how you  got here. A highlighted tab or a breadcrumb would be a good idea.</li>
<li>Facebook is supposedly all about friends but I fail to find a list of mine. At the friends page (<a title="facebook friends" href="http://www.facebook.com/home.php?#!/?sk=ff">http://www.facebook.com/home.php?#!/?sk=ff</a>) I found a button saying <strong>Create List</strong>. When clicking it the user is presented with a list of all his/her friends. I tried this feature and chose to include all my friends thinking I&#8217;d get a list of all of my friends.  Instead I got another yet another RSS feed of  news/actions/somethings, supposedly with items from all my friends.</li>
<li>Consistent Menus. In order to not confuse your visitors it is good practice to present them with a consistent menu across your site so that they navigate in the same manner on all pages.  The left-hand menu on facebook fluctuates when surfing  the site. This makes users feel insecure about the navigational structure of the site. An example is the  Friends icon which is only available at certain pages.</li>
</ul>
<p>One thing they have fixed recently is support for non-javascript clients. This is a big step forward.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jenstinfors.com/2010/02/facebook-and-usability/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cleaning up all the screenshots</title>
		<link>http://blog.jenstinfors.com/2010/01/cleaning-up-all-the-screenshots/</link>
		<comments>http://blog.jenstinfors.com/2010/01/cleaning-up-all-the-screenshots/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 20:34:35 +0000</pubDate>
		<dc:creator>jens</dc:creator>
				<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://blog.jenstinfors.com/?p=173</guid>
		<description><![CDATA[Im using Scrup in conjunction with its nifty little partner recv, a hungry hungry php script, to automatically upload screenshots from my macbook to my home server. A setup like this is super neat when discussing any screen related things, especially over &#8230; <a href="http://blog.jenstinfors.com/2010/01/cleaning-up-all-the-screenshots/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" title="Scrup" src="http://farm3.static.flickr.com/2567/4121191747_3002198bb5_o.png" alt="" width="301" height="230" />Im using <a title="Scrup" href="http://github.com/rsms/scrup">Scrup</a> in conjunction with its nifty little partner <a title="recv" href="http://github.com/rsms/scrup/blob/master/recv.php">recv</a>, a hungry hungry php script, to automatically upload screenshots from my macbook to my home server. A setup like this is super neat when discussing any screen related things, especially over the phone. Fact is I find it so useful that I started thinking about eventually cleaning up all the uploaded screenshots..</p>
<p>A task perfectly fitted for our long time UNIX friend <strong><a href="http://en.wikipedia.org/wiki/Find">find</a></strong> and his cousin <strong><a href="http://en.wikipedia.org/wiki/Cron">cron</a>! <span style="font-weight: normal;">Cron is a time-based job scheduler and find.. finds files.</span></strong></p>
<p>What I want is to delete all uploaded screenshots on a nightly basis. Each uploaded file is stored in a directory of its own. Im using an apache2 webserver to host the files thus all files are owned by user www-data. I want this nightly cleaning mission to be run by this user. www-data is not allowed to log in herself why we will have to add the cleaning job to her crontab as a normal user. The command below will open up www-data&#8217;s crontab in your favourite editor (vi).</p>
<pre class="brush: shell">sudo crontab -u www-data -e</pre>
<p>To run the cleaning job at midnight, enter the row below, but replace /path/to/www-server/and/uploads with the actual path to your web servers doc root and uploads directory.</p>
<pre>0 0 * * * find /path/to/www-server/and/uploads/* -prune -type d -print0 -exec rm -rf {} \;</pre>
<p>Save and exit the file.</p>
<p>Rejoice!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jenstinfors.com/2010/01/cleaning-up-all-the-screenshots/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
