Planet Imendio

August 30, 2010

Andreas Nilsson

Friends of the Tree website mockup

Every week during the Thunderbird Status Meeting we reward a contributor who have been doing great work on the app recently. A Friend of the Tree.
They get a honorable mention during the call and a sweet t-shirt in the mail, but I feel that’s not enough.
We should put them in the Hall of Fame in 1 mile high LED letters, seen from miles away and stories should be told about them for generations to come. After all, they made a great contribution that will benefit millions of users, all during their spare time!
I’ve put together a mockup of a site that could be fed with a simple rss feed and want some feedback.


svg source

Is it too cute or too little cute? Is it a good idea to begin with? Are there other ways we could highlight our contributors?

by Andreas Nilsson at August 30, 2010 11:34 AM

August 23, 2010

Carlos Garnacho

CSS-like styling for GTK+

Lately, I’ve been intermitently working on the gtk-style-context branch, which is meant to supersede GtkStyle and get rid of all its limitations in creating contemporary UIs, to name a few:

  • Cairo as a first class citizen: This means elements may be rendered on any surface, not only on X resources.
  • No more widget peeping: There is now a GtkWidgetPath abstraction, which fully defines the widget in a styling point of view.
  • Widget is no longer a plain area: Widgets may define named regions, which can be styled independently.
  • Animation support: Theming engines no longer have to hack their way to animate some UI element, there is built in support for animations on state changes.
  • No more detail string: GtkStyleContext may contain several classes, which can be checked by the theming engine.

As a consequence, the GtkRC parser has been replaced as well by a CSS-like parser, the property names aren’t currently fully following the CSS spec (Selectors do), and there are some semantics that don’t apply, but OTOH there is support for symbolic colors. The format is enough for people into web development to get the gist of it:


@named-color: #01a4f9;

/* Set background on GtkCheckButton
* and other types inheriting from
* it
*/
GtkCheckButton {
  background-color: #14a414;
}

/* Theme buttons inside a table,
* not necessarily a direct child
*/
GtkTable GtkButton {
  foreground-color: #f01df4;
  text-color: #f01df4;
}

/* Theme scale widgets that are
* direct children of a GtkTable
*/
GtkTable > GtkScale {
  foreground-color: #01ab39;
}

/* Widget states may be defined */
GtkButton:active {
  background-color: #f01;
}

/* Generic classes may be used as well */
.button:prelight {
  background-color: #10f;
}

/* any widget with this name will be themed */
*#some-widget-name {
  font-color: #e0a;
}

