05
Feb

Nautilus + Coverflow part two

After two complete rewrites following my initial experiments, the other gloobus developers (badchoice and kitkat) have continued to work on integrating this coverflow view into nautilus.

The implementation of the coverflow widget this time is a little more sane. It is passed a GtkTreeModel of GFiles, and basically does everything in isolation. The coupling to nautilus is quite loose, so the idea is that the widget can be reused easily by others.

The code is available from the linked blog post, or from github.

22
Jan

Misc Hacking

I had two days off while I moved offices, so I got a chance to catch up on my backlog of random hacking.

osm-gps-map

I released osm-gps-map v0.5.0 which adds a few new features (such as keyboard navigation) but also contains many bugfixes and performance improvements. Check the release notes for more information. The next item on the TODO is merging the OSD/layers branch.

Conduit

I released Conduit 0.3.17 which was long overdue. Mostly a bugfix release and updating to new API. The Conduit homepage has also moved to live.gnome.org. Progress on Conduit is a bit slow at the moment, it does everything I want it to (I have a budget cellphone so phone synce does not interest me), and is pretty stable. I have some SOC work I would like to merge, but basically I am looking for developers and inspiration…

PyGTK for Windows

I finished off the fixes to build correct PyGTK+ installers on windows, hopefully closing bug #589671. I uploaded new installers with the fixes people have reported. I expect these installers to become the ‘final’ installers at some point. Feedback welcome.

PyGTK Hacking

I wanted to play with the new client side windows work in Gtk+, so I ported the effects gtk-demo to Python. This required a bit of ctypes magic to access the new API (good), and some more ctypes magic to interact with new signals that appears to have unfriendly prototypes (not so good, bug filed here).

PyGTK example using client side windows

PyGTK example using client side windows

11
Jan

Gtk+ Map Widget

It has been a long time between blogs. I thought I should talk about the piece of software that has been responsible for the most emails in my inbox over the last few days - osm-gps-map, the Gtk+ based map widget. What started as a widget for use in one small application of mine has grown considerably.

  • I recently released 0.4.0, a bugfix release.
  • I created a mailing list, if you are a user or interested osm-gps-map, them please join.
But I thought I should take some time to highlight some of the most interesting users of osm-gps-map, particualry those users on the Maemo platform.

Maep, OSM2Go and GPXView (by Till Harbaum)

BrainStorm (by Adam Boggs)

  • BrainStorm is a storm chasing application that plots your track, and overlays current radar and severe warning imagery on the map.
  • Brainview

    Brainview

eCoach

  • eCoach is an application for recording and managing sport activities with Nokia N900, it records heart rate data from various monitors, and plots your path on the map as you exercise.
  • eCoach

    eCoach

Conclusion

  • With the help of these users, the future of osm-gps-map looks very positive.
  • I am currently working on merging Till’s improvements to master to discourage people from copying osm-gps-map source into their application.
  • If you are a user of osm-gps-map and I have forgotten you then I am sorry. Please contact me and join the osm-gps-map mailing list.
27
May

Playing With Clutter

Some of you out there might be familiar with Gloobus. Over the last few nights I spent some time integrating Gloobus inside nautilus.

This is a proof of concept. I have done very little so far - it shows the first 8 files in the directory, and allows you to navigate between them with animation. It is mostly just a port of Gloobus from C++ into a ClutterGroup derived Actor in C, most of the thanks should go to the Gloobus author.

It features the same bugs as Gloobus, like poor support for resizing the window, positioning bugs, and it does not scale to very many files. It also leaks like a sieve (that one’s on me). Here is my inadequacy represented in video form.

However, if you would still like to take a look and perhaps fix all the bugs, the steps for testing it are

  1. Install clutter-gtk-0.9
  2. Download nautilus from my Git repository (the clutter branch)
    https://github.com/nzjrs/nautilus/tree
  3. Build the test program
    cd src/file-manager
    make -f Makefile.covflow && ./test-covflow
  4. Built nautilus with –enable-clutter-view
  5. Run the newly build nautilus
    cd src
    ./nautilus -q
    ./nautilus –no-desktop

This is very early work so the standard disclaimers apply. I needed to get this off my chest so I could get back to PhD work.

23
Apr

Map Widget Release

I made a new April resolution to start blogging reguarly again. The first step of that long journey begins now.

OpenStreetMap GPS Mapping Widget - 0.3

I just released v0.3 of osm-gps-map, the easy to use Gtk+ mapping widget. Highlights for this release include;

  • A new major contributor, Alberto Mardegan, who worked on many of the new features of this release. Thanks a lot Alberto!
  • Draw map tracks with Cairo by default.
  • Interpolate between zoom levels while waiting for a tile to download.
  • Stop using GET_PRIVATE, and cache priv* for performance.
  • Keep an extra border of images offscreen for smoother scrolling at the edges of the map.
  • Keep the last N tiles in memory to improve render performance (previously they were loaded from disk)
  • Add some new api; osm_gps_set_center, osm_gps_map_scroll.

Conduit Hacking

