George V. Reilly

I Haz Shoes

I’ve been wearing a surgical boot since my heel surgery six weeks ago. The first month I spent getting around on a knee walker or crutches. For the last couple of weeks, I’ve been walking more and more, but always wearing the boot. The doctor told me today that I could start weaning myself off the boot, but not to rush it.

I wore shoes on my right foot tonight for the first time. I tried on a Doc Marten shoe but found it too stiff. It rubbed against the scar at the back of my heel. A pair of sneakers were more com­fort­able. I’ll bring the right sneaker to work continue.

OrderedDict Initialization

An Or­dered­Dict is a Python dict which remembers insertion order. When iterating over an Or­dered­Dict, items are returned in that order. Ordinary dicts return their items in an un­spec­i­fied order.

Ironically, most of the ways of con­struct­ing an ini­tial­ized Or­dered­Dict end up breaking the ordering in Python 2.x and in Python 3.5 and below. Specif­i­cal­ly, using keyword arguments or passing a dict (mapping) will not retain the insertion order of the source code.

Python 2.7.13 (default, Dec 18 2016, 07:03:39)
>>> from collections import OrderedDict

>>> odict = OrderedDict()
>>> odict['one'] = 1
>>> odict['two'] = 2
>>> odict['three'] = 3
>>> odict['four'] = 4
>>> odict['five'] = 5
>>> odict.items()
[('one', 1), ('two', 2), ('three', 3), ('four', 
continue.

Review: Skinny Dip

Title: Skinny Dip
Author: Carl Hiaasen
Rating: ★ ★ ★ ★
Publisher: Warner
Copyright: 2004
Pages: 496
Keywords: humor, crime
Reading period: 18–19 February, 2017

Joey Perrone is very surprised to find herself thrown off a cruise ship on her second wedding an­niver­sary. After a night of swimming, she washes up on a small Florida island in the company of a pre­ma­ture­ly retired in­ves­ti­ga­tor. Joey persuades Mick Stranahan not to report the attempted murder, but instead to in­ves­ti­gate and torment her worthless husband, Chaz, who turns out to be a biostitute for a major polluter of the Everglades, as well as a relentless pussyhound, an inept killer, and an all-round shitheel.

Hiaasen has a lot of continue.

HTML5 tables require tr inside thead

When I learned HTML tables back in the 90s, at some point I discovered the <thead> element for grouping the <th> column headers. What I missed was there should be a <tr> element between the two. In other words, a well-formed HTML table with a header looks like this:

<table>
    <thead>
        <tr>
            <th>Name</th>
            <th>Value</th>
            <th>Date</th>
        </tr>
 
continue.

Review: The Italian Job

Title: The Italian Job
Director: Peter Collinson
Rating: ★ ★ ★ ★
Released: 1969
Keywords: heist, comedy, cars
Country: UK
Watched: 17 Febuary, 2017

The Italian Job movie is worth your time. One of the quin­tes­sen­tial movies of the Swinging Sixties, its British sen­si­bil­i­ty wears well, almost 50 years on. The humour still works. And it’s probably the best ad­ver­tise­ment that the Mini ever had.

Charlie Croker (Michael Caine) has inherited a plan to rip off $4 million in gold bullion from Fiat in Turin. He and the lads are going to help the balance of payments by bringing the loot back from the Common Market. (They’re proto-Eu­roskep­tics.) And they’re going to do it by causing the mother continue.

Review: Kill Me Three Times

Title: Kill Me Three Times
Director: Kriv Stenders
Rating: ★ ★ ★
Released: 2014
Keywords: black comedy thriller
Country: Australia
Watched: 10 February, 2017

A jealous husband engages a private detective-cum-killer for hire (Simon Pegg) to follow his wife. Upon proof of her infidelity, he orders a hit, which triggers a comedy of errors and double crosses, which ultimately leaves most of the cast dead at each other’s hands.

There’s not much to like about this Australian noirish comedy. It’s bloody but not that funny. The characters are thinly drawn and unengaging. They’re a far cry from Tarantino’s gonzo mo­tor­mouths or the Coen Brother’s quirky killers.

Jenkins #6: Miscellenea

[Pre­vi­ous­ly published at the now defunct MetaBrite Dev Blog.]

A collection of mis­cel­la­neous tips on using Pipelines in Jenkins 2.0.

#6 in a series on Jenkins Pipelines

En­vi­ron­ment Variables

Use the withEnv step to set en­vi­ron­ment variables. Don’t manipulate the env global variable.

The confusing example that you see in the documents, PATH+WHATEVER=/something, simply means to prepend /something to $PATH. The +WHATEVER has no other effect.

Cre­den­tials

The withEnv step should not be used to introduce secrets into the build en­vi­ron­ment. Use the with­Cre­den­tials plugin instead.

withCredentials([
    [$class: 'StringBinding', credentialsId: 'GPG_SECRET', variable: 'GPG_SECRET'],
    [$class: 'AmazonWebServicesCredentialsBinding',
     credentialsId: '0defaced-cafe-f00d-badd-0000000ff1ce',
     accessKeyVariable: 'AWS_ACCESS_KEY_ID',
     secretKeyVariable: 'AWS_SECRET_ACCESS_KEY']
]) 
continue.

Review: I Shall Wear Midnight

Title: I Shall Wear Midnight
Author: Terry Pratchett
Rating: ★ ★ ★ ★
Publisher: Harper
Copyright: 2010
Pages: 355
Keywords: humor, fantasy
Reading period: 3–5 February, 2017

Tiffany Aching is now the overworked and overly re­spon­si­ble Witch of the Chalk. People everywhere are fearing and dis­trust­ing witches more. When her patient, the ailing Baron dies, she is blamed. Other troubles multiply. Eventually she realizes that the Cunning Man, a long-dead witchfind­er, is seeping poison into people’s hearts. Aided by the trou­ble­mak­ing Nac Mac Feegle, she defeats him.

Rec­om­mend­ed.

I Shall Wear Midnight follows The Wee Free Men, A Hat Full of Sky, and Win­ter­smith.

Jenkins #5: Groovy

[Pre­vi­ous­ly published at the now defunct MetaBrite Dev Blog.]

Jenkins Pipelines are written in a Groovy DSL. This is a good choice but there are surprises.

#5 in a series on Jenkins Pipelines

Groovy as a DSL

Groovy lends itself to writing DSLs (Domain-Specific Languages) with a minimum of syntactic overhead. You can frequently omit the paren­the­ses, commas, and semicolons that litter other languages.

Groovy has in­ter­po­lat­ed GStrings, lists, maps, functions, and closures.

Closures

Closures are anonymous functions where state can be captured at de­c­la­ra­tion time to be executed later. The blocks that follow many Pipeline steps (node, stage, etc) are closures.

Here’s an example of a Closure called ac­cep­tance_in­te­gra­tion_tests, where the re­lease_lev­el parameter is a String which must be either continue.

Old Presentations

I uploaded some pre­sen­ta­tions to Speak­erDeck.com tonight.

Here are various pre­sen­ta­tions of mine at Speak­erDeck.com and SlideShare.net:

Previous » « Next