Friday, February 27, 2009

Coding in the cloud: Mozilla Labs Bespin

Bespin is one of the most interesting newborn project at Mozilla Labs:
Bespin is a Mozilla Labs experiment that proposes an open, extensible web-based framework for code editing that aims to increase developer productivity, enable compelling user experiences, and promote the use of open standards.
The idea is simple making coding more natural by separating this action from the heavy and often unnatural environment of the offline IDE.
I mostly code in python and I'm always quite interesting in new IDE projects and willing to try them. As far as I'm concerned I'm not truly satisfied with any of the python IDE available and so get stick with the one coming with the package itself.
To give Bespin a try just go to the project's home page and sign in to have access to the dashboard.
Note that Bespin only works with browsers that support HTML 5 property "Canvas" (this excludes Internet Explorer), have a text rendering API, and support JavaScript.
Browsers that support Bespin:
* Firefox 3.x
* Webkit Nightly Builds (development version of Safari)
* Google Chromium (development version of Chrome)
Right now to start a new project can be a little tricky so just follow the tips here below to get started.
The canonical way to start a new project would be to import your project (or a blank archive) from the dashboard in the following way:

Projects must be hosted on-line and compressed in ZIP or TAR.GZ formats.
What if you haven't any stored project and wanna begin one from scratch? Then follow the next tip:
1. From the Dashboard click on 'SampleProjects'
2. Double click the readme.txt file to enter the Editor.
3. From the command line at the bottom of the Editor run



4. Run "newfile index.html"
5. Run "save index.html"
6. At the top of the screen, next to the logo, click the "Up" icon.
7. You should now see your project, containing the inex.html, in the browser
Bespin is especially focused on online coding and is designed to implement online collaboration on the projects, something maybe like Google Documents. However if you are suspicious about cloud computing in general, or do not feel comfortable to upload your code to the cloud, you can easily install your local server.
Here's how I did this on my laptop running Kubuntu 8.10, KDE 4.2. There are currently only two supported servers: a python server and a java server. I will discuss it setting up the python server because this is the language I use and I want to support.
1. Dowload Bespin source from http://hg.mozilla.org/labs/bespin/summary(check files and then choose the archive you prefer).
2. Extract the folder in your desired location under /home
3. from the top level folder install the required packages for the environment with:


4. After the installation is finished we can configure and start the local server with the following two commands:

If all goes well you should now see something like this on your terminal:


(python)gsr@gsr-laptop:~/Bespin_NimbleNimbus/backend/python$ paver start
—> start
Server starting on localhost:8080


However it's quite probable that you will face some kind of error -at least I did-. Hopefully these should concern silly-and-easy-fixable module not installed. If when you run 'paver start' the terminal shows a long flow of errors, just go to the end of the traceback list and identify the name of the module not installed, then type:



then try again 'paver start' and if there still is a not installed module, just install it by repeating the above mentioned command. I had to do this three times because I missed sqlalchemy-migrate, httplib2 and another one.
Once your server is properly set up just warp to http://localhost:8080 and the Bespin welcome page will show up. You must sign your user in (you have to do it again if you signed in online because now you're on your own server) and then you're ready to go.
To view the list of the available commands just type 'help' in the command line. Please note that the commands vary from those related to the Dashboard and those for the Editor.
Although this project is still on its initial state it's also already usable and if you want try it and give your feedback to the development group you can do it accessing the Google Group here. You should keep in mind that Bespin is under heavy development so new features are continuously added and also the feel and the proceedings can vary quite much in the near future.
If you are thinking about what does Bespin mean, you should try to remember Star Wars The Empire Strikes Back and the gaseous planet of Bespin where the Cloud City were. Here below you can see the mockup of a Bespin logo found in the /mocks directory of the source. I know you'll remember.
Bespin is released under the MPL (Mozilla Public License)

Thursday, February 26, 2009

Bailout calculator

