Web

Web is a small, lightweight web browser that uses gtkhtml2 and spidermonkey. This gives it a true native-look, JavaScript support and minimal memory requirements (target requirement is ~32Mb of RAM). Web uses unique small-screen rendering techniques, and is the subject of my dissertation at Southampton University. It is designed for use on many platforms, especially hand-held devices, such as the Nokia 770 or the Sharp Zaurus series of PDAs.

Screenshots

Download

Web is kindly hosted by OpenedHand on their public svn repository. To download the latest development code, type:

svn co http://svn.o-hand.com/repos/web/trunk web

on the command line. You can also browse the repository. The repository also contains patches to gtkhtml2, necessary to build Web.

New Web package

Added push-scrolling and jitter correction to Web today, so it's now (somewhat) usable on touch-screen displays. The latest package for the 770 is here - It still requires the dependencies that can be got from my previous blog post. I have to demo this tomorrow :(

Zero7 - Destiny

Finally Over

I handed in my finished final project report yesterday. I'd planned not to pull any all-nighters, but unfortunately ended up doing one. No regrets though, it allowed me to get it in in the morning, before the rush and printer problems (the printers break down every year on hand-in day, I don't understand why they stick with the brand..). For anyone that's interested in reading it, you can get it here - it's entitled "Small-Screen HTML Rendering on Memory Constrained Devices". Any criticism is welcome, so I can prepare myself for questions that'll be asked during the demonstration - but don't be too harsh :). It's mostly about small-screen rendering and the improvement of GTKHTML2, which hopefully I'll now have more time for (how ironic...).

I've taken the chance to update the screenshots on Web's page, which I'll also link directly here, here and here. I'm quite pleased with the Maemo port. If you have a 770 and would like to try it out, you can install these packages (in order!):

A warning though, it's pretty unusable due to huge memory leaks, crashes and no jitter-correction (so clicking on links is very hard). It reads in Epiphany bookmark files from ~/.gnome2/epiphany/bookmarks.rdf. GTKHTML2 could really do with some extra developers :)

Jamiroquai - (Don't) Give Hate a Chance

Web hildon port

Thanks to OpenedHand, I have a 770 now - So started work on porting my apps to hildon. First up is Web:

It doesn't use the hildon toolbar yet, but not a big deal to change that if need be. Next up will probably be Dates, which, thankfully, Tomas is helping me with.

This screenshot uses a custom theme from here btw.

Jamiroquai - Slippin' 'n' slidin'

DOM Traversal

Have made a few large strides in the JavaScript HTML DOM implementation in Web in the past 24 hours or so. All DOM traversal attributes (note attributes though, not all the methods yet) work and you can also read node type/name/value and set attributes. Setting attributes is done in a horribly hacky way, it really requires a patch in gtkhtml2 that I'll probably do this weekend or at some point in the next week.

After this has been refined a bit, the next major step to accomplish before I can add the collapsing paragraphs and JavaScript-assisted restyling is to add some support for DOM Event. I predict it to be a day or two's work to get working initially, but I have a lot of other things to work on at the moment (university, OpenedHand, etc.). Hopefully I'll be able to complete this dissertation in time though, I think it'll be worth the effort :)

Thanks to Iain Holmes, there's now a nice guide to using Valgrind that uses GtkHTML2 as the example. Valgrind and I have been at odds for a while, so hopefully, with the aid of this guide, I'll be able to get it up and working (on amd64 btw) and fixing more leaks in GtkHTML2 in the future. He says he has patches for some leaks he fixed writing this guide, which is great and hopefully I can get them up-stream :)

Off-topic, I've recently been using Muine, as Rhythmbox has finally given up the ghost on my computer (every version I've compiled crashes importing my music, regardless of optimisation settings) and beep-media-player randomly crashes on amd64. I hadn't used it before due to it requiring Mono, and Mono requiring all the memory in the world. Given I was using Rhythmbox previously, which makes gamin swell up to using all the memory and swap space on my computer in about a day, this was a pretty null argument, so I went ahead and installed it. And it is excellent. Thanks Jorn! :)

Jamiroquai - Scam

Web/gtkhtml2 progress

Done lots of work on gtkhtml2 and Web in the past few weeks - I'll be taking a break from this for a little while though to concentrate on Contacts and Dates in time for FOSDEM. Some of the patches I've written are already in, or are heading to gtkhtml2 CVS, others won't hit for a little while I imagine. The current maintainer, dobey, has been a great help though.

Managed to fix a long-time odd bug of gtkhtml2 yesterday - That of altering the colours of surrounding widgets in the window. Ends up the code to set the background colour of pages (which follows the theme's base colour) was broken. Also fixed margin inheritance, min/max width/height on images. These patches are mostly in CVS already and will be completely in soon I should think :)

Patches that *aren't* in CVS and probably won't be for a while add support for various new features such as @import (written by the maker of UniPKG), @media (and all the other various forms of specifying css media type), user style-sheets and a 'node-finished-parsing signal'. I've added a screenshot that shows off the @import/@media support. The node-finished-parsing signal allows me to handle JavaScript better in Web, which now features complete support for document.write via stream manipulation, as it (unfortunately) should be done.

Perhaps, one day, the Gnome browser will be gtkhtml2-based ;)

Billy Talent - Red Flag

gtkhtml2 JavaScript?

I handed in my progress report for my dissertation, and one of the sentiments made in it was that the methods I'm using for small-screen-rendering (which is the subject of the dissertation) would likely not work with gtkhtml2 due to its lack of JavaScript support... But like many a coder, as soon as those words were committed to hand-in, I realised it was a challenge that I had to take on :)

And so, the very preliminary results (using spidermonkey):
This html:

JavaScript test:<br />
<script type="text/javascript">
document.write("<b>Hello World!</b>");
</script>
<br />
This should appear after the Hello World.

produces this result:

As it should.

At the moment, only document.write is handled, but given that's probably one of the hardest functions to handle, I've got a good start :)

As an aside, also implemented tooltips with gtkhtml2 - I should probably patch liferea for that, it's the only reason I use the mozilla engine in it...

Web progress

Web is making some pretty quick progress, I plan on making the first release next weekend. New features since last update: Tabbed browsing, simpler toolbar, history, error pages, less bugs. After it becomes usable (i.e. after I finish with bookmarks and the menus), I'll start working on abstracting the backend and providing a gtk-webcore plugin. A gtkmozembed plugin would also be very easy to write, however, I think I may not out of principal (gecko isn't the be-all and end-all of html rendering libraries people!)

Hopefully this browser will spark some interest in gtkhtml2 - I hope to do some work on it myself, it seems like it could do with a new maintainer (bugs with attached patches that haven't been resolved in bugzilla, etc.)... Will see - Anyway, Screenshot