Colemak is easy to learn!

If you touch-type QWERTY you already half-know Colemak.

Many of the keys stay the same, which means many of your shortcuts remain the same. On a Mac, these shortcuts are Undo, Cut, Copy, Paste, Bold, Minimize, Hide, Quit and Close.

The keys that do move don’t go far, usually one or two keys away. Mostly we’re trying to get the common letters on to the home row and move the uncommon ones away. Many keys that move stay on the same finger, or at least in the same hand. Only E and P swap hands. In Dvorak, 22 keys swap hands.

The punctuation keys don’t move, except for the colon/semicolon (no way that gets to stay on the home row!) In the Dvorak layout, all of these punctuation characters move: fullstop, comma, question mark, single quote, double quotes, square brackets, curly braces, angle brackets, dash, underscore, plus and equals. It’s a nightmare for programmers!

If you were to scratch off the keys that have moved, look how many you’d have to remove for Colemak compared to Dvorak:

Learning Colemak vs Dvorak keyboard layout

As if you didn’t know, QWERTY is inefficient. Dvorak is a lot better, but Colemak is by far the best. To prove this point, here is the heat map of typing this very blog post on QWERTY, Dvorak and Colemak:

Why Colemak is best

Row usage compared between QWERTY, Dvorak and Colemak

There are other reasons here to explain why Colemak is easy to learn.

With the holidays coming up, do your future self a favour and learn Colemak!

Update: so you’ve decided you want to learn Colemak and want to know how to go about it? AWESOME! I have just the post for you: How to learn Colemak.

An Android app to send prayers to Jerusalem

I have just finished a two-week project building an Android app called @TheKotel – Prayers to Jerusalem.

Now, anyone who knows me even slightly might think this is a bit weird, and believe me, i had a long conversation with myself about it before deciding to take on the work. These are the reasons that i did.

  1. I think it’s a nice idea. Putting thoughts into words and feeling that you’ve offloaded them somewhere is sometimes all people need to feel better.
  2. I saw a video of Alon printing the prayers and cutting them up and taking them to the wall. It made a personal connection for me.
  3. There’s already a successful iPhone app with over 10,000 downloads, so i saw this is definitely something that people want, which is all good publicity for me.
  4. Alon raised money from the people who already use the iPhone app to pay for the development of the Android app.
  5. I saw it as an opportunity to learn a bit more about Android development, try out PhoneGap and Sencha Touch (which i dropped when i found i wasn’t happy with the quality).
  6. I had saved up enough money in the back that i could offer this more-or-less as a gift, not expecting much money for it but instead doing it for reputation and for another Android app in my portfolio.

The concept is very simple. You type your prayer on a piece of paper (or pray out loud with Android’s speech-to-text feature) and press “Amen” and the prayer gets sent to Alon in Israel.

Combined with all the prayers that get sent via twitter and the iPhone app, Alon prints out thousands at a time, cuts them into little slips, rolls them up tight and takes them to the Western-Wall, or The Kotel, the remains of the Second Temple in Jerusalem.

The app is free, and the service is totally free, but donations are gratefully accepted. There is also a Connect screen giving options to share the app with friends and feel connected to the Western-Wall and Jerusalem. We also included some background information about the Wall and how the service got started, as well as some personal messages from a few supporters who helped to raise funds.

Best of all, there’s the gallery where you can see where the prayers are going. I really like this image of Alon putting the prayers in the Wall.

I am very pleased with the final result. It’s nice and fast, good native Android experience, and i think people are going to love it! I enjoyed coming back to Android development, say what you want about Java, but i like it!

If you can bear to listen to me talk about this anymore, Alon asked me to record a video in my “enchanting” British accent, heheh! :)

Device graphics were generated with Device frame generator and released under CC BY 3.0 license.

Yes, i have irrational beliefs!

Moments after writing my previous post about the human brain and its tendency to hold irrational beliefs, i discovered one of my own irrational beliefs.

I am making a pumpkin risotto (yes, right now! cooking and blogging, ftw!) and i realised that we don’t have any white wine. My partner suggested using red wine instead and i immediately stated that it wouldn’t work. Why? Do i have an irrational belief that you can only use white wine in risotto?

I have no scientific data that says white wine is better than red wine. The best i can come up with is: “it feels wrong”. I have an Availability Bias that every risotto recipe i can remember has always used white wine.

