I am working under Ankur India for this GSoC, trying to bring easy localization support for programs which do not use gettext. In essence, this means, for Mozilla applications (like Thunderbird, Seamonkey, Firefox), all android applications, it will be easier to make them available to people who want to use it in some other language than English. Initially, the idea is to write a library that allows us to do this easily by performing queries for finding the localized string for a specific locale and making some simple calls to update the translation of a string. This library will then be integrated into Lokalize. The library needs to be written in a reusable way, so I am writing the library in GLib, so that other translation applications, which use C, like gtranslator, can also make use of it for providing localization support for non .po files. The idea is to make the library support file format plugins, or backends. There will be a backend for Mozilla DTD files, one for Mozilla properties files. Both of these are used by applications like Firefox for localization. There will also be backends for stuff like android app string resources, and apple .string files, but for now, the first two backends are the primary targets.
A very long time since my last blog post. This is to inform everyone that NIT Durgapur GLUG is organizing its FOSS festival, Mukti ’12 from February 3 to 5. The fest will be a good learning experience for those starting out with free software, and introduce them to a lot of areas in which they can make a difference. There are beginner as well as intermediate workshops on getting started with KDE development, Android development, internationalization and localization, and documentation. We have organized an overnight hackfest where we will produce lots of code and fix many bugs while having loads of fun and frolic.
I often work on vi, and also do a lot of work through the konsole. At such times, selecting the entire code, copying it, and pasting it on paste.kde.org seems like … uhm… too much work. The plasma pastebin applet offers a nice alternative, it has support for multiple backends(even image uploads). But even then, i have to select the text and drag-drop it on the applet. Most often, its a trouble to do this with text from konsole. Also, its too much work to use a mouse (I know there are people who are as lazy as me, and find typing letters at the keyboard easier than playing with the mouse 🙂 ).
$ git diff | kpaste$ kpaste abc.cpp -x$ kpaste -i -o $ kpaste -l python
1..2..3..testing...testing
^D
git://anongit.kde.org/kpaste.git
I created a hackergotchi for myself in Krita yesterday using the particle brush, and I’m posting this to see how it looks on the planet 😉
As some of you may know, I am working to implement tab grouping in Rekonq using a Panorama view. After so many days of not blogging, I thought I should post an update. I have a screenshot to show. Not very attractive though, looks very very blank, but its still something. At this stage, Rekonq just shows the sessions and thumbnails of the tab – including the deactivated ones. I haven’t been able to find a nice way to show the deactivated sessions – i know it looks clumsy 🙂 Right now I am working on beautifying the UI, using QGraphicsView for it. Any cool UI ideas are welcome. Here’s the screenshot
And here’s how the session file for the same is stored internally
<!DOCTYPE sessionFile>
<sessionFile>
<session title="" active="true">
<tab title="Maths 'N' Tech Club | NIT Durgapur" url="http://localhost/mntc/"/>
<tab title="Fedora Project Homepage" url="http://fedoraproject.org/"/>
<tab title="Downloads" current="true" url="about:downloads"/>
<tab title="Test Page for the Apache HTTP Server on Fedora" url="http://localhost/"/>
</session>
<session title="" current="true">
<tab title="Twitter / Home" url="http://twitter.com/"/>
<tab title="Bookmarks" current="true" url="about:bookmarks"/>
</session>
<session title="" active="true">
<tab title="Planet KDE" current="true" url="http://planetkde.org/"/>
</session>
</sessionFile>
Do send in your awesome ideas/criticism that might help me improve 🙂
I’m writing this to blog about my progress, though there is nothing much spectacular to blog about. One great thing is, a first version of the backend code for session management is in place now. Sadly, there is no UI yet to access it. Now I am working on the UI written using QGraphicsView. Hope I’ll be able to come out with something usable in a week. Also, I and my mentor Pierre Rossi were discussing about storing the session data inside Nepomuk instead of storing them locally. We decided to mark this as a TODO for after the initial commit.
Bye Planet folks! Hope to blog again soon.
I have come up with this model as the solution to the problem of persistent session storage and tab grouping –
Sessions in Rekonq will be of two types – dead sessions and live sessions. Sessions of both kinds will be showed in a unified panorama-view

