A month with Nokia N900

Title says it. A month is enough time to get a better understanding of the device and to get asked repeatedly about my impressions. Many have wrote theirs, so I doubt I will be telling anything really new. Before I go on, a short disclaimer, since my writings on this blog stay around longer than might be sensible.

I wrote this post at the start of February 2010. I believe everything I write about technology to be hopelessly out of date after 6 months, but I expect this article will be obsolete even sooner. So by the time you got around reading this, most of my gripes might not even be true anymore.

Nokia N900 is an uncut diamond. A wonderful thing made by talented designers that has quite a few rough edges, not all of them in device. I wouldn’t recommend it to most people, but to some of you it might become your favorite computer. It goes with me almost anywhere.

If you want a rock solid phone, then this device is not for you. I was unlucky to be in minority of people who experienced constant reboots. By constant I mean few times every hour.  My Nokia also lacked a 2GB partition, which meant I was constantly running out of space in which to install applications. Both of this problems have since been fixed. I still have a problem with GSM connection occasionally completely dying, which I can fix only by manual reboot. I’m personally not bothered since I don’t use it as phone.

On the other hand updates to software are regular, with one major firmware update already, that fixed some of my problems (reboot). Annoyances of today might literally be gone by tomorrow and thus my disclaimer.

I know how much effort goes in good software and don’t want to be too negative, but email really does suck for IMAP users. Not only doesn’t it cache headers, so if you have a slow connection and a big Inbox, get used to waiting. You also can’t set sent mail, drafts or trash folders which makes it useless to me for anything but reading email. Even worse, it creates its own folders (like iPod touch) to make a mess in your account. I am all for simplicity and avoiding needless configuration options, but it could at least get a list of folders and compare Levenshtein’s distance to common names (Sent, Sent mail…).

Gecko (Mozilla) based browser though is great, in my opinion much better than iPod’s and I completely switched my mobile browsing to N900. I am biased since unlike many I never was fond of constant zooming in and out (with pinching). My opinion might have been different if my eye-sight was poorer and I needed to zoom more.

If you are a Linux user or appreciate freedom, then it’s difficult to find a better mobile device. N900 is a Linux machine which happens to also be a phone and you have complete access to everything. There is a store (Ovi) and app manager, but you can install and run anything willing to run without permission from anybody. Terminal is loaded by default together with tools needed to prod into the system and root is one package installation away.

I dislike fixed space of iPod. N900 is only slightly better. You can expand it with SD cards, but you have to open battery cover. It looks so fragile that I don’t intend to actually do this unless absolutely necessary. Speaking of storage, as a programmer I can understand why applications can use only 2GB of it, but as user it simply looks daft.

Pair of contact and conversations applications is absolutely brilliant. Instant messaging, Skype and SMS are superbly integrated and they also feed contact application with information about your buddies found on those networks.  Install Hermes and you can update it with data from Twitter and Facebook.

Screen has higher resolution than iPod’s, but physically same (small) size, which means I’ll keep reading PDFs on my 770. Since it’s resistive instead of capacitive, it needs more pressure than iPod’s, but works better at -12 degrees centigrade (this picture was taken with my gloves on).

Maemo has a very active and generally supportive community, but some members can also be needlessly unfriendly. Just because you know where everything is and have seen certain faux pas 100 times before, it doesn’t mean either is true for a new N900 owner with a problem.

N900 RUNS PYTHON, which was my main reason for preferring it over an Android phone. Documentation is a bit all over the place, not always current and I still haven’t found information about how to control built in cameras, but I am an optimist that this will be sorted out soon and that documentation will improve as well.

I compared N900 with diamond, but maybe a better comparison would be a sports car. If you want a polished, sedated experience then N900 is certainly not for you (yet). But if you are a tinkerer who doesn’t mind rough edges in exchange for freedom to make it do almost anything, then you should give it a spin.

There is so much more that could be said, but big picture wouldn’t change much. I haven’t talked much about UI since I simply couldn’t do it justice in few sentences. On the whole it works fine and multitasking is really great even though I think iPhone/iPad’s switch-to-where-you-were model is in my experience rarely a problem and wouldn’t be surprised if it was here to stay.

If there is anything about it you would like to know, then please ask and I’ll try to respond to it promptly.

Reblog this post [with Zemanta]

Dreaming about arithmetic mean

