Posts tagged: Thunderbird

Master Jack

Everybody knows the old adage – “Jack of all trades, master of none”. I agree with this. So does the whole open source movement (in general). Thunderbird is a good example of an application that does one thing but does it well. Compare that to the old Mozilla suite that did mail, newsgroups and web browsing and one integrated applications and all the problems that came with that.

At Kraya, we believe in being able to do one thing and one thing well. Ironic since we do so many things. Kraya has become more like an operating platform for building a whole set of tools on top. Similar to running multiple applications on your computer. They all do one thing and one thing well (unless we are talking about something like Microsoft Outlook which does loads of things badly).

Then there is the synergy between the different teams that is sometimes absolutely crucial to the success of some of the projects.

As an organisation, we are a little off the wall and don’t really follow the mainstream. We believe that tools and technologies have a specific space they are meant to fill (yes, including microsoft products). They really have no competition as far as desktop operating systems are concerned for users who are not entirely technically literate. Sure the Apple Mac’s are great (and potentially better than Windows) but they have effectively priced themselves out of the mainstream market.

Linux, while fantastic is just not user friendly enough for the masses. My argument with Microsoft is in it trying to fill gaps with products that just can’t handle it. The Server platform while a good product, is not ideal for the range of circumstances under which it is deployed. Microsoft products are very easy to set up and use which also means that the products are generally very easy to set up wrong as well.

Products like Linux (yes, I am generalising) can be a lot more complex to set up but once it is set up, it can usually run without any issues for years. I have servers & desktops that have not been restarted for years (apart from the odd hardware upgrade / change). This is a testament to the sturdiness of the software.

Microsoft Server software is getting there. I remember the days of NT, when I was responsible for a couple of servers. They had to be restarted every fortnight, without fail before it would just fail to work. It was like clockwork…

Part of the reason why we do so many things is that we are different enough and wish to work with companies who can accomodate our very specific needs and there are very few (none that we felt could do that job as well as we could or better).

This has lead us down the path of setting up teams specialing in each area.

  • Software Engineering (which is split up in several areas as well, Java, PHP, Web, Desktop, Middleware and so on),
  • Systems (again split into multiple areas, Web systems, Office Server Infrastructure, Linux Server, Windows Servers and so on),
  • Technical Support (again, Windows based desktops, Mac based desktops, Linux based desktops, Laptops, Hardware and so on).

Krish has set up a film production company to follow his passion for making films and this will be launching with a splash over the next few weeks / months. We have already won a couple of small projects,  he is working on a few projects of fiction and music videos.

Kraya’s new R&D department is involved in developing 2 products and a third project completely unrelated to software.

So, how are we not the jack of all trades and master of none. Well, we are good at technology and all the other things we do as a coincidence. We are good at getting to understand needs, then going out there and finding all the tools that needs to be put together to solve the problem in the most effective manner.

We are currently in the process of putting together some case studies that can demonstrate this in more details… 😀

Breaking Software Down

Jeff Atwood likens software development to tending a garden. I can relate to this. In fact, I would like to ask, if you have a nice plant in one of your gardens, how complicated is it to “copy” that across to another one?

I realise that I am moving away from the analogy here but there is an important concept here. Libraries were born out of the desire to share and distribute code to be re-used.

The idea for Remote Procedure Calls dates as far back as 1976. Microsoft brought along OLE and then COM made this more generic and better.

RPC is widely in use these days and there are several other mechanisms for inter process communication including CORBA, REST & SOAP.

I don’t think software is broken down into small enough components. *nix is great in that you can tag a whole bunch of commands together on the command line to do some amazing things. I have personally piped data through a dozen or so commands and scripts to do some interesting things.

If we could break everything down into individual components that could be linked together, we would have a massive arsenal of interoporable tools that each user can pick and choose to put together very powerful solutions.

How many times have you found a piece of software that does one thing really well, but fails in something else. Then found another piece of software that does the other thing really well.

For example, the extensibility of Firefox is fantastic but I love the rendering of Safari. I love the Contact Management within Evolution and the Mail capabilities of Thunderbird.

Why don’t we break each software down into each of it’s individual components (and I am not talking about libraries here) and allow them to be deployed as services usable by other pieces of software.

In other words, release the contact management capabilities of Evolution as a product of it’s own right with a pre-defined API that any application can link into (including perhaps a web interface). Release the Mail management component of Thunderbird as a service, Release GUI’s as a component. Then we can pick any GUI we want, link into a specific mail component and another addressbook component.