Are you pissed of with bailouts?
Right.org seems to be a lot so they set up a page to tell you why you have to say no to bailouts. They have a lot of resources to bring on their cause and to make adepts and are quite organised for what concerns the marketing and communication aspect.
The web site is very sleek and fully implements tools and tactics to involve he user in the cause.
The starlet of the web site is the Bail Calculator gadget. All you have to do is insert your yearly family income and the size of your family and it calculate your family's portion of the bailout, the total of tax you will pay (over 30 years at 5% interest), the value of your contribute to the bailout in terms of Chevy Aveos, college tuitions, iMacs and vacations. It contains also a visual history of the bailouts from the civil war to nowadays. I won't discuss here the math which it seems far too simplistic, but the result has a certain visual impact and, should you happen to share the cause, you can also use the calculator in your own website.
Before I was speaking of resources and Right.org should have some of that because, apart from the technology behind the website, they launched a competition for people to submit 30 secs videos explaining to Whashington why they don't like bailouts. Prizes are $27,599 for the first place, $2,759 for the second place and $275 Apple Store gift certificates for the 5 runners-up.
Surely bailouts are controversial -at least- yet Right.org has far too a demagogic feel from my point of view. I usually tend to become suspicious with respect to those who deal with -or present- situations in terms of black and white. This is usually the way politicians of every party in every country of the world do and everybody knows they have their own aims
Have a look at the site and let me know what you think, if you share my sensation or you think that maybe I'm a bit to distrustful.

Tuesday, February 24, 2009

Scummvm for Symbian S60v5

On Scummvm forum Anotherguest opened a thread to present his pre-released Scummvm version including an effort for porting the famous emulator to the S60v5 platform from Nokia.
To all those who don't have a clue, Scummvm is the acronym of Script Creation Utility for Maniac Mansion Virtual Machine. Scumm itself is a scripting language developed by Lucasfilm Games to create point-and-clicks games of the sort of Maniac Mansion and the following many award winning games. Scummvm then is a free and open source software project to make a portable SCUMM-engine client which allows many of the SCUMM-engine based games to be played on systems where the original versions will not work like MS Windows, Macintosh OS, Linux, AmigaOS, Palm OS, PocketPC, Dreamcast, PlayStation 2, PlayStation Portable, Nintendo DS, Wii, Symbian (SeriesXX and UIQ), iPhone/iPod Touch.
If you haven't tried it yet, I strongly advise you to give Scummvm a try because -especially if you're in your thirties as I am- the sensation to play again those title made you dream when you were younger and the world had different nuances of color, is priceless. Speaking of price it's worth to know that Scummvm is totally free and -more of that- released under the GPL (General Public License).
Going back to the very subject of this post, Anotherguest has prepared packages for a pre-release version with the 0.13.0 engine. This version, which will soon substitute the current 0.12.0 stable release, includes support for the touch input system thus making the emulator running on the 5800 XM. Several people replied to the announce with report of tests on their devices, questions and suggestions for Anotherguest. He promptly replied and showed interest in going on with the refining of the 5800 XM support. Some issues are already solved, some others still remain as i.e. an unhappy division of the screen with a lot of space allocated to the virtual keyboard.
Anyway I tested the Scummvm subversion myself. I did a lot of digging in my parents' basement, grabbed all the dust covered game boxes I could find and, for each game, transfered the floppies content in a folder and then copied that folder in my games folder of the 5800 XM device. I found that almost all the games I tried work flawlessly. Up to now I tried Maniac Mansion, Zak McKracken (these two extensively), Loom, Monkey Island 1, Monkey Island 2, Lure of the Temptress (this can be legally downloaded for free from the software house website), Space Quest 1 and 2, leisure suit larry 1 and Simon the Sorcer 1 (this doesn't run well on my device as I can't click on the commands and can't open the menu in any way).
I'm already about to finish Maniac Mansion and can't wait for it so I have time to go on with Zak! Is Scummvm making me forget about my XBox360? Not really, yet I dare to say it's a killer application for the new mobile devices. Right now the project it's quite mature and do cast a new light on a world that is now more evergreen than ever.

