This is a lovely little English Christmas film from 1952, adapted from a 1950 play. A small-town parson’s family returns home to the vicarage for Christmas after he became a widower earlier that year: Son Michael (Denholm Elliott), serving in the military; daughter Jenny (Celia Johnson) who lives at the vicarage taking care of her father, Martin, the parson (Ralph Richardson); and eventually, daughter Margaret (Margaret Leighton), a fashion journalist in the city. Other houseguests include a voice-of-reason cousin Richard (Hugh Williams) and a duo of aunts, deemed by TCM host Ben Mankiewitz as “one grand, the other grumpy” (Margaret Halstan, Maureen Delany).

The ostensible conflict is that caretaker Jenny wants to marry a neighbor, an engineer being sent to South America (John Gregson), but feels she can’t abandon her father. But as the guests arrive it becomes clear the underlying issue is the three children believe they can’t communicate with their father on a personal level, given his religious calling.

Not to spoil a 70-year-old movie, but it turns out Ralph Richardson plays a reasonable man.

Richardson, a prolific English actor, performed from the 1920s to 1983 including as a member and co-Director of the Old Vic and on Broadway. He was nominated for three Tonys, two Oscars and a Grammy.

Leighton also performed with the Old Vic and made her Broadway debut in 1946 as the Queen in Henry IV, also starring Richarson as well as Laurence Olivier. Leighton was nominated for four Tonys, winning two, two Emmys, winning one, and an Oscar; her first Tony, in 1957 for ‘Separate Tables’ came the same year Richardson was nominated for ‘The Waltz of the Toreadors’.

Johnson performed between 1928 and 1981, including on Broadway. She was nominated for an Academy award for 1945’s ‘Brief Encounter’.

Elliott — I recognized him as Marcus Brodie in ‘Raiders’ — has more than 100 film and TV credits. Like his character, he served in the military. A member of the RAF, his bomber was downed in a raid on some U-boat pens and he spent the rest of the war in a POW camp. He debuted in 1949 and performed through 1992, when he died. He was nominated for an Academy Award in 1986 for ‘A Room with a View’.

Halstan debuted in theater in 1895 and acted in her first film in 1916. She performed ‘The Holly and the Ivy’ in both the stage and screen versions.

Delaney, an Irish actress, debuted in 1914. She was nominated for a Tony for 1959’s ‘God and Kate Murphy’.

There’s also a small cameo by William Henry Hartnell, better known as the first Doctor Who.

Richardson, as I said, plays a reasonable man, if a bit aloof. Leighton plays dark and sophisticated, but ultimately vulnerable. Johnson is her opposite: caring and sacrificing herself to keep the family running. Elliott is impish and impudent enough to (finally) speak the truth about the family’s dynamics.

There’s a delightful bit of framing when the Martin is confronting his son about drinking too much, where Martin is standing behind a sparse Christmas tree looking much like a priest concealed in a confessional, rather than a father talking to his son.

It’s such a cozy little play; theatrical even in the filmed version. I’d very much like to see it on the stage, but I sure am glad this film with these distinguished actors exists. At one point Williams’ character says “Cheer up Mick, old boy, in a hundred years we’ll all be dead.” As far as I can tell, everyone involved with the film is, in fact, dead. But their performances have brought me joy for several years now, and hopefully will for many years into the future.


“One regards oneself as an individual, Aunt Bridget. Types are other people.” — Margaret Gregory

“Don’t you know I doubt if half of them have the faintest conception of what I’m here for. They think I’m paid to marry them and bury them and sign their pension papers for them, just like a civil servant.” — Martin Gregory

“You can’t be told the truth. That’s the trouble, the whole trouble.” — Michael Gregory

“I’m out all day scribbling smart, highly paid nonsense that earns the rent of a wonderful flat that I can’t bear to stay in alone for five minutes when I get back in the evening.” — Margaret Gregory

Especially when you don’t know what you’re doing.

Owning your stuff in this context means controlling your content on the Internet, inasmuch as you can control anything about the Internet. When you post to Twitter or Facebook or Instagram, your stuff lives there. It isn’t always easy to get it back out or to switch services. There’s a tremendous amount of “lock-in” because of both your posting history and your developed social group. On the other hand, when I post to this blog, it lives — for now — on a WordPress installation I control, on servers I pay for, on a domain I own. The “for now” there is important because I can (and have) move the content to different platforms as future needs dictate.

I’d had an underused blog for a while, but the concept clicked for me when I started learning about Micro.blog. I’ve been using Micro.blog via this domain for more than five years (and I haven’t really understood it for most of the time). But conceptually, “owning your stuff” seems like a good idea.

I’m going to try to explain my (ongoing) effort to turn this blog into a Twitter replacement. As will become clear, I have very little idea how all this works, and so I’ll likely be using incorrect terminology as well as doing things that are incredibly dumb. If you’re able to kindly point these out to me, I’d sure appreciate it. And I probably still won’t understand.

Writing

I don’t write a whole lot, especially long-form. But I do like having a place to put stuff when the urge strikes. I like being able to share stuff — photos I took, links I find interesting, etc.

I write here, on this blog. The theme I’m using, SemPress marks up stuff to the microformats spec. I have JSON and RSS feeds. I ping Micro.blog, where you can follow me @brentajones.

And then here’s where it’s fuzzy.

Stuff also shows up under @bjones@blog.bjones.net if you search for it at mastodon.social. I think this is happening because of the Activitypub plugin.

Recently I started trying to figure out more about how to be sure people could read me via Mastodon as well as how I could interact with others (following, favoriting, replying, reposting). That led me to Bridgy Fed, which I don’t quite understand. My username there seems to be @blog.bjones.net@blog.bjones.net. And in fact if I search that username at the journa.host mastodon instance, my info shows up (though not my posts). Searching the “other” username on either instance returns nothing.

I searched around a while and found some Bridgy Fed documentation about customizing your username via an h-card with a property using the “acct:” protocol. I attempted to add that to my h-card, but either I did it incorrectly or it seems to not have affected Bridgy Fed. (Update: It now seems that Bridgy Fed recognizes me as “@bjones@blog.bjones.net”. Don’t know if publishing this post gave it a kick or if it was just a timing thing or whatever. But that seems to be resolved. Consequences TBD).

I also seem to have to include a link to the site in every post? Or just when I’m interacting? I dunno. None of that really affects the writing here, just the ways people can discover and read.

Reading

I’d like to replicate a Twitter-like timeline with folks who’ve jumped ship from Twitter. I’ve successfully used Aperture to create a list of folks and Monocle to read it. But I’m not sure I’m doing it right. For one thing, I’m adding each person’s feed manually in Aperture. I think ideally sending a u-follow-of webmention should add them to the list? Or something? I don’t know. Secondly, if I just paste in their Mastodon profile link, Aperture finds a feed but one that doesn’t have any posts in it. I have to manually add “.rss” to the end. And these don’t seem to have profile photos included, and may be limited in other ways.

Interacting

No idea how any of this stuff works. I gather it involves webmentions.

If I make a post including u-follow-of, Bridgy Fed registers that as a follow…but I don’t really know what that means. I don’t seem to show up as a follower on anyone’s Mastodon account. And I don’t know if there’s a way for me to access a list of everyone I follow. Or how to unfollow.

I attempted a repost (u-repost-of), and Bridgy Fed registered it, but said there was an error. But that’s all it says, so I don’t know if the error is something I did (or didn’t do) or on the receiving end, or what.

I don’t know if any of this stuff is working, or how it’s supposed to work. I don’t know what would happen if someone tried to follow or repost or reply to me.

I have a section called “Followers (Fediverse)” under my Users menu in the WordPress backend. Maybe from the Activitypub plugin again? There are a couple people in it (who I recognize).

Conclusion

Owning your stuff is (at the moment, anyway) a lot harder than typing into a 3rd party site and letting someone else figure all this stuff out. But it seems worth it.

If anyone has any good tutorials on any of this, let me know.

It’s Nocino tasting day! Made up a cocktail tonight with not one but two homemade liqueurs. Don’t have a name for it (maybe it already exists); feels like it might still be missing a note.

  • 2 oz. Scotch whisky (I used Johnnie Walker Red)
  • .5 oz. nocino
  • .5 oz. krupnik (spiced honey liqueur)

Build in highball glass with ice, top with club soda.

It’s pretty good. I’ve made it without the nocino and the honey and whisky work together just fine. The nocino adds a nice deeper note to it I like. Pretty sweet though. Maybe some bitters of some kind. Doesn’t need much else.

Even figuring out how to begin is a challenge. Was it for him? I don’t know.

News of Stephen Sondheim’s death hit me unexpectedly hard. Unexpectedly, because who am I? I enjoy musical theater. I appreciate good writing and good music no matter the genre. Those are my qualifications, I guess. I was in a couple shows more than a decade ago and although I sometimes dream of performing in more, I also dream of owning a pinball table, so. And the shows I was in weren’t even Sondheim shows — JOSEPH and The Fantasticks.

As far as I can remember, the only actual experience I have of performing Sondheim in front of other people is bombing “In Praise of Women” for a vocal test or audition or something in music school at Indiana University shortly before failing most of my music courses, transferring schools and entirely changing my career path. I still feel badly for my accompanist, who did his absolute best helping someone who had no business being there. Sorry again, Eric.

I don’t know when the first time I heard a Sondheim score was, or the first time I saw a performance of one of his shows. I have a vague memory of watching the filmed version of the original Broadway cast of ‘Into the Woods’ in a music class in school maybe, because that seems like the sort of thing we did in the 90s, but that’s not definite.

I think I’ve only seen two productions live: a production of Sweeney Todd by Opera Theatre St. Louis in 2012 and a community theatre production of A Funny Thing Happened on the way to the Forum by KTK here in 2013. I remember discovering the 2006 Broadway revival of Company on Netflix. I saw the 2011 filmed version with Neil Patrick Harris, Stephen Colbert, Patti LuPone, Anika Noni Rose, et al. at, I think, the Tivoli.

I picked up “Finishing the Hat” from the library one day — I recognized the lyric, and of course the author but otherwise I didn’t know what it was — and was engrossed. I was pleased to find a copy at the St. Louis Book Fair earlier this year. It is inscribed “To Bobo, from Isabel” and while I don’t know who they are or why Bobo would donate such a wonderful book, I am grateful to them for it, and thankful Isabel gave such a thoughtful gift.

The book (and its counterpart “Look, I Made a Hat”) encapsulates something I almost always discover about people who do great work: The amount of thought and care and labor they put into making something, and something that when it makes its way into your brain seems like it could never have been anything else. But of course it could have. I discover it every time, and I am surprised by it every time, and it is the most obvious thing in the world. Every note, every rhyme, every syllable was cared for. It was not inevitable, it was hard work. And not only did he do the work, he told us how he did the work.

It’s a special kind of magic, really. A magician can perform for you and you can experience it and be amazed by what you’ve just experienced. But there’s another level to it when the magician can explain what they’re about to do — really explain the trick, how it works, the moves and misdirections — and then perform it and not only are you still fooled and amazed, but then you can begin to consider the thinking, the repetitions, the perfection it must have taken to pull off. And the man wrote 19 shows.

Last weekend, I also checked out James Lapine’s new book “Putting it Together” about creating Sunday in the Park with George with Sondheim. I was speeding pleasantly along through it this week. I enjoyed the interview style, like sitting off to the side while Lapine and Sondheim were having a conversation. It will be odd to pick it back up and finish it now, I think.

Coincidentally, perhaps because I was reading that book, as my wife and I were looking for something to watch on TV to wind down on Thanksgiving evening, I turned on the 2014 Disney version of Into the Woods, which neither of us had seen. Generally enjoyable, though I was disappointed “No More” was cut.

And in another coincidence, this time just after I heard the news, we turned on the most recent episode of the UK game show “Only Connect” — it was from a few days ago. In one of the rounds, the players are given a board with 16 short clues, and they’re challenged to make four groups that each have some connection between the clues in that group. Some of the clues on this one happened to be Into the Woods, Company, Follies, Passion and Saturday Night, which I pretty quickly realized must form a group of Sondheim musicals. (The “Company” clue was a red herring that fit into another group, and the team correctly identified the group and the connection).

I’m not sure why I’m writing all this out. As I said at the top — I appreciate musical theater, but I’m not a theater geek or even a performer in that way, really. I never met the man, but I was briefly in the same room as him. He came to my radio station for an interview in 2018. He made a bit of news by saying he thought protests calling for color-conscious casting were “ridiculous”. A disappointing moment.

I remember last year, when everyone was all shut in their houses, watching Sondheim’s 90th birthday celebration live-streamed on YouTube. It was a little more than a month after Broadway shut down. I remember thinking how incredible it was, seeing all these big names reduced to a rectangle on a screen, as we all had been. They experienced technical difficulties, as we all had. And they were getting by as best as they could, as we all were. And then Mandy Patinkin sang from Sunday in the Park with George IN a park, and for just a brief moment that was all we needed. Following along the livestream and the hashtag on Twitter was a communal experience folks were aching for even after — looking back now — such a relatively short time into dealing with all of this.

I never even wanted to be a performer, as such. I was going to school to teach music. Specifically, choir. I know now, and not just from that failed attempt at the A Little Night Music song, that I would not have made a very good choir teacher for a number of reasons. So instead, I became a journalist. Specifically, a data journalist. I try to use data, and often graphics, to explain to an audience what’s happening in the world and why they should care. I’m not sure when Sondheim’s lyrics and music found their way so deeply into my brain. But I guess maybe that’s why. I’ve banked my career on the concept that it’s worthwhile to help people understand the world around them. I appreciate it when something helps my brain makes sense of something it doesn’t initially understand.

That’s what I get from Sondheim’s work, more than any other composer or lyricist so far. Among other things, he writes about art, the act of creation, growing up, parenting, wish fulfillment, death, truth, being alone, relationships, evil, grace. He makes them make sense.

The world is a confusing place. I’m lucky if I can help a reporter explain how the population of the city has changed over the past ten years, or how students in local school districts did on achievement tests, or where all the money went. To explain the passion to create? That’s a whole different level. And it rhymed.

I appreciate that Sondheim was around for 91 years and so diligently, passionately dedicated his life — to the end — to exploring and explaining what initially doesn’t make sense about humanity. I am glad that his work will go on inspiring a long time from now. I am thankful that he generously taught and encouraged and worked with so many of the next generation of storytellers, who continue to explore and explain why we are how we are.

Trouble is, son, the farther you run
The more you’ll feel undefined
For what you have left undone, and more
What you’ve left behind
We disappoint, we leave a mess, we die, but we don’t
We disappoint in turn, I guess. Forget, though, we won’t