Do one thing and do it well. In fact, let’s take it one step further and release a public API for each software component – an API for Mail, one for Contact Management and so on.

Each software component can then be a black box that delivers this API.

Choice can be a bad thing if it makes it difficult to choose – Subclipse vs Subversive is a good example of this. Let us however, not confuse choice with flexibility.

Let’s say that you want to find all the files within a folder modified within the last 3 days containing the text “abracadabra” and then replace all occurences in those files of the world “super”  with “hyper”.

To do this in linux, all you would do is chain find (to identify files modified in the last 3 days), grep (to identify only the files that contain “abracadabra”) and sed (to do the replacement).

If you know these commands well enough, you could chain something together in half a minute or so. You could probably figure out how to do this with the search tools in Windows within a minute or so but where this really shines is if there are thousands of files that needs to be processed. With other search tools, you would have to wait for the original search results to be returned before running to replace operation. This takes up the users time.

With the chaining of commands, I have run it and worked on something else while it completes.

Let me visualise a brave new world:

In this world, all software would be interoperable components. For example, there would be components for:

  • Mail account management (Perhaps genericised into configuration management)
  • Text composition (usage for mail, documents, plain text et al)
  • Text reading (again, usable for mail, documents, plain text et al)
  • Spam Filtering (already available to some extent)
  • Contact Management (optionally linked into organisation’s LDAP server)
  • Task Management (Standalone Mylyn if you know the product)
  • Scheduling (or calendering if you prefer that term)

If all of these components were interoperable, then there would a GUI that is generic and could bring all of these together. In this way, the people working on each of the components could concentrate on doing one thing and one thing well.

If we then start working on public API’s in a collaborative fashion, each of the component could be fleshed out to be as flexible and complete as necessary to gain maximum benefit.

If these components provided the services as a network based API, it would also allow for the components to be distributed across a network providing redundancy and efficiency. This makes it easier to turn each desktop into more of dump terminal concentrating purely on user interaction and getting closer to the invisible interface.

Software as a service has taken a step in the right direction. Can we take a leap and have software component as a service…

Your Time

I have always been curious about how I spend my time. It would be useful or at the very least cool, if I could figure out what I did with the 24 hours I get each day. Considering that this is overkill, it would be useful to find out how much time I spend on each task / client at work…

This is something that a lot of companies would find useful, especially in the professional sector. Lawyers, for example need to know this information for the purposes of billing. Time tracking has always been a personal bug bear of mine and is something that I often ramble on about.

In fact, in Chris’ Blog, the team management application he speaks about towards the end is something that I have been talking about and working on in the background for about a year now (actual effort is probably only around a week since I keep getting distracted with other things)

My aim has always (unconsciously) been to have an invisible interface, more because if there is effort involved, its going to take away from the task at hand and unless you are an obsessive compulsive (which I sometimes end up being), its going to be inaccurate. More importantly, its going to take up time to track and log time and ends up being a task of its own which requires management.

The most common way to log time is to just have log sheet which is filled in at the end of the day – just putting numbers against tasks and making sure it adds up to the number of hours you worked in the day.

Mylyn for Eclipse, which is a task/bug management plugin has a cool and useful concept of task contexts. This means that when you activate a tasks, it remembers the files you are working on, as well as which lines you were on and saves it as the task context. You can then de-activate the context or activate another task. When you go back to this task, it loads up the context. In other words, the files you had open, at the lines that you were at. This is a real boon and can save a lot of time once you get the hang of creating a task for everything you are working on and practice a little bit of self discipline in terms of activating and de-activating tasks.

Mylyn could use a little more intelligence in context management and creation on activating tasks with no context. But the concept of contexts is great and it should be possible to apply this at the operating system level.

For example, I am working on Task A. This involves a number of URL’s in firefox, a number of emails from Thunderbird, some files in Eclipse, some terminal windows, couple of Documents, and a spreadsheet.

Task B involves a url in firefox or two and a document.

and so on.

It should now be possible for me to simply tell my “Task Manager” that I am about to work on Task A and have all the applications load up in the locations that I last left them and hide away or close the other applications. When I want to switch to Task B, it should close everything else and open up the applications for Task B.