We all have irrational beliefs, and most of them are harmless. The point at which irrational beliefs become something to worry about is when they wish injustice, suffering or death upon other people. Or when they indoctrinate children to fear their natural impulses and feel guilt and shame for just being who they are. Or when they make people stop taking necessary medicine and get sick and die. Or when they make people repeat information which has been proved to be false, which misleads other people.

I’m glad to have discovered one of my irrational beliefs, and i’ll be looking out for more of them in the future. I’ll be happy if i find that all of them are just as harmless. I’m also eager to test my bias now that i’ve found it, so i’m about to put red wine into my pumpkin risotto. I’ll let you know how that works out! :)

Pumpkin risotto

Update

It worked out really well! i even think i prefer it with red wine! Hooray for discarding irrational beliefs! :D

The human brain and its tendency to believe irrational things

The last two interviews on the Angry Atheist podcast have got me thinking a lot about whether the human brain is predisposed to believe in religion, conspiracy theories, alternative medicine, etc.

Firstly Craig James, author of The Religion Virus, talked about religion in terms of evolution, explaining how religions have adapted and progressed, and the strongest strains survive because of their ability to take hold in our brains. Our brains are the ecosphere in which these ideas live. Craig explained that the ideas that survive are the ones that appeal to us (someone is looking out for us, you’ll get to meet your dead relatives in heaven and be happy forever) as well as things that people are afraid of (fear of making God angry, eternity in hell, for example).

It made me start to wonder: what has atheism really got to offer? There’s no attractive warm fluffy appeal or fear factor to make it stick in people’s head. I guess it only really appeals on an intellectual level. Craig mentioned that most people don’t tend to continue to believe something once they realise that it’s not right, which could be an advantage for atheism. It also means that the anti-gay churches are going to struggle in the future as more and more people are realising that homophobia is not right. Those churches will either need to adapt or die.

The other interview was with DPRJones, youtube broadcaster and host of The Magic Sandwich chat show. Part of what DPRJones talked about was the question of why people buy into religion. A lot of it comes down to how we are brought up, which is interesting, but more interesting for me is the connection to the evolution of the human brain.

Homo Sapiens are very good communicators, and we understand that the evolution of large frontal lobes has something to do with that. DPRJones points out that we have the advantage of being able to imagine conversations with people before we have them. We can also imagine conversations with people who are dead, or don’t even exist. 50% of 4-year-olds have an imaginary friend who they talk to. It’s no wonder that, when children are told there is a God they can’t see who cares about them, they accept it without question. DPRJones also mentioned that 9-year-olds questioned about dead animals mostly had the notion that the animal, while it no longer needs food or drink, still has desires of some sort. It seems natural for us to believe in life continuing after death.

I’ve read similar ideas before. Richard Dawkins explains some elements of religion as a by-products of evolution. For example, most of us are inclined to obey authority. It is an evolutionary advantage for us, when told not to do dangerous things, to obey. Disobedience sometimes causes death. This evolutionary advantage “misfires” when we feel we must please and obey a God, much like moths who fly towards artificial lights because they evolved to navigate by the light of the moon.

These things help me to understand why i so naturally believed that Christianity was right, and why some of my beliefs continue to persist unnecessarily. If something goes wrong, my first thought is still to wonder if i’m being “punished” by God for some wrongdoing, until i remember that it’s an irrational thing to believe and then i feel liberated to find a solution to the problem.

Sometimes i still wonder though, whether i am really any better off now as a non-believer than i was as a believer. I still suffer the common faults in human thought patterns. I am not free of confirmation bias, of self-consistency bias, of herd mentality, of assuming that i am right. Isn’t it funny that everyone, no matter what they believe, thinks that they are right? Even when writing this post, i’ve had to try to stop myself from implying that atheism is the obvious conclusion to logical thought. I can picture myself ten years ago and know that i definitely would not have agreed!

I don’t think i believe in anything irrational now, but i only need to follow the patterns of the human psyche and extrapolate to realise that i probably do. It scares me that i have no idea what those things are.

Colemak and vim: “But what about h/j/k/l?”

I have my phone set to alert me when anyone mentions Colemak on twitter. It’s a fun one to follow, you get new people trying out Colemak at least once a week, and i love to encourage people.

One thing i see a lot is programmers talking about vim, and asking what you do about the h/j/k/l keys. Do you remap them or relearn them?