I had a crazy dream, where I was back at University, but this time studying computer science. We were writing a function to calculate an arithmetic mean of an array of numbers. A task obviously too simple for college course, but with dreams you get what you are given.

Discussion started with this function:

  1. function average(arr) {
  2. var i, sum = 0;
  3. for(i=0;i<arr.length;i++) {
  4. sum += arr[i];
  5. }
  6. return sum/i;
  7. }
  8.  
  9. Download this code: /code/dreamjs.txt

Dream me, who by the way is significantly more bitchy than I ever am, wasn’t pleased and thought he could save few bytes by storing counter and sum inside of the array:

  1. function average(arr) {
  2. // Store counter in array[0] and sum in array[1]
  3. if (arr.length < 3) {
  4. return arr.length == 2 ? arr[0]+arr[1] : arr[0];
  5. } else {
  6. arr[1] = arr[0]+arr[1];
  7. arr[0] = 2;
  8. for(;arr[0]<arr.length;arr[0]++) {
  9. arr[1] += arr[arr[0]];
  10. }
  11. }
  12. return arr[1]/arr[0];
  13. }
  14.  
  15. Download this code: /code/dreamjs2.txt

This looked ugly, but what bothered him (me?) was more that it also had a bug. Integer in Javascript is limited to 253, which is a lot, but sum can still overflow or underflow it. Since mean can never be smaller than smallest or bigger than biggest number in a list, I could fix it by writing:

  1. function average(arr) {
  2. var n = arr.length, sum=0;
  3. while (arr.length) {
  4. sum += arr.pop()/n;
  5. }
  6. return sum;
  7. }
  8.  
  9. Download this code: /code/dreamjs3.txt

End of dream. Everything edited for sanity and brevity.

I don’t have much to say about second program except that I would never write something so ugly just to save 16 bytes in a function like this. I wouldn’t even use Javascript if memory was that important.

I am more intrigued by third program. Bug in second is definitely there, even though few of us operate with numbers big enough to encounter it.

It’s interesting, because if I was awake, I would probably never think of it. I used to worry about bugs like this all the time, when I was coding in C. It was an unavoidable consequence of the language.

I guess what I am getting at is that it is nice to code in a high-level language and for the most part not think about implementation details like this, but only as long as you actually know them so your brain gets triggered when they matter. Speaking of details, I bet those divisions can cause rounding errors.

Reblog this post [with Zemanta]

Books I read in 2009

Last year I read Aaron Swartz’s review of books and thought it was a great idea that I should copy. I don’t know why exactly. Maybe to better track how much I actually read. Or using a goal to promote more reading when I felt I haven’t read enough. Maybe it was just to learn what topics drew me particular year.

Who knows? Probably all of these reasons played a role.

My private goal was to read a book every fortnight, so about 26 in total. I read 37, some of which admittedly very light in content or girth.

Time to present the books, listed in chronological order. I linked those I liked and set in bold those I recommend. Unlinked were either bad or intended for someone I can’t relate to.

