<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2326610515171456192</id><updated>2012-01-17T22:57:51.222+01:00</updated><category term='turtle'/><category term='rail gauge'/><category term='flash'/><category term='processing'/><category term='solution'/><category term='package'/><category term='ai'/><category term='news'/><category term='material'/><category term='bug'/><category term='collaboration'/><category term='small'/><category term='ping'/><category term='topics'/><category term='privacy'/><category term='reply'/><category term='info'/><category term='poll'/><category term='mpdconf'/><category term='service'/><category term='packing'/><category term='clarity'/><category term='manufacturing'/><category term='computer algebra'/><category term='keyboard layout'/><category term='quine'/><category term='awk'/><category term='mouse'/><category term='trains'/><category term='configuration'/><category term='hostname'/><category term='spam'/><category term='reliability'/><category term='email'/><category term='contribute'/><category term='xhtml'/><category term='morse'/><category term='iq'/><category term='alltray'/><category term='alternative'/><category term='reading'/><category term='hdd'/><category term='type'/><category term='host'/><category term='board game'/><category term='java'/><category term='unkownhostexception'/><category term='downtime'/><category term='lock'/><category term='grey'/><category term='waste'/><category term='holiday'/><category term='left'/><category term='graphics'/><category term='musical instrument'/><category term='literate'/><category term='battery'/><category term='etc'/><category term='format'/><category term='lambda'/><category term='accident'/><category term='chroot'/><category term='hours'/><category term='industry'/><category term='online'/><category term='microcontroller'/><category term='thinkpad'/><category term='ctags'/><category term='disaster'/><category term='j2me'/><category term='problems'/><category term='categories'/><category term='monopoly'/><category term='opinion'/><category term='out'/><category term='point-free'/><category term='optimization'/><category term='dsl'/><category term='landfill'/><category term='hypercube'/><category term='design'/><category term='xtest'/><category term='screen saver'/><category term='making'/><category term='opl'/><category term='framework'/><category term='ubuntu'/><category term='project'/><category term='greater-than'/><category term='error'/><category term='svn'/><category term='porting'/><category term='google'/><category term='education'/><category term='activity'/><category term='technology'/><category term='support'/><category term='eee'/><category term='net'/><category term='drive'/><category term='short'/><category term='efficiency'/><category term='quote'/><category term='status'/><category term='input'/><category term='logo'/><category term='ado'/><category term='site'/><category term='interface'/><category term='portable'/><category term='lazy'/><category term='sysrq'/><category term='bkil.hu'/><category term='csharp'/><category term='water'/><category term='path dependence'/><category term='sound'/><category term='plugin'/><category term='bicycle'/><category term='clothing'/><category term='pgp key'/><category term='shopping delivery'/><category term='computer'/><category term='voice'/><category term='tuner'/><category term='pmedia'/><category term='gimp'/><category term='uml'/><category term='maintenance'/><category term='proposition'/><category term='code'/><category term='psion'/><category term='clients'/><category term='firewall'/><category term='ham'/><category term='remove object'/><category term='preformatted'/><category term='repository'/><category term='hardware'/><category term='synthesis'/><category term='ecology'/><category term='share'/><category term='less-than'/><category term='embedded'/><category term='hack'/><category term='math'/><category term='speed'/><category term='boot'/><category term='fragmentation'/><category term='optimize'/><category term='tileable'/><category term='repl'/><category term='music'/><category term='high'/><category term='size'/><category term='button'/><category term='tar'/><category term='readership'/><category term='xv'/><category term='diagram'/><category term='fault'/><category term='wood'/><category term='netbook'/><category term='high level'/><category term='sequencing'/><category term='kernel'/><category term='hanoi'/><category term='virus'/><category term='server'/><category term='mathematics'/><category term='browsing'/><category term='foss'/><category term='project management'/><category term='resynthetizer'/><category term='problem'/><category term='transportation'/><category term='calculator'/><category term='install'/><category term='argouml'/><category term='display'/><category term='adjacent'/><category term='t42'/><category term='erlang'/><category term='ampersand'/><category term='web'/><category term='C'/><category term='lenny'/><category term='epiphany'/><category term='type system'/><category term='gray'/><category term='wodim'/><category term='art'/><category term='energy crop'/><category term='settings'/><category term='syntax'/><category term='triangle'/><category term='bike'/><category term='c#'/><category term='psychology'/><category term='pda'/><category term='ergonomics'/><category term='society'/><category term='ergonomy'/><category term='shift'/><category term='haskell'/><category term='seek'/><category term='keyboard'/><category term='repair'/><category term='link'/><category term='tv'/><category term='xp'/><category term='cpu'/><category term='double click'/><category term='contest'/><category term='ggitick'/><category term='abstract'/><category term='scala'/><category term='diy'/><category term='logic'/><category term='jre'/><category term='refactoring'/><category term='os'/><category term='touch-up'/><category term='security'/><category term='shirt'/><category term='mistakes'/><category term='economy'/><category term='groups'/><category term='save'/><category term='tvtime'/><category term='links2'/><category term='language'/><category term='geek'/><category term='bash'/><category term='game'/><category term='links'/><category term='comprehension'/><category term='move'/><category term='afsk'/><category term='canola'/><category term='puppy'/><category term='light cargo'/><category term='split'/><category term='interpreter'/><category term='fuel'/><category term='photo'/><category term='edit'/><category term='initrd'/><category term='try'/><category term='speech recognition'/><category term='city'/><category term='escape'/><category term='software'/><category term='html'/><category term='color'/><category term='stuck'/><category term='partition'/><category term='fun'/><category term='version control'/><category term='vcs'/><category term='pre'/><category term='ls'/><category term='ide'/><category term='examples'/><category term='midp'/><category term='articles'/><category term='electric'/><category term='neckband'/><category term='hugs'/><category term='wiki'/><category term='javascript'/><category term='bgcolor'/><category term='rm'/><category term='mirror'/><category term='change'/><category term='hosts'/><category term='environment'/><category term='crack'/><category term='gnu'/><category term='cdrecord'/><category term='cas'/><category term='assembly'/><category term='help'/><category term='C++'/><category term='caps'/><category term='download'/><category term='delete'/><category term='toy'/><category term='python'/><category term='vala'/><category term='monitor'/><category term='biomass'/><category term='mpd'/><category term='debian'/><category term='domain'/><category term='open'/><category term='background'/><category term='irrigation'/><category term='bury'/><category term='debootstrap'/><category term='default'/><category term='science'/><category term='operating system'/><category term='linux'/><category term='man'/><category term='key'/><category term='me'/><category term='conservation'/><category term='personal'/><category term='level'/><category term='fluxbox'/><category term='programming'/><category term='tutorial'/><category term='random'/><category term='tiny'/><category term='lisp'/><category term='communication'/><category term='font'/><category term='blog'/><category term='ascii'/><category term='tire'/><category term='trip'/><category term='options'/><category term='pascal'/><category term='xorg'/><category term='source'/><category term='grass'/><category term='tags'/><category term='yourself'/><category term='kick scooter'/><category term='advise'/><category term='strict'/><category term='texture'/><category term='food'/><category term='languages'/><category term='functional programming'/><category term='entertainment'/><category term='house'/><category term='joke'/><category term='ocaml'/><category term='vote'/><category term='quotes'/><category term='placement'/><category term='compo'/><category term='genie'/><category term='command line'/><category term='symbolic'/><category term='mono'/><category term='traffic'/><category term='switches'/><category term='renewable'/><category term='lcd'/><category term='bounce'/><category term='commuting'/><category term='password'/><category term='sociology'/><category term='interest'/><title type='text'>bkil's blog on science, programming, ecology, ...</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default?start-index=101&amp;max-results=100'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>154</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-1371464620543345973</id><published>2012-01-17T22:57:00.000+01:00</published><updated>2012-01-17T22:57:51.257+01:00</updated><title type='text'>ntuser.dat - P:\oxvy</title><content type='html'>I was just reading through the binary dump of a computer's registry that I've been using, and I found some very nice strings, like oxvy. I know at least one person who knows what that means. ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-1371464620543345973?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/1371464620543345973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=1371464620543345973&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/1371464620543345973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/1371464620543345973'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2012/01/ntuserdat-poxvy.html' title='ntuser.dat - P:\oxvy'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-6201182458676108735</id><published>2012-01-13T21:45:00.000+01:00</published><updated>2012-01-13T21:45:28.661+01:00</updated><title type='text'>FreeGuide EPG with daemonized XMLTV</title><content type='html'>&lt;p&gt;I'm evaluating &lt;a href="http://www.artificialworlds.net/freeguide/Main/HomePage"&gt;FreeGuide&lt;/a&gt;, an electronic program guide supporting &lt;a href="http://wiki.xmltv.org/index.php/Main_Page"&gt;XMLTV&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;I wrote a &lt;a href="http://code.google.com/p/bkil-open/source/browse/trunk/volatile/tv/update_guide.sh"&gt;tool to grab the TV guide&lt;/a&gt; for a few days in advance. I &lt;a href="http://code.google.com/p/bkil-open/source/browse/trunk/volatile/tv/crontab.txt"&gt;schedule&lt;/a&gt; it to run on startup and twice an hour. I have to run it so often as my PC at home is only switched on for a few hours each day (either manually or via &lt;a href="http://code.google.com/p/bkil-open/source/browse/trunk/volatile/tv/timedtv.sh"&gt;automated recording scheduler&lt;/a&gt;). Note that polling would be unneeded after correctly implementing a &lt;a href="http://code.google.com/p/bkil-open/issues/detail?id=4"&gt;universal power scheduler&lt;/a&gt;. Despite such frequent invocation, it only executes the core process if no update has happened in the last two days. It also splits the downloaded guide by days to lower processing in the update helper below and to make a possible future selective update easier.&lt;/p&gt;&lt;p&gt;I made an &lt;a href="http://code.google.com/p/bkil-open/source/browse/trunk/volatile/tv/view_guide.sh"&gt;update helper for FreeGuide&lt;/a&gt; which keeps track of the data which was imported to the viewer previously and initiated importing of only the new parts.&lt;/p&gt;&lt;p&gt;One of my next projects will be to &lt;a href="http://code.google.com/p/bkil-open/issues/detail?id=5"&gt;install and tweak teletext based XMLTV provider for Hungarian norms&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-6201182458676108735?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/6201182458676108735/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=6201182458676108735&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/6201182458676108735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/6201182458676108735'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2012/01/freeguide-epg-with-daemonized-xmltv.html' title='FreeGuide EPG with daemonized XMLTV'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-1899678629755022348</id><published>2012-01-03T11:45:00.000+01:00</published><updated>2012-01-03T11:45:06.884+01:00</updated><title type='text'>naked domain seems to be working somehow</title><content type='html'>I'm not sure how they managed to finally set up naked domain redirection, or if it's a present from Google, but I sure am delighted! :) My cards contained only the naked domain you know...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-1899678629755022348?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/1899678629755022348/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=1899678629755022348&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/1899678629755022348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/1899678629755022348'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2012/01/naked-domain-seems-to-be-working.html' title='naked domain seems to be working somehow'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-8123284867574999740</id><published>2011-12-31T19:21:00.000+01:00</published><updated>2011-12-31T19:21:00.510+01:00</updated><title type='text'>bixerver</title><content type='html'>Hosting problems again. Considering switching registrar, as this is beyond acceptable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-8123284867574999740?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/8123284867574999740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=8123284867574999740&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/8123284867574999740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/8123284867574999740'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2011/12/bixerver.html' title='bixerver'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-3534765854124291532</id><published>2011-11-26T12:36:00.003+01:00</published><updated>2011-12-02T18:15:48.209+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='domain'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='bkil.hu'/><category scheme='http://www.blogger.com/atom/ns#' term='delete'/><category scheme='http://www.blogger.com/atom/ns#' term='host'/><category scheme='http://www.blogger.com/atom/ns#' term='change'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='downtime'/><title type='text'>www.bkil.hu downtime next week</title><content type='html'>My web host is changing their terms of service and have sent me notice that on the 28th of November, they will stop hosting my service.&lt;br /&gt;&lt;br /&gt;They say that they have already informed my on the 26th of July about this issue, though I don't recall having read that.&lt;br /&gt;&lt;br /&gt;I'm still searching for alternatives. As a backup plan, I'm in the process of activating Google Apps services on the domain until a solution is found. Unfortunately, I'm not sure naked domain redirection would work in this phase. Also, my domain registrar has no online control panel, so I have to take the longer, manual route of adjustments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-3534765854124291532?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/3534765854124291532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=3534765854124291532&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/3534765854124291532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/3534765854124291532'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2011/11/bkilhu-downtime-next-week.html' title='www.bkil.hu downtime next week'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-5619708613708846750</id><published>2011-10-07T12:08:00.003+02:00</published><updated>2011-10-07T12:15:06.665+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='service'/><category scheme='http://www.blogger.com/atom/ns#' term='out'/><category scheme='http://www.blogger.com/atom/ns#' term='groups'/><category scheme='http://www.blogger.com/atom/ns#' term='yourself'/><category scheme='http://www.blogger.com/atom/ns#' term='lock'/><category scheme='http://www.blogger.com/atom/ns#' term='error'/><category scheme='http://www.blogger.com/atom/ns#' term='bug'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='fault'/><title type='text'>Google groups bug - removing yourself</title><content type='html'>You can remove yourself by following this guide.&lt;br /&gt;&lt;br /&gt; * Invite your address with a &lt;a href="http://labnol.blogspot.com/2006/09/gmail-easter-eggs-dot-blindess-email.html"&gt;+tag added or different capitalization or dots &lt;/a&gt;&lt;br /&gt; * Click on the confirmation link&lt;br /&gt; * Add owner rights to this account&lt;br /&gt; * Remove the plain account&lt;br /&gt; * You can never log in again afterwards&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-5619708613708846750?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/5619708613708846750/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=5619708613708846750&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/5619708613708846750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/5619708613708846750'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2011/10/google-groups-bug-removing-yourself.html' title='Google groups bug - removing yourself'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-2658678363179227025</id><published>2011-03-03T13:11:00.003+01:00</published><updated>2011-03-03T22:22:55.492+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='share'/><category scheme='http://www.blogger.com/atom/ns#' term='open'/><category scheme='http://www.blogger.com/atom/ns#' term='activity'/><category scheme='http://www.blogger.com/atom/ns#' term='host'/><category scheme='http://www.blogger.com/atom/ns#' term='source'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><category scheme='http://www.blogger.com/atom/ns#' term='status'/><category scheme='http://www.blogger.com/atom/ns#' term='high'/><category scheme='http://www.blogger.com/atom/ns#' term='level'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='repository'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>bkil-open has reached high activity status</title><content type='html'>&lt;a href="http://code.google.com/p/bkil-open/"&gt;My project&lt;/a&gt; has reached high activity status this weekend. I must thank all committers. Keep up the good work! ;-)&lt;br /&gt;&lt;br /&gt;Note that a major portion of my sources is still not up. Fortunately, gradual progress is easy and effortless. A central repository is a comfortable sharing method. It keeps the work synchronized on all 4 computers I regularly use.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-2658678363179227025?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/2658678363179227025/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=2658678363179227025&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/2658678363179227025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/2658678363179227025'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2011/03/bkil-open-has-reached-high-activity.html' title='bkil-open has reached high activity status'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-2041413441024251881</id><published>2011-02-17T20:28:00.002+01:00</published><updated>2011-02-17T20:28:00.185+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ergonomy'/><category scheme='http://www.blogger.com/atom/ns#' term='delete'/><category scheme='http://www.blogger.com/atom/ns#' term='adjacent'/><category scheme='http://www.blogger.com/atom/ns#' term='placement'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='save'/><category scheme='http://www.blogger.com/atom/ns#' term='button'/><title type='text'>Ergonomy - placement of buttons of destruction</title><content type='html'>Putting the two buttons "quicksave" and "instantly and permanently delete without confirmation" right next to each other is a no-no, especially for a service that offers gigabytes of free space and a trashcan folder for most other operations.&lt;br /&gt;&lt;br /&gt;Thankfully, they've introduced a quick undo feature, and later on extended the time-out of this button. It's still a bit scary if you think about this adjacency being implemented on many interfaces.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-2041413441024251881?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/2041413441024251881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=2041413441024251881&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/2041413441024251881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/2041413441024251881'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2011/02/ergonomy-placement-of-buttons-of.html' title='Ergonomy - placement of buttons of destruction'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-7569086555928201495</id><published>2011-02-15T02:55:00.001+01:00</published><updated>2011-02-15T02:55:00.842+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='hypercube'/><category scheme='http://www.blogger.com/atom/ns#' term='online'/><category scheme='http://www.blogger.com/atom/ns#' term='small'/><category scheme='http://www.blogger.com/atom/ns#' term='contest'/><category scheme='http://www.blogger.com/atom/ns#' term='logo'/><category scheme='http://www.blogger.com/atom/ns#' term='tiny'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='examples'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='interpreter'/><category scheme='http://www.blogger.com/atom/ns#' term='turtle'/><category scheme='http://www.blogger.com/atom/ns#' term='compo'/><category scheme='http://www.blogger.com/atom/ns#' term='size'/><title type='text'>Javascript Logo interpreter</title><content type='html'>&lt;a href="http://www.calormen.com/logo/"&gt;Online JavaScript Logo interpreter&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.mathcats.com/gallery/15wordcontest.html"&gt;some very beautiful and terse Logo examples&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The following is one of my favorites from there.&lt;br /&gt;&lt;br /&gt;Hypercube, by Frank Caggiano, U.S.:&lt;br /&gt;&lt;code&gt;repeat 8 [repeat 4 [rt 90 fd 100] bk 100 lt 45]&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-7569086555928201495?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/7569086555928201495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=7569086555928201495&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/7569086555928201495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/7569086555928201495'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2011/02/javascript-logo-interpreter.html' title='Javascript Logo interpreter'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-6046630018038045951</id><published>2011-02-13T20:01:00.005+01:00</published><updated>2011-02-13T20:16:10.535+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='screen saver'/><category scheme='http://www.blogger.com/atom/ns#' term='tvtime'/><category scheme='http://www.blogger.com/atom/ns#' term='bug'/><category scheme='http://www.blogger.com/atom/ns#' term='xtest'/><category scheme='http://www.blogger.com/atom/ns#' term='shift'/><category scheme='http://www.blogger.com/atom/ns#' term='keyboard'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='tuner'/><category scheme='http://www.blogger.com/atom/ns#' term='type'/><category scheme='http://www.blogger.com/atom/ns#' term='key'/><category scheme='http://www.blogger.com/atom/ns#' term='left'/><category scheme='http://www.blogger.com/atom/ns#' term='tv'/><category scheme='http://www.blogger.com/atom/ns#' term='xorg'/><category scheme='http://www.blogger.com/atom/ns#' term='caps'/><category scheme='http://www.blogger.com/atom/ns#' term='stuck'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Shift key often gets stuck on Ubuntu 10.04</title><content type='html'>The problem is triggered by me rapidly changing capitalization via shift while typing. I use the two shift keys symmetrically, but it always seems to involve the left shift. It lasts from about 10 to 30 seconds on average, but today it ceased to resolve by itself.&lt;br /&gt;&lt;br /&gt;So I started to research the issue (IN CAPS), and thankfully found something that seemed to work: CTRL+FN-F1 to switch to a console, then back to Xorg with CTRL+FN-F7, and pressing the left shift right away.&lt;br /&gt;&lt;br /&gt;Maybe it is indeed related to TVTime usage, I need to concentrate more on the issue. It is said to be caused by automatic periodical screen saver inhibition via stuffing control and shift keypresses using XTest.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://bugs.launchpad.net/ubuntu/+bug/588473"&gt;Ubuntu Bug #588473: shift key get stuck randomly&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-6046630018038045951?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/6046630018038045951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=6046630018038045951&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/6046630018038045951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/6046630018038045951'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2011/02/shift-key-often-gets-stuck-on-ubuntu.html' title='Shift key often gets stuck on Ubuntu 10.04'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-7573523619973216119</id><published>2011-01-05T23:42:00.001+01:00</published><updated>2011-01-05T23:42:00.320+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='genie'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='vala'/><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='logo'/><category scheme='http://www.blogger.com/atom/ns#' term='language'/><title type='text'>My programming language usage</title><content type='html'>In recent months, I've been developing Python (Geany, Netbeans), BASH (gedit, Geany) and a bit of HTML/Javascript (Netbeans, Geany) for work, Java (Eclipse) for coursework, Erlang (Emacs, sometimes Geany) and a bit of Emacs LISP (Geany) for labwork, and Haskell (Geany) for my own needs. I have also refreshed my Logo (Geany) skills recently to refactor two of my homeworks. I will move to C++/Qt/FFmpeg/SQLite (Qt Creator) again in the upcoming days for some time. I have dug into Gnome's Genie (and Vala) and will write a short overview of the language soon.&lt;br /&gt;&lt;br /&gt;That's 8-10 languages at my fingertips, but a few more aren't deep down below either, like C (you never forget the horror), Ada (hard to forget the beauty), Pascal (need to find a way to convert to Ada), Eiffel (have seen it, but no professional coding done in it yet).&lt;br /&gt;&lt;br /&gt;Sadly, I'm not allowed to share my Python code, and some of my more interesting BASH scripts. You also can't enjoy some unpublished parts of RefactorErl I made, nor the confidential Haskell algorithms I've been working on recently.&lt;br /&gt;&lt;br /&gt;Anyway, one of my classmates cried out loud why we need to learn all these exotic languages as we will never see any use of them. She said she works in Java and it fits all of their needs perfectly. She started to look puzzled after the first few items in my list.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-7573523619973216119?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/7573523619973216119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=7573523619973216119&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/7573523619973216119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/7573523619973216119'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2011/01/my-programming-language-usage.html' title='My programming language usage'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-8041866943695915685</id><published>2010-12-31T23:40:00.001+01:00</published><updated>2010-12-31T23:42:46.937+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='contribute'/><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='share'/><category scheme='http://www.blogger.com/atom/ns#' term='wiki'/><category scheme='http://www.blogger.com/atom/ns#' term='version control'/><category scheme='http://www.blogger.com/atom/ns#' term='project management'/><category scheme='http://www.blogger.com/atom/ns#' term='source'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='vcs'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>Sharing my source the Proper way</title><content type='html'>I plan to share my sources via a software project management suite. From now on, you could even contribute if you wish! You could also follow project updates (commits, documentation pages, releases, etc.) in your feed reader.&lt;br /&gt;&lt;br /&gt;I don't have a problem with using Google's products for open source development, but do tell me if you think otherwise. Kosi had recommended GitHub, but it doesn't offer all features I need, and I'm hesitant to spread over many service providers.&lt;br /&gt;&lt;br /&gt;For more information, visit the &lt;a href="http://code.google.com/p/bkil-open/"&gt;bkil's personally developed and used tools&lt;/a&gt; project summary page.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-8041866943695915685?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/8041866943695915685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=8041866943695915685&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/8041866943695915685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/8041866943695915685'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2010/12/sharing-my-source-proper-way.html' title='Sharing my source the Proper way'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-1172233947159934225</id><published>2010-12-31T00:01:00.002+01:00</published><updated>2010-12-31T00:08:11.827+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='info'/><category scheme='http://www.blogger.com/atom/ns#' term='options'/><category scheme='http://www.blogger.com/atom/ns#' term='configuration'/><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><category scheme='http://www.blogger.com/atom/ns#' term='ctags'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='command line'/><category scheme='http://www.blogger.com/atom/ns#' term='bug'/><category scheme='http://www.blogger.com/atom/ns#' term='switches'/><category scheme='http://www.blogger.com/atom/ns#' term='ls'/><category scheme='http://www.blogger.com/atom/ns#' term='man'/><category scheme='http://www.blogger.com/atom/ns#' term='cdrecord'/><category scheme='http://www.blogger.com/atom/ns#' term='settings'/><category scheme='http://www.blogger.com/atom/ns#' term='entertainment'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='wodim'/><title type='text'>BUG: has even more options than ls</title><content type='html'>This seems to be some kind of an easter egg in man pages.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sourceforge.net/tracker/?func=detail&amp;amp;aid=2707519&amp;amp;group_id=6556&amp;amp;atid=106556"&gt;Exuberant Ctags bug at SourceForge: ctags doesn't have more options than ls - ID: 2707519&lt;/a&gt; (- after all)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://manpages.unixforum.co.uk/man-pages/linux/opensuse-10.2/1/wodim-man-page.html"&gt;wodim man page&lt;/a&gt; (formerly cdrecord) - see the top of the BUGS section&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-1172233947159934225?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/1172233947159934225/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=1172233947159934225&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/1172233947159934225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/1172233947159934225'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2010/12/bug-has-even-more-options-than-ls.html' title='BUG: has even more options than ls'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-8575686382709368204</id><published>2010-11-07T14:23:00.000+01:00</published><updated>2010-11-07T15:11:55.878+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='functional programming'/><category scheme='http://www.blogger.com/atom/ns#' term='ocaml'/><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><category scheme='http://www.blogger.com/atom/ns#' term='strict'/><category scheme='http://www.blogger.com/atom/ns#' term='lazy'/><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><title type='text'>OCaml vs. Haskell</title><content type='html'>Do you prefer laziness or ease of compiler implementation and proof of correctness? Haskell feels very comfortable to me, and I can write some beautiful code in it. Laziness could introduce some complexity to reason about temporary memory usage. It's the same reason I like Erlang: quick, dirty, but also elegantly minimalistic and predictable. I haven't tackled OCaml (&lt;strong&gt;yet&lt;/strong&gt; ;-&gt;). Do you think it worths it?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://news.ycombinator.com/item?id=319892"&gt;OCaml vs. Haskell discussion at Y-Combinator&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.reddit.com/r/programming/comments/6mt7z/haskell_performance_is_on_par_with_ocaml/"&gt;Haskell performance is on par with OCaml (shootout.alioth.debian.org)&lt;/a&gt; do note, that the Haskell compiler and solutions have evolved since then&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-8575686382709368204?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/8575686382709368204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=8575686382709368204&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/8575686382709368204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/8575686382709368204'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/09/ocaml-vs-haskell.html' title='OCaml vs. Haskell'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-6685793981000859660</id><published>2010-11-06T21:26:00.004+01:00</published><updated>2010-11-06T21:42:42.315+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='server'/><category scheme='http://www.blogger.com/atom/ns#' term='monitor'/><category scheme='http://www.blogger.com/atom/ns#' term='ping'/><category scheme='http://www.blogger.com/atom/ns#' term='hours'/><category scheme='http://www.blogger.com/atom/ns#' term='bounce'/><category scheme='http://www.blogger.com/atom/ns#' term='email'/><category scheme='http://www.blogger.com/atom/ns#' term='maintenance'/><category scheme='http://www.blogger.com/atom/ns#' term='spam'/><category scheme='http://www.blogger.com/atom/ns#' term='host'/><category scheme='http://www.blogger.com/atom/ns#' term='move'/><category scheme='http://www.blogger.com/atom/ns#' term='site'/><category scheme='http://www.blogger.com/atom/ns#' term='downtime'/><title type='text'>bkil.hu has moved</title><content type='html'>The host of &lt;a href="http://bkil.hu"&gt;bkil.hu&lt;/a&gt; has decided to switch servers &lt;strong&gt;and&lt;/strong&gt; inform me only afterwards with an e-mail that got into the spam folder for most people. You get what you pay for. That means my secondary private mail addresses gave bounce messages for about 60 hours, sorry about that. I only check them when I have time.&lt;br /&gt;&lt;br /&gt;By the way, I found out all about this issue when running ping. It's a great habit of mine to do that daily. Actually, I have a trivial script running in the background to endlessly send a ping packet to bkil.hu once in a few minutes to keep my wireless links active for dumb access points. Too bad I rarely check its output in detail. That just gave me an idea! ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-6685793981000859660?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/6685793981000859660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=6685793981000859660&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/6685793981000859660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/6685793981000859660'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2010/11/bkilhu-has-moved.html' title='bkil.hu has moved'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-7004637054882159467</id><published>2010-11-06T01:11:00.000+01:00</published><updated>2010-11-07T15:07:14.913+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='symbolic'/><category scheme='http://www.blogger.com/atom/ns#' term='online'/><category scheme='http://www.blogger.com/atom/ns#' term='education'/><category scheme='http://www.blogger.com/atom/ns#' term='computer algebra'/><category scheme='http://www.blogger.com/atom/ns#' term='cas'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='calculator'/><category scheme='http://www.blogger.com/atom/ns#' term='net'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>An online open source computer symbolic algebra system</title><content type='html'>It looks like I forgot to publish this post from my drafts. A colleague of mine has recommended this.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://user.mendelu.cz/marik/maw/index.php?lang=en&amp;form=integral2"&gt;Mathematical Assistant on Web (installed)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://mathassistant.sourceforge.net/"&gt;Mathematical Assistant on Web (sources&lt;/a&gt;)&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/2326610515171456192-7004637054882159467?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/7004637054882159467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=7004637054882159467&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/7004637054882159467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/7004637054882159467'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2010/04/online-open-source-computer-symbolic.html' title='An online open source computer symbolic algebra system'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-2110327677489034653</id><published>2010-06-20T22:30:00.001+02:00</published><updated>2010-06-20T22:51:57.552+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hosts'/><category scheme='http://www.blogger.com/atom/ns#' term='uml'/><category scheme='http://www.blogger.com/atom/ns#' term='argouml'/><category scheme='http://www.blogger.com/atom/ns#' term='problem'/><category scheme='http://www.blogger.com/atom/ns#' term='hostname'/><category scheme='http://www.blogger.com/atom/ns#' term='etc'/><category scheme='http://www.blogger.com/atom/ns#' term='unkownhostexception'/><category scheme='http://www.blogger.com/atom/ns#' term='collaboration'/><category scheme='http://www.blogger.com/atom/ns#' term='solution'/><category scheme='http://www.blogger.com/atom/ns#' term='diagram'/><title type='text'>Running argoUML, fixing hostname</title><content type='html'>When attempting to run &lt;a href="http://argouml.tigris.org/"&gt;ArgoUML&lt;/a&gt; under my custom install of Debian Lenny, it died on startup with the following:&lt;br /&gt;"ERROR: unable to get localhost information.&lt;br /&gt;java.net.UnknownHostException (...)"&lt;br /&gt;&lt;br /&gt;solution: check the output of the command &lt;code&gt;hostname&lt;/code&gt;, add a line corresponding to that name to the file &lt;code&gt;/etc/hosts&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Anyway, it might be a great piece of software, but I didn't have much luck with the functionality I needed. Namely, my simple collaboration diagram got its indexes all mixed up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-2110327677489034653?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/2110327677489034653/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=2110327677489034653&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/2110327677489034653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/2110327677489034653'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2010/06/running-argouml-fixing-hostname.html' title='Running argoUML, fixing hostname'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-2373138319218223194</id><published>2010-05-17T10:10:00.000+02:00</published><updated>2010-05-17T10:10:00.298+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='puppy'/><category scheme='http://www.blogger.com/atom/ns#' term='package'/><category scheme='http://www.blogger.com/atom/ns#' term='install'/><category scheme='http://www.blogger.com/atom/ns#' term='download'/><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='try'/><category scheme='http://www.blogger.com/atom/ns#' term='hugs'/><title type='text'>Install Hugs under Puppy Linux to program Haskell</title><content type='html'>Hugs is a nice little interpreter if you'd like to try out the language Haskell. It has few dependencies and it requires moderate resources to run. The download for a minimal install is less than 1.5MiB in size.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;If you have an operating system with package management, you can simply install the package 'hugs', or 'hugs98'. For example, on Debian-based systems (including Ubuntu) this amount to simply running: &lt;code&gt;aptitude install hugs&lt;/code&gt;&lt;/li&gt;&lt;li&gt;On distributions without a decent package manager (like Puppy Linux), you can install the Debian packages manually (refer to your distribution for details, but it usually involves clicking on each downloaded package or typing &lt;code&gt;dpkg -i name.deb&lt;/code&gt;). You first need to select a Debian major distribution version which matches with the versions of libraries on your system. On the Pupeee (Puppy 4.3) I had been using till now, choosing Lenny seems to work fine. So I've downloaded each i386 version from a mirror close-by of the following packages:&lt;ol&gt;&lt;li&gt;&lt;a href="http://packages.debian.org/lenny/hugs"&gt;hugs&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://packages.debian.org/lenny/libhugs-base"&gt;libhugs-base&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://packages.debian.org/lenny/libhugs-haskell98"&gt;libhugs-haskell98&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Installing other software this way usually works just as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-2373138319218223194?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/2373138319218223194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=2373138319218223194&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/2373138319218223194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/2373138319218223194'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2010/05/install-hugs-under-puppy-linux-to.html' title='Install Hugs under Puppy Linux to program Haskell'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-2632688575463963750</id><published>2010-05-16T01:05:00.002+02:00</published><updated>2010-06-20T22:25:39.858+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='photo'/><category scheme='http://www.blogger.com/atom/ns#' term='texture'/><category scheme='http://www.blogger.com/atom/ns#' term='edit'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='tileable'/><category scheme='http://www.blogger.com/atom/ns#' term='touch-up'/><category scheme='http://www.blogger.com/atom/ns#' term='synthesis'/><category scheme='http://www.blogger.com/atom/ns#' term='remove object'/><category scheme='http://www.blogger.com/atom/ns#' term='resynthetizer'/><title type='text'>Install GIMP resynthesizer for texturization</title><content type='html'>With this free GIMP plugin, texture synthesis is possible. It can generate images and fill voids from a given texture sample.&lt;br /&gt;&lt;br /&gt;Its uses include making a picture tileable, removing objects from images and images comforming to a given theme.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.logarithmic.net/pfh/resynthesizer"&gt;resynthesizer source code, binary and free windows download&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://schwarzvogel.de/resynth-tut-sa.shtml"&gt;Resynthesizer tutorial&lt;/a&gt; - use the Earth as seen from the Moon as your background picture&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/2326610515171456192-2632688575463963750?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/2632688575463963750/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=2632688575463963750&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/2632688575463963750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/2632688575463963750'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2010/05/install-gimp-resynthetizer-for.html' title='Install GIMP resynthesizer for texturization'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-215493204368481427</id><published>2010-05-04T08:19:00.002+02:00</published><updated>2010-05-04T12:13:09.978+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='puppy'/><category scheme='http://www.blogger.com/atom/ns#' term='pmedia'/><category scheme='http://www.blogger.com/atom/ns#' term='initrd'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='error'/><category scheme='http://www.blogger.com/atom/ns#' term='kernel'/><category scheme='http://www.blogger.com/atom/ns#' term='thinkpad'/><category scheme='http://www.blogger.com/atom/ns#' term='boot'/><category scheme='http://www.blogger.com/atom/ns#' term='t42'/><title type='text'>Puppy Linux on the IBM ThinkPad T42</title><content type='html'>I only gave a quick shot at the beast, but it did work out pretty well. It didn't work out of the box, however.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;kernel: 2.6.31.5 (Puppy)&lt;/li&gt;&lt;li&gt;hardware: IBM ThinkPad T42&lt;/li&gt;&lt;li&gt;error message: initrd boot error "pup-431.sfs not found"&lt;/li&gt;&lt;li&gt;solution: remove 'pmedia=usbflash' from syslinux.cfg&lt;/li&gt;&lt;li&gt;other remedies to try:&lt;ol&gt;&lt;li&gt;kernel command line: add 'acpi=force' and 'pci=noacpi'&lt;/li&gt;&lt;li&gt;BIOS: turn off Fast Boot&lt;/li&gt;&lt;/ol&gt;&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/2326610515171456192-215493204368481427?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/215493204368481427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=215493204368481427&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/215493204368481427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/215493204368481427'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2010/05/puppy-linux-on-ibm-thinkpad-t42.html' title='Puppy Linux on the IBM ThinkPad T42'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-4717224363322323311</id><published>2010-04-28T20:34:00.003+02:00</published><updated>2010-04-28T21:03:42.917+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><category scheme='http://www.blogger.com/atom/ns#' term='processing'/><title type='text'>Elementwise processing 2.1 for common keys in Haskell</title><content type='html'>Here's a neat little utility function which I commonly find useful.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;ef2_1 :: (a -&amp;gt; a -&amp;gt; a) -&amp;gt; (a -&amp;gt; a -&amp;gt; Bool) -&amp;gt; [a] -&amp;gt; [a] -&amp;gt; [a]&lt;br /&gt;ef2_1 = ef0 [] where&lt;br /&gt;&amp;nbsp;ef0 zs f lt (x:xs) (y:ys) | lt x y = ef0 (x:zs) f lt xs (y:ys)&lt;br /&gt;&amp;nbsp;ef0 zs f lt (x:xs) (y:ys) | lt y x = ef0 (y:zs) f lt (x:xs) ys&lt;br /&gt;&amp;nbsp;ef0 zs f lt (x:xs) (y:ys) = ef0 (f x y:zs) f lt xs ys&lt;br /&gt;&amp;nbsp;ef0 zs _ _ xr yr = reverse $ xr ++ yr ++ zs&lt;br /&gt;&lt;br /&gt;main = print $ ef2_1 (\x _-&amp;gt;x) (\(x,_) (y,_)-&amp;gt;x&amp;lt;y) d1 d2 where&lt;br /&gt;&amp;nbsp;d1 = [(1,9), (3,8), (4,7), (5,6), (7,5)]&lt;br /&gt;&amp;nbsp;d2 = [(2,5), (4,4), (6,3)]&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-4717224363322323311?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/4717224363322323311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=4717224363322323311&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/4717224363322323311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/4717224363322323311'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2010/04/elementwise-processing-21-for-common.html' title='Elementwise processing 2.1 for common keys in Haskell'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-6057065810950252570</id><published>2010-04-25T12:34:00.000+02:00</published><updated>2010-04-25T12:34:00.892+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='traffic'/><category scheme='http://www.blogger.com/atom/ns#' term='ecology'/><category scheme='http://www.blogger.com/atom/ns#' term='bicycle'/><category scheme='http://www.blogger.com/atom/ns#' term='optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='ergonomics'/><title type='text'>Making metropolitan travel more ergonomic</title><content type='html'>It would make a difference if they have published the exact synchronization of traffic lights and/or broadcast timely phase signals (via UDP over GPRS or such).&lt;br /&gt;&lt;br /&gt;Using this data combined with the readings of the bicycle odometer, software on your PDA or mobile phone could continuously suggest a velocity that should minimize idling at each traffic light. Manual settings for maximal speed, acceleration and cardiovascular pulse could be given.&lt;br /&gt;&lt;br /&gt;Note that this strategy only works well for uncongested networks, like dedicated bicycle lanes or paths.&lt;br /&gt;&lt;br /&gt;Trained cyclist already apply a similar technique manually, however, not all lights are synchronized to each other.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-6057065810950252570?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/6057065810950252570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=6057065810950252570&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/6057065810950252570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/6057065810950252570'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2010/04/making-metropolitan-travel-more.html' title='Making metropolitan travel more ergonomic'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-5123614945207822842</id><published>2010-04-23T11:11:00.001+02:00</published><updated>2010-04-23T11:11:00.225+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>Can you guess which conjecture these try to test?</title><content type='html'>&lt;code&gt;let f l 1=l++[1];f l k|mod k 2==0=f(l++[k])(div k 2);f l k=f(l++[k])(3*k+1)in putStr $ unlines $ map (show . f[]) [1..11]&lt;br /&gt;&lt;br /&gt;let f l 1=reverse(1:l);f l k|mod k 2==0=f(k:l)(div k 2);f l k=f(k:l)(3*k+1)in putStr $ unlines $ map (show . f[]) [1..11]&lt;br /&gt;&lt;br /&gt;let f 1=Nothing;f k=Just(g k,g k);g k|mod k 2==0=div k 2;g k=3*k+1 in putStr $ unlines $ map (show . \n -&gt; n:unfoldr f n) [1..11]&lt;br /&gt;&lt;br /&gt;let f 1=Nothing;f k=let x=(if mod k 2==0 then div k 2 else 3*k+1)in Just(x,x)in putStr $ unlines $ map (show . \n -&gt; n:unfoldr f n) [1..11]&lt;/code&gt;&lt;!-- http://en.wikipedia.org/wiki/Collatz_conjecture --&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-5123614945207822842?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/5123614945207822842/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=5123614945207822842&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/5123614945207822842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/5123614945207822842'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2010/04/can-you-guess-which-conjecture-these.html' title='Can you guess which conjecture these try to test?'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-1308702770492239736</id><published>2010-04-21T01:11:00.001+02:00</published><updated>2010-04-21T01:11:00.278+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='voice'/><category scheme='http://www.blogger.com/atom/ns#' term='speech recognition'/><category scheme='http://www.blogger.com/atom/ns#' term='neckband'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><title type='text'>Silent voice - input method innovation</title><content type='html'>They have conducted the following interesting experiment. Electrodes were placed on the skin of a subject at the neck. Then a specially trained person imitated a phone call without sounding an utterance or even moving his lips!&lt;br /&gt;&lt;br /&gt;They say, when "articulating" text in one's mind, the nerves relevant to speech are activated similarly to when reading the text aloud. They have achieved fair decoding accuracy from these signals.&lt;br /&gt;&lt;br /&gt;There could exist many use cases for an interface built around these findings. On top of all previously known applications for speech recognition, those could also be realized which were inappropriate at certain locations because of the noise induced by speech. Imagine the workplace perspective of talking on the phone without opening your lips or making any sound, all with the speed of speech!&lt;br /&gt;&lt;br /&gt;Too bad it has such a low speed in practise today. I wonder how far they can push it.&lt;br /&gt;&lt;br /&gt;You can also view a video demonstration at the original article: &lt;a href="http://www.newscientist.com/article/dn13449-nervetapping-neckband-used-in-telepathic-chat.html"&gt;Nerve-tapping neckband used in 'telepathic' chat&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-1308702770492239736?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/1308702770492239736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=1308702770492239736&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/1308702770492239736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/1308702770492239736'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2010/04/silent-voice-input-method-innovation.html' title='Silent voice - input method innovation'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-2373312122765071613</id><published>2010-04-19T00:34:00.000+02:00</published><updated>2010-04-19T00:34:00.722+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bicycle'/><category scheme='http://www.blogger.com/atom/ns#' term='diy'/><title type='text'>Constructing a simple portable bike</title><content type='html'>I've been considering if it would make sense to construct a bike "from scratch" using general materials for a frame. It could also be equipped with standard bicycle components to make repairs much easier.&lt;br /&gt;&lt;br /&gt;The concept of building the frame (and thus the bike) akin to playing with a metal &lt;a href="http://en.wikipedia.org/wiki/Construction_set"&gt;toy construction set&lt;/a&gt; sounds interesting. It would allow great innovation in portability.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-2373312122765071613?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/2373312122765071613/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=2373312122765071613&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/2373312122765071613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/2373312122765071613'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2010/04/constructing-simple-portable-bike.html' title='Constructing a simple portable bike'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-4430866136971664323</id><published>2010-04-17T11:11:00.001+02:00</published><updated>2010-04-17T11:11:00.478+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='proposition'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='ergonomics'/><title type='text'>Replayable keylogging for yourself</title><content type='html'>It would be feasible to protect as much information created by the user as possible. Certain software have evolved the ability to partially provide a feature similar to this via periodically created temporary document copies (editors) or constantly refreshed configuration files (browsers). Most of them use their own, unconfigurable, error-prone ad-hoc solutions.&lt;br /&gt;&lt;br /&gt;I propose that a solution be found at the operating system level which any software can reuse.&lt;br /&gt;&lt;br /&gt;Keyboard input could be considered the most entropy rich for most users, however, selection and positioning via the mouse pointer must also be taken into account. The good solution would probably model widget activation in an abstract manner.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-4430866136971664323?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/4430866136971664323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=4430866136971664323&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/4430866136971664323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/4430866136971664323'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2010/04/replayable-keylogging-for-yourself.html' title='Replayable keylogging for yourself'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-4652773021731213691</id><published>2010-04-15T10:10:00.001+02:00</published><updated>2010-04-15T10:10:00.276+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='monopoly'/><category scheme='http://www.blogger.com/atom/ns#' term='ecology'/><title type='text'>Best buy elsewhere</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://linuxinnovations.blogspot.com/2009/09/microshit-trains-bestbuy-employees-to.html"&gt;WorstBuy Trains Employees to Boo Linux to Customers&lt;/a&gt; [linuxinnovations]&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.dailyfinance.com/2009/09/06/microsoft-indoctrinates-best-buy-workers-with-anti-linux-lies/"&gt;Microsoft 'indoctrinates' Best Buy workers with anti-Linux 'lies'&lt;/a&gt; [DailyFinance]&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;"First they ignore you, then they laugh at you, then they fight you, then you win." - Mohandas Karamchand Gandhi&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-4652773021731213691?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/4652773021731213691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=4652773021731213691&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/4652773021731213691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/4652773021731213691'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2010/04/best-buy-elsewhere.html' title='Best buy elsewhere'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-83290357360560203</id><published>2010-04-13T01:01:00.001+02:00</published><updated>2010-04-13T01:01:00.067+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='economy'/><title type='text'>You just have to love monopoly</title><content type='html'>&lt;a href="http://www.marketwatch.com/story/ftc-sues-intel-for-anticompetitive-tactics-2009-12-16"&gt;FTC sues Intel for 'anticompetitive tactics'&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-83290357360560203?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/83290357360560203/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=83290357360560203&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/83290357360560203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/83290357360560203'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2010/04/you-just-have-to-love-monopoly.html' title='You just have to love monopoly'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-3948163087232681741</id><published>2010-04-12T00:34:00.000+02:00</published><updated>2010-04-12T00:34:00.100+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bike'/><category scheme='http://www.blogger.com/atom/ns#' term='ecology'/><title type='text'>Nice creative homebrew bike project implementations</title><content type='html'>This guy is committing some wicked do-it-yourselfing! His portfolio also include tree perches and full featured low-cost mobile homes for the homeless.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.highmileagetrikes.blogspot.com/"&gt;High mileage trikes and more&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-3948163087232681741?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/3948163087232681741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=3948163087232681741&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/3948163087232681741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/3948163087232681741'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2010/04/nice-creative-homebrew-bike-project.html' title='Nice creative homebrew bike project implementations'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-1431729469185657868</id><published>2010-04-10T01:11:00.000+02:00</published><updated>2010-04-10T01:11:00.455+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='commuting'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='news'/><category scheme='http://www.blogger.com/atom/ns#' term='bicycle'/><category scheme='http://www.blogger.com/atom/ns#' term='city'/><category scheme='http://www.blogger.com/atom/ns#' term='kick scooter'/><title type='text'>Bike replacement</title><content type='html'>I have replaced my portable bicycle with a small kick scooter a few months ago. Testing is still underway. Average commuting speed is in excess of 10km/h for longer intra-city trips. Riding comfort is fair on sidewalks not made of bricks. Bicycle lanes with bricks are a bit rough, but still doable. I agree that the device does give you a better workout than a bicycle.&lt;br /&gt;&lt;br /&gt;At around the same time, I'm beginning to use one of my mountain bikes in the city.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-1431729469185657868?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/1431729469185657868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=1431729469185657868&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/1431729469185657868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/1431729469185657868'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2010/04/bike-replacement.html' title='Bike replacement'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-3281001709682541731</id><published>2010-04-09T12:34:00.000+02:00</published><updated>2010-04-09T12:34:00.820+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='news'/><category scheme='http://www.blogger.com/atom/ns#' term='psion'/><title type='text'>My Psion MC218 got retired</title><content type='html'>I have input more than 1 million characters of notes, coursework, ideas, plans and doodling on the device. I've programmed some simple calculations on it to aid my purchases. Sadly, I never got around to develop in Java for the device. I've finished all 50 Sokoban levels on it for the delight of my good old mathematician roommate many years ago. :-)&lt;br /&gt;&lt;br /&gt;All in all, it was worth it. However, I've retired it in favour of my netbook last year.&lt;br /&gt;&lt;br /&gt;Though, I still carry it around in my backback as a backup solution to this day. I also accompany it with an extra set of rechargeable batteries.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-3281001709682541731?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/3281001709682541731/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=3281001709682541731&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/3281001709682541731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/3281001709682541731'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2010/04/my-psion-mc218-got-retired.html' title='My Psion MC218 got retired'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-659461051841355544</id><published>2010-04-08T13:11:00.000+02:00</published><updated>2010-04-08T13:11:00.364+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='netbook'/><category scheme='http://www.blogger.com/atom/ns#' term='news'/><title type='text'>Computer replacement - Asus Eee PC</title><content type='html'>I've purchased a new Asus Eee PC 2g (700x) portable "netbook" computer last year. It cost the equivalent of about 128 Euros in a local shop nearby, though prices were very close citywide back then. At least I found good use for my aging 4 GiB USB flash drive.&lt;br /&gt;&lt;br /&gt;I'd been considering this exact purchase since the manufacturer has announced this line. Though for business reasons, it took them some time to market the smallest model.&lt;br /&gt;&lt;br /&gt;I've loaded Pupee Linux on it, installed Google Chrome, disabled a few background processes, developed a few simple scripts for it and made some other small customizations. I may share my exact customizations later on.&lt;br /&gt;&lt;br /&gt;Battery life varies greatly with usage. If you disable all onboard devices and turn down the backlight to about 10-20%, you can study from PDF or HTML documents for 3:07 (187 minutes). The biggest consumers are the processor and the wireless radio, so heavily browsing the web on a wireless network reduces this to a bit over two hours.&lt;br /&gt;&lt;br /&gt;The small internal cooling fan can be switched off or regulated by hand if needed.&lt;br /&gt;&lt;br /&gt;Hardware specifications can be viewed at the following sites:&lt;ul&gt;&lt;li&gt;&lt;a href="http://wiki.eeeuser.com/eee_pc_701#models"&gt;Asus Eee PC models [EeeUser Eee PC Wiki]&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://event.asus.com/eeepc/comparison/eeepc_comparison.htm"&gt;Eee PC(TM) Comparison List  [asus.com]&lt;/a&gt;&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/2326610515171456192-659461051841355544?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/659461051841355544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=659461051841355544&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/659461051841355544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/659461051841355544'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2010/04/computer-replacement-asus-eee-pc.html' title='Computer replacement - Asus Eee PC'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-5441080186861204136</id><published>2010-04-07T20:34:00.001+02:00</published><updated>2010-04-07T20:34:53.267+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='repl'/><category scheme='http://www.blogger.com/atom/ns#' term='online'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='interpreter'/><category scheme='http://www.blogger.com/atom/ns#' term='languages'/><title type='text'>online interpreter and collaboration tools: codepad, ideone, tryhaskell</title><content type='html'>&lt;ul&gt;&lt;li&gt;Visit the cool site &lt;a href="http://codepad.org/"&gt;codepad.org&lt;/a&gt;, where you can try out any esoteric programming language online which you never had the spirit to install so far. You can also view, try out or even modify programs that others have typed in previously. Supports the following languages: C, C++, D, Haskell, Lua, OCaml, PHP, Perl, Python, Ruby, Scheme, Tcl. (via verdelyi) &lt;/li&gt;&lt;li&gt;&lt;a href="http://ideone.com/"&gt;ideone.com&lt;/a&gt; also supports a heapload of languages: Ada, Assembler, AWK, Bash, bc, Brainf**k, C, C#, C++, C99, CLIPS, Clojure, COBOL, Common LISP, D (dmd), Erlang, Forth, Fortran, Go, Haskell, Icon, Intercal, Java, JavaScript, Lua, Nemerle, Nice, Ocaml, Pascal, Perl, PHP, Pike, Prolog, Python, R, Ruby, Scala, Scheme, SmallTalk, Tcl, Unlambda, Visual Basic .NET, Whitespace.&lt;/li&gt;&lt;li&gt;&lt;a href="http://tryhaskell.org/"&gt;tryhaskell.org&lt;/a&gt; - specialized for Haskell, but does its job in light-weight &lt;strong&gt;JavaScript&lt;/strong&gt;!&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/2326610515171456192-5441080186861204136?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/5441080186861204136/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=5441080186861204136&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/5441080186861204136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/5441080186861204136'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2010/04/online-interpreter-and-collaboration.html' title='online interpreter and collaboration tools: codepad, ideone, tryhaskell'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-1558918282421697359</id><published>2010-04-07T15:34:00.001+02:00</published><updated>2010-04-07T15:40:13.060+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='poll'/><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>New poll of mine</title><content type='html'>A new poll is available for you to vote on. ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-1558918282421697359?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/1558918282421697359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=1558918282421697359&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/1558918282421697359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/1558918282421697359'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2010/04/new-poll-of-mine.html' title='New poll of mine'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-6947460896597468924</id><published>2010-04-07T13:11:00.000+02:00</published><updated>2010-04-07T13:39:04.021+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>Back in business</title><content type='html'>I'll be back online in the upcoming days, stay tuned! :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-6947460896597468924?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/6947460896597468924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=6947460896597468924&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/6947460896597468924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/6947460896597468924'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2010/04/back-in-business.html' title='Back in business'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-4637825443077281024</id><published>2009-12-01T13:11:00.005+01:00</published><updated>2009-12-01T13:37:17.514+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='repair'/><category scheme='http://www.blogger.com/atom/ns#' term='support'/><category scheme='http://www.blogger.com/atom/ns#' term='help'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='computer'/><category scheme='http://www.blogger.com/atom/ns#' term='sociology'/><title type='text'>Tech support cheat sheet</title><content type='html'>I wish most people grew intuition. Are you one who regularly gets bothered by friends, relatives or even random people who they recommended you to with every snippety problem they encounter? Then you need to spread the following on your calling card:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://xkcd.com/627/"&gt;Tech support cheat sheet (xkcd)&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-4637825443077281024?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/4637825443077281024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=4637825443077281024&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/4637825443077281024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/4637825443077281024'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/12/tech-support-cheat-sheet.html' title='Tech support cheat sheet'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-1582505998438718503</id><published>2009-11-26T12:22:00.003+01:00</published><updated>2009-11-26T12:29:18.617+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='awk'/><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Sorted and aggregated disk usage script</title><content type='html'>I've been asked for this script many times lately, so I'll publish it. It lists the disk usage of subdirectories in a given directory in descending order, right justified and suffixed with kilobytes or megabytes appropriately.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;display() {&lt;br /&gt;&amp;nbsp;local DIR=$1&lt;br /&gt;&amp;nbsp;du -sk $DIR/..?* $DIR/.[!.]* $DIR/* 2&amp;gt;/dev/null |&lt;br /&gt;&amp;nbsp;&amp;nbsp;sort -n |&lt;br /&gt;&amp;nbsp;&amp;nbsp;awk '&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;size = $1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sum += size;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;name = $2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ($1 &amp;lt; 1024){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("%9ik %s\n",size,name);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("%9.3fM %s\n",size/1024,name);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;END{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print sum " kiB"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;'&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;main() {&lt;br /&gt;&amp;nbsp;local DIR=$1&lt;br /&gt;&amp;nbsp;if [ "$DIR" = "" ]&lt;br /&gt;&amp;nbsp;then&lt;br /&gt;&amp;nbsp;&amp;nbsp;display $HOME&lt;br /&gt;&amp;nbsp;&amp;nbsp;quota&lt;br /&gt;&amp;nbsp;else&lt;br /&gt;&amp;nbsp;&amp;nbsp;display $DIR&lt;br /&gt;&amp;nbsp;fi&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;main "$@"&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-1582505998438718503?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/1582505998438718503/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=1582505998438718503&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/1582505998438718503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/1582505998438718503'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/11/sorted-and-aggregated-disk-usage-script.html' title='Sorted and aggregated disk usage script'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-5895707630706713720</id><published>2009-11-24T21:44:00.006+01:00</published><updated>2009-11-24T21:57:45.433+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='speed'/><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><category scheme='http://www.blogger.com/atom/ns#' term='comprehension'/><category scheme='http://www.blogger.com/atom/ns#' term='display'/><category scheme='http://www.blogger.com/atom/ns#' term='portable'/><category scheme='http://www.blogger.com/atom/ns#' term='science'/><category scheme='http://www.blogger.com/atom/ns#' term='reading'/><title type='text'>Rapid serial visualisation for portable book reading</title><content type='html'>I've received the following link recently that I believe I have already stumbled upon earlier.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Rapid_Serial_Visual_Presentation"&gt;Rapid Serial Visual Presentation (Wikipedia)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I didn't see much perspective for it before, but I've given second thought now. Just imagine a tiny note taking device which combines the above speed reading technique with a &lt;a href="http://en.wikipedia.org/wiki/Chorded_keyboard"&gt;chorded keyboard&lt;/a&gt; (like the &lt;a href="http://xaphoon.com/dataegg/"&gt;DataEgg&lt;/a&gt;)!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-5895707630706713720?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/5895707630706713720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=5895707630706713720&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/5895707630706713720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/5895707630706713720'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/11/rapid-serial-visualisation-for-portable.html' title='Rapid serial visualisation for portable book reading'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-604145834398216834</id><published>2009-11-23T23:01:00.000+01:00</published><updated>2009-11-23T23:03:31.629+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ide'/><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Haskell IDE</title><content type='html'>&lt;ul&gt;&lt;li&gt;Gtk+: &lt;a href="http://www.leksah.org/index.html"&gt;Leksah - Haskell IDE in Haskell&lt;/a&gt; built on Gtk+ and gtk2hs (&lt;a href="http://www.haskell.org/haskellwiki/Leksah"&gt;HaskellWiki: Leksah&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Eclipse&lt;/strong&gt;: &lt;a href="http://eclipsefp.sourceforge.net/"&gt;EclipseFP - functional programming support for Eclipse&lt;/a&gt; (Installation experience and comments: &lt;a href="http://sdasrath.blogspot.com/2009/03/20090301-haskell-plugin-and-eclipse.html"&gt;1&lt;/a&gt;, &lt;a href="http://sdasrath.blogspot.com/2009/05/20090402-haskell-and-eclipse-part-2.html"&gt;2&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Emacs&lt;/strong&gt;: &lt;a href="http://projects.haskell.org/haskellmode-emacs/"&gt;Haskell Mode for Emacs&lt;/a&gt; from Svein Ove Aas (previous maintainer was Stefan Monnier: &lt;a href="http://haskell.org/haskell-mode/"&gt;1&lt;/a&gt;, &lt;a href="http://www.iro.umontreal.ca/~monnier/elisp/#haskell-mode"&gt;2&lt;/a&gt;) &lt;em&gt;(TODO: is &lt;code&gt;(setq haskell-font-lock-symbols 'unicode)&lt;/code&gt; the default?)&lt;/em&gt;, &lt;a href="http://www.haskell.org/haskellwiki/Literate_programming#Multi-mode_support_in_Emacs"&gt;MMM (Multiple Major Modes) Mode for Emacs&lt;/a&gt;, &lt;a href="http://code.google.com/p/scion-lib/"&gt;scion-lib Haskell IDE library&lt;/a&gt;, &lt;a href="http://www.cs.kent.ac.uk/projects/refactor-fp/hare.html"&gt;HaRe -- The Haskell Refactorer&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Vim&lt;/strong&gt;: &lt;a href="http://projects.haskell.org/haskellmode-vim/"&gt;Haskell mode for Vim&lt;/a&gt;, &lt;a href="http://www.vim.org/scripts/script.php?script_id=2356"&gt;Superior Haskell Interaction Mode (SHIM): GHCi integration for VIM&lt;/a&gt;, &lt;a href="http://www.cs.kent.ac.uk/people/staff/cr3/toolbox/haskell/Vim/vim.html"&gt;Vim as a Haskell IDE, first steps&lt;/a&gt; illustrated tutorial, &lt;a href="http://code.google.com/p/scion-lib/"&gt;scion-lib Haskell IDE library&lt;/a&gt;, &lt;a href="http://www.cs.kent.ac.uk/projects/refactor-fp/hare.html"&gt;HaRe -- The Haskell Refactorer&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;And of course we all know what &lt;a href="http://xkcd.com/378/"&gt;xkcd: Real Programmers&lt;/a&gt; use.&lt;br /&gt;&lt;br /&gt;I'm eagerly awaiting your feedback!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-604145834398216834?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/604145834398216834/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=604145834398216834&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/604145834398216834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/604145834398216834'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/11/haskell-ide.html' title='Haskell IDE'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-5825719694548765307</id><published>2009-11-18T22:25:00.005+01:00</published><updated>2009-11-18T23:03:16.654+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><category scheme='http://www.blogger.com/atom/ns#' term='literate'/><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Converting between Bird-literate and plain Haskell</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Literate_programming"&gt;Literate programming&lt;/a&gt; is a good idea, and there exist many creative ways in which you could take advantage of it, like one described in &lt;a href="http://passingcuriosity.com/2008/literate-haskell-with-markdown-syntax-hightlighting/"&gt;Literate Haskell with Markdown and Syntax Highlighting&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;However, if you're using the text editor &lt;a href="http://en.wikipedia.org/wiki/Geany"&gt;Geany&lt;/a&gt; version 0.18, you will be faced with a bug that makes it unable to interpret &lt;a href="http://www.haskell.org/haskellwiki/Literate_programming#Bird_Style"&gt;Bird-style literate&lt;/a&gt; source. As a simple fix, I provide two programs to convert between simple Bird-literate and non-literate source code. You could also convert your Bird-literate to &lt;a href="http://www.haskell.org/haskellwiki/Literate_programming#Transformation_of_.lhs-files"&gt;TeX-style&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;# bird_lhs2hs&lt;br /&gt;sed '&lt;br /&gt;&amp;nbsp;&amp;nbsp;s/^&amp;gt;//&lt;br /&gt;&amp;nbsp;&amp;nbsp;t&lt;br /&gt;&amp;nbsp;&amp;nbsp;s/^ *$//&lt;br /&gt;&amp;nbsp;&amp;nbsp;t&lt;br /&gt;&amp;nbsp;&amp;nbsp;s/^/-- /&lt;br /&gt;&amp;nbsp;' in.lhs &amp;gt; out.hs&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;# hs2bird_lhs&lt;br /&gt;sed '&lt;br /&gt;&amp;nbsp;&amp;nbsp;s/^-- //&lt;br /&gt;&amp;nbsp;&amp;nbsp;t&lt;br /&gt;&amp;nbsp;&amp;nbsp;s/^ *$//&lt;br /&gt;&amp;nbsp;&amp;nbsp;t&lt;br /&gt;&amp;nbsp;&amp;nbsp;s/^/&amp;gt; /&lt;br /&gt;&amp;nbsp;' in.hs &amp;gt; out.lhs&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-5825719694548765307?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/5825719694548765307/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=5825719694548765307&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/5825719694548765307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/5825719694548765307'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/11/converting-between-bird-literate-and.html' title='Converting between Bird-literate and plain Haskell'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-4545319565801326096</id><published>2009-11-12T22:56:00.005+01:00</published><updated>2009-11-12T23:03:36.013+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ado'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>DataRow.Delete with SqlDataAdapter</title><content type='html'>A note to myself. I've figured this out few years ago, but it looks like I forgot it... :-D&lt;br /&gt;&lt;br /&gt;Always use the Delete() method on the DataRow object instead of Remove(DataRow) on the DataRowCollection, or else the corresponding SqlDataAdapter.DeleteCommand won't trigger for an Update.&lt;br /&gt;&lt;br /&gt;So deleting from the table won't work, no execution will be done.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-4545319565801326096?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/4545319565801326096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=4545319565801326096&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/4545319565801326096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/4545319565801326096'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/11/datarowdelete-with-sqldataadapter.html' title='DataRow.Delete with SqlDataAdapter'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-326383034479580507</id><published>2009-11-04T13:00:00.000+01:00</published><updated>2009-11-04T13:00:10.156+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>LALR-1 parseable C++</title><content type='html'>&lt;blockquote&gt;In The Design and Evolution of C++, Stroustrup observes that "within C++ there is a much smaller and cleaner language struggling to get out" [Stroustrup, B., The Design and Evolution of C++, Section 9.4.4., Addison-Wesley, 1994.] and foresees the development of "other interfaces" to C++.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.csse.monash.edu.au/~damian/papers/HTML/ModestProposal.html"&gt;A Modest Proposal: C++ Resyntaxed&lt;/a&gt; by Ben Werther &amp; Damian Conway (Department of Computer Science, Monash University)&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Significantly_Prettier_and_Easier_C%2B%2B_Syntax"&gt;Significantly Prettier and Easier C++ Syntax&lt;/a&gt; (Wikipedia)&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/2326610515171456192-326383034479580507?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/326383034479580507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=326383034479580507&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/326383034479580507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/326383034479580507'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/11/lalr-1-parseable-c.html' title='LALR-1 parseable C++'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-1691605224520545799</id><published>2009-11-02T01:13:00.002+01:00</published><updated>2009-11-02T02:37:30.831+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='netbook'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><category scheme='http://www.blogger.com/atom/ns#' term='eee'/><title type='text'>Eee Keyboard PC - C=64 rebirth?</title><content type='html'>Well, what do you know, it looks like history does repeat itself:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.engadget.com/2009/10/12/eee-keyboard-splayed-detailed-by-fcc/"&gt;Eee Keyboard splayed, detailed by FCC&lt;/a&gt; (Engadget)&lt;/li&gt;&lt;li&gt;&lt;a href="http://mobile.osnews.com/story.php/20736/Trends_Are_Cyclical_the_Asus_Eee_Keyboard"&gt;Trends Are Cyclical: the Asus Eee Keyboard&lt;/a&gt; (OSNews)&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/ASUS_Eee_Keyboard"&gt;ASUS Eee Keyboard (Wikipedia)&lt;/a&gt;&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/2326610515171456192-1691605224520545799?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/1691605224520545799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=1691605224520545799&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/1691605224520545799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/1691605224520545799'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/11/eee-keyboard-pc-c64-rebirth.html' title='Eee Keyboard PC - C=64 rebirth?'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-3341851732852730321</id><published>2009-10-28T13:00:00.000+01:00</published><updated>2009-10-28T13:00:15.013+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Erlang vs. Scala</title><content type='html'>From Yariv’s Blog:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://yarivsblog.com/articles/2008/05/18/erlang-vs-scala/"&gt;Erlang vs. Scala&lt;/a&gt; - aspects discussed: concurrent programming, hot code swapping, garbage collection, scheduling, distributed programming, mnesia, tail recursion, network IO, remote shell, simplicity, libraries, reliability and scalability&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;See also: &lt;a href="http://bkil.blogspot.com/2009/09/haskell-vs-erlang-vs-scala.html"&gt;bkil: Haskell vs. Erlang vs. Scala&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-3341851732852730321?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/3341851732852730321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=3341851732852730321&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/3341851732852730321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/3341851732852730321'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/10/erlang-vs-scala.html' title='Erlang vs. Scala'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-5186264225113942455</id><published>2009-10-26T12:21:00.002+01:00</published><updated>2009-10-26T13:21:12.174+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='refactoring'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>C++ refactoring support</title><content type='html'>The people I've discussed refactoring with usually got pretty enthusiastic about it when showing them what can be done in properly designed languages like Java, Erlang or Haskell. They asked whether these kind of things were doable for weaker programming languages like C and C++ by free open source tools.&lt;br /&gt;&lt;br /&gt;I don't have much experience in this topic, as I haven't done bigger projects in this language yet, and the small ones I did were usually properly designed for the purpose from the start.&lt;br /&gt;&lt;br /&gt;So I looked around for possible solutions, and doing a few web searches yielded the following links. I may try some of these in the future just for curiosity.&lt;br /&gt;&lt;br /&gt;Be warned that not all listed features are available or complete. If you have experience with any of these, or with any refactoring tool for that matter, please let us hear your voice in the comments. (Maybe it would be worthwhile to open a wiki about available refactoring tools for each language)&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://r2.ifs.hsr.ch/cdtrefactoring"&gt;Eclipse CDT C/C++ Development Tooling refactoring plugin&lt;/a&gt; (declare/hide/implement method, extract baseclass/constant/method/subclass, move field/method, replace number, separate class, generate get/set)&lt;/li&gt;&lt;li&gt;&lt;a href="http://wiki.netbeans.org/CndRefactoring"&gt;NetBeans C/C++ refactoring prototype&lt;/a&gt; (find usages, rename)&lt;/li&gt;&lt;li&gt;&lt;a href="http://monodevelop.com/Download/What%27s_new_in_MonoDevelop_2.2#Refactoring"&gt;MonoDevelop multi-language IDE&lt;/a&gt; (?C++)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.adacore.com/wp-content/files/auto_update/gps-docs/Refactoring.html"&gt;GNAT Programming Studio multi-language IDE&lt;/a&gt; (?C++) (rename entity, extract method)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.xref.sk/xrefactory-java/main.html"&gt;Emacs Java/C Refactoring Browser&lt;/a&gt; (?C++)&lt;/li&gt;&lt;li&gt;&lt;a href="http://zwabel.wordpress.com/2008/11/05/kdevelop4-now-with-refactoring/"&gt;KDevelop4 refactoring beta&lt;/a&gt; (find usages, rename)&lt;/li&gt;&lt;li&gt;&lt;a href="http://codelite.org/Main/ReadMore"&gt;CodeLite multi-language IDE&lt;/a&gt; (?status)&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/2326610515171456192-5186264225113942455?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/5186264225113942455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=5186264225113942455&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/5186264225113942455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/5186264225113942455'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/10/c-refactoring-support.html' title='C++ refactoring support'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-7747464857067033196</id><published>2009-10-25T13:42:00.000+01:00</published><updated>2009-10-25T13:43:05.661+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='waste'/><category scheme='http://www.blogger.com/atom/ns#' term='ecology'/><category scheme='http://www.blogger.com/atom/ns#' term='food'/><title type='text'>Food Waste: Canada $3-5+ billion, UK $10+ billion per year?</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a hrfe="http://www.guardian.co.uk/environment/2009/sep/08/food-waste"&gt;Elimination of food waste could lift 1bn out of hunger, say campaigners&lt;/a&gt; (The Guardian)&lt;/li&gt;&lt;li&gt;&lt;a href="http://ffenyx.wordpress.com/2008/05/15/food-waste-canada-3-5-billion-uk-10-billion-per-year/"&gt;Food Waste: Canada $3-5+ billion, UK $10+ billion per year?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mirror.co.uk/sunday-mirror/2008/07/13/supermarkets-throw-away-two-million-tons-of-food-a-year-98487-20641582/"&gt;Supermarkets throw away two million tons of food a year&lt;/a&gt; (UK)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.wrap.org.uk/wrap_corporate/news/an_apple_a_day_gets.html"&gt;An Apple a Day Gets Thrown Away&lt;/a&gt; (UK)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.thedailystar.net/newDesign/news-details.php?nid=107538"&gt;Hunger and food waste&lt;/a&gt; (in Sweden, Switzerland and elsewhere)&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/2326610515171456192-7747464857067033196?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/7747464857067033196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=7747464857067033196&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/7747464857067033196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/7747464857067033196'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/10/food-waste-canada-3-5-billion-uk-10.html' title='Food Waste: Canada $3-5+ billion, UK $10+ billion per year?'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-2241808234960277634</id><published>2009-10-24T13:00:00.001+02:00</published><updated>2009-10-24T13:00:01.573+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='industry'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Scala in practice</title><content type='html'>Here are some nice pointers related to the promising multi-paradigm (OOP, FP, COM), multi-platform (&lt;a href="http://www.scala-lang.org/node/168"&gt;.NET&lt;/a&gt;+JVM) language we all adore.&lt;br /&gt;&lt;br /&gt;Some introductory guides:&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.chrisshayan.com/my/index.php?option=com_content&amp;view=article&amp;id=130:the-scala-programming-language&amp;catid=1:latest-news"&gt; The Scala Programming Language&lt;/a&gt; - a quick and conscious overview [2009]&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.infoq.com/news/2007/08/scala-overview"&gt;Catching Up with Scala&lt;/a&gt; - another conscious overview [2007]&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Some background:&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.springerlink.com/content/nb7dvnkmmk4q233d/"&gt;The Scala Experiment – Can We Provide Better Language Support for Component Systems?&lt;/a&gt; - explains the intentions behind designing the language [2004]&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.thestandard.com/news/2009/07/16/java-yields-other-languages-java-virtual-machine"&gt;Java yields to other languages on the Java Virtual Machine&lt;/a&gt; an overview of some alternatives by Paul Krill from InfoWorld [2009]&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Some applications:&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.artima.com/scalazine/articles/twitter_on_scala.html"&gt;Twitter on Scala - A Conversation with Steve Jenson, Alex Payne, and Robey Pointer by Bill Venners&lt;/a&gt; [April 3, 2009]&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.scala-lang.org/node/3200"&gt;Scala at Stanford Pervasive Parallelism Laboratory&lt;/a&gt; [2009]&lt;/li&gt;&lt;li&gt;&lt;a href="http://flyingfrogblog.blogspot.com/2007/09/ray-tracer-language-comparison-ported.html"&gt;Ray tracer language comparison ported to Scala (and Groovy)&lt;/a&gt; - performance is on par [2007]&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/2326610515171456192-2241808234960277634?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/2241808234960277634/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=2241808234960277634&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/2241808234960277634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/2241808234960277634'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/10/scala-in-practice.html' title='Scala in practice'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-7132257380034001598</id><published>2009-10-22T13:00:00.000+02:00</published><updated>2009-10-22T13:00:02.512+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><category scheme='http://www.blogger.com/atom/ns#' term='industry'/><title type='text'>FreeArc - advantage of developing in Haskell</title><content type='html'>&lt;a href="http://freearc.org/"&gt;FreeArc, a great performing free software archiver written in combined Haskell/C&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-7132257380034001598?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/7132257380034001598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=7132257380034001598&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/7132257380034001598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/7132257380034001598'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/10/freearc-advantage-of-developing-in.html' title='FreeArc - advantage of developing in Haskell'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-685878635476235762</id><published>2009-10-21T15:54:00.001+02:00</published><updated>2009-10-21T15:55:29.533+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='keyboard'/><title type='text'>Typing speed tests</title><content type='html'>Yesterday's "party" prompted me to do some drills of typing in order to improve my accuracy. :-)&lt;br /&gt;&lt;br /&gt;Results are the following on a random acceptable, but not new keyboard in our lab:&lt;ol&gt;&lt;li&gt;A simple single sentence test without much caps: 70&lt;/li&gt;&lt;li&gt;A large paragraph (about one minute) of well-balanced text: 62(2), 66(1), 70(0), 66(1)&lt;/li&gt;&lt;li&gt;Crazy phrases (two sentences each): 61(0), 67(0), 66(0), 69(0), 74(0), 70(0), 62(0), 63(0), 77(0), 65(1), 63(0), 79(0), 114(0), 56(0), 76(0), 61(0), 61(0), 70(0), 65(0), 57(0), 73(0), 87(0), 79(0), 77(0), 62(0), , 72(0), 72(0)&lt;/li&gt;&lt;li&gt;Random letters (59 characters): 38(0), 39(0), 49(0), 45(0), 40(0), 39(0), 39(0), 36(0)&lt;/li&gt;&lt;li&gt;Random letters, numbers and punctuation (59 characters): 35(0), 37(1), 36(0), 35(0)&lt;/li&gt;&lt;li&gt;One minute of well-balanced text: 72(0), 69(0), 72(0), 74(0), 72(0), 71(0), 75(0), 80(0), 76(0), 72(0)&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-685878635476235762?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/685878635476235762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=685878635476235762&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/685878635476235762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/685878635476235762'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/10/typing-speed-tests.html' title='Typing speed tests'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-9171329391908868154</id><published>2009-10-20T13:00:00.002+02:00</published><updated>2009-10-20T13:00:04.108+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ecology'/><category scheme='http://www.blogger.com/atom/ns#' term='efficiency'/><category scheme='http://www.blogger.com/atom/ns#' term='food'/><title type='text'>The balance between meat and plant consumption</title><content type='html'>The following article explains that if most of us would follow a healthy, but rational diet, then not only would &lt;a href="http://en.wikipedia.org/wiki/Obesity_in_the_United_States#Medical_costs"&gt;obesity problems&lt;/a&gt; be a nightmare of the past, but it would also greatly reduce our &lt;a href="http://en.wikipedia.org/wiki/Ecological_footprint"&gt;ecologic footprint&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.news.cornell.edu/releases/aug97/livestock.hrs.html"&gt;U.S. could feed 800 million people with grain that livestock eat, Cornell ecologist advises animal scientists&lt;/a&gt;&lt;/li&gt; (with David Pimentel, professor of ecology in Cornell University's College of Agriculture and Life Sciences)&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-9171329391908868154?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/9171329391908868154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=9171329391908868154&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/9171329391908868154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/9171329391908868154'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/10/balance-between-meat-and-plant.html' title='The balance between meat and plant consumption'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-8823025723538473372</id><published>2009-10-18T13:00:00.001+02:00</published><updated>2009-10-18T13:00:03.744+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='industry'/><category scheme='http://www.blogger.com/atom/ns#' term='path dependence'/><title type='text'>Why do telephone keypads count from the top down, while calculators count from the bottom up?</title><content type='html'>I've been thinking about the very same thing not too long ago:&lt;br /&gt;&lt;a href="http://www.straightdope.com/columns/read/2019/why-do-telephone-keypads-count-from-the-top-down-while-calculators-count-from-the-bottom-up"&gt;A Staff Report from the Straight Dope Science Advisory Board: Why do telephone keypads count from the top down, while calculators count from the bottom up?&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-8823025723538473372?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/8823025723538473372/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=8823025723538473372&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/8823025723538473372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/8823025723538473372'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/10/why-do-telephone-keypads-count-from-top.html' title='Why do telephone keypads count from the top down, while calculators count from the bottom up?'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-349217384120588709</id><published>2009-10-16T13:09:00.001+02:00</published><updated>2009-10-16T14:09:47.677+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><title type='text'>Haskell for embedded: C output, compilers, monads, Timber</title><content type='html'>Tricks to use Haskell for developing embedded systems:&lt;ul&gt;&lt;li&gt;&lt;a href ="http://markmail.org/message/73i6mz7dkerv6kzq#query:haskell%20native%20code%20generation+page:1+mid:nad2zjkdqp7ricm7+state:results"&gt;Re: [Haskell-cafe] compilation to C, not via-C&lt;/a&gt; - question involving if you could output prettier C (answer: YHC/LHC or monadic generators)&lt;li&gt;&lt;a href="http://cufp.galois.com/2008/schedule.html"&gt;CUFP 2008 Program&lt;/a&gt; - see Controlling Hybrid Vehicles with Haskell by Tom Hawkins, Eaton Corporation&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.timber-lang.org/"&gt;TIMe - eMBEdded - Reactive&lt;/a&gt; - a promising O'Haskell inspired strict embedded research language&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/2326610515171456192-349217384120588709?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/349217384120588709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=349217384120588709&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/349217384120588709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/349217384120588709'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/09/haskell-for-embedded-c-output-compilers.html' title='Haskell for embedded: C output, compilers, monads, Timber'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-1405632909993846981</id><published>2009-10-02T13:00:00.000+02:00</published><updated>2009-10-02T13:00:05.231+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><category scheme='http://www.blogger.com/atom/ns#' term='toy'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='hanoi'/><title type='text'>Unary math Towers of Hanoi in naked (D)ASH and BASH</title><content type='html'>The following solution assumes neither BASH extensions, nor any external executables. Hence it could be ran from a preboot environment like a frugal initrd. A slight compromise was to use unary math. Did you know, that you can access an animated version from Emacs by typing &lt;code&gt;M-x hanoi&lt;/code&gt;?&lt;br /&gt;&lt;br /&gt;&lt;code&gt;pop(){&lt;br /&gt;&amp;nbsp;shift&lt;br /&gt;&amp;nbsp;echo $*&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;top(){&lt;br /&gt;&amp;nbsp;echo $1&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;print_towers(){&lt;br /&gt;&amp;nbsp;echo "a=[" $a "], b=[" $b "], c=[" $c "]"&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;hanoi(){&lt;br /&gt;&amp;nbsp;[ "$n" ] || return&lt;br /&gt;&amp;nbsp;local ln&lt;br /&gt;&amp;nbsp;ln=$(pop $n)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;n=$ln&lt;br /&gt;&amp;nbsp;hanoi $1 $3 $2&lt;br /&gt;&lt;br /&gt;&amp;nbsp;print_towers&lt;br /&gt;&amp;nbsp;echo "$1 -&amp;gt; $2"&lt;br /&gt;&amp;nbsp;eval $2=\"$(eval top \$$1) $(echo \$$2)\"&lt;br /&gt;&amp;nbsp;eval $1=\"$(eval pop \$$1)\"&lt;br /&gt;&lt;br /&gt;&amp;nbsp;n=$ln&lt;br /&gt;&amp;nbsp;hanoi $3 $2 $1&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;main(){&lt;br /&gt;&amp;nbsp;a="1 2 3 4 5"&lt;br /&gt;&amp;nbsp;b=&lt;br /&gt;&amp;nbsp;c=&lt;br /&gt;&amp;nbsp;n=$a&lt;br /&gt;&amp;nbsp;hanoi a b c&lt;br /&gt;&amp;nbsp;print_towers&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;main "$@"&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-1405632909993846981?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/1405632909993846981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=1405632909993846981&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/1405632909993846981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/1405632909993846981'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/10/unary-math-towers-of-hanoi-in-naked.html' title='Unary math Towers of Hanoi in naked (D)ASH and BASH'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-330741673194943328</id><published>2009-09-30T13:00:00.000+02:00</published><updated>2009-09-30T13:00:09.251+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='triangle'/><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><category scheme='http://www.blogger.com/atom/ns#' term='pascal'/><category scheme='http://www.blogger.com/atom/ns#' term='toy'/><title type='text'>Simple Pascal-triangle implementations</title><content type='html'>-- The first version can output a row of &lt;a href="http://en.wikipedia.org/wiki/Pascal's_triangle"&gt;Pascal's triangle&lt;/a&gt;:&lt;br /&gt;&lt;code&gt;import System.Environment(getArgs)&lt;br /&gt;&lt;br /&gt;pas 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= [1]&lt;br /&gt;pas n | n&amp;gt;0 = let l = pas (n-1) in zipWith (+) (0:l) (l++[0])&lt;br /&gt;&lt;br /&gt;main = do&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[s] &amp;lt;- getArgs&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print . pas $ read s&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;-- The second revision can output a certain number of rows of the triangle:&lt;br /&gt;&lt;code&gt;import System.Environment(getArgs)&lt;br /&gt;&lt;br /&gt;pas = iterate nextline [1] where&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nextline l = zipWith (+) (0:l) (l++[0])&lt;br /&gt;&lt;br /&gt;main = do&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[s] &amp;lt;- getArgs&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;putStr . unlines . map show $ take (read s+1) pas&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;-- And the last monolith solves a very simple homework assignment:&lt;br /&gt;&lt;code&gt;import Data.List(intersperse)&lt;br /&gt;import System.Environment(getArgs)&lt;br /&gt;&lt;br /&gt;pas 0 = [1]&lt;br /&gt;pas n = let l = pas (n-1) in zipWith (+) (0:l) (l++[0])&lt;br /&gt;&lt;br /&gt;strPas s = do&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;let n = read s&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if n&amp;lt;0 || n&amp;gt;30 then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fail "Pascal out of range"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else do&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;let list = concat . intersperse " " . map show&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return (n, list $ pas n)&lt;br /&gt;&lt;br /&gt;main = do&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;l &amp;lt;- getArgs&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case l of&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[s] -&amp;gt; do (_,o) &amp;lt;- strPas s&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;putStrLn o&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[]&amp;nbsp;&amp;nbsp;-&amp;gt; do s &amp;lt;- readFile "input.txt"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(n,o) &amp;lt;- strPas s&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;writeFile "output.txt" $ unlines [show n, o]&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-330741673194943328?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/330741673194943328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=330741673194943328&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/330741673194943328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/330741673194943328'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/09/simple-pascal-triangle-implementations.html' title='Simple Pascal-triangle implementations'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-7034075483792076134</id><published>2009-09-28T13:00:00.001+02:00</published><updated>2009-09-28T13:00:08.901+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='languages'/><title type='text'>Discussion on Ada, Java and Clean</title><content type='html'>We had a discussion on programming language preferences last week with a friendly undergraduate guy. He strongly prefers C++ and Qt, also showing enthusiastic interest in studying Concurrent Clean, while showing great dislike of Java, C# and Ada.&lt;br /&gt;&lt;br /&gt;I won't go through the whole argument here, but the most interesting aspect of his mentality is disliking the last one. He went on to demonstrate the inferiority of Ada with examples that prove true even in the case of Clean or Haskell!&lt;br /&gt;&lt;br /&gt;In favor of C++, he mentioned the forgiving nature of the type system. As an issue against Java, he named garbage collection, and against Ada, he listed many issues like instance derivation of type classes and the obscure syntax (I think he used a word like incongruent).&lt;br /&gt;&lt;br /&gt;He was desperate even after I told him that he will face with very similar issues under Clean. Well, in my opinion, he will have a great time after getting hang of all that! ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-7034075483792076134?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/7034075483792076134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=7034075483792076134&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/7034075483792076134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/7034075483792076134'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/09/discussion-on-ada-java-and-clean.html' title='Discussion on Ada, Java and Clean'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-3483099639177594748</id><published>2009-09-24T11:59:00.004+02:00</published><updated>2009-10-02T22:24:17.109+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><category scheme='http://www.blogger.com/atom/ns#' term='optimize'/><title type='text'>Haskell optimization</title><content type='html'>&lt;em&gt;edit2: added Real World Haskell link via Mr. &lt;a href="http://www.blogger.com/profile/04183130595876617783"&gt;baja&lt;/a&gt; :-)&lt;/em&gt;&lt;br /&gt;(edit1: tiny formatting correction)&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://book.realworldhaskell.org/read/profiling-and-optimization.html"&gt;Chapter 25. Profiling and optimization&lt;/a&gt; from Real World Haskell by Bryan O'Sullivan, Don Stewart, and John Goerzen&lt;li&gt;&lt;a href="http://www.coyotegulch.com/products/acovea/"&gt;Acovea (Analysis of Compiler Options via Evolutionary Algorithm)&lt;/a&gt; - this is compatible with virtually all compilers&lt;li&gt;&lt;a href="http://donsbot.wordpress.com/2009/03/09/evolving-faster-haskell-programs/"&gt;Evolving faster Haskell programs&lt;/a&gt; via Acovea - 18% runtime reduction in one case, even for hand-tuned code!&lt;li&gt;&lt;a href="http://cgi.cse.unsw.edu.au/~dons/blog/2008/06/04#fast-fusion"&gt;Haskell as fast as C: working at a high altitude for low level performance&lt;/a&gt; - this shows that introducing higher abstractions shouldn't automatically cause a slowdown&lt;li&gt;&lt;a href="http://www.randomhacks.net/articles/2007/02/10/map-fusion-and-haskell-performance"&gt;Map fusion: Making Haskell 225% faster&lt;/a&gt; a similar article&lt;li&gt;&lt;a href="http://www.haskell.org/haskellwiki/Performance/GHC"&gt;HaskellWiki: Performance/GHC&lt;/a&gt; optimization tricks and tips to apply by hand&lt;li&gt;And a little reminder about the secret option used during our discussion on performance analysis:&lt;br&gt;&lt;strong&gt;ghc -ddump-simpl $FILE &amp;gt; core.txt&lt;/strong&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-3483099639177594748?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/3483099639177594748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=3483099639177594748&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/3483099639177594748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/3483099639177594748'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/09/haskell-optimization.html' title='Haskell optimization'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-4157497401457771014</id><published>2009-09-23T13:00:00.001+02:00</published><updated>2009-09-23T13:00:10.214+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lambda'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='logic'/><title type='text'>Which one is better, functional or logic programming?</title><content type='html'>The following paper illustrates that you don't always need to decide:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://lml.ls.fi.upm.es/~jjmoreno/jjpapers/expr_imp.ps"&gt;Expressivity of Functional-logic Languages and their Implementation&lt;/a&gt; by Juan José Moreno Navarro, LSIIS - Facultad de Informática, Universsidad Politécnica de Madrid&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;It first shows simple problems in which one or the other is superior. Then it goes on to plot a possible implementation of a hybrid language in detail.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-4157497401457771014?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/4157497401457771014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=4157497401457771014&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/4157497401457771014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/4157497401457771014'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/09/which-one-is-better-functional-or-logic.html' title='Which one is better, functional or logic programming?'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-86478572149458823</id><published>2009-09-21T13:00:00.002+02:00</published><updated>2009-09-25T12:22:55.803+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='browsing'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><category scheme='http://www.blogger.com/atom/ns#' term='epiphany'/><title type='text'>Lightweight web browsing as I do</title><content type='html'>&lt;em&gt;edit: tiny formatting correction&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;I usually browse the web with many instances of the graphic links2 (my own patched version) and Epiphany concurrently, depending on the complexity of the site in question.&lt;br /&gt;&lt;br /&gt;When I was on Firefox, I used flashblock to lighten the load on my rusty old processor. I did hack it up for Epiphany around the time I made the switch, but gave up on it sometime later, as the exact blocking scheme looked pretty inefficient. I.e., I could sometimes observe an embedded object loading and taking up a lot of CPU time until the blocker has hidden it from sight. I never cared to come up with Java blocking similar to NoScript on this browser.&lt;br /&gt;&lt;br /&gt;As I rarely used it anyway, I simply removed the Java plugin package from my system, and extracted the Flash plugin to a subfolder of my profile directory. A hackish script of mine deleted or recreated a symbolic link to the plugins on demand, which was basically the only course-grained way I have been controlling this up until today.&lt;br /&gt;&lt;br /&gt;Actually, the following has been in my mind for some time now, but I didn't have enough motivation (or need) to implement it before. It's as simple as this: if I launch a normal browsing session (via &lt;code&gt;ionice -n5 nice -n1&lt;/code&gt;), all such plugins are unavailable. If I have a need for viewing such content, I simply call another concurrent instance with the simple script given here. The specific profile directory contains symbolic links for Flash player and the Java runtime.&lt;br /&gt;&lt;br /&gt;Of course a complete solution for using untrusted code and precisely confining the resource usage would involve running a virtual machine, a linux-vserver or at least a chroot of some sort, but I'll leave that as an exercise to the reader. ;-)&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;~/bin/flash:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;#!/bin/dash&lt;br /&gt;PROF="$HOME/.epiphany_private"&lt;br /&gt;export MOZ_PLUGIN_PATH="$PROF/plugins"&lt;br /&gt;CMD="ionice -n6 nice -n2 epiphany\&lt;br /&gt;&amp;nbsp;--private-instance --profile $PROF $@"&lt;br /&gt;echo "$CMD &amp;amp;"&lt;br /&gt;exec $CMD &amp;amp;&lt;/code&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-86478572149458823?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/86478572149458823/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=86478572149458823&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/86478572149458823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/86478572149458823'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/09/lightweight-web-browsing-as-i-do.html' title='Lightweight web browsing as I do'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-6219646788508332731</id><published>2009-09-20T13:00:00.000+02:00</published><updated>2009-09-20T13:00:05.451+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='refactoring'/><title type='text'>Refactoring driven development instead of complete rewrites</title><content type='html'>I happen to share Joel Spolsky's view on the question of &lt;a href="http://www.joelonsoftware.com/articles/fog0000000069.html"&gt;whether it's worth it to rewrite from scratch&lt;/a&gt;. He goes into great detail to show that you'd be almost always better off to reuse and &lt;a href="http://en.wikipedia.org/wiki/Code_refactoring"&gt;refactor&lt;/a&gt; as much as you can from an evolutionarily tried and mostly working solution.&lt;br /&gt;&lt;br /&gt;He puts it as follows:&lt;blockquote cite="http://www.joelonsoftware.com/articles/fog0000000069.html"&gt;The idea that new code is better than old is patently absurd. Old code has been used. It has been tested. Lots of bugs have been found, and they've been fixed. There's nothing wrong with it. It doesn't acquire bugs just by sitting around on your hard drive.&lt;/blockquote&gt;&lt;br /&gt;He then goes on to analyze some of the most prominent issues that could lead the development team to consider a rewrite, and how to solve them without throwing away code.&lt;br /&gt;&lt;br /&gt;Nevertheless, would you be surprised if I shared that, according to my limited information, some modules of a certain programming language refactoring tool go through regular rewriting from scratch? It seems that not all eat their own dog food.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-6219646788508332731?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/6219646788508332731/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=6219646788508332731&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/6219646788508332731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/6219646788508332731'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/09/refactoring-driven-development-instead.html' title='Refactoring driven development instead of complete rewrites'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-2041756768799067151</id><published>2009-09-19T13:00:00.001+02:00</published><updated>2009-09-19T15:38:30.155+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Code sample formatting I use here</title><content type='html'>You may have noticed that I mostly use &lt;/code&gt;&amp;lt;code&amp;gt;&lt;/code&gt; tags instead of the more conventional &lt;/code&gt;&amp;lt;pre&amp;gt;&lt;/code&gt; to signal source code. Although the &lt;/code&gt;&amp;lt;code&amp;gt;&lt;/code&gt; tag was invented to show HTML markup, and mostly one-liners of those too, I find them more convenient for two good reasons.&lt;br /&gt;&lt;br /&gt;One is that I usually publish source code instead of prose, so using &lt;/code&gt;&amp;lt;code&amp;gt;&lt;/code&gt; is the semantically more appropriate one of the two. The second is a practical one: by definition, preformatted text does not support reflowing by the end user.&lt;br /&gt;&lt;br /&gt;Although that does make sense in most cases, especially for layout-based languages like Haskell, however, introducing scroll-bars in small windows or on embedded devices is a major nuisance. Your layout is toast even if you only have one or two lines that are too wide in the source. Though, I do try to prevent the former case as much as possible.&lt;br /&gt;&lt;br /&gt;This question is a usability issue, as in my opinion, it's much better to fiddle a bit with deciphering the one or two lines that got broken up than having to scroll back-and-forth horizontally in order to have an overview. Do keep in mind that in the first case, you only need to mentally connect the broken up line, while in the second case, you have to literally memorize the part of the code off the side!&lt;br /&gt;&lt;br /&gt;Though, a minimal, user-agent based Haskell parser would help a lot in automatically desugaring layout, or even pretty printing the broken lines! :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-2041756768799067151?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/2041756768799067151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=2041756768799067151&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/2041756768799067151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/2041756768799067151'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/09/code-sample-formatting-i-use-here.html' title='Code sample formatting I use here'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-6410516314445439887</id><published>2009-09-18T14:00:00.002+02:00</published><updated>2009-09-29T20:49:29.531+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>The code escaper I use for this blog</title><content type='html'>&lt;em&gt;Edit: numeric HTML escaping added (not Unicode compliant); minor refactoring (readFile and writeFile improvement, some renames)&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Previously, I had two bash scripts for this task, but ironically, I had escaping problems within them, so I've decided to go for the clean, well-written solution below. I usually patch issues like this in my scripts, but sometimes it just isn't worth it. Fixing these is more akin to juggling, than to real bug fixing. So this is what I use from now on:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;import Prelude hiding(readFile,writeFile)&lt;br /&gt;import qualified Prelude(readFile,writeFile)&lt;br /&gt;import System.Environment(getArgs)&lt;br /&gt;import Data.List(group)&lt;br /&gt;import Data.Char(ord)&lt;br /&gt;&lt;br /&gt;data FileName = FileName String&lt;br /&gt;readFile (FileName s) = Prelude.readFile s&lt;br /&gt;writeFile (FileName s) d&amp;nbsp;&amp;nbsp;= Prelude.writeFile s d&lt;br /&gt;&lt;br /&gt;toHtml = concatMap code where&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;code '&amp;amp;' = "&amp;amp;amp;"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;code '&amp;lt;' = "&amp;amp;lt;"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;code '&amp;gt;' = "&amp;amp;gt;"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;code c | ord(c)&amp;lt;32 || ord(c)&amp;gt;126 = "&amp;amp;#" ++ show (ord c) ++ ";"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;code c&amp;nbsp;&amp;nbsp;&amp;nbsp;= [c]&lt;br /&gt;&lt;br /&gt;blankNbsp = concatMap (\' ' -&amp;gt; "&amp;amp;nbsp;")&lt;br /&gt;&lt;br /&gt;multiNbsp = concatMap inner . group where&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;inner bl@(' ':' ':_) = blankNbsp bl&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;inner x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= x&lt;br /&gt;&lt;br /&gt;eachLine s = blankNbsp init ++ multiNbsp tail where&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(init,tail) = span (==' ') s&lt;br /&gt;&lt;br /&gt;tr = unlines . map (eachLine . toHtml) . lines where&lt;br /&gt;&lt;br /&gt;trf fi fo = do&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i &amp;lt;- readFile fi&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;writeFile fo (tr i)&lt;br /&gt;&lt;br /&gt;main = do&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;args &amp;lt;- getArgs&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case args of&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[fi@(_:_),fo@(_:_)] -&amp;gt; trf (FileName fi) (FileName fo)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;otherwise&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt; fail "params: inputfile outputfile"&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-6410516314445439887?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/6410516314445439887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=6410516314445439887&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/6410516314445439887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/6410516314445439887'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/09/code-escaper-i-use-for-this-blog.html' title='The code escaper I use for this blog'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-7599746016905336805</id><published>2009-09-17T13:00:00.000+02:00</published><updated>2009-09-17T13:00:06.188+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='microcontroller'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><title type='text'>Three-phase AC voltage generation with triple software PWM</title><content type='html'>This is one of the assembly programs I could be kind of proud of. It's composed of a heap load of macros and is built up in an almost completely neat, high-level hierarchical structure. I could post some snippets if anyone is interested.&lt;br /&gt;&lt;br /&gt;After making it build, it needed very few compile and test cycles despite the fact that I haven't programmed such a platform in years. I can recall one real, non-trivial defect that needed a second thought. It took some time of analyzing the (soundcard-based!) scope data to arrive at the conclusion that the embedded table contained inverted data (or something similar). Thus, actually the shell script was in (logical) error that generated the data table.&lt;br /&gt;&lt;br /&gt;After this correction, all three outputs of the device were verified to generate perfectly shaped (unfiltered) sine waves. This was a nice feat, as the generation of the three outputs were implemented in an unintuitively tangled way in order to maximize output resolution.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-7599746016905336805?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/7599746016905336805/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=7599746016905336805&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/7599746016905336805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/7599746016905336805'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/09/three-phase-ac-voltage-generation-with.html' title='Three-phase AC voltage generation with triple software PWM'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-6769246801660531449</id><published>2009-09-15T13:00:00.000+02:00</published><updated>2009-09-15T13:00:01.702+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='framework'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='abstract'/><category scheme='http://www.blogger.com/atom/ns#' term='game'/><title type='text'>Nice cross-platform puzzle framework and collection</title><content type='html'>You can find some very nice and small, MIT-licensed open source puzzles at &lt;a href="http://www.chiark.greenend.org.uk/~sgtatham/puzzles/"&gt;Simon Tatham's Portable Puzzle Collection&lt;/a&gt;, they are all both downloadable and playable online.&lt;br /&gt;&lt;br /&gt;They're also available from the official Debian/Ubuntu repositories as a package named "&lt;code&gt;sgt-puzzles&lt;/code&gt;".&lt;br /&gt;&lt;br /&gt;An interesting feat of these, is that they are being developed under a cross-platform abstract board-game framework for C. The mid-end provides some common higher level game-oriented routines. The back-end supports executable generation in the following formats: native Win32, native Mac OS X, Unix/GTK and Java applets - all from the same C source!&lt;br /&gt;&lt;br /&gt;Note that I planned to design something similar in the future, but using much higher level domain-specific languages. You will find out more about my plans in a future post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-6769246801660531449?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/6769246801660531449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=6769246801660531449&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/6769246801660531449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/6769246801660531449'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/09/nice-cross-platform-puzzle-framework.html' title='Nice cross-platform puzzle framework and collection'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-7532535337965289075</id><published>2009-09-13T22:26:00.004+02:00</published><updated>2009-09-19T16:05:11.784+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Nice and clean bash scripting for dialyzer dependencies</title><content type='html'>&lt;em&gt;edit2: New escaper run.&lt;/em&gt;&lt;br /&gt;&lt;em&gt;edit: Backslash is fixed now.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;I made a nice script that checks an Erlang source tree for base library dependencies. I needed this in order to speed up the system library PLT building analysis phase of the Dialyzer on my old computer.&lt;br /&gt;&lt;br /&gt;The trivially implemented algorithm is only an approximation based on sed-processed program text, but according to my review it's should almost never generate a smaller set of packages than a proper parser. Note that even a proper parser would have problems with the pathological cases which this simple one would fail on.&lt;br /&gt;&lt;br /&gt;The style is, however, much more interesting if you take a look at the attached code. What do &lt;strong&gt;you&lt;/strong&gt; think about it?&lt;br /&gt;&lt;br /&gt;&lt;code&gt;#!/bin/dash&lt;br /&gt;&lt;br /&gt;##### library code&lt;br /&gt;###&lt;br /&gt;&lt;br /&gt;# unpure!&lt;br /&gt;debug(){&lt;br /&gt;&amp;nbsp;[ -n "$NDEBUG" ] &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;echo "DEBUG:" "$@" &amp;gt;&amp;gt; $LOG&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# unpure!&lt;br /&gt;warning(){&lt;br /&gt;&amp;nbsp;echo "warning:" "$@" &amp;gt;&amp;gt; $LOG&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# unpure!&lt;br /&gt;error(){&lt;br /&gt;&amp;nbsp;echo "error: ${1}!" &amp;gt;&amp;amp;2&lt;br /&gt;&amp;nbsp;sleep 1&lt;br /&gt;&amp;nbsp;kill $$&lt;br /&gt;&amp;nbsp;sleep 10&lt;br /&gt;&amp;nbsp;exit 1&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# possibly unpure!&lt;br /&gt;args(){&lt;br /&gt;&amp;nbsp;GOT=$1&lt;br /&gt;&amp;nbsp;NEED=$2&lt;br /&gt;&amp;nbsp;SUB=$3&lt;br /&gt;&amp;nbsp;[ $NEED -ne $GOT ] &amp;amp;&amp;amp; error "${SUB}() needs $NEED args"&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# possibly unpure!&lt;br /&gt;argsmin(){&lt;br /&gt;&amp;nbsp;GOT=$1&lt;br /&gt;&amp;nbsp;NEED=$2&lt;br /&gt;&amp;nbsp;SUB=$3&lt;br /&gt;&amp;nbsp;[ $NEED -gt $GOT ] &amp;amp;&amp;amp; error "${SUB}() needs at least $NEED args"&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# possibly unpure!&lt;br /&gt;ck(){&lt;br /&gt;&amp;nbsp;$@ || error "return code=$? while executing '$*'"&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;any(){ argsmin $# 1 any&lt;br /&gt;&amp;nbsp;CMD="$*"&lt;br /&gt;&amp;nbsp;while read R&lt;br /&gt;&amp;nbsp;do&lt;br /&gt;&amp;nbsp;&amp;nbsp;$CMD "$R" &amp;amp;&amp;amp; exit 0&lt;br /&gt;&amp;nbsp;done&lt;br /&gt;&amp;nbsp;exit 1&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;older(){ args $# 2 older&lt;br /&gt;&amp;nbsp;[ $2 -nt $1 ]&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# possibly unpure!&lt;br /&gt;sk(){ argsmin $# 2 sk&lt;br /&gt;&amp;nbsp;F="$1"&lt;br /&gt;&amp;nbsp;shift&lt;br /&gt;&amp;nbsp;FUN=$1&lt;br /&gt;&amp;nbsp;shift&lt;br /&gt;&amp;nbsp;ARG="$*"&lt;br /&gt;&amp;nbsp;SK_DOTEST="1"&lt;br /&gt;&amp;nbsp;if [ -f "$F" ]&lt;br /&gt;&amp;nbsp;then&lt;br /&gt;&amp;nbsp;&amp;nbsp;echo "$ARG" |&lt;br /&gt;&amp;nbsp;&amp;nbsp;sed "s~ ~\n~g" |&lt;br /&gt;&amp;nbsp;&amp;nbsp;any older "$F" || SK_DOTEST=""&lt;br /&gt;&amp;nbsp;fi&lt;br /&gt;&amp;nbsp;if [ ${SK_DOTEST} ]&lt;br /&gt;&amp;nbsp;then&lt;br /&gt;&amp;nbsp;&amp;nbsp;echo "starting $FUN $ARG $F" &amp;gt;&amp;amp;2&lt;br /&gt;&amp;nbsp;&amp;nbsp;$FUN $ARG "$F" || {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;C=$?&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;rm -v "$F"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;error "return code=$C while executing '$FUN $ARG $F'"&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;ck test -f "$F"&lt;br /&gt;&amp;nbsp;else&lt;br /&gt;&amp;nbsp;&amp;nbsp;echo "skipping $FUN $ARG $F" &amp;gt;&amp;amp;2&lt;br /&gt;&amp;nbsp;fi&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;###&lt;br /&gt;##### end of library&lt;br /&gt;&lt;br /&gt;list_erl(){ args $# 2 list_erl&lt;br /&gt;&amp;nbsp;find $1 -type f -iname "*.erl" &amp;gt; $2&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# unpure!&lt;br /&gt;cat_files(){ args $# 2 cat_files&lt;br /&gt;&amp;nbsp;cat $1 |&lt;br /&gt;&amp;nbsp;while read R&lt;br /&gt;&amp;nbsp;do&lt;br /&gt;&amp;nbsp;&amp;nbsp;ck cat "$R"&lt;br /&gt;&amp;nbsp;done &amp;gt; $2&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;fun_calls(){ args $# 2 fun_calls&lt;br /&gt;&amp;nbsp;grep ":" $1 |&lt;br /&gt;&amp;nbsp;sed "s~^~ ~;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s~\&amp;lt;[a-z][a-z0-9_]*:[a-z][a-z0-9_]*\&amp;gt;~\n&amp;amp;\n ~g" |&lt;br /&gt;&amp;nbsp;grep "^[^ ]" |&lt;br /&gt;&amp;nbsp;sort |&lt;br /&gt;&amp;nbsp;uniq &amp;gt; $2&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;call_mods(){ args $# 2 call_mods&lt;br /&gt;&amp;nbsp;sed "s~:[^:]*$~~" $1 |&lt;br /&gt;&amp;nbsp;sort |&lt;br /&gt;&amp;nbsp;uniq &amp;gt; $2&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;erl_libs(){ args $# 2 erl_libs&lt;br /&gt;&amp;nbsp;find $1 -mindepth 3 -maxdepth 3 -type f -iname "*.erl" |&lt;br /&gt;&amp;nbsp;grep "^$1/[^/][^/]*/src/" &amp;gt; $2&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;used_libs(){ args $# 4 used_libs&lt;br /&gt;&amp;nbsp;USED_LIBS_MOD=$1&lt;br /&gt;&amp;nbsp;USED_LIBS_LIB=$2&lt;br /&gt;&amp;nbsp;USED_LIBS_SRC=$3&lt;br /&gt;&amp;nbsp;USED_LIBS_OUT=$4&lt;br /&gt;&amp;nbsp;cat $USED_LIBS_MOD |&lt;br /&gt;&amp;nbsp;while read R&lt;br /&gt;&amp;nbsp;do&lt;br /&gt;&amp;nbsp;&amp;nbsp;P="^.*/\([^/][^/]*\)/src/$R\.erl$"&lt;br /&gt;&amp;nbsp;&amp;nbsp;if&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;grep -q "$P" $USED_LIBS_LIB&lt;br /&gt;&amp;nbsp;&amp;nbsp;then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;grep "$P" $USED_LIBS_LIB |&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;sed "s~$P~\1~"&lt;br /&gt;&amp;nbsp;&amp;nbsp;else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;grep -q "/$R\.erl$" $USED_LIBS_SRC ||&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;warning "$R not found!"&lt;br /&gt;&amp;nbsp;&amp;nbsp;fi&lt;br /&gt;&amp;nbsp;done |&lt;br /&gt;&amp;nbsp;sort |&lt;br /&gt;&amp;nbsp;uniq &amp;gt; $USED_LIBS_OUT&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;main(){ args $# 0 "main"&lt;br /&gt;&amp;nbsp;SRCDIR=$HOME/erl/trunk/tool/&lt;br /&gt;&amp;nbsp;SRCDIRLS=_srcls.txt.tmp&lt;br /&gt;&amp;nbsp;ERLTEXT=_source.txt.tmp&lt;br /&gt;&amp;nbsp;CALLS=_calls.txt.tmp&lt;br /&gt;&amp;nbsp;MODS=_mods.txt.tmp&lt;br /&gt;&amp;nbsp;LIBS=_libs.txt.tmp&lt;br /&gt;&amp;nbsp;USEDLIBS=usedlibs.txt&lt;br /&gt;&amp;nbsp;LOG="error.log"&lt;br /&gt;&lt;br /&gt;&amp;nbsp;sk $SRCDIRLS list_erl  $SRCDIR&lt;br /&gt;&amp;nbsp;sk $ERLTEXT&amp;nbsp;&amp;nbsp;cat_files $SRCDIRLS&lt;br /&gt;&amp;nbsp;sk $CALLS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fun_calls $ERLTEXT&lt;br /&gt;&amp;nbsp;sk $MODS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;call_mods $CALLS&lt;br /&gt;&amp;nbsp;sk $LIBS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;erl_libs  /usr/lib/erlang/lib&lt;br /&gt;&amp;nbsp;sk $USEDLIBS used_libs $MODS $LIBS $SRCDIRLS&lt;br /&gt;&lt;br /&gt;&amp;nbsp;echo ok&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;main "$@"&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-7532535337965289075?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/7532535337965289075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=7532535337965289075&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/7532535337965289075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/7532535337965289075'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/09/nice-and-clean-bash-scripting-for.html' title='Nice and clean bash scripting for dialyzer dependencies'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-8093215301177783353</id><published>2009-09-10T18:00:00.000+02:00</published><updated>2009-09-10T18:00:03.648+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='psion'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><title type='text'>My Psion is sick - I'm doomed!</title><content type='html'>The backlight is out, what am I going to do now?! Nah, actually I would only be in trouble if it wasn't a sunlight readable, electroluminescent transflective FSTN LCD! :-)&lt;br /&gt;&lt;br /&gt;You see, my current usage pattern involved less than 1% of backlight use, and in almost all cases it was more of a convenience than a necessity.&lt;br /&gt;&lt;br /&gt;It is, however, a sign of deterioration of the flexible cable, so I am getting a bit worried. I am prepared for all possibilities.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-8093215301177783353?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/8093215301177783353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=8093215301177783353&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/8093215301177783353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/8093215301177783353'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/09/my-psion-is-sick-im-doomed.html' title='My Psion is sick - I&apos;m doomed!'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-5661253675151396575</id><published>2009-09-08T13:00:00.000+02:00</published><updated>2009-09-08T13:00:00.733+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='midp'/><category scheme='http://www.blogger.com/atom/ns#' term='j2me'/><category scheme='http://www.blogger.com/atom/ns#' term='jre'/><title type='text'>Optimized Java bytecode scheme for embedded devices</title><content type='html'>There exist interesting research related to reducing the resource demands of Java runtimes. &lt;a href="http://en.wikipedia.org/wiki/Squawk_virtual_machine"&gt;Squawk&lt;/a&gt; takes this to the extreme by providing an almost completely standards-compliant implementation of the &lt;a href="http://en.wikipedia.org/wiki/Connected_Limited_Device_Configuration"&gt;CLDC&lt;/a&gt;, the smallest configuration of &lt;a href="http://en.wikipedia.org/wiki/J2ME"&gt;J2ME&lt;/a&gt;, on which &lt;a href="http://en.wikipedia.org/wiki/Mobile_Information_Device_Profile"&gt;MIDP&lt;/a&gt; is layered.&lt;br /&gt;&lt;br /&gt;It's also of importance to note, that the source is almost entirely written in Java itself! They have worked around the issue of implementing lower level routines by falling back to a common subset of Java and C for those parts. That's a nifty trick, and I wanted to blog about something similar long time ago. It's a good thing that I'm not dreaming all the time and many of my ideas can be realized in practice.&lt;br /&gt;&lt;br /&gt;A complete runtime including the interpreter and the garbage collectors of the said takes up 25KiB of ROM. The standard CLDC library takes up a further 146KiB of ROM when uncompressed, or 64KiB if compressed. To execute the null program, it needs about half a kilobyte of RAM for the Java heap and another half a kilobyte for the native data and stack.&lt;br /&gt;&lt;br /&gt;I have browsed through their paper and had to conclude that they've come up with a very elegant solution for a massive code size optimization and being memory friendly. Their techniques result in a typical 62% reduction of uncompressed code size, which at the same time greatly aids reducing runtime memory footprint of code.&lt;br /&gt;&lt;br /&gt;It would make a great operating system for my 386 if it had a MIDP profile implementation. Just imagine all the games it could play!&lt;br /&gt;&lt;br /&gt;A little teaser: compressed size for Space Invaders is 9KiB, while a tiling block puzzle takes up a mere 4KiB, both written in high level standard Java! I wonder how using the &lt;a href="http://en.wikipedia.org/wiki/Scala_(programming_language)"&gt;Scala programming language&lt;/a&gt; would alter this picture. This is one of the newest projects on my to-do list.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-5661253675151396575?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/5661253675151396575/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=5661253675151396575&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/5661253675151396575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/5661253675151396575'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/09/optimized-java-bytecode-scheme-for.html' title='Optimized Java bytecode scheme for embedded devices'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-5000882882085860231</id><published>2009-09-06T13:30:00.000+02:00</published><updated>2009-09-06T21:21:29.700+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='mono'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='csharp'/><title type='text'>Is Java a slow language?</title><content type='html'>You can have a look for yourself at the Computer Language Benchmarks Game:&lt;ul&gt;&lt;li&gt;&lt;a href="http://shootout.alioth.debian.org/u64q/benchmark.php?test=all&amp;lang=javasteady&amp;lang2=hipe&amp;box=1"&gt;Java vs. Erlang&lt;/a&gt; (&lt;a href="http://www.google.hu/search?q=erlang+industry"&gt;Erlang in the industry&lt;/a&gt;)&lt;li&gt;&lt;a href="http://shootout.alioth.debian.org/u64q/benchmark.php?test=all&amp;lang=javasteady&amp;lang2=scala&amp;box=1"&gt;Java vs. Scala&lt;/a&gt;&lt;li&gt;&lt;a href="http://shootout.alioth.debian.org/u64q/benchmark.php?test=all&amp;lang=javasteady&amp;lang2=csharp&amp;box=1"&gt;Java vs. C# Mono&lt;/a&gt; (note that I'm told that Mono's runtime may be inferior in some aspects to the official .NET CLR)&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Various approaches to detailed analysis:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Java_performance"&gt;Java performance (Wikipedia)&lt;/a&gt;&lt;li&gt;&lt;a href="http://blog.taragana.com/index.php/archive/java-is-slow-revisited/"&gt;Java is Slow Revisited (2007)&lt;/a&gt;&lt;li&gt;&lt;a href="http://www.idiom.com/~zilla/Computer/javaCbenchmark.html"&gt;Performance of Java versus C++ by J.P.Lewis and Ulrich Neumann, Computer Graphics and Immersive Technology Lab, University of Southern California (2003)&lt;/a&gt;&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/java/library/j-jtp09275.html"&gt;Java theory and practice: Urban performance legends, revisited (IBM, 2005)&lt;/a&gt;&lt;li&gt;&lt;a href="http://www.codeinstructions.com/2008/11/java-performance.html"&gt;Java Performance (Code Instructions)&lt;/a&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;All in all, we can conclude that neither Java, nor it's much higher level sibling, &lt;a href="http://en.wikipedia.org/wiki/Scala_(programming_language)"&gt;Scala&lt;/a&gt; deserves a reputation for being slow, though memory usage does show room for improvement.  However, I would look forward to seeing results of the game tests ran under different virtual machines.&lt;br /&gt;&lt;br /&gt;I am working on a post about efficient high level embedded programming (including Java), so do stay tuned!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-5000882882085860231?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/5000882882085860231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=5000882882085860231&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/5000882882085860231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/5000882882085860231'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/09/is-java-slow-language.html' title='Is Java a slow language?'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-1991080774058383278</id><published>2009-09-05T15:38:00.001+02:00</published><updated>2009-09-05T15:40:21.647+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>Progress report for this blog</title><content type='html'>Let's get back to work. Before you lose all hope, I'll cheer you up with the fact that I'm not at all out of ideas. There are dozens of articles of mine in the works, actually in excess of fifty, which you could enjoy soon!&lt;br /&gt;&lt;br /&gt;Most stand pretty good, many of which are almost complete. Others need to get decomposed, refactored, supplemented with additional references, illustration or corrections.&lt;br /&gt;&lt;br /&gt;I've taken your expressed wishes into consideration, so there are many hardware related among them now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-1991080774058383278?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/1991080774058383278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=1991080774058383278&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/1991080774058383278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/1991080774058383278'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/09/progress-report-for-this-blog.html' title='Progress report for this blog'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-3555921015635906495</id><published>2009-09-03T21:22:00.000+02:00</published><updated>2009-09-03T21:24:04.892+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='type system'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Leading edge language type system research: Cayenne and Epigram (links)</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Cayenne_(programming_language)"&gt;Cayenne (programming language)&lt;/a&gt; is implemented in Haskell and provides a very rich research alternative with &lt;a href="http://en.wikipedia.org/wiki/Dependent_type"&gt;dependent types&lt;/a&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Epigram_(programming_language)"&gt;Epigram (programming language)&lt;/a&gt; is based on &lt;a href="http://en.wikipedia.org/wiki/Algebraic_Logic_Functional_programming_language"&gt;ALF&lt;/a&gt;, and for which the compiler can certify a proof of correctness thanks to the strong type system also based on dependent types&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;At first, those listed weren't of an interest to me, but the more I browse through their materials, the more I'm reminded about my goals laid out about an ideal programming environment many years ago. If only these things provided a less ugly syntax... :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-3555921015635906495?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/3555921015635906495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=3555921015635906495&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/3555921015635906495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/3555921015635906495'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/09/leading-edge-language-type-system.html' title='Leading edge language type system research: Cayenne and Epigram (links)'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-3670785524847978117</id><published>2009-09-03T21:17:00.000+02:00</published><updated>2009-09-03T21:18:40.367+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='syntax'/><category scheme='http://www.blogger.com/atom/ns#' term='hack'/><title type='text'>Program Erlang/OTP without the syntax quirks</title><content type='html'>I think I can say that you can be pretty comfortable with Erlang after a while, but you never forget how clear and conscious Haskell (or Scala, etc.) code is compared to that. If only you needed to type less punctuation and if it had static types... Anyway you can both have your pie and eat it according to some projects:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.haskell.org/haskellwiki/Yhc/Erlang/Proof_of_concept"&gt;Targeting a Haskell compiler for the Erlang BEAM&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The following were newbie hacking attempts at transforming Haskell syntax to Erlang syntax at the source level:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.dcs.gla.ac.uk/~partain/haskerl.html"&gt;The Haskerl index of some related mails&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://erlang.org/pipermail/erlang-questions/2008-April/034165.html"&gt;[erlang-questions] Any recent progress on Haskerl?&lt;/a&gt;&lt;br /&gt;&lt;li&gt;(the project page blog.tornkvist.org seems to be unavailable at the moment)&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-3670785524847978117?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/3670785524847978117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=3670785524847978117&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/3670785524847978117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/3670785524847978117'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/09/program-erlangotp-without-syntax-quirks.html' title='Program Erlang/OTP without the syntax quirks'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-3394203675440985470</id><published>2009-09-03T21:16:00.000+02:00</published><updated>2009-09-03T21:17:13.081+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Haskell vs. Erlang vs. Scala</title><content type='html'>Comparing &lt;a href="http://en.wikipedia.org/wiki/Haskell_(programming_language)"&gt;Haskell&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Erlang_(programming_language)"&gt;Erlang&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Scala_(programming_language)"&gt;Scala&lt;/a&gt; by way of examples and intelligent analysis:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blogtrader.net/dcaoyuan/entry/an_example_syntax_in_haskell"&gt;An Example Syntax in Haskell, Erlang and Scala&lt;/a&gt; (blogtrader)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.infoq.com/news/2008/06/scala-vs-erlang"&gt;The multicore crises: Scala vs. Erlang&lt;/a&gt; (a detailed &lt;strong&gt;and&lt;/strong&gt; informed analysis by &lt;a href="http://niclasnilsson.se/"&gt;Niclas Nilsson&lt;/a&gt; and nice follow-up discussion)&lt;/li&gt;&lt;li&gt;&lt;a href="http://shootout.alioth.debian.org/u64q/haskell.php"&gt;Programming language shootout game on x86-64: Haskell&lt;/a&gt;&lt;li&gt;&lt;a href="http://shootout.alioth.debian.org/u64q/erlang.php"&gt;Programming language shootout game on x86-64: Erlang&lt;/a&gt;&lt;li&gt;&lt;a href="http://shootout.alioth.debian.org/u64q/scala.php"&gt;Programming language shootout game on x86-64: Scala&lt;/a&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Of course, all three are great languages, with Haskell having an edge over the competition in pureness and syntax neatness, Scala in technology, experience transfer and sometimes syntax, while Erlang has the edge over provenly great concurrency, scalability and a beginner-friendly straight-forward syntax - in exchange for being a dynamic language.&lt;br /&gt;&lt;br /&gt;Expect to read more introductory articles on Scala in the future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-3394203675440985470?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/3394203675440985470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=3394203675440985470&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/3394203675440985470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/3394203675440985470'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/09/haskell-vs-erlang-vs-scala.html' title='Haskell vs. Erlang vs. Scala'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-5273550036794267001</id><published>2009-09-02T16:55:00.002+02:00</published><updated>2009-09-02T17:02:10.645+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='ecology'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><title type='text'>My interests at Wikipedia</title><content type='html'>I've uploaded a preliminary version of my interests to the &lt;a href="http://en.wikipedia.org/wiki/User:Bkil/Interests"&gt;Wikipedia user page of bkil&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I'll keep you posted if I find something else interesting, but you could also follow the logs. Your suggestions are welcome!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-5273550036794267001?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/5273550036794267001/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=5273550036794267001&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/5273550036794267001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/5273550036794267001'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/09/my-interests-at-wikipedia.html' title='My interests at Wikipedia'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-2657329259154106262</id><published>2009-09-01T19:24:00.013+02:00</published><updated>2009-09-05T15:48:32.158+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='virus'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>Oh no, I've been infected by a virus again!!</title><content type='html'>&lt;em&gt;Edit: typo fixes&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Yesterday, I needed to get a monochromatic ID picture printed to photographic paper and while at it, I also needed to print a page of text. I've visited a nearby mall in the morning for this reason.&lt;br /&gt;&lt;br /&gt;To my surprise, they had decent automated kiosks just for this purpose at the photo specialty store. Naturally, none of them could read my flash key drive, even after asking for assistance from the pretty lady at the counter. She said this does happen sometimes. Thankfully everything went fine after manually selecting the image at her computer, as the drive was read in a second there. Probably too many files on the drive for the bogous software to cope with. Anyway, the whole process about five to ten minutes.&lt;br /&gt;&lt;br /&gt;After that, I went to the normal printing booth for my other task. The guy was busy on the phone for about five minutes while he was acting as if he was refilling paper. After hanging up, he asked for the place where he could find the items to print. I quickly provided the answer, though I was a bit puzzled, as I always prepare the drive to a ridiculously plain form before these occasions at home.&lt;br /&gt;&lt;br /&gt;I'll list the contents of the drive:&lt;pre&gt;drwxr-xr-x 8 10335 11070    8192 szept  1 04.32 __&lt;br /&gt;drwxr-xr-x 2 10335 11070    8192 szept  1 09.29 foto&lt;br /&gt;drwxr-xr-x 3 10335 11070    8192 szept  1 04.34 nyomtat&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;For the curious: "foto" means "photo" and "nyomtat" means "to print" in Hungarian, and the underscore directory stores my data not relevant to the task at hand. Can you make it any simpler than that?&lt;br /&gt;&lt;br /&gt;Everything went all fine, until I checked my drive that evening. It gave the following listing:&lt;pre&gt;drwxr-xr-x 8 10335 11070    8192 szept  1 04.32 __&lt;br /&gt;-r-xr-xr-x 1 10335 11070     148 szept  1 11.06 autorun.inf&lt;br /&gt;-rwxr-xr-x 1 10335 11070 1414106 szept  1 11.06 __.exe&lt;br /&gt;drwxr-xr-x 2 10335 11070    8192 szept  1 09.29 foto&lt;br /&gt;-rwxr-xr-x 1 10335 11070 1414106 szept  1 11.06 foto.exe&lt;br /&gt;-rwxr-xr-x 1 10335 11070  348160 szept  1 11.00 msvcr71.dll&lt;br /&gt;drwxr-xr-x 3 10335 11070    8192 szept  1 04.34 nyomtat&lt;br /&gt;-rwxr-xr-x 1 10335 11070 1414106 szept  1 11.06 nyomtat.exe&lt;br /&gt;-rwxr-xr-x 1 10335 11070 3514318 szept  1 11.00 &lt;a href="http://stylez.wordpress.com/2006/10/09/a-guide-to-removing-ravmoneexe/"&gt;RavMonE.exe&lt;/a&gt;&lt;br /&gt;-r-xr-xr-x 1 10335 11070 1414106 szept  1 11.06 Recycle.exe&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;It's nasty, isn't it? Sadly, I'm afraid I'll have to disinfect the drive to protect against potential spreading of the malware in question by executables. But wait, I always keep the source on the drive for every binary! So I will have to recompile all the SYSV LSB ELF executables, or else I could get infected! No wait, I only store programs in source form on the drive. But what if it could alter the source form by comprehending Haskell and Erlang? Good thing I always store hashes of directories and keep backups of everything I transfer until its successful reception. I had a great laugh anyway. :-D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-2657329259154106262?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/2657329259154106262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=2657329259154106262&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/2657329259154106262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/2657329259154106262'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/09/oh-no-ive-been-infected-by-virus-again.html' title='Oh no, I&apos;ve been infected by a virus again!!'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-2822571665543075623</id><published>2009-08-09T23:08:00.003+02:00</published><updated>2009-08-10T00:43:17.702+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='point-free'/><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><category scheme='http://www.blogger.com/atom/ns#' term='toy'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Playing with lambda elimination and point-free style</title><content type='html'>It was a long time since I've last played with Haskell, so I decided to do a bit of &lt;a href="http://en.wikipedia.org/wiki/Tacit_programming"&gt;lambda elimination&lt;/a&gt; as an exercise.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;let f=(\x y-&gt;x++y);g=(\x y z-&gt;x++y++z)in f(g "1""2""3")"4"&lt;br /&gt;let f=(++);g=(f.).f in f(g "1""2""3")"4"&lt;br /&gt;let f=(++);g=(f.).f in (f(g "1""2""3"))"4"&lt;br /&gt;let f=(++);g=(f.).f in (f.(g "1""2"))"3""4"&lt;br /&gt;let f=(++);g=(f.).f in (f.((g "1")"2"))"3""4"&lt;br /&gt;let f=(++);g=(f.).f in ((f.).(g "1"))"2""3""4"&lt;br /&gt;let f=(++);g=(f.).f in ((f.).g "1")"2""3""4"&lt;br /&gt;let f=(++);g=(f.).f in (((f.).).g)"1""2""3""4"&lt;br /&gt;let f=(++);g=(f.).f;h=((f.).).g in h"1""2""3""4"&lt;br /&gt;let f=(++);h=((f.).).(f.).f in h"1""2""3""4"&lt;br /&gt;let f=(++);h=(((f.).).).((f.).).(f.).f in h"1""2""3""4""5"&lt;br /&gt;let f=((+).(*10));h=((f.).).(f.).f in h 1 2 3 4&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Beautiful, isn't it? :-D&lt;br /&gt;&lt;br /&gt;Of course the last one boils down to &lt;em&gt;foldl1&amp;nbsp;((+).(*10))&amp;nbsp;[1..4]&lt;/em&gt;, but don't tell anyone! ;-) I'm too embarrassed to spell out what the others mean...&lt;br /&gt;&lt;br /&gt;Note that I've figured out the optimization of &lt;strong&gt;f&lt;/strong&gt; and &lt;strong&gt;g&lt;/strong&gt; themselves only halfway through the session.&lt;br /&gt;&lt;br /&gt;A bit of this magic can improve your code, as you've probably noticed in my numerous posted sources, but this is also motivating: &lt;a href="http://www.vex.net/~trebla/weblog/pointfree.html"&gt;UNIX pipes vs. dot operator&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Though, you shouldn't go too far, or else you could arrive at a solution similar to this automatically translated one found on Nabble:&lt;br /&gt;&lt;code&gt;(\op (a, b) (c, d) -&gt; (a `op` c, b `op` d))&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;That results in the following sexy line noise:&lt;br /&gt;&lt;code&gt;(`ap` snd) . (. fst) . flip flip snd . ((flip . (ap .)) .) . flip flip fst . ((flip . ((.) .)) .) . (flip =&lt;&lt; (((.) . flip . (((.) . (,)) .)) .))&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-2822571665543075623?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/2822571665543075623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=2822571665543075623&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/2822571665543075623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/2822571665543075623'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/08/playing-with-lambda-elimination-and.html' title='Playing with lambda elimination and point-free style'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-4196976415562396946</id><published>2009-08-06T11:17:00.001+02:00</published><updated>2009-08-06T23:16:50.733+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tags'/><category scheme='http://www.blogger.com/atom/ns#' term='split'/><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='proposition'/><category scheme='http://www.blogger.com/atom/ns#' term='categories'/><title type='text'>Splitting this blog by categories?</title><content type='html'>I am considering a split in the long term if that would improve user experience. What I still need to figure out is what to do with multidisciplinary articles.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-4196976415562396946?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/4196976415562396946/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=4196976415562396946&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/4196976415562396946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/4196976415562396946'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/08/splitting-this-blog-by-categories.html' title='Splitting this blog by categories?'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-8020212500248551571</id><published>2009-08-02T11:02:00.000+02:00</published><updated>2009-08-02T11:04:38.118+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='short'/><category scheme='http://www.blogger.com/atom/ns#' term='articles'/><title type='text'>I plan to use summaries and shorter posts</title><content type='html'>I have been thinking about the previous recommendation of a friend of mine, and it does sound reasonable to expect to read about as narrow subject as possible in a single post.&lt;br /&gt;&lt;br /&gt;The problem is that it happens to me often that I mix in articles of mine between average blog posts. I think it would be a much better choice to build professional articles for my website in the said topics that could contain figures, statistics, research, references, reviews and comparisons, while I would only post short summaries of the said articles here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-8020212500248551571?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/8020212500248551571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=8020212500248551571&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/8020212500248551571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/8020212500248551571'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/08/i-plan-to-use-summaries-and-shorter.html' title='I plan to use summaries and shorter posts'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-1168936142701739465</id><published>2009-07-31T13:50:00.001+02:00</published><updated>2009-07-31T13:54:48.056+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='poll'/><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='interest'/><category scheme='http://www.blogger.com/atom/ns#' term='topics'/><category scheme='http://www.blogger.com/atom/ns#' term='vote'/><title type='text'>My new POLL about topics of interest</title><content type='html'>You can take part in my newest &lt;em&gt;poll&lt;/em&gt; at the &lt;strong&gt;top&lt;/strong&gt; or post comments about it here. I'd be honored to hear from the few loyal readers of mine again this year, but naturally all participants are welcome!&lt;br /&gt;&lt;br /&gt;Stay tuned, as I will be back to we&lt;strong&gt;blogging soon&lt;/strong&gt; after finishing my Erlang duties.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-1168936142701739465?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/1168936142701739465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=1168936142701739465&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/1168936142701739465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/1168936142701739465'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/07/my-new-poll-about-topics-of-interest.html' title='My new POLL about topics of interest'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-8106827967255490550</id><published>2009-07-30T08:28:00.003+02:00</published><updated>2009-07-31T13:56:26.601+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><category scheme='http://www.blogger.com/atom/ns#' term='advise'/><category scheme='http://www.blogger.com/atom/ns#' term='quote'/><category scheme='http://www.blogger.com/atom/ns#' term='bury'/><category scheme='http://www.blogger.com/atom/ns#' term='clients'/><category scheme='http://www.blogger.com/atom/ns#' term='mistakes'/><title type='text'>The superiority of open source by Frank Lloyd Wright</title><content type='html'>This is one of the best quotes I could find about the superiority of open source software:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;"The physician can bury his mistakes, but the architect can only advise his clients to plant vines."&lt;/p&gt;&lt;p&gt;&amp;mdash; Frank Lloyd Wright, New York Times Magazine (4 October 1953)&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-8106827967255490550?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/8106827967255490550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=8106827967255490550&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/8106827967255490550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/8106827967255490550'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/07/superiority-of-open-source-by-frank.html' title='The superiority of open source by Frank Lloyd Wright'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-3095817819997911766</id><published>2009-06-24T20:04:00.002+02:00</published><updated>2009-06-24T20:12:36.969+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rm'/><category scheme='http://www.blogger.com/atom/ns#' term='format'/><category scheme='http://www.blogger.com/atom/ns#' term='me'/><category scheme='http://www.blogger.com/atom/ns#' term='accident'/><category scheme='http://www.blogger.com/atom/ns#' term='operating system'/><category scheme='http://www.blogger.com/atom/ns#' term='disaster'/><category scheme='http://www.blogger.com/atom/ns#' term='drive'/><title type='text'>Unintentionally formatting your system drive is a bad idea</title><content type='html'>One day, I was playing with a chroot jail. This whole incident has taken place some months ago. I wanted to test if I could install software from user mode because my apt-get was doing a system update. Well, building from source via &lt;em&gt;"apt-get -b source"&lt;/em&gt; would have also solved the issue, though dependency handling in this case is not automatic if I understand correctly.&lt;br /&gt;&lt;br /&gt;In order for this process to take as little overhead as possible, I wanted to simulate a manual copy-on-write filesystem by creating links to the parts that are common with my root system, and recreating directories which are partially different. I first tried to use symbolic links, but I had to realize that relative links that point outside the sandbox were dysfunctional. Hence I made a hardlink for my root in the chroot. Well, it was a read-only bind-mount to be more exact. Note that I did succeed previously with a different system and kernel (Gentoo 2005.x) by using symbolic links, that's why I gave it a try.&lt;br /&gt;&lt;br /&gt;By the time I was done with all that, I had to realize that I would have needed to recreate both the dpkg repositories and its configuration. I decided to postpone this project until next time, because the root apt-get process was finished with the updates. I've thus installed what I needed with a normal root apt-get. Before you ask, I also use aptitude occasionally.&lt;br /&gt;&lt;br /&gt;Later on, I wanted to have dinner, so I finished my notes, closed windows that I felt I was done with and deleted some temporary files. As didn't think the solution to the problem described earlier was elegant enough and I was considering trying out a real copy-on-write filesystem anyway, I decided to coax the whole thing.&lt;br /&gt;&lt;br /&gt;Typing&lt;br /&gt;&lt;pre&gt;rm -R sandbox&lt;/pre&gt;&lt;br /&gt;did the trick, though I was a bit puzzled why it took so long to delete a few hundred kilobytes. Than it hit me. Something deep inside screamed for an immediate abortion. I pressed ctrl-C in less than two seconds, though I was still unsure why. I sit there for a while, and after about ten seconds, I started to feel bad and sweat badly. I was afraid to look at first, but I have started to think about what could happen if a read-only mount could be written to. I listed the root directory and it looked intact, but I knew deleting a few links and some dupes would take way less time. I was too upset to do a detailed analyzes right away, so I had dinner and went for a walk beforehand. Well, for starters, the boot directory was missing, so I know it was a bad idea to shut down the computer...&lt;br /&gt;&lt;br /&gt;When I was on the case again, I traversed a few important directories manually with Midnight Commander, and as they seemed all right, I almost got relieved. I was so grateful this time that I've set the most conservative and slowest options possible for my root partition (dirsync,sync,commit=1,...)!&lt;br /&gt;&lt;br /&gt;But then I wanted to do something clever with a command line program which I can't recall at the moment, but I know I wanted to activate some exotic function, so I looked it up in the respective manual page. However, as man only returned a manpage not found error, I double-checked my spelling. It still gave me an error, so I thought it may not had a manpage or something. I queried "man man" out of suspicion, and it has also returned an error. That was the point when I started to become anxious.&lt;br /&gt;&lt;br /&gt;So I started my research on the web about how to diagnose a problem like this. I have eventually found the following handy packages:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;debsums&lt;/li&gt;&lt;br /&gt;&lt;li&gt;cruft&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;They have indicated that the kernel, grub, almost every manpage, most icons and a few miscellaneous manpages are missing.&lt;br /&gt;&lt;br /&gt;Fortunately, I do keep a local Debian mirror handy that I progressively build from my caches via apt-move. After reinstalling all affected packages with &lt;em&gt;aptitude reinstall&lt;/em&gt;. As a side note, I would have been better off to simple reinstall all by:&lt;br /&gt;&lt;pre&gt;aptitude reinstall ~i&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Lessons learned? Always play in virtual machines. Or alternatively, use a filesystem driver that provides orthogonal bind mapping (i.e. that honors mount flags), like the plain file system translator Minix is said to possess.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-3095817819997911766?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/3095817819997911766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=3095817819997911766&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/3095817819997911766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/3095817819997911766'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/06/unintentionally-formatting-your-system.html' title='Unintentionally formatting your system drive is a bad idea'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-696216799187219116</id><published>2009-06-18T22:27:00.000+02:00</published><updated>2009-06-18T23:17:42.112+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='renewable'/><category scheme='http://www.blogger.com/atom/ns#' term='house'/><category scheme='http://www.blogger.com/atom/ns#' term='wood'/><category scheme='http://www.blogger.com/atom/ns#' term='ecology'/><category scheme='http://www.blogger.com/atom/ns#' term='material'/><category scheme='http://www.blogger.com/atom/ns#' term='environment'/><title type='text'>Wooden house good idea after all</title><content type='html'>I had a conversation with a friend of mine some years ago about buildings made out of renewable material. Well, it wasn't actually a healthy argument, as I scared the guy off with a few tongue-in-cheek expressions, like the example of Tom and Jerry. :) I wanted to continue, but sadly, he said he was convinced and changed his mind.&lt;br /&gt;&lt;br /&gt;Nowadays, I myself consider this an ever more viable alternative, given the low ecological footprint and the numerous successful projects in this area. Note that while I have not analyzed the per-year cost of these less durable materials yet, renewable by definition is almost always better than non-renewable.&lt;br /&gt;&lt;br /&gt;The following links (and many others) seem to imply the same:&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.greenhomebuilding.com/articles/affordable.htm"&gt;Build Your Own Affordable, Eco-Friendly House by Dr. Owen Geiger&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://ecology.com/features/eco-friendly-homes/eco-friendly-homes.html"&gt;Natural Resources &amp;amp; Sustainability Environmentally Friendly Homes by Adam Downing&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.concerto-sesac.eu/spip.php?rubrique138"&gt;Wooden Eco-buildings - energy efficiency in LCA perspective&lt;/a&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-696216799187219116?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/696216799187219116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=696216799187219116&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/696216799187219116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/696216799187219116'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/06/wooden-house-good-idea-after-all.html' title='Wooden house good idea after all'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-2726771511145582947</id><published>2009-06-16T22:49:00.000+02:00</published><updated>2009-06-16T22:50:01.163+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='psychology'/><category scheme='http://www.blogger.com/atom/ns#' term='mathematics'/><category scheme='http://www.blogger.com/atom/ns#' term='sociology'/><title type='text'>Social interaction is prime</title><content type='html'>Who would have guessed that even mathematical logic is not a pure expression of general intelligence, but rather a device evolved directly out of simple reward-punishment and social exchange?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Wason_selection_task#Explanations_of_performance_on_the_task"&gt;wiki: Wason selection task&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Okay, perhaps the amount of practice done in this area by most humans could also provide part of the explanation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-2726771511145582947?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/2726771511145582947/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=2726771511145582947&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/2726771511145582947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/2726771511145582947'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/06/social-interaction-is-prime.html' title='Social interaction is prime'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-5707644231045672469</id><published>2009-05-31T21:17:00.004+02:00</published><updated>2009-06-01T20:02:16.455+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><category scheme='http://www.blogger.com/atom/ns#' term='toy'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Chopping a long string into smaller ones toy</title><content type='html'>I made a great tool I can't do without from now on! ;-D&lt;br /&gt;Update#1: added null string checking, renamed "i" to "s".&lt;br /&gt;&lt;em&gt;Update#2: upgraded output format, added BASH version!&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Here's the Haskell source code:&lt;br /&gt;&lt;hr /&gt;&lt;code&gt;import System.Environment(getArgs)&lt;br /&gt;import Data.List(unfoldr,intersperse)&lt;br /&gt;&lt;br /&gt;chop k | k&amp;gt;0 = unfoldr f where&lt;br /&gt;&amp;nbsp;f []&amp;nbsp;= Nothing&lt;br /&gt;&amp;nbsp;f s&amp;nbsp;&amp;nbsp;= Just $ splitAt k s&lt;br /&gt;&lt;br /&gt;main = do&lt;br /&gt;&amp;nbsp;[k,s@(_:_)] &amp;lt;- getArgs&lt;br /&gt;&amp;nbsp;let out = show . concat . intersperse " "&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;res = chop (read k) s&lt;br /&gt;&amp;nbsp;putStrLn $ "filter(/=' ')" ++ out res&lt;/code&gt;&lt;hr /&gt;&lt;br /&gt;&lt;br /&gt;Typing:&lt;br /&gt;&lt;kbd&gt;./chop.hs 27 http://bkil.blogspot.com/2009/05/chopping-long-string-into-smaller-ones.html&lt;/kbd&gt;&lt;br /&gt;&lt;br /&gt;Gives:&lt;br /&gt;&lt;samp&gt;filter(/=' ')"http://bkil.blogspot.com/20 09/05/chopping-long-string- into-smaller-ones.html"&lt;/samp&gt;&lt;br /&gt;&lt;br /&gt;Or if you prefer, you could alternatively opt for the following BASH routine:&lt;br /&gt;&lt;hr /&gt;&lt;code&gt;main(){&lt;br /&gt;&amp;nbsp;printf 'echo "'&lt;br /&gt;&amp;nbsp;printf "$2"|sed -r "s~.{$1}~&amp; ~g"&lt;br /&gt;&amp;nbsp;echo '"|sed "s~ ~~g"'&lt;br /&gt;}&lt;/code&gt;&lt;hr /&gt;&lt;br /&gt;&lt;br /&gt;This one gives:&lt;br /&gt;&lt;samp&gt;echo "http://bkil.blogspot.com/20 09/05/chopping-long-string- into-smaller-ones.html"|sed "s~ ~~g"&lt;/samp&gt;&lt;br /&gt;&lt;br /&gt;But where's the fun in that?? ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-5707644231045672469?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/5707644231045672469/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=5707644231045672469&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/5707644231045672469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/5707644231045672469'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/05/chopping-long-string-into-smaller-ones.html' title='Chopping a long string into smaller ones toy'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-8797541539433761947</id><published>2009-05-30T00:23:00.001+02:00</published><updated>2009-08-11T16:16:09.957+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='battery'/><category scheme='http://www.blogger.com/atom/ns#' term='fuel'/><category scheme='http://www.blogger.com/atom/ns#' term='electric'/><category scheme='http://www.blogger.com/atom/ns#' term='ecology'/><category scheme='http://www.blogger.com/atom/ns#' term='environment'/><category scheme='http://www.blogger.com/atom/ns#' term='energy crop'/><category scheme='http://www.blogger.com/atom/ns#' term='biomass'/><category scheme='http://www.blogger.com/atom/ns#' term='transportation'/><title type='text'>Substituting power plant fired switchgrass for ethanol</title><content type='html'>&lt;em&gt;Edit: fixed dead link http://money.cnn.com/news/newsfeeds/articles/reuters/MTFH68994_2009-05-07_19-55-00_N07396064.htm&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Just as I've been telling everybody for many years now: the internal combustion engine is unsustainable. Note that a possibly even better alternative would be some strain of algae. Also note that I am nevertheless still advocating commuting to work by electric motorcycle or bicycle for most people!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://uk.reuters.com/article/idUKN0739606420090507?sp=true"&gt;UK (REUTERS): Researchers eye better use for biomass than ethanol&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-8797541539433761947?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/8797541539433761947/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=8797541539433761947&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/8797541539433761947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/8797541539433761947'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/05/substituting-power-plant-fired.html' title='Substituting power plant fired switchgrass for ethanol'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-2498743398614854209</id><published>2009-05-25T17:03:00.002+02:00</published><updated>2009-05-25T18:19:44.238+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lisp'/><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='toy'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='quine'/><title type='text'>Quine in Erlang</title><content type='html'>How could I have forgotten about the friend of mine who's fond of Erlang? :-D&lt;br /&gt;&lt;br /&gt;&lt;code&gt;-module(q).&lt;br /&gt;-export([s/0]).&lt;br /&gt;&lt;br /&gt;s()-&amp;gt;io:format("~s~p.\n",[p(),p()]).&lt;br /&gt;&lt;br /&gt;p()-&amp;gt;"-module(q).\n-export([s/0]).\n\ns()-&gt;io:format(\"~s~p.\\n\",[p(),p()]).\n\np()-&gt;".&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Here's another one for the Eshell REPL:&lt;br /&gt;&lt;code&gt;fun(P)-&amp;gt;io:format("~s\n~p).\n",[P,P])end(&lt;br /&gt;"fun(P)-&amp;gt;io:format(\"~s\\n~p).\\n\",[P,P])end(").&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;And as I know he's also in love with LISP, here's a Haskell variant rewritten in that spirit:&lt;br /&gt;&lt;code&gt;(\ (x)-&gt; ((++) x (show x)))"(\\ (x)-&gt; ((++) x (show x)))"&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-2498743398614854209?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/2498743398614854209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=2498743398614854209&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/2498743398614854209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/2498743398614854209'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/05/quine-in-erlang.html' title='Quine in Erlang'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-4887126475444891777</id><published>2009-05-23T12:35:00.000+02:00</published><updated>2009-05-23T12:36:02.569+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bgcolor'/><category scheme='http://www.blogger.com/atom/ns#' term='default'/><category scheme='http://www.blogger.com/atom/ns#' term='grey'/><category scheme='http://www.blogger.com/atom/ns#' term='color'/><category scheme='http://www.blogger.com/atom/ns#' term='links2'/><category scheme='http://www.blogger.com/atom/ns#' term='background'/><category scheme='http://www.blogger.com/atom/ns#' term='gray'/><title type='text'>Fixing grey background (default bgcolor) in graphic links2</title><content type='html'>#Installing dependencies if you can become root is easy (Debian names shown):&lt;br /&gt;&lt;pre&gt;apt-get install pkg-config libpng12-dev libjpeg62-dev xorg-dev&lt;br /&gt;# libssl-dev libgpm-dev libbz2-dev&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;#Fetch the web browser source:&lt;br /&gt;&lt;pre&gt;mkdir mylinks &amp;amp;&amp;amp;&lt;br /&gt;cd mylinks &amp;amp;&amp;amp;&lt;br /&gt;apt-get source links2&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;#Here's the magic, changing the default graphics mode background color from grey to white:&lt;br /&gt;&lt;pre&gt;patch -p 0 &amp;lt;&amp;lt;END&lt;br /&gt;diff -u links2-2.1pre37.old/default.c links2-2.1pre37/default.c&lt;br /&gt;--- links2-2.1pre37.old/default.c       2008-06-21 18:05:53.000000000 +0200&lt;br /&gt;+++ links2-2.1pre37/default.c   2009-05-09 22:10:48.000000000 +0200&lt;br /&gt;@@ -1453,7 +1453,7 @@&lt;br /&gt; struct rgb default_vlink = { 255, 255, 0, 0 };&lt;br /&gt; &lt;br /&gt; struct rgb default_fg_g = { 0, 0, 0, 0 };&lt;br /&gt;-struct rgb default_bg_g = { 192, 192, 192, 0 };&lt;br /&gt;+struct rgb default_bg_g = { 255, 255, 255, 0 };&lt;br /&gt; struct rgb default_link_g = { 0, 0, 255, 0 };&lt;br /&gt; struct rgb default_vlink_g = { 0, 0, 128, 0 };&lt;br /&gt;END&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;#Now we can compile the software:&lt;br /&gt;&lt;pre&gt;cd links2-* &amp;amp;&amp;amp;&lt;br /&gt;./configure --with-x --enable-graphics &amp;amp;&amp;amp;&lt;br /&gt;make&lt;br /&gt;# --with-ssl&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;#Then you can test it with:&lt;br /&gt;&lt;pre&gt;./links -g -no-connect&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;#Perhaps you could also:&lt;br /&gt;&lt;pre&gt;strip links&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-4887126475444891777?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/4887126475444891777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=4887126475444891777&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/4887126475444891777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/4887126475444891777'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/05/fixing-grey-background-default-bgcolor.html' title='Fixing grey background (default bgcolor) in graphic links2'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-4925828357050555964</id><published>2009-05-21T20:31:00.001+02:00</published><updated>2009-05-21T20:33:59.265+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><category scheme='http://www.blogger.com/atom/ns#' term='toy'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='quine'/><title type='text'>Quine in Haskell</title><content type='html'>I've constructed a neat little &lt;a href="http://en.wikipedia.org/wiki/Quine_(computing)"&gt;quine&lt;/a&gt; in Haskell, the popular research language we all adore. ;-) It's so short, I could have pasted it right into the title! :-D&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;putStr(p++show p)where p="putStr(p++show p)where p="&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;That's what I like about Haskell: the solutions you write in it are usually elegant, conscious and close to the problem space in representation. You read the above source as follows: print out the program accompanied by a quoted (shown) version of the same, where the program is just what I said. Can you put it any simpler than that?!&lt;br /&gt;&lt;br /&gt;I've first started on a traditional route by introducing constants for backslash, quotation mark and all that, until I've realized how foolish I was. As you may have already known, Haskell has a handy function called 'show' that does all quoting for you. I've been using that all over the place if you have read any of my sources, so I'm not sure why it slipped my mind. Sometimes we overlook the most obvious solutions.&lt;br /&gt;&lt;br /&gt;I also made a fancy version, just for kicks:&lt;br /&gt;&lt;pre&gt;#!/usr/bin/runhugs&lt;br /&gt;module Main where&lt;br /&gt;import Data.List&lt;br /&gt;&lt;br /&gt;main = putStrLn(unlines p++"  ["++s p++"]") where&lt;br /&gt; s = concat . intersperse ",\n  " . map show&lt;br /&gt; p =&lt;br /&gt;  ["#!/usr/bin/runhugs",&lt;br /&gt;  "module Main where",&lt;br /&gt;  "import Data.List",&lt;br /&gt;  "",&lt;br /&gt;  "main = putStrLn(unlines p++\"  [\"++s p++\"]\") where",&lt;br /&gt;  " s = concat . intersperse \",\\n  \" . map show",&lt;br /&gt;  " p ="]&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-4925828357050555964?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/4925828357050555964/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=4925828357050555964&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/4925828357050555964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/4925828357050555964'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/05/quine-in-haskell.html' title='Quine in Haskell'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-1507481900847885368</id><published>2009-05-16T19:49:00.000+02:00</published><updated>2009-05-16T19:59:15.838+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='me'/><category scheme='http://www.blogger.com/atom/ns#' term='making'/><category scheme='http://www.blogger.com/atom/ns#' term='psion'/><category scheme='http://www.blogger.com/atom/ns#' term='background'/><title type='text'>A little background information about this blog</title><content type='html'>I write almost all articles and text on my Ericsson MC218 when I'm traveling and have nothing better to do. Note that I can touch type almost as fast on my mini-Dvorak as on my full-sized one, so this is by no means a limitation (&gt;55WPM)! :-)&lt;br /&gt;&lt;br /&gt;When I get home, I upload them to my PC, covert them with a simple script of mine, proof-read them and run a second pass of spell checking. I then put them in a waiting queue based on completion ratio and importance, sometimes doing a bit splitting at the same time. Once in a while, I take one from the top of the stack and publish it.&lt;br /&gt;&lt;br /&gt;Hence for me, there's no such thing as lack of time or inspiration! :-D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-1507481900847885368?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/1507481900847885368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=1507481900847885368&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/1507481900847885368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/1507481900847885368'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/05/little-background-information-about.html' title='A little background information about this blog'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-8675214901659948265</id><published>2009-05-15T23:03:00.000+02:00</published><updated>2009-05-15T23:34:10.917+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='readership'/><category scheme='http://www.blogger.com/atom/ns#' term='poll'/><category scheme='http://www.blogger.com/atom/ns#' term='opinion'/><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='me'/><category scheme='http://www.blogger.com/atom/ns#' term='site'/><category scheme='http://www.blogger.com/atom/ns#' term='vote'/><title type='text'>POLL: How do you use this site; posts you check</title><content type='html'>Note that checking multiple options is allowed in both polls. I forgot to post an entry about it, but one of my most die-hard readers has already noticed! Actually, I think the majority of my readers have already voted... XD&lt;br /&gt;&lt;br /&gt;The low readership is expected because of many issues with the articles, like the abstract, specialized, mostly time-invariant knowledge and language. I believe that to reach as far as possible, especially of such narrow-scope material, you need to write in a suitable language. Toki Pona and Lojban would have been my second choice... ;-D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-8675214901659948265?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/8675214901659948265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=8675214901659948265&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/8675214901659948265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/8675214901659948265'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/05/poll-how-do-you-use-this-site-posts-you.html' title='POLL: How do you use this site; posts you check'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-1597318691639084597</id><published>2009-05-08T11:42:00.003+02:00</published><updated>2009-05-09T13:41:04.322+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='keyboard'/><category scheme='http://www.blogger.com/atom/ns#' term='mouse'/><category scheme='http://www.blogger.com/atom/ns#' term='alternative'/><category scheme='http://www.blogger.com/atom/ns#' term='ergonomics'/><title type='text'>Ergonomics of the computer mouse and keyboard from a hardware perspective</title><content type='html'>It's a pretty interesting fact that we still use the &lt;a href="http://en.wikipedia.org/wiki/Medieval_torture_devices"&gt;not so ergonomic&lt;/a&gt; kludges of many decades ago for our daily work. Let's just skip keyboard layouts altogether, as we all know the truth about them! ;-) You see, for technical reasons, ergonomics wasn't considered for these input devices by the original designers. They simply tried to solve the engineering problems of the day - and they have succeeded!&lt;br /&gt;&lt;br /&gt;They always have two driving forces: one, how similar problems have been solved in the past and two, how to construct a device as simple as possible (i.e., to invent as few things as possible at once). They are initially dominated by the limitations of technology of the day, while later on, they must keep in mind to provide an easy migration path for earlier users of the same or a similar invention (&lt;a href="http://en.wikipedia.org/wiki/Path_dependence"&gt;Wikipedia: Path dependence&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;For example, the typewriter has influenced the computer keyboard in all practically possible ways - i.e., they tried to mimic as closely as possible all quirks of the original, like the well-known planar layout and slanting of the keys. Another example is the computer mouse. The first version was created by literally putting some buttons on a soapbox. Unfortunately, this design dominates to this day, regardless of its lack of ergonomics.&lt;br /&gt;&lt;br /&gt;However, it is not too difficult to derive an ergonomic solution for the said two: you just ensure that the user takes a natural posture while handling. For the hands, this means you hold your arms partially extended, with the palms not too far apart and facing each other. This posture can be visualized as grabbing a glass of water in each hand.&lt;br /&gt;&lt;br /&gt;There are two simple, logical choices of conformations. In the first, the mouse resembles a vertically extending cylinder like a glass of water, or some minor deformation of the said. One button should be placed on the top for the thumb, while the others could reside on the side, preferably arranged in a vertical row, one for each finger. The second conformation enables holding the device like a pen. Note that I do not consider holding of a pen itself for extended periods of time very ergonomic, however it is unmatched in precision of coordination that enables fine drawing to be done electronically.&lt;br /&gt;&lt;br /&gt;Mouse buttons must not require too great force to push, and they should provide little tactile feedback. The fine muscles of the hand were never meant to bang forcefully all day, you know! The buttons could even be relocated to the other hand (perhaps handling two mouse pointers simultaneously?) or on the keyboard, as in my experience, it's a bit easier to precisely and quickly position the pointer for drawing if clicking is done with the other hand. Note that there already exist macro packages for this very purpose.&lt;br /&gt;&lt;br /&gt;As the buttons need to be easily clickable, software must be more forgiving about accidental clicks and key presses. This can be accomplished by requiring confirmation of major actions and providing quick undo for all which are practically possible. Note that this by itself is already a pretty good idea from a user friendliness standpoint.&lt;br /&gt;&lt;br /&gt;Designing a "perfect" keyboard is a much tougher question. Taken the previously said into account, a split layout seems like a good choice. If you use a pointing device that is physically separate from the keyboard and you promote interspersed use of the two, then you need to place them as close as possible to each other to minimize time and effort needed to switch between the two. There are many possible configurations with the former properties, but I would like to list two conceptually different ones.&lt;br /&gt;&lt;br /&gt;The first version resembles a slice from a sphere or a large diameter cylinder. Imagine a sphere that has buttons on one side. The buttons are on the side that is facing away from you. You push the buttons by holding the device in your hands with your palms facing each other.&lt;br /&gt;&lt;br /&gt;The second variation is similar to the previous, but is small and planar, ideal for use in portable devices. It resembles a normal keyboard flipped along one of its sides. Actually, the exact layout looks more like if you've rotated each half (the ones containing each hands' keys) of a normal one 90 degrees inwards (in the keyboard plane). You hold it in your hands like you would hold a gaming system's two-handed controller - with your thumbs up.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Chorded_keyboard#See_also"&gt;Wikipedia: Chorded keyboard&lt;/a&gt; - 'see also' and 'external links' sections&lt;br /&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Keyer#External_links"&gt;Wikipedia: Keyer&lt;/a&gt; - 'external links' section&lt;br /&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Datahand#See_also"&gt;Wikipedia: Datahand&lt;/a&gt; - 'see also' section&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-1597318691639084597?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/1597318691639084597/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=1597318691639084597&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/1597318691639084597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/1597318691639084597'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/05/ergonomy-of-computer-mouse-and-keyboard.html' title='Ergonomics of the computer mouse and keyboard from a hardware perspective'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-3868206002808148453</id><published>2009-04-28T01:24:00.000+02:00</published><updated>2009-04-28T01:25:41.423+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='conservation'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='waste'/><category scheme='http://www.blogger.com/atom/ns#' term='irrigation'/><category scheme='http://www.blogger.com/atom/ns#' term='ecology'/><category scheme='http://www.blogger.com/atom/ns#' term='manufacturing'/><category scheme='http://www.blogger.com/atom/ns#' term='water'/><category scheme='http://www.blogger.com/atom/ns#' term='environment'/><category scheme='http://www.blogger.com/atom/ns#' term='efficiency'/><title type='text'>Embedded water content of goods</title><content type='html'>Have you been living a water-conserving life up until now? Think twice before you answer:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://news.bbc.co.uk/2/hi/americas/8011497.stm"&gt;BBC News: World's major rivers 'drying up'&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://news.bbc.co.uk/2/hi/business/7785479.stm"&gt;BBC News: The ripple effect of cutting water&lt;/a&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-3868206002808148453?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/3868206002808148453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=3868206002808148453&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/3868206002808148453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/3868206002808148453'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/04/embedded-water-content-of-goods.html' title='Embedded water content of goods'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-7549750284147188639</id><published>2009-04-20T00:32:00.002+02:00</published><updated>2009-05-09T12:37:05.205+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mouse'/><category scheme='http://www.blogger.com/atom/ns#' term='double click'/><category scheme='http://www.blogger.com/atom/ns#' term='ergonomics'/><title type='text'>Double clicking is evil</title><content type='html'>To both a novice and an advanced user, there is no conceptual difference between pressing another button on the mouse and double clicking. Well, actually there is one: you can proceed with superior comfort and greater speed after a bit practicing of the former, while the latter will remain awkward forever. Therefore, it could greatly improve usability if the pointing device had additional buttons to replace this vulgar action. Chording (simultaneously pressing multiple buttons) is also an option. See &lt;a href="http://en.wikipedia.org/wiki/Chorded_keyboard"&gt;Wikipedia: Chorded keyboard&lt;/a&gt; for more information.&lt;br /&gt;&lt;br /&gt;As you probably already know, I'm all against any form of double, triple or even quadruple pushing the same button on either the keyboard or the mouse. As a historical note, I'm positive that no human with expert knowledge in the field - or even having any trace of commonsense - would recommend such crippling of ergonomics and usability as banging the same button in succession.&lt;br /&gt;&lt;br /&gt;I think they have implemented this because the interface they have copied used only a single mouse button (Apple), whose designers have taken some dirty shortcuts to get their job done with little effort. Note that having a user interface that uses a single button mouse can be a neat idea and very novice-friendly if done right, but the same can't be told about one requiring double clicking.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-7549750284147188639?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/7549750284147188639/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=7549750284147188639&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/7549750284147188639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/7549750284147188639'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/04/double-clicking-is-evil.html' title='Double clicking is evil'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-3060827797404662629</id><published>2009-03-31T22:31:00.001+02:00</published><updated>2009-04-21T14:43:22.346+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lenny'/><category scheme='http://www.blogger.com/atom/ns#' term='ggitick'/><category scheme='http://www.blogger.com/atom/ns#' term='problems'/><category scheme='http://www.blogger.com/atom/ns#' term='fluxbox'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='solution'/><category scheme='http://www.blogger.com/atom/ns#' term='xv'/><category scheme='http://www.blogger.com/atom/ns#' term='sysrq'/><category scheme='http://www.blogger.com/atom/ns#' term='alltray'/><title type='text'>A few things solved from the list about Lenny</title><content type='html'>These things have been working for weeks now, it's just that I've been too lazy up till now to write it all down! :-D&lt;br /&gt;&lt;br /&gt;I have found a new workaround for the notorious Xv flickering bug in my mature S3 Trio3D video card. I have tested it in fullscreen before but it invariably makes it worse: it only displays (the upper) half of the canvas (while the other half is blue). However, I seem to have forgotten to experiment more on this issue, as resizing the window seems to alter the bug. It's plainly correlated to the window size: shrinking it makes it worse, while enlarging it makes it somewhat better. This is so pronounced, that enlarging it to full-window (not fullscreen) fixes it entirely! :-D&lt;br /&gt;&lt;br /&gt;In the same session a few hours back in time, the weird focus loss bug has happened to me yet again! I have been running Epiphany with the proprietary flash plugin, a flash video has just loaded in the very instant that the (unstable) MPlayer from debian-multimedia has brought up a window playing an .FLV while throwing out it's usual insane amount of frame dropping debug warnings (to it's standard output - what a quirk!). I'm not sure if any other action was in queue, perhaps I was also triggering some window manager action. And this has done it. Everything went on smooth except that I couldn't interact with the system anymore! :) The last action I wanted to commit was stopping the second video (why watch two at the same time?!). The mouse pointer's motion was flawless, but no button nor key was effective. Not even ALT-CTRL-Fx! :-S&lt;br /&gt;&lt;br /&gt;I was more patient than last time: I went for dinner instead of grouching. However, by the time I came back, the computer was playing it's 49th flash video from its playlist, and similar progress has been made by MPlayer! :-) I have unplugged the ethernet cable in the hope that lowering processor usage would make a difference. The videos have eventually stopped, leaving the machine idle, but still in this zombie state. I felt uncomfortable with rebooting or trying ALT-CTRL-Backspace (not that it would have worked), so I kept on pondering.&lt;br /&gt;&lt;br /&gt;In a few moments, the BUSIER sequence popped in to my mind. I had bad experience with the former, as I have once accidentally switched off my computer with it! (It's in the native kernel layout and not dvorak, so 'R' translates to 'O', which is short for 'off'! :-D) To my delightment, pressing ALT-CTRL-SysRq+R (or P for dvorak) enabled me to switch to a character console, from which it was easy to continue. I logged in, restarted the window manager with 'killall -sighup fluxbox' and I was back in business in notime! :-D All applications were preserved as expected, except for the minor bug I mention below. As a side note, maybe restarting Fluxbox would not have been necessary after all...&lt;br /&gt;&lt;br /&gt;However, I have isolated a new issue while I was at it. The tiny application 'alltray' does not re-iconify its windows after restarting the window manager (tested under Fluxbox).&lt;br /&gt;&lt;br /&gt;I also had many instances of 'ggitick' hogging my CPU by doing absolutely nothing after having tested all of these, because I'd been messing with MPlayer's unstable version and its various video output choices and that one always bought the farm at exit. :-S&lt;br /&gt;&lt;br /&gt;And a last issue with Fluxbox: closing the last window of a tab group (after having merged many windows by dragging their title bar on each other with the middle button) does not obey the small 'X' in the corner, and you have to call in the context-sensitive menu from the titlebar for example and choose 'close' manually from there.&lt;br /&gt;&lt;br /&gt;Next time, I will write about how you should absolutely _not_ format your system drive accidentally.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-3060827797404662629?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/3060827797404662629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=3060827797404662629&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/3060827797404662629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/3060827797404662629'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/03/few-things-solved-from-list-about-lenny.html' title='A few things solved from the list about Lenny'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-7337992148573245740</id><published>2009-03-19T23:43:00.003+01:00</published><updated>2009-06-18T22:27:40.871+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='speed'/><category scheme='http://www.blogger.com/atom/ns#' term='partition'/><category scheme='http://www.blogger.com/atom/ns#' term='fragmentation'/><category scheme='http://www.blogger.com/atom/ns#' term='seek'/><category scheme='http://www.blogger.com/atom/ns#' term='operating system'/><category scheme='http://www.blogger.com/atom/ns#' term='optimize'/><category scheme='http://www.blogger.com/atom/ns#' term='hdd'/><title type='text'>Partition to enhance the performance of your hard drive</title><content type='html'>Most users up until now had only a single partition on their single rotating media disk in their personal computers. Common operating systems did not (and some still not) encourage their end users to organize their data into partitions in a different way. Naturally, this would be both an overkill and a mental overload for most users. However, an advanced user should not turn away from the possible benefits of restricted fragmentation and lowered seek times. Also consider the ease of backing up only the partitions that contain truly precious data.&lt;br /&gt;&lt;br /&gt;A few words about fragmentation. Most random access file systems today use block-sizes of discreet steps (sometimes only a single block size). External fragmentation is the physical discontinuity of logically continuous stored entities (files). Internal fragmentation is the overhead of this block scheme.  Naturally if a file is composed of many identically sized, relatively large buckets, then most files will have some buckets that are not completely filled with meaningful data. There exist file systems that collect these 'scraps' in a clever way, but that's beside the point.&lt;br /&gt;&lt;br /&gt;What I propose is a scheme (there exist many) that tries to reduce external fragmentation for common use cases, and ought to work with almost all operating systems.&lt;br /&gt;&lt;br /&gt;Here's my common wisdom about partitioning rotating media listed in ascending partition order.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Start with the boot partition if you would like to enjoy fast boot times. I wouldn't be surprised if a smart guy (or gal) organized their kernel accompanied by some binaries and their required libraries that are needed at bootup here. Note that this isn't strictly necessary as booting a machine is a rare use case.&lt;br /&gt;&lt;li&gt;Next comes a small partition for the system that still ought to have enough space for future updates, system configuration and any core installer that must absolutely write to your system drive.&lt;br /&gt;&lt;li&gt;Create your swap partition - if you can have more of these then put a smaller one here - right after the system's drive.&lt;br /&gt;&lt;li&gt;A smaller partition for your most frequently used, but not too large applications that you would like to install.&lt;br /&gt;&lt;li&gt;You can put another swap partition here if your system can handle this.&lt;br /&gt;&lt;li&gt;A small temporary partition that you can set up for the system temp and download directory.&lt;br /&gt;&lt;li&gt;A larger partition for all other installed stuff.&lt;br /&gt;&lt;li&gt;A larger one for your own temporary stuff.&lt;br /&gt;&lt;li&gt;A beefy one that you can keep your more permanent stuff on. This isn't strictly necessary.&lt;br /&gt;&lt;li&gt;A really beefy one that you can archive on.&lt;br /&gt;&lt;li&gt;Any number of further archiving partitions that suits your taste. It may help in backing up and to minimize possible damage in case of file system corruption (be it hardware or software), but some view it as being unjustified.&lt;br /&gt;&lt;li&gt;And last, but not least, leave a small one for your really important stuff that you must absolutely keep safe. You may soft-mirror this on the same drive to some other location, as that may protect you from certain hard drive failures (creeping bad sectors). Though, a catastrophic failure is much more common, some protection is better than no protection!&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;The last one may need some explanation. If you are 'hoarding' data like many people I know (like collecting a gallery of operating systems that they will never boot), then writing down exactly how you have obtained the data that you keep in your archive (like URLs, make switches, etc.) is a good idea. If you always take note in-situ then it doesn't take much effort. And on the plus side, you can share your work on the methods easily, because it's only a matter of kilobytes. If you are of the creative kind, for example a programmer, then you should trivially store your work's sources, or at least in a compacted form if you are on the high side on data lust. Another great idea is to assemble a installer script here that can restore your system by giving detailed instructions on what exactly needs to get installed and when, and what configuration steps need to be commenced.&lt;br /&gt;&lt;br /&gt;You ought to back this up daily to some removable storage, because it's small and worth it. The other partitions could wait until you have time on your hands, like weekly or monthly. Some say they won't even bother to back up any other data on their computer, because they say it isn't worth it, and they don't use those files much anyway.&lt;br /&gt;&lt;br /&gt;Furthermore, it's also a good idea to increase the file system block size on huge partitions that usually hold spacious files.&lt;br /&gt;&lt;br /&gt;If you have any comments on this scheme, please don't hesitate to drop me a few lines!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-7337992148573245740?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/7337992148573245740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=7337992148573245740&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/7337992148573245740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/7337992148573245740'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/03/partition-to-enhance-performance-of.html' title='Partition to enhance the performance of your hard drive'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-813316858840403560</id><published>2009-03-13T21:01:00.000+01:00</published><updated>2009-03-13T21:02:50.083+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cpu'/><category scheme='http://www.blogger.com/atom/ns#' term='mpd'/><category scheme='http://www.blogger.com/atom/ns#' term='mpdconf'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='optimize'/><title type='text'>Improving the CPU usage of MPD (Music Player Daemon)</title><content type='html'>I have added &lt;em&gt;format "48000:16:2"&lt;/em&gt; to the &lt;em&gt;audio_output&lt;/em&gt; section and &lt;em&gt;samplerate_converter 4&lt;/em&gt; to the main body of &lt;em&gt;~/.mpdconf&lt;/em&gt;. This has reduced mpd's CPU usage from 30-40% to less than 5%! I should have done this before. I found out about this issue by doing web searches, but I have later encountered the neatly written summary linked below. In short: good quality (double?) software scaling is not very economical.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://mpd.wikia.com/wiki/Tuning"&gt;http://mpd.wikia.com/wiki/Tuning&lt;/a&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-813316858840403560?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/813316858840403560/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=813316858840403560&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/813316858840403560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/813316858840403560'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/03/improving-cpu-usage-of-mpd-music-player.html' title='Improving the CPU usage of MPD (Music Player Daemon)'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-5639277915550958372</id><published>2009-03-09T23:50:00.000+01:00</published><updated>2009-03-09T23:51:02.835+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='grass'/><category scheme='http://www.blogger.com/atom/ns#' term='canola'/><category scheme='http://www.blogger.com/atom/ns#' term='fuel'/><category scheme='http://www.blogger.com/atom/ns#' term='ecology'/><category scheme='http://www.blogger.com/atom/ns#' term='environment'/><category scheme='http://www.blogger.com/atom/ns#' term='energy crop'/><title type='text'>Miscanthus grass - an energy crop much more efficient than canola</title><content type='html'>The following article is from 2005, but I think it's still relevant. Please correct me if I'm in error.&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.whatsnextnetwork.com/technology/index.php/2005/09/28/p696"&gt;What's Next In Science &amp; Technology: Hybrid grass may prove to be valuable fuel source&lt;/a&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-5639277915550958372?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/5639277915550958372/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=5639277915550958372&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/5639277915550958372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/5639277915550958372'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/03/miscanthus-grass-energy-crop-much-more.html' title='Miscanthus grass - an energy crop much more efficient than canola'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-2891890108504211461</id><published>2009-03-06T21:32:00.001+01:00</published><updated>2009-03-06T22:01:23.241+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='greater-than'/><category scheme='http://www.blogger.com/atom/ns#' term='escape'/><category scheme='http://www.blogger.com/atom/ns#' term='ampersand'/><category scheme='http://www.blogger.com/atom/ns#' term='pre'/><category scheme='http://www.blogger.com/atom/ns#' term='less-than'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><category scheme='http://www.blogger.com/atom/ns#' term='preformatted'/><title type='text'>When will people learn to properly escape preformatted blocks?</title><content type='html'>I've noticed this when I first posted source code in Haskell to this blog few months ago. I think I have encountered this problem before (maybe even multiple times!), but it was so long ago that it slipped my mind. So it happened that &lt;em&gt;I have posted unescaped code between &amp;lt;pre&amp;gt; and &amp;lt;/pre&amp;gt; tags&lt;/em&gt;. This is trivially a silly act (imagine if your source code had &amp;lt;/pre&amp;gt;...) and the standards are also clear on this issue: &lt;a href="http://www.w3.org/TR/html401/charset.html#h-5.3.2"&gt;HTML 4.01 Specification: Character entity references&lt;/a&gt; [w3.org], &lt;a href="http://www.w3.org/International/questions/qa-escapes#use"&gt;Using character entities and NCRs: When to use escapes&lt;/a&gt; [w3.org]. Always remember to escape at least &lt;em&gt;&amp;amp;lt;, &amp;amp;gt; and &amp;amp;amp;&lt;/em&gt;!&lt;br /&gt;&lt;br /&gt;You may be wondering how I noticed that in the first place while most web browsers today are so forgiving. Some years ago when I first committed this error (perhaps with comparison operators), I have fixed it myself because on second thought it was trivially ill formed (and I have also looked it up in the standard later). But this time, it was by accident! :) I have mentioned this before, but I repeat that I'm regularly monitoring my web creations using many different browsers. They give different results because some have very strong standard adherence, while others simply have differing error correction heuristics.&lt;br /&gt;&lt;br /&gt;In short: links2 eats the remaining line following a monadic left pointing binding arrow! :-D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-2891890108504211461?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/2891890108504211461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=2891890108504211461&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/2891890108504211461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/2891890108504211461'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/03/when-will-people-learn-to-properly.html' title='When will people learn to properly escape preformatted blocks?'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-5728190420177925238</id><published>2009-03-02T22:50:00.001+01:00</published><updated>2009-03-02T23:35:57.429+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iq'/><category scheme='http://www.blogger.com/atom/ns#' term='society'/><title type='text'>Equality is only a dream</title><content type='html'>Such a touching story:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.eugenics.net/papers/murray.html"&gt;IQ Will Put You In Your Place - By Charles Murray&lt;/a&gt; (From the Sunday Times)&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.lrainc.com/swtaboo/taboos/tbc01.html"&gt;Breaking the Last Taboo&lt;/a&gt; [related]&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-5728190420177925238?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/5728190420177925238/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=5728190420177925238&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/5728190420177925238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/5728190420177925238'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/03/equality-is-only-dream.html' title='Equality is only a dream'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-3342669283990112754</id><published>2009-02-27T12:46:00.002+01:00</published><updated>2009-02-27T12:52:02.830+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='ecology'/><category scheme='http://www.blogger.com/atom/ns#' term='tire'/><category scheme='http://www.blogger.com/atom/ns#' term='water'/><category scheme='http://www.blogger.com/atom/ns#' term='landfill'/><title type='text'>Shredded tires to cover landfills (link)</title><content type='html'>I like simple, cheap (=energy efficient), realistically implementable (feasible) and proven eco-friendly methods such as the following:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.whatsnextnetwork.com/technology/index.php/2005/09/30/p699"&gt;What's Next In Science &amp; Technology: Shredded tires a cheap, environmentally friendly way to cover landfills&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-3342669283990112754?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/3342669283990112754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=3342669283990112754&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/3342669283990112754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/3342669283990112754'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/02/shredded-tires-to-cover-landfills-link.html' title='Shredded tires to cover landfills (link)'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-5630237679407420033</id><published>2009-02-24T13:41:00.003+01:00</published><updated>2009-02-24T13:51:52.707+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='functional programming'/><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='toy'/><title type='text'>Binary numbers toy in Erlang GS graphics</title><content type='html'>Because of popular demand, I have ported the previous example to Erlang using it's built-in GS package. Enjoy! :-D&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;All code and text in this post is Copyright (c) bkil.hu [also known as bkil], 2009; and is licensed under the GNU GPL v2. Refer to the standard license texts from June 1991 for exact conditions. Here is an example link: &lt;a href="http://www.gnu.org/licenses/gpl-2.0.html"&gt;http://www.gnu.org/licenses/gpl-2.0.html&lt;/a&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;Here's the core (simbins.erl):&lt;br /&gt;&lt;pre&gt;-module(simbins).&lt;br /&gt;-export([radix/3, binaries/2, simbins/1]).&lt;br /&gt;&lt;br /&gt;%% Radix conversion with LSB output.&lt;br /&gt;radix(_,0,_) -&amp;gt; [];&lt;br /&gt;radix(R,W,N) -&amp;gt; [N rem R | radix(R, (W-1), (N div R))].&lt;br /&gt;&lt;br /&gt;%% A full-matrix transpose stub.&lt;br /&gt;transpose([H|T]) when is_list(H) -&amp;gt;&lt;br /&gt;    Append  = fun(V, M) -&amp;gt; lists:zipwith(fun(E,L) -&amp;gt; [E|L] end, V, M) end,&lt;br /&gt;    Vector  = fun(L) -&amp;gt; lists:map(fun(E) -&amp;gt; [E] end, L) end,&lt;br /&gt;    [RH|RT] = lists:reverse([H|T]),&lt;br /&gt;    lists:foldl(Append, Vector(RH), RT).&lt;br /&gt;&lt;br /&gt;%% 'binaries' is a solution to Paul R. Potts's idea.&lt;br /&gt;%% Prepend `lists:reverse( ` to get MSB.&lt;br /&gt;binaries(W,L) -&amp;gt; transpose( lists:map( fun(N)-&amp;gt;radix(2,W,N) end, L ) ).&lt;br /&gt;&lt;br /&gt;%% A lame math power function, but at least it's short.&lt;br /&gt;pow(_,0)          -&amp;gt; 1;&lt;br /&gt;pow(R,N) when N&amp;gt;0 -&amp;gt; R * pow(R,N-1).&lt;br /&gt;&lt;br /&gt;simbins(W) -&amp;gt;&lt;br /&gt;    Cols = binaries(W, lists:seq(0, pow(2,W)-1) ),&lt;br /&gt;    Dbl  = lists:map(fun(S) -&amp;gt; S ++ lists:reverse(S) end, Cols),&lt;br /&gt;    lists:reverse(Dbl) ++ Dbl.&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;Standard output text interface (textbin.erl):&lt;br /&gt;&lt;pre&gt;-module(textbin).&lt;br /&gt;-export([start/0]).&lt;br /&gt;-import(simbins).&lt;br /&gt;&lt;br /&gt;unlines(L) -&amp;gt;&lt;br /&gt;    Strings = lists:map(fun(S)-&amp;gt; S ++ "\n" end, L),&lt;br /&gt;    lists:append( Strings ).&lt;br /&gt;&lt;br /&gt;toChar(0) -&amp;gt; $ ;&lt;br /&gt;toChar(_) -&amp;gt; $@.&lt;br /&gt;&lt;br /&gt;toChars(S) -&amp;gt; lists:map(fun toChar/1, S).&lt;br /&gt;&lt;br /&gt;textOut(L) -&amp;gt;&lt;br /&gt;    Strings = lists:map(fun toChars/1, L),&lt;br /&gt;    io:format( unlines( Strings ) ).&lt;br /&gt;&lt;br /&gt;start() -&amp;gt; textOut( simbins:simbins(5) ).&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;Graphics interface (graphbin.erl):&lt;br /&gt;&lt;pre&gt;-module(graphbin).&lt;br /&gt;-export([start/0]).&lt;br /&gt;-import(simbins).&lt;br /&gt;&lt;br /&gt;catMaybes([H|T]) when is_list(H) -&amp;gt; lists:append([H|T]).&lt;br /&gt;&lt;br /&gt;put(Canvas, W, H) -&amp;gt;&lt;br /&gt;    fun({X,Y}) -&amp;gt;&lt;br /&gt;        X0 = W*X,  X1 = W*(X+1),&lt;br /&gt;        Y0 = H*Y,  Y1 = H*(Y+1),&lt;br /&gt;        gs:rectangle( Canvas, [ {bw,0}, {fill, white},&lt;br /&gt;                      {coords, [{X0,Y0}, {X1,Y1}]} ]) end.&lt;br /&gt;&lt;br /&gt;visDots([H|T]) -&amp;gt;&lt;br /&gt;    LH = lists:seq(0,length(H)-1),&lt;br /&gt;    LT = lists:seq(0,length(T)),&lt;br /&gt;    Elem = fun(Y) -&amp;gt; fun(_,0) -&amp;gt; [];&lt;br /&gt;                        (X,_) -&amp;gt; [{X,Y}] end end,&lt;br /&gt;    Rows = fun(Y,Col) -&amp;gt; lists:zipwith(Elem(Y), LH, Col) end,&lt;br /&gt;    Dots = lists:zipwith(Rows, LT, [H|T]),&lt;br /&gt;    catMaybes( lists:append(Dots) ).&lt;br /&gt;&lt;br /&gt;graphOut(DW, DH, [H|T]) -&amp;gt;&lt;br /&gt;    WinSize = [{width,DW*length(H)}, {height,DH*length([H|T])}],&lt;br /&gt;    Win     = gs:window(gs:start(), WinSize ++&lt;br /&gt;                  [ {title,"Simbins"}, {keypress,true} ]),&lt;br /&gt;    Canvas  = gs:canvas( Win, WinSize ++ [{bg, black}] ),&lt;br /&gt;    lists:foreach( put(Canvas, DW, DH), visDots([H|T]) ),&lt;br /&gt;    gs:config(Win, {map,true}),&lt;br /&gt;    case getKey() of&lt;br /&gt;        cancel -&amp;gt; cancel;&lt;br /&gt;        _      -&amp;gt; gs:destroy(Win)&lt;br /&gt;    end.&lt;br /&gt;&lt;br /&gt;getKey() -&amp;gt;&lt;br /&gt;    receive&lt;br /&gt;        {gs, _, destroy,  _, _   } -&amp;gt; cancel;&lt;br /&gt;        {gs, _, keypress, _, Args} -&amp;gt; Args&lt;br /&gt;    end.&lt;br /&gt;&lt;br /&gt;start() -&amp;gt; graphOut( 2, 4, simbins:simbins(6) ).&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-5630237679407420033?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/5630237679407420033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=5630237679407420033&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/5630237679407420033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/5630237679407420033'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/02/binary-numbers-in-erlang-gs-graphics.html' title='Binary numbers toy in Erlang GS graphics'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2326610515171456192.post-7813125118397856560</id><published>2009-02-23T22:25:00.005+01:00</published><updated>2009-02-26T21:06:46.382+01:00</updated><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='graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='toy'/><title type='text'>Binary numbers toy in Haskell SOE graphics</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_5kXAMG4D4bU/SaMQUpGzoCI/AAAAAAAAAA8/qcGKnhL8054/s1600-h/5.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 256px; height: 48px;" src="http://3.bp.blogspot.com/_5kXAMG4D4bU/SaMQUpGzoCI/AAAAAAAAAA8/qcGKnhL8054/s320/5.png" alt="" id="BLOGGER_PHOTO_ID_5306102732790407202" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_5kXAMG4D4bU/SaMQUsl-laI/AAAAAAAAAA0/UETcLtzFaU0/s1600-h/4.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 256px; height: 56px;" src="http://2.bp.blogspot.com/_5kXAMG4D4bU/SaMQUsl-laI/AAAAAAAAAA0/UETcLtzFaU0/s320/4.png" alt="" id="BLOGGER_PHOTO_ID_5306102733726455202" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_5kXAMG4D4bU/SaMQUQ0m_gI/AAAAAAAAAAs/4c0PtuQiwR4/s1600-h/3.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 60px;" src="http://1.bp.blogspot.com/_5kXAMG4D4bU/SaMQUQ0m_gI/AAAAAAAAAAs/4c0PtuQiwR4/s320/3.png" alt="" id="BLOGGER_PHOTO_ID_5306102726271630850" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_5kXAMG4D4bU/SaMQULEYoUI/AAAAAAAAAAk/h3OrptN0qOQ/s1600-h/2.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 40px;" src="http://2.bp.blogspot.com/_5kXAMG4D4bU/SaMQULEYoUI/AAAAAAAAAAk/h3OrptN0qOQ/s320/2.png" alt="" id="BLOGGER_PHOTO_ID_5306102724727185730" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_5kXAMG4D4bU/SaMP-Dsq5GI/AAAAAAAAAAc/8-xXTR_HULs/s1600-h/1.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 35px;" src="http://4.bp.blogspot.com/_5kXAMG4D4bU/SaMP-Dsq5GI/AAAAAAAAAAc/8-xXTR_HULs/s320/1.png" alt="" id="BLOGGER_PHOTO_ID_5306102344791549026" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I've been browsing &lt;a href="http://praisecurseandrecurse.blogspot.com/"&gt;Mr. Paul R. Potts's blog&lt;/a&gt; when I stumbled across a simple, yet neat idea. I was not quite satisfied with the lengthy solution given, so I decided to construct something similar looking from scratch. I'm using the Hugs and GHC built-in HGL/Graphics.SOE package. See the result below. Expect to see more later.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;All code, text and the 5 images in this post are Copyright (c) bkil.hu [also known as bkil], 2009. I place the images in the public domain. The code and text are licensed under the GNU GPL v2. Refer to the standard license texts from June 1991 for exact conditions. Here is an example link: &lt;a href="http://www.gnu.org/licenses/gpl-2.0.html"&gt;http://www.gnu.org/licenses/gpl-2.0.html&lt;/a&gt;&lt;br&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;Here's the core (Simbins.hs):&lt;br /&gt;&lt;pre&gt;module Simbins where&lt;br /&gt;import Data.List(transpose)&lt;br /&gt;&lt;br /&gt;-- Radix conversion with LSB output.&lt;br /&gt;radix _ 0 _ = []&lt;br /&gt;radix r w n = (n `mod` r : radix r (w-1) (n `div` r))&lt;br /&gt;&lt;br /&gt;-- 'binaries' is a solution to Paul R. Potts's idea.&lt;br /&gt;-- Prepend `reverse . ` to get MSB.&lt;br /&gt;binaries w = transpose . map (radix 2 w)&lt;br /&gt;&lt;br /&gt;simbins w = reverse dbl ++ dbl where&lt;br /&gt;    dbl   = map (\s -&amp;gt; s ++ reverse s) cols&lt;br /&gt;    cols  = binaries w [0..2^w - 1]&lt;/pre&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;Standard output text interface (textbin.hs):&lt;br /&gt;&lt;pre&gt;import Simbins&lt;br /&gt;&lt;br /&gt;toChar 0 = ' '&lt;br /&gt;toChar _ = '@'&lt;br /&gt;&lt;br /&gt;textOut = putStr . unlines . map (map toChar)&lt;br /&gt;&lt;br /&gt;main = textOut $ simbins 5&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;Graphics interface (graphbin.hs):&lt;br /&gt;&lt;pre&gt;import Maybe&lt;br /&gt;import Graphics.SOE&lt;br /&gt;import Simbins&lt;br /&gt;&lt;br /&gt;put w h (x,y) = polygon p where&lt;br /&gt;    p  = [ (x0,y0), (x1,y0), (x1,y1), (x0,y1) ]&lt;br /&gt;    x0 = w*x;  x1 = w*(x+1)&lt;br /&gt;    y0 = h*y;  y1 = h*(y+1)&lt;br /&gt;&lt;br /&gt;visDots table  = catMaybes . concat $ dots where&lt;br /&gt;    dots       = zipWith (rows)   [0..] table&lt;br /&gt;    rows y col = zipWith (elem y) [0..] col&lt;br /&gt;    elem y x 0 = Nothing&lt;br /&gt;    elem y x _ = Just (x,y)&lt;br /&gt;&lt;br /&gt;graphOut dw dh table@(h:t) =&lt;br /&gt;  let&lt;br /&gt;    winSize   = (dw*length h, dh*length table)&lt;br /&gt;    visShapes = map (put dw dh) $ visDots table in&lt;br /&gt;  runGraphics $&lt;br /&gt;    do win &amp;lt;- openWindow "Simbins" winSize&lt;br /&gt;       mapM (drawInWindow win) visShapes&lt;br /&gt;       getKey win&lt;br /&gt;       closeWindow win&lt;br /&gt;&lt;br /&gt;main = graphOut 2 4 $ simbins 6&lt;/pre&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;Sample output:&lt;pre&gt;                @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&lt;br /&gt;        @@@@@@@@        @@@@@@@@@@@@@@@@        @@@@@@@@&lt;br /&gt;    @@@@    @@@@    @@@@    @@@@@@@@    @@@@    @@@@    @@@@&lt;br /&gt;  @@  @@  @@  @@  @@  @@  @@  @@@@  @@  @@  @@  @@  @@  @@  @@&lt;br /&gt; @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @&lt;br /&gt; @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @&lt;br /&gt;  @@  @@  @@  @@  @@  @@  @@  @@@@  @@  @@  @@  @@  @@  @@  @@&lt;br /&gt;    @@@@    @@@@    @@@@    @@@@@@@@    @@@@    @@@@    @@@@&lt;br /&gt;        @@@@@@@@        @@@@@@@@@@@@@@@@        @@@@@@@@&lt;br /&gt;                @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2326610515171456192-7813125118397856560?l=bkil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bkil.blogspot.com/feeds/7813125118397856560/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2326610515171456192&amp;postID=7813125118397856560&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/7813125118397856560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2326610515171456192/posts/default/7813125118397856560'/><link rel='alternate' type='text/html' href='http://bkil.blogspot.com/2009/02/binary-numbers-in-haskell-graphics.html' title='Binary numbers toy in Haskell SOE graphics'/><author><name>bkil</name><uri>http://www.blogger.com/profile/16054758564110284323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_5kXAMG4D4bU/SaMQUpGzoCI/AAAAAAAAAA8/qcGKnhL8054/s72-c/5.png' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