My desktop environment (GNOME), like most Linux desktop environments have the concept of workspaces. You can also get this as an addon for Windows. I have used these to emulate this kind of behaviour but this is far from perfect.

In theory however, this should make it possible for an application to track the time spent in each workspace. If the application is told what task is associated with each workspace, it could automatically log time against that.

The real power for task management would come from a powerful use of task hierarchy. Lets say we have the following task list

Client A => Project A => Subtask 1

Client A => Project A => Subtask 2

Client A => Project B => Subtask

Client B => Project A => Subtask

In this setup, the task management could be told (or even better figure out on its own) that there are application hierarchies… In other words, for all tasks related to Client A – the user will always need application X (with a particular configuration – say firefox on a particular url)

For Project A, there could be the requirement of another url in firefox.

This way, when a new Project or subtask is created, the system can automatically start a few steps ahead…

Client B could have completely different application setup / layout.

Automatic time tracking, task managment and planning then becomes so much easier.

For this to be viable, however, there are a lot of things that still needs to happen.

  • Context awareness for applications and ability to save a context
  • Ability in applications to merge contexts (for hierarchical contexts)
  • Efficient Application swapin/swapout when tasks switch for instant task switching
  • Applications needs to be more lightweight to make task switching quicker

Most, if not all modern applications provide extension points and it should be possible, at least in theory to add this functionality on to most applications. More importantly, it is theoretically possible to add this functionality on to all the open source software since the source is available. However, since it requires a fairly radical shift in thinking about application state, this is probably far more complex than it seems.

Once we have something like this working, it should be much more straightforward to add workflow using the task hierarchy to make it seamless including passing the contexts to the another person if necessary…

In any case, a few years into the future, who knows, these features might be built into all applications and perhaps we will be talking about task management, not application / process management.

Invisible Interface

I am a fairly avid reader of Jeff Atwood’s Blog and the post on Is Email = Efail post was particularly interesting. This led me on to Tantek Çelik post and several other articles relating to this.

The HCI (Human Computer Interface) has always intrigued me. This was partly due to the fact that I never enjoyed working with it – adjusting all those widgets by a few pixels so things could fit and it might look that little bit cleaner. Thinking about where a particular field should go and how it would all fit together was a little too bothersome for my liking. Precisely the reason why I enjoyed web development. Someone else could work out all the aesthetics and all I had to do was plumb in the functionality behind that.

Of course, it is never quite that straightforward – there was often plenty of to and fro before the interface was nailed down. However, the worrying of where something should go could be left largely to someone else.

It turns out however, that (like with most everything else in life) – I am very much opinionated about the user interface and design. The only difference is that actually doing the work does not excite me – but the concepts do.

In Tantek’s original post, he points out:

“The fewer fields in an interface, the lower the cognitive load.”

This is something that is vital to Interface design but something that is easily missed.

It was pleasant when I went back to one of our first high profile projects – megabus and checked the user interface on there. The number of fields on there truly was minimal. In fact, there was originally only one field on there and this had a reasonable default value. All the other fields are drop downs. There are now three fields on the uk version and two on the us version of the site. All with sensible defaults.

The other advantage of the megabus system is that when you hit search, the results are usually returned under a second. This is with a very complex algorithm to calculate the availability/pricing and around two searches happening every second. At peak, we have handled up to around 5 searches a second with the results being returned in under two seconds.

After this page, there are no more fields for entry apart from when you make payment. The benefits from the simple user interface and fast search response is, at least in my view, one of the key reasons for the success of the site bringing in people from all walks of life. This includes students as well as old age pensioners who learnt how to use computers and the internet just to be able to book megabus.com tickets.

It did get me thinking thought about the perfect user interface… Is it possible to reduce the interface down to nothing…?

Installation of Thunderbird/Firefox has a good example of user interfaces that can be removed. In particular, I am referring to the import from interface…

Import Data During Thunderbird Install

Import Data During Thunderbird Install

While this is a useful step, why does Thunderbird not do this in the background, find out what other applications are installed, do the import anyway (if possible) from any and all applications, merge them together as sensibly as possible and give the user the option of whether they want to use it, or parts of it.

I realise this opens a whole can of worms…

Q. Does this not mean that Thunderbird thinks that it is smarter than the user (as per my reference to Windows being “smarter” than the user in Evil Linux)?