/* This will apply if both states happen on the
* widget, such as a pressed checkbox button with
* the pointer on it.
*/
GtkButton:active:prelight {
  background-color: shade (#f01, 1.3);
}

/* Set bg color on odd rows */
GtkTreeView row:nth-child(even) {
  background-color: #f00f10;
}

/* Theme first notebook tab differently */
GtkNotebook tab:nth-child(first) {
  background-color: @named-color;
}

/* And paint a bit darker if active */
GtkNotebook tab:nth-child(first):active {
  background-color: shade (@named-color, 0.7);
}

/* Animate checkbutton transitions */
GtkCheckButton:active {
  transition: 200ms ease-in-out;
}

If you compile the gtk-style-context branch and put this into ~/.gtk-2.0.css, you should see something like this:
(Disclaimer: this is the default engine, I know it’s ugly, let’s leave art for artists)

At the moment, widgets have been roughly ported to this new code indirectly through making GtkStyle rely on GtkStyleContext, so they could be a lot more talkative about the elements they render and contain. If you’re a theme engine developer try out the GtkThemingEngine API, this is what theming engines must implement and use in order to render UI elements, constructive feedback is most welcome.

by carlosg at August 23, 2010 05:47 PM

August 20, 2010

Tim Janik

30.08.2010 Rapicorn release 10.08.0 available

Rapicorn 10.08.0 is available for download:

    http://rapicorn.org/dist/rapicorn/rapicorn-10.08.0.tar.bz2

Rapicorn is an Experimental UI Toolkit. Most things in a toolkit implementation will benefit from proper application of modern technologies (e.g. pthreads, XCB, Cairo, compositing, IDL, XML notation, path evaluation, DSLs, unit tests, SVG). Rapicorn is developed on this base with the aim to significantly improve developer efficiency and user experience.

This release contains a multitude of new features like Python bindings, an automated test suite, myriads of bug fixes and small improvements.

    Homepage:           http://rapicorn.org/
    Downloads:          http://rapicorn.org/dist/rapicorn/
    Feedback:           http://rapicorn.org/mailman/listinfo/rapicorn-list

Updates in Rapicorn 10.08.0:

  • Introduced Cairo dependency.
  • Introduced C++ TR1 dependency (for shared_ptr, etc).
  • Added $RAPICORN environment variable to control logging and more.
  • Added PLIC, a pluggable IDL compiler.
  • Added Remote Object Programming Extension.
  • Added window and widget addressing functionality.
  • Allow signal disconnections by Id.
  • Added simple expression parser to evaluate property value assignments.
  • Added sample expression evaluator as: ui/tests/sinfextest –shell
  • Added XML UI file error reporting.
  • Changed packing properties into regular Item properties.
  • Merged h/v-scale and -align into Item pack properties.
  • Replaced hfill/vfill in Table by h/v-scale and -align properties.
  • Replaced *_attach in table by Item’s h/v-position and -span properties.
  • Got rid of the packer class entirely.
  • Added testing framework with macros and reference files.
  • Added ‘-x’ to rapidrun to auto-exit.
  • Added ‘–list’ to rapidrun to list gadgets from a GUI file.
  • Provide regular expression parser API in rapicorn-core.
  • Introduced a basic typed value system and model APIs.
  • Started list area/widget development.
  • Optimized resizing performance.
  • Cosmetic fixups in colors and gradients.
  • Implemented horizontal and vertical size groups.
  • Renamed string_to_cescape() and fixed string_to_cquote() quoting.
  • Generate internal C++ bindings (to IDL specifications).
  • Provide a main loop implementation in Python.
  • Generate external Python bindings.
  • Majorly extended test suite.
  • Optimized remote invocations and reference counting.
  • Started migrating interfaces from headers to IDL.
  • Hand optimized threading primitives and main loop handling.
  • Applied fixes for AMD64 compilation. [Stefan Westerfeld]
  • Updates to compile with GCC-4.4.
  • Linker optimizations to improve ELF relocations.
  • Loads of other cleanups and bug fixes.

by Tim Janik at August 20, 2010 09:57 PM

August 17, 2010

Martyn Russell

Tracker: Direct Access branch merged in master

A while back we had this bug from Bastien: 613255 – “Read-only, non-DBus, store access”. For the past 5 or 6 weeks we have been working on this. Initially the idea was just to do direct access, but once we got started, we realised that the libtracker-client API wasn’t really good enough and we would like to extend it. But we didn’t want the old API there either, so we came up with this new library to supersede libtracker-client. For now we package both, but all functions in libtracker-client are marked as deprecated at this point.

So what do we have now? Fundamentally we have ONE API for different backends using different technologies. To summarise:

1. D-Bus (libtracker-bus, backend)
2. Direct Access (libtracker-direct, backend)

D-Bus – Read/Write Access
Depending on the version, we either use FD passing (requires > 1.3.1) to avoid copious memory copies OR we use D-Bus glib marshalling which represents the worst performance you can get from Tracker (though it is still usable).

Direct Access – Read Only Access
This is based on a library we had internally in Tracker called libtracker-data. We merged some things to make this happen (like libtracker-db) but generally, we sit on top of this library in libtracker-direct.

Plugins?
The backends are dynamically loaded at run time depending on the client’s needs (i.e. if you only ever do SELECT type queries, you’ll use the direct-access backend).

How does the API look for libtracker-sparql?
The idea here was to facilitate all the old API needs and some new ones. What we wanted was less API bloat and to incorporate some of the things we had in the code base all spread out in multiple libraries into this libtracker-sparql. These things include:

  • Connections – used in libtracker-client, we wanted some common way to get a connection to Tracker regardless of what backend was in use.
  • Cursors – used in libtracker-db and wanted as a public API for some time, but not possible without WAL (Write Ahead Logging) in SQLite 3.7. Now we share the same API internally and externally.
  • Builder – used in tracker-extract for building SPARQL queries for selecting/inserting data.
  • Utilities – used in tracker-extract, the miners, etc. for escaping text used in SPARQL queries and some other common functionality.

Example
So this is what you might expect with the new API:


TrackerSparqlConnection *connection;
GError *error = NULL;
const gchar *query = "SELECT ?class WHERE { ?class tracker:writeback true }";

connection = tracker_sparql_connection_get (&error);

if (!connection) {
	g_printerr ("%s: %s\n", _("Could not establish a connection to Tracker"), error ? error->message : _("No error given"));
	g_clear_error (&error);
	return;
}

/* The NULL below is the GCancellable */
cursor = tracker_sparql_connection_query (connection, query, NULL, &error);

if (error) {
	g_printerr ("%s, %s\n", _("Could not query classes"), error->message);
	g_error_free (error);
	g_object_unref (connection);
	return;
}

if (!cursor) {
	g_print ("%s\n", _("No classes were found"));
} else {
	while (tracker_sparql_cursor_next (cursor, NULL, NULL)) {
		g_print ("%s\n", tracker_sparql_cursor_get_string (cursor, 1, NULL));
	}

	g_object_unref (cursor);
}

g_object_unref (connection);

So, now we have direct access. I have ported my tracker-needle experimental application to it and it seems faster than tracker-search-tool (which it aims to supersede). I will blog about tracker-needle later, but for now, direct-access is available in master for anyone interested to try it out! This has been a huge team effort with Jürg, Philip and Aleksander Morgado and myself involved. Try it out, any comments about the API are appreciated and it is documented quite nicely too.

by mr at August 17, 2010 05:05 PM

Christian Dywan

Database, delayed loading and dozens of shortcuts

Time for an exciting step ahead, databased backed bookmarks, which brings in completion of bookmarks in the location entry and search in the bookmark panel. On top of that we have dragging of bookmarks into and out of folders.

A new feature is Delayed Pages. If Midori crashes and you open it again, pages will be delayed/ suspended/ frozen and not fully opened until you reload them. This is handy if one website is problematic, so it won't crash or freeze immediately again. Also it accelerates startup because not all pages are loaded into memory at once. The feature can also be enabled by default in Preferences > General > When Midori starts > Show last tabs without loading.

couchsurfing-t.png

Fans of Speed Dial will like the option at the top of the Speed Dial for larger thumbnails. Also you can now have as many shortcuts as you like.

Also worth mentioning are some performance optimisations during page load as well as optimisations in adblock including compatibility improvements.

Two new extensions are shipped by default: 'Minimize New Tabs' and 'Copy Addresses of Tabs'. Have a look in the Extensions panel and try them.

A little goodie that came in last minute is completion of multiple words, for example type "my cat" in the location, and it will match any visited pages or bookmarks with a name such as "my chubby cats" or "my box with cat toys".

So download midori v0.2.7 (745 kB) (MD5) (ChangeLog) already!

Midori Win32 Setup v0.2.6 (10,5 MB)
Midori Win32 Archive v0.2.6 (15,3 MB)

by nospam@example.com (Christian Dywan) at August 17, 2010 01:01 AM

August 16, 2010

Andreas Nilsson

Two cool Linux addons for Thunderbird

Came across two nice addons of late that makes Thunderbird love your Linux system recently.

The first one is the Evolution Mirror extension that makes the appointments and tasks you create in Lightning show up in the GNOME clock applet.

The second is libnotify-mozilla by Ruben Verweij that allows Thunderbird to make use of Ubuntu’s Indicator Applet.

by Andreas Nilsson at August 16, 2010 12:57 PM

August 13, 2010

Sven Herzberg

Two Weeks of Hacking Sapwood

During the past two weeks I was assigned to work on sapwood a little more than usual. My current goal for sapwood is to drop the GDK based rendering (which will disappear from GTK+ 3.0 once Company's rendering-cleanup branch gets merged). The transition towards a cairo-only core of sapwood will also be required in order to properly integrate with Carlos' work on the new GtkThemingEngine API (which is supposed to land in 3.0 as well).

So I spent the last two weeks developing test cases for sapwood's rendering results. After finishing those, the real refactoring started. Right now, the cairo-transition for SapwoodPixmap is almost finished (the part in the theming engine that does the actual drawing).

I also finally got around to refactor the image cropping code (it was actually doing very similar things four times due to copy'n'paste and the short time available when developing this feature).

by nospam@example.com (Sven Herzberg) at August 13, 2010 11:53 AM

August 12, 2010

Kris Rietveld

GUADEC, and the GTK+ rendering-cleanup branch and Mac

Lanedo was so generous again to provide accommodation for GUADEC so I could be around for pretty much the entire week. For the first time in years we had proper space for hacking, so a bunch of my colleagues and me spent most of the week hacking. We also talked with people, honest! Also power was plentiful available (often a problem). In its entirety GUADEC was pretty well arranged this year, thanks to all volunteers involved!

Either way, for most of the week I worked on getting GTK+’s rendering-cleanup branch to work properly with GTK+’s native Mac port. This involved debugging a bunch of evil/nasty clipping issues and hunting for missing cairo_destroy() calls after I figured that that can actually be an issue (on Mac). Result: the rendering-cleanup branch works fine on Mac now. As a second project I got offscreen windows to work in the Mac port, for now only in the rendering-cleanup branch. I hear all of this was merged in master yesterday!

The good part is that most of the rendering code has now been dealt with and doesn’t need much additional work as far I can see now. There’s still enough to do though, should be looking into selection/clipboard support (there’s some patches pending for this), keyboard/input methods, perhaps some of the performance issues people have mentioned (though in general, performance is pretty okay), etc. Ah yea, I must really finish up the CoreText backend for Pango as well before my code for that starts bitrotting…

by kris at August 12, 2010 08:53 PM

July 29, 2010

Tim Janik

29.07.2010 Lanedo at GUADEC

Like every year, the entire Lanedo Crowd is currently attending Guadec. If you’re around as well, we can strongly recommend attending one of the talks we’re giving on:

Feel free to approach us for a chat or for handing over your CV. ;-)

by Tim Janik at July 29, 2010 07:31 AM

July 22, 2010

Andreas Nilsson

Windows Aero UI for Thunderbird

I’ve been working together with Richard Marti of late on bug 569400 to implement Aero glass for the Windows version of Thunderbird, similar to what the Firefox devs are doing for their 4.0 release. This makes things look a lot sweeter, and blend in better with Windows 7.
Since there are several parts and widgets getting touched and that it therefore needs a lot of testing and feedback before we unleash it to the majority of our users, we decided to implement it as a theme before doing any patches for core.

Here is where I need your help. If you’re a Thunderbird user on Windows, download the xpi and take it for a test spin. You’ll need version 3.2 of Thunderbird on order for things to work correctly. Get a nightly build here.
Leave feedback here or on the bug!

by Andreas Nilsson at July 22, 2010 10:50 AM

July 08, 2010

Martyn Russell

Tracker: branches branches branches

Recently, there has been so much work going into Tracker master. For a while now we have been averaging between 1 and 2 branches a week being merged into master. So I thought I would highlight some of the sweet work going into Tracker at the moment:

Dropping libinotify
For some years, we have been using an imported version of libinotify in our source tree to do the things not available in GIO’s monitoring API. One of the main reasons we didn’t move to GIO’s API was that the model we were using didn’t fit the model GIO used. In Tracker, if you monitored a directory and it moved to another location, we moved the monitor to that location. With GIO, if you monitor a directory it doesn’t move, which makes sense. Thanks to Aleksander Morgado, we have now merged his drop-inotify branch into master. It is so nice to be able to remove that imported library now.

D-Bus with file descriptors
We are always trying to reduce the memory footprint of Tracker. Recently Adrien Bustany finished implementing support for DBUS_TYPE_UNIX_FD in Tracker. The nice thing about this, is that we now don’t copy masses of memory from one place to another just for pushing the data between two processes. Adrien and Philip have previously blogged about this, but more recently, Adrien finished support for this by also implementing this for the tracker-miner-fs and tracker-extract communication. Effectively the same data is transported between those as tracker-miner-fs and tracker-store, with the difference that tracker-store also receives file specific information appended to the SPARQL message (like size, modified dates, etc).

To use this you need D-Bus 1.3.1, it is nice to see these sort of performance improvements in Tracker. Great work Adrien thanks!

Direct access
Bastien reported a bug not so long ago about adding support for direct access to the databases via a library API. This week, we started a branch to get this work under way. While we do this, we are considering re-writing the libtracker-client API using Vala and improving the old API substantially.

Git branch management
Due to the high number of branches we create, I decided to do some sort of clean up. I created a script to list all the branches and relevant information about them to be able to email the mailing list and check if everyone was happy with removing old branches. I thought this might be useful to other projects. Here is the script I used:

#!/bin/sh

if ! git rev-parse --git-dir > /dev/null; then
        echo "This is not a git directory"
        exit 1
fi

if test $# -lt 1; then
        remote=origin
else
        remote=$1
fi

git ls-remote $remote | while read LINE; do
        commit=`echo $LINE | sed 's/ .*//'`
        name=`echo $LINE | sed 's/.* //'`

        if [ -z $name ]; then
                continue;
        fi

        case $name in
        refs/heads/master)
                continue
                ;;
        refs/heads/*)
                shortname=`echo $name | sed 's@.*/@@'`
                if ! git log --max-count=1 --pretty=format:"Branch '$shortname' -- last commit was %ar by %an (%h)" $commit 2>/dev/null; then
                        echo
                        echo "Your checkout doesn't contain commit `echo $commit | sed 's/^\(.......\).*/\1/'` for branch $shortname"
                        echo
                        exit 1
                fi
                ;;
        esac
