A Python Refactoring Day

I have spent practically all day coding, coding, coding. I am adding features to, and (more than anything) refactoring, the Python data validation program that I have been working on for my day job. The result isn’t perfect, but it is far better than where it was this morning.

First, I broke up my 600-line script into numerous module files. I was happy to learn how easy this is, but I am still a novice at what I can do with the Python package I have created. Having multiple files allowed me to refactor the major features of the application, and to identify the customization points I need to work on next, without getting lost in a single, enormous source code file.

Then, I started to delete stale code, refactor old but working code, and optimize the performance of the major data pipelines. It felt good to make everything streamlined.

Lastly, I did some testing. I don’t have proper unit tests, and still need to learn how to structure a Python package properly to allow for unit testing. That may be tomorrow’s task.

Chateau Picard

When I was a kid, I watched Star Trek: The Next Generation. One thing that I remember is that Captain Picard—in some future timeline, at least—retires to his family’s vineyard in France. It was a place that looked pleasant but terribly boring. It was far afield from the exotic, exciting locales that his starship captain career brought him to.

I always wondered why someone with such an exciting life would end up someplace so boring. Now that I’m older, I get it. I fantasize about spending my old age (which is still a long way off) with my wife in a pleasant, quiet, and otherwise unremarkable New England town—the kind of place that was abhorrently dull to me when I was younger.

Be excellent to each other

Tonight I had deep conversations with my wife and (later on) with my half-sister. They were rewarding, but they have exhausted the part of my brain that likes to write meaningful, or at least useful, blog posts. I guess my message to the world today is: be excellent to each other, even when it’s hard.

🎵 Betwixt

When I was in college at Brandeis University, a friend of a friend1 was in a band. A cool band. He played cello in Betwixt, which was, at the time, a critically-acclaimed Boston-based noise/art-rock band. They played a few shows on campus, and I’m pretty sure I saw them play in Boston at least once, too. It was always a blast to see them perform. Their onstage vibe was cool and sexy. The singer was always dancing and working the crowd, while the lead guitarist stood in the back doing everything he could to avoid playing a normal guitar line. His guitar, amp, and effects pedals were coerced into making the most unusual sounds, all rhythmically slotted into into cheerful, poppy tunes. All together, they blew my mind.

I found their music on Apple Music today and listened to their two albums, Moustache and The Salty Tang. It was a fun nostalgia trip.


  1. And fellow Brandeisian. ↩︎

I’m giving OneNote an honest try this time

I am giving Microsoft OneNote a try again at work.

This is surprising to me. I’m a plaintext lover who has taken notes in Sublime Text or Visual Studio Code for years. It seems crazy to move from simple-to-understand text files to a clunky, proprietary format stored in a monolithic database in a weird location on my system.

Furthermore, OneNote is the one corner of Microsoft Office that I have never liked. Its notebook metaphor, with its tabs and its pages, feels outdated. The way that the notes consist of floating text boxes that are bounded by visible rectangles, is visually clunky when compared to Apple Notes. Its rich-text editor is powerful but feels slow; using it feels like writing in Microsoft Word, which I never want to do1. It doesn’t even support Markdown, which is my preferred way of writing just about everything. I don’t use a Windows tablet or sync my work stuff to an iPad; if I did, I probably would have switched to OneNote already, just for its stylus support and drawing features.

Despite all my misgivings about it, I’m giving OneNote a real try right now for several reasons. First, I need to switch things up. Using Visual Studio Code for writing, task management, executing scripts, and coding is just too much. I have so many Visual Studio Code windows open that its hard to get to the right one. Also, Visual Studio Code is versatile, but it is not quick.

Second, my company constantly promotes OneNote constantly on both the intranet home page and on our company-mandated screensavers. Visually, I can’t escape its name or icon. I figured that I may as well try it. For all I know a ton of people who don’t have the same hang-ups about its design are using it and getting a lot out of it.

Third, I tend to stick as much to Microsoft software as possible on my Windows machines: I practically live in Excel, I edit in Word, I communicate in Outlook, browse the web in Edge, and write and code in Visual Studio Code2. I’m the kind of nut who wishes my company would switch from Webex to Microsoft Teams—despite people hating Microsoft Teams—because I want to be using more Microsoft software.