A. No.

  1. Thunderbird should inform the user of what it is doing – don’t miscommunicate.
  2. Have a cancel button, so that the user can cancel if the process is taking too long and they won’t be using that information
  3. If the process fails dramatically for some reason such that the install crashes, this should be detected on the next try and the installation should be “more careful” when trying again or skip that step entirely

Another example is the Microsoft Office Installation process, The name and the company of the user is already in the System somewhere (User Account Details). Why not just use this information instead of asking for it again.

Same goes for Eclipse! Why does the author information not pick up the users name from the account information?

To summarise, the point that I am trying to make is that applications should not ask the user questions if it can figure it out itself. Most modern applications can pick up most if not all the information it needs from the system itself. This even includes theming information (as per my post on Design). While the majority of the theming in most operating systems is fairly pervasive in terms of application look and feel, applications have enough control over their look and feel to be different.

While this customisation can be useful, it can also be a hindrance to productivity and an allure for procrastination!

If I have specified somewhere on my system that my name is Shri Shrikumar, every single application on here should then be able to pick that up instead of asking me over and over again per application.

I look forward to a day when I never have to type the same information more than once… 😀

Design

Admitting to being a techie – I have often overlooked design. In fact, I have often explained to (potential) clients, using the analogy of a ferrari that we make the engine and everything else work while somebody else makes it look gorgeous. For me, how something looks was largely irrelevant – as long as it worked well.

This explains why, for a long time, I used a fairly bland desktop environment. My desktop itself was just pure black with no wallpaper. Ironically, I would remove all the icons, so it would be pure black and nothing else.

This should have tipped me off on my own desire for design. I thought my desire for black stemmed from the “good old” days of DOS when the screen was black and my love for the linux terminal. As an aside, I used to reconfigure the terminal windows in X to have a white on black background as well – so much better for the eyes. In fact, I still don’t understand why everyone uses a white background for terminals and such like. Paper was white because that was easier. There is really no reason for the screen to be white too…

Now, this was before I bumped into Enlightenment (at this time, it was E16) and to put it bluntly, I was captivated. This this was absolutely gorgeous. Fairly unusable since I was used to GNOME and of course Microsoft Windows. I thoroughly enjoyed this until it became more of a distraction…

I ended up reconfiguring GNOME to be prettier – in fact, I had the Mac OS X theme for a while which I enjoyed.

I then dabbled with E17 and it was absolutely gorgeous – E16 paled in comparison. I ran into a bug where some java applications would jump a few pixels when changing the decorations. This was a real pain since I was developing a Java application at the time. I spent an entire day trying to “fix” this before I realised that it was E17 screwing it up and not my code… :-(

More recently, I thoroughly enjoyed Compiz with the shaky windows and such like – I just always wished that I could actually throw a window and watch the momentum carry it that extra distance.

Nevertheless, this bridged the gap enough to E17 to keep me happy for a little while.

Last week, I dabbled with E17 again to see if the issue with Java was resolved. To my surprise E17 had changed more or less completely – it was bridging the gap between a window manager and a full fledged Desktop environment.

However, there was a problem. It looked like I couldn’t get it back to its old glory of absolutely fantastic graphics without some effort in configuration. One other issue I ran into was that maximising a screen would fill it up across both my monitors. Another thing I could configure but then, it all seemed like too much effort.

E17 gives me the feeling that this is where user interfaces will end up – it automates so many of the things that makes it quicker to do anything. However, it still lacks some of the “basics”.

E17 is a very good example of a UI that tries to conform to what I call the “Invisible Interface” which I will be writing about later.

To bring it all back to now, I found it a hassle to go through all the available themes for WordPress for the Company Blog as well as my own.

I used to take great pleasure in going through dozens or hundreds of themes and picking ones that I liked but after doing it a few times (for Firefox, Thunderbird, my phone, GNOME, GDM and my flat), it gets a bit repetitous.

Now, for a wish. A website that pulls in all the different themes for all over the world for everything. A one-stop-theme shop. Here, I could go through and pick a general theme that I liked and download it for all the applications, my phone(s), mp3 players (and of course, taking it to the next level, all the gadgets at my flat).

That gives my life more uniformity. Perhaps this is something that Designers could take on… Say Hugo Boss, and design something that even matches your clothes, shoes, hair – everything.

That way, you could have your own unique branding… and while you are at it link it into Gravatars and you are also instantly recognisable

Now for the issue of privacy – I think I best leave that for another day.

WordPress Themes