done

This produces output like:

Branch 'album-art-to-libtracker-extract' -- last commit was 3 months ago by Martyn Russell (d1f1384)
Branch 'albumart-quill' -- last commit was 8 months ago by Philip Van Hoof (a397a0f)
Branch 'anonymous-file-nodes' -- last commit was 5 months ago by Carlos Garnacho (60658be)
Branch 'async-queries' -- last commit was 2 months ago by Carlos Garnacho (88358dd)
Branch 'async-queries-due' -- last commit was 10 weeks ago by Jürg Billeter (52634ce)
...

Thanks to Sven Herzberg for some of the improvements to the original script. Most importantly, the use of git ls-remote. This makes sure that local branches are not used which may have been removed in the origin repository.

by mr at July 08, 2010 10:24 AM

June 25, 2010

Tim Janik

25.06.2010 Using distcheck with ccache + colorgcc

Waiting for unit compilations to finish during development, particularly with G++ and heavy optimizations can be quite time consuming. A run of make distcheck escalates the problem, because all files during a dist need to be rebuilt. Small errors triggered late in the dist build might require several time consuming restarts of the build process.

With ccache, a tool exists that can majorly speed up this process. I’ve been using it successfully for several years now. A related development aid is colorgcc which is a colorization wrapper for gcc. This also is under heavy use for my development. It turns out that some tweaks are needed to get it working together with ccache though.

Here’s how to use the tools in combination to speed up regular project builds and also distcheck:

  • Get and install ccache.
    Wrapping compiler invocations with ccache will cache recompilations of the same units. ccache needs a directory to store the cache contents; this defaults to ~/.ccache which might not be the best choice for network homes or encrypted homes. Using /tmp is also suboptimal since it is usually cleaned upon reboots. So I’d recommend to put this into your .bashrc:
    export CCACHE_DIR="/var/tmp/ccache-$USER"
    

    This will retain the compiler cache across reboots in /var/tmp.

  • Get and install colorgcc.
    Then some patching is in order, especially if you use multiple versions of gcc and need ccache integration. Based on colorgcc from Ubuntu-9.10, I’ve prepared a patch for this (it has been sent to Jamie Moyers some while ago) to be found here: http://testbit.eu/~timj/blogstuff/xyv-colorgcc.diff

    To briefly summarize its effects:

    • This allows colorgcc to be used through a bunch of links, e.g. by creating:
      ln -s colorgcc colorg++
      ln -s colorgcc colorgcc-4.4
      ln -s colorgcc colorg++-4.4
      

      Invoking the script through those links will cause it to strip the ‘^color’ prefix and invoke the respective compiler.

    • Using this patch, /usr/bin/ccache will be used to wrap the compiler invocation if it exists.
    • The patch also contains some UTF-8 quotation fixes needed for gcc-4.4 support.
    • Finally, the patch enables colorgcc to correctly deal with g++ error message that span multiple lines (e.g. template error messages).

  • Use colorgcc as a compiler replacement for project builds:
    rm -f config.cache
    ./autogen.sh CC=colorgcc-4.4 CXX=colorg++-4.4
    nice make all -j4
    
  • Use colorgcc as a compiler replacement for distcheck builds:
    CC=colorgcc CXX=colorg++ nice make all distcheck
    

Finally, you might want to tweak the colors of colorgcc’s output which can be adjusted in /etc/colorgcc/colorgccrc. FYI, here’s the color setup I prefer to use in a black terminal window:

  srcColor:             bold white
  introColor:           bold magenta
  warningFileNameColor: cyan
  warningNumberColor:   bold cyan
  warningMessageColor:  yellow
  errorFileNameColor:   cyan
  errorNumberColor:     bold cyan
  errorMessageColor:    bold yellow

UPDATE: Fixed ccache default dir thanks to anonymous.

by Tim Janik at June 25, 2010 05:17 PM

June 11, 2010

Sven Herzberg

A little path bar widget

So, this week I finally decided to implement a path bar widget for one of my pet projects.

There have been some implementations on the net, e.g. a breadcrumb widget with GTK# in C# (download). However, instead of reworking this, I decided to implement such a widget in C from scratch.

This week I developed a prototype path bar widget (which isn't by any means a complete implementation). However, if you think it's useful, feel free to fork the code, you can also provide patches and I will apply them. However, I already merged this code into the project it was developed for, so my fixed are not likely to end up in the prototype repository.

Take a look at the README file to see what it does and what it doesn't do. And here's the video you are looking for:

by nospam@example.com (Sven Herzberg) at June 11, 2010 07:22 PM

June 09, 2010

Carlos Garnacho

Getting multitouch to just work

There are many things going on in this field, from the recent merge of the xi2 branch into GTK+ master (yay!) to the ongoing effort in Xorg to support multitouch devices.

I’ve worked myself in a proposal to the evdev driver so it deals with multitouch devices as a set of XI2 devices (in GTK+ world, this means each finger would be represented by a GdkDevice), only one finger is able to send core events, while the others only get to send XI2 events, this seems pretty much in line with Peter’s thoughts on multitouch support

I also have a few patches in the xi2-playground branch that understand these semantics and basically make multitouch work out of the box.

So, if you have a multitouch device that’s understood by the linux kernel, these are the ingredients:

Voilá! xinput list should tell something like:


⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ N-Trig MultiTouch id=12 [slave pointer (2)]
⎜ ...
⎣ Virtual core keyboard id=3 [master keyboard (2)]
...
∼ N-Trig MultiTouch touchpoint 0 id=13 [floating slave]
∼ N-Trig MultiTouch touchpoint 1 id=14 [floating slave]
∼ N-Trig MultiTouch touchpoint 2 id=15 [floating slave]
∼ N-Trig MultiTouch touchpoint 3 id=16 [floating slave]

And the GTK+ tests in tests/multidevice/ should just work, providing at the same time a single-touch device feeling to applications unaware of XI2 or multiple devices.

Guadec
If you find this subject interesting, don’t miss my guadec talk! where I’ll be talking about multitouch in GTK+ and what applications can do to support it.

by carlosg at June 09, 2010 03:00 PM

May 28, 2010

Andreas Nilsson

Give a talk at FSCONS

The Free Society Conference and Nordic Summit (FSCONS) is being held for the forth time this November here in Gothenburg. The previous years have been really great, with lots of cool participants and and great talks.
This year seems really promising, with a 3d printer that can pretty much build a copy of itself among other things.
Now the organizers are looking for speakers, and it’s time for you to submit your really sweet talk on the amazing thing you’re working on.
They are especially interested in talks around the following subjects: Embedded systems, Infrastructure Monitoring, Makers of the Future, Net Neutrality and Openness, Ethics

Read more here, and don’t wait too long with your proposal!

by Andreas Nilsson at May 28, 2010 02:34 PM

May 24, 2010

Christian Dywan

Frames, finity and fraction

Due to a fairly common crasher related to frames which fail to load, I decided to do a quick follow-up release. There is also a build-fix for API documentation, which didn't work in the last release.

As it is my habbit to always have something small, that makes it worth upgrading in stabilizing releases, today I feature custom number of columns and number of shortcuts in the Speed Dial. I expect a few people with high-resolution screens should like that. Simply click one of the top left labels and type a number in the window shown then.

columncount-t.png

As depending on the icon theme, not everyone saw icons in error pages and the speed dial, I reworked the icon code. Now all icon themes should show 'edit' and 'remove' in Speed Dial shortcuts and icons in error pages.

So download midori v0.2.6 (696 kB) (MD5) (ChangeLog) already!

Midori Win32 Setup v0.2.6 (10,5 MB)
Midori Win32 Archive v0.2.6 (15,3 MB)

by nospam@example.com (Christian Dywan) at May 24, 2010 05:54 PM

May 16, 2010

Christian Dywan

Validation, vending and Vala

Today is a good day for an exciting release. Raise your paws... or hands for celebration, Midori 0.2.5 is out of the door.

Notably visible validation of SSL certificates, which is reflected in yellow or red background in the location. There is more to come, but it is a good step ahead. See bug 168 for further details.

validation-t.png

For Kiosk usage, support has been enhanced. The new command line switches --inactivity-reset and --blocked-uris can be used to reset the session after a period of inactivity and also to restrict the accessible websites to prevent misuse of the Kiosk interface. Feedback in bug 605 is very welcome.

I am happy to say that the Windows support has caught up with the latest changes and Midori builds perfectly for Windows again. Thanks to Peter who worked hard to resolve a number of portability issues and continually provided binaries, all we reached feature parity and all extensions run smoothly. And we even have a proper installer.

win32-small-t.png

A fancy new feature, targetted at those who want to extend Midori, is Vala support for extensions. There are currently no vital parts implemented in Vala except one example extension, and some bits are likely missing, but you can already implement seriously good enhancements in Vala. So anyone interested is welcome to give it a try.

Mouse Gestures now support the right mouse button and this is the default binding. Many users requested this and should hopefully enjoy gesturing a lot in the future.

People who like to surf the web fullscreen may find themselves losing track of time. A solution for this is the new Status Clock extension, which renders a clock in the statusbar.

clock-t.png

Subtly but notably the Speed Dial now supports opening shortcuts with number keys. Now speed dial is even more speedy.

The Network preferences have changed to easily switch between No proxy, Manual proxy server and Automatic detection. This helps usability and facilitiates temporary use of a proxy server.

So download midori v0.2.5 (688 kB) (MD5) (ChangeLog) already!

Windows Setup: Midori Win32 v0.2.5 (10,4 MB)

by nospam@example.com (Christian Dywan) at May 16, 2010 09:19 PM

May 08, 2010

Andreas Nilsson

GNOME 3 video website

Currently in the City of Zaragoza, Spain and we’ve had a great time at the GNOME Marketing Hackfest this week.
The focus have been on the upcoming GNOME 3 release this September and I’ve spent most of the time coming up with materials that GNOME fans across the world can use at conferences and LUG’s when spreading the word about the upcoming release.

One thing we want to do in the following weeks is to put together a website with videos showing the new great things such as the new user experience that the shell is offering and other cool stuff as collaboration features with gedit and Tomboy Online among other things. We also want some basic info about the release with a quick FAQ etc.
In it’s initial state, the website will just show a few videos, but will expand as people put together more videos with their favorite things about GNOME 3.

I’ve put together some mockups of how it could look, and if you’re a web developer with skills to put together things such as microblog feeds, photo feeds etc. and want to help with this, please let me know. Any help with this from people who know what they are doing is highly appreciated. :)