Lastly, and maybe most importantly in the long run, OneNote offers tight integration with Outlook. When looking at a calendar entry, I can click one toolbar button to immediately start taking notes in OneNote. Similarly, when reading an email, I can click one toolbar button to immediately import it into OneNote. Who knows, maybe even OneNote web clipper will be useful.

So I am going to give OneNote an honest try for the next week and see if I can stick with it. From a user-interface standpoint, I may be able to live with it. I switched the font from Calibri to Consolas, so it looks a bit more like my Visual Studio Code setup. I am learning to ignore the ever-expanding gray box that surrounds the text I write. More importantly, I found an option to put the page list on the left instead of the right, which brings it a step closer to the Mac and iOS three-pane interfaces that I vastly prefer to Microsoft’s brutalist designs.

The real test is not whether I learn to like it, but whether I start using it to take more notes and track more tasks.


  1. I very much like Word for formatting documents and editing them with Track Changes. I hate writing drafts in Word, though, most of the time, because all the formatting stuff is distracting. ↩︎

  2. I don’t use Visual Studio much anymore, but used to love it, despite its ugliness. ↩︎

🎙 The Most Thorough Case Against Crypto I’ve Heard

The best podcast episode I listened to today was the April 5th episode of The Ezra Klein Show:

Dan Olson is the creator of a two-hour-YouTube video, “Line Goes Up,” that has now been viewed nearly seven million times. “Line Goes Up” is the single most comprehensive critique of crypto that I’ve ever heard. And that’s because Olson isn’t just focused on cryptocurrencies as a technology or an asset class, but on the crypto universe as a distinct culture underpinned by a powerful ideology. It’s easy to think about the lingo, the acronyms and the myths associated with the crypto world as incidental to the value of cryptocurrencies and NFTs as assets. But for Olson, the culture and the currency are inextricably linked. And once you’ve made that connection, suddenly a lot of the problems, warning signs and potential dangers of crypto become visible in a new way.

The longer I look at crypto the more of a scam it seems to be. Dan Olson brings almost every argument I have read—or made myself—against crypto to the table, and pushes some of them further than I have thought.

One of Olson’s most interesting insights is that the pseudo-anonymity that crypto wallets will, counter-intuitively, reduce your financial price. This is because crypto wallets are pseudonymous1 rather than anonymous, and a blockchain, which stores transaction history for crypto wallets, is open. Therefore, if you know someone’s crypto wallet ID—because you paid them back for something with crypto—you could use that ID to look up all their prior transactions on the blockchain. You could get a good idea how much money they have or spend, and get a good idea about where they spend it, too.

I am concerned that governments eventually will instate their own cryptocurrencies, perhaps for nefarious purposes but more likely for stupid ones, and we will all be stuck using them (ahem, ride that rocket-ship to the moon2) despite all their downsides.


  1. Parties in transactions are identified by codes or hashes rather than by name. ↩︎

  2. This is crypto-slang, which all of us who browse Reddit or occasionally watch TV commercials probably know by now. ↩︎

📺 Friday Night Baseball

I watched about an hour of Apple TV+’s Friday Night Baseball last night.

The picture quality was fantastic, both in terms of sharpness and color. I think that the MLB service also has great picture quality, too, but Apple’s streams looked better to me than Thursday’s streams from MLB.tv. I liked the near lack of graphics and other nonsense on the screen.

The announcers were sporadically good, but sometimes they were so far off topic that they didn’t bother to call the game. At times they were so caught up in their own conversation that it reminded me of watching meaningless late-season games between teams with no chance of making the playoffs. I bet the announcers got a bunch of notes about this already and will try to stay more focused on the games going forward.

My daughter is turning 10 next month, and we are finally getting her some “older-kid” gifts. I just ordered her a pair of HomePod minis to use as a stereo pair in her room. I think she is going to love them. Someday she will play something other than Taylor Swift on them, too.

I am wondering if a wireless CarPlay adapter would be worth it. It seems intriguing, but maybe dealing with BlueTooth is more trouble than it’s worth.

