HTML rendering is hard

wxWidgets is a nice, easy-to-use cross platform toolkit for writing desktop applications. It exists for many different languages including Ruby and Python.

It includes an HTML renderer.

On Windows this uses the IE renderer.
On OSX it uses the webkit renderer.
On Linux it uses, er, some code that this guy wrote, y’know? It doesn’t support CSS.

This means that my desktop aggregator does not work very well on Linux, which is currently my primary use case.

It’s possible to use wxMozilla but that was seemingly abandoned in 2005.

It’s possible to use wxWebkit but the instructions for that start with “check the source of webkit out of svn” and ends with “the Python bindings don’t work yet”.

GTK is an easy-to-use toolkit for writing desktop applications. It is nominally cross-platform (but I wouldn’t want to push the matter). It can use WebKitGtk.

I appear to be at a frustrating fork in the road.

CouchDB in desktop applications

Following my last post I was considering writing a Venus filter which adds all feed items into a CouchDB database. This could then be queried by a modified wxVenus or a  webapp (using the CouchDB jQuery library) or whatever.

Thinking specifically about wxVenus, which is a desktop appliaction, CouchDB is like MySQL in that you must have the server up and running before your application tries to use it, and (afaik) there is no way to embed the server itself into your application, which places quite a bit of burden on the user.

My initial plans were to use SQLite which I can embed and use happily without another daemon running beforehand, but would mean I have to set up a schema and do all that tedious INSERTing, SELECTing and so on (I appreciate I could go all ORM on its ass, but again the development effort is much much higher than that with CouchDB).

So, what to do? I suspect that for the moment I’ll go about getting CouchDB all nice and integrated, but it doesn’t look like it’d leave me with an application people can download, install the dependencies, and just run, does it?

NewsGator + Venus?

I recently broke the graphics drivers on my Windows Vista installation, so re-partitioned and now run Ubuntu full-time at home.

On Windows I use FeedDemon as my full-time aggregator. It has a degree of speed and polish unmatched by any other web or desktop aggregator.

This means that all my feeds are automatically synced with newsgator.com – a web-based aggregator which is not fast and not particularly polished. Although it might be polished, I don’t know, it’s so slow that I tend to just give up (sync with Google Reader is coming).

FeedDemon has significantly raised the bar for any aggregator I use. Web-based tools no longer cut it, in particular when I have hundreds of feeds and, at times, thousands of unread items.

On Ubuntu the options for a native aggregator are Straw or Liferea. Both are currently undergoing rewrites. Liferea seems like the better option for me, and it has a plugin system which is appealing, but there’s no sync with any online tools.

NewsGator have an HTTP-basd API (PDF reference and sample code which requires a minor tweak to run) which is quite straightforward. It gives back data which can be consumed by the Universal Feed Parser. Venus uses the Universal Feed Parser in planet/spider.py after fetching data to create the cache which powers it.

This time last year I wrote a very very basic wxWidgets tool for browsing the Venus cache. A modification to planet/spider.py to use the NewsGator API would seem like an easy way forward, whilst gaining all the power of the Venus filters, plugins and existing XSLTs.

I might just have to try that.

Bugtracking

With wxVenus, I wanted to set up a public butracker. I wanted to avoid Google Code because of my recent account problems. At a previous company we used FogBUGZ and the developer-focussed bug-entry and editing was brilliant, so I was looking for something similar. I couldn’t find anything I liked immediately and so just to get started I began using Lighthouse which has a very nice, clear and simple user-interface which requires minimal effort to use (*cough*bugzilla*cough*), but it was locked to private-only. If I’d wanted to pay up I could have got anon-view but no anon-submissions IIRC.

At work we use a default install of Trac, which is reasonably horrible, but I know that it’s heavily customisable via a simple config system and plugins so I gave that a go (hence the previous post on mod_python). I obviously got something wrong when I was setting it up though because loading a single page took at least five seconds to appear as well as murdering my server, and it was completely unusable as a bugtracker. I tried running tracd (the standalone trac web server) and it responded much, much more quickly but still not fast enough to use.

In the end I did set up home on Google Code, but I’m not very happy about it. The interface is quite good, although typically for Google, sparse, but there’s no obvious API if I want to get my wiki pages or issues out, and I certainly don’t trust Google not to close my account again, even if by accident, so I’d be much happier hosting my own – tied into bzr ideally.

So is there anything out there that meets my simple, fast and free bugtracking needs? I am not bothered about milestones, priorities, ticket progress trackers or due dates. Just a list of bugs which I can arbitrarily re-order and add comments to will keep me happy.

wxVenus

bzr get http://philwilson.org/code/wxvenus

wxVenus is, at the moment, a desktop tool for browsing the cache that a local Venus installation creates when it runs. It is written in wxPython and is dependent on lxml.

wxVenus

It is also the first Python program of greater than ten lines that I’ve ever written, and given that we’ve already established I am very bad at it, the code quality is very low.

The long-term intention is to provide a cross-platform desktop tool which uses either a local or remote Venus installation as its aggregator and data source. At the moment I am using Lighthouse to track progress, but the free account doesn’t let me expose my tickets publically (although I will use the API to do this) I’ve moved to Google code because Lighthouse was closed and my local Trac install was slower than you could possibly imagine.

Really this is a lesson in Bazaar, Python, wxWidgets and XML parsing. Hopefully I will end up with a tool I can use. So far I’m learning a lot 🙂