Sunday, February 15, 2009

BYD e6: Chinese Electric Car Hits Detroit Auto Show

We're knee deep inside a muddy recession and this is not new thing. One among the protagonist of this world wide "event", the car industry is facing critics for harassing the governments to save their day. In the U.S. this is mostly true because the (in)famous bail out to GM. In the EU instead, the European Commission made it clear that aids to European car companies could be designed only in the scope of projects (cars) exploiting new clean non-oil-dependant energy.

They also say that this year's Detroit Auto show isn't that brilliant and several important auto brands are missing (Ferrari, Fiat, Renault, Peugeut, Opel, etc..). They also say that this year's price are cheaper and so is a stronger presence of far east companies.

One Chinese company in particular caught attention because of the car they presented and the claims they issued. BYD (which stands for Build Your Dream) it's a Chinese company which, despite most of us has never heard of it, lists the gigantic score of 7 production sites in China, 10 million square miles of show rooms and offices worldwide and 130 thousands employees.

BYD presented their revolutionary e6 electric car which they claim can run up to 250 miles per charge. This puts e6 a the top of electric cars performance board (should ever exist one :)) leaving behind Ford's long range electric car -scheduled for 2011- of a full 150 miles. The e6 battery pack -which surprisingly is a some sort of old fashioned Fe type- is declared to be capable to be charged up of 50% in ten minutes (by a fast-charge station) allowing a 120 miles travel.

Battery are surely the core aspect of electric car which, thought as the major pro by some -because of the green side- can also be a big drawback or, more metaphorically said, smoke and mirrors. Sceptics argue that the energy used to produce the battery, plus the energy regularly used to charge up the battery plus the one that will be eventually used to dispose of the battery and its elements made the system energy inefficient and not worth of the big green badge lots of people and the media give to electric cars. Not being particularly in love with electric devices, I could argue that having around so many oil fuel powered cars is in its way energy inefficient as it pollutes directly urban areas and basically make people sick (so maybe medical reckonings should be included in the evaluation balance).

Anyway, staying on track, this e6 it's still a concept car, thus not a guarantee of a scheduled production. Maybe it's just evanescent as many other concept cars, maybe it's a big scream to draw attention on another aggressive Chinese competitor, but in any case it's another proof of how alternative energy vehicles (methane, and liquefied petroleum gas first in the row) are taking more and more market share. Not speaking of electrics, I forecast that in ten years the balance we see today between oil-fuel cars and gas cars will be reversed.
What is your opinion on this subject?
If you're interested in checking BYD e6 website you can find it here.
Pictures are from BYD gallery pack

Friday, February 13, 2009

Robots do it better

Last December 2008 IEEE Spectrum published an interesting brief article , called "The Rise of the Machines" by Erico Guizzo, about the world wide penetration of robots in the industry.
It seems that the growth curve for this type of "employment" is quite steep as the robot workers population is expected to rise to 1.2 million by 2011.
The actual situation sees already 1 million robots employed in a wide range of industry realities.

As one could expect the leading countries are Japan, Singapore and South Korea but, quite surprisingly, Europe countries -Germany, Sweden and Italy mainly- keep the pace and the region is that with the highest machine/worker ratio (50/10K).
International Federation of Robotics takes also in consideration  service robots for personal and professional use. The 2008 summary report estimates an increase of 54K new units of professional robots (defense&security, medical, logistic, etc..) for the 2008-2011 period.
Personal use (consumer) robots will grow of about 12.1 million units. Robots belonging to this class are much more commonly spread than the professional and industrial ones. Their field of operation varies from domestic robots (vacuum cleaning, lawn-mowing, window cleaning, and so on) to entertainment and leisure robots (toy robots).
How will the balance of humans and machine influence and shape the increansingly interconnecting relation between orga and mecha? How will our society react to the progressive invasive movement of more and more sophisticated machines in fields that were -and still are- monopoly of humans? It's just behind the corner the day when robots will take care of our elders or disabled people, perform many low and -I foreseen- medium end jobs, look after our children and perform as erotic companions. How will all this influence the human-to-human relations? It's difficult to precisely foreseen such a future but I'm sure machines -not just robots- will continue to change life and society as we know it.
Illustration: Mike Vella