My wife and I just ran lines with my daughter for a skit she is working on for her acting class. It was kind of hilarious to act with her. I am either a terrific actor or a terrible ham. I can’t tell which, but I think my wife thinks it is the latter. 😅

📺 Why does the premiere of Apple’s Friday Night Baseball have to coincide with the season finale of Severance?

Refactoring Python

I completed my Python program this morning, but could not resist refactoring it this evening. I cut my main method’s size in half, compartmentalized my code better in classes, and made the program structure more data-driven rather than process-driven.

The work should pay off for me, because I will have to make copies of my program and customize each copy for a different type of data valuation.

I probably over-engineered it, though; it went from 525 lines to 625 in the process.

Python for data validation

I spent a good chunk of time today creating a data validation program using Python. Python is a language I know (to some extent) but I barely use. Instead, I write scripts in PowerShell, create more complex programs in C#, and analyze data with SQL queries, Galvanize Analytics, or Power Query in Excel. My goal today was to find a way to validate a large number of .csv files, which have a great many columns and will be of questionable quality. My normal tools and languages would be either too cumbersome or too limited to do this, so I reached for Python.

Python is great at importing .csv files, parsing them, modifying them, and outputting a modified copy. Within a few minutes of research, I discovered a Python package called petl, which contains a ready-made data validation pipeline. I just needed to create validation functions, which are simple 1-3 line functions, and use them to define constraints, which are simply dictionaries. All those constraints get put into an array and passed to an already-written validation method.

Coding this program has been fun and remarkably efficient. It has been fun coding in Python again. I particularly love how packages can make the hard parts easy and leave me with more time to spend on my data work rather than on creating scaffolding for the program. I will have to look into more uses for Python going forward.

The reward for doing good work

At the start of my career I learned an important lesson: The reward for doing good work is always more work. That often works in your favor. As you advance in your career, you move from doing many simple, repetitive tasks to solving fewer, more complex, and more interesting problems. In general, my experience bears this out—but not always.

In my first real job, I was a software developer in a small group within a large company. I started out knowing very little about how to do my job other than the programming fundamentals I picked up in A.P. Computer Science. However, I was smart and driven; I worked very hard and eventually became the best and most knowledgable programmer in my group—at least when it came to web and database development. For my effort, I was award with promotions and raises 1, but the nature of my work actually got worse instead of better.

Because I was so good at figuring out how other people’s code worked, troubleshooting, and fixing the hardest-to-fix bugs, those became my primary responsibilities as a programmer. I was no longer writing small systems from scratch or developing clean architectures. Instead, I had two roles. First, I was the Sherlock Holmes of diagnosing and fixing coding problems for other members of my team. Second, I was in charge of the technical side of large software integration projects. These are projects that involve bringing in code from people outside the company and making it work on our company’s systems. In both of these roles, I spent many hours a day wrangling with other people’s messy, awful codebases. In the end, my projects were successful, which was rewarding, but a lot of the day-to-day work was mind-meltingly difficult and unsatisfying.

I had moved from performing lots of simple tasks well to solving more complex—but not more interesting—problems. Sometimes I think that work, programming, and life works out that way.


  1. Don’t get too excited. I was always underpaid in those roles. At the time, I liked what I was doing, and lacked the confidence and the vision to take the risks necessary to switch companies in pursuit of a higher salary. ↩︎

🎮 Children of Morta

Over the past week, I played through Children of Morta on my Nintendo Switch. It is a Roguelike game built around combat and dungeon crawling, with several gimmicks to keep it interesting. There is a strong story element and a very enthusiastic narrator; unfortunately, I didn’t think the story amounted to much in the end.

Overall, I enjoyed it. It reminded me a little bit of the Diablo games, though my memory of those games is quite hazy.

At first I found it nearly impossible to beat the first dungeon’s boss. I could reach the boss from my very first run, but I could not defeat it. I discovered that you have to grind and level up your characters’ stats. Once I did that many, many times, my characters were strong enough to kill that boss, and basically everything else that came afterward.