There is at least one person who has made a colemak-vim remapping plugin (see this discussion in the Colemak forum), but i can’t imagine it working well. If you try to put h/j/k/l back where you’re used to them then you have to find new homes for n, e and i. (h actually stays in the same place) As you may well know, if you’re reading this, n is next search match, e is end of word, and i gets you to insert mode.

So if you move those keys, where would you put them? Almost every letter in vim has some sort of significance, and many of them are chosen for the action they stand for, which is part of the power of vim.

My answer is to relearn them. Maybe it’s easy for me because i was on Dvorak when i learned vim, so i was never attached to the position of h/j/k/l in the first place. Curiously enough, in Colemak h/j/k/l all end up on the same finger: the index finger of the right hand. Some people complain that j and k feel upside down, and they do at first, but then you realise that Apple is busy rewiring our brains with “natural scrolling” (which i think is just awesome, by the way) and before you know it, Colemak and vim feel perfectly wonderful together!

So my advice: print out one of these Colemak/vim cheat sheets and just get used to it!

vi / vim graphical cheat sheet - Colemak version

Look! i’ve even done a typematrix version for all you Colemak people who pair program and need a keyboard with a hard wired Colemak switch!

vi / vim graphical cheat sheet - Colemak TypeMatrix version

Of course, the other great thing to note about Colemak is one of its big advantages over Dvorak: that punctuation characters remain in their QWERTY positions. Which is very useful for vim users! :)

Speak the phone’s language

I have long had a prejudice against tools that help you to write apps for mobile phones, especially the ones that claim you can write an app once and deploy it to multiple different platforms. My argument was that iPhone, Blackberry, Android, Windows Phone, etc, all have different user bases who expect different things. How can you write one app that works well across all platforms?

I recognised this as a prejudice, and realised that i hadn’t actually tried out the things that i was criticising. After watching a talk by coder, hacker and lecturer Syd Lawrence about PhoneGap and Sencha Touch, i realised that the time had come to test my assumptions.

Syd Lawrence – Mr Mobbles Magical Emporium from Event Handler on Vimeo.

An opportunity came along to develop an Android version of an app that already exists for iPhone. It’s quite a simple app, and on Monday last week i made a start.

I downloaded PhoneGap and installed the library into a new Android application. It provides you a very fast way to get up and running with an HTML5 app that runs locally on the phone. There are numerous javascript functions which translate into the phone’s native language to access things like the camera, GPS, accelerometer. You can also write native code and expose it to your javascript, for example i wrote a little bit of Java code to hide the soft keyboard, which i could call from javascript at the appropriate time.

To style the app, i used Sencha Touch which is an extension of Ext.js. It’s a very nice way of declaring components in javascript that look visually somewhat like a native app. I got the basic functionality together quite quickly: tabs, network connectivity with JSONP, a scrolling gallery of pictures.

It was nice to use tools i am familiar with: jQuery and CSS3. You can run your app in a browser as you are building it, and periodically just check it looks okay on a phone.

Progress was fast. I encountered a few obstacles, most notably cross-site-scripting limitations, and limitations of the pre-release Sencha Touch version 2 which meant i had to go back to the slower and older 1.1. But i managed to overcome every obstacle and within 4 days i had a basic functioning app.

All was great apart from one thing: performance. On my Android tablet the app took 3 seconds to load. On my entry-level phone it took 7 seconds initialising PhoneGap, Sencha Touch and jQuery. Just to load a page that does basically nothing until you start typing in it. I was also disappointed by the refresh when you rotate the phone’s orientation and it jerkily redraws the screen. It’s great as a proof-of-concept prototype, but it’s not something i’d be happy to release and put my name to it.

So on Friday i thought to myself, you know what? I’m going to see what it would take to rewrite this as a native Android app in Java. I spent a good deal of the weekend working on it and by Monday i had got it to approximately the same point as the PhoneGap/Sencha Touch version. I gave my client the option which to continue with, and together we chose to go ahead with the native app. We lost the ability to deploy to multiple platforms, which was something we were hoping for, but in return, we get a far more responsive, native look and feel high quality app that we can both be proud of.

There is a place for Sencha Touch: if i’m writing a mobile friendly version of a website i’ll definitely give it another try. But for an app that has been downloaded and installed, i feel that the users are justified in expecting something better. And to achieve the quality expected, at least for Android, you have to speak to the phone it its native language.