Stephen Sondheim, “No More”, from Into the Woods

Stephen Joshua Sondheim, 1930 — 2021

So, Geekway 2021.

We played 25 games, only repeating one, and all new to us.

It was the first large event I’ve been to since March 2020. Everyone was required to be vaccinated and wear masks when playing games, so I felt reasonably comfortable.

The swag was pretty great — a challenge coin that glows in the dark, a set of 3 custom anodized D6 in a metal case, and a really awesome board game bag.

We didn’t win any door prizes, but my wife and I did each win a play-and-win game. We got Blossoms and Holi, both of which we enjoyed quite a bit.

Here’s a list of what we played:

Day 1

(read the Day 1 report)

  • Renature
  • Blossoms
  • Santa Monica

Day 2

(read the Day 2 report)

  • Rolling Realms
  • Juicy Fruits
  • Meadow (@3)
  • Watergate
  • The Castles of Tuscany (@4)
  • Dinner in Paris
  • Islands in the Mist
  • Holi: Festival of Colors
  • Herbaceous
  • Spirits of the Forest

Day 3

(read the Day 3 report)

  • Maglev Metro
  • Dragon Land
  • Dice Miner
  • Meadow (again)
  • Tapestry
  • Cubitos
  • Imperial Settlers Roll & Write
  • Parks

Day 4

(read the Day 4 report)

  • Pendulum
  • Beez
  • Everdell
  • Villagers

See previous reports here: Day 1 | Day 2 | Day 3

The final day of Geekway is usually a Sunday morning, and usually it’s only games from the library, not play-and-win, because the organizers are busy making sure the play-and-win games have all their components in anticipation of the giveaway. But this year, owing to the semi-shortened schedule, they decided to allow play-and-win checkouts until 2 p.m., with the drawing and game pickup at 5. So, we got in a couple play-and-win games in the morning, and then a couple from the library while we waited for the convention to wrap up.

Pendulum

Pendulum box scaled First up, as our apparently traditional heavy morning game, was Pendulum. Another one by Stonemaier games, and it was weird. Interesting though. The conceit here is that this is a real-time game. Players aren’t taking turns, instead you’re moving workers around on a board, but the movement rules are governed by sand timers which get flipped throughout the game. Occasionally you stop and have a round that’s out of that flow, but the majority of the gameplay is supposed to be simultaneous. There are three timers: 45 seconds, 2 mintues and 3 minutes in different areas of the board. Essentially, these “lock” those sections of the board when the sand is running. You can stage a worker in an area before the timer flips, then once it flips, take the relevant action. But even after you’ve taken the action, that worker is locked up until the timer flips again. There are a few other rules regarding how many workers can be in a space, etc. but the timers thing is really what sets this game apart. For example, if you put a worker in the 3-minute square at the beginning of the round, the timer will flip and you can take that action. But you won’t get that worker back for 3 minutes. If you’d put the worker in the 45-second spot before the timers flipped, it would be free to move somewhere else 45 seconds later. In general, the 3-minute actions are more powerful than the 2-minute actions, which are more powerful than the 45-second actions. But they’re all different and what you need at any given time may vary. We didn’t do any of that. The game includes instructions for playing through a round un-timed, and recommends you take at least the first round that way, if not your first game. So that’s what we did. There’s a card showing the order of flipping the timers, which you still do, but you take as long as you want in between flipping them. The card is structured so that the timers all still flip about when they normally would, in relation to each other, so you get a sense of what a real game would be, without the time pressure. At the end of each round — after the three-minute timer has flipped three times (including to start the round) — there’s a “council” phase, where privilege (Pendulum’s way of settling disputes when two players want to do the same thing at the same time but can’t) is determined for the next round and rewards are claimed. There are four rounds. It’s an asymmetric game in that each player is playing a different character. There are three types of victory points, and to win you need to earn a certain number of each type (plus a “legendary achievement”, which you need to earn once at any time during the game). But each player needs to earn a different amount of the different types — one player needs an equal amount of each, other players need more of one kind or another. This is balanced by the amounts of income of different types the player earns for different actions, as well as the special abilities (in the form of cards played any time during the round, and potentially refreshed to play again). Pendulum play scaled If you think that’s a lot…well, it’s a lot. It makes more sense once you’re doing it, but at no point during the first game did I feel like I had a handle on an overall strategy or how I was doing. There’s just a lot happening, and we weren’t even playing a timed game. The components are just fine. Plastic colored cubes in different colors, tiles for council votes, workers in two sizes, player and victory point markers. Nothing outstanding. The three sand timers are in colors to match their parts of the board. The art can be confusing at times. Moving the resource cubes and victory-point markers around on and off the player board can be clumsy, which would be a pretty big hindrance in a timed game. I get what the fuss is — the idea of simultaneous, real-time play is neat. I’m glad I got to try it.

Beez

Beez box scaled Beez was a good followup. It was our last play-and-win game. In Beez, you lay out a hexagonal field of flowers with different varieties of nectar, and you are a bee planning a route to collect that nectar and place it in your hive. There are a few community goals, and a couple private goals. These are related to how much and what type of nectar you collect, as well as how you choose to arrange them in your hive. In Beez, your bee moves according to a particular set of rules — you can never move straight ahead. Your bee is sitting on a hexagonal hive, the same shape as the spaces on the board. You can never move directly forward. You can move either one or five hexes toward one of the front angled directions. You can move either two or four hexes toward one of the rear angled directions. Or you can move three hexes directly backward. In all cases, you choose your move, then — importantly — turn your bee to face that direction and move that number of spaces. If the space you landed on is adjacent to some nectar, you can pick it up and put it on your board (there’s a bonus for landing in the center of a flower with some nectar, as well). You can only put it into a spot in your hive that matches the length of move you just took. (This relates to the “how you arrange them in your hive” goals, so you can’t just put them anywhere). Beez play scaled The components of this game are a delight, especially the adorable bees. The color palette is interesting and appropriate as well. The beehive player boards have indentations for the nectar pieces, to ensure they stay where you put them. This one is easy to pick up, and planning out a route is, at least for my brain, more challenging than I expected. It does seem that, given the arrangement of the nectar is mostly knowncen and the movement capabilities are definitely known, you should be able to plan an optimal route. But the goal cards and arrangement of the flower colors will be different so that could be enough randomness. Additionally you aren’t allowed to land on another bee, so the more players in the game, the more likely that would come into play too.

Everdell

Everdell box scaled I got Everdell out of the library to play because I recognized the name, though I couldn’t tell you from where. I didn’t realize it’s ranked 28 overall on Board Game Geek. I’ve only played a couple of games ranked higher. Everdell is a fantasy worker-placement tableau-building game where you’re building a city in the forest over a year’s worth of seasons. Each season you send out your workers to gather resources or give you abilities or victory points and play cards to build buildings or bring residents to your city. There’s a small bit of engine-building, as some cards let you build/destroy/modify other cards in interesting ways. Once you’ve deployed all your workers and spent all your resources building cards, you “prepare for the next season” by recalling all your workers, gaining a few more, and another action depending on the season. One interesting thing, similar to Tapestry, is that players’ progress throughout the game isn’t synced in any way — one player can prepare for the next season while another player is still playing in the previous one. Everdell play scaled This one is just lovely to look at. The board and art are nice. There’s a giant 3D tree centerpiece that is (ok, minimally) functional. The worker tokens are animal shapes. The resource tokens are nice — the wood aren’t too interesting, but the stones are pleasingly smooth, the amber is very gemmy and the berries are bright pink and some kind of rubbery plastic that was unexpected. The card art, text and mechanics are interesting. All in all, a very nice game.

Villagers

Villagers box scaled And the final game of Geekway 2021, Villagers. Villagers is a card-drafting set-collection game where you’re playing the founder of a village and inviting travelers from the road to join your village. You’re hoping to invite villagers whose skills complement each other. There’s a drafting round where players choose from a set of face up cards (representing travelers on the road) or drawing blindly from the face-down ones. Then there’s a round where you play cards into your village. The cards you play might need unlocking (for example a vintner needs to be unlocked by a cooper, because a vintner would need barrels). How this works depends whether you or an opponent (or not) has the unlocking card in their village. And some cards just require a prerequisite villager to already be in your village (for example the vintner needs a graper). There are resource chains you can build up, and the more you build them up the more points they’re worth. The number of cards you can draft and play in a round is also governed by the villagers you have, so it can be a balance between getting points and increasing your capabilities. There are a couple scoring rounds once a certain number of cards have been drafted. And that’s about it. The art style here is nice. A bit minimalistic, but it appealed to me. The groups and production chains and locked/locking cards generally make sense. There’s a nice variety of cards and scoring opportunities as well. I enjoyed this one. Read Day 1 | Day 2 | Day 3 | Wrapup

See previous reports here: Day 1 | Day 2

On Wednesday we played eight games, including one from the prior day (have a guess). Two of them were on my “want to play” list for quite a while.

Maglev Metro

Maglev box

We started off with Maglev Metro. I had high hopes for this one — the theme looked interesting and the art too. Turned out to be a little complicated, especially as the first game of the day.

The game has a double-sided board, where you can build a train network either in New York City or Berlin. The game recommended NYC for the first play, so that’s what we did. The idea is to pick up passengers in different categories and deliver them to the stations where they’re trying to go, but first you have to build the stations and routes to them.

Your abilities are configurable, by which I mean you have a player board listing a bunch of attributes about your turn, like number of actions you have per turn, how many tiles of track you can lay in an action, how far you can move, how many passengers you can pick up or carry or drop off in one action, and so on.

These attributes are filled in with passengers that you drop off at the correct stations, so when you start, your abilities are limited and as you progress you start to be able to do more and more on each turn (you start out with a handful of passengers to begin with). Most of the attribute slots are color-coded, so passengers of a specific type can only go in specific spots on your board.

The interesting aspect is that you can spend an action to reconfigure your attributes (and how much you’re allowed to reconfigure is itself an attribute). It reminded me a bit of video games or RPGs where you can allot a pool of points to attributes to configure your character.

We had a bit of rule confusion about the beginning of the game (e.g. what counts as a station you can build to and visit at the beginning), but once we resolved that things went ok.

Maglev play scaled

I really liked the build quality of this game. The board was substantial, and the passengers were pleasingly-colored. I liked the contrast between the commuter passengers in their pastel colors and the robots in their gold, silver and bronze. Your routes are built with lines on plastic tiles so they’re able to overlap, and there are curves of two different sizes so you can overlap curves that don’t hide each other. The trains are interesting, metal and translucent plastic, and the passengers fit neatly inside.

I imagine this would be great with more players, seeing the routes developing over the board and overlapping and such. We mainly played on opposite sides of the board, not competing directly until more toward the end of the game.

I liked the concept of this game, and the art. I thought the execution was a little off. Not just the rules confusion we had, but this also feels like a game that really punishes bad decisions or even just bad luck early on in the game. I think playing more games would help this — once you know how those early bad decisions might affect you, you’d know to avoid them. But for a first-time play, it can be rough. I’d play it again, and I bet it’d be better.

Dragon Land

Dragon Land box

Next up was Dragon Land, a re-release and minor update of a game by the same name from 2002. You play a team of three characters (abstract wooden figures that look vaguely like chess pieces), one each in three different colors, and hop around through Dragon Land trying to reach volcanoes to collect sets of gems and dragon eggs. Each of your characters also needs to find and collect a ring before the game is over, in order to score their color of gem. Along the way there are also tokens with special powers and even dragons you can hitch a ride on from volcano to volcano as a shortcut.

And that’s about it, really. You roll two dice, use one for one of your three characters and one for a different character. You score based on the sets of gems and eggs you collect (diamonds are wild, and can be used to replace any other gem). There’s just enough depth in planning out your moves to get the gems you need before the other player can, or stealing the dragon from them to take shortcuts. But definitely a game kids would be able to enjoy too.

Dragon play scaled

The game looks great, from the art on the board to the colorful gems and tokens to the castle-themed player screens to the dice tower. The one minor issue is that the paths and where you can access the volcanoes aren’t quite as clearly defined as I’d like. The dice themselves are nice as well. The manual kept referring to them as “destiny cubes” which I thought was just the game trying to be clever, but after our third-in-a-row combination of 2-4, I had a closer look and realized they weren’t standard, 1-6 dice.

This is an easy game to pick up, but with a deceptive amount of depth. It would be a good way to introduce someone, especially kids, to more advanced games.

Dice Miner

Dice miner box scaled

Dice Miner is a great new game, especially if you like to roll tons of dice.

You play dwarves mining mountains for dice, and there are lots of dice. The game comes with 60. Each round you fill up the mountain, then take turns choosing dice, usually from the top. Different colored dice do different things for scoring, and one face of each type is a mug of beer. You can share a beer, if you have one — you roll the beer die over to your opponent, but then you get to choose two dice from the mountain and you can take from the side (allowing dice on top to slide down and fill in the spots below). After all the dice are gone, you can use some of them to re-roll others, and then there’s a scoring round. You do this three times.

This game plays pretty quick and there’s plenty of player interaction. It’s nice, because to gain the share a beer benefit of choosing two dice, you have to give up a die to the opponent, often benefiting them rather than hurting them. The dice sliding down mechanic is nice too. There’s plenty of replayability, not just in the randomness of the dice, but you also select a character at the beginning of the game which provides a couple ongoing benefits.

Dice miner play scaled

The components are great. The mountain works well and is way less fiddly to fill than I thought it would be. The dice are nice to look at and the art is interesting. We did have a minor rules confusion — you’re supposed to reroll all the dice you’ve collected in between rounds, and we just missed that step the first game we played. But it was quick enough we just played again with the correct rule, and it was much better.

I really enjoyed this one. It worked well at two players, and I think would be just as good at three or four. It’s not a heavy game by any means, but there’s plenty of strategy and important choices to make.

Meadow

Meadow box scaled

We played Meadow again. See my Day 2 post for its review.

Tapestry

Tapestry box scaled

Finally got a chance to play Tapestry. I’d seen this when it came out, and simultaneously knew it looked interesting and that it’d probably be a while before I got to play. It was designed by St. Louis’ own Jamey Stegmaier. It’s…big.

In Tapestry, you’re building a civilization from nothing all the way to AI Singularity and space exploration. You advance on four tracks: Science, Technology, Exploration and Military to, well, explore new regions and conquer them, as well as to gain new knowledge and invent stuff. Each player has a basic type of civilization, like Architects or Leaders, which provides some benefit. Each “round”, you play a new card to your tapestry to tell the story of your civilization and either provide an immediate effect or one that lasts throughout the turn.