DISCLAIMER: Most links point to Amazon and include my affiliate ID meaning if you buy them after following these links, I get few cents that might eventually lead to purchase of another book.

  1. Mind Performance Hacks by Ron Hale-Evans. Surprised to see how many of them I discovered independently through years.
  2. The Cold War by John Lewis Gaddis. Fantastic short history of cold war.
  3. The Non-Designer’s Design Book by Robin Williams
  4. The Non-Designer’s Type Book by Robin Williams. Like previous one probably useful only if you know absolutely nothing about design.
  5. Business Cards 2 More Ways of Saying Hello by Michael Dorrian, Liz Farrelly. Worth a look before you make your own.
  6. Here Comes Everybody by Clay Shirky. Astute and interesting, but might be redundant if you already follow Clay’s writing.
  7. Guns, Germs and Steel by Jared Diamond.
  8. Sticky Graphics: Create Memorable Graphic Design Using Mnemonics and Visual Hooks by Jessica Glaser, Carolyn Knight. WTF?
  9. Thursday Next: First Among Sequels by Jasper Fforde. Fantasy series for book lovers. Enjoyed more if you’ve read a lot.
  10. Designing Web Interfaces by Bill Scott, Theresa Neil. Components of modern web applications. A book that should be on the shelf of every web interaction designer.
  11. Reader by Bernhard Schlink. Excellent book, haven’t seen the movie.
  12. The Wall Jumper by Peter Schneider. Timeless portrait of German separation.
  13. Everyware: The Dawning Age of Ubiquitous Computing by Adam Greenfield. Really late to the party with this one, but still a good and fairly unbiased treatise on intelligent tools and environments and problems related to them.
  14. Always Building: The Programmable Environment by Jim Long, Jennifer Magnolfi, Lois Maassen. Optimistic thinking and examples of adaptable environments by people from Herman Miller.
  15. Javascript: The Good Parts by Douglas Crockford. Concise but informative description of good parts of Javascript useful for most programmers.
  16. Stardust by Neil Gaiman.
  17. Ender’s Game by Orson Scott Card. As good as people say.
  18. Small Gods by Terry Pratchett. In my opinion still the best book by Terry.
  19. A Theory of Fun for Game Design by Raph Koster. Worth reading if you want to know what makes games fun and what to expect in future.
  20. Aid and Other Dirty Business: How Good Intentions Have Failed the World’s Poor by Giles Bolton. Excellent when looking at facts of aid “business” (first 4/5 of the book). Weak when it comes to solutions with seemingly unlimited faith in globalism and power of a consumer.
  21. The Caryatids by Bruce Sterling. Interesting and occasionally excellent, but a bit of a let down compared to some of his other work.
  22. Sketching User Experiences: Getting the Design Right and the Right Design by Bill Buxton. Excellent book about sketching and its role in design. A must read for practitioners.
  23. The Buddha: A Very Short Introduction by Michael Carrithers. Buddism seen through life of the Buddha.
  24. Archaeology: A Very Short Introduction by Paul Bahn. Fun.
  25. The Four Steps to Epiphany by Steven Gary Blank. I can’t recommend this book highly enough to anyone starting a new venture. Absolutely a must read.
  26. The First World War: A Very Short Introduction by Michael Howard. Short, but good.
  27. Everyman by Philip Roth. Facing old age and death, a book I liked more than my wife.
  28. Contemporary Art: A Very Short Introduction by Julian Stallabrass. How contemporary art (world) functions and less what it is.
  29. Judaism: A Very Short Introduction by Norman Solomon.
  30. By Night in Chile by Roberto Bolano. Discovered by method of pulling random books from shelves in book store. Absolutely superb.
  31. Against the Gods: The Remarkable Story of Risk by Peter L. Bernstein. A book about history of risk management made only more relevant by last financial crisis. Fun and very informative.
  32. Forget Kathmandu: An Elegy for Democracy by Manjushree Thapa. Modern history of Nepal told through personal experience. Recommended if you are interested in Nepal.
  33. The Life and Opinions of Tristram Shandy, Gentleman by Lawrence Sterne. Hard to believe that 250 years old novel can feel so modern.
  34. Unseen Academicals by Terry Pratchett. I might be biased, but I would put it among his best novels.
  35. Prototyping: A Practitioner’s Guide by Todd Zaki Warfel. I never got around writing review of this book. Definitely worth a read for practitioners.
  36. Getting Started with Arduino by Massimo Banzi. Aimed at designers, but learned few new things anyway.
  37. The City: A Global History by Joel Kotkin. Sort of a short introduction to history of cities with everything good and bad that format entails. Excellent starting point for those interested in its subject.

I wish I read as much as Aaron (latest review), who seems to devour about hundred books per year, but I don’t think I’ll ever manage that. My goal for this year is going to be about same, 25 books before bells toll midnight on 31st of December. It still is an ambitious goal, since these days I seem to have a penchant for buying tomes at least 600 page thick and want to read more of other people’s code.

2009 review

COP15-11
Image by markos via Flickr

End of this year is here and for a creature of habits like me it’s time to do my annual review of this year spiced with plans for next one. As it happens this year was largely like last year and I could just post last year’s review with few changes.

I intentionally don’t talk much about my private life since I prefer to keep it such, but this year my wife and I had the fifth anniversary of our marriage and I feel compelled to tell how wonderful those years were and how much better each new year is. I am indeed a very lucky person.

Everything I said about my job last year is still very much true and I hope to keep doing it for a long time. My thanks go to my coworkers. Without them it could never be so rewarding.