For more mockups and details, see the wiki page.

Many thanks for our sponsors this weeks: Zaragoza Municipality, Aragon Regional Government, Technological Institute of Aragon (ITA), ASOLIF, CESLA and the GNOME Foundation of course!


by Andreas Nilsson at May 08, 2010 10:31 PM

April 27, 2010

Martyn Russell

Lanedo Silver Sponsors of GUADEC

This year Lanedo are proud to be silver sponsors of GUADEC 2010. If you’re interested in sponsoring and want to know how you can, the details are available here

I'm attending GUADEC

by mr at April 27, 2010 03:52 PM

April 23, 2010

Tim Janik

23.04.2010 Doxer release 10.04.0 available

Doxer 10.04.0 is available for download:

    http://rapicorn.org/dist/doxer/doxer-10.04.0.tar.bz2

Doxer is a documentation tool initiated originally for generating source code documentation. This is the first public release of Doxer as a separate package (it has been included in other packages previously).

This release contains a wiki markup parser, a corresponding HTML generator, and a Drupal input format module. The markup syntax is designed to cover the feature set required to write source code documentation and general purpose documents. The parser and HTML generator have a strong focus on robustness to support the full range of user sophistication found on general purpose websites. An extensive test suite accompanies the development.

    Homepage:           http://rapicorn.org/doxer.html
    Download:           http://rapicorn.org/dist/doxer/
    Wiki Markup:        http://rapicorn.org/DoxerMarkup.html
    Feedback:           http://rapicorn.org/mailman/listinfo/rapicorn-list

User visible features in Doxer 10.04.0:

  • Added Doxer wiki markup parser.
  • Added docs/DoxerMarkup.txt to describe the markup.
  • Added HTML 4.01 Transitional generator for wiki markup.
  • Added extensive Doxer wiki markup test suite.
  • Wrapped the wiki markup parser as Drupal 6 input format module.
  • Rewrote documentation extractor (Doxyscan).
  • Started new Doxyscan Html documentation generator.

by Tim Janik at April 23, 2010 12:31 AM

April 19, 2010

Martyn Russell

Lanedo Talks Accepted for GUADEC!

For GUADEC this year, Lanedo have 3 talks accepted:

  • Best Practices in Maintaining Vendor Specific GTK+ Branches
    Submitted by Kris.
  • Multitouching your apps
    Submitted by Carlos (based on the new X input 2 work he has been doing for GTK+).
  • Tracker’s place in the GNOME platform
    Submitted by me.

Looking forward to seeing you all there!

by mr at April 19, 2010 04:45 PM

April 14, 2010

Kris Rietveld

Recent hacking – March 2010

I want to try to keep posting on any hacking I get done, so here we go an update on my post from March 5 (of this year ;).

I managed to clean up my port of the GTK+ Quartz backend to the xi2 branch that I wrote about in my previous “recent hacking” blog post. The patch has been sent off to Carlos Garnacho for some sanity checking. Before or immediately after the xi2 branch will be merged with GTK+ master, this patch will be applied so that the Mac port will continue to work just fine. More work has to be done on the xi2 branch in general to figure out some semantics so that different kinds of multi-touch devices/drivers can be generically supported. The main difference here is that some drivers always have, say, 10 fingers/pointers active, and other drivers add/remove these fingers/pointers on the fly. This discussion will hopefully take place on gtk-devel-list soonish.

Also I continued to work on the CoreText backend. Ran into some trouble figuring out how to implement font matching and fallback fonts. It looks like we will not be able to depend on CoreText to do this for us (the interfaces it exports for this are insufficient to implement a proper Pango backend with), so we get to do it ourselves. I hope to find the time soon to complete this work and push the branch somewhere.

My first cairo patch got accepted! On 64-bit Snow Leopard there were issues with drawing dashed lines in GTK+. Turns out this was caused by the introduction of the new CGFloat types in CoreGraphics. The patch in FreeDesktop bug 25814 that resolves this has been committed now and it looks like other projects using Cairo took advantage of this as well.

Recently I spent time on preparing review of bug 71926. In here, we received a very large contribution that implements bg_pixmap in GtkTreeView (finally!) amongst some other fixes. I have split up the patch into digestible chunks and plan to start processing these soon.

When all above is done I plan to most likely work on moving all my ideas and unfinished patches for GtkTreeView to the live.gnome.org wiki and Bugzilla. Hopefully somebody will find inspiration in there and start hacking and contributing, since I have realized that I cannot do it all by myself and won’t be able to do so in the near future.

by kris at April 14, 2010 09:41 AM

The Hague has a University??

In a blog post it was mentioned that GUADEC will be held at The Hague University this year. I immediately wondered; does The Hague have a University?? Although The Hague is the political capital of the Netherlands, it does not have a University. Looking at the English website of this “University”, they call themselves “The Hague University of applied science”, with “of applied science” in a very tiny font. And that is the correct name, since it is not a regular, real University. Right now they can use the shorter “The Hague University” even though they are not a University because the name University is not protected by law in the Netherlands. In Dutch the name “hogeschool” or HBO is used for this kind of educational institutes, I hear this is similar to “Fachhochschule” in German.

More and more “hogescholen” in the Netherlands are naming themselves Universities, which I think is a shame and misleading. Why misleading? These institutes are not allowed to hand out the academic BSc or MSc degrees, they can only offer “professional” bachelor or master degrees. Some actually offer BSc and MSc education, but they can only do so by using course material of a recognized University that can actually hand out these academic degrees. In this case, you will not receive a BSc or MSc from this “hogeschool”, but from that recognized University. Pure re-sale of education. Things like this are not clearly stated on their website and might be very misleading to prospective foreign students (who will hopefully look more closely to see what kind of degrees are actually offered). Why a shame? It might devaluate the proper academic degrees that people have obtained at a real University because of confusion and fraud.

Most likely this is being caused by the shitty state of education in the Netherlands. Especially at these “universities of applied science” the focus is on making money and not on providing proper education to the students. (Yes, there are real world examples of this). This focus results in appointing leaders that have no clue about teaching, only about making money. Add to this a secondary school system that has been changed twice or thrice in the last 10 years and is still failing, a system wherein Universities are paid by the number of graduated students but not by quality of education and research, and a constant threat of cutting budgets even further, and you have a recipe for failure. The Dutch government has ambitions to offer the best education in the world, but is falling short due to mismanagement across the board.

The good news is that legislation is apparently in the works to protect usage of “universiteit”, “university” and “hogeschool”.

by kris at April 14, 2010 09:13 AM

April 11, 2010

Andreas Nilsson

Hacking furniture

The cat litter box in the hall being the first thing you see when you enter our apartment always bugged us, so we decided to do something about it. We bought a cabinet at a flee market for 20 SEK (about $3 USD). Took it home, made sure the litter box fitted inside it and measured out a hole in the side. Then we used one of these guys to prepare a small hole to fit the jigsaw, sawed up the big hole and used an rasp and sandpaper to finish it up.