I’m not going to explain all the rules here, because as I said, it’s a pretty complex game. You’ve got area majority, tile laying, hand management, tech trees, card drafting and upgrading, income. It’s all here. One interesting aspect is that players’ turns aren’t necessarily symmetrical, in the sense that choosing to spend income differently can allow some players to take more or fewer turns than others.

Tapestry play scaled

There’s a lot to this one. A couple different decks of cards, a couple different types of tiles, four tracks around the outside where you’re playing most of the time, four types of income, four types of building minis, three custom dice, player boards, and a whole bunch of custom specialized fully-painted building minis.

It’s an impressive table presence, and the special building minis are particularly great, even if they’re a bit hard to tell apart. The custom dice and income buildings are nice too.

One minor issue was encountering symbols that weren’t obvious and having to track them down. Wasn’t a big deal, just a minor annoyance several times in the middle of the game — and once you play through a couple times I imagine you learn them anyway.

The amount of options on a turn felt varied but not overwhelming. I liked the variety. I’d be concerned about length, but I think this would be fun with three or four players, just to see more variety in cards, strategies, etc.

Cubitos

Cubitos box scaled

Cubitos was a lot of fun. Another good game if you like lots of dice. This is a game where you’re rolling dice to earn movement points, coins to buy more dice, and special abilities in order to move spots on a racetrack to beat the other players to the finish line.

You start with a bunch of basic dice, but the meat of the game is in buying dice that have special abilities. In addition to the basic dice, each game has eight colored dice. At the beginning of each game, you choose one card for each color of dice, and the card tells you what that color’s special ability is for that game. Some special abilities let you generate more coins or move farther, but there are lots of other, more interesting things too.

The push-your-luck dice rolling mechanic is interesting. You draw a certain number of dice from your pool, then roll all of them. If you get at least one non-blank face, you save it and then can choose whether to roll the blank ones again. If you ever roll all blank faces, you bust, and essentially end your turn.

Once you’ve decided to stop rolling, you proceed to the move phase, where you spend your movement going around the racetrack. There are lots of paths you can take, with obstacles, bonuses and other cool stuff. After you’ve moved, you can spend the coins to buy more of the colored dice, then you do it all again.

The components are mostly great. There are color-coordinated boxes for each of the sets of dice. They’re made to invert and serve as small trays/platforms for the dice during the game, which is nice, but they are a bit flimsy. Some plastic Chessex-type dice boxes would be great (but also more expensive). The art here is very good. There are four different racetracks in the game. The dice are a little small, but since you’re moving them around so much and rolling so many, I can see why they made that choice.

I had a lot of fun with this one, and I think the more the merrier with it, probably, especially since players take their roll phases simultaneously, then their move phases simultaneously. Unlike, say Tapestry, more players wouldn’t necessarily add a lot of time onto the game.

Imperial Settlers Roll & Write

Imperial settlers box scaled

Imperial Settlers: Roll and Write is a, surprise, roll & write based on most efficiently using your workers (actions) and resources each turn. It is apparently based on another card game with which I am not familiar.

In the competitive mode, you and an opponent get a couple score sheets. You roll three resource dice to see what resources (wood, stone, food) are available this turn, and a worker die to see how many actions you can take. There are a few cards that provide bonuses for this turn, and each player takes one (ours were “1 extra worker”, “1 extra resource” and something I don’t remember because those were the only two anyone ever took).

Once you figure out the resources and actions available, you turn to your score sheets, and choose one square per action, as long as the resources are available. You eventually unlock fields where you can harvest additional resources, and construct buildings that give you certain abilities.

During the competitive game, both players are using the same score sheets — the only difference is in the bonus tiles you take in a round, and of course the choices you make throughout the game that unlock the abilities or extra resources that you can then use when your opponent perhaps cannot. There is a solo mode where each scoresheet is different to the last, providing some variety.

This one was just ok for me. Almost no player interaction, I didn’t think there was enough variety in what the buildings provided. If you really enjoy trying to maximize efficiency this one might have more appeal.

Parks

Parks box scaled

Now we’re talking. I’ve been looking forward to playing Parks for a while now, but haven’t had the chance.

Parks is a game about hiking through nature and visiting the national parks. You lay out a trail of different sites, and then, after figuring out the season’s weather pattern and making the according resources available on each site, each player moves two hikers down the trail.

Each site visited does something, usually gives you resources (water, sun, trees or mountains; there are also “wild” animal resources that are, well, wild). There are special sites that do other things. At the end of the trail, you can reserve a national park from one of the three face up or a face down one, you can visit one of the parks, including one you’ve previously reserved, or you can buy gear that gives you benefits. The parks provide points, there’s an occasional opportunity to take a photo for a point, and each player has a private goal.

You hike down the trail four times, each time adding one site to the trail, making it longer and longer, and changing the season.

Parks play 2 scaled

I enjoyed absolutely everything about this game. The turns were interesting. The player interaction (in addition to the other player getting your card first, there’s also getting to the end of the trail first to be first player back out next round, and occupying individual sites) was enough without being mean.

The components are great. The hikers, the resource tokens, the trail tiles. The first-player token is an enameled metal badge. There’s a large die-cut heavy cardboard camera tile that gets passed back and forth occasionally. The “wild” wild animal resource tokens are each a different animal. All great.

But the art is the star of the show here. The parks cards each have rich, lovely art for a different national park. And the game goes out of its way to credit the artist on each one, as well as in the instruction book (along with their website!). You almost can’t wait for the next parks card to come out just to see which park and the art on it.

The variety in the layout of the trail each season, the season card that changes the weather pattern, the gear and parks available, the individual goal, and the choices of your opponent would seem to make it pretty replayable, and there’s also a solo mode.

What a great game. It was also fitting that our very own local park managed to find its way onto the board during out game.

Parks play 1 scaled
Read Day 1 | Day 2 | Day 4 | Wrapup

Tuesday was the first full day of Geekway, and we started off by playing 10, count ’em 10 games. Like all the games we played this year, they were all new to us for the year as well.

Unless otherwise noted, all these games were played at two players.

See the Day 1 report here

Rolling Realms

Rolling Realms is a new game by St. Louis’ own Jamey Stegmaier. It was developed during the pandemic to be something folks could easily play over Zoom or another live video-sharing service. As such, there’s literally no player interaction, so if that’s what you’re looking for, best skip this one. It’s also a roll-and-write, so if that isn’t your thing you might beware.

There are 11 different “minigames”, and you’re playing three simultaneously in each of three rounds (a different set of three per round). Each minigame is based on another Stonemaier game, and of the games I’ve played I did recognize the connection.

You’d think a game based on dice rolls is heavily luck dependent, but since you and anyone you’re playing with is using the same roll, the competition is in the choices you make with the rolls, not the luck of the dice. Additionally, there are mechanics to spend resources to modify the dice rolls, gain extra dice, etc., so there are choices involved there as well.

I liked it. It played relatively fast. Realizing the connections to the other games was neat. Although there was no player interaction, there were enough choices to make that it felt interesting. And the glimpses I caught of the “minigolf” solo mode looked fun as well.

Juicy Fruits

Loved the box on Juicy Fruits. The game has an interesting move mechanic where you have a gridded board with stuff on it, and you earn resources based on sliding things around in straight lines, and how far you can slide them before reaching the edge of the board or bumping anything else.

The art on the inside of the box was fine. The components were well-constructed. You had boards and cardboard tiles, but also pretty chunky wooden fruit resources in vivid colors. Fun to look at and handle.

I didn’t find this one extremely compelling — it wasn’t uninteresting or bad, just ok. Though the setup makes it different each time, the overall strategy, particularly in the early game, seems pretty straightforward. There’s also little player interaction — you’re competing for the same pool of things to buy later in the game, and whoever gets there first gets to buy, but that’s about it.

There is a solo mode for this one too, but I didn’t look at it enough to tell how it works. Seems like it might be a bit different because some of the pieces were labeled in a way that was interesting but not used at all for our game.

Meadow

Meadow. I was really impressed by this one. This time, we played it at three players — I’d started setting it up while my wife was elsewhere, and someone stopped by the table to ask if I was looking for someone to play with. He said he’d played it solo but didn’t know how it would go with more. I said sure, he was welcome to play. Also helpful because he knew the setup and how to play.

The game is about collecting sets of cards with compatible symbols. There are various ways to collect the cards, which is this game’s player interaction, mostly — getting a card before someone else, as well as the mechanic for choosing the card having the potential to block others off. There are also some special actions you can take, and that number is limited for all players for the whole round (e.g. 4 opportunities per round for our 3-player game, so if everyone takes one, only one person gets a second one).

Thematically, you’re hiking through a meadow and exploring, and the cards you take represent things you see along the way. The cards and symbols represent this theme well — there are “ground cards” representing different types of terrain (woods, rocks, hills, wetlands, etc.), and you build on top of those with other things, trees, bugs, grubs, etc. There’s a card, for example, that requires you have already played a grub, and the card itself is a butterfly. Makes sense.

The thing about this game is the artwork. 200+ cards with watercolor-style illustrations, and they’re all unique. The game also includes some special envelopes with a few cards themed together to use. The included index with all the card details spoils these, but I won’t here. They’re a great idea and I’d be excited to play with them.

Gameplay was good. It worked very well at three players. This one’s definitely on a list for purchase/gift.

Watergate

Watergate, as you might guess, is themed around the Watergate Scandal resulting in the resignation of Richard Nixon. It’s a 2-player asymmetric game where one player plays “a newspaper editor” (read: Ben Bradlee) and another player plays “the Nixon Administration” (read: Nixon).

This one might have too much player interaction for me, in that you’re playing cards back and forth to have a sort of tug-of-war over influence, momentum and evidence. There are differing win conditions too.

The editor tries to connect Nixon to two informants with evidence. There’s a triangle-pattern corkboard (think the corkboard with pinned up evidence and red thread connecting them cliché) with prominent individuals from the investigation around the edge. The editor wants to obtain enough evidence to make paths from two of these people to Nixon, who is in the center.

Nixon, meanwhile, is trying to block the editor’s paths to prevent him from winning. But Nixon’s win condition is to either gain momentum (thematically, to be politically powerful), or at least to wait the editor out.

The game is well done. The corkboard is, as I said, a bit cliché, but fine. The cards represent different people and events from the time, and marry the theme and gameplay pretty well.

It’s not really for us, being a direct-conflict, take-that type of thing, but I can see its appeal and it works well mechanically and thematically.

Castles of Tuscany

The Castles of Tuscany looked complicated but turned out to be not bad. We met up with a couple friends for this one, so we played this at 4. I think it also would have worked fine at 2.

The idea behind this is that you’re expanding your region in Tuscany during the Italian Renaissance. You build castles, agriculture, transportation routes, villages and other stuff to earn points and extend your region.

Each player has three hexagonal starting boards, which you can arrange in a bunch of different ways, so your setup can be different for each game. You’ll be playing on your own board throughout the game by choosing face-up tiles from a community supply, so the player interaction is mostly taking a desired tile first. There’s also a first-player bonus for completing colored regions.

Reading the rules I was concerned there might be a little too much going on in this one, but once we got going it was pretty smooth. There were a couple rules interpretation issues we had — I now see there’s an unofficial FAQ clarifying some translation ambiguities, including the main question we had (about the agriculture scoring) and something we just got wrong (about the marble/worker capacity limits). Our mistakes weren’t game-breaking though, so it was still a good time.

Components were fine. Lots of cardboard tiles and hexes. The hex boards had a nice blending of colors around the regions to make them flow into each other.

I also didn’t grasp the score mechanic until too late — you earn points during each of three rounds on the outer green ring of the score track, then at the end of each round, your score is transferred to the inner red ring, but the green ring doesn’t reset. The effect of this is something of a runaway leader problem, but a more charitable interpretation is that points earned in the first round are worth 3x points scored in the third round (because first round points essentially count again in the second and third rounds). Ah well.

Once we got going, I liked this one ok. Probably a few too many bits to get to our table on a regular basis, but definitely one I wouldn’t mind playing again.

Dinner in Paris

Dinner in Paris has you drawing cards to collect sets to build restaurants to earn money to build terraces to collect victory points and complete objectives. Got that?

There’s a square in Paris that, astonishingly, doesn’t have any restaurants built on it yet. This is the board, divided into small squares and covered with typical plaza-type features like streetlights, fountains, flowerbeds, pigeons and a band. You draw cards featuring one or more ingredients (potatoes, flour, tomatoes, a crab, etc.). If you have the right combination of ingredients, you can open a restaurant on the edge of the square. You then pay money to build terraces for your restaurants across the plaza. The more terrace you build, the more your restaurant earns, both in money (to build more terrace) and victory points.

I liked this one. There are four restaurant sizes you can build, and except for the smallest size, at least two combinations that let you build different restaurants (apart from paying different ingredients, the different restaurants of the same size don’t have any effect on gameplay, except for maybe end-game bonus conditions). The different sizes of restaurants, appropriately, provide different benefits and cost different amounts to add terraces to.

Building the terraces can be challenging — both physically, as the player boards have little indentations for the terraces to sit nicely, but sometimes difficult to get out easily, and conceptually, because there are a few rules to follow when placing them (chiefly, two restaurants’ terraces can’t touch orthogonally — most of the time).

For victory points, you largely get them based on terraces built. Also, there are three community objectives with ranked scoring, and then private objectives you can complete throughout the game.

The components here were very nice. Artwork on the board and cards is well done. The buildings are good-sized 3D plastic models. As I mentioned the player boards have indentations for the terraces which, while sometimes making it tricky to remove them, is great for organization.

Lots of bits to this one, but nice to look at and nice to play.

Islands in the Mist

If the box didn’t tip you off, Islands in the Mist is hot air balloons. This one has nice art and components and an interesting move mechanic.

You’re an explorer in a hot air balloon taking off from the city in the center of the island to map what you can find. You earn points for finding routes to each coast, as well as large areas of the same terrain, other cities and monuments, and covering the volcanoes that start your board with negative points.

This game is all about the move mechanic, and taking advantage of it. The second player rolls the dice, one of which has a direction and the other has several bonus modifiers. That player can choose to reroll one or both dice one time. Then both players use that roll. Speed is determined by the number of the hex space you’re currently on (each player’s speed is independent, but the same direction is used for both). You can speed up or slow down, or move in a different direction on a turn (always moving in a straight line), but it costs you energy, which is a limited resource. The bonus die also can, depending on how it lands, let you travel either opposite to the wind or at an angle to it.

