Monday, September 22, 2008

Drafting a browser

After my latest post about Google Chrome, I was pondering how to use the process separating system on other projects or making a own browser with the same idea. Fortunately I found that there's GtkSocket and GtkPlug. With them you can easily embed other processes on a main process.

So we need a main application, which creates tabs and takes care of handling them. Quite easy job to do. When creating a new tab showing a new GtkSocket inside it. Socket id is passed to a new process, for example by launching a new process with exec and passing socket id (numeric value) as a command line agument. That's about the minimal required functionality for the main process. It just handles tabs and launches other processes.

The client application reads the numeric socket id from it's command line arguments, creates a new GtkPlug with gtk_plug_new (socket id as a parameter). Now it can just draw any Gtk+ widgets on that GtkPlug widget and show them. So now we can draw, let's say, a URL bar and for example WebKit/Gtk on that GtkPlug widget. And let's define some signals that when typing URL on the URL bar the URL will be opened on the WebKit/GTK. Now the client app is ready.

And what do we have now? A main app, which opens tabs, launches a client app and passes GtkSocket id for it. Client shows URL bar and WebKit. The contents of client app is shown inside the main app's tab view. Isn't that now a simple web browser, where every tab is running it's own, separate process? Somebody could now catch the idea and continue working on this kind of approach. And that's not just browsers. The GtkSocket is normat Gtk+ widget, which can be used like any other widget. One could make very interesting apps where one main app embeds other processes inside it and showing their content. Now anybody got some ideas? At least I do...

Wednesday, September 03, 2008

Google Chrome

Recently Google announced their web browser project called Chrome. They also released beta version for Windows. It seems to be a interesting project. Especially when they say that it's released as open source.

The main renderer of Chrome is based on Webkit. Webkit is quite good browser engine used for example by Apple Safari, Nokia S60 web browser and Google Android. On top of that Google has made it's own JavaScript engine, which seems to be faster than any other JavaScript engine on the market.

One good idea on Chrome is that every tab is it's own process. Also JavaScript runs on it's own thread making the web experience more better. Since traditional browser runs all tasks in queue it means that when one task is taking a long time, others must wait for it.

My first impressions about Google Chrome is that it includes great innovations and ideas, but I have also my doubts. There been also criticism about the EULA. What I'm waiting is that other browsers adapts ideas from Google Chrome and so everybody would benefit even if they don't want to use the Google's browser. I'm sure that Mozilla Firefox project will react soon. Better browsing times are about to come...

Friday, August 22, 2008

Ubuntu on Asus EeePC

I installed Ubuntu Eee on my Asus EeePC 900 some time ago and have been using it since then. I really like it. Screen resolution is ok, all my favourite apps are working and I can perform all the task I usually do.

The install process itself was painless, I made a bootable live USB stick from the Ubuntu Eee image, booted from it and installed it. After reboot Ubuntu started, and for example WLAN was working out of the box. First thing I noticed was that the touchpad was unconfigurable. I was unable to run gsynaptics. So I installed kernel and enabled the elantech synaptics driver. Also xorg.conf needed some tweak in order to make gsynaptics to run. Shutdown had also a problem but unloading snd-hda-intel module on halt fix this problem.

Another thing was the sound volume buttons but fortunately there was good instructions on Eee User wiki. Another annoying problem was evolution launching every time when power cord was plugged in. Resolution was to remove /etc/acpi/events/asus-mail. After that there was one more problem: webcam. Resolution was to use ucview and to make some module tweaking.

Now I'm quite satisfied with my configuration. This is way more better than the default distibution. The performance is quite good, and there's enough memory for my use. I didn't even set up a swap partition, however it could be useful in for more powerful use. For light net surfing and desktop use I'll be just fine without swap. I doubt if I'll try another system since I'm too happy now for the Ubuntu.

Friday, July 25, 2008

Asus Eee PC

Recently I visited London. The trip was nice and I enjoyed the atmosphere, nice people and the feel of a big city. However I was lucky enough to get one Asus Eee PC 900 with 8.9" display, 900 MHz CPU, 1 GB memory and 20 GB SSD hard drive. It didn't cost too much, and got even extra warranty. It's UK version so no finnish key layout, and the power plug is also UK so got to purchase also a converter to make it work on european standard outlet.

Now I'm using the default Xandros distribution, got terminal (ctrl+alt+t) and I'm able to use apt-get. Nice system but I think I want more. Next thing is to try Eeebuntu and see if I like it better.

But I'll report more when I know better. Have a great summer...

Monday, July 07, 2008

