Floating point arithmetic

I knew you had to be careful, but holy crap:

>>> 1.1 + 1

Be careful, folks!


The JooJoo Tablet Part I: Software customisation

On Tuesday, I received my JooJoo tablet. I’ve been following the JooJoo since before the manufacturers gave the finger to TechCrunch founder Mike Arrington. The tablet itself has been given mixed reviews, but what everyone agrees on (including me) is that the software is not as polished as it should be. (Not being able to delete bookmaks? Really?)

The JooJoo

In light of the poor reception and uncertain future of the tablet (fewer than 100 units were pre-ordered, and I doubt if many more than a few thousand have been sold) many people are holding off buying for these very good reasons. What if the company folds? Who will update the software?

And here is where open hardware shines. Imagine the iPod without iTunes, or the iPhone without the App Store. What if there was a catastrophic failure at Apple? The devices would be useless, and would become very undesirable.  Not so with the open hardware of the JooJoo.

The JooJoo has standard PC hardware in: an Intel Atom processor, SATA SSD, VGA display etc. etc. This means that the software, and the company behind the software, doesn’t matter as much. If you want, you can install whatever operating system you want on it, and run whatever software you like. I’ll run through what I have done to turn a mediocre web tablet into a fantastic fully featured Linux machine. (that also browses the web!)

OK, so after trawling through the joojoo forum I decided that instead of a vanilla Ubuntu installation, I would go with jolicloud, an Ubuntu derivative with focus on cloud apps. I did this because the general feeling on the forum was that this was more compatible (wireless works out of the box, for example) and there were far more resources and discussion around it. After making a boot USB drive and using a hub to connect it, a keyboard and mouse to the JooJoo’s USB port (Another win for open hardware!) I was able to enter the boot menu by double-tapping the ON button (which switches the screen on during POST) and spamming F11 on my keyboard. After a by-the-numbers installation, and a reboot, I was presented with a full Jolicloud desktop, with sound and wifi working!

Only a few tweaks were left. Touchscreen, on-screen keyboard and hiding the mouse cursor. (My main resource for everything was this post)

I downloaded the touchscreen drivers (Kind of as described in this post, though the link for the drivers is now broken, I had to google for the files, which I found here) The touchscreen seemed mirrored vertically, but that was easily solved by using the built-in calibration tool.

I found the Florence touchscreen program works great, I added a shortcut to it in the menubar.  (No debian package, but it compiled cleanly with very few dependencies, see here for the apt-get command for them)

Hiding the mouse cursor – trivial you would think – was the most difficult to research. I eventually found a solution, and posted an answer to my own question on superuser.

The final tweak was to install chromeTouch, a nice extension that allows drag-to-scroll on any web page, while still allowing text to be selectable.

Stay tuned for part II, on how I turned a Moleskine portfolio into a perfect case for the JooJoo!

Losing weight scientifically: Part II

So, here we are. A month after I started the hackers diet I’m 2.9 pounds lighter!
My progress has been hampered by some serious fast-food consumption last week. It was pretty epic! So, I’ve lost a week(ish)’s worth of weight loss, hence the ~3 pounds rather than 4 pounds loss.

I’m very pleased with how the Hacker’s Diet is progressing, last week aside, and I’m delighted with the feedback that physicsdiet.com‘s graph gives me. I’ve found that a sensible lunch coupled with a salad dinner (especially in the summer heat!) works great.

I’ll shut up about my weight now and concentrate on posting more tech-oriented stuff! My JooJoo tablet computer arrived yesterday, so watch this space for a review!

Losing weight scientifically

If you are overweight, then losing weight is one of the ultimate ways of being proactively lazy.

If something as simple as not eating as much can postpone years of poor health (and all the inconvenience and costs this entails), it’s a no-brainer really. If you wish to persue this worthwhile goal, I can highly recommend the Hacker’s Diet, which is what I am following.

The Hackers diet, written by John Walker (founder of AutoDesk, makers of AutoCAD) is a very logical, technically minded look at the human body as a “black box”, with calories going in and exercise and metabolism burning them out. That’s it. No balancing food groups, eating the “right” food etc; Just. Eat. Less. (Than you burn)

The core ideology is that there are some lucky people born with (or have developed) a knowledge of when to stop eating. I do not posses this. 😦