Once you’ve moved, you then choose from several tile options, and can keep a limited number of them or turn them into energy. These represent the terrain you’re discovering and generally, you want to connect same terrain to same terrain (each coast is a different terrain type, while the middle of the board starts out as all fog). The terrain tiles also have speed numbers on them, so there’s some strategy in planning a route even if you don’t know which way the wind will blow on your next turn.

The art is nicely themed. Could maybe have used a little more variation on the tiles, but what’s there is nice, especially the player boards. The components are big and chunky. I especially liked the dice, which are large, with foil-stamped symbols in green and blue.

There were also a couple add-ons to this game in the box, but we just played the base game. I liked it. The player interaction is in the rolling dice and choosing whether or not to reroll, as well as in choosing the tiles. Not a lot, but enough for me. I’d be interested in exploring the add-ons, but I had a good time with even the base game.

Holi: Festival of Colors

Holi: Festival of Colors is themed around the Indian celebration. It features a tall 3D playing surface with three levels, and things potentially happening on all three levels at once.

In Holi, you have a limited supply of colors and your goal is to spread as much color around as possible, as well as to hit your opponent with color. You do this by moving around the boards and playing cards with patterns on them showing how you can spread your color that turn. There are bonus points for hitting your opponent, or picking up the sweets that are scattered around the board at the beginning of the game.

Once several colors are placed, players have the option to climb to a higher board (but you can’t go back down). Once you’re on an upper board, throwing your color might cause them to fall to a lower board or onto an opponent if they haven’t climbed up yet. Colors that stay on higher levels are worth more points at the end of the game.

This one looks fantastic on the table, tall and with bright colors almost suspended in air. It would be even more colorful with four players. The player tokens are large, wooden and printed colorfully. The color tokens are cardboard and different shapes as well as colors, which is a nice touch. The tower corners are heavy cardboard with great art. The plastic levels have indentations to keep players, colors and sweets in their place, while their borders are nicely printed and have coordinates to make placing falling colors easy. My only minor quibble might be the plastic boards are a little flimsy, but I recognize it’s a tradeoff between heft and weight there. Still, it really stands out.

This one is definitely direct player interaction, but it doesn’t feel mean-spirited. You’re not even hurting the other player, so much as earning points for yourself by hitting them. There are also “Rivalry Cards” that have lots of options for modifying the rules or scoring during a game for more replayability.

This one was fun, quick, and with more strategy than it seems at first glance. We also won it from the play-and-win contest at Geekway, so I’m sure we’ll be enjoying it more in the future.

Herbaceous

Herbaceous is a quick set-collection card game themed around planting herbs, then repotting them in various combinations.

Each turn, you draw a card which will be one of seven different types of herbs, or one of three special herbs, and plant it either in your private garden or the community garden. Then you draw another card and plant it in the other garden.

On subsequent turns — prior to planting — you can choose to pot herbs that have been planted. You have four different containers representing different types of sets: One where herbs must be all different. One where herbs must be all the same. One where you have to plant herbs in pairs different to each other. And one where you can plant any three herbs. This last one is the only place where the special herbs can be planted, and they earn a bonus for being planted there.

And that’s pretty much it. With two players it’s pretty back-and-forth. I bet it would be very different with four, since there’s more of a risk someone else will pot what you’re hoping to pot before it gets to being your turn again. The cards and art are nice. It’s a pretty quick, light game. Doesn’t require a ton of thinking, and that’s ok. I enjoyed it.

Spirits of the Forest

Spirits of the Forest is a set-collection/drafting game with reservation. Thematically, you’re collecting spirits and elements from the forest, attempting to gather more than your opponents.

The game is set up with 48 colorful tiles laid out in four rows. These are “suited” — each color represents one of nine spirits — and feature one or two icons of that spirit. The suits aren’t the same though, there are different numbers of tiles and different numbers of total icons in each suit. Each tile helpfully has a large number on it to remind you how many total icons of that suit are available. If a tile has only one suit icon, it might also have the icon of one of three types of power sources (sun, moon, fire).

Additionally, there are 14 tokens with symbols, of which you randomly place eight, face down, on the tiles. The symbols are mostly additional suit or power source symbols.

Players alternate choosing one or two tiles, but only from the ends of any row. If you take a tile with two suit icons, you only get one tile. Alternately, you can take two tiles of the same suit, if they both only have one suit icon. If a tile has a token on it, you get that as a bonus icon (and it’s hidden from the opponent until the end of the game).

Players can also use one of two gems (or three, in a four-player game) to quasi-reserve tiles. If you take a tile you’ve reserved, you get your gem back. You can take a tile someone else has reserved, but you lose one of your gems. Some of the bonus tokens, instead of an icon, allow you to recover a gem you’ve lost this way.

At the end of the game, players figure out who has the most icons of each type (including both tiles and bonus tokens), and only the player with the most scores points equal to how many they had. If you don’t have any of a given type, you get a penalty.

The components and art on this one are very nice. The title on the box is gold foil, and the colors throughout are rich — though some of the colors are probably a bit too close together. The illustrations have a style that appeals to me.

The gameplay at two was fine. There’s more depth than meets the eye at first, especially when judiciously using and losing your gems. I think it would be much better at three or four players.

Day 2 conclusion

We learned ten games on Tuesday, and it was exhausting. Meadow was definitely the standout for me, but there weren’t any complete duds and several are on the “I’d like to play this again sometime” list.

Read Day 1 | Day 3 | Day 4 | Wrapup

It’s Geekway to the West! Postponed last year for obvious reasons, St. Louis’ board game convention is back. This year it’s Monday through Thursday at the St. Charles Convention Center.

Firstly, we had to check in at a table, showing an ID and vaccination card — vaccinations are mandatory to attend. Not “or a negative test”, not “I already had COVID”. Also means no young kids (there aren’t usually all that many very young kids, but some). It’ll be tough to gauge affect on attendance, I think, given the other changes (Fall instead of Spring, during the week instead of over a weekend, etc.).

Next was the actual check-in with the badge and swagbag. This year’s swag was pretty neat. Another challenge coin:

But this one has a special ability:

That’s right, it’s glow-in-the-dark!

And a bonus gift from 2020 (previously we got a snap-together dice tray or a USB power bank, for instance):

Yep, it’s an awesome set of anodized dice in a magnetic box. Love it.

The setup

Geekway has a couple different libraries to check out games (some folks also bring their own). There’s the regular library, which has just a ton of games, old and new. Then there’s play-and-win. These are a few copies of usually-pretty-new games you can check out, play, and earn a chance to win for each time you play (during the last convention, for instance, I won a copy of Root). If you play a game from play-and-win and don’t like it much, you can choose to not have a chance to win it (you can only win once from play-and-win). You can see a list of the play-and-win games or the library on the website.

So what did we play?

Registration opened at 6 Monday evening. We got checked in and everything, then went to the patron reception (free appetizers!) and still managed to squeeze in three games before the play-and-win closed at midnight. One of the things about a board game convention is that you’re learning new games, which of course takes more time than playing games you’re used to. But (at least for me) that’s also part of the fun.

Renature

The first game we grabbed was Renature. It’s a domino/area influence game that seems pretty replayable. There are a few different ways of scoring points, interesting tactics for player interaction and some limited opportunities for expanded options on your turn, including taking an entire extra turn after your current one.

Thought this worked pretty well at 2 players. I bet it would be pretty different with 3 or 4. Overall, I liked it.

Blossoms

This one was made for two players, though there is a variant for three in the rulebook.

Blossoms is a set-collection game with some push-your-luck involved. I didn’t think I’d like it because of the push-your-luck aspect, but it turned out to be pretty good.

As your first action, you draw a card and either put it in an empty pot or add it to a matching flower — that’s the first bit of luck. But, there are only six flower types and usually four different ones in the pots (or an empty pot, which can hold any new flower), so you’re not often drawing a card you can’t use. There’s also “bad luck” if a flower is already six cards high and you draw a 7th, but that didn’t happen often for us.

After you do that, then you have options for what to do, and pushing your luck never felt very pivotal, partly because you can only do the “cut” action to collect a set of flowers once in a turn and it ends your turn.

All in all I enjoyed this way more than I thought. We played twice, and one of the games was only a one-point difference. All that and I think my oldest kid could probably pick it up decently well too. Nice game.

Santa Monica

Loved the art on Santa Monica, but it was a bit complex. Very little player interaction — a common board of cards everyone has to pick from, so you can potentially take a card someone else needed, but that’s about it. A plethora of ways to score points, though they are all totaled at the end rather than throughout the game.

It functioned just fine at two (and given the limited player interaction I don’t think it would be significantly different with more players). I think replayability would be pretty huge with this one — you’re placing cards in different configurations and moving people around on top of them to get points in different ways, and there are different objectives, different starting cards, etc.

All in all, I enjoyed it, but there was just a whole lot going on. We were rushing a bit to finish it before the play-and-win closed, but it was still a little overwhelming with all the choices and implications each turn.


So that was Monday. Not sure I’ll be able to keep up with this — we played more than 20 games in 2019 — but I’ll see what I can do.

Read Day 2 | Day 3 | Day 4 | Wrapup

One of the things I’ve been watching throughout the Pandemic is Adam Savage’s ‘Tested’ YouTube Channel, particularly the tool tips and one day builds. I enjoy the idea of making stuff, being able to bash together some solution to a problem or make an idea into a real thing. I enjoy the idea of that. The reality hasn’t been realized, quite.

Still, I can on occasion make myself useful.

For Father’s Day, I got an anemometer for my Netatmo setup. I got the rest of the Netatmo suite for Christmas this past year, and I’ve been enjoying being able to see what’s going on, environmentally. If you’re unfamiliar, the base set comes with an indoor module that connects to wifi and plugs into the wall. It measures temperature, humidity, pressure, noise level and CO2. Then there’s an outdoor module that communicates with the indoor one and runs on batteries. It measures temperature and humidity. I also got a rain gauge at the same time.

As you might imagine, where you place the rain gauge and anemometer is pretty important. Up to now, my rain gauge has lived on a side table on the patio. An OK spot, but it did get knocked/blown/etc. off the table at least once. I had to put a few pieces back together, and I’m not sure it’s worked incredibly precisely since. It does pick up rain, I’m just not sure it’s as sensitive as it used to be.

Anyhow, particularly with the anemometer, which has to be pointed a specific direction, I figured it would be a good idea to mount these things somewhere more suitable. Importantly, they both have a standard “tripod mount” socket on the bottom (1/4″-20 screw).

Netatmo does sell mounts for the instruments, but they’re relatively expensive and I’d have to wait for them to arrive. I briefly considered mounts for outdoor security cameras, but these too are not inexpensive. Money aside though, I’d decided the best place for these was mounted to the top of my kids’ playset. And I wanted to try to avoid permanently attaching them.

Then I hit on the idea of using a PVC pipe with a cap, drilling a hole through the cap and then poking the screw up through the cap, holding it in place with a nut and washer. With that setup — essentially a PVC pipe with the instrument stuck on the end of it — I could even raise the anemometer up above the height of the playset.

With the design of the mount itself figured out, I then had to work out how to attach these to the playset. I complicated things for myself by planning to attach the anemometer to the aforementioned upright — a vertical post. But I wanted to put the rain gauge on the end of the crossbar holding all the swings and such, to give it as much clearance from any rain-blocking obstacles. And again, I wanted to do this without screwing into the playset itself.

One thing that popped into my head was “those things that are like long metal strips with holes and a screw contraption, and you slip the end under the screw, turn the screw and it tightens like a slip knot”. Unfortunately that’s not a thing that googles easily. Took me a while to figure out those are called “hose clamps”. I thought I’d cut some slots in the PVC, run the hose clamp through the PVC, around the post/crossbar and tighten it down.

So, the plan: The anemometer would be perched at the top of a vertical PVC pipe, cut a couple sets of vertical slots and use two hose clamps to attach. The rain gauge is slightly more difficult. I was figuring on small diameter PVC, and I didn’t know if trying to stand it up on top of the crossbar beam would work. So I thought maybe perch the rain gauge on a short pipe, then go into a tee or elbow with short lengths for a little more stability on the base. Buying the parts, I settled on a three-way elbow (think the three edges coming out of the corner of a cube).

Another wrinkle in buying the parts, turns out hose clamps are made for hoses. Which are generally smaller than the beams making up play equipment. For some reason I assumed those things I was imagining weren’t specific to hoses and would be made in any number of lengths, like zip-ties or something. Why aren’t they? I checked the store app and saw sometimes these are used on flagpoles, so I stopped by that area, which turned out to be a red herring. After another lap of the store I managed to stumble on the HVAC aisle, realizing that sometimes ducts are also made up of hose-type structures and are generally larger than residential-use water hoses. Bingo. They had clamps labeled 4-inch and 6-inch. I assumed this is diameter of the hose it’s meant to clamp. The upright was about 3.5″ square (total distance 14 inches, plus allowance for going through the PVC on one side) and the crossbar was 5″ tall and 3.5″ wide (total distance 17 inches, plus allowance). I don’t know anything about how the clamps are measured, but I do know the circumference of a 4-inch diameter circle is only a little more than 12 inches and a 6-inch diameter circle has a circumference of a little more than 18 inches. So I figured the 4-inch ones were too small for both and the 6-inch ones would be just large enough for the crossbar.

So, I bought four of the 6-inch clamps. And then upon returning home I discovered that they’re not built so you can tighten them down to nothing. The 6-inch ones were far too large for the upright — I wouldn’t be able to tighten them enough to hold the PVC to it. But they were more than large enough for the crossbar, so I thought the 4-inch clamps might work for the upright. My second trip of the day to the home improvement store ensued.

Final equipment list:

  • 1/2″ x 2′ PVC pipe (2)
  • 1/2″ PVC el with side outlet (1)
  • 1/2″ PVC slip cap (4)
  • 6″ Adjustable Metal Worm Drive Clamp (2)
  • 4″ Adjustable Metal Worm Drive Clamp (2)
  • 1/4″ x 1″ Stainless Machine Screw (2)
  • 1/4″ Stainless Flat Washer (2)
  • 1/4″ Stainless Hex Nut (2)

Total material cost before tax, $16.53. The single most expensive component was the PVC el fitting at $2.15 (I briefly considered making some structure that would support the rain gauge and anemometer on the same PVC structure, but those fittings really eat into the cost).

Now that all the equipment was squared away, making could commence. I drilled 1/4″ holes in two caps, and put a washer on each screw, then slipped it through the underside of the cap, tightening a nut down on top of it. Probably could’ve gone with 3/4″ or even 1/2″ screws.

The anemometer tube was simplest. I used a cutting wheel on a Dremel to cut a slot in opposite sides of the pipe a few inches from one end. I then made another set of slots just below the halfway point of the pipe. I slipped the hose clamps through the slots, popped the cap on top and done.