step 1 step 2 step 3 step 4 step 5

The cats seems to think it’s ok.

by Andreas Nilsson at April 11, 2010 10:42 PM

April 06, 2010

Sven Herzberg

A tiny helper for your unit testing…

I wanted to get a little closer to the "writing tests first" paradigm. But I realized that it was too painful to execute "make check" (or whatever) after my changes, I decided to develop a graphical front end to the GLib/GTK+ unit testing system: Gutachter

Gutachter displays a test failure

Packages for Fedora 12 are available, for other distrubutions you can kindly ask…

A big Thank You! goes to Andreas, who created the icons for that project quite some time ago (and actually for a different project, but here we go).

Happy using, bug reporting, hacking and happy translating

by nospam@example.com (Sven Herzberg) at April 06, 2010 01:39 PM

Andreas Nilsson

Thunderbird Migration Assistant

In order to ease the migration for current Thunderbird 2 users to Thunderbird 3, Blake, Bryan and myself have been working on a migration assistant that we plan to ship in the upcoming 3.1

migration assistant

Before we merge it in we need your help to run it and try it out.

Windows | Mac OS X | Linux

Please leave feedback on GetSatisfaction or in the comments.

See Blake’s blog post for more info.

by Andreas Nilsson at April 06, 2010 09:54 AM

April 01, 2010

Martyn Russell

Tracker 0.8.0 Finally Released!

So we now have our first stable release of Tracker for a long time! Here is the announcement.

Thanks to everyone that has contributed, tested and been part of making this happen, especially the core team Jürg, Philip, Ivan, Mikael and Carlos.

by mr at April 01, 2010 03:53 PM

Andreas Nilsson

Opening the GNOME Store

[disclaimer, today the Internet sucks, but I'm going to pretend it's not April 1st, because I wanted this blog post out today, so sorry, no pranks in this post]

GNOME Store

GNOME 2.30 was released yesterday. Lots of neat stuff in this release such as neater looking games (thanks to Clutter), support for Iphones (without any need for jailbreaking), better Tomboy notes sync, easier to set up Facebook chat in Empathy etc.

With the 2.30 release, we’re also opening the GNOME Store, where you can get yourself GNOME t-shirts and other gear. Been working on and off on this for quite a while now, so it’s nice to officially declare it as done!
The store currently sports 7 t-shirts and two mugs, but we’re gradually going to expand it and are looking for more sweet designs.

GNOME Store

To celebrate the 2.30 release, we’re going to have some beers tonight at Gnutiken in Gothenburg around 18.00. Be there!

by Andreas Nilsson at April 01, 2010 11:22 AM

March 29, 2010

Mikael Hallendal

New blog

Just realized that I never made a reference to my other blog that I update somewhat more frequently. A friend of mine just complained I never updated my blog anymore and it turned out he was looking at this one.

The new one is at http://simplyhacking.com/

Share This

by Mikael Hallendal at March 29, 2010 06:31 PM

March 25, 2010

Martyn Russell

Tracker Release Candidate 1

0.7.28
Today we released 0.7.28. We are considering this our last unstable release for 0.7 before we do 0.8. So long as there are no major regressions, this time next week, we hope to have our first stable release with the super shiny stuff we have been working on for over 6 months.

Using tracker-sparql
Recently I added support to list classes which we notify of changes in the database. This is generally quite useful and a common question on IRC:

$ tracker-sparql --list-notifies
Notifies: 23
  http://www.semanticdesktop.org/ontologies/2007/08/15/nao#Tag
  http://www.semanticdesktop.org/ontologies/2007/03/22/nco#Contact
  http://www.semanticdesktop.org/ontologies/2007/03/22/nco#IMAccount
  ...

Similarly, I often found myself checking patches and the ontologies used in those patches, so I added a command line switch to search the ontology and to make this generally easier for developers and maintainers:

$ tracker-sparql --search text
Classes: 4
  http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#TextDocument
  http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#PlainTextDocument
  http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#PaginatedTextDocument
  http://www.tracker-project.org/temp/nmm#SynchronizedText
Properties: 5
  http://www.tracker-project.org/ontologies/tracker#fulltextIndexed
  http://www.tracker-project.org/ontologies/tracker#fulltextNoLimit
  http://www.semanticdesktop.org/ontologies/2007/01/19/nie#plainTextContent
  http://www.semanticdesktop.org/ontologies/2007/03/22/nmo#plainTextMessageContent
  http://www.tracker-project.org/temp/scal#textLocation

Using tracker-search
The tracker-search command is really one of the most powerful commands we ship in Tracker. It doesn’t do any more than tracker-sparql, in fact, it uses the same API as tracker-sparql does through libtracker-client. It is really just a convenience tool for those not wanting to have to type the same query into tracker-sparql all the time. You can search for videos, music, music artists, music albums, images, documents, files and folders. It also allows searching in all of those categories (if none are provided on the command line). Recently I fixed a bug which was reported because we returned results for media that was not mounted. So now we show only results which exist and have an –all option.

$ tracker-search --documents sliff
Files: 3
  file:///home/martyn/Tests/TrackerTestData/sloff.txt (urn:uuid:408d5272-26e2-d8f5-e2f3-f323fb9874bc)
  file:///home/martyn/Documents/Gobby/Discussion-Architecture (urn:uuid:58c29f03-4408-1ca4-d909-c02a6a81810d)
  file:///home/martyn/Documents/Reports/bar.txt (urn:uuid:dcc74bdb-a556-e2d6-d5ce-35ea3000a355)

Performance
There have been some seriously good performance increases recently and we have only just started looking into performance and bug fixing. Until recently, we have mostly been adding features.

Packages
People are eager to use Tracker and it is great to see Ubuntu PPA packages showing up. There are also RPMs from Debarshi Ray

Roadmap
So, the Roadmap is mostly done. Next week we will add a few final things internally and we should be about ready.

by mr at March 25, 2010 06:37 PM

March 07, 2010

Christian Dywan

Build fixes, bookmark export and better privacy

This is a stabilization release, focussed on small improvements. Build errors with different GTK+ versions were fixed, accidental middle clicks don't search unless Alt + middle click is used and opening addresses from external applications in combination with multiple browser windows is fixed. Also the completion suggestion window won't overlap underlying windows.
As a small increase in privacy, the micro version and architecture are not anymore included in the identification string.
Bookmarks can now be exported, from the Bookmarks menu, to XBEL.
Scroll keys can now be specified in the Shortcuts extension, to use for instance Vim style keys for scrolling in web pages (which is now the default).

So download midori v0.2.4 (630 kB) (MD5) (ChangeLog) already!
Win32 Binaries: midori Win32 v0.1.8 (7,3 MB)

by nospam@example.com (Christian Dywan) at March 07, 2010 09:54 PM

March 05, 2010

Kris Rietveld

Recent hacking

Over the last week I finally made extensive time for some spare time hacking. I ended up writing a CoreText backend for Pango, which is much needed as the old ATSUI backend that is used on Mac OS X uses the ATSUI API that has been deprecated since 10.5.

While writing this backend I finally got a greater understanding of how Pango works internally. Also I managed to fix the most annoying bug on 64-bit Snow Leopard wherein some ligatures were incorrectly displayed using the wrong glyph (bug 608923).

I hope to be wrapping up development of this new backend soon. Further development and review will be tracked in bug 611943.


Oh yeah, so Lanedo flew all of us to Brussels for FOSDEM this year. (Well actually I went by train. The train was supposed to be hitting 300km/h, but that didn’t really happen, “software issues”, really!). Either way, had lots of time for hacking there as well. With Carlos Garnacho sitting next to me, I managed to port the GTK+ Quartz/Mac OS X backend to his shiny GTK+ xi2 branch in 1.2 days. In the remaining time I looked into getting support for the multitouch trackpads found on all recent Apple laptops going in GTK+/xi2. Even though the branch is called xi2, it is really the GTK+ multi-pointer branch. This last part has been moderately successful. We identified a few kinks in the new API that have to be fixed first. When that has been arranged, it seems well possible to have support for these multitouch trackpads in GTK+ Quartz, and that should be really cool.

When the above mentioned CoreText backend is done, I hope to find the time to at least push the port of GTK+ Quartz to the xi2 branch into the xi2 branch. This means that when the xi2 branch is merged into GTK+ master, the required OS X backend changes will already be included so the backend won’t be broken at that point.

by kris at March 05, 2010 09:55 PM

March 03, 2010

Sven Herzberg

Peer-to-Peer DBus over TCP

When I was searching the web, I didn't find some proper documentation about this, so I started to develop some bits of code to show how a peer-to-peer connection on TCP can be established between a DBusServer and a DBusConnection. With this connection, I can properly invoke methods from remote objects (and with a little bit of avahi-voodoo, clients can automatically connect to each other).

