Posts Tagged ‘newkde’
New home for my blog
My blog was hosted at a non-for-profit hosting for years. They gave me
an excellent (free) service and never had any issues with my wordpress
installation.
Sadly one day they decided to delete old (unused) accounts, and they
did it with a script, that after detecting an account was not used,
proceeded to delete the account.
My account was flagged incorrectly as inactive. So the script deleted
the account.
I had backups, but as their claimed to have data redundancy and daily
backups, I only did those twice a year.
The worst part. The script had another bug: it also deleted the backups.
There goes my blog. I lost a bunch of posts which I (half) recovered
from google cache. I lost lot of images and the original markdown
source of the posts.
So there goes also my last motivation about administering anything. My
blog, as my email and pictures have done for years, moves to the
cloud.
I am still not 100% convinced with Posterous. But lets give it a try.
Kopete Facebook plugin 0.1.3 released
Available for openSUSE Factory in my home project. I also submitted to the KDE:KDE4:Factory:Desktop project where you may find it built for older releases using a newer KDE.
Changes:
- Some connection fixes
- The idle status icon is now shown
- Basic user info widget (bug #198286)
- Show contact status message! (bug #198284)
- build system improvements
- qjson 0.6.x is now required
Known bugs:
- The plugin crashes when exiting Kopete. Some weird stuff with “myself” contact which seems to be deleted twice
Note:
This plugin is not associated with Facebook in any way.
Facebook on Kopete, take II
Last week I blogged about http://duncan.mac-vicar.com/blog/archives/541, just after I
was able to see my buddies for first time on the screen.
Since then I have made some improvements to message handling and other
code cleanups. The code is now available in a http://github.com/dmacvicar/kopete-facebook at
github.
As KDE’s svn trunk is frozen, I will keep it there for now.
You can get http://software.opensuse.org/search?baseproject=openSUSE%3AFactory&p=1&am… (version 0.1.2). I gave
up trying to build it for openSUSE 11.1, as Kopete API has changed quite
a bit. However the package may build on 11.1 plus the KDE 4.2+
repositories. You need http://software.opensuse.org/search?baseproject=openSUSE%3AFactory&p=1&am… installed (or
-devel package if you want to build it).
Roadmap for next 0.1.3:
Add caching to avoid downloading the pictures every 3 minutes.
More bugfixes
Roadmap for later:
Look into adding , searching, and other stuff.
Be aware. This is weeks-old-code. It has not been tested much and has
lot of debug messages. Use it if you are a early adopter only.
Facebook support: First milestone reached
So, I have been working some weeks on this, and today I reached the first “usable” point. Screenshot:

As you may know, Facebook has a chat service. For me at least is slowly becoming the place where I have more people talking to me, and as you may also guess, the value of social systems is very tied to the number of users.
Sadly, Facebook guys where not smart enough as the Google guys and brought yet another damn protocol to this protocol overpopulated world. Then came the worst part. They announced something that was not there and [promised Jabber support][1]. One year later nothing has yet happened.
For a such popular service, one starts to think whether waiting another year is worth for a protocol that is so popular. As I wanted it myself now, at some point I decided I was willing to implement it even if a Jabber version was available later.
We already have the problem that users expect to see Google talk in the Kopete list, because developers don’t figure out that grandma does not know what Jabber/XMPP is. So a good improvement would be adding the concept of “services” where we could add a protocol by just saying “it is just jabber, but with this server settings, this logo and this name”. That path would allow for a easy move to other XMPP protocols later.
But for Facebook, no more wait. Yesterday I was able to use it for first time to chat, so I am blogging about it.
Next steps:
* Add more error handling
* Fix a bug in the contacts status when they go offline
* Put it into kopete or playground svn
* Make an openSUSE package ![]()
* Cleanup. I started over the testbed plugin and it added some stuff that probably I don’t need
* Proxy support. I coded the engine using [QNetworkAccessManager][2] so it is KDE independent. Only the Kopete plugin is KDE based, so I haven’t looked into proxy support and other stuff
Other stuff with less priority:
* Adding contacts from the client
* Configuration (there is no much to configure)
[1]: http://www.google.com/search?q=facebook+jabber
[2]: http://doc.trolltech.com/qnetworkaccessmanager.html
The module’s info experiment
This experiment is an idea from Stano. When he saw us hacking and trying new approaches for the control center code base (in order to allow a different design) he sent me this ycp snippet.
import "Mode"; Mode::SetMode( "autoinst_config"); string m = (string) WFM::Args(0); string p = (string) WFM::Args(1); y2milestone( "Writing the result of '%1' to '%2'", m, p); any a = WFM::call( m, ["Read"] ); any res = WFM::call( m, ["Summary"] ); y2milestone( "%1", res); SCR::Write( .target.string, p, res);
}
This snippet would called with two parameters, A and B, would run a ycp client in “auto” mode and write a summary of the configuration in file B.
This would allow in the control panel to display “status” information about the modules before launching them.
To test the concept, I hacked a quick YModuleInfoProvider class that hooked into the Qt::Tooltip role of the YQModulesModel. I filled the implementation of this class with a hacky call to yast2, calling the ycp snippet and reading back the temporal file.
Ideally, the status should be shown in the icon itself or in a “Dolphin” like status bar. However, I just wanted to see it, so I put them in tooltips for now (Not that I want to keep them there).
And yes!, it works, you can see the status of some modules just h-overing them with your mouse:



I would like to replace the implementation of YModuleInfoProvider with code using the YaST2 component API instead of an external call, just to see if it is cleaner, faster and whether we have more control. Stano helped me making this snippet work:
using namespace std; int main() { Y2Component *c = Y2ComponentBroker::createServer("wfm"); if ( ! c ) { cout << "error talking to wfm" << endl; return 1; } Y2Component *mode = Y2ComponentBroker::getNamespaceComponent("Mode"); if ( ! mode ) { cout << "error finding component" << endl; return 1; } Y2Namespace *ns = mode->import("Mode"); if ( ! ns ) { cout << "error importing Mode namespace" << endl; return 1; } Y2Function* fnc = ns->createFunctionCall("SetMode", Type::fromSignature("void(string)") ); if ( ! fnc ) { cout << "error calling SetMode" << endl; return 1; } fnc->appendParameter( YCPString( "autoinst_config" ) ); fnc->finishParameters(); fnc->evaluateCall(); cout << "Done call!" << endl; fnc = ns->createFunctionCall("mode", Type::fromSignature("string(void)") ); if ( ! fnc ) { cout << "error calling mode" << endl; return 1; } YCPValue res = fnc->evaluateCall(); cout << res->toString() << endl; return 0; }
However, for this to work, it requires a small bug to be fixed in core. So I guess I will replace the implementations once this patch is in.
Control Center in System Settings?
Comments
After posting A refactoring journey: the control center yesterday, I got some comments quickly.
Of course I got some comments like “The category icons are too small” “Spacing is wrong”. When it was clearly stated at the end of the post:
>Note that none of these screenshots mean “this is how the control center will look”. The focus is still on the infrastructure that enables us to try more radical approaches. For example, the old control center look and feel is trivial to emulate.
However, there was another series of comments:
>Why don’t you add the yast options into the KDE settings?
I think the answer to this question is the same as the inverse. Why should we?
ls /usr/share/applications/YaST2/ | wc -l 85
There are 85 modules in my system. Well, not all visible. I don’t have all available installed either. But, would you like to have suddenly 85 icons in this view?

What do others do?
Now, Marçal Juan comment:
>Just think in Apple and Microsoft approach… it’s all in the “System settings” not two independent apps.
This is simply not the case. I wonder why Marçal thinks they are mixed.
I think there is a simple reason why they are separate. If you had to put so many items, the control center can’t be read by our brain in one shot anymore . “but lets create sub-items””… yeah, and then you are again back in the kcontrol tree times, where finding something was hard if you don’t know at which deep-level it was. Yeah, our readers/commenters solve any usability problem by making things a tree or adding tabs
.
Actually, Apple has a System Preferences panel:

For server related settings, they have a separate console (Still note how User accounts is present on both):

Not only Apple. Marçal is also wrong with Microsoft, which has a control panel:

And also a server console (this time with a completely different look:

Why?
I think the temptation to merge them comes from two sources:
-
The fact that most Linux user tend to mix the server/advanced administration and basic tasks a lot, and therefore they think their usecase is the common one.
-
This makes them think that everyones wants to go trough the basic settings when configuring some advanced service.
-
Actually the last YaST survey revealed that the only tasks an user does often is software management and in second place, network management. All the rest is done seldom.
-
The fact that Linux lacks some basic administration tools upstream or integrated in the desktop, which YaST provides right now.
I think the last two ponts are relevant. The real problem is not whether you have all icons in one control panel, but where are those icons. Is software management a basic task or it goes together with virtualization settings? That is the problem. Windows and Apple provide software management and network management in the basic settings. However, I think this is only a problem for those specific YaST modules that are used to often, and both cases have a solution.
In the case of Software Management, PackageKit already offers basic software management integrated with the desktop. I do have an icon “Add/remove software” in my KDE System Settings (KPackageKit provides it). The case of networking is also solved since long time, and most desktop users configure their network in the system tray with knetworkmanager.
Any other configuration that becomes common for a desktop user has to be integrated with the desktop in the basic settings, or even further, in the right context (for example, enabling sharing a folder by right clicking the folder instead of going to the system settings ).
Right now we have some technical limitations. We can’t just put the YaST modules in system settings without doing some changes in that code, and we can’t offer all functionality so it can be integrated in the right context. But we are moving into that direction, and that really does not means we have to go and put 80 new icons and ruin the KDE4 control center concept or reintroduce hard to remember categories.
We will do some experiments about it anyway.
Update 1: As Stano points out, it may make sense to offer access to YaST in the “Computer Administration” category of the System Settings, not module per module, but as one icon. (then launch YaST control center, or embed it). What we can’t do is to embed the modules themselves in the system settings (we did this in the past and was problematic as modules have wizard semantics).
A refactoring journey: the control center
It is almost Christmas and things are getting more quiet and there is now some time to look at pending TODOs. I mean all those things that did not make into 11.1 because priorities.
## The problem
The Qt control center is an ancient piece of code, and it still is a Qt 3.x application.
You may know how it looks:
![original][12]
We already have a [feature for a reorganization of the control center][7]. [Thomas Göttlicher][15], [Jens Daniel Schmidt][16], [Jörg Kress][14] and [Martin Schmidkunz][16] [worked last year on proposals][8]. I want to leave look and feel out of this post for now. (When it comes to which color to use to paint the walls, everyone has an opinion). I wanted to focus on:
* [The fact that it still is a Qt 3.x][9] application
* The code is not easy to port to Qt 4.x, even more difficult to change the look and feel (which would help for [the feature mentioned above][7] )
The main reason of why the code became so inflexible is the mixing of presentation with data items everywhere. Yes, not only the control center suffers from this problem but also the Qt package selector.
Qt 4.x has, among a lot of unmatched features, the ability to use a [Model/View paradigm][18]. This means, you describe a model, and then you just plug it into a view, and it will be displayed according to the widget’s context, instead of sub classing widgets just to hold data on the user interface.
I have to admit that it is not the first time I look into Qt’s Model/View, but in order to understand it, one needs to dig in some real life problem because it has some concepts like indexes, views, delegates, etc, which start to make sense once one adapts it to the specific problem.
So, my challenge was to add a model architecture to the control center in order to make then trivial to let other people choose the wall color
and also enable other innovations. For example [Stano][19] hacked a ycp script to retrieve summary information from the configuration (I can’t wait to integrate that).
## Step 0. Find out where are we.
Thomas Göttlicher already did [some research on using the KDE4 system-settings style views][11]. This shown that some widgets could be reused (like KCategorizedView), but also showed that pieces like the SystemSettingsModel are too complex for what we need.
## Step 1. Compile old control center on Qt 4.x
I took the old control center, [branched it][10] and started the boring work to getting it to compile with Qt 4.x. This involved setting cmake up as I did not wanted to waste time figuring how to convert an autotools project to Qt 4.x.
In this stage one sees much design decisions that either help or hurt when porting. Also opportunities, for example the control center had its own .ini file parser, which I replaced with the QSettings class. Note, QSettings is there since Qt 3.3.
At the same time I got it compiling in Qt 4.x, I extracted some of the module listing code to an QAbstractItemModel and created a small test program for it that I could run in parallel.
My model could be plugged into a view and display the groups, with one line of code:
![groups model][1]
After getting familiar with the code, and learning it, I decided it was almost impossible to plug my model in the current code. Why did I tried then? Because [reading code is always harder than writing it, therefore there is always a tendency to rewrite from scratch][13], and I wanted to be really sure it was not the “reading code effect”.
## Step 2: start with a cleaner base
I took [Thomas codebase][11] and compiled it. I realized it was easier. I only needed to get rid of the systemsettings code. I only needed the KCategorizedView part, or even a plain QListView if I had the right model.
Once the code was removed, I needed a modules model (analog to the groups model). After writting some code, I felt like I was writing the same thing again: a model that lists what it is in .desktop files. Closed both models and focused on a DesktopFilesModel as a base. Once this was done, the groups and modules model was a few lines of code (mainly setting the right configure time YaST paths). So I had a modules model too:
![groups model][2]
## Step 3: KCategorizedView
This component worked out of the box when I plugged my model:
![one category][3]
Except that it only displayed a hardcoded category. One needs to enhance the model to reply to the CategoryDisplayRole, which required to start thinking better about the structure of the models and add utility methods to query groups for modules given an index and similar methods.
At the same time once you see it on the screen you get a feeling when the view is querying the model (speed and debug lines), which resulted in a basic cache infrastructure for the base .desktop files model.
The result:
![categories][4]
## Step 4: Profit from the new structure
At this point I realized there were too many items on the screen, but also I realized how trivial was to add a docking at the right with the group list, or how trivial it would be to set the proxy model to filter certain groups. Just for playing, I added a search bar:
![search][5]
and then a groups list dock (which you can move around the main window):
![group list][6].
## Now what?
Note that none of these screenshots mean “this is how the control center will look”. The focus is still on the infrastructure that enables us to try more radical approaches. For example, the old control center look and feel is trivial to emulate.
Will it be the old? the new? configurable? We don’t know yet. There is still work to do before we focus on the look and feel.
[1]: http://www.suse.de/~dmacvicar/screenshots/control-center-qt4/1-modulegroupsmo…
[2]: http://www.suse.de/~dmacvicar/screenshots/control-center-qt4/2-modulesmodel.png
[3]: http://www.suse.de/~dmacvicar/screenshots/control-center-qt4/3-onecategory.png
[4]: http://www.suse.de/~dmacvicar/screenshots/control-center-qt4/4-categories.png
[5]: http://www.suse.de/~dmacvicar/screenshots/control-center-qt4/5-searchbar.png
[6]: http://www.suse.de/~dmacvicar/screenshots/control-center-qt4/6-dockgroups.png
[7]: https://features.opensuse.org/?rm=feature_show&id=302306
[8]: http://en.opensuse.org/YaST/Development/New_Control_Center/
[9]: https://features.opensuse.org/?rm=feature_show&id=305550
[10]: http://svn.opensuse.org/svn/yast/branches/tmp/dmacvicar/control-center-qt4/
[11]: http://svn.opensuse.org/svn/yast/branches/tmp/tgoettlicher/yast2cc_rewrite/
[12]: http://www.suse.de/~dmacvicar/screenshots/control-center-qt4/0-original.png
[13]: http://www.joelonsoftware.com/articles/fog0000000069.html
[14]: http://joshs.littlecornerofthe.net/blog/
[15]: http://en.opensuse.org/User:Tgoettlicher
[16]: http://en.opensuse.org/User:Jdsn
[17]: http://en.opensuse.org/User:Mschmidkunz
[18]: http://doc.trolltech.com/4.4/model-view-programming.html
[19]: http://en.opensuse.org/User:Visnov
Extremely easy driver installation
We have something really cool in.
## How it works, usecase and experience.
The usecase. I have a webcam, but it does not work, because it requires the quickcam-kmp-default package. But I don’t know that.


You are in your desktop. You can see in the tray the applet telling you that there are security updates to install.

Notice the tray icon. It went from “There are security updates available” to a “hardware” icon (we will add a more visible notification too).

Now you click on the icon and you see:

You click install, and after 10 seconds quickcam-kmp-default is installed.
### See it live
Do you want to see it live?. I did a recording of the process as a [flash movie][3].
## Background
Since openSUSE 10.1, [ZYpp][5] has the ability to recommend packages based on drivers and other useful system information. Packages can supplement any namespace, which is in turn evaluated at solving time. This allows to automatic select drivers on installation, based on the machine hardware, for example.
You could also plug new hardware, and call
# zypper up
And that would recommend you to install the right drivers.
However this functionality was not used to its own potential. What we really wanted here was to recommend packages when hardware was plugged.
With [PackageKit][4], filling that gap was possible, as we can easily talk to [ZYpp][5] from the desktop over dbus, using an abstracted interface.
So in the last weeks, [Stefan Haas][1] implemented support for this in our PackageKit ZYpp backend. [Thomas Goettlicher][2] added the needed glue in the kupdater applet. That is, listening to added devices events, and calling PackageKit to let ZYpp recommend new hardware.
Yesterday I sat to see it working. Some small one liners prevented it to work, but after some tweaking in the PackageKit backend, it worked really well. Thanks for everyone putting the pieces together.
[1]: http://en.opensuse.org/User:Haass
[2]: http://en.opensuse.org/User:Tgoettlicher
[3]: http://www.suse.de/~dmacvicar/driverinstall/drivers.swf
[4]: http://www.packagekit.org
[5]: http://en.opensuse.org/ZYPP
Welcome 2008
Some random thoughts about the world, and the past and following years.
### Digital society
2007 was quite active on the digital rights topic.
The inability of the industry to catch up with the current society has created a war on digital rights. Software patents on one side. Digital music transformed music labels into mafias and consumers into rival groups. Politicians trying to implement surveillance systems everywhere.
I have the feeling that we will see some progress on the music topic. Record labels will give up, but it will be too late, and if a bunch of major artists start to use some fair system. Something like amiestreet.com or direct selling comes to my mind.
I don’t think something will happen on patents.
It was funny, some weeks ago I got an idea about using gps to associate location to todo items. This plays well with the getting things done methodology where you organize by contexts and not categories. I started prototyping some stuff on android.
Sadly, I found out this simple idea [was patented][gps-todo-patent] by Fujitsu. Not only that. But I found [a program][naggie] which does that, and the website dissapeared. [Another news][place-mail] article about someone researching on the topic and developing a product on that also dissapeared from the map. However, I haven’t yet seen a product from Fujitsu on the topic (the patent is 7 years old). Software patents destroy innovation. Thanks to that stupid patent, you won’t see any product (unless free software) using that.
### The web 2.0
Everybody is sick of the Web 2.0 buzz. The Web 2.0 exists.
It is normal that consultants/analysts start to invent new terms because their business depends on the next “big thing” that will “cut costs” and “save millions” to your company. They repeat the same year after year just replacing the term itself.
However the amount of services on the web is growing really fast, and they are all accessible by really standard protocols. Software is becoming just a support medium and the value is being transfered to services: information, storage, security, etc.
Now, there are new layers over that. Phones with [gps][wikipedia-gps] will bring a new dimension of services based on our location. This is very important. The information we store on the web becomes more relevant if we map it over real-world dimensions: location, time, mood, energy, context. Open source fits here, you can see companies like Google taking advantage of it.
*Question*: How services will affect open source and/or free software itself? Google contributes quite a lot to open source software. But once you don’t distribute the software, you are not forced to publish modifications. Will other companies follow this path?
[Amazon Web Services][aws] is another topic. The way they sell on demand “computing power”, “human processing”, “databases” and “storage” is simply amazing.
I would like to see more about “distributed” environments. I am disappointed on how I have to manage my information having 3 computers and one cell phone. There has to be something better than either being off-line and centralized or being online and ubiquitous (where network is available). I want to be ubiquitous, distributed, fail tolerant, and in a simple, pragmatic way. (I don’t want to setup a cluster on my devices).
What about the bubble?. Yes, there is a bubble. There are a bunch of companies that know what they are doing. And thousands of venture capital groups funding whoolalalhzuzu.com ajax websites which implement a calculator or whatever. Those dying is not a bubble, it is natural selection. Most people already know which ones will die after using them for 2 minutes.
I am really excited about the developments in this area and looking forward what is coming here. The direction is clear.
### Software
+ openSUSE / YaST
I will leave this for a separate post.
+ KDE 4.0
4.0 is being released in a few days and you will see the most brave release of free software ever. A big bunch of new technologies and visions collected, cooked and packed inside a great community. And better, there is still no big place for politics in KDE, but technical arguments and user experience. Not that all desktops could say the same.
### Software Development
Wow, what happened on 2007?
* Software configuration / Version Control
The growing complexity of open source codebases, plus the need to maintain them for enterprise purposes, brought the topic of version control really hard on the blog sphere. Every blog and developer talked about [git][git]. Lot of talk about mercurial and bzr too. 3 version control systems being popular at the same time? The point is that being “distributed” is “the thing”. I personally switched to git, and it solved the “being distributed” part of working with 3 computers in different places. I want to see something like code.google.com with git support.
* Android
Brilliant. I am waiting for the first phone. Some APIs are ugly. But still prettier than [uggly guys][rim] that [reinvent the wheel poorly][bberry-jde], and worse, only on Windows.
Nothing that spectacular on other old topics:
* Java
While Eclipse is a jewel. Sun is getting better but too slow to move. So slow that it is getting boring to watch.
* Ruby
We saw the release of ruby 1.9 on December, a very important milestone. At the same time, JRuby is now fast and very compatible, and other implementations are also very active.
* C++
Even more boring than Java eh?
### Politics
* Chile
The goverment of [Michelle Bachelet][bachelet] whose goverment improvisation has made the country again miss the opportunity to develop quickly. Michelle has no strategy at all, so the hope for 2008 is that his sucking team don’t make more mistakes. The public transport system ( [Transantiago][transantiago] ) has to start working somehow (both in operation and budget), because till now, it is a joke.
The opposition hasn’t a good alternative. Nobody is willing to make the important change: universal *free* and _good_ education, health and social care. Even Michelle, being a socialist, uses the private health and education system.
* Europa
Spain’s election coming. Seems that Zapatero will be reelected, which seems reasonable. I am a little lost with german politics and I feel like living in a fantasy world. Time to change that. Still, Europe’s economy is going good and living here is awesome. I love it.
* USA
Discussions on whether they should teach [non-science][id] on science class?. War. etc. Uhm… was I writing about a middle west country? I am sad, really sad to see a beautiful country being destroyed, destroying, hating and being hated by almost the entire world, and even worse, considered the biggest threat to the rest of the world.
From latimes.com:
>36% of European poll respondents — who come from Italy, France, Germany, Britain, and Spain consider America as the No. 1 danger to world peace. Even 35% of American 16- to 24-year-olds identify their own country as the chief danger to peace.
>The poll was consistent with findings by the Pew Global Attitudes Project, which found that favorable ratings of the U.S. had declined in 26 of 33 countries over the last five years.
>Europeans next concerns are China, 19%; Iran 17%; Iraq 11%; North Korea 9%; Russia 5%.
Elections aren’t this year. Lets see how it goes.
[naggie]: http://www.naggie.com
[place-mail]: http://www.engadget.com/2005/06/09/place-mail-location-sensitive-to-do-list-f…
[plasma-bus]: http://tokoe-kde.blogspot.com/2007/12/never-miss-bus-again-with-plasma.html
[aws]: http://www.amazon.com/gp/browse.html?node=3435361
[wikipedia-gps]: http://en.wikipedia.org/wiki/Global_Positioning_System
[gps-todo-patent]: http://www.google.com/patents?id=9CYSAAAAEBAJ&dq=6680675
[git]: http://git.or.cz/
[rim]: http://www.rim.com/
[bberry-jde]: http://na.blackberry.com/eng/developers/downloads/jde.jsp
[transantiago]: http://en.wikipedia.org/wiki/Transantiago
[bachelet]: http://en.wikipedia.org/wiki/Michelle_Bachelet
[id]: http://en.wikipedia.org/wiki/Intelligent_design
Cool things in a cold day
Nice surprise today:
* ITO time spent on YaST. No success yet with [Wt][4]. It does not provide something like Qt’s QSocketNotifier, or glib’s g_io_add_watch which integrate themselves with the event loop. Did a hack with a standard select and a timeout, did not work. Even worse, Wt crashes on processEvents().
* Will hosted a hack session on Saturday. While I did not get any code done, I got motivated by the Kopete 4.x state to continue working on it at home. Yesterday I commited my chat window participants view code for Kopete. It simplifies the code and the signal battle a lot. I still have to fix some issues.
* The [Android stuff][1] is so cool. Read this post about [Dalvik: how Google routed around Sun's IP-based licensing restrictions on Java ME][5]. The [Activity, Services and Intents][2] model seems natural for other scenarios, not only mobiles.
[1]: http://code.google.com/android/index.html
[2]: http://code.google.com/android/intro/lifecycle.html
[3]: http://code.google.com/android/reference/android/app/Activity.html
[4]: http://www.webtoolkit.eu/wt/
[5]: http://www.betaversion.org/~stefano/linotype/news/110/