The rain gauge tube was slightly more complicated. I put the PVC in the el fitting and cut off a couple inches above the fitting. This would be where the rain gauge sits. Next I cut off a very small length of pipe — just a couple inches. This would run perpendicular to the direction of the crossbar (and parallel with the direction of the hose clamp). Finally I cut a longer length of pipe, maybe four or five inches, to run parallel with the crossbar and serve as another attachment point for a clamp. I cut a slot in this longer pipe for a clamp, and a slot in the first pipe just above where it fit in the el for the other clamp.

Took everything out to the playset, tightened it down, attached the instruments to the caps, then put the caps on their pipes and everything seems to be working OK. I did need to calibrate the height of the wind gauge in the Netatmo software, but other than that, everything seems to be working OK. We even had a big storm early the next morning and although the wind overturned some patio furniture, the anemometer registered it and was still standing the next morning.

So, that’s how I made a couple mounts for my Netatmo devices for less than $20. Might take them down and spray paint the PVC or something. But overall I’m pretty happy with this hour-or-so project that solved a problem.

Photo: The Ohio River at Cairo, Ill. several days before the levee was breached. Photo by Brent Jones.

Ten years ago tonight, the Army Corps of Engineers breached the Birds Point levee, activating the Birds Point-New Madrid Spillway to relieve flooding at Cairo, Ill. and around the region.

The Ohio River at Cairo had its record crest May 2, 2011, at 61.72 feet. That’s more than 2 feet higher than the previous record of 59.50 in 1937. The Mississippi was also running high: the gauge at Thebes, Ill., a few dozen miles upstream of Cairo, registered its third-highest reading — slightly higher than it was during the summer of 1993.

Rob Koenig and Nancy Fowler reported for the St. Louis Beacon (now part of St. Louis Public Radio):

Deploying a flood-control tool it had not used in 74 years, the Army Corps of Engineers detonated explosives to breach part of the Birds Point levee in Missouri’s Bootheel late Monday to ease the flooding in Cairo, Ill., and elsewhere in the region.

The decision to “activate” the Birds Point-New Madrid Floodway shortly after 10 p.m. was made by Maj. Gen. Michael J. Walsh, president of the Mississippi River Commission, who said in a statement that “we must use everything we have . . . to prevent a more catastrophic event.”

When the first segment of the two-mile-long “fuse plug” levee was breached, witnesses reported hearing a loud boom and seeing six orange flashes in the darkness, which prevented journalists from seeing how quickly the swollen Mississippi River rushed into the farmland of the floodway. Another segment of the frontline levee was to be breached by explosion later in the night, and a third segment on Tuesday morning.

In the following days and months, reporter Mary Leonard would travel to Sikeston, East Prairie, Dorena and other communities affected by the Corps’ decision. Here are the stories of some of those who lived there:

For farmers, the levee breach ‘is history now,’ but they struggle with how to ‘move on’

SIKESTON – Jack Feezor gazed at a white rooftop just visible in the distance — across the brackish flow of river water that now runs over Highway D in the Birds Point-New Madrid Floodway.

“It’s history now. We move on,” he said quietly as a handful of local residents took in the sights and sounds from this dry stretch of two-lane pavement at the edge of life as they’ve known it.

Annual Bootheel festival goes on amid worries that a way of life has changed forever

As a steamy Friday afternoon melted into a hot June weekend, residents of East Prairie — a town of 3,000 just outside the Birds Point-New Madrid Floodway — gathered to welcome about 800 bicyclists who would ride through the surrounding countryside the next morning in an annual event dubbed the Tour de Corn.

Back to the spillway: In Dorena, the breach of the levee swept away what time had spared

The white steeple of the Dorena Baptist Church still stands tall against the blue Missouri sky, despite the flood-shattered condition of this beloved house of worship located in the southeastern section of the Birds Point-New Madrid Floodway.

There will be no Sunday services here ever again, said the Rev. LeRoy Davenport, who served as pastor of the little Southern Baptist church on Highway 77 in Dorena.

“It is through. It will never be rebuilt,” Davenport said.

Back to the spillway: Residents of the Birds Point-New Madrid floodway must decide where to live

DORENA, Mo. — Ruben Bennett, 88, was just down the road from his flood-wrecked home on this hot afternoon checking out a new place to live.

Bennett — everyone calls him “Brother Bennett” — is a local icon. He sold groceries and gas for 45 years in the old farming community of Dorena, at the southeast edge of the Birds Point-New Madrid Floodway. Although his little store has been closed for some time, Bennett still lived on the second floor of the modest white-shingled building trimmed in green — until it was claimed by the floodwaters of the Mississippi.

“You’d have to have a picture of it,” Brother Bennett said. “It tore it all to pieces. Can’t repair it.”

Back to the spillway: The drama of the flooding secures its place in local history

LaWanda Douglas, 84, is on a mission these days, determined to add today’s history to the exhibits at the Mississippi County Historical Museum in East Prairie: front pages of local newspapers chronicling the intentional breach of the Birds Point-New Madrid Floodway on May 2 by the Army Corps of Engineers.

The most dramatic, she believes, was the May 10 edition of Charleston’s Enterprise-Courier. Spread across the page is a picture of the nighttime explosion of the levee, imprinted with the time and date, and a three-word headline:

They Did It

Back to the spillway: The Wallaces rebuild

Milus and Wanda Wallace can’t move heaven, but they are moving tons of earth to live once again on their “slice of heaven” in the southern section of the Birds Point-New Madrid Floodway.

The Wallaces’ Mississippi County farm was among the 130,000 acres of Missouri farmland inundated by floodwater in May after the Army Corps of Engineers intentionally breached the levee in three places to alleviate flooding in Cairo, Ill., and other towns along the Mississippi River.

While workers from the Corps work nearby to repair damage at the center crevasse in the levee, the Wallaces are still trying to put their farm — and their lives — back together.

Back to the spillway: Getting the harvest in

An autumn Welcome flag on the front porch sends a cheerful greeting to anyone who might drive past the little house that McIvan Jones has renovated on his farm in the Birds Point-New Madrid Floodway.

There are few signs of life along the roads that meander through the southern section of the spillway near Dorena, Mo., save for the farmers working on this November afternoon to bring in the last of their fall crops and a crew still repairing the Mississippi River levee nearby. Jones’ farm is part of the 130,000 acres of farmland that was inundated by river water last May after the Army Corps of Engineers breached the levee in three places to alleviate flooding along the Mississippi.

Six months later, only a handful of the 200 or so people who used to reside in the floodway have returned to live there.

Back to the spillway: Staying or moving, memories remain

DORENA, MO. — For 89-year-old Ruben “Brother” Bennett, home is now a trailer parked next to the flood-shattered ruins of his country store located in the southern part of the Birds Point-New Madrid Floodway.

This house on wheels provides Bennett with the basics — a compact kitchen and a place to live and sleep — just feet from his old life that is beyond repair. Bennett, who sold groceries and gas for 45 years in the old farming community of Dorena, is a well-known floodway old-timer. He used to live on the second floor of the modest frame structure that he said would cost too much to fix.

In 2020, I got less gas.

As a result of the global pandemic, I didn’t drive my car, a 2013 Mini Cooper Clubman, much. My last regular work-week was at the end of February. I then flew to a work conference during the first week of March, returned via train, and immediately began working from home. A college course I teach went to online learning. Even occasional short trips to the grocery store were usually made in my wife’s SUV, so we could stock up and therefore go less often.

Driving picked up toward the end of the year. After buying a new house about 12 miles from the old one, I made many trips between the two, doing work. I also made one 460 mile roundtrip to my hometown.

Conclusions

Fuel consumption and miles driven dropped about 40 percent between 2019 and 2020, and owing to lower gas prices, money spent dropped by more than half. Average miles-per-gallon in 2020 was higher than it’s been over the life of the car. I filled the tank 23 times in 2019, but only 13 in 2020.

Note: Some data was lost spanning the end of 2019 and beginning of 2020. See Methodology section for details.

Detailed stats

My car’s fuel consumption dropped more than 40 percent — from nearly 300 gallons in 2019 to about 169 in 2020. In the six full years I’d owned my car prior to 2020, I’d never bought less than 200 gallons.

My total expenses for gas dropped by about half, from $773 in 2019 to $383 in 2020. The quantity I bought only went down 40%, but the average price dropped too — I paid an average of $2.58 / gallon in 2019, but only $2.27 / gallon in 2020. Between 2014 and 2019, I’d never paid less than $550 to fill the tank for the year.

I drove about 4,000 fewer miles. In 2019, I drove about 9,485 miles, but in 2020 I drove just 5,435. This again is a significant drop-off during the life of the car. Between 2014 and 2019, I’d never driven under 7,000 miles in a year.

My average miles-per-gallon went up as well. In 2020 I got about 32.33 miles per gallon. I’d never cracked 32 before, though 2019 hit 31.96 mpg. This can likely be attributed to a greater percentage of my miles being long-distance driving. In 2020, more than 40% of my total miles driven can be attributed to trips to the college I teach at and the one long trip to my hometown. In 2019 long trips accounted for less than 40% of the total miles driven.

Methodology

I most often fill the tank when it’s nearly empty. In 128 out of 136 purchases, the average amount purchased was 13.28 gallons, with a standard deviation of .69.

I try to log all my gas purchases, and am mostly successful. Over the 7+ years I’ve owned my current car, I’ve logged information for 136 fuel purchases. Most of these include date, gallons purchased, price per gallon and current odometer reading.

However, due to a technology error1, information was lost for an assumed eight fill-ups between 2019–09–21 and 2020–02–05.

Reconstructing the missing data

I am assuming eight purchases were lost for two reasons:

  1. I’m able to identify eight gas station purchases during the missing time period in credit card records.
  2. The odometer readings before and after the gap, divided by the size of the gap, yields a reasonable average mileage.

I was able to recover the mileage only for three of these events, so the odometer gap is only five purchases. This gap is 2,336 miles — dividing by six (that’s five unknown fill-ups) gets 389.3 miles. This would be in the upper 20th percentile of all known distances driven on one tank of gas. Attempting to distribute the 2,336 miles over four fill-ups gets more than 467 miles per tank, which would be in the 90th percentile.

Estimating amount purchased

For the eight transactions, I simply assumed the amount of gas purchased each time was the average amount I’d purchased over the life of the car — 13.275 gallons. As mentioned, this number is fairly stable — a standard deviation of about .7 gallons.

Estimating price per gallon

From the credit card records, I had the total amount of the purchase. I divided this by the estimated amount purchased.

Estimating odometer reading

As I said, I was able to recover mileage for three of the eight fill-ups. Therefore the gap where the mileage is unknown is five. I evenly distributed the total miles driven among these five, resulting in an odometer increase of 389 miles for each fill-up.

Effect of data reconstruction

Five of the eight purchases missing data were in 2019, with the balance in 2020.

The 66.36 estimated gallons purchased is 22.2 percent of the total amount of gas in 2019 (including the estimated amount). For 2020, the 39.8 estimated gallons represent 23.6 percent of the total.

The mileage and gallons work out to 29.3 miles per gallon for the estimated data. This would be significantly lower than average — just under the 30th percentile for the known 2019 data and just under the 20th percentile for the known 2020 data.


  1. I created a Shortcut on my iPhone that would fill in the date and ask me for the gallons, price and mileage, then send this info to a CSV file in Dropbox. Somehow the connection was lost so that the shortcut appeared to work correctly but the data was not saved in the file.  ↩

Bought a new house. Worked from it (and the old house) a lot. Oldest kid started kindergarten (remotely). Went on a couple trips. That’s the highlights.

New house

Most prominently, my family bought a new house. It’s only about 8 miles as the crow flies from the old house. The process was a struggle, partly because two kids and a global pandemic makes it difficult to visit as many options as easily as we’d have liked. Partly because the market was extremely hot — we were outbid on the first house we made an offer on, and we’d offered asking price (or maybe even more, I forget). We also had at least one showing canceled because the buyer accepted an offer between the time we scheduled it and when it was scheduled for, and we visited a house for a showing that had — unbeknownst to us and our realtor — already been sold shortly before.

Still, we eventually found a great one that backs onto common ground woods and a creek, with more woods behind it. We’ve seen deer and turkey, and a wide variety of birds, among other animals. Collected some neat rocks along the creek. We’re pretty happy with it.

Which leaves the old house, which has been a bit of a pain to deal with. I haven’t had much luck in finding people to do some fairly light work that needs done before putting it on the market, so I’ve been getting done what I can myself in bits and pieces. Things like resealing the basement walls, patching and painting, etc. Probably the biggest bits are replacing light fixtures, replacing carpet upstairs, and removing sticky vinyl tile from the bathroom floor to reveal — as our realtor suspected — the original 1940s tile floor in great condition underneath. Great condition other than needing to remove all the adhesive, clean and probably regrout the whole thing. I hope I will not be writing about the old house in the 2021 in review other than to say we sold it.

Trips

Went on a couple trips this year.

In January we drove to Minnesota for a funeral in my wife’s family.

At the beginning of March, I went to New Orleans for the 2020 NICAR convention. There had been some question leading up to it whether or not it would happen, but the organizers were pretty consistent in saying it would. And it did.

The conference itself was fine. I’d never been to New Orleans. I flew down, wandered around the city a bit as usual, before the conference. I led sessions on GitHub and file organization, as well as helping out in a sort of “office hours”-type session. Played Wingspan with some folks one night at the hotel bar. The party was at the aquarium on the waterfront, which was quite nice.

Power line towers receding across a lake

After the conference, I took Amtrak back to St. Louis, via Chicago. I visited with Pete in Chicago and ate, if I recall correctly, my last meal in a restaurant in 2020 — March 9 at Breakfast House. I also managed to find Anderson Pens’ Chicago location (new to me). It would close (“temporarily” — but it’s still closed) a little more than a week later.

When I arrived home, I asked my boss whether he thought it might be best if I worked from home for a week, just as a precaution. Later that evening I got an email announcement that a conference attendee had tested positive (another would follow several days later, but that was the last we heard of spread related to the conference). And shortly after that, everyone was working from home.

Other than that, I haven’t been much of anywhere. I took the kids for a drive through Lone Elk Park but we stayed in the car. I also traveled back to Danville for an estate sale at my grandparents’ house, but I went by myself.

Hobbies

(Other than surviving a global pandemic). My singing group, the Greenleaf Singers put on a concert on January 5. And then that was it. We haven’t been able to sing together since. Though the St. Louis Renaissance Faire still went on, we didn’t perform. The Christmas concerts we normally sing were cancelled. I’ve made the least music this year in at least a decade, and I miss it so much. Our group has gotten together on Zoom a few times, just to hang out, but the singing doesn’t work so well.