Let me describe each kind of session in detail –
- Dead sessions – These are displayed as grayed-out in the panorama view. Basically, the dead session views are read-only, so that one can have a look at the tabs in it. These sessions are not yet loaded. When we click on the load button, the session gets loaded in Rekonq and opens up in a new window. Now the dead session becomes a live session.
- Live sessions – These sessions correspond to open windows. When a new window opens, a live session starts. Dead sessions can be loaded to live sessions, whilst creating a window and opening all the tabs of that session in it. Tabs can be closed or drag-dropped in the panorama view between live sessions. Since live sessions can be mapped to windows, any changes in the window affects the live session, and vice-versa. When a window is closed, its live session becomes a dead session. This can also be done through a panorama view. We can also add new live sessions from the panorama view. The sessions that were live when Rekonq was closed are loaded as live sessions automatically when Rekonq starts the next time.
This hybrid system of managing sessions has quite a few advantages over traditional session management like in Kate or Konqueror –
- Tab grouping is made easy. When the tab clutter increases, one can go to the panorama view, create a new session, and drag-drop tabs into it.
- The division of tabs into activities like ‘work’, ‘study’, ‘games’ can take place using sessions, while loading only the ones relevant at a time. Thus memory and bandwidth is saved by not needing to have all tabs open at once.
I was reflecting upon the options I have as to in what manner exactly will I implement tab grouping into Rekonq. I have come up with three possibilities –
- Use the Kate / Konqueror model for sessions. The sessions will be collections of tabs, and will load into separate windows. One must explicitly save a session for the tabs to be remembered for next time. The tabs in the sessions do not have correspondence to the actual tab instances. There will be some added eyecandy to modify the sessions, by providing a panorama view to drag / drop tabs between sessions, or remove tabs, without actually loading the session. I do not feel this is of much use. Here are a few reasons why –
- Being allowed to drag-drop or delete tabs from sessions is very useless without actually opening it.
- The big reason is, the purpose of tab grouping isn’t actually served in this model. Even if I am able to store or load sessions, what do I achieve? The main reason for tab grouping is that a user keeps clicking and surfing at will, opening more and more tabs till he can’t manage them. This is where a web browser differs from a text editor. Changes in it happen dynamically, and the need for grouping is dynamic and instantaneous. The moment I feel that I am having too many tabs, I should be able to move a few of them to another tab group, clearing up the clutter. A user may have his tabs organized under work, play, school, but when one starts browsing, our surfing patterns hardly follows that organization. We click on links here and there, and may soon land up in an article on the lastest android app in market while in the school session. Now, i have no way to clear the clutter of so many tabs. Most I can do is, save the session, close it, then drag its tabs one by one into another session. Seems astoundingly foolish right? I have come to the conclusion that web browsers, being totally different from text editors or other static applications, require dynamic sessions, that is, sessions that are changed on-the-fly and have a direct way to clear the tab clutter.
- The above point brings me to my next option, a similar implementation, but dynamic. Here all sessions will be loaded when the app is loaded. Thus, the sessions stop behaving as sessions, and are better suited to be called tab groups. These tab groups are one per window. We offer the same glossy panorama view to change the tab groups, but here, each tab in the tab group is directly associated with a WebTab instance. That is, since all changes in tabs are immediately stored to the individual tab groups, so each tab in the tab group actually reflects a current tab. Thus, I can now drag/drop tabs between sessions to reduce the clutter, beautifully managing them. Also I do not need to worry about explicitly storing my changes everytime I add a new tab so that I can see it next time I open rekonq.
- The third option is amost like the second one, but allows for multiple tab groups per window. This would make the eye-candly look all the more catchy I suppose, but would cause the session management code to become unnecessarily complex. Also, I need to keep track of detached tabs which will not be visible in the KTabWidget. Every addition of a tab into a window would require a process of selecting an appropriate group first. Not to mention, this would cause huge changes in the codebase.
As has been apparent in my judgement of the three options, I prefer the second one more currently. I will still think on it for some days. In the meanwhile please do put in your valuable suggestions.
I have this habit, or paranoia rather, of not storing my passwords with the browser. I never let the browser remember passwords for me. Maybe this is because a lot of my friends use my laptop at times, and it becomes risky to have autologin on for websites. So whenever I use a browser, the first thing I do is turn off the ‘Offer to store passwords’ option or similar. I was sad that Rekonq, my favourite browser, did not have this feature. So I wrote this patch that adds a setting which allows the user to disable the notification saying "Do you want to store the …" by unchecking a checkbox. Here goes a screenshot –

And finally my dream came true. I am a GSoCer now. Even though it sounds maybe like a GNOME game for soccer, I am going to work under KDE 🙂
My work is for Rekonq, the lightweight browser which is tightly integrated into KDE. It has been two months now since I’ve been using KDE, and it has been ~ 25 days since I wrote my first patch for Rekonq. My idea was original and not already there in the ideas list of KDE. I suggested it on the rekonq mailing list, and it was accepted.
WIll start with the preparations as soon as the exams are over. I’m keeping up with the community in the meantime.
Will come up with details of my project very soon, when my blog is added to planetkde.org. Till then, bye blog. Here is my proposal abstract:
http://www.google-melange.com/gsoc/project/google/gsoc2011/wyuka/12001
And here goes the link to my proposal, in case anyone wants to refer to a sample proposal while participating next time:
http://www.google-melange.com/gsoc/proposal/review/google/gsoc2011/wyuka/1

