Skip to content

Christopher James Willcock

Enjoy Kaizen

Tag: Microformats

mf2bench – Parse all the things (with all the parsers)

My Microformats2 parser passed all the tests a short while ago. After that milestone, I was wondering if it’s fast. That needs some context because fast compared to what? All the other Microformats2 parsers. Have they been measured? The answer to that one is: not before now as far as I can tell.

I took a little time to make mf2bench, a benchmarking tool that compares the performance of all (is it all?) the Microformats2 parsers out there. My work on the php-extension, mf2, came in second place in terms of speed, behind the Microformats2-parser for Go. I’m pretty happy with this, because I have been concentrated on coding to pass tests, to demonstrate that the parser meets the living specifications at Making it run fast, or as fast as is fun to make it, is still a little bit away.

I’ll next get mf2bench to provide some measure of what the parse from each parser is for the various samples. That will be neat.


========== UPDATE ==========

The above screenshot uses the default of three (3) parses per parser. It was captured for the sake of taking a picture, rather than of comparison between parsers, etc. Here is the same thing, with one hundred (100) parses per parser.

Versions of each parser tested:

Parser Version
ruby/microformats-ruby 4.1.0
python/mf2py 1.1.2
php/php-mf2 0.4.6
php/php-mf2 (w/ Masterminds\HTML5) 0.4.6 (2.5.0)
php-ext/mf2 unreleased
node/microformats-parser 2.0.1
go/microformats 0.1.26
perl/microformats2 0.5
elixir/microformats2 0.2.1

My microformats2 parser has reached a milestone. All of the mf-test-suite microformats2 tests now pass.

138 commits, 107 passing tests – source

I’ll complete the current mf-test-suite tests before moving on to expanding on those tests alongside the parser. Next up is backcompat parsing.

Now at thirty (30) thirty-one (31) passing tests for my microformats parser.Total includes twenty-four (24) twenty-five (25) core tests and six (6) from the microformats-test-suite.

My Microformats parser now has fifteen (15) passing tests, parses rels & rel-urls from the web, from local disk (via URI), and from code string.

Working on a new project, a microformats parser. Follow along at Discussion in #microformats on

Semantic Interoperability

When elements from independent systems of semantic interoperability appear within the same document, the semantic compatibility of the independent systems is the measure of their non-interference.

HTML and CSS have very good semantic compatibility, often appearing together in the same document.

This is on my mind lately as I consider the compatibility of web application sources with microformats, while building a utility to help identify any aspects of the web application sources which interfere with the desired interoperability embodied by microformats.

I currently describe my pre-release project as: “A utility which checks webapp sources for compatibility with microformats semantics”. Based on the foregoing, I’m considering changing the description a little. At the end of the day, the work is the program that helps find the issues in the code. I’m hopeful that someone with greater comfort discussing the topic will help me to gain some confidence in how I present the program. So long as it is providing some useful and desired outcome, I’ll be working on it for awhile longer. Hopefully work to benefit more than myself!

The working title of my project is Triage. Source code is available at the link. I posted to IndieWeb chat (#wordpress) awhile back that I would publish source as soon as it does something useful. I’ve got the core command-line utility there and it will identify semantics (and syntax) issues in CSS files. It will be a little while before I have a web-based interface to make this available to a wider audience. From there I’ll look to add other languages (HTML, PHP, JavaScript).