Downside of a great job is that it can easily be too absorbing. My private project got less attention than I expected, but I hope to change this next year and finally bring it out.

I traveled less than I would have liked, but more than I should or expected. I did emit less CO2 than the year before and hope to do even better next year.

I read more than 30 books this year and would like to read at least as many next year. The ones I read will get their own post in next few days.

I could also repeat my gloomy outlook on our planet. If anything, it is even more true today than it was then. There was no significant progress in dealing with any of the problems I listed and that depressing list wasn’t exhaustive in the first place.

We went to Copenhagen for COP15 and like many I’ve been profoundly shaken since its end. A lot has been written about why conference failed and if you haven’t read those articles, you really should. However it was clear to me at demonstrations that different NGOs might want the same outcome, but have radically different and often incompatible visions on how to get there, so it’s even easier to understand why collectively we are all failing.

Hence, it’s been another year of strange mixture of personal happiness and gloomy outlooks on future. It’s also another year where I can’t muster an optimistic closure to my review. Saturnalias are over, but I am not too late yet to wish everyone happy holidays and the best of luck in new year.

Reblog this post [with Zemanta]

Facebook, web, mobile and me

Recently, for a moment, I couldn’t imagine myself working on web in ten years time. Since I am quite passionate about it and its development, the obvious question was why?

Why wouldn’t I want to be a web developer anymore?

Popularity of Facebook comes to mind. It is no secret that I am not a fan of Facebook and similar networks. Yet I do have an account there and on some of its brethren. By the way, my Facebook account is for testing purposes, so if I haven’t befriended you, it almost certainly wasn’t personal.

Anyhow, Facebook and ilk are easy to criticize. Anything of that size will certainly gain much to be critical about. I also sometimes feel nostalgic about old web, before the gold rush of last millennium. That too probably says more about my age than anything else.

After some pondering I came to conclusion that I am longing for a sense of openness, equality and control I used to have. Few of us had our own server, but in principle with investment of little time and a bit more money, you could run all services that mattered.

Few actually did, since on the whole we didn’t do much. We do more now, some of which we don’t want public. I may not like Facebook’s walled garden of information, but I would have to be mad to argue for open access to all that private information. Even with existing restrictions in place people tend to trip and reveal  information to unintended audience.

If sharing our lives is what we want to do, which clearly is the case, then rise of brokers like Facebook feels as an unavoidable consequence. However that doesn’t mean natural development of a domineering agent should also be welcomed.

If at some point Facebook becomes a conduit for most of our digital lives, what happens if they revoke our account? To whom can we appeal? Who has access to the history of all our actions and what happens to it if we do decide to leave? Is it ever really gone? How do we know that our answers to this questions are true?

It’s a cliché that technology is changing societies faster then they are able to adapt. It is a cliché, but that doesn’t make it wrong. We are changing long before we are able to understand what those changes will bring down the road. It can be argued either way, but it is your outlook on world that will largely form your opinion on desirability of end result.

I am not an optimist.

I like building things and I enjoy it even more when others use them too. I am sometimes lazy and perpetually busy, so I avoid building things which not even I asked for. I always tried to incorporate a reasonable amount of security in services I have built, but I have never added transparency and accountability to the system without outside pressure. I don’t know many who would and that pressure tends to come from legal requirements. It’s a subject too dull to care about without painful personal experience.

Another reason for uneasiness comes from the other side of web connection – web browsers. Last few years have brought an incredible amount of development and most of us aren’t well acquainted with new technologies yet. HTML5, CSS3 and Javascript will trounce Flash and Silverlight, right?

They might, but they all might not matter. Two raising trends I find interesting are mobile web access and mobile application platforms.

iPhone and Android have more than 100 000 applications between them and my impression of these ecosystems is that many of them are not much more than platform specific clients to web services. Even if most of them might not have much to do with web (games, books…), it’s not difficult to imagine a future, where most of us would access web through mobile devices and developing native clients for a new service would have a priority over access through browser.

I can’t say this would necessarily be a bad thing, since web development can be quite messy and frustrating. It probably would be less egalitarian and less sharing environment and I would certainly miss that.

At the end of this long self-indulgent post I confess I have no answers. I barely have questions and I had to write this far to get to them. It is for me the most introspective part of the year, so I might be thinking about a non-issue. Time will tell. Eventually.

Reblog this post [with Zemanta]
Next Page »