by nospam@example.com (Sven Herzberg) at March 03, 2010 07:26 PM

March 02, 2010

Martyn Russell

Lanedo is hiring!

We at Lanedo are currently looking at hiring people with development experience around GNOME and GTK+ related technologies again.

If you have this and are interested in working for us, please send your CV to jobs at lanedo.com.

by mr at March 02, 2010 04:16 PM

February 24, 2010

Andreas Nilsson

Robots

Robot 1

Robot 2

Robot 3

Drawn with wacom tablet and the amazing MyPaint!

by Andreas Nilsson at February 24, 2010 11:14 AM

February 20, 2010

Christian Dywan

Completion, performance and image blocking

Here we are after an elongated release cycle. The reason for that is notably the refactoring of the completion functionality. The suggestion popup was rewritten to hugely improve completion performance, Startup performance could also be improved a lot. The History panel gained a search entry so it is possible to search the entire history easily.
The panel layout was simplified, with icons without labels on the bottom to save space and make it look a bit leaner.
Adblock gained 'Block image' and 'Block link' menu items, which make it possible to easily block individual images that you don't want to see.
There is a special page 'about:version' now to make it easier to see in what configuration Midori is running.
A new preference 'Preferred languages' should be good news for people speaking multiple languages.
Window raising behaviour was improved, which is important for users with multiple workspaces. Midori will no longer pull existing windows towards the current workspace just to open a new window.
Attaching of the web inspector to the browser window works much better. It is now also always enabled.
The address entry has a 'Paste and proceed' menu item in the context menu now. There is also a 'Close other tabs' menu item when right-clicking on tab labels now.
The cookie manager now allows selecting and deleting multiple cookies at once, which makes removing undesirable items much more convenient.
A number of improvements towards relocatability went in which are needed for Win32. And file existence checks are more portable and faster now.

So download midori v0.2.3 (625 kB) (MD5) (ChangeLog) already!
Win32 Binaries: midori Win32 v0.1.8 (7,3 MB)

by nospam@example.com (Christian Dywan) at February 20, 2010 12:34 PM

February 11, 2010

Martyn Russell

Tracker 0.7.20 Released

Managed to get 0.7.20 out of the door. Not long now before we start 0.8 releases. I want to start doing this within the next few weeks if possible.

Tracker is looking great right now though. The core team has been exemplary in recent weeks.

Roll on 0.8 :)

by mr at February 11, 2010 07:00 PM

Sven Herzberg

First Steps with Tracker

As I‘ve been happily trying out the OpenSuse Build Service, and I wanted to have a presentation about it at the Lanedo apres-conference, I decided to package a recent version of tracker.

I managed to package it within an hour and then decided to need a use-case for these new packages. I picked GNOME Launch Box and after some hacking, I managed to properly replace the application search module by a tracker based module. It was pretty straight-forward to develop that module (after getting a bit into SparQL).

I even ended up doing some more cleanups and finally dropped libgnomeui and libgnomevfs.

I'm really looking forward to replace even more backends with tracker-based ones.

by nospam@example.com (Sven Herzberg) at February 11, 2010 01:43 PM

FOSDEM 2010

Last weekend Lanedo brought its hackers to Brussels, mostly for attending FOSDEM. We‘ve had a delicious joint dinner on Friday evening and attended the conference on Saturday. Just as in the past, the conference has been nice with all the people around and all the good talks.

I mostly spent time in the GNOME presentation room and the hackers room upstairs. Even though I decided for a pet project to be developed during the weekend (some random widget that will be developed later), I ended up doing something completely different (will blog about it later).

On Monday we‘ve had a nice apres-conf with the Lanedians at the hotel. We got a presentation of the first year of Lanedo in the business and a nice presentation about future plans of the company.

After flying back with Tim and Martyn, we realized how warm Brussels actually was. Hamburg was a lot colder, totally snowy, windy and the footways are icy and really dangerous.

In the afternoon I will visit the new Lanedo office for the first time.

by nospam@example.com (Sven Herzberg) at February 11, 2010 01:18 PM

February 05, 2010

Martyn Russell

Lanedo going to FOSDEM

This year we are sending everyone in Lanedo over to Brussels for FOSDEM. Looking forward to meeting up with old friends. It has been a few years since I last made the trip.

Most of us will be there by Friday evening in time to attend the beer event. We hope to see you there, should be good fun!

by mr at February 05, 2010 10:53 AM

January 29, 2010

Carlos Garnacho

Multi-touch support in Linux/Xorg/GTK+

So, for the first time ever (to my knowledge), the full multi-touch stack working on Linux:

Wee, multi-touch

This video features:

In my opinion, this is a quite important milestone, which reflects much work done lately in this camp, and from now on things can only get better!

And of course,

by carlosg at January 29, 2010 12:47 AM

December 22, 2009

Christian Dywan

Back from the WebKitGTK+ hackfest

I have been very busy during the last week, during the WebKitGTK+ Hackfest in A Coruña kindly made possible by Igalia, Collabora and the GNOME Foundation. The Igalia Office is a very nice place to be productive and relaxed. It was an exciting time and it was nice to be able to discuss and exchange ideas in-between lots of hacking.
I had the chance to see Xan, Gustavo, Benjamin and Reinout again while having the chance to meet Alejandro, Philippe, Behdad, Evan and Martin.
Special thanks to Xabier who picked me up from the airport and brought me back on the way home.

Now to the actual work on WebKitGTK+ that I've been doing.
- Asynchronous downloading with WebKitDownload. It was possible before but mostly coincidentally, and I updated a unit test to take it into account.
- Proxy handling is up to applications. After a discussion with Dan and others I filed bug in libsoup for supporting http_proxy by default.
- Finally Cache control API has landed, thanks to Alejandro. Being in the same room allowed for discussing some unclear aspects.
- groups are a concept in WebKit to group views, or tabs, within an application. They are important to let us have visited link handling, support for user style sheets and scripts (those are supported by Midori already, but through a JavaScript workaround) and DOM storage handling. I didn't have time to finish my patch, I will try to do that soon.
- I also worked on custom file choosing from applications. So that you can override WebKitGTK+'s file chooser and for instance use the same folder in all file choosers and customize it to your needs.
- I made spell check actually usable by fixing replacing the wrong word with the chosen suggestion.
- I worked on making spell check work on un-selected text the same way it works in for example AbiWord. WebCore expects a selection due to differences in behaviour on Macs.
- Small improvements to context menus.
- A new function to execute commands, for example to format text, and to track formatting, in rich text areas.
- I deprecated the old loading signals and updated the unit tests to use load-status.

During this time I hardly found room for Midori. Fortunately Alex filled in for me and worked on a number of performance tweaks and improvements to web cache and advertisement blocking.

Note Mario took pictures in the office. If you look hard you can spot me there.

Yours,
Christian

by nospam@example.com (Christian Dywan) at December 22, 2009 09:51 AM

December 15, 2009

Christian Dywan

Bookmarks, bright paint and build fixes

Time for Midori 0.2.2.

Bookmarks can be imported from Opera, Arora, Kazehakase, Epiphany and other browser using XBEL. The XBEL support was improved in terms of performance and compatibility with other applications.

Colourful Tabs now work in combination with the Tab Panel. Delete Private data includes Web Cache which it didn't before. And if you have a small screen or mobile device, Open panels in separate windows can be useful. Correct ordering of History and Trash were fixed. The Shortcuts dialogue display issues were fixed.

The options 'Show in toolbar' and 'Open as web app' were implemented for bookmarks. So you can selectively decide what bookmarks or folders to have in the bookmarkbar. And if you mark them as 'web app' bookmarks open in a separate process.

Several improvements related to portability and compatibility were applied, for Hildon and Win32. Build fixes for certain Glib and GTK+ versions were applied. libnotify is now a build-time dependency.

Incidentally Midori is available for the N900 in testing repositories, albeit it still needs some work, and Midori for Win32 may be updated soon once problems with extensions are sorted out.

So download midori v0.2.2 (590 kB) (MD5) (ChangeLog) already!
Win32 Binaries: midori Win32 v0.1.8 (7,3 MB)

by nospam@example.com (Christian Dywan) at December 15, 2009 10:11 PM

December 07, 2009

Kris Rietveld

Seems like a waste of energy

Anyone seen the new “fading” that happens on the Google frontpage as of a few days? The only use I can think of is that it is utterly distracting, other than that it seems completely useless. Also, this uses up a lot of unneeded CPU cycles all over the world, a bit contradicting from a company that also tries to be very green[1].

Either way, its annoying me and I would love to turn it off, but there seems to be no way to do that easily. And no, I do not want to patch my browser, install an extension or whatever.

[1] http://www.google.com/corporate/green/

by kris at December 07, 2009 01:15 PM

November 13, 2009