Rock with fossils

Photography has been on the upswing, especially since buying the new house. The variety of things to see, plants and animals in the woods and along the creek is great for taking pictures.

The kids and I have been down to walk around the creek a few times to go rockhounding. There are some fossils and other interesting rocks to be found, and the creek floods quite a bit so I think the rocks should turn over a fair amount.

A male cardinal landing on a feeder

A very new hobby (like within the past few days) is birding. After noticing the large variety of birds at the new house, I anticipated getting a feeder at some point. Then I saw a sale on 20 lb. bags of mixed feed for $5 just after Christmas, and jumped on it. I hung a tube feeder, which was successful, and then built a crude platform feeder for larger birds, which has also been ok so far. This is in turn allowing for some fantastic photos (I set the feeders up not far from a convenient spot) and even live-streaming.

Geekway to the West was canceled this year, so we didn’t get to go to that. Consequently (and between moving, et al.) we haven’t played a lot of games this year. We did buy Wingspan for Tabletop Simulator and play through that a couple times.

SIU Job

I taught data journalism at SIU for the second time. It went well, despite meeting virtually for the second half. For the upcoming spring semester I’ll be teaching that again as well as a visual communication course.

STLPR Job

It was, no surprise, largely focused on the pandemic. I built a dashboard and a bot for our Slack that helps broadcast the stats to our reporters daily. Also worked on the election, of course. Flew the drone a couple times, including at a drive-in open for business during the pandemic. Among many many other things.

I think I’ve been into the newsroom a total of three or four times since the end of February.

Media

Some media I enjoyed this year, in no particular order:

The St. Louis Symphony Orchestra played Beethoven’s 9th. Enough said.

Chris Thile and Andrew Bird played an incredibly joyful rendition of ‘Blue Skies’ on Live From Here. Also Live From Here got canceled, which is still disappointing to me.

I greatly enjoyed the streamed Sondheim 90th Birthday Concert.

Watched the filmed version of Hamilton on Disney+.

Speaking of streaming services, when we moved, we canceled DirecTV and got Hulu’s live TV service. So far, so good.

I watched the Cardinals play on opening day, which I’ve always enjoyed but was particularly significant this year amid the uncertainty.

I highly enjoyed AppleTV’s Central Park animated series, as well as Ted Lasso. My kids have also enjoyed Helpsters.

I didn’t read a whole lot. I borrowed the biography Weird Al: Seriously, and The Office: The Untold Story of the Greatest Sitcom of the 2000s: An Oral History from the library.

I watched a lot of YouTube:

  • Cracking the Cryptic’s sudoku, which I’ve been enjoying the challenge of attempting every so often. The Miracle Sudoku is what introduced me and many other people to the channel.
  • Late last year, we’d started watching the British comedy game show Taskmaster, and continued that as they posted new episodes.
  • Adam Savage, formerly of Mythbusters, has been doing a fantastic job during the pandemic on his channel Tested.

This is probably common enough knowledge if you use Siri often, but I don’t so here I am: If you ask Siri, at least on HomePod, “how long until my next alarm”, the answer will include alarms that are turned off.

This morning, my kid set an alarm for his next school meeting, but got the time wrong. I told Siri to “cancel the alarm”. Siri confirmed the alarm had been turned off. Then my kid correctly set an alarm.

A while later, my kid asked how long until his class. So we asked Siri “how long until my alarm”. Siri gave an incorrect time. Took me a minute to figure out the time was until the first, canceled alarm.

I asked Siri “what are my alarms”, and it listed both (but confirmed the incorrect one was turned off). I deleted the incorrect one.

Now asking “how long until my alarm” gives the right answer. It was confusing to me that asking “how long until my alarm” would include an alarm that’s turned off, but maybe there are situations where that would make sense.

I’ve been using Tweetnest to download and archive my tweets for some time now. I set it up some time ago, and generally, it just runs. I think I’ve had to go reboot the cronjob it uses to collect new tweets once or twice. I just added a feature to automate finding tweets “on this day” from prior years.

Background

Tweetnest, if you’re unfamiliar, is a self-hosted app to collect all your tweets and present them nicely in a way that’s separate from Twitter’s interface. It collects everything into a mySQL database, and is written in PHP. It’s nice to have a backup of Tweets kept separate from Twitter.

The main page just displays recent tweets, but it also lets you search, and has month and day pages. It’s a nice, calm interface for exploring or searching old Tweets of yours, which comes in more handy than you’d think.

I have been using Micro.blog more, through this site, which solves some of those problems. But even if I left Twitter today, having this backup and nice interface to it would be valuable, so I figured it was worth doing a little writeup on.

Ok, so what’s the new feature?

As I said I haven’t really touched the site since installing it, and mostly it works fine. But I recently went in a made a tweak, which is the impetus for this post.

One thing I’ve been doing recently is checking out my Tweets “on this day” to see what was going on last year, five years ago, even a decade ago. Twitter doesn’t have a function for this natively, and neither does Tweetnest.

I started out just by visiting the pages on Tweetnest sequentially. The daily page URLs are formatted year/month/day, so you can visit last year’s pretty easily, then just change the year in the URL, see the new ones, and so on. But this is tedious and occasionally there are no Tweets on a given day so it’s a waste of time.

I quickly tired of that, and wrote a little Keyboard Maestro macro to get the current date, format the URL properly, and open tabs in my browser, one for each year between one year ago and when my archive starts in 2008. This is pretty good, but it only works on desktop, not mobile, and it still suffers from the case when there are no tweets on a day (it just opens a tab that says “No tweets here!”).

Finally, I decided to create a proper solution. I built a page for the site that gets the current day and month, then queries the database for tweets that happened today, and presents them.

The code

This was pretty simple and required no innovation on my part. I just modified the code for a specific day to remove the year, and added logic to get the date from the current date, instead of the URL. It’s functional, but since I don’t know PHP it’s quite possible I’ve done something wrong. Here’s the query:

date_default_timezone_set('America/Chicago');
$day = date("d");
$month = date("m");

...

query("SELECT `".DTP."tweets`.*, `".DTP."tweetusers`.`screenname`, `".DTP."tweetusers`.`realname`, `".DTP."tweetusers`.`profileimage` FROM `".DTP."tweets` LEFT JOIN `".DTP."tweetusers` ON `".DTP."tweets`.`userid` = `".DTP."tweetusers`.`userid` WHERE MONTH(FROM_UNIXTIME(`time`" . DB_OFFSET . ")) = '" . s($month) . "' AND DAY(FROM_UNIXTIME(`time`" . DB_OFFSET . ")) = '" . s($day) . "' AND `".DTP."tweets`.`hidden` = 0 ORDER BY `".DTP."tweets`.`time` DESC");<br>

Next, I modified the .htaccess file to run the new php file at a particular URL (I called mine “/today”), and the inc/html.php file to include a link to “/today” in the sidebar. And that’s that. Now I can visit that link and see all the tweets posted through the years on a single page. You can see my modifications on my Github fork of the project.

Other enhancements

One other thing about Tweetnest is that it hasn’t been officially updated to include the new, longer Tweets. So some folks who use it have modified it to take advantage of those. You can see those changes in my previous commit, or in various issues in the main repository.

One shortcoming

A thing I noticed while working on this was that, because I hadn’t made the long-tweets upgrade until now, many prior tweets are truncated (Twitter increased the length at the end of 2017).

One suggestion in the Github issues was to remove all tweets since the lengthening and re-import them.

Tweetnest has two ways of importing tweets: The loadtweets.php file and the loadarchive.php file.

Loadtweets is the thing that runs on a cronjob, so usually it’s only grabbing a handful of tweets at a time. It uses Twitter’s API to get tweets, and so is limited to 3,200. This, unfortunately, isn’t quite far enough to get all my Tweets since the change (it also hits a memory error when trying to load that many).

Loadarchive was built to consume json files you can download from Twitter that contain your archive. Twitter limits public access to tweets to the last 3,200, but it will compile your data and let you download all of your tweets.

Unfortunately, the format of this archive has changed since this function was written for Tweetnest. I attempted this route, but ran into a couple roadblocks:

  1. The link to the tweet on Twitter is missing its username. Tweetnest generates the Tweet, but wherever it’s trying to grab the username from to generate the link is missing, and so the URL it links to is just missing a piece.
  2. Retweets are messed up. In prior archives (and in current API calls) you seem to get much more information about retweets than you do in the archive. And so when you load tweets from the archive, Retweets aren’t able to get the original tweet.

There are probably ways around both of these problems for someone more versed in PHP and/or Twitter’s API/data than I am, but since new tweets should come in at their full length and new retweets are ok, it’s not vital to fix these problems. (If you do tackle this, please let me know).

Conclusion

Tweetnest is pretty great, especially for some free software written nearly a decade ago. It’s nice to be able to hack on things and add features that make your life slightly easier.

The biggest change in the new year of course is the birth of my second child. I also applied for and was chosen to teach a data journalism class at SIU-Carbondale beginning in the Spring. Other than that, I don’t know. After reviewing the year, I mostly just feel exhausted.

Personally

The aforementioned child was born by the time February was here, so we spent most of the year adjusting to raising two kids instead of one.

Trips

Took mostly small trips, in town.

In April, we visited the St. Louis Science Center during an exhibit featuring the command module Columbia from the Apollo 11 mission. It was a surprisingly moving experience to be in the presence of it.

Also went to a Cardinals game with my Dad in April, to the Zoo in May, the Transportation Museum in June, a Cardinals game in June, Grant’s Farm and the Arch in August, the Arch again in September, and the Garden Glow at the Botanical Garden in December.

A couple larger trips my family took were to take the new baby to visit my family in May, another trip back there in Christmas and a trip to Carbondale, Ill. to fill out some paperwork for the job, when we also took in a football game and spent a day at Giant City State Park.

In June I also stopped by Chicago for a day on my way home from a work conference and got to hang out with a friend and his family.

Home Improvement

Didn’t do much to our house this year, unfortunately. Did clean out the back fence line again this fall, and dug out an old lava-rock-lined flower bed on the north side of the lot. Also bought a new battery-powered lawnmower and weed trimmer, which are working out well.

Hobbies

The singing with Greenleaf continues, beginning with a concert in January, as well as singing a bit at one of our member’s weddings. We also performed at the Renaissance Faire in Wentzville for three weekends, the concert at Eliot and our own concert in December. We finally sold tickets online for the first time for our own concert and that seemed to work well.

In February, I made a weather status indicator out of a Raspberry Pi and a Blinkt! module. Later in the month, I used a Scroll pHat HD and a Pi to animate a customizeable rainstorm. Inspired by the movie ‘Desk Set’ and its 1950s computer mainframe prop, I also coded up a version of that.

I think I played exactly one round of golf this year, at the Prairies in Cahokia.

In May, Pam and I went to “Geekway to the West”, a board game convention in St. Charles. They have a game library with all different kinds, vendors and publishers running demos, and lots of door prizes. Between Thursday and Sunday, I played 22 games. It was a lot of fun — we plan on going back again this year.

In August, I managed to finally use some scrap leather I bought at the Renaissance Faire the previous year to make a lcase for my AirPods. Turned out pretty good, and it was fun making it, although I haven’t done anything else with it.

In August, I also went bowling for the first time in a half-decade.

In September, I somehow got it in my head to go thrift store hunting. The first time out went pretty well, yielding a Gitman Bros. blue oxford shirt, a Land’s End pink OCBD, a Brooks Bros. broadcloth shirt and some Banana Republic Traveler Jeans. Around the same time I also nabbed a deal on a pair of new Levi’s for $13. Later in the year I got a couple new Jos. A. Bank corduroy jackets for $20 each, so I was feeling pretty well dressed by the end of the year.

In October, Pam and I went to a board game cafe, Pieces. It was a good time. We played Jaipur, Hive, Medieval Academy and Potion Explosion.

I keep on taking pictures. I bought a used Rokinon 85mm f1.4 lens, which I really enjoy using. Also got a 12mm f2 for Christmas this year, so I’ll be trying that out more too.

Arts

A NYT article in early January led me to ‘Force Majeure’ a weird, dark movie about relationships in a Swedish family on a ski trip. It was good, and one of those splinter-in-your-brain-type movies. It was a 2014 movie, so nothing new, but new to me.

While in Chicago for a work trip, I got to multitask and go to a Mac Power Users meetup and meet David Sparks, Katie Floyd, and Kourosh Dini, among many other fans of the show. It was a good time.

I watched ‘Jesus Christ Superstar Live’ on NBC on Easter Sunday. It was quite good.

Also in April, I was lucky enough to win the lottery to see Hamilton at the Fox. Pam and I went, and it exceeded expectations. Just incredible.

In August, I got to go see a couple friends performing in R-S Theatrics’ Light in the Piazza, which was delightful. I wasn’t familiar with the show or the soundtrack, and it was quite good.

In October, the “Rushmore of Nerdcore” tour came to the Firebird, with Schaffer the Darklord, Mega Ran, MC Lars and MC Frontalot. I heard MC Frontalot on his last trip through St. Louis, and I’m glad I went again.

I saw the Coen Bros’. Ballad of Buster Scruggs when it came out on Netflix. Not without its issues, but beautifully shot, and thought-provoking.

Finally, in December I happened to catch that TCM was playing White Christmas in a few theaters on a couple nights, so Pam and I went to see that. She really enjoys the movie, and it was nice to see it in a theater.

Food/Booze

My first restaurant meal in 2018, according to my Twitter, was a Courtesy Diner Slinger, so it was pretty much all downhill from there.

I also made it to Squatters Cafe several more times before it closed toward the end of the year. The chef is opening a new restaurant nearby, so I’m looking forward to that.

On the aforementioned Chicago work trip, I went to Portillo’s for the first time. I also went to Eataly, which was a couple blocks down from the hotel and Shake Shack a couple times, which was right across the street.

In September I got to take a VIP tour of the Schlafly Brewhouse downtown. It was interesting to see behind the scenes and in the basement, as well as taste some in-production stuff.

I made Krupnik again, and it turned out great. I took some to one of the Greenleaf cast parties and it seemed to be a hit.

I made some chili for our work chili cookoff in November. It did not win, but I thought it was pretty good. Got to make chili powder from scratch, too.

On Black Friday I managed to nab some bottles of 2018 Bourbon County Barrel Stout at Schnucks, so now I have bottles going back to 2015. Due to accidentally getting some extra 2017, I also cracked open a bottle of that, and it’s delicious, as expected.

Work

Got a new boss, got a new (side) job. Flew the drone a bunch, did a bunch of projects.