Hacking on Conduit continues, with much happyness for two reasons;

  • GNOME has moved to git! Wahoo! I owe the sysadmin team many beers, except for Jc2k who I know could not handle them anyway.
  • Conduit got a SOC project, congratulations Alexandre!
  • Work is ongoing to merge in the new configuration and settings serialization code.
  • More on this later, I promise…
23
Jan

Some More Software

As was the theme of yesterdays post, here comes some more software that I have hacked on recently and can now be found on Github.

osm-gps-map
osm-gps-map is a Gtk+ widget (and Python bindings) that when given GPS co-ordinates, draws a GPS track, and points of interest on a moving map display. It Currently supports a number of different mapping sources;

  • openstreetmap (default)
  • openaerialmap
  • maps-for-free
  • satellite maps from a number of proprietary providers

It also has the following features

  • Intelligent caching of maps, including the ability to request a specific area of the map to be cached ahead of time
  • Recording of points of interest on the map (and the ability to add arbitary pixmaps at those points
  • Automatically draws a GPS track (a line showing the history of past added points)
  • Automatic centering on new GPS points
  • Support for multiple other tracks of co-ordinate points
  • Adjustable Zoom
  • Includes a comprehensive example
  • Simple, flat API

I have been running it on a number of embedded boards (beagleboard, Overo) for some commercial work I have been doing (hence the minimal dependencies). For those Planet GNOME readers, It is kind of like libchamplain but without the Clutter part.

facebook-notify
Reaction to the posting of my Facebook notifier for GNOME was positive, and I made a few quick fixes to remove some crasher bugs.

The biggest source of frustration at this point is that libwebkitgtk segfaults, upon destroy, almost every time it encounters a page that requires the initialization of an NPAPI plugin. Disabling plugins using the built in BrowserSettings object does not seem to have any effect.

Is there a RoadMap or any plans for an updated WebKitGtk release before the next round of distro updates?

Conduit
I have been hacking on Conduit a bit over the last few days, and thanks to Julien Lavergne we now have updated builds for Intrepid and Jaunty. Julien also packaged a trunk snapshot (and set up the infrastructure to allow easier updating of such snapshots). I recommend all users of Conduit add our PPA.

22
Jan

Back into the swing of things

It has been a long time between posts, but I am back in New Zealand now, and vowing to get back on top of this blogging thing. I will post more in the coming weeks about my time in France with the ENAC crew, but I will start today small; by releasing some code I have been hacking on.

I wanted a small project to get back into the desktop development mindset after being in the embedded C (ARM 7 LPC2148) and OpenEmbedded (Beagleboard and Gumsix Overo) world for a while. I am also ecstatic that git was clearly the most popular DVCS in the recent survey, I really hope it provides the impetus for GNOME to move to a DVCS.

With that in mind I decided to use this small project to learn git. Firstly, github.com is the coolest thing I have ever seen. I am moving all of my projects (except Conduit) there, and using the pages and wiki features to document them as appropriate.

Facebook Notify

Facebook Notify is a small PyGtk application which monitors your Facebook profile and notifies you when it changes. Some would consider it a gross abuse of the GNOME notification area, but it keeps me out of the web browser, decreasing procrastination, thereby improving my productivity.


It notifies you when any of the following events occur;

  • One of your friends changes their status, profile picture, or profile details
  • You receive a friend request, event or group invitation
  • Someone writes on one of your friends walls
  • One of your friends is tagged in a photo

The code is a few days work, and nothing impressive. It does however contain a rather nifty deferred threaded network io system so to never block the GUI. I guess something similar could be done in C + libsoup + GTask, if one was allowed to arbitarily chain callback functions. I remeber seeing a bug and discussion about this somewhere.

The main bug is that WebKitGtk segfaults if you destroy the WebView after logging into Facebook. Not cool. Anyone know anything about this bug? Is anyone going to make an updated libwebkitgtk release soon?

So, please, fork my code. That way I have a real life example to practice merging from!

16
Oct

iPhone Synchronization on Linux

Now that Matt has gone ahead and announced this, I think I should send some more traffic his way. If you are interested in using Conduit to synchronize your iPhone contacts, calendar and notes then go and check out his work.


I hear people like this “iPhone” thingee

Also, I am still looking for volunteers to help me maintain the Google contacts/calendar Conduit dataproviders. They need some love, and I am just one developer.

05
Oct

One Month In France

ENAC

Hi Everyone, Its been a long time between blogging but I have an excuse. I have moved from Christchurch New Zealand, to ENAC, Toulouse, France. I have now been here for a month, working with the UAV team here.


Screen Envy?

The work has been really challenging, and I have settled into my routine, working towards some things I would like to demonstrate before I leave. I have spent a few weeks doing a lot of electronics design,  updating the paparazzi autopilot board, the IMU, and the GPS boards. Nothing revolutionary, just some evolutionary improvements over the previous hardware.

  • Consolidation of the interfaces between the main board, and the IMU+GPS+Radio+Motors. IMU interface is now SPI only, GPS interface is I2C only / UART only.
  • Addition of a 24bit ADC on the main board to directly measure the pressure sensor, no more op-amp+calibrate the offset at startup.
  • Physically smaller stackable board design.

A lot of this work has been done with an eye towards moving some of the off-board vision processing I am currently doing onto the flying aircraft. I have been experimenting with the beagleboard, and one of the goals of the hardware refactoring above is to free up an interface to push data between the beagleboard and the flight controller. Probably I2C or UART, I am not sure yet.


Can anyone get hold of a Gumstix Overo for me?

I am hoping to be able to demonstrate some biomimetic control responses from my onboard vision system, using image motion information. I also hope to demonstrate hybrid external position estimation system using an off aircraft 3d vision system aided (kalman estimator) by on-board IMU .

Plenty of work for me ahead.

Ubuntu

I finally managed to upgrade to the Ubuntu Intrepid beta. I was pleased to see that it contained all sorts of productivity improvements;

  • I used to waste about an hour a day keeping up with the US election news on Youtube, watching Sarah Palin insult the intelligence of all mammals on the planet with her existence. Intrepid fixed this for me by removing the feature where sound embedded in flash videos was played through the soundcard of my computer. Phew, thats a relief. I guess I will just need to go and watch Fargo instead.
  • Keeping in contact with my family via Skype was also a PITA, luckily Intrepid removed the ability for me to do that too, no sound to hear my parents nag me, and no video which would let them see me all hung over and tired.

Im sure everyone reading this is aware of that feeling when you go and use a friends brand new $2000 Windows Vista computer. The way it runs so slowly with 2GHz of processing power at its disposal, crashes all the time and takes 6 minutes to turn on. It is brand new FFS. When I am in that situation it makes me feel like the entire engineering profession has failed me.

I got that feeling with Ubuntu this week.

Conduit

Unfortunately I have not been able to work on Conduit very much over the last month, and it appears that no one else seems to have had the time to either. This upgrade pain has destroyed my motivation, and I only just recovered from the previous month, where approximately 14,000 people reminded me that the Conduit GUI made them vomit in their mouth. Some positive re-inforcement (and some help hacking) would be a welcome change about now.

23
Aug

Blog as Noticeboard

Summer of Code
This has now finished, and I am really happy with how it went. I was able to complete a Python binding to libsyncml. This was done with the help of Pybindgen, which aside from a few quirks, performed admirably. Expect this to become the premier tool to automatically create python bindings to C/C++ libraries. The binding still contains too many bugs to be considered usable in Conduit trunk (read: crasher bugs) but I can see the light at the end of the tunnel.

Alexandre Rosenfeld was also successful in his Conduit Summer of Code project. He contributed audio and video support for the iPod, and a comprehensive audio/video converter/trans-coder using python-gstreamer. The iPod support seems quite comprehensive, and the converter component is a necessary component of the Conduit architecture for our future plans.

iPod

Conduit
While it may look like I have been dormant at Conduit hacking, work has been ongoing in a number of branches. <rant>Unfortunately I still cannot push these branches to bzr-playground.gnome.org because the SSH keys from GNOME have not been synced across in over two weeks, leaving me locked out.</rant>. The GIO port is now working (with the exception of gvfs bug #547133, which I would dearly like someone to commit the fix for).

One of the major tasks necessary for the GIO port was the isolation of the platform specific parts, such as GConf, and GnomeVFS. One thing that fell out of this work is that Conduit now works on Windows. With no (~10 lines) code changes. Amazing really. It should be noted that this is not actually using GIO on windows, it is using a pure Python File class implementation.

Conduit running on Windows
Conduit can haz Windows!

I am not really serious about maintaining this port, but it shows what is possible. If someone wants to hack on this I can point them to the necessary places. But basically you will need

I have also moved over to using PyWebkitGtk for the Conduit Web browser. They just made a 1.0 release, and I would really like it if those responsible for packaging Conduit, could please also package PyWebkitGtk, and ensure that it gets the necessary exceptions so that it is accepted into the appropriate distributions. Words cannot express how happy I am to be rid of gtkmozembed. It is a shame that webkitgtk was not accepted as an external dependency for GNOME 2.24, as this now makes getting things like pywebkitgtk into distributions a royal PITA.

Openstreetmap GPS Widget
Some time ago I mentioned the osm-gps-map widget that I have been working on, semi-related to my PhD. I just made the inaugural 0.1 release. This widget basically lets one easily write moving-map display widgets very easily, showing points of interest, and multiple gps paths atop of tiles fetched from openstreetmap, or other mapping providers. It started as a port of Tango GPS, and can now basically do everything that application did, but behind a simple GObject API. Python bindings are also provided

Openstreetmap GPS Gtk Widget

Miscellany




Flickr Photos

CIMG8515.JPG CIMG9290.JPG CIMG4702 CIMG9388.JPG CIMG6388.JPG CIMG6732.JPG

Random Quote

To read a newspaper is to refrain from reading something worthwhile. The first discipline of education must therefore be to refuse resolutely to feed the mind with canned chatter. — Aleister Crowley

Badges