I very much appreciated that you did not have to mash the attack button endlessly during combat. Instead you rock the right analog stick in the direction you want to loose your arrows or swing your sword. It works very well, much like a twin-stick shooter.

While the game is fun, it gave me some frustrating moments, too. I experienced a game-breaking bug several times near the end of the game. Sound effects would loop and then cut out entirely; eventually the game would crash. I lost one of my runs entirely due to this bug. It hit me again during my fight with the final boss, which really put me on edge; fortunately, the game did not crash and I was able to complete it anyway.

My wife and I hired a cleaning service for the first time since the COVID pandemic started. Of course we spent most of today frantically cleaning the house to prepare for them. 😅

I can’t seem to read books lately. It’s hard for me to even watch TV shows. I wonder if my attention span is shot.

📺 Bill Hader Created a Killer to Cope

Rebecca Keegan wrote an entertaining and informative profile of Barry star and co-creator Bill Hader in The Hollywood Reporter:

In Barry, which returns to HBO for its third season April 24, Hader plays a reluctant hitman who wants to be an actor. Barry is just really great at killing. This is not so different, Berg points out, from Hader, who became a star on SNL in his 20s almost in spite of himself, fought crippling anxiety on the live broadcasts, and really just wanted to write and direct.

I am very excited that Barry is returning to HBO soon. It is a daring show on many levels. Plot-wise it flirts with show-ending (or at least show-ruining) disaster several times each season. I have no idea how the cliffhanger at the end of Season 2 will be resolved, but I am confident that the writers came up with something satisfying.

I love Bill Hader, too. He is amazing and deserves every bit of success he has had.

Hot Sauce

I have watched enough episodes of Hot Ones on YouTube to pique my interest in hot sauces. So far I have a bottle of a chipotle-inspired sauce and a bottle of sriracha. I am trying to enjoy them. So far they taste more acidic than hot to me. Perhaps I need to learn to cook with hot peppers instead of dabbing sauce on things.

Try telling Memento Mori to a five-year-old

My five-year-old son just realized that he, and everyone he knows, will die someday. It has lead to unexpected, devastating dinner conversations the past two evenings.

I don’t know why he started thinking about it. Out of nowhere, he started asking questions about death at dinner last night. At the time, my daughter and I had just started talking about Beethoven. I had looked up the composer’s Wikipedia entry and was reciting when he was born and when he died. Suddenly, my son—who knows that batteries die, that plants die, and even that animals die—asked in a shocked voice, “Why did he die?” Within a second, his lips started to quiver and he started to cry. A dozen other questions followed, none of them we were prepared to answer at a family dinner on a school night.

My daughter went through this same emotional journey four or five years ago. For her, it was precipitated by the death of my father, who was the first close family member to die since was born. She couldn’t understand why her Grampa was gone, and quickly became terrified that she would die, too. These thoughts scared her so much that she was afraid to fall asleep; my wife or I had to stay with her night after night in her bed to comfort her. We had a lot of talks about death with her to help her understand what it means and to begrudgingly accept it. Of course we told her the pleasant half-truths that death only happens to very old people and is nothing she needs to worry about for a long, long time.

My son has surprisingly practical concerns about death. Last night, he didn’t ask usb “Will I die?” He figured that out on his own and asked instead, “When will I die?” Tonight he asked us, with eyes wide with alarm, “Where will I go when I die?” My wife and I tried to explain to him that no one really knows, or that he would return to wherever he was before he was born. Those answers only made him more scared. Upon hearing them, he suddenly realized that he might not die in the same place as us or his sister, and became loudly distraught that he might end up somewhere where he couldn’t get to us anymore.

He then asked when my wife and I, are going to die. That did not bother me. When he asked when his sister was going to die, I teared up because it seemed unimaginable. Finally, before we could steer him to another, far lighter, topic of discussion, he became concerned, to the point of tears, that he is too big or too small to “fit” there—whatever that means. It astounds me that the physical dimensions of the afterlife—or whatever he imagines it to be—are what my little boy is worried about tonight.