New Job

I saw an opening posted for a temporary part-time person to teach a data journalism class at Southern Illinois University Carbondale, where I earned my degree from. It sounded like a good fit, so I applied, and I got it. I’ve been preparing for it ever since, and the first class is in two weeks. I’ll be commuting down there one day a week. So we’ll see how that goes. I’m excited.

Projects

Worked on lots of projects this year: A 10-year look back at the Great Recession, a major project on the 25th anniversary of the Flood of 93, a neat little graphic tracing the path of a baseball at Busch Stadium, our election night graphics, a investigative piece on Northside Regeneration, and a year-end Best of 2018 project.

And those are mostly just the larger projects, let alone the analyses, maps and daily graphics, tools, etc.

Trips

In March, NICAR was in Chicago. It was good, and more of the same. I helped lead a session on “Learn From My Fail.”

In June, I also got a spot at SRCCON in Minneapolis. A bit higher-level/more conceptual than NICAR is (also smaller), it was great to be able to take a step back for a few days and focus a bit wider than usual.

Drone

We finally got the drone and all the approvals and everything we needed to fly this year, so I got to take it out several times. I flew mostly in St. Louis, taking pictures of the new NGA site, the former Pruitt-Igoe site and St. Louis’ water towers. I also flew at a house that was flooded in 1993, though you couldn’t see the river from the house using the drone. I got it out over the Mississippi River to take some photos and video of the Merchants Bridge. And I took it out after a snowfall in December and got some footage and photos of the Mississippi River from the Illinois side just south of Chain of Rocks Bridge.

I was also on our radio talkshow in May to talk about the drone and how we’d use it, and again in July, this time live, to talk about Temporary Flight Restrictions in place around the President’s visit.

Thursday
Atlantis rising
Rising sun

Friday
El Dorado
Azul
Hardback
Sagrada
Cottage Garden
Rising Sun
Whistle Stop

Saturday
Sentient
Photosynthesis
Indian Summer
The Networks
Palace of Mad King Ludwig
Topiary
The Thing: Infection at outpost 13
Jaipur
Bottom of the Ninth
Settlers of Catan: Dice

Sunday
New York Slice
Topiary
Blueprints

I made a thing!

I’ve a had a few Raspberry Pi Zeros lying around projectless for a while now — they’re just so inexpensive and I love the idea of a tiny cheap computer, so every time there’s a new revision I pick one up at Microcenter. I have an original 1.2, a 1.3 (with the added camera connector) and a Pi Zero W with integrated wireless and bluetooth.

Back when I first started fiddling with the Pis, I bought a few RGB LEDs, but couldn’t get them working right. I’m sure it was a combo of not having the appropriate resistors and user incompetence. I was in Microcenter the other day, and while they did not have a new Pi, they did have a Pimoroni Blinkt: Pre-soldered headers, and 8 individually addressable RGB LEDs with a Python library.

The Blinkt actually fits within the footprint of the Pi — it only looks like it’s overhanging on the sides here because it’s sitting up very high. I have a female header on the Pi and the Blinkt comes with a female header, so there’s a connector in between, making the whole thing about 3/4″ higher than the surface of the Pi.

After plugging it in 1, I installed the library to the Pi. It comes with a bunch of examples to get you started. It’s super-easy to light up a pixel: set_pixel(pixel,r_value,g_value,b_value) for whichever pixels you want to set or update, then show() to send the command 2.

Then I had to decide what to build. I’m not too interested in notification things, like new messages on Twitter or Facebook or new emails or whatever. Those are pretty much on or off, and additionally would require tying into multiple services.

Weather seemed interesting. I’d looked at the Dark Sky API before. There’s a lot of complexity there: Temperature, precipitation, wind, humidity, visibility, clouds, etc. plus looking at current conditions, future conditions, or even past conditions.

Design

Eight LEDs isn’t that many. I wanted to build a status-board type app — no user input (aside from location). But I also wanted to do more than just display current conditions.

I settled on having a number of “screens” the app would cycle through, each displaying a different type of information.  I only make use of a max of seven LEDs per screen, leaving one to indicate which screen you’re currently viewing.

(So far) the screens I have are:

  • Current conditions — displays current temp, low and high in the next 24 hours, and precipitation probability for the current day.
  • Seven-day low-temperature forecast
  • Seven-day high-temperature forecast
  • Seven-day precipitation probability forecast

The display cycles between each screen on a two-second delay. It updates its data from the Dark Sky API every five minutes (probably overkill, but the API gives you 1,000 calls per day for free).

For the temperature displays, I have a scale of < 0° (purple), 0-32° (blue), 32-50° (light blue), 50-65° (green), 65-80° (yellow), 80-95° (orange) and > 95° (red). I’ve also decided to use apparent temperature rather than actual in all cases. Example at left.

For the precipitation, I have < 25% chance (green), 25-75% chance (yellow) and > 75% chance (red). Example at right.

The indicator letting you know you’re looking at current conditions is white, seven-day low temp is blue, seven-day high temp is red, and seven-day precipitation is green. Given the need to clearly indicate which screen you’re on, I’m not sure how many more I’d be able to add without being confusing.

Demo

Unfortunately our weather here in St. Louis isn’t terribly variable at the moment, but here’s a walkthrough of the current displays nonetheless. These are all diffused through an index card as it’s difficult to take a photo of the LEDs directly. The display just cycles through the following four screens.

Current Conditions

The current conditions are: Current temp, 24-hour low and 24-hour high all between 0 and 32°F, and a 25-75% chance of precipitation today. You can see the status indicator light at the far right (it’s white, though it looks blueish in the image).

7-day low temperatures

Pretty simple to read this one: 0-32°F lows all week. Blue status indicator.

7-day high temperatures

Hey, something different! On Thursday, the high temp will be between 32 and 50°F, and on Friday it will be between 50 and 65°F. Red status indicator.

7-day precipitation

Here’s the 7-day precipitation forecast. 25-75% chance of precipitation today, Tuesday, Wednesday and Saturday. Less than 25% chance Monday, Thursday and Friday. Green indicator.

How it works

Here’s the whole program:

import json, time, os.path
import blinkt, requests

status_colors = {'current':[1,1,1],'high':[1,0,0],'low':[0,0,1],'precip':[0,1,0]}

blinkt.set_clear_on_exit()
blinkt.set_brightness(.1)

def getForecast(key,lat,lng):
url = 'https://api.darksky.net/forecast/' + key + '/' + str(lat) + ',' + str(lng)

stl = requests.get(url)

return stl.json()

def getTempColor(temp):
if temp &lt;= 0:
color = [10,0,30]
elif temp &lt;= 32:
color = [0,0,30]
elif temp &lt;= 50:
color = [0,15,30]
elif temp &lt;= 65:
color = [0,30,0]
elif temp &lt;= 80:
color = [60,20,0]
elif temp &lt;= 95:
color = [60,10,0]
else:
color = [30,0,0]
return color

def getStoplightColor(prob,low,high):
if prob &lt; low:
color = [0,30,0]
elif prob &lt; high:
color = [60,20,0]
else:
color = [30,0,0]
return color

def showSevenDayTemps(temps, which):
blinkt.clear()
# set status light
color = status_colors[which]
blinkt.set_pixel(7,color[0],color[1],color[2])
for i in range(7):
color = getTempColor(temps[i])
blinkt.set_pixel(i,color[0],color[1],color[2])
blinkt.show()

def showSevenDayPrecip(precip, which):
blinkt.clear()
# set status light
color = status_colors[which]
blinkt.set_pixel(7,color[0],color[1],color[2])
for i in range(7):
color = getStoplightColor(precip[i],.25,.75)
blinkt.set_pixel(i,color[0],color[1],color[2])
blinkt.show()

def showCurrent(data):
blinkt.clear()
# set status light
color = status_colors['current']
blinkt.set_pixel(7,color[0],color[1],color[2])
# get current temp (use color scale)
color = getTempColor(data['temp'])
blinkt.set_pixel(0,color[0],color[1],color[2])
# daily high and low (use color scale)
color = getTempColor(data['low'])
blinkt.set_pixel(1,color[0],color[1],color[2])
color = getTempColor(data['high'])
blinkt.set_pixel(2,color[0],color[1],color[2])
# precip (red, yellow, green)
color = getStoplightColor(data['precip'],.25,.75)
blinkt.set_pixel(3,color[0],color[1],color[2])

blinkt.show()

def prepData(forecast):

data = {'lows': [], 'highs': [], 'precip': [], 'current': {}}

for day in forecast['daily']['data']:
data['lows'].append(day['apparentTemperatureLow'])
data['highs'].append(day['apparentTemperatureHigh'])
data['precip'].append(day['precipProbability'])

curr_temp = forecast['currently']['apparentTemperature']
data['current']['temp'] = curr_temp
data['current']['low'] = curr_temp
data['current']['high'] = curr_temp

for hour in forecast['hourly']['data'][:24]:
if hour['apparentTemperature'] &lt; data['current']['low']: data['current']['low'] = hour['apparentTemperature'] if hour['apparentTemperature'] &gt; data['current']['high']:
data['current']['high'] = hour['apparentTemperature']

data['current']['precip'] = forecast['daily']['data'][0]['precipProbability']

return data

forecast = None
cur_time = time.time()
interval = 5*60
delay = 2

while True:
if forecast is not None and (cur_time + interval) &gt; time.time():
pass
else:
forecast = getForecast( [api key] ,38.6270,-90.1994)
data = prepData(forecast)
cur_time = time.time()

showCurrent(data['current'])
time.sleep(delay)
showSevenDayTemps(data['lows'], 'low')
time.sleep(delay)
showSevenDayTemps(data['highs'], 'high')
time.sleep(delay)
showSevenDayPrecip(data['precip'], 'precip')
time.sleep(delay)

We’ll just go through it line by line:

import json, time, os.path
import blinkt, requests

status_colors = {'current':[1,1,1],'high':[1,0,0],'low':[0,0,1],'precip':[0,1,0]}

blinkt.set_clear_on_exit()
blinkt.set_brightness(.1)

