Skip navigation

Some websites that has photo hosting services might require standard specs for pictures stored on the server. Specs like maximum size, max resolution, certain compression and a fixed file format. Since you can’t force the user to abide to those specs, your best option is to adapt the uploaded images to your specs.

I thought at the beginning that CI is not capable of doing that, despite its outstanding image manipulation class. But I could not find any clue on how to do it. Even some people on irc said it’s not possible with CI and I should find another way. However, by pure coincidence I discovered this possible if you set ImageMagick as the default image manipulation library, and all you’ve got to do is rename the file.

$config[‘image_library’] = ‘ImageMagick’;

The above code first sets the default image library to ImageMagick. If you use a library other than the default (gd2), then you must specify its path (line 2). Then I specified the source image and the new image paths. Notice the change of extension from png to jpg. Then load the library. That’s all. Now do whatever manipulation you want on the image (resize, crop or whatever) and the new image will be saved converted to the new format.


So I got accepted as a maintainer of  maemo extras repository. I also released and uploaded the the first version of Retro Conversations to extras-devel. I decided to do it early so as to have some credit in Open Source world when my GSOC proposals get reviewed.

I quickly wrapped things up,  made sure the app won’t crash/refuse to start/ behave funnily and went through creating a package process which made me suffer for 2 days. I couldn’t get happier when the application manager showed retroconv!

I will post later a short tutorial on how create deb package from python code for maemo. For now, just one advice, NEVER USE UPPER CASE IN DESCRIBING AN APP’S CATEGORY IN “SECTION” PART INSIDE CONTROL FILE!! (thanks to guys over irc..)

Retroconv Announcement

Retroconv Package Overview

That’s why iphone sucks. That’s why blackberry sucks..


Nokia N900 running Chromium, playing a flash video of another N900 running PSX emulator

That’s why N900 kicks ass!

So after 3 days of doing nothing but exploring and trying to get along with libabook and libebook APIs and how to deal with them using ctypes in python, I have to say that I failed this time. I did however find a work around. I did not notice how much bad my last working code was except today. I tried to optimize it a little bit and it worked flawlessly and loads immediately!

In the beginning I took the sender number of each message, opened the address book, searched for the number and returned it. The process took about 3 minutes for 175 contacts and about 200 msgs. Because looping over EContacts takes more time than looping over a normal List, I found it better to flip the process. Instead of trying to find the sender’s name from his number, I try to find the sender’s number inside messages from his contacts info. Meaning, instead of looping over the messages and fetch each sender’s name from address book, I loop over the address book and try to find for each contact his messages and stick his name to them.

The process might have sounded stupid a little but it works. I know it’s inefficient, especially when there is only a little number of messages and large number of contacts (miss ratio is highest) but if you think about it, a person with few messages most probably will not want to import them anyway.

I will try to test this with higher count of messages and see the result. Nevertheless, I will switch immediately to libabook or libebook APIs as soon as I find out how to use them to get what I want… in python.

Before: (called for each message)