Thursday, February 12, 2009

The Robotic Intelligence

Today's Boing Boing newsletter highlighted an interesting suggestion about the sometimes called theme of "Rise of the Machines".
Boing Boing didn't supplied much information about it so I did a hyper-quick research myself.
In 1997 Hans Moracev , an Austrian born is a research professor at the Robotics Institute of Carnegie Mellon University, wrote a paper about artificial intelligence on the Journal of Evolution and Technology.

"When will computer hardware match the human brain" discusses about how the performance of AI machines tends to improve at the same pace that AI researchers get access to faster hardware. on extrapolation of past trends and on examination of technologies under development it estimates the processing power and memory capacity necessary to match general intellectual performance of the human brain. The conclusion of Moracev is that the required hardware to fulfill such purpose will be available in cheap machines in the 2020s.
Robotics and AI are two very interesting subjects which will have an increasing impact -much more than it's commonly thought- on our lives and our society. Considering the fast and steep improvement of the information technology in the last say 30-40 years and the magnitude of it in the everyday life -especially starting from the time the web began to interconnect with people lives- we can expect that advanced machines will modify the social life the way we know and live today. Machines working in the fields of house keeping, health-care, law enforcement, versatile low profile workers and (maybe) lovers, will be available to the consumer and industry.
Will it be a better world? I tend to say yes because I trust machines more than humans, but will the "rise of the machines" be deprived of dangers? To this I'm a bit concerned. The lack of advance concepts in the legislation field could produce unclear and dangerous situation. We already see this with the Internet and the run for a last-minute legislation effort that, by trying to fix some already accustomed social behaviour (as the concept of a free web environment), produced aberrations like those to limit the file sharing and enforcing the people control by spy-like systems.

Monday, February 9, 2009

Pimp My Widgets 2008

Geeks are crazy, that's no secret.
Guys at Qt Software are as well.
Every year they launch a contest for the best widget made using their wonderful and powerful Qt library. You want to spell Qt "cute" and that's one adjective describing it, but others relevant are powerful, multi platform and versatile.
In the end of this contest the Widget Pimp set up a show to announce the winners.

Here's the video of the 2008 winners.

You can find more information about the winning widgets and download the source code at the contest's web page.

Saturday, February 7, 2009

Since I switched from GNOME to KDE (at the time of the migration from Hardy to Intrepid) my relationship with this desktop manager has always been quite likely to one with a woman. There's passion, bewilderment but also disappointment and sometimes frustration.
Despite this exciting relation, I must admit that KDE is leaping on the curve of stability and usability.
KDE4.1 was very buggy and frustrating but with the fresh new 4.2 version lots of things have greatly improved.
I've never used KDE3 but no one can deny the fact that it took a lot of courage, not speaking of sense of the vision, to jump to this revolutionary version of the desktop manager. It's like KDE wants to say "I can do and look better than OSX!" Maybe today we're not too far from the target...
Part of this is thanks to the Qt library. Despite Trolltech (now Nokia) creature is not so beloved inside the open source community because of its license limitation (which I deem unfair given that the restrictions apply to the commercial software), it has the pros to be really powerful and good looking.
Anyway, by checking the KDE web site I spot this interesting interview of Dario Freddi, a KDE developer and fellow Italian, so I thought to give it a plug here.
Here below it's just an excerpt, you can find the complete interview in English here, and in Italian here.
----------------------- enjoy
Observing your "conversion on the way to Damascus" I ask you what you like of the other Desktop Managers and if you feel that KDE is missing something in respect to them.
Dario: Bearing in mind that the only ones I have actively used for some time are Enlightenment E17 and GNOME, I won't express much on E17. I tried it some time ago, and still today I give it the credit of pushing me to learn the command line, because it was in an early stage of developement at that time. I would like to give it a try today, especially because of the good things they are doing (we'll be able to create plasmoids with QEdje in KDE 4.2), and I'm sure I'll do it when I'll
have time.

