Amazon Kindle

Amazon Kindle

After having looked at e-book readers for quite some time, I finally took the plunge and bought me a Kindle. While in Malta, I had many times wished that I had a good e-reader. Dragging more than one book around was just not possible, and even then that one book would have to be quite thin. I have Kindle for Android[a] on my phone, but reading on a Xperia Ray[b] is just as comfortable as you would suspect. Especially in bright sunlight.

Amazon Kindle

Amazon Kindle
e-Book Reader

  • Display
    6 in
    600 x 800 (167 ppi)
    16 level grayscale
  • Size
    6.5 in / 166 mm
    4.5 in / 114 mm
    0.34 in / 8.7 mm
    5.98 ounces / 170 grams
  • Storage
    2 GB
    1.25 GB
  • Battery
    Up to a month with 30 min use / day, three weeks if Wi-Fi always on
    3 hours to full charge
  • Connectivity
    802.11b/g/n, WEP/WPA/WPA2/WPS
    2.0 micro-B
  • Formats
    Kindle (AZW), TXT, PDF, unprotected MOBI, PRC
    Via Conversion

Amazon, being dependent on their Kindle users getting hooked on reading and buying more books in the Kindle Store, have of course honed the mechanism they use to deliver their drug to perfection. The Kindle is light, comfortable, functional and totally awesome. It is an e-reader that feels like a book, but better. (5/5)

So I took the plunge. I wanted a reader that was light, had a great battery life, and was cheap. I wasn't interested in a tablet, which meant that the Kindle Fire[c] or any of the Android-based tablets such as the Nook Color[d] was out. This narrowed the field to three contestants for me: Nook Simple Touch[e], Sony PRS-T1[f] and Kindle[g]. The Nook is a little bit heavier for no good reason, the Sony is two grams lighter but has awful keys, so the Kindle won the weight battle.

Also, I already have an account on Amazon, have already bought stuff from them, and as I mentioned above, has used the Kindle app on my phone - so it wasn't like the other two were in the race anyway.

The Kindle, then:

The Kindle
The Kindle

There isn't really anything more that can be said about the Kindle than what has already been said long before I arrived at this party. Amazon, being dependent on their Kindle users getting hooked on reading and buying more books in the Kindle Store[h], have of course honed the mechanism they use to deliver their drug to perfection.

The Kindle is light, comfortable, functional and totally awesome. It is an e-reader that feels like a book, but better.

So, instead of trying to wring out any more opinions from my brain, I'll get to the stuff I wish someone had told me: I have a Kindle, what now? Let's start off with the night-owl's weapon of choice against the forces of darkness:

1. Lighted Leather Cover, Black

This lighted cover for the Kindle[i] is a must-have if you, like me, sometimes end up reading without sufficient lighting. Since an e-ink display is purely reflective, you are completely dependent on having a light source for reading.

Case open
Case open

Case closed
Case closed

This cover has a little led light that draws power from the Kindle and nicely illuminates the front of it.

2. Apps and Services

The Kindle store has many books, but the universe of readable things is much bigger. Next comes the problem of getting these things onto the Kindle.


I tried Instapaper[j] and was tempted to try Readability[k], but before I could do that I found SENDtoReader[l], and it was so good that Readability will have to wait a while. SENDtoREADER is amazing for the following reasons:

  1. It works: There's the state of the market of these apps summed up for you. SENDtoREADER actually delivers the webpage to your Kindle when you press "Send to Reader". Unlike Instapaper, whose send to Kindle bookmarklet has gone missing in action.

  2. Images: SENDtoREADER includes images, even including one of them as a book cover. It really feels like you're getting an e-book version of the web page you sent, not some kind of stripped-down HTML source code dump.

  3. No Junk: Other services put links, ads and assorted junk before and after the article. Not this one. You get the webpage and nothing more.

  4. It sends it: The service does one thing and does it very well. Instead of having to organize your articles before you can download them or send them to your Kindle, SENDtoREADER just sends them. Even if I've rapid-fire clicked "Send to Reader" on a handful of articles and I know that when I open my Kindle, they will all be there.

