Last week I opened my conference talk by explaining why I work on Firefox OS + PouchDB and why I care about making web applications work offline. Some people care about hyperlinks and URLs vs URIs, some people really love JavaScript and CSS but I don't, I don't even really like JavaScript if I am being honest.

The thing that I love about the web is that is a global computing platform. I don't have ask for Apple's permission to write software, users of my software don't need to buy $500 phones that will be unsupported next year and there is no expensive software needed to author HTML or consume it. Somehow fairly unbelievably we have (most of) the largest tech companies fighting to be the best at supporting a technology they do not own.

Today @ppk posted "Web vs. native: let’s concede defeat" and I disagree with both a lot of the content and the conclusion.

The point that because native 'talks to the OS' the web can never be as fast or provide as good as an experience is wrong. 'Native' is not a technical term and it doesn't actually mean anything, the closest definition we have for 'native' is 'proprietary'. We write code in a nice almost human like language and it goes through various stages before turning into bits of light on your monitor and the fact that it was written in Swift or JavaScript has little bearing on that. Android and iOS have their own VMs and along with Gecko/Blink etc they will do various things to try and turn that code into things on your monitor as fast as possible including compositing CSS directly on the GPU or turning your JavaScript into machine code.

Web applications are mostly slow because by default they are loading megabytes of code over the network before they even start to render whereas native applications are offline by default. On Firefox OS we have seen that by avoiding the network you can build applications in web technologies that even on mobile phones with tiny resources can compete or even sometimes out perform Android. Similarly we can see 60fps games running the browser, having the typical 'native' app's UI written in web technologies in a performant manner is more than possible.

I am certainly not saying that it is as easy to build fast web apps as fast native apps. Right now it is really incredibly hard. However, the software I want to build doesn't fit in to @ppk's stripped down gopher-esque web and to say my only other option is to pick between Google or Apple is frankly a depressing idea.

Either we need to build an entirely new global computing platform that the world agrees on or we make the web more capable and usable for building whatever software you want to build on. One of those seems much more realistic to me.

Last week we pushed a new app to the Firefox OS marketplace - Bugzilla Lite. The first version is a basic form that lets you file bugs, we have built some functionality so if you press and hold Volume Up + Power on a Firefox OS device (needs a recent build) you will get logs and a screenshot to attach to that bug.

Hopefully it makes filing bugs far easier and more useful, in future it will turn into a fully fledged bugzilla client, you can check out the work in progress for that @ (+Github). It would be great to start getting some input, feature requests and possibly contributors. It should be easy to get up and running (and if not, would love to hear issues you have had).

I had considered not writing bzlite and instead reusing and extending the excellent BzDeck. Ultimately the maintainer and I had different opinions about certain features and a slightly different version but I dont think it is a bad thing. While some people see alternative open source projects as being competitive I think its a great chance to do something with a different twist and learn and improve things together along the way.

One of the goals of this site is to be an open journal. Quite how this is going to be useful to the wider internet I haven't yet figured out however for me it means I get to post those annoying little workflows that I do irregularly enough to forget between forgetting every time.

Today was the first time in months I had to commit a patch to Gecko. Gecko uses mercurial and since it took me months to figure out git which I use daily I dont really have a hope of ever knowing mercurial. I am just hoping to post enough snippets that I don't need to remove and do a full clone of the 2.9GB repo every time I have a patch (seriously I used to do this).

So for next time:

  1. Push a patch to try server

    $ hg pull -u 
    $ hg qimport -P ~/src/Patches/900638.patch
    $ hg qref --message "try: -b o -p all -u all -t none"
    $ hg push ssh://
  2. Push a patch to inbound

    $ hg pull -u 
    $ hg qimport -P ~/src/Patches/900638.patch
    $ hg qfinish -a
    $ hg push ssh://
  3. To tell a repo to forget about local patches

    $ hg strip 'roots(outgoing())' && rm -rf .hg/patches

Also I am now overdue 5 weeks on a PouchDB release ... maybe tomorrow.

After several failed attempts at blogging, say hello to This will be both a blog, a journal and an experiment in building a non SPA website that works well offline.

Only the basic functionality has been built and this will be a long time WIP but I will be documenting the tools and thought processes while building this as well as the various other projects I am working on.

See you soon.