So what can we do? We can use our brains to substitute this missing innate ability.

Walker suggests plotting your weight on a graph, but unlike so many others, he compensates for the wild 75% water retention inaccuracies with a moving average technique, so that the trend line is almost exactly your “true weight”. Luckily there is a fantastic website that does this for us, http://www.physicsdiet.com.

My graph is public (yours don’t need to be) here:

The blue line is your “true weight” and the red and green points above and below it are the actual weight readings, you can see they vary wildly! But the blue trend line is on a slow, steady march downwards.

What about Exercise?

As you’ll read in the Hacker’s Diet, you don’t exercise to lose weight, you exercise to get fit and live a healthier life. Half an hour of running, for example, burns 300 calories. Which is only slightly more than a Mars bar (260kcal). It’s far easier to put down the fork 🙂 Use that time more productively for now. (Sure, a solid hour burns 600, but who runs for a solid hour? You may be in the gym for an hour, but most of that time is taken up with changing, warming up, showering and other distractions)

I am not doing any special exercise at the moment, I find that would increase my appetite (it would increase my metabolism too, however) and who has time to exercise?

However, a few months down the line, when I am settled at a healthy ~500kcals per day deficit (one pound a week loss: a pound of fat stores about 3600kcal) I recommend simple weights and cardiovascular-based workouts at home – no need to stump for a gym membership.

As for a balanced diet? It’s all optional, all the body cares about is calories, it doesn’t care where it gets them from. By all means try to eat a balanced diet, but you are in no danger of getting too little of any group in the modern age that we live. I would be careful of most protein from meat, it’s high-cal. The bottom line is: Just eat less of what you love.

Read the short PDF book, and use the website. I’ll see you in 6 months when I’m 30 pounds lighter!

DISCLAIMER: Don’t be stupid.

EDIT 30/06/10: Click here for part II.

Get stuff done: Part II

In the first part of this series on GTD I told you about task processing and breaking down into context ands projects. Now I’m going to fill in the gap, what about incoming ‘stuff’ that are not tasks? Stuff that you shouldn’t forget (social security number, company policy changes etc) but doesn’t need to be actioned but only referenced.

This is your information file. This file can be stored in anything from an alphabetical file cabinet to a fully-indexed database. Which leads me on to the second part of this post.


Tracks / GTDify.com

I am going to talk about two tools that I use in my current GTD sytem. Tracks and Springpad.

Tracks is a Ruby on Rails webapp dedicated to managing your GTD tasks, managing contexts, projects and deadlines. It integrates with google calendar (or any calendar that can subscribe to an ICAL link) and looks awesome.

Tracks also has a fantastic API via RSS, ICAL and human-readable TXT. It’s awesome to just pull down your “at work” todo list on the console in text format with a simple cURL!

For those of us who dont want to (or can’t) host our own version of Tracks, I use the fantastic free version hosted at gtdify.com. Don’t forget to check out Shuffle, the Android-based task manager with full Tracks sync!