Some tricks with N810

Recently I got Nokia N810. Of course I installed Handhelds Mojo "grumpy" on it. The installation process was not painless. Some struggling around and it booted to the login prompt. I was wise enought to set up a normal user and a password for it so I was able to login (N810 includes a keyboard, nice).

But that was just not enough. I wanted X. Easiest way seemed to be to compile Xomap package for the grumpy system. For my surprise it was quite easy job, some tweaking of course, but I got X running quite easily.

I got even touchscreen working, but HW keys just didn't want to work. There is quite a same situation, but unfortunately didn't find solution for that. Also mailed a question to the author of the post but got no reply from him.

However I'm quite glad to get this all working (grumpy + Xomap) on N810. It just proves that the Handhelds Mojo project is a piece of great work

Wednesday, May 07, 2008

Mojo on N800

Recently a port of Ubuntu for ARM processors was released. The project is named Mojo, and currently they've released distributions called Frisky (Feisty based) and Grumpy (Gutsy based). The first thought I had was to make it work on a real hardware. This time I chose my Nokia N800 tablet.

At the beginning I made a simple system with debootstrap. I was using a qemu based ARM system to install debootstrap to create the system for a specific directory. For simplicity I put resulted contents from the directory to a MMC card. I just made one EXT3 partition and copied (or really I used tar) everything there. I put the MMC card inside my N800 and used flasher to select boot from MMC. Booted and nothing seems to happen. Weird.

First I thought there's some problem with my system. After a thought find out that my system might boot but it won't show anything on the screen. The solution was to follow instructions how to disable boot splash screen and enable console on framebuffer. Now I was able to boot the device, startup messages from kernel begun to run, and finally the system from the MMC booted and show it's login prompt. Fortunately there was no keyboard available so I was just pressing the enter key to see that system really reacts for something.

Next I'd like to try to make real system working on the device. Meaning X and some apps running. Also want to try this process on my FIC Neo1973. But the greatest thing is that now I can use Ubuntu as my system on the ARM. Previously I was using Debian, but Ubuntu brings some benefit. I will certainly continue to play with these repositories and probably get something nice working...

Sunday, March 09, 2008

Uptime weirdness

Got unusual situation today. I was checking my server uptime because it was going to break 500 days and wanted to celebrate it. One day it was just fine saying:

10:05:53 up 487 days, 23:55, 5 users, load average: 0.08, 0.02, 0.01

I just remembered that the box should have been breaked the record and checked the uptime again and it was saying:

17:02:24 up 10 days, 4:24, 5 users, load average: 0.16, 0.03, 0.01

So what happened? The box have not certainly been rebooted or anything. I've been happily running processes on it daily.

I'm still running old 2.4 kernel series on a faithful Debian sarge installation. A closer investigation showed that those old kernels have a bug which resets uptime after 497 days. It has been luckily fixed on 2.6 series kernels but it won't help me.

P.S. Luckily a couple days ago I got a new computer for development and test purposes. It's not the newest and shiniest one, nor cutting edge, but certainly faster and better than any of my laptops or other computers. It got a fairly ok graphics card (nVidia, and it's proprietary drivers sucks but it's still ok). Mainly I needed support for OpenGL shaders and framebuffer object extension and the nVidia card supports both of them. For now the box is running Ubuntu 7.10 because it's just the best choise at the moment, but will certainly test other distros when I get some time and I don't need it any more as a stable development environment. But I'm again excited to get a new toy, I have been using only laptops for quite a while and a desktop machine is really refreshing extra!

Friday, February 29, 2008

Rooting my NAS

I purchased a Buffalo Linkstation Live NAS. It was at first a nice toy. Then I figured it was running Linux. The adventure begins.

Little search at Google showed that it's possible to gain telnet and root access to the box. I was totally excited to get the root shell prompt on my terminal. This seems to be too good to be true, but suprisingly it was. I was able to get uname and statistics via procfs. Setuped the SSH and was able to login to the box.

Next I installed ipkg system on it using these instructions. I was able to install packages! Installed screen and irssi and in several minutes I was using IRC on the box.

There's a lot of packages available to the device and just can't even imagine what to do next. I have a NAS box, which can be extended to a real server with any applications I want to run. It has a quite a big amount of disc space (500 GB), and it didn't even cost a much. I'm impressed. For people looking a quiet, small and handy server, I can recommend purchasing one of these. I will continue playing with this and will report if there will be some more findings.

Wednesday, February 27, 2008