Regarding GNOME, it's a difficult question, but the answer is, honestly, that I think that KDE doesn't miss anything that GNOME has. On the contrary, I think that the idea that "GNOME is more usable" is partly wrong because, in this area, KDE is gaining ground. KDE has improved a lot regarding usability and rationalisation of the user interfaces, which was some time ago
GNOME's strong point. We should give credit of this change to the organisation of the community, where there are people working exclusively on these aspects. You can tell me I'm coloured, but at the time being (and I'm talking about KDE 4.2), KDE doesn't have anything to envy GNOME (after all, if I have been converted and I didn't get back there should be a reason! :D).

Thursday, February 5, 2009

My PyQt Scribbles (Python and Qt) #4: Layout Managers (QGridLayout() and more)

Last time I made a calendar, a quite convenient and clean app in just a few lines of code. Despite its elegant look and feel the code was very basic. By the way this isn't something bad, however the widgets arrangement was inelegant and that's something we're going to fix in this installment.
As usual we'll focus only on a few objects in order to get a glimpse of a certain subject without exploring it in depth. Our purpose, at the moment, is to understand the basic concept which enable us to create something functional. In particular we will work only on certain classes and certain members of those classes. After having absorbed the concepts, and with the class reference at hand, you can further experiment and refine the subject of your interest.
Lets then put our hands on the calendar and restructure the widgets arrangement.

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class WizAndChipsCal(QWidget):

        def __init__(self, parent = None):
                QWidget.__init__(self)
                self.setWindowTitle("Wiz and Chips Calendar")
                self.setWindowIcon(QIcon("C:/Python26/PyQt/Icon/date.png"))
                self.setToolTip("Hello to this Wiz and Chips fancy calendar!")                

                self.title = (""+\
                             "Wiz and Chips Pushable Calendar!"+\
                             "")
                self.Label = QLabel(self.title)
                self.Label.setAlignment(Qt.AlignCenter | Qt.AlignJustify)

                self.calendar = QCalendarWidget()
                self.calendar.setGridVisible(1)
                self.calendar.setMinimumHeight(180)
                self.calendar.setMinimumWidth(110)

                self.check1 = QCheckBox("check1")
                self.check2 = QCheckBox("check2")
                self.TextBox = QTextEdit("type something here")
                self.TextBox.setMaximumHeight(50)

                self.dateLabel = QLabel("Date:")
                self.dateLabel.setMaximumWidth(80)
                CurrDate = QDate.currentDate()
                self.date = QDateEdit(CurrDate)
                self.date.setMaximumWidth(80)

                self.CloseButton.setToolTip(""+\
                                            "Press here to Quit"+\
                                            "")
                self.CloseButton.setMaximumSize(50, 25)

                self.infobox = QGroupBox("Info Box")
                self.infobox.setCheckable(1)
                self.infobox.setChecked(0)

                dateLayout = QHBoxLayout()
                dateLayout.addWidget(self.dateLabel)
                dateLayout.addWidget(self.date)
                dateLayout.addSpacing(170)

                GBoxLayout = QVBoxLayout(self.infobox)
                GBoxLayout.setSpacing(1)
                GBoxLayout.addLayout(dateLayout)
                GBoxLayout.addWidget(self.check1)
                GBoxLayout.addWidget(self.check2)
                GBoxLayout.addWidget(self.TextBox)

                Layout = QGridLayout()
                Layout.addWidget(self.Label, 0, 0)
                Layout.addWidget(self.calendar, 1, 0)
                Layout.addWidget(self.CloseButton, 4, 0)
                Layout.addWidget(self.infobox, 3, 0)
                self.setLayout(Layout)
                self.connect(self.CloseButton,
                             SIGNAL("pressed()"),
                             self.close) 

app = QApplication(sys.argv)
main_window = WizAndChipsCal()
main_window.show()
app.exec_()
Now we comment the most important passsages.

class WizAndChipsCal(QWidget):
QWidget() is the base class of all user interface objects. QWidget is the core of the user interface: all the other widget or window classes inherit from it.

self.calendar = QCalendarWidget()
self.calendar.setGridVisible(1)
self.calendar.setMinimumHeight(180)
self.calendar.setMinimumWidth(110)
We begin by creating all the various widgets we need to compose our GUI.
We use the .setMinimumHeight and .setMinimumWidth methods to fix the minimum dimensions that we desire for our calendar widget. These method can hold integers.

self.check1 = QCheckBox("check1")
self.check2 = QCheckBox("check2")
self.TextBox = QTextEdit("type something here")
self.TextBox.setMaximumHeight(50)
We create two check boxes with QcheckBox() class to use them later. We create a box which can be filled of text by the user with QTextEdit() class. For layout convenience we fix the edit box’s maximum height with .setMaximumHeight method.

self.dateLabel = QLabel("Date:")
self.dateLabel.setMaximumWidth(80)
CurrDate = QDate.currentDate()
self.date = QDateEdit(CurrDate)
self.date.setMaximumWidth(80)
Now we create a plain label with QLabel() class and set the label maximum width. At this point we wanna create a date spinbox, an object which shows the date, in a certain format, and that can be managed by the user. The first thing we do is to create an object to hold the current date. .currentDate method, which belong to QDate() class, gets the current date from the system clock.
Having done this we create the date spinbox with the QDateEdit() class and pass it the current date container we created before as argument of the class. At this point we begin to take care of the arrangement of the various widgets inside the parent QWidget window. To reach this general purpose we focus on the layout. In PyQt there are various classes which takes care of laying out the widgets. For exploration’s sake we’ll use three of them here.
self.infobox = QGroupBox("Info Box")
self.infobox.setCheckable(1)
self.infobox.setChecked(0)
QGroupBox class provides a box which contains child widgets. It's an elegant way to organise the space inside a GUI. We call the .setCheckable and set it to true to turn the info box title in a check box. In this way the child widgets are accessible only if the QGroupBox is checked otherwise they're greyed and inaccessible. By default checkable QgroupBox are checked. We don’t want it to be in this state thus we set the boolean parameter of .setChecked method to false.
dateLayout = QHBoxLayout()
dateLayout.addWidget(self.dateLabel)
dateLayout.addWidget(self.date)
dateLayout.addSpacing(170)
We use a specific layout manager to arrange the widgets relevant to the date subject. We want the date spinbox to have a label on its left. This is an horizontal arrangement so we call the QHBoxLayout() class which inherits from QBoxLayout().
We add first the label widget then the date spinbox widget and finally a spacer, by means of .addSpacing method, and givie it a dimension in pixel. We need this spacer because the general layout of the GUI –which we will take care of very soon- will force this widgets to position themselves so to get all the space pre-sized for them by the largest widget in the GUI –which in our case is the calendar itself. The spacer is basically an invisible widget which we can comfortably use to obtain our desired arrangement.

GBoxLayout = QVBoxLayout(self.infobox)
GBoxLayout.setSpacing(1)
GBoxLayout.addLayout(dateLayout)
GBoxLayout.addWidget(self.check1)
GBoxLayout.addWidget(self.check2)
GBoxLayout.addWidget(self.TextBox)
At this point we arrange the full content of the QgroupBox. At first we create a layout and since we want to arrange all the widget vertically we now use the QVBoxLayout. Being a brother or sister of QHBoxLayout, QVBoxLayout provides a vertical layout arrangement for the contained objects.
We want the widgets to occupy the fewest possible space so we call the .setSpacing method set the vertical space between the widgets to the value of 1. Before adding widgets to the layout we add a complete layout. In this way we can nest the horizontal layout which we create before, into the vertical layout. Then we add the remaining widgets to the vertical layout container.

Layout = QGridLayout()
Layout.addWidget(self.Label, 0, 0)
Layout.addWidget(self.calendar, 1, 0)
Layout.addWidget(self.CloseButton, 4, 0)
Layout.addWidget(self.infobox, 3, 0)
self.setLayout(Layout)
At this point we take care of the general GUI layout (without mentioning the underlying main window). To to this we use the QGridLayout() class. QGridLayout() is a class meant to lay out widgets in a grid. It inherits from QLayout class which is the abstract base class of geometry managers. QGridLayout gets the available space (the parent layout or parent widget) and slice it in columns and rows thus forming cells. We can then easily place our widgets in the desired cells in order to structure our GUI space.
After creating the layout we call the .addWidget method to add the widgets to the grid at the desired row and column position. The first parameter of the method is the widget (or layout also) to be added, then we specify the column and row by means of integer numbers. After having finished to position the widgets we call .setLayout with our layout as argument to set the general layout to the parent widget. Here below you can see the result both in Windows XP and in Kubuntu 8.10 with KDE 4.2.



Monday, February 2, 2009

Cool apps for Nokia 5800 XpressMusic mobile phone

Since last Friday I'm a happy owner of a Nokia 5800 mobile phone. This is the so-called Iphone killer made by Nokia. I don't really stick with the definition, especially for the hardware construction (multi touch, and hull:) mainly) and -totally- for the available applications. This said, I cross compared the various touchie phones out there (Iphone, Nokia5800, Samsung Omnia, Blackberry Storm, LG KC910) and discovered that there no one of them that can be defined as superior to the others.
Each of them excels in one or a bunch of features and lacks or it's poor something else. Takes the LG and Nokia in example. The first has a more mature OS, a very good battery and possibly the highest resolution (640x360). The latter has a 8M pixel 1600 Iso camera, HSDPA 7.2 Mbps transfer rate but half the resolution of the Nokia. This is just a rough example and cross comparing the various phones (with price and carrier offers as crucial items) can be quite interesting and useful to chose the device which suits your needs best.
I chose the Nokia because, having and interesting price and a convenient carrier plan, I like it's high resolution display, it's mature OS (I don't wanna have anything to do with Windows Mobile), it's sexy and elegant design, and the reviews about its touch screen input. About this subject I must say that I was a bit biased -that meaning I was scared- about the usability and precision of such an input method. After just 3 days of ownership I must say that, at least on the Nokia 5800 device, this system is awesome. I haven't had any problem with it and my writing is now faster than it was with my previous traditional mobile.
On the application side though I think this Nokia device is at the moment behind some others like of course the Iphone, the G1(which hasn't yet arrived in Italy), all the Windows Mobile phones and, curiously, even the Blackberry Bold and Storm. Just as a nice example there's no Fring available for this phone yet. Things are going to improve in time (and they are) for sure.
In the meantime I found that the Honk Hong web page is giving out some cool free utilities and games. Here below some of the most interesting (at least for western users):
AA Mobile Widget (it shows you the latest financial information)
Mail for Exchange (synchronize your e-mail, contacts, calendars)
Touch Card Match (the classic evergreen game)
Touch Maneuver (a nice ability game)
Touch Piano (a touch screen piano)
Touch Guitar (a touch guitar)
Touch Popper (bust the bubbles!)
Motion Dice Box (play dice with your friends)
To check all the application available just check this page