<?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:blogger='http://schemas.google.com/blogger/2008' 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-6034301148006073779</id><updated>2024-02-06T20:17:29.536-08:00</updated><category term="code"/><category term="erlang"/><category term="distributed"/><category term="RIM"/><category term="database"/><category term="ereader"/><category term="error"/><category term="free"/><category term="in-memory"/><category term="tdd"/><category term="america"/><category term="appengine"/><category term="canada"/><category term="comic"/><category term="coverage"/><category term="cuda"/><category term="ebook"/><category term="ec2"/><category term="esignature"/><category term="gwt"/><category term="ikea"/><category term="java"/><category term="kindle"/><category term="kobo"/><category term="linux"/><category term="memcached"/><category term="salary"/><category term="security"/><category term="warning"/><category term="windows"/><category term="wtf"/><title type='text'>usability nightmares and more</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://usability-nightmare.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://usability-nightmare.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/11325499601581369583</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>16</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6034301148006073779.post-3749510859672866815</id><published>2012-02-23T15:58:00.000-08:00</published><updated>2012-02-23T16:03:20.880-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="appengine"/><category scheme="http://www.blogger.com/atom/ns#" term="code"/><category scheme="http://www.blogger.com/atom/ns#" term="database"/><category scheme="http://www.blogger.com/atom/ns#" term="distributed"/><category scheme="http://www.blogger.com/atom/ns#" term="gwt"/><category scheme="http://www.blogger.com/atom/ns#" term="in-memory"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="memcached"/><category scheme="http://www.blogger.com/atom/ns#" term="tdd"/><title type='text'>Distributed Online Role Playing with Google Web Toolkit and App Engine</title><content type='html'>Did you love to play role playing games with your friends but you just went abroad so you cannot meet with them to play anymore? Worry no more because you can go on playing with a little help from&amp;nbsp;&lt;b&gt;dorp&lt;/b&gt;: distributed online role playing.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;img border=&quot;0&quot; height=&quot;441&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRbJH7USXNnoM7_SAcwuP_MavcI-x8MvCxDEW6H9NIZxc99oBePhh8RiB8EUvhjaXeb00dxgdpbHATgHLgk4dk1mojnexKu0xPMq9bdWvfyoseA1DRjZGDcRIqmJ_2icqjPYHRd3cIcByy/s640/dorp.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot; width=&quot;640&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;font-size: 13px;&quot;&gt;Dorp in Action with three active players and a map loaded&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;
&lt;b&gt;dorp&lt;/b&gt;&amp;nbsp;is a Google Web Toolkit application running on Google App Engine. &amp;nbsp;Together with a couple of friends I created dorp just for fun and put it online at&amp;nbsp;&lt;a href=&quot;http://distributedroleplaying.appspot.com/&quot;&gt;http://distributedroleplaying.appspot.com/&lt;/a&gt;.&amp;nbsp;We typically use Skype for talking and dorp for sharing information about our characters as well as images, e.g. maps, magical items, drawings.&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The workflow is pretty straightforward. The game master would create a new game on&amp;nbsp;&lt;a href=&quot;http://distributedroleplaying.appspot.com/&quot;&gt;http://distributedroleplaying.appspot.com/&lt;/a&gt;. This creates a URL which he/she distributes to his mates. The URL allows them to select a character image and name and join the game. All game state-related events, e.g. player attribute changes, are automatically propagated to all other players via GWT/AppEngine&amp;nbsp;&lt;a href=&quot;http://code.google.com/appengine/docs/java/channel/overview.html&quot;&gt;channels&lt;/a&gt;&amp;nbsp;(server side push). Thus, there is no (explicit) polling involved in the dorp Java code. The state of each game is stored in-memory using&amp;nbsp;&lt;a href=&quot;http://code.google.com/appengine/docs/java/memcache/&quot;&gt;memcached&lt;/a&gt;. Uploaded images are stored in Google&#39;s&amp;nbsp;&lt;a href=&quot;http://code.google.com/appengine/docs/java/blobstore/&quot;&gt;BlobStore&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The only drawback is that dorp is currently only available in German language. Feel free to contact me if you are interested in a translated version of the game.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Happy (DO-)RP-ing!&lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usability-nightmare.blogspot.com/feeds/3749510859672866815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://usability-nightmare.blogspot.com/2012/02/distributed-online-role-playing-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default/3749510859672866815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default/3749510859672866815'/><link rel='alternate' type='text/html' href='http://usability-nightmare.blogspot.com/2012/02/distributed-online-role-playing-with.html' title='Distributed Online Role Playing with Google Web Toolkit and App Engine'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/11325499601581369583</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRbJH7USXNnoM7_SAcwuP_MavcI-x8MvCxDEW6H9NIZxc99oBePhh8RiB8EUvhjaXeb00dxgdpbHATgHLgk4dk1mojnexKu0xPMq9bdWvfyoseA1DRjZGDcRIqmJ_2icqjPYHRd3cIcByy/s72-c/dorp.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6034301148006073779.post-2591589319667182075</id><published>2012-02-14T09:31:00.000-08:00</published><updated>2012-02-14T09:38:09.575-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="code"/><category scheme="http://www.blogger.com/atom/ns#" term="cuda"/><category scheme="http://www.blogger.com/atom/ns#" term="distributed"/><category scheme="http://www.blogger.com/atom/ns#" term="ec2"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><title type='text'>Setting up CUDA on EC2&#39;s cg1.4xlarge instances</title><content type='html'>Every wanted to try the&amp;nbsp;&lt;a href=&quot;http://aws.amazon.com/ec2/instance-types/&quot;&gt;Cluster GPU Quadruple Extra Large Instance (cg1.4xlarge)&amp;nbsp;instances&lt;/a&gt; on EC2? Amazon offers the following hardware for $2.10/hour:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;22 GB of memory&lt;/li&gt;
&lt;li&gt;2 x Intel Xeon X5570, quad-core “Nehalem” architecture&lt;/li&gt;
&lt;li&gt;2 x NVIDIA Tesla “Fermi” M2050 GPUs&lt;/li&gt;
&lt;li&gt;1690 GB of instance storage&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
I suggest using the &quot;Cluster Instances HVM SUSE Linux Enterprise 11 (AMI Id: ami-e4a7558d)&quot; image as it comes with the NVIDIA CUDA driver already installed. To install the missing software for compiling and running CUDA applications, you can use the following bash script:&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;iframe src=&quot;http://pastebin.com/embed_iframe.php?i=RcCjcrCd&quot; style=&quot;border: none; height: 400px; width: 100%;&quot;&gt;&lt;/iframe&gt;
&lt;br /&gt;
&lt;br /&gt;
Happy hacking!</content><link rel='replies' type='application/atom+xml' href='http://usability-nightmare.blogspot.com/feeds/2591589319667182075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://usability-nightmare.blogspot.com/2012/02/setting-up-cuda-on-ec2s-cg14xlarge.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default/2591589319667182075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default/2591589319667182075'/><link rel='alternate' type='text/html' href='http://usability-nightmare.blogspot.com/2012/02/setting-up-cuda-on-ec2s-cg14xlarge.html' title='Setting up CUDA on EC2&#39;s cg1.4xlarge instances'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/11325499601581369583</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6034301148006073779.post-820325257134015742</id><published>2012-02-10T08:26:00.000-08:00</published><updated>2012-02-10T08:26:27.942-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="code"/><category scheme="http://www.blogger.com/atom/ns#" term="distributed"/><category scheme="http://www.blogger.com/atom/ns#" term="erlang"/><category scheme="http://www.blogger.com/atom/ns#" term="free"/><title type='text'>More great free Erlang resources</title><content type='html'>In addition to the resources&amp;nbsp;&lt;a href=&quot;http://usability-nightmare.blogspot.com/2012/02/great-free-erlang-resources.html&quot;&gt;I already mentioned&lt;/a&gt;, I found the presentations (PDF) and videos of last year&#39;s &amp;nbsp;&lt;a href=&quot;http://www.erlang-factory.com/conference/SFBay2011/talks&quot;&gt;Erlang Factory conference in San Francisco&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
They had tons of exciting talks there. For instance:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.erlang-factory.com/conference/SFBay2011/speakers/TinoBreddin&quot;&gt;A guide to the Erlang ecosystem: the development process, continuous integration and packages&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.erlang-factory.com/conference/SFBay2011/speakers/PaoloNegri&quot;&gt;Big Switch to Erlang in Online Gaming&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.erlang-factory.com/conference/SFBay2011/speakers/DizzySmith&quot;&gt;Building Erlang Applications with Rebar&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.erlang-factory.com/conference/SFBay2011/speakers/KostisSagonas&quot;&gt;Cool Tools for Modern Erlang Program Development&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.erlang-factory.com/conference/SFBay2011/speakers/MickaelRemond&quot;&gt;Distributed Social Networking with ejabberd&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.erlang-factory.com/conference/SFBay2011/speakers/KevinSmith&quot;&gt;Erlang &amp;amp; CUDA: Concurrent and Fast&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.erlang-factory.com/conference/SFBay2011/speakers/JustinKirby&quot;&gt;Getting Useful Metrics from your Erlang Node&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.erlang-factory.com/conference/SFBay2011/speakers/SimonThompson&quot;&gt;Getting the right module structure: finding and fixing problems in your projects&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.erlang-factory.com/conference/SFBay2011/speakers/SeanLynch&quot;&gt;Membase NoSQL: Clustered by Erlang&lt;/a&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Enjoy!&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usability-nightmare.blogspot.com/feeds/820325257134015742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://usability-nightmare.blogspot.com/2012/02/more-great-free-erlang-resources.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default/820325257134015742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default/820325257134015742'/><link rel='alternate' type='text/html' href='http://usability-nightmare.blogspot.com/2012/02/more-great-free-erlang-resources.html' title='More great free Erlang resources'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/11325499601581369583</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6034301148006073779.post-567746482708248708</id><published>2012-02-08T07:53:00.000-08:00</published><updated>2012-02-08T07:56:07.308-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="code"/><category scheme="http://www.blogger.com/atom/ns#" term="coverage"/><category scheme="http://www.blogger.com/atom/ns#" term="erlang"/><category scheme="http://www.blogger.com/atom/ns#" term="tdd"/><title type='text'>Analysing Code Coverage in Erlang</title><content type='html'>To analyse the code coverage of your test cases in Erlang you can use the&amp;nbsp;&lt;a href=&quot;http://www.erlang.org/doc/man/cover.html&quot;&gt;cover&lt;/a&gt;&amp;nbsp;module. Assume you a module foo with eunit test cases. Now, to see the code coverage of your test cases do the following:&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;$ erlc +debug_info foo.erl&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;$ erl&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;Erlang R14B02 (erts-5.8.3) [source] [rq:1] [async-threads:0] [hipe] [kernel-poll:false]&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;Eshell V5.8.3 &amp;nbsp;(abort with ^G)&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;1&amp;gt;&amp;nbsp;cover:compile(foo).&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;{ok,lb}&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;2&amp;gt; cover:start().&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;{error,{already_started,&amp;lt;0.34.0&amp;gt;}}&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;3&amp;gt; foo:test().&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;&amp;nbsp; All 5 tests passed.&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;ok&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;4&amp;gt; cover:stop().&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;ok&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;5&amp;gt; q().&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;ok&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;6&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
This will create a foo.COVER.out containing information about the execution counts for each line of foo.&amp;nbsp;I ran this on the modules of&amp;nbsp;&lt;a href=&quot;http://usability-nightmare.blogspot.com/2012/02/create-your-own-little-scalable-in.html&quot;&gt;a distributed Erlang database application&lt;/a&gt;&amp;nbsp;and got the following output:&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;iframe src=&quot;http://pastebin.com/embed_iframe.php?i=M6J2t3vM&quot; style=&quot;border: none; height: 500px; width: 100%;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
This showed me that I better create some test cases for line 15. Nice!&lt;br /&gt;
&lt;br /&gt;
If you have problems running any of cover&#39;s functions, you probably still have to install it. To make cover (and other stuff) available on Ubuntu 11.10, for instance, you have to&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;$ sudo aptitude install erlang-tools&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Also make sure that you run cover:compile(foo) in a directory containing the .erl and .beam file of your module(s).&lt;br /&gt;
&lt;br /&gt;
Good luck!&lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usability-nightmare.blogspot.com/feeds/567746482708248708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://usability-nightmare.blogspot.com/2012/02/analysing-code-coverage-in-erlang.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default/567746482708248708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default/567746482708248708'/><link rel='alternate' type='text/html' href='http://usability-nightmare.blogspot.com/2012/02/analysing-code-coverage-in-erlang.html' title='Analysing Code Coverage in Erlang'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/11325499601581369583</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6034301148006073779.post-4600653356268656483</id><published>2012-02-06T11:01:00.001-08:00</published><updated>2012-02-06T11:02:32.182-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="code"/><category scheme="http://www.blogger.com/atom/ns#" term="erlang"/><category scheme="http://www.blogger.com/atom/ns#" term="free"/><title type='text'>Great free Erlang resources</title><content type='html'>You interested in learning Erlang but you do not want to invest in a book yet? Here is a list of very good free resources about Erlang:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Websites&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://learnyousomeerlang.com/&quot;&gt;http://learnyousomeerlang.com/&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://armstrongonsoftware.blogspot.com/&quot;&gt;http://armstrongonsoftware.blogspot.com/&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://spawnlink.com/&quot;&gt;http://spawnlink.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Papers&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.33.8465&amp;amp;rep=rep1&amp;amp;type=pdf&quot;&gt;A Comparison Between Erlang and C++ for Implementation of Telecom Applications&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://dl.acm.org/citation.cfm?id=1238850&quot;&gt;A history of Erlang&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.idt.mdh.se/utbildning/exjobb/files/TR0210.pdf&quot;&gt;A Structural Operational Semantics for PLEX&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://erlang.hivenet.is/workshop/2003/paper/p36-sagonas.pdf&quot;&gt;All you wanted to know about the HiPE compiler:(but might have been afraid to ask)&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.erlang.se/publications/ericsson_review_axd301_1998012.pdf&quot;&gt;AXD 301-a new generation ATM switching system&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=5167275&quot;&gt;Build your next web application with erlang&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.guug.de/veranstaltungen/ffg2003/papers/ffg2003-armstrong.pdf&quot;&gt;Concurrency oriented programming in Erlang&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.springerlink.com/index/u349706255089089.pdf&quot;&gt;Erlang–Software for a Concurrent World&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.66.699&amp;amp;rep=rep1&amp;amp;type=pdf&quot;&gt;Experience from developing the Dialyzer: A static analysis tool detecting defects in Erlang Applications&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=145620&quot;&gt;Implementing a functional language for highly parallel real time applications&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://dizzyd.com/sdist.pdf&quot;&gt;Securing Distributed Erlang&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://erlang.mirror.su.se/euc/00/euc00-sendmail.pdf&quot;&gt;Sendmail Meets Erlang: Experiences Using Erlang for Email Applications&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
An addition, I can recommend the following two books:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://www.amazon.com/Programming-Erlang-Software-Concurrent-World/dp/193435600X/ref=sr_1_1?ie=UTF8&amp;amp;qid=1328554551&amp;amp;sr=8-1&quot;&gt;Joe Armstrong: Programming Erlang&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://www.amazon.com/ERLANG-Programming-Francesco-Cesarini/dp/0596518188/ref=sr_1_1?s=books&amp;amp;ie=UTF8&amp;amp;qid=1328554583&amp;amp;sr=1-1&quot;&gt;Cesarini and Thompson: Erlang Programming&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Enjoy!&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usability-nightmare.blogspot.com/feeds/4600653356268656483/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://usability-nightmare.blogspot.com/2012/02/great-free-erlang-resources.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default/4600653356268656483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default/4600653356268656483'/><link rel='alternate' type='text/html' href='http://usability-nightmare.blogspot.com/2012/02/great-free-erlang-resources.html' title='Great free Erlang resources'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/11325499601581369583</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6034301148006073779.post-6604128391986323844</id><published>2012-02-06T06:34:00.000-08:00</published><updated>2012-02-06T11:02:00.130-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="code"/><category scheme="http://www.blogger.com/atom/ns#" term="database"/><category scheme="http://www.blogger.com/atom/ns#" term="distributed"/><category scheme="http://www.blogger.com/atom/ns#" term="erlang"/><category scheme="http://www.blogger.com/atom/ns#" term="in-memory"/><title type='text'>Create your own little scalable, in-memory database for your web applications</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
To improve my Erlang skills, I created a basic distributed database application with an HTTP front-end.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
The basic idea is: There is an arbitrary number of storage nodes, a load balancer and an HTTP process. Every entity is an Erlang process, i.e. it can run on a different host to allow scalability. Inserts are replicated to each of the storage nodes, i.e. active master/master replication.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
The task of the load balancer is to keep track of the list of storage nodes as well as selecting a random storage node (r) for each insert / read operation. Each storage node registers itself during startup at the load balancer. The load balancer informs the existing storage nodes every time a new storage node joins the party.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
The HTTP module waits for incoming insert/read requests and dispatches them to the load balancer. This means that the HTTP node and the load balancer are single points of failure. The storage nodes, however, use replication to provide an arbitrary level of redundancy.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaZZW5MF5DDl6nqwQVt6Y9tXzLhIDR9GQG9hQD-tXpZnmASGD4LTueajs-ckq5tX5GQoG6LhC5TEunhSy1YiB26rhRUKoSuTFxH1_cbzWQyJObe5TTgZnpS0tSxvLPpYSOPruHAX2YBkBg/s1600/structureRead.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaZZW5MF5DDl6nqwQVt6Y9tXzLhIDR9GQG9hQD-tXpZnmASGD4LTueajs-ckq5tX5GQoG6LhC5TEunhSy1YiB26rhRUKoSuTFxH1_cbzWQyJObe5TTgZnpS0tSxvLPpYSOPruHAX2YBkBg/s1600/structureRead.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsWFdnITUVdJO9s8JJT_a5XCnUBoAxQ57C9NQqZHu1kx1Ta7VBX7QsCT_Ty_GD5oVT3AuiD-OnVhmMBXLAebPY1txTiqaRgULhJE3y-HW51LOUqYWXvSVLefSayMQXlb5R1bIT2GdPuRLU/s1600/structureInsert.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsWFdnITUVdJO9s8JJT_a5XCnUBoAxQ57C9NQqZHu1kx1Ta7VBX7QsCT_Ty_GD5oVT3AuiD-OnVhmMBXLAebPY1txTiqaRgULhJE3y-HW51LOUqYWXvSVLefSayMQXlb5R1bIT2GdPuRLU/s1600/structureInsert.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsWFdnITUVdJO9s8JJT_a5XCnUBoAxQ57C9NQqZHu1kx1Ta7VBX7QsCT_Ty_GD5oVT3AuiD-OnVhmMBXLAebPY1txTiqaRgULhJE3y-HW51LOUqYWXvSVLefSayMQXlb5R1bIT2GdPuRLU/s1600/structureInsert.png&quot;&gt;&lt;/a&gt;&lt;br /&gt;
Thanks to Erlang&#39;s powerful primitives this fairly complex application can be implemented in less than 400 lines of code including comments and test cases (just about 200 lines without the test cases).&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
I will start with an excerpt of the storage module:&lt;/div&gt;
&lt;iframe src=&quot;http://pastebin.com/embed_iframe.php?i=FyHjS08U&quot; style=&quot;border: none; height: 400px; width: 100%;&quot;&gt;&lt;/iframe&gt;

