My coffee mug

Hello world, and welcome to my corner of the web. This is where I write words about what I'm working on, and post photographs of things I've seen.

I'm a Software Engineer at the Wikimedia Foundation, and so of course my personal website is a wiki (running on MediaWiki). In my spare time I volunteer with WikiClubWest to work on Wikimedia projects, mostly around my family's genealogy and local Western Australian history (especially to do with Fremantle). I try to keep up with issues on all the things I maintain (but usually fail).

I also try to find time to work in my workshop on various woodworking projects. Recently, that's been focused on restoring a chest of drawers and building a metalworking bench.

Travel features in my life, not because I really hugely want to go elsewhere but because I just do — and also because then I can do some more interesting mapping on OpenStreetMap.

I'm currently reading the following: A Puritan Bohemia (Margaret Sherwood, 1896), and Doctor Thorne (Anthony Trollop), and Fathers of Men (E. W. Hornung, 1912), and Perth (David Whish-Wilson, 2013), and The Railway Adventures (Geoff Marshall; Vicki Pipe, 2018).

To contact me, you can email me or find me on Telegram (as 'freosam'). If you want to leave a comment on this site (by creating an account), you need to know the secret code Tuart (it's not very secret, but seems to be confusing enough for most spammers).


It's a morning in South Fremantle. Just a morning. I was going to write 'lovely' or 'rubble' or 'viewish', but actually I'm too tired for adjectives. The main thing I noticed is that walking down Martha Street is nicer than walking down Lefroy Road, although both give views to the ocean. Crossing Hampton Road is harder there though.

I have never yet gotten tired of walking over the brow of the hill (is this whole limestone ridge called Booyeembara?) and seeing the sea.

Climate protest, Perth

Forrest Place, Perth

I'm at a climate rally in Perth, in a crowd of about 400. I've given up sitting in the corner editing Wikisource (for the time being) because I thought I'd better do something. So I'm standing around quietly, sending bad vibes at the scumbo prime minister and all the pollies who think it's okay to do stuff all.

20200110 171919.jpg

Keywords: protests ·


It's hot again! The last week or so in Perth has been amazing in its lack of the horrible heat that's been inflicted in the rest of Austrlia. It's feeling like summer again today though.

Cleaning up the MsUpload code


The MsUpload extension (which has nothing to do with more well-known MSs, Microsoft or multiple sclerosis) is a good extension, one I use quite a bit on some wikis. It has a slightly clunky interface, and every time I try to fix something in it I wish it's Javascript was slightly neater. So as a first step to that, I've set up eslint [1]. Maybe I'll lose interest now, and not come back and fix the actual errors... but at least it's a step towards something cleaner.


We shouldn't call them 'wikis', but rather 'open linked data semantic ERPs'!

Creating a TODO list in MediaWiki with Cargo


When I'm editing items on ArchivesWiki I often want to leave notes about things that need to be followed up, and for a while have been using a simple {{todo}} template for this purpose. It just displayed a simple [TODO] superscript that linked to a category of pages. Its source was just:

<sup>''<nowiki>[</nowiki>[[:Category:To be done|TODO]]{{#if:{{{1|}}}|&nbsp;– {{{1|}}}}}]''</sup>{{#ifeq: {{NAMESPACE}} | Template | |[[Category:to be done]] }}

Which, as usual for anything using ParserFunctions conditionals, isn't very readable. It also didn't let me easily see a list of the pages along with what needed to be done with them. So I decided to add a 'comment' field to the template, and add a Cargo table so that the page name and comment could be displayed together on a todo overview page.

The template:

{{#cargo_declare: _table = todos | comment = String }}
{{#cargo_store: _table = todos | comment = {{{1|}}} }}
</includeonly>{{#invoke: todo | main | comment={{{1|}}} }}<noinclude>{{documentation}}</noinclude>

The module:

local p = {}
p.main = function ( frame )
    local args = frame.args

    local sup = mw.html.create( 'sup' )
    sup:attr( 'class', 'todo' )

    local em = sup:tag( 'em' )
    em:wikitext( mw.text.nowiki( '[' ), '[[Project:To be done|TODO]]' )
    if args.comment ~= nil and args.comment ~= '' then
        em:wikitext( '&nbsp;&ndash; ' .. args.comment )
    em:wikitext( mw.text.nowiki( ']' ) )

    return tostring( sup )
return p

The summary table:

{{#cargo_query: tables = todos
 | fields = _pageName=Page, comment=Comment
 | format = table
You can see it all in action here.

Keywords: Cargo · MediaWiki · tracking ·

Cloud chambers


Last year I went to the Exploratorium and was fascinated by the cloud chamber. It's a terrifically lowtech-looking machine that shows you the paths of cosmic rays as they pass through the building. They're also called scintillators.

I don't know if they're related (I'm no physicist) but this random number generator sounds pretty cool, and reminded me of the joy I had watching the cloud chamber.

OSM printing in Fremantle


So it turns out that the Map and Chart shop in Freo does print Openstreetmap maps to order. It seems like they can do any A-size paper and any scale, on nice paper with borders and legends and titles.

I'm going to get one of Rottnest! (As soon as I've had one more bash at it in Josm, to catch any obvious errors.)

Retrieved from ‘https://samwilson.id.au/index.php?title=Welcome&oldid=3017