All of my son’s thoughts and ideas about death have come, as far as we know, from his own imagination. No one close to him has died recently. We don’t talk about death much at all in our family; it is kind of taboo in our day-to-day conversations. Reflecting back on the past few weeks, however, I realize that he may have overheard the adults in the family discussing the untimely death of our rabbi’s husband, which occurred a week or so ago and understandably made us all very sad. We tried not to discuss it in front of our children—who did not really know the man—so that we would not upset them. Perhaps my son overheard us anyway.

It took my daughter a long time to come to terms with the idea that she is going to die someday. I am expecting my son to follow in her footsteps. He will probably have occasional nightmares about death—or at least have trouble falling asleep with worry about it. While it makes me sad to see my son start to go through this phase—and it has certainly led to some difficult dinner conversations—I know that he, like my daughter, is an emotionally healthy kid and will be fine. I expect him to think about death some more, talk about it with us, and become more emotionally mature through the process. He’s going to get through this; we all do.

It is quite a burden to understand that you, someday, are going to die. I wish I could ease that burden for my children, but I am wise enough to know that I cannot.

🎙 Draft of the Ages

The best podcast episode I listened to today was the 400th episode of Upgrade:

It’s episode 400! We evaluate the forward-looking predictions we made back in episode 300, and then draft stories we’ll be talking about over the next hundred episodes! Also, an Apple TV+ movie won Best Picture and we round up an awful lot of Apple rumors.

Upgrade is one of my favorite tech podcasts. Hosts Make Hurley and Jason Snell have a great rapport, and mostly talk about Apple and streaming TV services, which are beats that I enjoy learning and speculating about. Like most podcasts that track Apple, they they make predictions about product announcements before they happen. Unlike most other podcasts, they make the predictions fun by presenting them in the form of fantasy-sports-style drafts. It is a great tech podcast. I cannot believe I have listened to 400 of them already!

📺 Rick Beato on YouTube

One thing I have gotten into lately is watching videos on YouTube in which musicians talk about music. One channel/host I like is Rick Beato. He does everything from break down the music theory behind certain pop songs, to live interviews, to simply gushing about great performances and great audio production. What makes his videos enjoyable is his infectious enthusiasm for all kinds of music, and his deep respect for artists, engineers, and producers.

Will Smith hits Chris Rock over joke about Jada Pinkett Smith at Oscars

I’m super glad my wife and I didn’t bother to watch this nonsense last night. 🙄

🎵 Do you really want to cry today?

Watch this video: “Hurt” by Johnny Cash. I dare you.

Everything about Cash’s performance is powerful. Honestly, though, the music video’s imagery is perfectly attuned to the music and to the singer. Director Mark Romanek and his small team who made the video were working at the top of the game.

(I didn’t just learn about this song or video. On Friday, I watched a short documentary about music producer Rick Rubin that reminded me of it.)

🎵 FTHC by Frank Turner

One of my favorite artists from the last few years, Frank Turner, has a new album out: FTHC.1 It—at least parts of it—represents a swing back from his acoustic guitar-led singer-songwriter fare to his roots as a hardcore artist. Yes, that means it’s peppered with screaming and righteous anger. That usually isn’t my cup of tea, but I’m down with it. Frank Turner is cool and makes good records; you should listen to them.

What I love about Frank Turner is that he comes across as incredibly, even uncomfortably, open and honest. His songs mix together toughness with sensitivity, and cynicism with optimism, in a way that reveals both his maturity as a person and his cleverness when it comes to song structure. His lyrics range from poetic and clever to raw and emotional. His music ranges from quiet and beautiful to thunderous and anthemic—often in the same song. Overall, his albums give you the impression that he held nothing back in creating them. I very much respect and admire that.2

Unlike any other musician I can think of, Turner even did a very generous two-part interview with a tech podcast, Dialog, a few years ago. He talked about his songwriting process and what it was like to be a working musician who is a little older and wiser than the clichéd young rock star you might imagine.


  1. According to Wikipedia, it is an initialization of “Frank Turner Hardcore.” ↩︎

  2. Another artist I like that does the same thing is The Avett Brothers. (Interestingly, The Avett Brothers were once a punk band that evolved into an acoustic Americana band, which is not too different from Turner’s evolution from a punk singer to a singer-songwriter.) ↩︎