<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;C0MEQn46eCp7ImA9WhRbGEo.&quot;"><id>tag:blogger.com,1999:blog-7507869444539635439</id><updated>2012-02-10T12:56:43.010+02:00</updated><category term="dialog" /><category term="underscore.js" /><category term="tokenizing" /><category term="ai" /><category term="documentation" /><category term="html5" /><category term="books" /><category term="latex" /><category term="pynu" /><category term="events" /><category term="koodilehto" /><category term="art" /><category term="open source" /><category term="algorithms" /><category term="api" /><category term="autodoc" /><category term="nltk" /><category term="presentation" /><category term="threading" /><category term="software development" /><category term="biking" /><category term="firefox" /><category term="applications" /><category term="travel" /><category term="css" /><category term="italy" /><category term="git" /><category term="code coverage" /><category term="cython" /><category term="mocking" /><category term="bibtex" /><category term="haskell" /><category term="spartaa" /><category term="ast" /><category term="colorjs" /><category term="pyrex" /><category term="fossil" /><category term="gradient" /><category term="review" /><category term="mepis" /><category term="fstab" /><category term="program design" /><category term="future" /><category term="l-systems" /><category term="py.test" /><category term="satchmo" /><category term="mysql" /><category term="refactoring" /><category term="skribit" /><category term="canvasdraw" /><category term="fractals" /><category term="intensedebate" /><category term="rightjs" /><category term="ux" /><category term="django" /><category term="links" /><category term="linkdump" /><category term="multimedia" /><category term="filter" /><category term="rest" /><category term="interpreter" /><category term="photo" /><category term="vpython" /><category term="color" /><category term="packt" /><category term="book review" /><category term="ubuntu" /><category term="testing" /><category term="spatial indexing" /><category term="painting" /><category term="itunes" /><category term="immaterial rights" /><category term="sicily" /><category term="sketching" /><category term="disqus" /><category term="ruby" /><category term="interval" /><category term="haml" /><category term="design patterns" /><category term="computer graphics" /><category term="placidity" /><category term="javascript" /><category term="debugging" /><category term="apple" /><category term="sphinx" /><category term="perl" /><category term="pyqa" /><category term="import" /><category term="map" /><category term="ipad" /><category term="web development" /><category term="layar" /><category term="graphs" /><category term="sidebar" /><category term="lua" /><category term="osx" /><category term="rainbow" /><category term="eliza" /><category term="agents" /><category term="mosaic" /><category term="node" /><category term="bunit" /><category term="agile" /><category term="ios" /><category term="markdown" /><category term="python" /><category term="consulting" /><category term="dwoo" /><category term="umount" /><category term="kanban" /><category term="uml" /><category term="pragprog" /><category term="tdd" /><category term="canvas" /><category term="jsdoit" /><category term="requirejs" /><category term="pandoc" /><category term="linux" /><category term="assert" /><category term="lean" /><category term="computer science" /><category term="math" /><category term="figure drawing" /><category term="system testing" /><category term="opensuse" /><category term="colorama" /><category term="sass" /><category term="speccer" /><category term="php" /><category term="reduce" /><category term="programming" /><category term="dvcs" /><category term="mount" /><category term="tutorial" /><category term="iterplus" /><category term="gis" /><category term="r" /><category term="chaining" /><category term="music" /><category term="games" /><category term="jsshaper" /><category term="harmony" /><category term="keyhandling" /><category term="file system" /><category term="web comics" /><category term="jquery" /><category term="free software" /><category term="software architecture" /><category term="blogger" /><category term="test runner" /><category term="grok" /><category term="jswiki" /><category term="jsopo" /><category term="pypandoc" /><category term="zenwalk" /><category term="twitter" /><category term="functional programming" /><category term="social media" /><category term="bduf" /><category term="tinytest" /><category term="e-commerce" /><title>Nixtu</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://nixtu.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://nixtu.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Juho Vepsäläinen</name><uri>https://profiles.google.com/115138649058841447903</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-QuoPu7sBn8w/AAAAAAAAAAI/AAAAAAAAAxM/2tDPJnOzdNQ/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>140</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/nixtu" /><feedburner:info uri="nixtu" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;C0MEQn45eCp7ImA9WhRbGEo.&quot;"><id>tag:blogger.com,1999:blog-7507869444539635439.post-7420028661603003721</id><published>2012-02-10T12:56:00.000+02:00</published><updated>2012-02-10T12:56:43.020+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-10T12:56:43.020+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="web development" /><title>LiveReload = Instant Productivity Win</title><content type="html">It&amp;#39;s always fun to discover something that bumps up your productivity a notch. In this post I&amp;#39;m going to share one of those discoveries. I&amp;#39;ve always found it awkward to refresh browser during development. Thanks to &lt;a href="http://livereload.com/"&gt;LiveReload&lt;/a&gt; I don&amp;#39;t have to do that anymore.&lt;div&gt;
&lt;/div&gt;&lt;a href="http://nixtu.blogspot.com/2012/02/livereload-instant-productivity-win.html#more"&gt;Read more »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7507869444539635439-7420028661603003721?l=nixtu.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nixtu/~4/ZHbF8EU-ILA" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/7420028661603003721?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/7420028661603003721?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/nixtu/~3/ZHbF8EU-ILA/livereload-instant-productivity-win.html" title="LiveReload = Instant Productivity Win" /><author><name>Juho Vepsäläinen</name><uri>https://profiles.google.com/115138649058841447903</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-QuoPu7sBn8w/AAAAAAAAAAI/AAAAAAAAAxM/2tDPJnOzdNQ/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-nos386AA9HE/TzT0P4JJF1I/AAAAAAAAA5A/DQwNY75L4Ec/s72-c/br.jpg" height="72" width="72" /><feedburner:origLink>http://nixtu.blogspot.com/2012/02/livereload-instant-productivity-win.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkACRn8zeCp7ImA9WhRbEUU.&quot;"><id>tag:blogger.com,1999:blog-7507869444539635439.post-998050786394803209</id><published>2012-02-02T15:19:00.000+02:00</published><updated>2012-02-02T15:19:27.180+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-02T15:19:27.180+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="koodilehto" /><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="jquery" /><title>Ellipsis jQuery plugin + Events at Jyväskylä</title><content type="html">I just released a small &lt;a href="http://bebraw.github.com/ellipsis.js/"&gt;ellipsis plugin for jQuery&lt;/a&gt;. I had some long lists that needed shortening so that did the trick. It works with various other elements too. It's possible to animate that as well.&lt;br /&gt;
&lt;br /&gt;
A lot has been happening around here lately. Here's a brief summary:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;The very first agile conference of Jyväskylä,&amp;nbsp;&lt;a href="http://agilejkl.com/"&gt;AgileJkl&lt;/a&gt;, will be held at April.&amp;nbsp;A similar event,&amp;nbsp;&lt;a href="http://scan-agile.org/"&gt;Scandinavian Agile Conference&lt;/a&gt;,&amp;nbsp;will be&amp;nbsp;held around March at Helsinki.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.geekcollision.org/"&gt;Geek Collision&lt;/a&gt;&amp;nbsp;meetings have continued. So far we haven't had any special events. Just a few (ten or so) geeks and something to drink. Try organizing something like this around there too!&lt;/li&gt;
&lt;li&gt;A demo scene event,&amp;nbsp;&lt;a href="http://instanssi.org/2012/"&gt;Instanssi&lt;/a&gt; (Finnish only), will be held at March. &amp;nbsp;Some members of the co-op I'm involved in will demonstrate their technology there.&lt;/li&gt;
&lt;li&gt;Our very own &lt;a href="http://hacklabjkl.org/"&gt;Hacklab&lt;/a&gt;&amp;nbsp;(Finnish only) will have an open doors night at 14.2.&lt;/li&gt;
&lt;li&gt;Koodilehto, the co-op I'm involved with, just received &lt;a href="http://koodilehto.fi/"&gt;a new site&lt;/a&gt;. Check it out to figure out what we're doing at the moment. You might also want to check out &lt;a href="https://github.com/bebraw/codegrove-site"&gt;the source&lt;/a&gt;. There are some custom bits in it. &lt;a href="http://koodilehto.fi/projects/koodilehto/"&gt;This article&lt;/a&gt; covers the concept and some of the technology used.&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7507869444539635439-998050786394803209?l=nixtu.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nixtu/~4/5LnF1zcPziE" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/998050786394803209?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/998050786394803209?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/nixtu/~3/5LnF1zcPziE/ellipsis-jquery-plugin-events-at.html" title="Ellipsis jQuery plugin + Events at Jyväskylä" /><author><name>Juho Vepsäläinen</name><uri>https://profiles.google.com/115138649058841447903</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-QuoPu7sBn8w/AAAAAAAAAAI/AAAAAAAAAxM/2tDPJnOzdNQ/s512-c/photo.jpg" /></author><feedburner:origLink>http://nixtu.blogspot.com/2012/02/ellipsis-jquery-plugin-events-at.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEDQns5fyp7ImA9WhRUE08.&quot;"><id>tag:blogger.com,1999:blog-7507869444539635439.post-7940975658801917148</id><published>2012-01-23T15:01:00.000+02:00</published><updated>2012-01-23T15:01:13.527+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-23T15:01:13.527+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="jquery" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>Recent JavaScript Projects</title><content type="html">Every now and then I like to write little JS snippets. Lately I&amp;#39;ve been a bit busy with work but there&amp;#39;s always time for some casual coding. In this post I&amp;#39;m going to go through a few of these. I will present the following projects:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/bebraw/caro.js"&gt;caro.js&lt;/a&gt; - Minimalistic carousel plugin (jQuery)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/bebraw/yabox.js"&gt;yabox.js&lt;/a&gt; - Yet Another &lt;a href="http://lokeshdhakar.com/projects/lightbox2/"&gt;Lightbox&lt;/a&gt; clone (jQuery)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jsbin.com/uhamug/32"&gt;Graph Editor&lt;/a&gt; - Little jQuery + jQuery UI hack&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jsbin.com/ojaney/14"&gt;RSS Widget&lt;/a&gt; - Uses &lt;a href="https://developers.google.com/feed/"&gt;Google&amp;#39;s API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/bebraw/codegrove-site/blob/gh-pages/js/twitter.js"&gt;Twitter Widget&lt;/a&gt; - Uses &lt;a href="https://github.com/remy/twitterlib"&gt;twitterlib&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;a href="http://nixtu.blogspot.com/2012/01/recent-javascript-projects.html#more"&gt;Read more »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7507869444539635439-7940975658801917148?l=nixtu.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nixtu/~4/okijGXwDVOY" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/7940975658801917148?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/7940975658801917148?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/nixtu/~3/okijGXwDVOY/recent-javascript-projects.html" title="Recent JavaScript Projects" /><author><name>Juho Vepsäläinen</name><uri>https://profiles.google.com/115138649058841447903</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-QuoPu7sBn8w/AAAAAAAAAAI/AAAAAAAAAxM/2tDPJnOzdNQ/s512-c/photo.jpg" /></author><feedburner:origLink>http://nixtu.blogspot.com/2012/01/recent-javascript-projects.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MERHc_eCp7ImA9WhRbEkQ.&quot;"><id>tag:blogger.com,1999:blog-7507869444539635439.post-8661547080492358690</id><published>2011-12-29T16:19:00.000+02:00</published><updated>2012-02-03T20:56:45.940+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-03T20:56:45.940+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="web development" /><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="speccer" /><category scheme="http://www.blogger.com/atom/ns#" term="haskell" /><category scheme="http://www.blogger.com/atom/ns#" term="software development" /><category scheme="http://www.blogger.com/atom/ns#" term="jsshaper" /><category scheme="http://www.blogger.com/atom/ns#" term="requirejs" /><category scheme="http://www.blogger.com/atom/ns#" term="iterplus" /><category scheme="http://www.blogger.com/atom/ns#" term="placidity" /><category scheme="http://www.blogger.com/atom/ns#" term="pypandoc" /><category scheme="http://www.blogger.com/atom/ns#" term="open source" /><category scheme="http://www.blogger.com/atom/ns#" term="lean" /><category scheme="http://www.blogger.com/atom/ns#" term="pyqa" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="testing" /><title>Blog Highlights of '11</title><content type="html">It looks like this year is nearing its end. Thanks for tagging along! I thought it might be fun to write a post that highlights some of the nicer posts I wrote this year. So far I&amp;#39;ve been blogging around two and a half years.&lt;br&gt;
&lt;br&gt;
I think blogging is slowly starting show its advantages. Just a while ago I needed to solve certain Django specific problem. After googling around I happened to find the solution at my blog. In essence this blog serves as a kind of auxiliary memory of mine. As a side benefit some other people might find my ramblings useful too. This in turn might lead to new chances. Blogging is definitely a good way to market yourself if you&amp;#39;re into that sort of thing.&lt;br&gt;
&lt;br&gt;
There has been &lt;a href="http://bloggingwithoutablog.com/are-blogs-dying/"&gt;some talk on whether or not blogging is dying&lt;/a&gt;. The basic premise is that social mediums such as Facebook and Twitter are eating its popularity. That&amp;#39;s probably partially true. I believe blogs will remain to have some influence. After all you&amp;#39;ll need something to discuss and tweet about. Most importantly blogs are more permanent by nature. It&amp;#39;s easier to refer back to some concrete blog post than some obscure Twitter conversation ages ago. Different mediums serve different purposes.&lt;br&gt;
&lt;br&gt;
Now that I got the intro bit out of the way, let&amp;#39;s take a look at the year. Quite a few things happened. While at it I&amp;#39;ll try to outline some possible ideas for the next one. It&amp;#39;s not like I&amp;#39;m running out of ideas. On the contrary. There&amp;#39;s still plenty of material left I need to get out there sooner or later.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://nixtu.blogspot.com/2011/12/blog-highlights-of-11.html#more"&gt;Read more »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7507869444539635439-8661547080492358690?l=nixtu.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nixtu/~4/H6NZF9qisMo" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/8661547080492358690?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/8661547080492358690?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/nixtu/~3/H6NZF9qisMo/blog-highlights-of-11.html" title="Blog Highlights of '11" /><author><name>Juho Vepsäläinen</name><uri>https://profiles.google.com/115138649058841447903</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-QuoPu7sBn8w/AAAAAAAAAAI/AAAAAAAAAxM/2tDPJnOzdNQ/s512-c/photo.jpg" /></author><feedburner:origLink>http://nixtu.blogspot.com/2011/12/blog-highlights-of-11.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYBSHY_fSp7ImA9WhRWEEg.&quot;"><id>tag:blogger.com,1999:blog-7507869444539635439.post-3961707943153064456</id><published>2011-12-28T09:25:00.000+02:00</published><updated>2011-12-28T09:25:59.845+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-28T09:25:59.845+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="osx" /><category scheme="http://www.blogger.com/atom/ns#" term="itunes" /><title>Replacing iTunes on OS X with Something Better</title><content type="html">Some time ago I finally had it with iTunes on OS X. It&amp;#39;s a really bloated piece of software these days. So as a result I decided to look for an alternative. I wanted something simple that supports multimedia keys for playback. Apparently a combination of &lt;a href="http://www.clementine-player.org/"&gt;Clementine&lt;/a&gt; player and &lt;a href="http://lifehacker.com/5651055/free-your-macs-media-keys-from-itunes-no-manual-hacking-required"&gt;a fix to disable default bindings&lt;/a&gt; does the trick.&lt;br&gt;
&lt;br&gt;
In this post I&amp;#39;ll recap my efforts. I tried various solutions before coming up with this specific combo. I&amp;#39;m not a big fan of Clementine&amp;#39;s playlist driven user interface but it does the trick on a minimal level.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://nixtu.blogspot.com/2011/12/replacing-itunes-on-os-x-with-something.html#more"&gt;Read more »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7507869444539635439-3961707943153064456?l=nixtu.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nixtu/~4/ExFiJHDyRGI" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/3961707943153064456?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/3961707943153064456?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/nixtu/~3/ExFiJHDyRGI/replacing-itunes-on-os-x-with-something.html" title="Replacing iTunes on OS X with Something Better" /><author><name>Juho Vepsäläinen</name><uri>https://profiles.google.com/115138649058841447903</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-QuoPu7sBn8w/AAAAAAAAAAI/AAAAAAAAAxM/2tDPJnOzdNQ/s512-c/photo.jpg" /></author><feedburner:origLink>http://nixtu.blogspot.com/2011/12/replacing-itunes-on-os-x-with-something.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MGQH07cCp7ImA9WhRbEkQ.&quot;"><id>tag:blogger.com,1999:blog-7507869444539635439.post-2044367531987196194</id><published>2011-12-27T22:37:00.000+02:00</published><updated>2012-02-03T20:57:01.308+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-03T20:57:01.308+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="functional programming" /><category scheme="http://www.blogger.com/atom/ns#" term="web development" /><category scheme="http://www.blogger.com/atom/ns#" term="software development" /><category scheme="http://www.blogger.com/atom/ns#" term="node" /><category scheme="http://www.blogger.com/atom/ns#" term="tutorial" /><category scheme="http://www.blogger.com/atom/ns#" term="software architecture" /><category scheme="http://www.blogger.com/atom/ns#" term="css" /><title>How to Write a CSS Preprocessor Using Node.js?</title><content type="html">CSS preprocessors seem to be really popular these days. At least there are many to choose from. See &lt;a href="http://learnboost.github.com/stylus/"&gt;Stylus&lt;/a&gt;, &lt;a href="http://sass-lang.com/"&gt;Sass&lt;/a&gt; and &lt;a href="http://lesscss.org/"&gt;LESS&lt;/a&gt; for example. These kind of tools provide some functionality missing from vanilla CSS and make it more fun to write. Some popular features include variables, functions, mixins, nesting and overall lighter syntax.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://nodejs.org/"&gt;Node.js&lt;/a&gt; (or just Node) is another emerging technology. It is currently the leading server-side solution available for JavaScript. Effectively it enables us to use JavaScript in the whole stack instead of just client side. Some claim this makes it easier to develop (no linguistic context switch). Anyhow it&amp;#39;s one the hot technologies out there at the moment.&lt;br&gt;
&lt;br&gt;
In this post I&amp;#39;m going to show you how to use Node to write a CSS preprocessor with a selected few features. Since &amp;quot;less is more&amp;quot; I&amp;#39;m simply going to call this little project as &amp;quot;more.js&amp;quot;. Hopefully this post gives you some ideas on how you might write your own preprocessor.&lt;br&gt;
&lt;br&gt;
In principle they&amp;#39;re very simple. You just take some data in, transform it and finally spit it out. Most of the magic happens in that transformation stage. I&amp;#39;ll start with the ends (read file, write file) and move onto actual business logic right after that.&lt;br&gt;
&lt;br&gt;
I&amp;#39;ll be using Node v0.6.6 since that&amp;#39;s what I&amp;#39;ve installed on my Mac at the moment. If you are a Mac person too, you can easily install it via &lt;a href="http://www.macports.org/"&gt;MacPorts&lt;/a&gt; simply by invoking &amp;quot;sudo port install nodejs&amp;quot; at terminal. If you are using Linux you should be able to find Node from your local package management system. Note that it might not be the freshest version available so you&amp;#39;re probably better off installing it by other means. You could just &lt;a href="http://nodejs.org/#download"&gt;grab a package directly from their site&lt;/a&gt; and install that. There&amp;#39;s a Windows version available too.&lt;br&gt;
&lt;br&gt;
The code will likely work with a lot older version of Node as well. I used only a couple of Node specific features (mainly file IO). The rest is just vanilla JavaScript.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://nixtu.blogspot.com/2011/12/how-to-write-css-preprocessor-using.html#more"&gt;Read more »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7507869444539635439-2044367531987196194?l=nixtu.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nixtu/~4/Vt5yOCs35pU" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/2044367531987196194?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/2044367531987196194?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/nixtu/~3/Vt5yOCs35pU/how-to-write-css-preprocessor-using.html" title="How to Write a CSS Preprocessor Using Node.js?" /><author><name>Juho Vepsäläinen</name><uri>https://profiles.google.com/115138649058841447903</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-QuoPu7sBn8w/AAAAAAAAAAI/AAAAAAAAAxM/2tDPJnOzdNQ/s512-c/photo.jpg" /></author><feedburner:origLink>http://nixtu.blogspot.com/2011/12/how-to-write-css-preprocessor-using.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4ERX4_fyp7ImA9WhRXGU8.&quot;"><id>tag:blogger.com,1999:blog-7507869444539635439.post-6474563827044364006</id><published>2011-12-26T21:15:00.001+02:00</published><updated>2011-12-26T21:15:04.047+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-26T21:15:04.047+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="open source" /><category scheme="http://www.blogger.com/atom/ns#" term="free software" /><category scheme="http://www.blogger.com/atom/ns#" term="immaterial rights" /><title>Brief Primer to Immaterial Rights</title><content type="html">&lt;i&gt;Disclaimer: I am not a lawyer and cannot be held legally liable if something bad happens because you read this post. M&amp;#39;kay?&lt;/i&gt;&lt;br&gt;
&lt;i&gt;&lt;br&gt;&lt;/i&gt;&lt;br&gt;
Immaterial rights seem like a necessary bad. At least they&amp;#39;re something we&amp;#39;ve to live with. It doesn&amp;#39;t hurt to know something about them. In this post I&amp;#39;ll try to explain some basic terminology related to them and not to bore you too much. If you want some real advice, consult your legal expert. This is here just so you can get started with the topic.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://nixtu.blogspot.com/2011/12/brief-primer-to-immaterial-rights.html#more"&gt;Read more »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7507869444539635439-6474563827044364006?l=nixtu.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nixtu/~4/msf-_LwiAdM" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/6474563827044364006?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/6474563827044364006?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/nixtu/~3/msf-_LwiAdM/brief-primer-to-immaterial-rights.html" title="Brief Primer to Immaterial Rights" /><author><name>Juho Vepsäläinen</name><uri>https://profiles.google.com/115138649058841447903</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-QuoPu7sBn8w/AAAAAAAAAAI/AAAAAAAAAxM/2tDPJnOzdNQ/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-B-BsBQCJkeA/TvI_y2O1sUI/AAAAAAAAA3Y/MXiEnB9Rqbc/s72-c/property.jpg" height="72" width="72" /><feedburner:origLink>http://nixtu.blogspot.com/2011/12/brief-primer-to-immaterial-rights.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EGSXs6eCp7ImA9WhRRFkU.&quot;"><id>tag:blogger.com,1999:blog-7507869444539635439.post-8885426844918919356</id><published>2011-11-30T21:31:00.000+02:00</published><updated>2011-11-30T21:33:48.510+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-30T21:33:48.510+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software development" /><category scheme="http://www.blogger.com/atom/ns#" term="program design" /><category scheme="http://www.blogger.com/atom/ns#" term="ux" /><category scheme="http://www.blogger.com/atom/ns#" term="software architecture" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>Lean UX - Better Software, Faster?</title><content type="html">As you might well know, most software projects are considered failures. We&amp;#39;ve developed software products for a long time and we still don&amp;#39;t get it right. What&amp;#39;s going on?&lt;br&gt;
&lt;br&gt;
I believe it has something to do with the intrinsic complexity of software development. Barriers between various stakeholders definitely aren&amp;#39;t helping the situation. In addition we&amp;#39;re bound by basic laws of communication. In this post I&amp;#39;m going to provide some kind of way, lean UX, that can help us to deal with these issues better. Read on if that rang a bell.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://nixtu.blogspot.com/2011/11/lean-ux-better-software-faster.html#more"&gt;Read more »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7507869444539635439-8885426844918919356?l=nixtu.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nixtu/~4/WDra7SKdM5Y" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/8885426844918919356?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/8885426844918919356?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/nixtu/~3/WDra7SKdM5Y/lean-ux-better-software-faster.html" title="Lean UX - Better Software, Faster?" /><author><name>Juho Vepsäläinen</name><uri>https://profiles.google.com/115138649058841447903</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-QuoPu7sBn8w/AAAAAAAAAAI/AAAAAAAAAxM/2tDPJnOzdNQ/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-tbxTHEqjs6c/TtM_RhlgCzI/AAAAAAAAA2k/2OO-OGTNe6s/s72-c/bonanza.jpg" height="72" width="72" /><feedburner:origLink>http://nixtu.blogspot.com/2011/11/lean-ux-better-software-faster.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QFQ3Y8fCp7ImA9WhRRE0w.&quot;"><id>tag:blogger.com,1999:blog-7507869444539635439.post-1170576105049931658</id><published>2011-11-26T16:55:00.000+02:00</published><updated>2011-11-26T16:55:12.874+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-26T16:55:12.874+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software development" /><category scheme="http://www.blogger.com/atom/ns#" term="book review" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="pragprog" /><title>Book Review - New Programmer's Survival Manual</title><content type="html">&lt;i&gt;Disclaimer: I was part of the tech review team of this book and received a copy of it for free. There was no obligation to review it, however.&lt;/i&gt;&lt;br&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;i&gt;&lt;br&gt;&lt;/i&gt;&lt;br&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-WwNp3l-mv3o/TtD0w6ojLbI/AAAAAAAAA2c/saCrRjeaVEQ/s1600/newprog2.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-WwNp3l-mv3o/TtD0w6ojLbI/AAAAAAAAA2c/saCrRjeaVEQ/s1600/newprog2.jpg"&gt;&lt;/a&gt;&lt;/div&gt;
I don&amp;#39;t consider myself a &amp;quot;new&amp;quot; programmer anymore. I&amp;#39;ve seen my share of projects and technologies. Given this I&amp;#39;m probably not in the exact target market of the book. Nevertheless I managed to glean a few things from here and there.&lt;br&gt;
&lt;br&gt;
In this review I hope to highlight the good parts of the book and help you decide whether or not to pick this puppy up. As mentioned in the disclaimer I was a part of the tech review team of the book. Big thanks to &lt;a href="http://joshcarter.com/"&gt;Josh&lt;/a&gt; and &lt;a href="http://pragprog.com/"&gt;The Pragmatic Programmers&lt;/a&gt; for allowing that! It was a nice learning experience.&lt;br&gt;
&lt;br&gt;
Overall I was happy with the resulting book. It&amp;#39;s one of those books I wish every newcomer to the field would read early on. That&amp;#39;s when it provides the most value. Read on for more impressions.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://nixtu.blogspot.com/2011/11/book-review-new-programmers-survival.html#more"&gt;Read more »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7507869444539635439-1170576105049931658?l=nixtu.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nixtu/~4/8RWeesHAC_s" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/1170576105049931658?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/1170576105049931658?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/nixtu/~3/8RWeesHAC_s/book-review-new-programmers-survival.html" title="Book Review - New Programmer's Survival Manual" /><author><name>Juho Vepsäläinen</name><uri>https://profiles.google.com/115138649058841447903</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-QuoPu7sBn8w/AAAAAAAAAAI/AAAAAAAAAxM/2tDPJnOzdNQ/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-WwNp3l-mv3o/TtD0w6ojLbI/AAAAAAAAA2c/saCrRjeaVEQ/s72-c/newprog2.jpg" height="72" width="72" /><feedburner:origLink>http://nixtu.blogspot.com/2011/11/book-review-new-programmers-survival.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkINR3c6fCp7ImA9WhRSF0w.&quot;"><id>tag:blogger.com,1999:blog-7507869444539635439.post-2846677028997254374</id><published>2011-11-19T18:03:00.000+02:00</published><updated>2011-11-19T18:03:16.914+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-19T18:03:16.914+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="functional programming" /><category scheme="http://www.blogger.com/atom/ns#" term="speccer" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="pyqa" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="tinytest" /><category scheme="http://www.blogger.com/atom/ns#" term="iterplus" /><category scheme="http://www.blogger.com/atom/ns#" term="pypandoc" /><category scheme="http://www.blogger.com/atom/ns#" term="placidity" /><category scheme="http://www.blogger.com/atom/ns#" term="pandoc" /><title>Python Package Updates - speccer 0.7.5, pyqa 0.6.1, iterplus 0.2.5, pypandoc 0.5.0</title><content type="html">I released new versions of some of my Python packages during this week and one old PHP project. I also released a totally new one, &lt;a href="http://pypi.python.org/pypi/pypandoc/"&gt;pypandoc&lt;/a&gt; inspired by my &lt;a href="http://nixtu.blogspot.com/2011/11/pandoc-markup-converter.html"&gt;earlier post&lt;/a&gt;. This post summarizes the most important changes made.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://nixtu.blogspot.com/2011/11/python-package-updates-speccer-075-pyqa.html#more"&gt;Read more »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7507869444539635439-2846677028997254374?l=nixtu.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nixtu/~4/yFpWJBB3jTI" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/2846677028997254374?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/2846677028997254374?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/nixtu/~3/yFpWJBB3jTI/python-package-updates-speccer-075-pyqa.html" title="Python Package Updates - speccer 0.7.5, pyqa 0.6.1, iterplus 0.2.5, pypandoc 0.5.0" /><author><name>Juho Vepsäläinen</name><uri>https://profiles.google.com/115138649058841447903</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-QuoPu7sBn8w/AAAAAAAAAAI/AAAAAAAAAxM/2tDPJnOzdNQ/s512-c/photo.jpg" /></author><feedburner:origLink>http://nixtu.blogspot.com/2011/11/python-package-updates-speccer-075-pyqa.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QHRXg_cSp7ImA9WhRSFE4.&quot;"><id>tag:blogger.com,1999:blog-7507869444539635439.post-9072995748765216326</id><published>2011-11-16T12:28:00.000+02:00</published><updated>2011-11-16T12:28:54.649+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-16T12:28:54.649+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="rest" /><category scheme="http://www.blogger.com/atom/ns#" term="haskell" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="css" /><category scheme="http://www.blogger.com/atom/ns#" term="consulting" /><title>Linkdump 9 - Consulting, Programming, CSS...</title><content type="html">&lt;br /&gt;
&lt;div&gt;
This time my collection of links focuses on consulting, programming and CSS. I hope you find something useful there! Check out the &lt;a href="http://nixtu.blogspot.com/2011/08/linkdump-8-html5-css3-programming-and.html"&gt;previous one&lt;/a&gt; for more of these.&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://unixwiz.net/techtips/be-consultant.html"&gt;So you want to be a consultant...?&lt;/a&gt;&amp;nbsp;Valuable tips esp. for wannabe consultants. Plenty of good points there.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.ezyang.com/2011/11/how-to-read-haskell/"&gt;How to read Haskell like Python&lt;/a&gt;. Definitely worth a read if you already know Python and want to get into Haskell.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://instacss.com/"&gt;instaCSS&lt;/a&gt;. Nice CSS reference that works like Google Instant search.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://shop.oreilly.com/category/deals/hd-javascript-path.do"&gt;O'Reilly JavaScript Campaign&lt;/a&gt;. They have plenty of JavaScript books on discount till January 19th, 2012. It's a good time to pick up some literature if you need some.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://tympanus.net/Tutorials/OriginalHoverEffects/index10.html"&gt;CSS3 Hover Effects&lt;/a&gt;. Some of these are pretty cool, really! There are some other interesting demos on the site as well.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://people.gnome.org/~michael/data/2011-10-13-new-developers.pdf"&gt;Presentation slides - Interacting with new Developers...&lt;/a&gt; If you develop open source software, read this.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://rest.elkstein.org/"&gt;Learn REST: A Tutorial&lt;/a&gt;. If you are a web developer and don't know what REST is, it's a good time to learn a bit about it.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.adrants.com/images/infographic_anatomy_of_an_ad_agency.jpg"&gt;Infographic about anatomy of an agency&lt;/a&gt;. Can you spot yourself over there?&lt;/li&gt;
&lt;li&gt;&lt;a href="http://geekandpoke.typepad.com/geekandpoke/2011/10/ddt.html"&gt;Geek &amp;amp; Poke: DDT&lt;/a&gt;. Too close to the truth?&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7507869444539635439-9072995748765216326?l=nixtu.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nixtu/~4/A6oGG3B-hVI" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/9072995748765216326?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/9072995748765216326?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/nixtu/~3/A6oGG3B-hVI/linkdump-9-consulting-programming-css.html" title="Linkdump 9 - Consulting, Programming, CSS..." /><author><name>Juho Vepsäläinen</name><uri>https://profiles.google.com/115138649058841447903</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-QuoPu7sBn8w/AAAAAAAAAAI/AAAAAAAAAxM/2tDPJnOzdNQ/s512-c/photo.jpg" /></author><feedburner:origLink>http://nixtu.blogspot.com/2011/11/linkdump-9-consulting-programming-css.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEBQXw4fCp7ImA9WhRSEUw.&quot;"><id>tag:blogger.com,1999:blog-7507869444539635439.post-4536144813215410880</id><published>2011-11-12T18:50:00.000+02:00</published><updated>2011-11-12T18:50:50.234+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-12T18:50:50.234+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="speccer" /><category scheme="http://www.blogger.com/atom/ns#" term="software development" /><category scheme="http://www.blogger.com/atom/ns#" term="tutorial" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="testing" /><title>Testing User Input in Python</title><content type="html">Apparently &lt;a href="http://wiki.python.org/moin/Generators"&gt;Python&amp;#39;s generators&lt;/a&gt; are great for testing user input. This is just one way of many. &lt;a href="http://nixtu.blogspot.com/2010/01/placidity-part-13-analysis.html"&gt;Previously&lt;/a&gt; I&amp;#39;ve used a scenario based scheme. In scenario based testing the idea is to set up a multi-line string that mimics the user input and the excepted output. The test runner then asserts that against the actual implementation.&lt;br&gt;
&lt;br&gt;
This can be seen as a form of &lt;a href="http://en.wikipedia.org/wiki/Acceptance_testing"&gt;acceptance testing&lt;/a&gt;. The solution I&amp;#39;m going to present here works on unit level. I guess these two methods could complement each other in some situations.&lt;br&gt;
&lt;a href="http://nixtu.blogspot.com/2011/11/testing-user-input-in-python.html#more"&gt;Read more »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7507869444539635439-4536144813215410880?l=nixtu.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nixtu/~4/XHTDfVhH9XA" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/4536144813215410880?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/4536144813215410880?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/nixtu/~3/XHTDfVhH9XA/testing-user-input-in-python.html" title="Testing User Input in Python" /><author><name>Juho Vepsäläinen</name><uri>https://profiles.google.com/115138649058841447903</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-QuoPu7sBn8w/AAAAAAAAAAI/AAAAAAAAAxM/2tDPJnOzdNQ/s512-c/photo.jpg" /></author><feedburner:origLink>http://nixtu.blogspot.com/2011/11/testing-user-input-in-python.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIARn85cCp7ImA9WhRSEEQ.&quot;"><id>tag:blogger.com,1999:blog-7507869444539635439.post-4326049603832280013</id><published>2011-11-12T13:32:00.000+02:00</published><updated>2011-11-12T13:32:27.128+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-12T13:32:27.128+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="rest" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="markdown" /><title>Pandoc - The Markup Converter</title><content type="html">If you checked the packages I linked to at &lt;a href="http://nixtu.blogspot.com/2011/11/utilities-pyqa-050-iterplus-020-speccer.html"&gt;my previous post&lt;/a&gt; you might have noticed that their descriptions had pretty bad formatting (plain text without oompfh). This has to do with the fact that &lt;a href="http://pypi.python.org/pypi"&gt;PyPI&lt;/a&gt; doesn&amp;#39;t support Markdown syntax. Since I like to write &lt;a href="http://daringfireball.net/projects/markdown/syntax"&gt;Markdown&lt;/a&gt; and rather not convert my files to pure &lt;a href="http://docutils.sourceforge.net/docs/user/rst/quickref.html"&gt;reST&lt;/a&gt; I decided to handle the conversion at my &lt;a href="http://docs.python.org/distutils/setupscript.html"&gt;setup.py&lt;/a&gt; (package metadata).&lt;br&gt;
&lt;br&gt;
During my research I came upon &lt;a href="http://johnmacfarlane.net/pandoc/"&gt;Pandoc&lt;/a&gt;. There are even &lt;a href="http://pypi.python.org/pypi/pyandoc/"&gt;Python bindings&lt;/a&gt; available for it! Sadly those bindings require exact path to Pandoc utility. This isn&amp;#39;t cool since I want the conversion to work anywhere. There might be some nice way to &lt;a href="http://www.computerhope.com/unix/ulocate.htm"&gt;locate&lt;/a&gt; it but I didn&amp;#39;t bother doing that. Instead I found &lt;a href="http://osiux.com/html-to-restructured-text-in-python-using-pandoc"&gt;a nicer solution&lt;/a&gt; that works as well.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://nixtu.blogspot.com/2011/11/pandoc-markup-converter.html#more"&gt;Read more »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7507869444539635439-4326049603832280013?l=nixtu.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nixtu/~4/ZjGwBtwuXGQ" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/4326049603832280013?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/4326049603832280013?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/nixtu/~3/ZjGwBtwuXGQ/pandoc-markup-converter.html" title="Pandoc - The Markup Converter" /><author><name>Juho Vepsäläinen</name><uri>https://profiles.google.com/115138649058841447903</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-QuoPu7sBn8w/AAAAAAAAAAI/AAAAAAAAAxM/2tDPJnOzdNQ/s512-c/photo.jpg" /></author><feedburner:origLink>http://nixtu.blogspot.com/2011/11/pandoc-markup-converter.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUAGSHwyeyp7ImA9WhRSEEw.&quot;"><id>tag:blogger.com,1999:blog-7507869444539635439.post-5119783054124351371</id><published>2011-11-11T14:40:00.001+02:00</published><updated>2011-11-11T15:22:09.293+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-11T15:22:09.293+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="open source" /><category scheme="http://www.blogger.com/atom/ns#" term="functional programming" /><category scheme="http://www.blogger.com/atom/ns#" term="speccer" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="pyqa" /><category scheme="http://www.blogger.com/atom/ns#" term="iterplus" /><title>Utilities - pyqa 0.5.0, iterplus 0.2.0, speccer 0.5.0</title><content type="html">Nothing&amp;#39;s more fun than building some utilities that make it easier to build more utilities! I just spent some time wrapping up a few of these, namely &lt;a href="https://github.com/bebraw/speccer"&gt;speccer&lt;/a&gt;, &lt;a href="https://github.com/bebraw/iterplus"&gt;iterplus&lt;/a&gt; and &lt;a href="https://github.com/bebraw/pyqa"&gt;pyqa&lt;/a&gt;. Depending on the sort of development you do, you might find some of these handy. I&amp;#39;ve developed them mainly for my own consumption but I really don&amp;#39;t mind if someone else wants to use them too.&lt;br&gt;
&lt;br&gt;
I&amp;#39;ve discussed speccer, a testing tool, &lt;a href="http://nixtu.blogspot.com/2011/01/personal-projects-jsopo-speccer-jswiki.html"&gt;briefly earlier&lt;/a&gt;. I developed iterplus based on my post about &lt;a href="http://nixtu.blogspot.com/2011/09/infinite-lists-in-python.html"&gt;infinite lists in Python&lt;/a&gt;.  pyqa is something I came up with to make it easier to write those scripts that ask a bunch of questions and then generate something based on those. Each utility is available at &lt;a href="http://pypi.python.org/pypi"&gt;PyPI&lt;/a&gt;. The following examples should give you a better idea of them.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://nixtu.blogspot.com/2011/11/utilities-pyqa-050-iterplus-020-speccer.html#more"&gt;Read more »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7507869444539635439-5119783054124351371?l=nixtu.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nixtu/~4/6YCAr1bb9qI" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/5119783054124351371?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/5119783054124351371?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/nixtu/~3/6YCAr1bb9qI/utilities-pyqa-050-iterplus-020-speccer.html" title="Utilities - pyqa 0.5.0, iterplus 0.2.0, speccer 0.5.0" /><author><name>Juho Vepsäläinen</name><uri>https://profiles.google.com/115138649058841447903</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-QuoPu7sBn8w/AAAAAAAAAAI/AAAAAAAAAxM/2tDPJnOzdNQ/s512-c/photo.jpg" /></author><feedburner:origLink>http://nixtu.blogspot.com/2011/11/utilities-pyqa-050-iterplus-020-speccer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A04CRHczfip7ImA9WhdaFUg.&quot;"><id>tag:blogger.com,1999:blog-7507869444539635439.post-7501684944780104911</id><published>2011-10-25T19:26:00.000+03:00</published><updated>2011-10-25T19:26:05.986+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-25T19:26:05.986+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="web development" /><category scheme="http://www.blogger.com/atom/ns#" term="software development" /><category scheme="http://www.blogger.com/atom/ns#" term="program design" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>Wireframing Tools for Fun and Profit</title><content type="html">&lt;a href="http://en.wikipedia.org/wiki/Website_wireframe"&gt;Wireframing&lt;/a&gt; provides us a powerful tool that allows us to pre-conceptualize our design ideas and eventually make them rock solid. Often coming up with a crude version of the solution first gives us a lot of valuable information and helps us to come up with better results.&lt;br&gt;
&lt;br&gt;
At the simplest level you require just a pen, a piece of paper and a bit of imagination. Fortunately there are some more high-tech yet still quite light tools available that offer some nice benefits. In this post I&amp;#39;m going to discuss some of these tools in more detail.&lt;br&gt;
&lt;br&gt;
Besides &amp;quot;pen and paper&amp;quot; I&amp;#39;m going to cover iMockups, Balsamiq and FlairBuilder. iMockups is available only for iPad while the latter two are meant to be used on your desktop computer. I&amp;#39;ll also discuss some other alternatives briefly.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://nixtu.blogspot.com/2011/10/wireframing-tools-for-fun-and-profit.html#more"&gt;Read more »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7507869444539635439-7501684944780104911?l=nixtu.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nixtu/~4/b2gCQEkWMSo" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/7501684944780104911?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/7501684944780104911?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/nixtu/~3/b2gCQEkWMSo/wireframing-tools-for-fun-and-profit.html" title="Wireframing Tools for Fun and Profit" /><author><name>Juho Vepsäläinen</name><uri>https://profiles.google.com/115138649058841447903</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-QuoPu7sBn8w/AAAAAAAAAAI/AAAAAAAAAxM/2tDPJnOzdNQ/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-llaPCW4CIX8/TqbQEBQChyI/AAAAAAAAA1E/mXzO0ad17CE/s72-c/penandpaper.jpg" height="72" width="72" /><feedburner:origLink>http://nixtu.blogspot.com/2011/10/wireframing-tools-for-fun-and-profit.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4MQXk9cCp7ImA9WhdaEkQ.&quot;"><id>tag:blogger.com,1999:blog-7507869444539635439.post-8643820891682774536</id><published>2011-10-22T17:16:00.000+03:00</published><updated>2011-10-22T17:16:20.768+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-22T17:16:20.768+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="software development" /><category scheme="http://www.blogger.com/atom/ns#" term="lean" /><title>Why - The Ultimate Question</title><content type="html">It's a good idea to simply ask "why?" when you get stuck with some problem. This simple yet revelatory question may lead surprisingly good results, especially after applied a few times in a row. This technique is also know as "&lt;a href="http://en.wikipedia.org/wiki/5_Whys"&gt;The Five Whys&lt;/a&gt;". Even though it has been named that way, the amount of "whys" can be totally arbitrary.&lt;br /&gt;
&lt;br /&gt;
Interestingly this technique was originally developed by the folks behind &lt;a href="http://en.wikipedia.org/wiki/Kanban"&gt;Kanban&lt;/a&gt; at Toyota Motor Corporation. This kind of &lt;a href="http://en.wikipedia.org/wiki/Root_cause_analysis"&gt;root cause analysis&lt;/a&gt; can give nice insight to processes and the way they work so I guess it's not that surprising.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://en.wikipedia.org/wiki/5_Whys"&gt;The Wikipedia article about the subject&lt;/a&gt; highlights a few possible problems with this method. First of all it is possible to stop asking too soon. Instead of fixing the actual cause of the problem you may end up alleviating its symptoms while leaving the actual problem intact.&lt;br /&gt;
&lt;br /&gt;
Sometimes you simply might not know the right answer or you might get different answers altogether depending on where you get them from. It is also mentioned you might end up revealing just one issue of many.&lt;br /&gt;
&lt;br /&gt;
How to deal with these problems in practice? Given the possibility that you might get multiple answers for each "why", perhaps it makes sense to treat the method in a tree-like manner. Instead of just going through one set of whys, you might want to expand as needed based on your answers. This should help particularly with the last problem mentioned.&lt;br /&gt;
&lt;br /&gt;
"The Five Whys" is a simple yet powerful method to apply in many contexts. If you've got a problem, explore it with whys. At least this should give you some more insight to the subject and hopefully the solution. It's kind of a trivial idea but still one worth keeping in mind.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7507869444539635439-8643820891682774536?l=nixtu.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nixtu/~4/iq7YQPhxwUA" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/8643820891682774536?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/8643820891682774536?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/nixtu/~3/iq7YQPhxwUA/why-ultimate-question.html" title="Why - The Ultimate Question" /><author><name>Juho Vepsäläinen</name><uri>https://profiles.google.com/115138649058841447903</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-QuoPu7sBn8w/AAAAAAAAAAI/AAAAAAAAAxM/2tDPJnOzdNQ/s512-c/photo.jpg" /></author><feedburner:origLink>http://nixtu.blogspot.com/2011/10/why-ultimate-question.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4NQno8eyp7ImA9WhdaEUU.&quot;"><id>tag:blogger.com,1999:blog-7507869444539635439.post-9133911742703364364</id><published>2011-10-21T12:23:00.001+03:00</published><updated>2011-10-21T12:23:13.473+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-21T12:23:13.473+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="kanban" /><category scheme="http://www.blogger.com/atom/ns#" term="software development" /><title>Pretotyping - From Ideas to Reality</title><content type="html">&lt;br /&gt;
Anyone can come up with ideas. It's the selected few that can make them become reality. This is the difference between ideas and innovators. This is also one of the core points of&amp;nbsp;&lt;a href="http://www.infoq.com/presentations/QCon-Keynote-Innovation-at-Google"&gt;Patrick Copeland's QCon keynote, "Innovation at Google"&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Not every idea is worth developing into a full-blown product. How then do you identify which ones are? This is where&amp;nbsp;&lt;a href="http://www.pretotyping.org/"&gt;pretotyping&lt;/a&gt;&amp;nbsp;comes in. It is important not to mix it up with&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Prototype"&gt;prototyping&lt;/a&gt;. According to Copeland, these two concepts operate on different level. Pretotyping is all about coming up with a testable version of idea with minimal cost and effort. Prototyping aims to produce something way more concrete.&lt;br /&gt;
&lt;br /&gt;
This means your pretotype might just be a piece of paper or a block of wood. It is supposed to resemble the real thing enough so you can interact with it in a primitive manner. Instead of having the computer to perform the logic, you might handle that yourself or get a buddy to do that for you and act as an "oracle" of some sort. Whatever you can come up with at minimal cost works as long as it's enough to illustrate the concept!&lt;br /&gt;
&lt;br /&gt;
Once you've got your pretotype up and "running" you might want to use it for a while to see whether or not it really works. Some ideas seem great initially but then fizzle as you get bored with them. It's better to get bored with a pretotype than something more concrete. In the best case you end up wanting to implement the idea because it's proven to work on basic level.&lt;br /&gt;
&lt;br /&gt;
What's the point of all of this? Pretotyping allows us to shuffle through a significant amount of ideas till we find the one that works or at least seems to. I don't believe it's a silver bullet. There are no such things in our industry. It does seem like a viable way to come up with new concepts for products in a lean manner.&lt;br /&gt;
&lt;br /&gt;
Pretotyping moves the focus of development to the right place. We're better off building the right things "wrong" rather than building the wrong things "right". Ideally we should be able combine a proven, top-notch idea with a stellar implementation.&lt;br /&gt;
&lt;br /&gt;
If any of this rang a bell, check out&amp;nbsp;&lt;a href="http://www.infoq.com/presentations/QCon-Keynote-Innovation-at-Google"&gt;the presentation&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://pretotyping.blogspot.com/2011/08/pretotype-it-book-is-done-and-ready-for.html"&gt;the free book&lt;/a&gt;&amp;nbsp;that's available. I have to admit coming upon this concept changed the way I see things quite a bit in a positive manner!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7507869444539635439-9133911742703364364?l=nixtu.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nixtu/~4/rt0klER8BxQ" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/9133911742703364364?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/9133911742703364364?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/nixtu/~3/rt0klER8BxQ/pretotyping-from-ideas-to-reality.html" title="Pretotyping - From Ideas to Reality" /><author><name>Juho Vepsäläinen</name><uri>https://profiles.google.com/115138649058841447903</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-QuoPu7sBn8w/AAAAAAAAAAI/AAAAAAAAAxM/2tDPJnOzdNQ/s512-c/photo.jpg" /></author><feedburner:origLink>http://nixtu.blogspot.com/2011/10/pretotyping-from-ideas-to-reality.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IDR3s7eCp7ImA9WhdbGEo.&quot;"><id>tag:blogger.com,1999:blog-7507869444539635439.post-4264472096320155943</id><published>2011-10-17T11:21:00.000+03:00</published><updated>2011-10-17T22:26:16.500+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-17T22:26:16.500+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="travel" /><category scheme="http://www.blogger.com/atom/ns#" term="italy" /><category scheme="http://www.blogger.com/atom/ns#" term="sicily" /><title>Places to Visit in Western Sicily</title><content type="html">I did a little holiday trip on western Sicily around a week ago or so. The weather was just perfect (around +27C for the week) and there were plenty of nice places to see. I thought it might be a nice to write a post about this experience.&lt;br&gt;
&lt;br&gt;
Compared to Garda region, which I&amp;#39;ve visited before, western Sicily was quite different. You could say it&amp;#39;s less &amp;quot;touristy&amp;quot;. This doesn&amp;#39;t have to be a bad thing, though. There&amp;#39;s definitely a lot to see around there. Too much to see just in a week.&lt;br&gt;
&lt;br&gt;
In this post I&amp;#39;ll cover some highlights of my trip and provide some pointers for people interested in the region. I&amp;#39;m definitely not an expert on the subject. Despite this I hope to give you little insight on the subject should you decide to travel there.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://nixtu.blogspot.com/2011/10/places-to-visit-in-western-sicily.html#more"&gt;Read more »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7507869444539635439-4264472096320155943?l=nixtu.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nixtu/~4/t_oSDgRbrkI" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/4264472096320155943?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/4264472096320155943?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/nixtu/~3/t_oSDgRbrkI/places-to-visit-in-western-sicily.html" title="Places to Visit in Western Sicily" /><author><name>Juho Vepsäläinen</name><uri>https://profiles.google.com/115138649058841447903</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-QuoPu7sBn8w/AAAAAAAAAAI/AAAAAAAAAxM/2tDPJnOzdNQ/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm7.static.flickr.com/6095/6226162560_1f9e72f562_t.jpg" height="72" width="72" /><feedburner:origLink>http://nixtu.blogspot.com/2011/10/places-to-visit-in-western-sicily.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEAR3w8eSp7ImA9WhdUE08.&quot;"><id>tag:blogger.com,1999:blog-7507869444539635439.post-5772336718914944007</id><published>2011-09-29T21:57:00.000+03:00</published><updated>2011-09-29T21:57:26.271+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-29T21:57:26.271+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="assert" /><category scheme="http://www.blogger.com/atom/ns#" term="web development" /><category scheme="http://www.blogger.com/atom/ns#" term="testing" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>Invariant Checker for JavaScript</title><content type="html">I just dug out something interesting from my archives. It&amp;#39;s an invariant checker I developed during my &lt;a href="http://nixtu.blogspot.com/2011/04/overview-of-javascript-application.html"&gt;previous, big JavaScript project&lt;/a&gt;. It is highly useful for validating arguments provided to a function. Sometimes you are aware of these kind of constraints so why not to enforce them at least during development? This concept may be combined with my &lt;a href="https://github.com/bebraw/jsassert"&gt;chaining assert library&lt;/a&gt; (&lt;a href="http://nixtu.blogspot.com/2011/05/chaining-assert-for-javascript.html"&gt;blog post&lt;/a&gt;).&lt;br&gt;
&lt;a href="http://nixtu.blogspot.com/2011/09/invariant-checker-for-javascript.html#more"&gt;Read more »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7507869444539635439-5772336718914944007?l=nixtu.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nixtu/~4/D43Ywga_mAs" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/5772336718914944007?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/5772336718914944007?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/nixtu/~3/D43Ywga_mAs/invariant-checker-for-javascript.html" title="Invariant Checker for JavaScript" /><author><name>Juho Vepsäläinen</name><uri>https://profiles.google.com/115138649058841447903</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-QuoPu7sBn8w/AAAAAAAAAAI/AAAAAAAAAxM/2tDPJnOzdNQ/s512-c/photo.jpg" /></author><feedburner:origLink>http://nixtu.blogspot.com/2011/09/invariant-checker-for-javascript.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEMQnk8cCp7ImA9WhdVGEU.&quot;"><id>tag:blogger.com,1999:blog-7507869444539635439.post-7478391802996480592</id><published>2011-09-24T21:24:00.000+03:00</published><updated>2011-09-24T21:24:43.778+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-24T21:24:43.778+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="functional programming" /><category scheme="http://www.blogger.com/atom/ns#" term="tutorial" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>Infinite Lists in Python</title><content type="html">In my previous post I discussed &lt;a href="http://nixtu.blogspot.com/2011/09/infinite-lists-in-haskell.html"&gt;infinite lists in Haskell&lt;/a&gt;. As it happens the concept may be useful beyond it. As we saw before, using them may yield nice and concise definitions for series. In this post I&amp;#39;m going to show you one way to port the concept to &lt;a href="http://python.org/"&gt;Python&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://nixtu.blogspot.com/2011/09/infinite-lists-in-python.html#more"&gt;Read more »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7507869444539635439-7478391802996480592?l=nixtu.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nixtu/~4/tfXugPiZhs8" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/7478391802996480592?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/7478391802996480592?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/nixtu/~3/tfXugPiZhs8/infinite-lists-in-python.html" title="Infinite Lists in Python" /><author><name>Juho Vepsäläinen</name><uri>https://profiles.google.com/115138649058841447903</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-QuoPu7sBn8w/AAAAAAAAAAI/AAAAAAAAAxM/2tDPJnOzdNQ/s512-c/photo.jpg" /></author><feedburner:origLink>http://nixtu.blogspot.com/2011/09/infinite-lists-in-python.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkECQHY_cSp7ImA9WhdVGU4.&quot;"><id>tag:blogger.com,1999:blog-7507869444539635439.post-2689585433829778518</id><published>2011-09-23T19:01:00.000+03:00</published><updated>2011-09-25T10:11:01.849+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-25T10:11:01.849+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="functional programming" /><category scheme="http://www.blogger.com/atom/ns#" term="haskell" /><category scheme="http://www.blogger.com/atom/ns#" term="tutorial" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="math" /><title>Infinite Lists in Haskell</title><content type="html">Lately I&amp;#39;ve been shaking up my world by delving into &lt;a href="http://haskell.org/"&gt;Haskell&lt;/a&gt;. It has been quite an interesting experience. Compared to the languages I&amp;#39;ve used before it&amp;#39;s somewhat different given it&amp;#39;s a pure, functional language. The language is filled with features. In this post I&amp;#39;m going to discuss one of those, infinite lists in particular.
&lt;br&gt;
&lt;a href="http://nixtu.blogspot.com/2011/09/infinite-lists-in-haskell.html#more"&gt;Read more »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7507869444539635439-2689585433829778518?l=nixtu.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nixtu/~4/v25QuXyl9dc" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/2689585433829778518?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/2689585433829778518?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/nixtu/~3/v25QuXyl9dc/infinite-lists-in-haskell.html" title="Infinite Lists in Haskell" /><author><name>Juho Vepsäläinen</name><uri>https://profiles.google.com/115138649058841447903</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-QuoPu7sBn8w/AAAAAAAAAAI/AAAAAAAAAxM/2tDPJnOzdNQ/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-oXI8eDBffFM/TnyE3WUibDI/AAAAAAAAA00/qgKXT1GeNdM/s72-c/recursion.jpg" height="72" width="72" /><feedburner:origLink>http://nixtu.blogspot.com/2011/09/infinite-lists-in-haskell.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08GRnY9eCp7ImA9WhdWFEs.&quot;"><id>tag:blogger.com,1999:blog-7507869444539635439.post-8959598289289865798</id><published>2011-09-08T10:10:00.000+03:00</published><updated>2011-09-08T10:10:27.860+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-08T10:10:27.860+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="open source" /><category scheme="http://www.blogger.com/atom/ns#" term="packt" /><title>Rewarding Open Source Projects</title><content type="html">InfoWorld just announced its &lt;a href="http://www.infoworld.com/d/open-source-software/bossie-awards-2011-the-best-open-source-software-the-year-171567-1"&gt;Bossie Awards 2011 results&lt;/a&gt;. Now its &lt;a href="http://www.packtpub.com/"&gt;Packt&lt;/a&gt;&amp;#39;s turn to launch their annual &lt;a href="http://www.packtpub.com/news/packt-launches-sixth-annual-open-source-awards"&gt;Open Source Awards competition&lt;/a&gt;, something I &lt;a href="http://nixtu.blogspot.com/2010/08/packt-2010-open-source-awards.html"&gt;covered briefly last year&lt;/a&gt;. It is possible for anyone to &lt;a href="http://www.packtpub.com/open-source-awards-home/nominations"&gt;nominate a project&lt;/a&gt;. Unlike in the case of Bossie, it seems Packt&amp;#39;s awardees are chosen by the community.&lt;br&gt;
&lt;br&gt;
In this post I will try to explore the concept of rewarding open source projects. As it appears in addition to competitions like these there are other, more concrete ways to let your favorite projects know they are valuable.&lt;br&gt;
&lt;a href="http://nixtu.blogspot.com/2011/09/rewarding-open-source-projects.html#more"&gt;Read more »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7507869444539635439-8959598289289865798?l=nixtu.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nixtu/~4/VnTvw6tlHU4" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/8959598289289865798?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/8959598289289865798?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/nixtu/~3/VnTvw6tlHU4/rewarding-open-source-projects.html" title="Rewarding Open Source Projects" /><author><name>Juho Vepsäläinen</name><uri>https://profiles.google.com/115138649058841447903</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-QuoPu7sBn8w/AAAAAAAAAAI/AAAAAAAAAxM/2tDPJnOzdNQ/s512-c/photo.jpg" /></author><feedburner:origLink>http://nixtu.blogspot.com/2011/09/rewarding-open-source-projects.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkAHQ34zcSp7ImA9WhdXFk0.&quot;"><id>tag:blogger.com,1999:blog-7507869444539635439.post-5881775516192206197</id><published>2011-08-29T09:50:00.001+03:00</published><updated>2011-08-29T09:52:12.089+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-29T09:52:12.089+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="art" /><category scheme="http://www.blogger.com/atom/ns#" term="linkdump" /><category scheme="http://www.blogger.com/atom/ns#" term="haskell" /><category scheme="http://www.blogger.com/atom/ns#" term="jswiki" /><category scheme="http://www.blogger.com/atom/ns#" term="html5" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="perl" /><category scheme="http://www.blogger.com/atom/ns#" term="css" /><title>Linkdump 8 - HTML5, CSS3, Programming and a Bit of Art</title><content type="html">Mmm. It has been &lt;a href="http://nixtu.blogspot.com/2010/07/linkdump-7-bit-of-javascript-and-html5.html"&gt;a while&lt;/a&gt; since I've done one of these posts. Here we go then!&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://creativejs.com/"&gt;CreativeJS&lt;/a&gt;. A blog about creative JS. Mainly graphics stuff, though.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://html5doctor.com/"&gt;HTML5 Doctor&lt;/a&gt;. Nice series of articles about HTML5. The element index is super handy too!&lt;/li&gt;
&lt;li&gt;&lt;a href="http://galengidman.com/2010/12/13/css3-sticky-note"&gt;CSS3 Sticky Note&lt;/a&gt;. If you ever write a "notes" app, you'll likely need this.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://monkeyandcrow.com/blog/drawing_lines_with_css3/"&gt;Drawing Lines with CSS3&lt;/a&gt;. Another handy CSS3 technique. If you ever need to draw lines between some elements, you know how to do that now.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.visualmess.com/"&gt;Clean Up Your Mess - A Guide to Visual Design for Everyone&lt;/a&gt;. Good introduction to the basics of visual design.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://contrast.ie/blog/swiss-army-knives/"&gt;Swiss Army Knives&lt;/a&gt;. What should you focus on your product? What are your key features? This article might give some insight on that.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://hyperpolyglot.org/scripting"&gt;Scripting Languages: PHP, Perl, Python, Ruby - a side-by-side reference sheet&lt;/a&gt;. If/when you need to jump between the languages you'll likely need something like this.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://tryhaskell.org/"&gt;Try Haskell! An interactive tutorial in your browser&lt;/a&gt;. What a nice way to grok some basic concepts of &lt;a href="http://haskell.org/"&gt;Haskell&lt;/a&gt;. I managed to get into the language a bit thanks to this.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codecademy.com/"&gt;Codecademy - Learn to Code&lt;/a&gt;. Same thing for JavaScript. Awesome concept.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/bebraw/jswiki/wiki"&gt;jswiki&lt;/a&gt;. A good starting point for ventures in the world of JavaScript.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bibliodyssey.blogspot.com/2011/05/peter-pan-in-kensington-gardens.html"&gt;Peter Pan in Kensington Gardens&lt;/a&gt;. Superb illustrations by &lt;a href="http://en.wikipedia.org/wiki/Arthur_Rackham"&gt;Arthur Rackham&lt;/a&gt;! Well worth studying if you are into art.&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7507869444539635439-5881775516192206197?l=nixtu.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nixtu/~4/Qq6auIho670" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/5881775516192206197?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/5881775516192206197?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/nixtu/~3/Qq6auIho670/linkdump-8-html5-css3-programming-and.html" title="Linkdump 8 - HTML5, CSS3, Programming and a Bit of Art" /><author><name>Juho Vepsäläinen</name><uri>https://profiles.google.com/115138649058841447903</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-QuoPu7sBn8w/AAAAAAAAAAI/AAAAAAAAAxM/2tDPJnOzdNQ/s512-c/photo.jpg" /></author><feedburner:origLink>http://nixtu.blogspot.com/2011/08/linkdump-8-html5-css3-programming-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MGRHs4cCp7ImA9WhdXE00.&quot;"><id>tag:blogger.com,1999:blog-7507869444539635439.post-1379505711691127209</id><published>2011-08-25T22:43:00.000+03:00</published><updated>2011-08-25T22:43:45.538+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-25T22:43:45.538+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="html5" /><category scheme="http://www.blogger.com/atom/ns#" term="tutorial" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="canvas" /><category scheme="http://www.blogger.com/atom/ns#" term="gradient" /><title>HTML5 Canvas Gradients - Rectangular Gradient</title><content type="html">I came by an &lt;a href="http://stackoverflow.com/questions/7031330/rectangular-gradient-with-html5-canvas-element/"&gt;interesting question at Stack Overflow&lt;/a&gt; a while ago. It asked how to render a rectangular gradient using HTML5 Canvas. I&amp;#39;m going to present you my solution in this post. It ended up being quite nice and simple.&lt;br&gt;
&lt;a href="http://nixtu.blogspot.com/2011/08/html5-canvas-gradients-rectangular.html#more"&gt;Read more »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7507869444539635439-1379505711691127209?l=nixtu.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nixtu/~4/Oe7Qv46wAWk" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/1379505711691127209?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/1379505711691127209?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/nixtu/~3/Oe7Qv46wAWk/html5-canvas-gradients-rectangular.html" title="HTML5 Canvas Gradients - Rectangular Gradient" /><author><name>Juho Vepsäläinen</name><uri>https://profiles.google.com/115138649058841447903</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-QuoPu7sBn8w/AAAAAAAAAAI/AAAAAAAAAxM/2tDPJnOzdNQ/s512-c/photo.jpg" /></author><feedburner:origLink>http://nixtu.blogspot.com/2011/08/html5-canvas-gradients-rectangular.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cFSHc8fyp7ImA9WhdXEEQ.&quot;"><id>tag:blogger.com,1999:blog-7507869444539635439.post-5052573903363664454</id><published>2011-08-23T14:30:00.000+03:00</published><updated>2011-08-23T14:30:19.977+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-23T14:30:19.977+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="computer graphics" /><category scheme="http://www.blogger.com/atom/ns#" term="web development" /><category scheme="http://www.blogger.com/atom/ns#" term="color" /><category scheme="http://www.blogger.com/atom/ns#" term="colorjs" /><category scheme="http://www.blogger.com/atom/ns#" term="testing" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="bunit" /><title>New JavaScript Libraries - colorjs + bunit.js</title><content type="html">After a long while of doing some real work I&amp;#39;ve been able to spend some time on my own, personal development. As I happen to like to have nice tools at my disposal whenever the time comes, I&amp;#39;ve focused on tools. I still have some ideas to implement. These two should provide a nice start, though.&lt;br&gt;
&lt;br&gt;
In this post I&amp;#39;m going to introduce two new libraries of mine: &lt;a href="https://github.com/bebraw/colorjs"&gt;colorjs&lt;/a&gt; and &lt;a href="https://github.com/bebraw/bunit.js"&gt;bunit.js&lt;/a&gt;. The former provides a simple color abstraction while the latter one is handy for testing.&lt;br&gt;
&lt;a href="http://nixtu.blogspot.com/2011/08/new-javascript-libraries-colorjs.html#more"&gt;Read more »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7507869444539635439-5052573903363664454?l=nixtu.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nixtu/~4/NjSDf60xlWU" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/5052573903363664454?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7507869444539635439/posts/default/5052573903363664454?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/nixtu/~3/NjSDf60xlWU/new-javascript-libraries-colorjs.html" title="New JavaScript Libraries - colorjs + bunit.js" /><author><name>Juho Vepsäläinen</name><uri>https://profiles.google.com/115138649058841447903</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-QuoPu7sBn8w/AAAAAAAAAAI/AAAAAAAAAxM/2tDPJnOzdNQ/s512-c/photo.jpg" /></author><feedburner:origLink>http://nixtu.blogspot.com/2011/08/new-javascript-libraries-colorjs.html</feedburner:origLink></entry></feed>