Followed by the load balancing module:

&lt;iframe src=&quot;http://pastebin.com/embed_iframe.php?i=u8iH28F5&quot; style=&quot;border: none; height: 400px; width: 100%;&quot;&gt;&lt;/iframe&gt;

And last but not least the http module. I used the built-in http server provided by the inets module. The HTTP interface uses JSON to encode the replies. The code of my JSON module has been omitted for brevity.

&lt;iframe src=&quot;http://pastebin.com/embed_iframe.php?i=qCNDfQYw&quot; style=&quot;border: none; height: 400px; width: 100%;&quot;&gt;&lt;/iframe&gt;

Not to forget the code of the common module:

&lt;iframe src=&quot;http://pastebin.com/embed_iframe.php?i=aqsR6PXa&quot; style=&quot;border: none; height: 250px; width: 100%;&quot;&gt;&lt;/iframe&gt;

Happy hacking!</content><link rel='replies' type='application/atom+xml' href='http://usability-nightmare.blogspot.com/feeds/6604128391986323844/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://usability-nightmare.blogspot.com/2012/02/create-your-own-little-scalable-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default/6604128391986323844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default/6604128391986323844'/><link rel='alternate' type='text/html' href='http://usability-nightmare.blogspot.com/2012/02/create-your-own-little-scalable-in.html' title='Create your own little scalable, in-memory database for your web applications'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/11325499601581369583</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaZZW5MF5DDl6nqwQVt6Y9tXzLhIDR9GQG9hQD-tXpZnmASGD4LTueajs-ckq5tX5GQoG6LhC5TEunhSy1YiB26rhRUKoSuTFxH1_cbzWQyJObe5TTgZnpS0tSxvLPpYSOPruHAX2YBkBg/s72-c/structureRead.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6034301148006073779.post-5370819949073800852</id><published>2012-02-04T16:22:00.000-08:00</published><updated>2012-02-04T16:22:29.294-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ereader"/><category scheme="http://www.blogger.com/atom/ns#" term="kindle"/><title type='text'>The Kindle rocks!</title><content type='html'>&lt;a href=&quot;http://usability-nightmare.blogspot.com/2012/01/what-is-wrong-with-kobo-touch-part-1.html&quot;&gt;Less than a week ago&lt;/a&gt;,&amp;nbsp;I bought the &lt;a href=&quot;http://www.kobobooks.com/&quot;&gt;Kobo&lt;/a&gt;&amp;nbsp;eReader. But I was so disappointed by the slow page turns between chapters and the software that I gave it back just two days later.&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;The next eReader I had to try, obviously, was the&amp;nbsp;&lt;a href=&quot;https://kindle.amazon.com/&quot;&gt;Kindle&lt;/a&gt;. It costs about the same: CA$ 119. But in contrast to the Kobo it does not support touch input. The Kindle Touch is not (yet) available in Canada.. Instead, you have to type by selecting letters, digits, etc. from an on-screen keyboard using a 5-way controller.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Long story short: The Kindle is just brilliant! Even this (cheapest) edition feels very well made. But the best and probably most important feature: The page turns are really, really fast! Thus, you can scan through your ebooks faster than through your &quot;normal&quot; books. The device does not even slow down when you subsequently hit the page turn buttons as fast as you can.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;What about the lack of a keyboard? To be honest this&amp;nbsp;&lt;strike&gt;sucks&lt;/strike&gt; is not brilliant. Of course, it takes much too long to enter text using the 5-way controller button. For instance, I would love to use the experimental browser the Kindle comes with more often. But it just takes so much time to enter URLs, credentials, text you want to search for, etc. As a consequence I will only use the &quot;keyboard&quot; if I really have to, e.g. when I want to enter the password to a new wireless connection. Thank god that the passwords are stored on the Kindle!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Now, the Kindle Desktop software, e.g.&amp;nbsp;&lt;a href=&quot;http://www.amazon.com/gp/feature.html/ref=kcp_mac_mkt_lnd?docId=1000464931&quot;&gt;Kindle Mac App&lt;/a&gt;, is not perfect either. Neither is&amp;nbsp;&lt;a href=&quot;http://calibre-ebook.com/&quot;&gt;Calibre&lt;/a&gt;&amp;nbsp;- A tool you will need, for example, to convert your ePub files to the Kindle-compatible MOBI format. However, you do not really need those tools. And, in contrast to Kobo Desktop neither of those tools updated the firmware of my eReader so that it started crashing every five minutes. So, I do not really care about those not-very-brilliant tools.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Even when you are reading PDF files with big images on the Kindle the user interface stays response. Page turns are not noticeably slowed down. I just rotated the screen by 270 degrees to increase the font size.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Last but not least, there is plenty of documentation out there to get SSH access to the Kindle and start customizing it. Sounds like fun.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Thanks to the brilliant engineers for this remarkable little thing!&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usability-nightmare.blogspot.com/feeds/5370819949073800852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://usability-nightmare.blogspot.com/2012/02/kindle-rocks.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default/5370819949073800852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default/5370819949073800852'/><link rel='alternate' type='text/html' href='http://usability-nightmare.blogspot.com/2012/02/kindle-rocks.html' title='The Kindle rocks!'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/11325499601581369583</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6034301148006073779.post-2936550978239619471</id><published>2012-02-03T11:48:00.000-08:00</published><updated>2012-02-03T11:48:00.554-08:00</updated><title type='text'>Project management gone wrong</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqi6fRPOfzdjqk9m7t5pLIuLL9fDIZmyjF-RSGIRH7C3gprdYCm4A1e-OwtM8anQhQXYAmTUOVaGiXqJgtNAjCO8-wNKRfmrLVEA6HyifG4hNWfCqXDj-TrZZAdqw2dRSrR3DfcqhJ9bQq/s1600/68408_f520.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqi6fRPOfzdjqk9m7t5pLIuLL9fDIZmyjF-RSGIRH7C3gprdYCm4A1e-OwtM8anQhQXYAmTUOVaGiXqJgtNAjCO8-wNKRfmrLVEA6HyifG4hNWfCqXDj-TrZZAdqw2dRSrR3DfcqhJ9bQq/s1600/68408_f520.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usability-nightmare.blogspot.com/feeds/2936550978239619471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://usability-nightmare.blogspot.com/2012/02/project-management-gone-wrong.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default/2936550978239619471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default/2936550978239619471'/><link rel='alternate' type='text/html' href='http://usability-nightmare.blogspot.com/2012/02/project-management-gone-wrong.html' title='Project management gone wrong'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/11325499601581369583</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqi6fRPOfzdjqk9m7t5pLIuLL9fDIZmyjF-RSGIRH7C3gprdYCm4A1e-OwtM8anQhQXYAmTUOVaGiXqJgtNAjCO8-wNKRfmrLVEA6HyifG4hNWfCqXDj-TrZZAdqw2dRSrR3DfcqhJ9bQq/s72-c/68408_f520.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6034301148006073779.post-1839744633296210197</id><published>2012-02-03T11:43:00.000-08:00</published><updated>2012-02-03T11:44:47.913-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="code"/><category scheme="http://www.blogger.com/atom/ns#" term="comic"/><category scheme="http://www.blogger.com/atom/ns#" term="wtf"/><title type='text'>The only valid measurement of code quality: WTFs/minute</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9FUc7agykvRMRjmrke-vnnYStf_wq0D0CIP0RlBQKgdAeDTpqTPnLqzfP5NSShKLdtiNczDj8_Sk7HDsjTAd04sce6f58k6PqQGRSnV0pwASCCal0wPJDVixMWhi7XeEoGn0-xPEEAz6a/s1600/wtfm.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9FUc7agykvRMRjmrke-vnnYStf_wq0D0CIP0RlBQKgdAeDTpqTPnLqzfP5NSShKLdtiNczDj8_Sk7HDsjTAd04sce6f58k6PqQGRSnV0pwASCCal0wPJDVixMWhi7XeEoGn0-xPEEAz6a/s1600/wtfm.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9FUc7agykvRMRjmrke-vnnYStf_wq0D0CIP0RlBQKgdAeDTpqTPnLqzfP5NSShKLdtiNczDj8_Sk7HDsjTAd04sce6f58k6PqQGRSnV0pwASCCal0wPJDVixMWhi7XeEoGn0-xPEEAz6a/s1600/wtfm.jpg&quot; imageanchor=&quot;1&quot;&gt; &lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://usability-nightmare.blogspot.com/feeds/1839744633296210197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://usability-nightmare.blogspot.com/2012/02/only-valid-measurement-of-code-quality.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default/1839744633296210197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default/1839744633296210197'/><link rel='alternate' type='text/html' href='http://usability-nightmare.blogspot.com/2012/02/only-valid-measurement-of-code-quality.html' title='The only valid measurement of code quality: WTFs/minute'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/11325499601581369583</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9FUc7agykvRMRjmrke-vnnYStf_wq0D0CIP0RlBQKgdAeDTpqTPnLqzfP5NSShKLdtiNczDj8_Sk7HDsjTAd04sce6f58k6PqQGRSnV0pwASCCal0wPJDVixMWhi7XeEoGn0-xPEEAz6a/s72-c/wtfm.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6034301148006073779.post-3389247857161542096</id><published>2012-02-01T06:51:00.000-08:00</published><updated>2012-02-01T06:52:01.200-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="america"/><category scheme="http://www.blogger.com/atom/ns#" term="canada"/><title type='text'>The Canada Party - America, but better.</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;iframe allowfullscreen=&#39;allowfullscreen&#39; webkitallowfullscreen=&#39;webkitallowfullscreen&#39; mozallowfullscreen=&#39;mozallowfullscreen&#39; width=&#39;320&#39; height=&#39;266&#39; src=&#39;https://www.youtube.com/embed/BrhA0sEkuaM?feature=player_embedded&#39; frameborder=&#39;0&#39;&gt;&lt;/iframe&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usability-nightmare.blogspot.com/feeds/3389247857161542096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://usability-nightmare.blogspot.com/2012/02/canada-party-america-but-better.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default/3389247857161542096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default/3389247857161542096'/><link rel='alternate' type='text/html' href='http://usability-nightmare.blogspot.com/2012/02/canada-party-america-but-better.html' title='The Canada Party - America, but better.'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/11325499601581369583</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6034301148006073779.post-4037974254468673874</id><published>2012-01-30T09:06:00.000-08:00</published><updated>2012-01-30T09:07:58.270-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="error"/><category scheme="http://www.blogger.com/atom/ns#" term="security"/><category scheme="http://www.blogger.com/atom/ns#" term="warning"/><title type='text'>A security advice by the American Meteorological Society</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;I have just stumbled upon this very detailed security notice from the American Meteorological Society:&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOPW01yN013OS_MDHp-ZsvLLIbMLWIQ_xomWbsMH0EhVm59UiuMexrLdykGz5IaHenMWkAp2wSOKEYsgz0tHxuZPcSQ9RmK4jLzLzAagS0IsRCElwYKMkbYHor9QnqVLqccgyzNbs_lq2p/s1600/american_meteorological_society.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOPW01yN013OS_MDHp-ZsvLLIbMLWIQ_xomWbsMH0EhVm59UiuMexrLdykGz5IaHenMWkAp2wSOKEYsgz0tHxuZPcSQ9RmK4jLzLzAagS0IsRCElwYKMkbYHor9QnqVLqccgyzNbs_lq2p/s1600/american_meteorological_society.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Just a couple remarks: (1) If bad things happen when users click a button twice the user interface should not allow hitting it twice. It is your responsibility to make sure your users cannot mess up their own data. (2) Thanks for the big red warning. But only a fraction of your users will understand it (if any). Instead of forcing your users to read this, just set up the redirection in such a way that the users never leave your &quot;secure server&quot;. This way the warning has not to be displayed at all. Keep it simple.</content><link rel='replies' type='application/atom+xml' href='http://usability-nightmare.blogspot.com/feeds/4037974254468673874/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://usability-nightmare.blogspot.com/2012/01/security-advice-by-american.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default/4037974254468673874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default/4037974254468673874'/><link rel='alternate' type='text/html' href='http://usability-nightmare.blogspot.com/2012/01/security-advice-by-american.html' title='A security advice by the American Meteorological Society'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/11325499601581369583</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOPW01yN013OS_MDHp-ZsvLLIbMLWIQ_xomWbsMH0EhVm59UiuMexrLdykGz5IaHenMWkAp2wSOKEYsgz0tHxuZPcSQ9RmK4jLzLzAagS0IsRCElwYKMkbYHor9QnqVLqccgyzNbs_lq2p/s72-c/american_meteorological_society.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6034301148006073779.post-3930859080983810855</id><published>2012-01-30T07:45:00.000-08:00</published><updated>2012-01-30T07:45:06.575-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="esignature"/><category scheme="http://www.blogger.com/atom/ns#" term="RIM"/><title type='text'>Behold: The eSignature!</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Technology simplifies our life! From now on, we all just have to type our name to &quot;sign&quot; documents; thanks to the mighty &quot;eSignature&quot;. It is known to be fully-protected against fraud of all kinds. But do not forget to enter your birthday in the format dd/mm as your &quot;unique identifier&quot;. Thanks to RIM for bringing this up.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdP0vBBzsIXoxdOWkEG1EwqNTacehUyl2rq3nFkHp0x3_8vfaEEBqlWd7cWff9_osDjIBbkjEEzeO1BkwdxUSBcoOJq2uol1VnR4dUBw1ia5NoPyy5YJkTXs-Wnjufj21IovbxF85Y3qqG/s1600/UsabilityNightmare_e-sign-rim.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdP0vBBzsIXoxdOWkEG1EwqNTacehUyl2rq3nFkHp0x3_8vfaEEBqlWd7cWff9_osDjIBbkjEEzeO1BkwdxUSBcoOJq2uol1VnR4dUBw1ia5NoPyy5YJkTXs-Wnjufj21IovbxF85Y3qqG/s1600/UsabilityNightmare_e-sign-rim.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usability-nightmare.blogspot.com/feeds/3930859080983810855/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://usability-nightmare.blogspot.com/2012/01/behold-esignature.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default/3930859080983810855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default/3930859080983810855'/><link rel='alternate' type='text/html' href='http://usability-nightmare.blogspot.com/2012/01/behold-esignature.html' title='Behold: The eSignature!'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/11325499601581369583</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdP0vBBzsIXoxdOWkEG1EwqNTacehUyl2rq3nFkHp0x3_8vfaEEBqlWd7cWff9_osDjIBbkjEEzeO1BkwdxUSBcoOJq2uol1VnR4dUBw1ia5NoPyy5YJkTXs-Wnjufj21IovbxF85Y3qqG/s72-c/UsabilityNightmare_e-sign-rim.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6034301148006073779.post-5615397149466739502</id><published>2012-01-30T07:34:00.000-08:00</published><updated>2012-01-30T11:25:19.789-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="RIM"/><category scheme="http://www.blogger.com/atom/ns#" term="salary"/><title type='text'>Does RIM pay you two base salaries?</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;We should all start at Research in Motion (RIM). From looking at their job application website I can only &amp;nbsp;assume that each employee actually gets his base salary twice. The eagle-eyed-reader will, of course, spot that they actually ask two different (!) questions in their application. Imagine all the poor confused IT guys that fear filling out the applications because they are afraid of misunderstanding questions three and four..&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJK_jiOz63eRGa_z32CNDmVTitPU1ChYnWsA63ZnG0-3GXFukwexEw-FvRRkhp5rW1_TFxNCws61Jtk6TppCUUyLBxIVoNsHr3MV2zPaY9bRGiQVcF1g3V_SMI0mJO6iCYnRQsabzdYEAI/s1600/UsabilityNightmare_RIM_twice_base_salary.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJK_jiOz63eRGa_z32CNDmVTitPU1ChYnWsA63ZnG0-3GXFukwexEw-FvRRkhp5rW1_TFxNCws61Jtk6TppCUUyLBxIVoNsHr3MV2zPaY9bRGiQVcF1g3V_SMI0mJO6iCYnRQsabzdYEAI/s1600/UsabilityNightmare_RIM_twice_base_salary.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usability-nightmare.blogspot.com/feeds/5615397149466739502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://usability-nightmare.blogspot.com/2012/01/rim-pays-you-two-base-salaries.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default/5615397149466739502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default/5615397149466739502'/><link rel='alternate' type='text/html' href='http://usability-nightmare.blogspot.com/2012/01/rim-pays-you-two-base-salaries.html' title='Does RIM pay you two base salaries?'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/11325499601581369583</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJK_jiOz63eRGa_z32CNDmVTitPU1ChYnWsA63ZnG0-3GXFukwexEw-FvRRkhp5rW1_TFxNCws61Jtk6TppCUUyLBxIVoNsHr3MV2zPaY9bRGiQVcF1g3V_SMI0mJO6iCYnRQsabzdYEAI/s72-c/UsabilityNightmare_RIM_twice_base_salary.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6034301148006073779.post-7971257501589443036</id><published>2012-01-30T07:28:00.000-08:00</published><updated>2012-01-30T07:28:24.222-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="error"/><category scheme="http://www.blogger.com/atom/ns#" term="ikea"/><title type='text'>Ikea: &quot;Oops!&quot;</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Well, at least they told me that &quot;something&quot; went wrong. Now, I know. Thanks for the conversation.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQncy37Ziu5hQGX8Hkf359jIaKxeGJdzAgUuPsKumS2aIwzpPvBbbzyICoNvR5MNFRbPC8lgf-_sXXDCjw1yIyZDEld_jcd8apZDnIMOG0bB5zZH5wKkvRUdGaEXe6nP03zrVu_a_pAzp0/s1600/ikeaSomethingWentWrong.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQncy37Ziu5hQGX8Hkf359jIaKxeGJdzAgUuPsKumS2aIwzpPvBbbzyICoNvR5MNFRbPC8lgf-_sXXDCjw1yIyZDEld_jcd8apZDnIMOG0bB5zZH5wKkvRUdGaEXe6nP03zrVu_a_pAzp0/s1600/ikeaSomethingWentWrong.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usability-nightmare.blogspot.com/feeds/7971257501589443036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://usability-nightmare.blogspot.com/2012/01/ikea-oops.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default/7971257501589443036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default/7971257501589443036'/><link rel='alternate' type='text/html' href='http://usability-nightmare.blogspot.com/2012/01/ikea-oops.html' title='Ikea: &quot;Oops!&quot;'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/11325499601581369583</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQncy37Ziu5hQGX8Hkf359jIaKxeGJdzAgUuPsKumS2aIwzpPvBbbzyICoNvR5MNFRbPC8lgf-_sXXDCjw1yIyZDEld_jcd8apZDnIMOG0bB5zZH5wKkvRUdGaEXe6nP03zrVu_a_pAzp0/s72-c/ikeaSomethingWentWrong.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6034301148006073779.post-5190720885713641970</id><published>2012-01-30T07:20:00.000-08:00</published><updated>2012-01-30T08:14:01.848-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="windows"/><title type='text'>Windows XP needs a lot of power to install SP3 for you</title><content type='html'>&lt;div class=&quot;&quot; style=&quot;clear: both; text-align: left;&quot;&gt;I always liked Windows XP. However, I never used it on a day to day basis. But I still think it is the version I &quot;liked&quot; most. What I did not know, however, was that it requires more Power! to be able to restart while installing SP3.. Who thought this would be a great idea? Of course, there is nothing wrong with letting the operating system suggest to connect the laptop with a power outlet. But refusing to start the setup until him/her connects the laptop to a power outlet.. That is a bit harsh.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZbwBNAnYtPVbHLT3rcUIHxtdMy5dydSMYenQoma45m9GqnJjnodPV5VrYxUgPj64IB9GtUBCwIEoCZkpZyMDZlmoGidsaboldmuXDzeVq9ybFINSoE_JWdOuECqMSBP67K20xyQkpaLXM/s1600/windowsSp3Power.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZbwBNAnYtPVbHLT3rcUIHxtdMy5dydSMYenQoma45m9GqnJjnodPV5VrYxUgPj64IB9GtUBCwIEoCZkpZyMDZlmoGidsaboldmuXDzeVq9ybFINSoE_JWdOuECqMSBP67K20xyQkpaLXM/s1600/windowsSp3Power.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Anyway, you have still been a nice little Windows.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://usability-nightmare.blogspot.com/feeds/5190720885713641970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://usability-nightmare.blogspot.com/2012/01/windows-xp-needs-lot-of-power-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default/5190720885713641970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default/5190720885713641970'/><link rel='alternate' type='text/html' href='http://usability-nightmare.blogspot.com/2012/01/windows-xp-needs-lot-of-power-to.html' title='Windows XP needs a lot of power to install SP3 for you'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/11325499601581369583</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZbwBNAnYtPVbHLT3rcUIHxtdMy5dydSMYenQoma45m9GqnJjnodPV5VrYxUgPj64IB9GtUBCwIEoCZkpZyMDZlmoGidsaboldmuXDzeVq9ybFINSoE_JWdOuECqMSBP67K20xyQkpaLXM/s72-c/windowsSp3Power.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6034301148006073779.post-6740722692603180886</id><published>2012-01-30T07:03:00.000-08:00</published><updated>2012-01-30T07:04:08.100-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ebook"/><category scheme="http://www.blogger.com/atom/ns#" term="ereader"/><category scheme="http://www.blogger.com/atom/ns#" term="erlang"/><category scheme="http://www.blogger.com/atom/ns#" term="kobo"/><title type='text'>What is wrong with the Kobo Touch? [Part 1]</title><content type='html'>Well, on first impression the Kobo Touch is actually a pretty nice device. It looks and feels like a high quality product; considering I paid just CA$ 119 for it at FutureShop.ca. Reading the sample content as well as free ebooks feels nice as well. The page turns are very fast. So fast indeed, that you do not really &quot;feel&quot; them. In other words: They do not distract you from reading.&lt;br /&gt;
&lt;br /&gt;
However, the&amp;nbsp;first really annoying bug/feature of the Kobo is the software it comes with: Kobo Desktop (&lt;a href=&quot;http://www.kobobooks.com/desktop&quot;&gt;http://www.kobobooks.com/desktop&lt;/a&gt;). You need it to register the device, update the firmware, synchronize content between the device and your laptop, and so on. Now, I can live with the fact that the Kobo can be slow from time to time. But nothing on earth justifies the appalling performance of Kobo Desktop. I tested it on a 2.4 GHz idle MacBook. And I am sorry. But considering what is offered by the application it is simply unacceptable that there is a 5 second delay between clicks and seeing something happening.&lt;br /&gt;
&lt;br /&gt;
Due to the relatively high prices of the&amp;nbsp;Kobo Store (&lt;a href=&quot;http://www.kobobooks.com/&quot;&gt;http://www.kobobooks.com/&lt;/a&gt;) I never really thought about buying my ebooks there. But even if you are willing to spend so much money in their store, no human being could be patient enough to buy his/her books using Kobo Desktop. Even if someone would be patient enough: At the current level of life expectancy people would usually just die when they finally found the book they have been looking for.&lt;br /&gt;
&lt;br /&gt;
Now, this would not be so bad if the experience on the Kobo would great. Well, I just bought an ebook which is available as PDF, ePub, and MOBI (&lt;a href=&quot;http://pragprog.com/book/jaerlang/programming-erlang&quot;&gt;http://pragprog.com/book/jaerlang/programming-erlang&lt;/a&gt;). The Kobo can read all formats. And you do not even need Kobo Desktop to get the files onto the device. Just connect it to any machine. It will be mounted as an arbitrary piece of storage. Just paste the new file(s) to the Kobo and unmount it again. This is awesome because it means you can use the Kobo with basically all operating systems without any problems. Thanks for keeping it that simple! Seriously, great job!&lt;br /&gt;
&lt;br /&gt;
But when you are reading both the ePub and the Mobi format it takes about 15 seconds to turn pages forwards/backwards each time you change the section/chapter. Everything is fine within a single chapter. But every time a new chapter starts nothing happens for 15 seconds after trying to turn the page. Imagine you are reading a book and having to wait for so long every time you enter a new chapter... It is no fun!&lt;br /&gt;
&lt;br /&gt;
This problem illustrates that the most important element in user interfaces is the loading indicator. It is just terrible if a program just freezes without telling you anything about progress. Just add a stupid &quot;Loading..&quot; and almost every user will happily wait for ages. But without any indication of loading the user expects instant responses.&lt;br /&gt;
&lt;br /&gt;
Originally I connected the Kobo with Kobo Desktop and it updated to the last recent firmware 1.9.16 (came with 1.9.9). Using this &quot;new and enhanced&quot; firmware the Kobo crashed every five minutes on various occasions. The sad story is that I am not exaggerating.&lt;br /&gt;
&lt;br /&gt;
Wrapping up: The Kobo is a nice device. It is fine if you just want to read a(n) (e)book from start to finish.&amp;nbsp;But due to the software it is not good enough for reading any books which would normally involve frequent page turns, e.g. when you read to learn something new.</content><link rel='replies' type='application/atom+xml' href='http://usability-nightmare.blogspot.com/feeds/6740722692603180886/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://usability-nightmare.blogspot.com/2012/01/what-is-wrong-with-kobo-touch-part-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default/6740722692603180886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6034301148006073779/posts/default/6740722692603180886'/><link rel='alternate' type='text/html' href='http://usability-nightmare.blogspot.com/2012/01/what-is-wrong-with-kobo-touch-part-1.html' title='What is wrong with the Kobo Touch? [Part 1]'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/11325499601581369583</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>