First, we’re importing the necessary packages, including blinkt to control the LEDs and requests to access the API. The status_colors variable is a dict of the screens and their associated indicator colors. The next two functions tell the script to clear out all the lights when the program exits, and to set the default brightness of the LEDs to the minimum (you can control the brightness individually when you set the pixel, though anything more than the minimum is very bright.

Skipping down to the main program:

forecast = None
cur_time = time.time()
interval = 5*60
delay = 2

interval and delay are about timing, but different things. interval determines how long to wait before getting a new update from the API. As written, the program makes a new call every five minutes. The Pi Zero doesn’t have a real time clock, so if I need the actual time I have to sync it from the Internet somewhere. But I realized I don’t actually need to know real time, only elapsed time. So I get whatever time the Pi thinks it is when the program starts (cur_time = time.time()) and then just check how much time has elapsed to see if I need an update from the API.

delay determines how long to pause on each screen. Right now it’s set at two seconds, which is probably as quick as I’d want it to be. A touch slower might be better.

Next is a loop that runs continuously while the program is running.

while True:
if forecast is not None and (cur_time + interval) &gt; time.time():
pass
else:
forecast = getForecast( [API key here] ,38.6270,-90.1994)
data = prepData(forecast)
cur_time = time.time()

First I have to determine whether or not to hit the API for a new forecast. I need to get a new forecast whenever I either don’t have one at all (e.g. the user has just started the program) or if it’s out of date. So the first condition (line 112) just says if both of those conditions are false, I don’t need a new one.

If I do need a new one, I go get it (getForecast()), passing in my API key, and the lat/lng of the location. One enhancement might be asking the user for a lat/lng on run, or even a city/state or ZIP and geolocating. Here’s the getForecast() function:

def getForecast(key,lat,lng):
url = 'https://api.darksky.net/forecast/' + key + '/' + str(lat) + ',' + str(lng)

stl = requests.get(url)

return stl.json()

Pretty straightforward. The API has a few optional parameters, but a basic call like this gets everything. The function returns the json response.

After I’ve got the data, I do a little prep to make it easier to work with. That’s prepData() on line 116. Here it is:

def prepData(forecast):

data = {'lows': [], 'highs': [], 'precip': [], 'current': {}}

for day in forecast['daily']['data']:
data['lows'].append(day['apparentTemperatureLow'])
data['highs'].append(day['apparentTemperatureHigh'])
data['precip'].append(day['precipProbability'])

curr_temp = forecast['currently']['apparentTemperature']
data['current']['temp'] = curr_temp
data['current']['low'] = curr_temp
data['current']['high'] = curr_temp

for hour in forecast['hourly']['data'][:24]:
if hour['apparentTemperature'] &lt; data['current']['low']: data['current']['low'] = hour['apparentTemperature'] if hour['apparentTemperature'] &gt; data['current']['high']:
data['current']['high'] = hour['apparentTemperature']

data['current']['precip'] = forecast['daily']['data'][0]['precipProbability']

return data

This takes the entire forecast returned by the API and whittles it down into just the datapoints that I need. First I create a dict with no data in it to clear out any existing data. Next I get the seven-day forecasts for low, high and precipitation, creating a list for each measurement. Finally I work on the current conditions. I decided to display the current temperature, the low and high for the next 24 hours and the current day’s precipitation probability. So I set all three values equal to the current temp, then loop through the first 24 hours and update the low or high value whenever I find one that’s lower or higher than the one already stored. I may decide to do the same thing with the precipitation probability. As it is now, the “current” screen just shows the current day’s chance of precipitation, which isn’t that useful at 10 p.m.

Then after I’ve updated the data from the API and prepared the data, I update cur_time to the current system time (line 117), so I won’t check the API again until the interval has passed.

Now, on to displaying the data!

showCurrent(data['current'])
time.sleep(delay)
showSevenDayTemps(data['lows'], 'low')
time.sleep(delay)
showSevenDayTemps(data['highs'], 'high')
time.sleep(delay)
showSevenDayPrecip(data['precip'], 'precip')
time.sleep(delay)

(this is all still in the while True loop)

I have three functions called four times, each one followed by a delay. The first screen shows current conditions:

def showCurrent(data):
blinkt.clear()
# set status light
color = status_colors['current']
blinkt.set_pixel(7,color[0],color[1],color[2])
# get current temp (use color scale)
color = getTempColor(data['temp'])
blinkt.set_pixel(0,color[0],color[1],color[2])
# daily high and low (use color scale)
color = getTempColor(data['low'])
blinkt.set_pixel(1,color[0],color[1],color[2])
color = getTempColor(data['high'])
blinkt.set_pixel(2,color[0],color[1],color[2])
# precip (red, yellow, green)
color = getStoplightColor(data['precip'],.25,.75)
blinkt.set_pixel(3,color[0],color[1],color[2])

blinkt.show()

blinkt.clear() is part of the blinkt library that sets all the pixels to nothing. This just ensures that nothing carries over from the other screens.

Next, I set the status indicator. This uses the status_colors dict to get the color, and blinkt.set_pixel() to set the last pixel to the color (in this case, white).

The first three pixels indicate current temperature, 24-hour low and 24-hour high, respectively. I wrote a getTempColor() function to return the appropriate color. Here it is:

def getTempColor(temp):
if temp &lt;= 0:
color = [10,0,30]
elif temp &lt;= 32:
color = [0,0,30]
elif temp &lt;= 50:
color = [0,15,30]
elif temp &lt;= 65:
color = [0,30,0]
elif temp &lt;= 80:
color = [60,20,0]
elif temp &lt;= 95:
color = [60,10,0]
else:
color = [30,0,0]
return color

It just takes a temperature and figures out which bucket it falls into, returning the appropriate color. I chose the breakpoints somewhat arbitrarily. I knew I didn’t want to have too many colors to distinguish between, so that limited the number of buckets. The buckets and colors are:

  • Really really cold (< 0°F) — purple
  • Below freezing — dark blue
  • Cold — light blue
  • A little chilly — green
  • Nice — yellow
  • A little warm — orange
  • Really hot – red

The fourth pixel on the current screen gives the precipitation probability. I wrote a getStoplightColor() function to take a probability and two thresholds and return a stoplight value. Here’s that one:

def getStoplightColor(prob,low,high):
if prob &lt; low:
color = [0,30,0]
elif prob &lt; high:
color = [60,20,0]
else:
color = [30,0,0]
return color

Pretty simple there. For precipitation, I decided to go with buckets of less than 25%, 25-75% and greater than 75%, showing green, yellow and red respectively.

I’m only using four pixels, plus the status indicator on the current screen. Once I have those all set, all that’s left is to call blinkt.show() to update the display.

The next two screens are the seven-day low and seven-day high temperature forecasts. Those both use the same function, showSevenDayTemps(), which takes the data and which value it is (high or low). Here’s that function:

def showSevenDayTemps(temps, which):
blinkt.clear()
# set status light
color = status_colors[which]
blinkt.set_pixel(7,color[0],color[1],color[2])
for i in range(7):
color = getTempColor(temps[i])
blinkt.set_pixel(i,color[0],color[1],color[2])
blinkt.show()

Again I clear the pixels of their previous values and set the status pixel. Next is simply stepping through the list of temperatures, getting the correct color with getTempColor() and setting the pixel. After I’ve done all that, I call blinkt.show() to update the display.

And finally, we have the seven-day precipitation forecast, with showSevenDayPrecip():

def showSevenDayPrecip(precip, which):
blinkt.clear()
# set status light
color = status_colors[which]
blinkt.set_pixel(7,color[0],color[1],color[2])
for i in range(7):
color = getStoplightColor(precip[i],.25,.75)
blinkt.set_pixel(i,color[0],color[1],color[2])
blinkt.show()

This is almost identical to the temps function, except it calls getStoplightColor() instead.

And that’s it — the program just cycles through that while True loop, updating the data from the API as necessary.

Conclusions and future

The full code is available at this Gist.

Overall, the Blinkt is really easy to work with, mostly due to the library it ships with and the fact that there are only 8 LEDs to manage. It can be tricky to get the LEDs to display the color you’re looking for — adjusting yellow to be distinguishable from orange, for example. The brightness is also tricky to manage — brighter colors are easier to differentiate, but a white pixel at full brightness is painful to look at unless you’re using a diffuser of some kind. If you want to mount this permanently with a diffuser, you’d probably want to modify the code to account for it.

Some other stuff I’ve thought of that might be useful to add:

  • Ask user for location at runtime
  • Screen depicting image of current weather (e.g. oriented vertically, a clear day would be one bright yellow pixel for the sun, several bright blue pixels for the sky, and one green pixel for the ground). Could perhaps even animate between screens to show progress over a day or something
  • Blinking current precipitation indicator to show it’s happening now or soon, rather than just probability
  • Blinking alert indicator to show any weather alerts
  • Moon phase indicator
  • Cloud cover indicator
  • Start script automatically on boot to allow running without computer connection (would need Wi-Fi adapter, and automatic internet connection)

In conclusion: It’s a fun project with lots of opportunities to continue hacking on.


  1. I had already soldered some headers onto one of my Pis, but unfortunately I couldn’t get the Blinkt working. It did work on another Pi, so I figured it was my soldering job. I de-soldered and re-soldered the headers from the Pi and it works now. 
  2. There are also commands to clear out all the pixels, set them all to be the same, and change the brightness of all pixels at once, among others. 

I haven’t really done one of these before, so here goes.

Personally

The biggest news was finding out we’re having a second kid. That should happen within a month, so we’ve been anticipating it most of the year. Decided this time around to not find out if it’s a boy or girl, thus doubling the difficulty of choosing a name.

The current kid grows up more and more each week (as happens, I suppose). One of the most surprising things was when he began singing more: On the way home from school one day he knocked out a pretty good rendition of the National Anthem, and toward the end of the year he started singing a handful of Christmas carols including about three verses of Deck the Halls as well as more words of Feliz Navidad than I know. He keeps saying he wants a baby sister but we’ll see how it goes.

Trips

We took a few trips this year: We all took Amtrak to Washington D.C. for a week in May/June. I had a work conference there and Pamela and Maxwell came along. We got to see the sights and met up with Kate, Kevin and Ann, friends of mine from high school. Went to the Smithsonian Museum of Natural History, which was pretty cool. Bought a bunch of rocks as souvenirs. Flew back, Maxwell’s first time on a plane. He did fine — didn’t really realize what was going on, I think.

Also went back to Danville in July for my aunt’s birthday party. The hot-air balloon festival happened to be going on then too, so we went out to the airport to see that. Also went back in November for Thanksgiving, instead of for Christmas, because of the new baby.

Not really an out of town trip, but we did go over to Columbia, Ill. to see the eclipse. I really enjoyed it. Not sure how to put it into words.

Went on a couple other work trips.

Home improvement

Got some work done around the house: Took a tree down in the backyard that was pushing the fence into the neighbor’s yard and got the one in front pruned. Also cleared out much of the invasive honeysuckle bush along the back fence, hoping to plant a hedge there in the spring. My friend Katheryn offered us a swingset that her kids had outgrown, so Pam’s parents and we went over there to break it down. Put it up in our backyard a couple weeks later when my parents came to visit, so my dad could help. Finally got the deck on the back of the house replaced. Also working on getting the upstairs in shape to move some of the kids’ toys up there and make a little more room for us down here.

Hobbies

Played board games with friends a few times, and learned some new ones: Good Cop, Bad Cop; Arboretum (both played with Barb and Jim); Tiny Epic Galaxies (which I got for Christmas); Lost Cities (which Pam got for Christmas); Tournament at Camelot (bought for a game night with Barb and Jim). Also built a couple Kallax shelves from IKEA to hold our games and books and such to replace some decade-or-more old shelves we had in the dining room.

Didn’t golf at all. Pamela did a bit, but I don’t think I got my clubs out once, even to go to the driving range. I did take up woodcarving for a couple weeks. When I was clearing out the yard I got a branch that I thought might make a good walking stick, and rather than leave the bark on as I did last time, I stripped it. I then got it in my head that it might be nice to carve a design into it. I picked up a basic set of chisels and a hunk of basswood (which I later found out is also Linden, which is coincidentally one of the trees I have) to practice with. Didn’t really get anywhere with it (I have block of wood with something roughly approximating a leaf in low relief on top), but I still have the walking stick branch in the basement so maybe next year.

Kept on singing with Greenleaf. I handled our contract for the Renaissance Faire, which went okay. They insisted on five weekends, which was a bit overwhelming for our group. We took on a couple extra singers just for faire which helped immensely. We also finally nailed things down for a recording and did that in September. Got to sing at Eliot after missing it last year for Pete’s wedding. Also did our concert at Prince of Peace, did the St. Charles Christmas Traditions parade again and sang at the Daniel Boone House in an old chapel lit entirely by candlelight.

Got a new iPad (the 9.7″ iPad pro), and upgraded my phone from a 6 Plus to an 8 Plus. Also backed a Kickstarter by Loog and got a cherry red 3-string electric guitar. Kid likes it too. Got a macro lens for my camera for Christmas and I’m having a great deal of fun with it so far.

Arts

Read fewer books than I should. Borrowed Raven Rock after hearing an NPR interview with the author. It’s about Cold War preparations in the U.S. for nuclear war. Quite thorough, and interesting. I enjoyed it. I also read Jonathan Franzen’s The Corrections and liked it.

I got to see Chris Thile when he came to the radio station to play a show. I met him before he played and told him how much I enjoyed his hosting of The Show Formerly Known as A Prairie Home Companion (it wasn’t “Live From Here” yet) as well as his collaboration with Brad Mehldau, which I’d been listening to a lot of. I’ve mostly just kept up with podcasts — Merlin’s (Back to Work, Reconcilable Differences, and I started listening to Do By Friday), Marco’s (ATP and Under the Radar) and Pete’s (How to Be Awesome at Your Job) as well as some others (99% Invisible, Broadway Backstory, Mortified, The Moth, The Omni Show, etc.). Also S-Town.

In live theater, there wasn’t much. Pamela and I saw The Moth on stage at The Sheldon when our station brought them in, and then I saw my friend Ann in New Line’s The Sweet Smell of Success. That’s about it, really — I need to see more shows.

Food/Booze

Most notably, I got to try some Pappy Van Winkle 12-year at the Royale in January. Pam had taken Maxwell up north to visit her grandparents, leaving me behind. There was a big ice storm here. Steven Smith posted a photo of the bottle on Twitter, saying “A good reason to leave the house. It won’t last long.” I was there in 10 minutes.

In other booze news, I nabbed some 2017 Urban Chestnut Wolpertinger and the 2017 release of the Bourbon County Brand Stout.

I had several notable meals. Anew, an event space near my job, had several “test kitchen/popup” things this year. I went to one in March put on by The Social Affair with some delicious biscuits and gravy. Then there was one in December by Café Osage, where I had a pork schnitzel sandwich on challah bread. Both delicious. And a new place opened up down the street from work, inside KDHX: Squatters Café. I’ve only been twice, but each time has been great.

Work

Did some stuff at work. Lots of staff turnover. A couple trips. Lots of stuff to look forward to.

Projects

Probably the biggest project I worked on was our Millennium Mayor project. It was a limited-run podcast focusing on a handful of days in the tenure of Mayor Slay, at the end of his run. I made a stand-alone website for it, and it turned out not too bad, I think (mostly because of the content, not my work, but still).

Also put together a one-page mayoral candidates guide for the primary race that I particularly liked how it came together.

Did a thing where we graded Missouri legislators. It was…okay. I like the idea, but there’s so much intangible that it would take a lot more human intervention to do well than we allowed for it.

Published our “NFL Tweets” project — an idea by a reporter to ask who St. Louisans were tweeting about in the NFL since the Rams left. It also turned out alright — my largest dataset in a project to date. But that data came with some shortcomings that made it tough to draw conclusions from.

Also did election graphics (of course), census graphics, a timeline of the East Saint Louis riots and a quiz to help figure out if you have the right ID to vote.

Trips

Kicked off the year with a trip to Jacksonville, Florida for NICAR 2017. Good times. The hotel was a bit less conducive to hanging out than in prior years, but overall it was great. It’s always nice to be able to hang out with the folks I usually only ever see online. I also remember the river was just outside half of the conference rooms, so you could see the boats going by.

In May/June I got to go on the aforementioned trip to D.C. for the Education Writers Association conference because We Live Here’s stories on racial disparities in suspensions was nominated for an award, and they asked me to present on it. I got to be on a panel with Nathaniel Lash, who presented on his Pulitzer Prize-winning project Failure Factories.

And in July, I filled in for coworkers at the Missouri Urban Journalism Workshop, a week-long “journalism camp” for high-schoolers at Mizzou. Most of the other instructors had some connection to Mizzou, but not me. Still, I had a good time and it was refreshing to get my head out of the code and get back to basics again. Also I got to meet some friends from KBIA for the first time, so that was nice also.

Drone

Toward the end of 2016, when the FAA was getting ready to enact Part 107 to make commercial drone use easier, I went to a boot camp to learn what I needed to learn to get licensed. I pushed to get one at work, but it never materialized. Until this year.

We got a donation earmarked for the purpose, so I took the Part 107 test (passed with a 95%), and spend the end of the year ordering, then testing the drone as well as putting together all our documentation and procedures about it. I’m presenting on it to the newsroom next week and am looking forward to using it in the coming year.

Other stuff

I got to meet and interview Jer Thorp when he was here installing a project of his called the St. Louis Map Room. It aired, one of a few times I’ve been on the radio. That was fun.

Here’s a presentation I gave at the National Institute of Computer Assisted Reporting (NICAR) annual conference back in March in Jacksonville, Fla.

For the past few years, I’ve talked about how to do data in your newsroom when you’re the only one doing it. This year I talked less about specific tips and tools and more about the conceptual process, more broadly — good things to think about.

The idea was to talk through the process of planning, pitching and executing data stories when you’re the only one doing them.

You can find the presentation here.

Note: I transcribed the notes from the conference audio and tried to clean it up a bit; please forgive any typos or phrasing that doesn’t translate well into writing.

In an effort to spread knowledge throughout the newsroom, those of us who are not reporters have been asked to give workshops to share some of our skills. The thing I chose to share this first time was Microsoft Excel.

As I pitched it, it was Excel 101: Starting out with the very basics, and getting as far as we could go in the scheduled half hour.

It seemed to go well. We covered:

  • Basic navigation
  • Cell References, relative and absolute
  • Formulas, values and formatting
  • Basic cell calculations
  • Excel Formulas (SUM and AVERAGE)

Then we got into a real-world dataset and looked at sorting and filtering and calculations. At the very end I gave a peek at PivotTables just to demonstrate what Excel is capable of.

Here’s an Excel tipsheet (PDF) that I created for an earlier workshop that also covers these basics.

I was invited to give a presentation on mapping to the local chapter of the Online News Association a while back. You can see it online here.

I used the reveal.js framework to get it online, so you can see an expanded version of my notes for most slides by using the down arrow on the keyboard or by clicking the down arrow in the presentation.

I drew most of the slides with my iPad + Pencil. Initially I was using it to brainstorm, and then thought, why not just make these the slides. I think it turned out ok.