So, there you go. SENDtoREADER is awesome.

2.2. Droid to Reader

What if you have a smartphone? If it is an Android phone, DroidToReader[m] is it. It uses the SENDtoREADER API to add another service in the Share menu in the Android UI. Want to send a webpage to your Kindle? Click on Share and then on DroidToReader.

2.3. Calibre

Calibre[n] is the app to go to when you have a document in a format that isn't natively supported by the Kindle. The list of formats[o] is stunning:

calibre supports the conversion of many input formats to many output formats. It can convert every input format in the following list, to every output format.



The program can also download RSS feeds and create a Kindle newspaper issue from the articles.

3. Web Development

The Kindle comes with an "Experimental" WebKit-based web browser[q]. This, of course, brings us to the question - how do we design for it? The Kindle is very much like a mobile device:

  • Single column: Just like a smartphone, web pages look best on the Kindle if they are a single long column. Horizontal scrolling is just not a viable option.

  • Small screen: Means small margins, to maximize the amount of content that can be displayed.

  • No mouse: Technically, there is a mouse pointer. But it can only click - not click and drag.

But there are also important differences:

  • Monochrome: The Kindle has no color display, so any web page that uses color coding of elements will be unusable.

  • Low color depth: The display can only show 16 levels of gray, and for text there's really only two options: black or white. Any inbetween level makes the text almost unreadable.

  • High resolution: 10pt Arial looks good on my computer monitor. On a Kindle, it looks like 10pt Myopia.

  • Slow display: While a computer monitor can switch a pixel's color in milliseconds, an e-ink[r] display has a much longer switching time.

Here are the points that I've figured out so far.

3.1. Font

If you read this on a Kindle, you are reading 14pt Times New Roman with a CSS line-height of 150%. After playing around with other fonts, this was what I decided on. The size is comfortable while still allowing me to fit lots of text on a page. Increasing the line spacing makes it easier to track the text across the Kindle, which is too wide to be thought of as a single newspaper column of text.

3.2. CSS Media Queries

There is no way to test for a Kindle using CSS media queries[s]. The Kindle itself only honors the @media screen type, and considers itself a color display with a depth of 24 bpp. The little liar.

The solution I ended up going with was browser detection in JavaScript followed by setting a class name on the <body/> element:

var ua = navigator.userAgent;
if (ua.indexOf ("Kindle/") > -1) {
    document.body.className = 
        "kindle " + document.body.className;

Then CSS selectors can be used to only apply to Kindle displays:

/* Default */
p, td, th, li, caption {
    font-family: Verdana, Tahoma, Arial, Helvetica;
    font-size: 10pt;
    color: #606060;
    text-align: justify;
    margin-top: 8pt;
    margin-bottom: 10pt;

/* Only for Kindle */ p, td, th, li {
    font-family: 'Times New Roman', Times;
    color: #000000;
    line-height: 150%;

3.3. Prettify for the Kindle Guy

This blog uses Prettify[t] to format source code. While reading Java Generics and API Extensions, I realized that Java code with generics tend to produce very long sequences of characters that couldn't be broken up. One option was to use word-break: break-all, but that would not be very nice looking. Instead, I inserted a zero-width space, UNICODE U+200B[u], in front of '<' and '.', the two characters that are most often seen in long sequences of letters: The former in type parameter lists (List<Map<A,B>>), the latter in identifiers (window.document.title).

// Inserts Zero-Width-Spaces
var insertZWS = function () {
    var aElems = 
        document.getElementsByTagName ("span");
    for (var i=aElems.length - 1; i>0; --i) {
        var span = aElems[i];
        var prevSpan = span.previousSibling;
        if (prevSpan != null && 
            span.className == "pun") {
            var breakBefore = false;
            var tc = span.textContent;
            if (tc.length >= 1) {
                if (tc.charAt (0) == '<' ||
                    tc.charAt (0) == '.') {
                    breakBefore = true;
            if (breakBefore) {
                span.textContent = ("\u200b" +

// Call prettyPrint with the function
// to be called on completion
prettyPrint (insertZWS);

The formatting is still far from perfect, but at least we get line breaks in sensible places.