Springpad is very similar to Evernote (My pervious information system) in that you can write notes, tag them and search throughout the notes. Where it differs is in the richness of the data. Evernote can make text notes or accept OCR’d image notes, and that’s it. Springpad has special types for foods, CDs, DVDs, task lists, shopping lists, products (looked up from Amazon), contacts (looked up from facebook & other services, Movies (IMDB’d) and even upload files (It also does notes). In a word, it is phenomenal! Also Like Evernote, it has a bookmarklet clipper, I use it to store all my bookmarks a-la deli.cio.us too!

So there you have it, after processing with the four Ds, I put tasks into Tracks, hosted on gtdify.com, and information into Springpad. All the stuff externalized thusly, I can relax, safe in the knowledge that my systems will remember everything that I find it so hard to.

What tools do you use, Remember the Milk? Evernote? Paper?! I’d love to hear about it in the comments.

Get stuff done: Part I

I am not blessed with good powers of memory. I would often miss important events and forget information. A lazy person would just accept this and blame it on “my poor memory”. However, this would cause such problems throughout life – what a hassle!

Like many of my peers, I use David Alan’s Getting Things Done (GTD) methodology to help organise my life.


GTD is a form of Active Externalism (As discussed by Andy Clark & David J. Chalmers in The Extended Mind) where the central tenet is that the brain is terrible at remembering information. I can hear you now: “What are you talking about, Tris, the brain is the most powerful computer on the earth!” and you’d be right, but only in processing is the brain superior. Take a piece of paper, for example. This paper will record whatever you write on it for millennia (in good conditions), whereas the brain will forget important information, birthdays etc. so easily.

Alan identifies the two biggest drawbacks of keeping everything in your head:

  1. As mentioned before, paper stores information forever.
  2. Even if the brain has remembered the information (I’m sure you all know your mother’s birthday, for example), it might not yield this information in a timely manner (Only when you read the date on the calendar do you realise it is too late to post a card!)

To solve this, Alan recommends first externalising all information – get it out of your head and on to paper, or in emails, or a todo item – whatever. Put all of that information in a central inbox (physical or virtual). This means that everything that requires your attention is in one place.

Then go through each item sequentially and follow these four rules:

  1. DO. If it takes less than 2 minutes to action the item, do it there and then. If not, continue to the next step,
  2. DELEGATE. Can some one else do this? If not,
  3. DEFER. Is this action too big to do now, or is something you need to do later? Defer it.
  4. DELETE. Not everyone remembers this one, it’s one of my favorites. Most information we receive is junk. Don’t give it another thought, hit the DEL key.

Of course, some stuff that comes into our inboxen will be just “information”, stuff that doesn’t need to be actioned, but we should keep for reference. Receipts, telephone numbers addresses etc. This should be put into an information file, ideally indexed or searchable in some way so that information retrieval is quick and painless. I will discuss this in Part II.

At the end of this processing, you should have a smaller inbox. You will have done a few simple tasks (post that letter, ring that guy), delegated tasks to someone (I also consider using services as delegation, here’s an example: I’ve been meaning to buy some more RAM for my computer for ages, it’s been in the back of my mind all the time, and in the fore when I’m using Windows. How long did it take me to order yesterday? 1 minute. Delegated. Now it’s Crucial’s problem.)

You will now have a list of items that need to be actioned, a task list or some emails telling you what work needs to be done. It’s time to break those up into contexts.

Contexts are a very simple, yet smart, idea in GTD. By putting the tasks into lists arranged by what context is needed to fulfil the task (At work, on phone, Internet, etc,) you immediately can clear stuff out of your mental scope depending on where you are. When you are at home, you just need to look at the “at home” context. You are not bothered by tasks like “Write TPS Report” because they are irrelevant in your current context. This takes a load off your mind.

At its simplest state, GTD can be 80% effective with just these rules.

Stuff -> Inbox -> 4 Ds -> “Contextify”

But the last step is to put related tasks into the same project lists. This will then allow you to look through the project list and decide which is the “next action”. Knowing with certainty what is the next step will allow you to filter all your information into a tiny list of all the next action in your current context. Because this only shows you what you can do, you mind is clear to focus on these few tasks alone.

Stay tuned for the second part, where I’ll talk about the tools I use to implement GTD.

Note: This is my take on GTD, of course, Alan has plenty of other tips and tricks in his methodology, but I believe I’ve covered the basics. Let me know if I’ve missed anything you consider vital in the comments!

Photo courtesy of gilderic

Unnecessary complexity?

So I’m working on a project at work that recieves data in the form of a URL, parses it and saves it to a database.

The previous version of this Python script is very simple, using raw sql to save down the data to the database. My redesign includes SQLAlchemy, a Python ORM/DAL. Many people would say that for such a short script this is overkill. And on the face of it, they would be right.

Lazy Cat

However, as the system evolves over the course of time, the simple SQL approach will be less and less suitable, and the benefits of an ORM framework will be more and more apparent.

A lazy person would not do anything extra, and hack out a quick script that would be very brittle to changes in the database engine, or environment. For example, if we migrated at some point in the future away from our current engine to PostgreSQL (for example), some of the sql syntax may change and break the code, requiring further tweaks and debugging.

A Proactively Lazy person knows that with a little extra effort now (Learning SQLAlchemy’s syntax) many problems can be avoided in the future.

This applies not just to the database framework, of course, but documentation and testing. Both make your job easier in the long run!

Photo courtesy of ~fb~


Error: Twitter did not respond. Please wait a few minutes and refresh this page.


  • 1,492 hits