for econtact in contacts:

		phones = econtact.get_property('phone')
		phoneList =
		while phoneList.has_next():
			currPhone = string_at(

			if currPhone == phoneNum:
				return econtact.get_name

After: (called only once)

for contact in contacts:

		phones = contact.get_property('phone')
		phoneList =

		while phoneList.has_next():
			currPhone = string_at(
			for msg in recvLst:
				if currPhone[-7:] == msg.fromNum[-7:]:

Following up with Retro Conversations, I’ve struggled yesterday for about 11 hours trying to find fetch a contact in address book using his/her number. I originally thought this would be an easy task, but it appears not as I found it that there are no python bindings for libabook yet.

I also found that the PyMaemo team were kind enough to write this tutorial on how to access APIs using ctypes for which there are no Python bindings yet that uses libosso-abook as an example. I read through the tutorial quickly which much of were very new to me and did not really understand.  So I  decided to explore Hermes’s source code to learn how it accesses contacts and I ended up writing this function:

def getContactNameFromPhone(self, phoneNum):
		addresses = evolution.ebook.open_addressbook('default')
		contacts = addresses.get_all_contacts()

		 #ai =, E_CONTACT_EMAIL))

		for econtact in contacts:

				#print econtact.get_name()
				phones = econtact.get_property('phone')
				phoneList =

				while phoneList.has_next():
					currPhone = string_at(

					if currPhone == phoneNum:
						return econtact.get_name()

which works, but if you examine the code, you’ll find that this is the worst solution ever! The app now takes about 2 or 3 minutes to start up. I also borrowed from Hermes to use its GList that is based on the PyMaemo tutorial I mentioned above.  I’m pretty sure things can be much simpler, I just didn’t get the whole ctypes things yet.. I guess I’m going to spend this night reading that PyMaemo tutorial again

So I mentioned before the inability of N900 to import old SMS from previous Nokia phones, and I will save the world by writing the ultimate Old SMS importer/reader 🙂

First things first, these are the project specs that I hope to accomplish:

Phase 1:

  • Inbox and Sent messages
  • Import SMS csv files
  • Old View (messages are represented by the their sender in inbox/ receiver in sent, ordered according to date of arrival, just like ordinary messaging before Nokia Conversations)
  • Options like forward, delete
  • Show contact card by tapping contact

Phase 2:

  • Mimicking the look and feel of Nokia Conversations
  • Favorites

Phase 3:

  • Find in messages
  • Filter by contact names
  • Sort

Phase 4:

  • Import directly from other phones

What I’ve done:

I can now show the received SMS list (kinetic scrolling with finger, I like that!), and tapping the sender displays his message. My next step now is associate phone numbers with contacts. I will also take a look at the Qt animation framework.

I’ve submitted the project on Maemo Garage and it has been approved in exactly 2 minutes! Now I will now explore maemo garage. Keep an eye on my project’s page: 😉

So I got myself a Nokia N900 and couldn’t be more pleased with it! I was however little disappointed when I couldn’t import my contacts and SMS from my other Nokia phone like I always used to do before with previous phones. I worked around the contacts thing by copying them to my simcard then recopying to the N900. For the old SMS I found this guide on maemo talk forum for importing them to Nokia N900. I don’t really recommend it because of 2 issues:

  1. Old SMS appear to be received after new already existent SMS in conversations
  2. Not deletable

3 days ago I decided to get my hand dirty write my own Old SMS reader. It will show up as a separate application not integrated inside the original conversation application. This my first app on maemo and things could not get easier! Using Python and Qt I can say that I’ve done quite good progress in no time. I’ll post up the project features and progress shortly

In a surprise announcement today, Microsoft President revealed that the Redmond-based company will allow computer resellers and end-users to customize the appearance of the Blue Screen of Death (BSOD), the screen that displays when the Windows operating system crashes.

The move comes as the result of numerous focus groups and customer surveys done by Microsoft. Thousands of Microsoft customers were asked, “What do you spend the most time doing on your computer?”

A surprising number of respondents said, “Staring at a Blue Screen of Death.” At 54 percent, it was the top answer, beating the second place answer “Downloading XXXScans” by an easy 12 points.

“We immediately recognized this as a great opportunity for ourselves, our channel partners, and especially our customers,” explained the excited Ballmer to a room full of reporters.

Immense video displays were used to show images of the new customizable BSOD screen side-by-side with the older static version. Users can select from a collection of “BSOD Themes,” allowing them to instead have a Mauve Screen of Death or even a Paisley Screen of Death. Graphics and multimedia content can now be incorporated into the screen, making the BSOD the perfect conduit for delivering product information and entertainment to Windows users.

The BSOD is by far the most recognized feature of the Windows operating system, and as a result, Microsoft has historically insisted on total control over its look and feel. This recent
departure from that policy reflects Microsoft’s recognition of the Windows desktop itself as the “ultimate information portal.” By default, the new BSOD will be configured to show a random selection of Microsoft product information whenever the system crashes. Microsoft channel partners can negotiate with Microsoft for the right to customize the BSOD on systems they ship.

Major computer resellers such as Compaq, Gateway, and Dell are already lining up for premier placement on the new and improved BSOD.

Ballmer concluded by getting a dig in against the Open Source community. “This just goes to show that Microsoft continues to innovate at a much faster pace than open source. I have yet to see any evidence that GNU/Linux even has a BSOD, let alone a customizable one.”


So I’ve been fed up lately with Firefox. Firebug is clashing with Gmail, websites are running extremely heavy and slow that I can’t even get a smooth decent scrolling. I decided to try another browser, so what would be better than Google Chrome to try out? But oops, there is no Chrome for Linux?! But there is Chromium!

Chromium is an open source web browser project, on which Google Chrome is based. The aim is to build a safer, faster, and more stable lightweight web browser. It also uses Google’s new open source JavaScript engine; V8. I’ve been playing with Chromium for a couple of hours and I can certainly say IT IS a “Lightweight” web browser! Very very very smooth in performance even though it’s still under development. You can add the PPA for Ubuntu from here.


(Image Courtesy of

This picture shows 20 different applications (+4 hidden) running simultaneously on the upcoming Nokia flagship; Nokia N900. I bet you’ve never experienced anything similar on a smartphone before (Hello iphoners? :P)

In case you’ve been living in a cave the last couple of months, this is the new Nokia beast that will smash any other existent phone (yes, the iphone and any lame Windows mobile).

Running on Linux-based Maemo 5 software, and the Maemo open-source community applications, over a powerful 600 MHz ARM Cortex processor and up to 1GB of application memory , the Finnish company will certainly score with this gadget. Take a look: