It’s just data

Realtime Updates of Web Content Using WebSockets

Three mini-demos showing how to implement realtime updates of web pages using WebSockets.


Achieving Response Time Goals with Service Workers

Blending cache and live responses in order to achieve response time goals.


Badges? We don't need no stinkin' badges!

I found myself included in an IBM Resource Action ("RA").  I’m fine, nothing has changed.  I’m already working with a non-profit, namely the Apache Software Foundation, and find my work there to be very rewarding.


Service Workers - First Impressions

Created by potrace 1.13, written by Peter Selinger 2001-2015

Cache put and match worked right the first time; cache keys not so much. Authentication is a mystery. Outline of future plans, and a call for help.


Brief history of the ASF Board Agenda tool

the current implementation is a lot more fun to develop and easier to maintain than prior versions.  As an example, if it were decided that the moment the secretary clicked the ‘timestamp` button on the 'Call to order’ page, all comment buttons are to be removed from all windows and all comment modal dialogs are to be closed, this could be implemented using a single if statement as the event is already propagated, and a re-render is already triggered.  All that would be required is to change the conditions under which the comment button appears.

The board agenda tool has been tested on Linux, Mac OS/X, Vagrant, and Docker.  It contains a suite of tests.



Having determined that Angular.js is overkill for my blog rewrite, I started looking more closely at React.  It occurred to me that I could do better than JSX, so I wrote a Ruby2JS filter.  Compare for yourself.


Rack broke Sinatra

Not rack’s fault, but Sinatra hasn’t released in a while.  Problem has been known since July, and a fix was merged into master in August.  One possible workaround has been posted.  An alternate workaround:

module Rack
  class ShowExceptions
    alias_method :old_pretty, :pretty
    def pretty(*args)
      result = old_pretty(*args)
      def result.join; self; end
      def result.each(&block);; end

Angular.rb update

It does indeed turn out that language macros can reduce the amount of Angular.js boilerplate configuration to a minimum.  In the process I’ve spun off ruby2js is a standalone supporting library.

Ruby bindings for Gumbo HTML5 parser

Jonathan Tang: We’re pleased to announce the open source release of the Gumbo HTML parser, a C implementation of the HTML5 parsing algorithm.

I’ve posted a proof of concept Ruby binding to github.

Breaking the Web with hash-bangs

Mike Davies: So the #! URL syntax was especially geared for sites that got the fundamental web development best practices horribly wrong, and gave them a lifeline to getting their content seen by Googlebot.


John Cowan: I’ve been developing a parser for MicroXML which I have dubbed MicroLark, in honor of Tim Bray's original 1998 XML parser Lark. I didn’t take any code from Lark, but we ended up converging on similar ideas: it provides both push and tree parsers (as well as a pull parser), it is written in Java, and I intend to evolve it as MicroXML evolves.

I’ll openly admit at this point that I’m skeptical about the prospects of MicroXML.  I continue to be more hopeful about XML5.  That being said, my own personal efforts have stalled for the moment, at least as they relate to node.js.


Planetary Exploration

The original Planet was simply named Planet (not Planet Planet despite what the web site says).  It was originally created by Scott James Remnant and Jeff Waugh.  While small, it became difficult to maintain, so I embarked on a radical refactoring.  Later, Mars took a different direction.

Now that I’m exploring node.js, I have the opportunity to revisit this once again.  As this is a journey, I’m not sure where this will end up, or if it will end up with anything useful at all.



L.M. Orchard: This post discusses how you can still use feed auto-discovery, even restoring the icon to the toolbar with a few clicks and a drag

Les also has a post on the thoughts behind this change.


I’ve posted a rough beginnings of an implementation of xml5 for node.js.  The core of this work is the tokenizer, for which I wrote a simple script to do the conversion of Anne van Kesteren’s implementation of the parse state methods to the style that Aria Stewart used for html5.  Pretty much the remainder was “borrowed” from html5.

Plenty still needs to be done.


Mime Fail

unicorn: The mime-type of your document (application/atom+xml) is unsupported by this task.

Back in Line

Total weight gain on in the 9+1 days of cruise and travel: 4.6 pounds.  Total weight loss on the 6 days since we’ve returned 4.5 pounds.

I expect some dampening oscillation to occur, but seem to be back on track.

Restoring floatflt.sty

floatflt has an unusual license which has been deemed unfree.  It was included in Ubuntu 9.10, but has been removed from Ubuntu 10.04Build instructions, however, are provided.


HTML to Atom

Edward O’Connor: Hixie’s not the sort of guy to leave things underspecified, so HTML5 defines (in excruciating detail) how to convert an HTML document to Atom, even when the HTML document in question is, shall we say, less than ideal.

This has spawned a lengthy thread.  In that thread, I requested (one, two, three times) that:

I suggest that you actually test out how common feed aggregators react when they are presented with the same feed differing only in the entry ids.


Foundation for new standards

I’m pleased to see Atom as a foundation for a number of emerging standards in quite a number of venues.


Two Pings For Every Post

Joseph Scott: Today we’ve turned on PuSH support for the more than 10.5 million blogs on There’s nothing to configure, it’s working right now behind the scenes to help others keep up to date with your posts.