Christian Dywan

Web Cache, Weird Hotkeys, Window Opening

We are approaching version 0.2.1. A great lot of polishing went into this release. Mouse gestures are fixed, linking with gold is supported, the navigation toolbar is hidden in fullscreen and the preference dialogue was tweaked a little.
You may notice that opening of new windows is incredibly fast and startup of Midori is faster. Hotkeys involving Tab or single characters are supported now. Terminating Midori with Unix signals won't trigger the crash dialogue anymore (a real crash will).
We have a Web Cache extension and a Tab History list now, both incredibly nice additions. Also form history was improved, it works with forms where it didn't before and saves values to disk so it works after closing Midori in-between.
Here and there lots of changes are coming towards Hildon/ Fremantle support. It is not yet completely done but you may see a proper Midori on the N900 with the next release.

So download midori v0.2.1 (580 kB) (MD5) (ChangeLog) already!
Win32 Binaries: midori Win32 v0.1.8 (7,3 MB)

by nospam@example.com (Christian Dywan) at November 13, 2009 11:30 PM

Andreas Nilsson

Painting the search

One of the cool things I like about the upcoming Thunderbird 3.0 is that it’s now really easy to find the phone number to that dude your friend e-mailed you a month ago, or to track down who it was that arranged the Christmas concert your choir attended three years ago. This is thanks to the new search function, called Gloda. I got the opportunity to help out with the design of the UI stuff for this, so I wanted to highlight some parts of the design process.

The filters

The early versions of Gloda put a lot of emphasis on the filters that further let you drill down your results. Actually, it had so much emphasis on them that the poor search results got put away at the bottom of the screen. It was a bit tricky finding them there, witch is unfortunate for a search interface.

The solution was a sidebar that clearly put apart filters and results and we were able to cut down the amount of text used by turning some of the true/false switches into the more human-readable (and space saving) check-boxes. We also merged all the to:s and from:s to just People among other things.

The style for the button widgets in the sidebar was a hard decision to make. While they are clearly different in style from the other buttons used in Thunderbird (and on the rest of the desktop), they also have less of a tendency to take attention away from the more important search results, and in this case, that’s a good thing.

The search box

To begin with, the gloda search box was a separate box from the old filtering box. We thought about dealing with this putting the filter box just above the message header pane, but because this would result in showing fewer headers we settled on a approach where we merged the two search fields into one and in the end. Thinking about it some more, it really makes sense, since it’s just about finding things, regardless how things work under the hood.

Timeline

The timeline allows you to see where in time your messages live and hovering a filter in the sidebar highlight where in time that filter applies. We initially discussed showing this in the sidebar, but due to the horizontal space constrains there, we decided to put it in the search results pane. The timeline is hidden by default so it won’t get in the way of the search results.

Looking ahead
There is still lots of improvements that can be made and it would be great to hear how the new search works for you, your friends and relatives.

Get Beta4 or grab the upcoming RC1 when it comes out and try it out!

by Andreas Nilsson at November 13, 2009 12:59 PM

November 05, 2009

Kris Rietveld

Taking on a new challenge

During my graduation a new opportunity popped up on my path. After long contemplation I decided to take it on. Since October 1st, I am a PhD student in the Computer Systems group at LIACS, Leiden University. Under Professor Wijshoff I will be working on databases and compiler optimizations. For most of our implementation work we are using LLVM, which is incredibly nice to work with and its future is looking very promising. Exciting times.

I also remain associated with Lanedo, providing expert help and advice.

by kris at November 05, 2009 08:04 AM

October 30, 2009

Sven Herzberg

Time, Time Zone and the total mess… (continued)

This blog post is intended to be a reply containing the information that I would have needed abut half a year ago:


  1. as Jürg has correctly pointed out: gmtime() would have helped me a lot (but isn't portable)

  2. as I realized during the last week, replacing mktime() with timegm() would have properly helped, too



Going along with timegm() also yields exactly the results that I expected. This makes things a little easier as all the times in my application are UTC times and will properly get converted into local times when using… It also allows things to become a little easier as I can assume that all times in my application are UTC times.

So right now, I'm trying to get the g_timegm() patch into glib, so there is a portable, threadsafe (as in “does neither modify your environment variables nor use static variables”) implementation people can use in their applications.

by nospam@example.com (Sven Herzberg) at October 30, 2009 03:56 PM

October 16, 2009

Christian Dywan

Element blocking, form history and kinetic scrolling

Fasten your seatbelts, Midori 0.2.0 is there. Adblock was improved a lot, it works with any WebKitGTK+ version, has an improved interface, reads AdblockPlus/ Easylist filters and supports element blocking now. Thanks to a contributed scrolling widget we have kinetic drag scrolling, enabled on touchscreen devices (gtk-touchscreen-mode. Two new extensions, namely DNS prefetching and form history, could just be the very reason for those who don't use Midori yet, to switch. Smaller issues were also improved, such as more icons of web pages are recognized, mailto: links work as expected and when switching a tab back and forth Midori remembers what you were typing.

So download midori v0.2.0 (556 kB) (MD5) (ChangeLog) already!
Win32 Binaries: midori Win32 v0.1.8 (7,3 MB)

by nospam@example.com (Christian Dywan) at October 16, 2009 01:04 AM

October 09, 2009

Carlos Garnacho

HP stands for “hijo de puta”

Ok, next blog post was supposed to be about multitouch and such as I promised, but that will have to wait a bit, let’s see why:

Today’s history is about N-trig, HP, and lots of idiotic behavior around. In order to have a better insight about multitouch, and seeing that the Thinkpad was aging, I decided to get a HP Touchsmart TX2 tablet. All in all, a nice computer, quite better than the old one, and there has been work lately on getting the N-Trig multitouch+stylus device working on linux, all fine! but wait…

WTF #1 (N-Trig)
After I started experimenting with the Linux multitouch input interface, I promptly realized I wasn’t getting multitouch events at all, why? turns out the N-Trig device had a firmware meant for Vista, and that I should install Windows 7 drivers in order to get the newer firmware that would allow multitouch events.

Yes, right, drivers and firmware are bundled in a single installer, so when you install such thing you must plug your laptop, remove it from the expansion base and cross your fingers (away from the screen of course), could something go wrong? of course, and it did for me, leaving me with a “N-Trig hardware not detected” message whenever I try to reinstall or uninstall the driver, so no reflashing will happen, leaving the touchscreen completely unusable under any OS.

In conclusion: Hardware manufacturers should stay away from hardware unless they hold a soldering iron, seriously, leave software to others.

WTF #2 (HP)
After this, the only feeling of relief I had was due to the laptop being under warranty, easy, ain’t it? It isn’t. After several long calls to their customer service, they still insist that I must purchase a recovery kit DVD set (I wiped the recovery partition out, no DVDs were shipped with the laptop) for 40€, so they can check remotely themselves (eek) that it’s actually a hardware issue. There are several problems with this:

  • According to Spanish law, enjoying any product warranty must imply no cost at all to the customer. I told them so and they dared me to sue them, I’m already looking into doing that.
  • They stated that they can only support a computer warranty with the pre-installed OS. However, in the booklet shipped with the laptop, it is mentioned that they don’t guarantee at all any shipped software. They’re just supposed to offer limited technical support the first 90 days (which already expired).

I’m currently trying to bypass phone customer service with the e-mail one, they at least seem more indifferent to me having other OSs, let’s see if I succeed.

In conclusion: looks like HP customer service’s only target is to cause grief and frustration, you don’t only deserve being sued, you deserve to die young, in pain and alone.

</rant>

XInput2 GTK+
Sadly the only thing preventing me from sending a preliminar patch is polishing XInput 1 support, it was mostly readapted to GdkDeviceManager and the event handling refactor, but there are some glitches here and there. All this is now stalled by having the tablet functionality broken, if anyone wants to pick this up, please tell me (garnacho at #gtk+, etc) and I’ll try to help you through the code.

Likewise, non-X11 backends are completely untamed land, these need readapting to GdkDeviceManager and _gdk_windowing_* API changes, contributions there are more than welcome.

by carlosg at October 09, 2009 04:05 PM

October 08, 2009

Martyn Russell

Hiring Christian Kellner

More recently we have been looking into hiring more developers/managers and we managed to entice Christian Kellner into the company. We are thrilled to have him work for us. Welcome Christian!

We have received many requests for work and we are still processing those. If we haven’t got back to you yet, we will. Thank you everyone who applied! :)

by mr at October 08, 2009 01:56 PM

October 07, 2009

Martyn Russell

Tracker + Totem

Bastien has been complaining that the Tracker plugin for Totem doesn’t work any more since 0.6. So I decided to see how quickly I could update it today. All in all, it only took me a few hours and here it is. You will have to excuse the crappy file naming and video tests I have to play with – normal users probably title these a bit better I think :)

On another note, we released 0.7.1 on Friday gone with some really nice fixes since the first release. We plan on doing another release this Friday too.

by mr at October 07, 2009 03:21 PM

September 30, 2009

Martyn Russell

Tracker 0.7 Released!

Finally it was released and announced last Friday.

As part of this work we added an applet called tracker-search-bar which is just a quick way to access your content.

Here is a video of Tracker search bar in action

So now developers can start getting stuck in!

by mr at September 30, 2009 12:56 PM

September 24, 2009

Kris Rietveld

Privacy took another hit this week

With the introduction of obligatory finger prints in Dutch passports this week, privacy has taken another hit. When applying for a new passport (or identity card), it will be mandatory to provide four finger prints. Two of these will end up in the RFID chip in the travel document. This is due to EU legislation and will be implemented in all European countries.

As an added bonus, all Dutch finger prints will be stored in a central database, accessible by the Police. Scary, considering that the Netherlands has 12 times as much telephone taps on its inhabitants compared to the United States. It has to be noted that the EU legislation does not require this at all!

For a few years now, I have been refusing the enter the United States. Main reason: you are mandated to supply all 10 finger prints at the border. You can easily choose to not enter the US anymore. When your own country starts implemented such unnecessary rules, it becomes much harder. Adults are required to carry ID. You need an ID for getting a job, a house, an Internet connection, almost everything you need in life.

Many people will say: “Who cares? You have nothing to hide, do you?”. Sure you do, I don’t know much people who would write their credit card credentials on their front door, for everybody to read. But this is not the point, it gets scary once the data collected will be used against you. Fraud with finger prints is absolutely not unheard of, the CCC already researched this in 2004. Identity theft will become much easier, since finger prints are stored in the RFID it is easily read out wirelessly. These can then subsequently be faked. People usually try to find a balance between privacy and safety for these kind of things. Since many highly value safety, they have no problem to turn in some of their privacy. The problem with finger prints is that it provides absolutely no safety at all.

An interesting remark I found on this was about access verification based on finger prints. Now that you have to carry your ID with you, with the finger prints on the RFID, you basically always carry your “password” with you. Free to read out from 5 to 100 meters. We can be pretty sure the encryption scheme for passports will be hacked, if it has not been hacked already.

Fortunately, I got a new identity card for travel in Europe last Summer, so I should be “safe” for another 4.7 years…

by kris at September 24, 2009 09:46 AM

September 23, 2009

Martyn Russell

Lanedo is hiring!

We at Lanedo are currently looking at hiring people with development experience around GNOME, GTK+, X11 and related technologies. We are also looking for people with project management experience in this area.

If you have this and are interested in working for us, please send your CV to info at lanedo.com.

by mr at September 23, 2009 02:04 PM

September 18, 2009

Carlos Garnacho

On Tracker stuff

Seeing that Martyn has updated his blog with some sweet tracker info, I figured I could do the same :)