So the FOSDEM 2008 is now over. Writing down some experiences about it. First of all, there seemed to be a lot of people in there. Their broschyr said there will be 4000+ geeks at the place. But nobody was counting, so the number is just an estimation. However the place was crowded, some lectures was too full, people was just standing like sardines in can. There was space in some places too, but the most popular events was just nightmare.

Janson lecture room

Picked some interesting lectures, such as Clutter, integrating the Web into GTK+ with WebKit, Mozilla Mobile, tangoGPS lighting talk, among other full lectures and lightning talks (15 minutes time limit) which I was watching.

Also spent some time watching the stands. There was many Asus Eee PC's and OLPC (One Laptop Per Child) computers, as well as different embedded devices running free software, for example OpenEmbedded stand was interesting.

Eee PC


It was not only strict business but also fun time, spending nice time at Friday Beer Event at Delirium cafe and GNOME Beer Party on Saturday. Had a change to talk to people in a relaxed environment. Somebody said that the real conference starts when people gets some beer.

But after all met some good people and changed thoughts, talked about different open source related stuff. And I was able to show my demo with FIC Neo1973. The demo itself was not impressive, it was just a Debian etch booting with working X, touch screen and Matchbox window manager. But what makes it great, is the time spent on that: only a single day. I'd probably talk more closely about it and about the progress in this blog.

But I was nice to be there! Thanks to the organizers, all speakers and people I met.

Wednesday, February 06, 2008

Going to Fosdem 2008

I'm going to FOSDEM, the Free and Open Source Software Developers' European Meeting

As said I will be at FOSDEM 2008 in Brussels, Belgium. I'm going there with a co-worker, and our employer, Nomovok, is kindly paying the trip.

I'm quite excited to see other people working on open source projects and talk to them about all kind of open source related things. If you're going to FOSDEM as well and are intrested to talk with me, please contact me beforehand with a email (you're able to see the email in my profile) and let see if we can arrange a meeting.

I probably have my FIC Neo1973 with me so that I can show it for curious people. Also my Nokia N800 will be there. I can also tell about some personal intrests of mine in area of open source. So don't hesitate to contact me. See you at the FOSDEM.

Thursday, January 24, 2008

Running ARM Debian in qemu

I wanted a whole running ARM Linux system, but considered my real ARM devices (for example FIC Neo 1973) too slow and limited for the most tasks I wanted to perform. So had an idea of fully emulated ARM system, running on qemu. Best option for the installable system seemed to be Debian since it had a prebuilt packages and quite easy install system. And of course, I like Debian.

Fortunately I found a good guide for my adventure: First started by getting the latest qemu, and built it for my system. Fine, then installed it and everything seemed good. So continued with the next step: installing Debian to the qemu system. Installer started fine. The installation went fine. Then the first boot and the first problem. For some reason the boot process hanged every time when the system was checking the disc image. The check was forced in first place because the clock of the qemu system was reseted to zero on every boot (back to 1970's) and the system thought that we have been too long without performing the check. Just spent a day trying to solve the issue and googled for solution. The main problem seemed to be qemu but even the newest CVS version didn't help. Finally made a dirty but a working solution: changed disc image parameters with tune2fs so that the image won't be checked any more. Success.

Finally logged to the Debian system and was able to operate as in any other system. I was able to install new packages, build packages and perform other operations. Then I downloaded a third party ARM Linux application which just didn't work. I was unable to execute it. Then figured out something. The kernel which was provided by the tutorial didn't support EABI. I wanted EABI. So I thought that building a own kernel would be nice and easy. Thought wrong.

First I needed cross compiling toolchain for ARM EABI, it was fortunately found from Then I downloaded newest kernel, set up cross compiling and chosen the default versatile kernel configure. And changed it to support EABI. Then built it. Success. Try to boot - and fail. The default versatile configure was not the right one. Since the tutorial didn't bother to provide kernel configuration to build the kernel, I was forced to figure it out myself. Gone through hundreds of different configuration and finally found one which worked almost. It just didn't found my hard disk or the disk image where my Debian installation was. I thought I had everything: PCI (took also some time to figure out that I need support for it) and SCSI disc support, but something just was missing. Hit my head against the wall until figured it out: SCSI low level driver. I had to check it from qemu home page, selected it from the configure and built. Finally a success!

Now everything was working again on my qemu ARM system. The lesson learned: you should always know the platform for which you're building the kernel for. To know all the devices, chips and drivers possibly needed. And the kernel configuration seems to hide some options, making unable to select or even see them, if they depend on other configuration option. Next time I will double check all the device drivers that I really need and study the platform better. No guesses any more. Only cold facts.