The main feature I’ve been last working on (together with Martyn) is libtracker-miner, Which will ease the creation of data miners for tracker-store (that is, objects that extract useful info from applications and such and transform it into SPARQL, which is pushed into tracker-store).

The idea behind this is that one can develop both independent miners and plugins for the most popular applications which translate data to something Tracker can understand by implementing the TrackerMiner object.

This object also implements control logic, so the control of all available miners can be reduced to a single point, there is also a reworked tracker-status-icon which does precisely this, this is how it currently looks like:

There is also a TrackerMinerFS base class, which eases directory crawling, monitoring and other filesystem features. This is the base object for both applications and files miners.

XInput2 + GTK+
There’s much progress going on here, I empirically suck at blogging, but I promise I’ll make an update about this soon :)

by carlosg at September 18, 2009 01:18 PM

Martyn Russell

Tracker Update

libtracker-miner

So Carlos and I have been working on libtracker-miner for the last few months. Since tracker-store (formerly known as trackerd) is now handling all reads/writes from/to database and doing it much faster than ever before with a much more expressive language to query with (SPARQL), we had to merge the old tracker-indexer and parts of trackerd from the 0.6 branch into one binary that could crawl the file system, insert file specific metadata and call tracker-extract for file type metadata (for example: none “file” data, but actually data like image height, width, etc.).

As we had to do this anyway, we took the opportunity to refactor the parts we were unhappy with and to make libtracker-miner a library which other “data miners” could use. This gives the following things:

  • DBus integration for free
  • An API to find other miners both available and running
  • An API to get/set status, progress, name and description for each miner
  • An API to pause/resume each miner
  • Signals to know when all miners or specific miners start/stop/pause/resume/error/progress.

More recently, Adrien Bustany has been working on “bridges”, which in fact are the same principle, they are miners of data but for web applications like:

  • Facebook
  • Flickr
  • Twitter
  • etc.

We are working together to integrate this into the “miner” framework we already have set up in master right now and it is quite exciting to see integration in other areas than just desktop applications.

Additionally, Philip is making Evolution use the same miner API so we will have support for 3 miners as standard out of the box for:

  • Email data
  • File data
  • Application data

tracker-status-icon

Formerly known as tracker-applet, this has been refactored by Carlos recently to work with the new miner API too, so now you can see (much like the network manager) a list of miners and their state/progress. It also allows pausing/resuming of ALL or single miners at a time which is very useful.

tracker-preferences

The tracker-preferences application was also really out of date. The whole configuration system has changed since 0.6 so we decided to use Vala and GtkBuilder to build the new dialog. This dialog only services tracker-miner-fs preferences right now because they are really the only settings that make any difference to the user at this point. There is some polish that is needed here, but it looks good so far:

screenshot-tracker-preferences

0.7 Development Release

The current roadmap is mostly done now with a few exceptions which we have decided to not worry about for the 0.7 release. Next Friday we plan on doing this release now that most of the UIs are in reasonable states and people should be able to start using it normally now all the big features have been integrated. This has been put off by 2 weeks already but we don’t want to delay any further. So look out for a new version of Tracker next week!

by mr at September 18, 2009 09:48 AM

OSiM

So this week, as Tim already blogged, we were at OSiM in Amsterdam. It was great to see how the mobile market is getting involved in open source and to meeting some really interesting people there. It was also good to see friends there from Collabora, Codethink, Igalia and Intel.

by mr at September 18, 2009 08:57 AM

September 17, 2009

Kris Rietveld

Unit testing the filter model

One thing that has been on my todo list for many years was writing proper unit tests for GtkTreeModelFilter (the “filter model”). The state keeping that the filter model has to do is enormously complex. Sadly, this has caused the filter model to get to a state where it was basically impossible to maintain it, a patch fixing something would almost always break something else. Getting out of such a state is generally only possible by bringing the entire thing under test. And that’s what I have done about 2 weeks ago and took a week to get the basics of the unit tests right.

The majority of the filter model code is now under test. Not only the correctness of the model’s structure is tested (are the right nodes there? Also at the correct position? Are the right nodes designated as parents? etc.), but also whether the right signals are emitted at the right moment (and with the correct details/arguments).

While writing the unit tests, 2 or 3 bugs were uncovered and also fixed. Using the unit tests I was also able to clear the long outstanding filter model bug reports from Bugzilla. Actually, being able to do that was the entire point of writing the test suite ;). When handling those reports, the usefulness of the unit tests immediately proved themselves: when patching one of the problems (with a fix that looked generally okay), one of the other tests started to fail. This regression would not have been noticed without the test suite.

Hopefully, we’ll soon get support for seeing the testing coverage (from what I heard there is a bug/patch for this in Bugzilla). Some parts of the filter model are not under test yet, most importantly the intricate reference counting of nodes. Some day I will get back to this.

What I am also hoping for is to re-use some of the concepts used for these unit tests in unit tests for other tree models. And, of course, to come up with a generic tree model tester that can be used to test custom tree models.

Many people might find such a generic tree model tester overkill and say that tree models must be much more trivial to implement. That’s something for the future really. I will promise to blog about the plans/ideas I have for GtkTreeView and friends later on. (You can imagine that a lot of ideas have been brewing while I was busy finishing my studies ;) ).

Oh by the way, currently I am doing some work on GTK+’s Quartz backend. It has suffered from some regressions after the introduction of client side windows in GTK+ and I am trying to get those under control as well as cleaning up the Quartz patch queue in Bugzilla. After that I will most probably be looking into extending/improving the CellEditable API to finally get proper acceptance/cancellation behavior.

by kris at September 17, 2009 06:55 PM

September 16, 2009

Andreas Nilsson

Software Freedom Day Gothenburg

To all hackers and freedom lovers of Gothenburg:
We’re going to celebrate Software Freedom Day on Saturday.
We’ll meet at Linneplatsen at 15.00. Bring drinkable and eatable things. Depending on the weather, we’re either going to head to Slottsskogen or Gnutiken.

by Andreas Nilsson at September 16, 2009 08:14 AM