Science and nature

Spectacular BECO cutoff during Starliner launch

NASA and Boeing launched the Starliner Commercial Crew space craft yesterday. One of the stages is BECO cutoff where the main booster detaches from the rocket, prior to the Centaur engine starting up, and pushing Starliner into orbit.

There’s an awesome view of the rocket from the ground that shows this spectacular effect at BECO cutoff:

You can see this in the NASA video around now:


“… you fail, only if you don’t learn from failure.”

Failure is very much a part of our daily life experience. How we approach failure is important. Om Mailk published a terrific post about failure, titled “Failure is part of learning“. It’s well worth reading.

The morning also reminded me of a vital life lesson: you fail only if you don’t learn. A lesson successfully learn cannot be called a failure.

Om Malik

Applications Useful stuff

Exploring the Brave browser

A few of my colleagues have been raving about the relatively new, Chromium-based Brave browser lately, so I decided to try it out.

I initially didn’t pay much attention because I’m pretty happy using Firefox as my primary browser. That said, I like a browser that blocks tracker crud on the Web, so I thought I’d try it out.

The biggest plus for me is that the browser blocks trackers out of the box. It’s one of the reasons I’m a big Firefox fan – pretty robust tracker blocking from the start.

Brave puts performance, and security at the forefront, literally, with indicators of how much the browser is blocking as you journey across the Web, and how much time it seems to be saving as your browse:

I haven’t really compared Brave’s blocking stats with Firefox’s (I’m not sure if I can really compare them directly given that I just see totals, not a breakdown), but it is gratifying to see that value go up.

In Firefox, I set my start page as about:protections so I see this data each time I start up my browser, too:

If anything, these values are great reminders of how much cruft is on the Web, degrading our browsing experience.

Another aspect of the Brave model is how it uses Basic Attention Tokens as a way to reward us consumers for visiting participating content creators’ sites.

I don’t fully understand how Brave Rewards work, but I like this idea of enabling consumers to make micro-contributions to content creators, and help support them. It’s a bit like Recurring Payments on

That said, I intend doing some more research. The model intrigues me!

If you’re interested in trying the Brave browser out, here are a couple things I’ve discovered so far that may help you make the move from Chrome, if you’re a Chrome user:

  • Brave is Chromium-based, so it actually looks and feels a lot like Chrome;
  • You can install Chrome extensions in Brave, just like you do with Chrome;
  • Instead of using Google sync to sync between Brave browsers on different browsers, Brave has its own sync tool. This may be appealing if you don’t want Google at the heart of your browsing experience.

I’ve enjoyed using Brave so far. I’m not switching away from Firefox just yet, but I’m using Brave as my preferred Chromium-based browser, and it’s working well for me.

In the meantime, here are a couple posts that I’m going to read for broader perspectives on Brave:

Featured image by Jack Sloop
Events and Life Mindsets

Bad days happen to everyone

We all have bad days, and I had a particularly rough day yesterday. I made some mistakes in how I handled a situation, and created a bit of a mess for a colleague (thankfully not a customer, though).

I felt pretty lousy afterwards, and my confidence took a knock. Objectively, it probably wasn’t that big a deal, but it felt pretty crappy nevertheless.

This morning I started work still feeling the after effects of that, and not feeling particularly confident. Still, I was determined to just put one foot in front of the other, and try learn from my mistakes.

Ken Gagne, one of my colleagues shared a post about Carroll Spinney on his site that caught my attention during a break between shifts, and this line stood out for me:

Big Bird once said, “Bad days happen to everyone, but when one happens to you, just keep doing your best and never let a bad day make you feel bad about yourself.”

Ken Gagne

I think I needed this today.

I still feel like I’m climbing back up out of the hole I dug for myself, but it’s sunny today.

Events and Life

My 44th birthday was a good day

Yesterday was my 44th birthday. 🎉

Great expectations

I realised I felt a little internal pressure to do something amazing, wonderful, or remarkable. I just couldn’t think of anything. In the past, I watched “The Secret Life of Walter Mitty” on my birthday as a sort of personal birthday tradition.

I still love that movie, but didn’t really feel like watching it this time around. I briefly thought about watching “Spider-Man: Into the Spider-Verse” instead, but I’ve watched that amazing movie recently.

Birthdays are strange days for me. I enjoy my birthday, even though I’m ambivalent about growing older, and between my friends and family wishing me a terrific day, saying I should do something remarkable, and be spoiled, I realised that I put a little pressure on myself to do something noteworthy.

Ultimately, though, this day is really more of a “me” day when I get to take a breather from work, and indulge myself in some small way.

Taking a “me” day

As is my custom, I took the day off for a “me” day.

The only thing I had planned for the day was to head to Cafe Greg in the mall for a Diabetic friendly apple crumble.

I started off my day with breakfast (as one does), after which I took advantage of the quiet to meditate for around 15 minutes (by “meditate”, I mean continuously try calm my chattering mind for 15 minutes), and then switch to Netflix.

I’ve been watching The Crown, and finished off the second season, and started the third before heading out to the mall. I took my camera with me, and captured a few scenes along the way. Winter is settling in here in Israel, and that means very welcome rain, and colder weather.

The apple crumble was pretty good, and I returned home for more of The Crown before the kids returned home. We had lunch together, I went out to the post office to collect a package that turned out to be one of Aaron’s birthday presents that I thought wasn’t going to arrive, and then returned home for more of The Crown.

All in all, it wasn’t a wild celebratory day, but it was my day, and that worked for me.

I had Gina and the kids with me. Aaron made me this awesome card, and Faith made me a Minecraft world to play around with, and involved a lot of cake at the end. Interestingly, when you eat cake (and probably other things) in Minecraft, you eat it in slices. 🎂

Also a Gina day

The real, big news of the day was that Gina started her new job yesterday, after six months searching for work.

Its been an extremely wild 6 months. It was fun. It was stressful. It was enlightening. I got to spend time with Paul, even though he was working during the week. I got to eat lunch with my entire family, every day. I played games with the kids, took them to the park after school and helped with homework. I got to spend the entire summer break and all the Jewish holidays with the kids and Paul. I fell into a funk, especially after each rejection email from a potential job opportunity. I worked through each funk. I started running (and need to get back into it). I taught myself a new skill. I read. A lot.

Gina’s post about her last six months

I enjoyed having Gina around the last few months. I’m also really proud of her for persevering, and ultimately succeeding. You can read her post about the last six months here: “6 months in numbers – A Bit of This A Bit of That“.


Couples who code together

My talented wife has been learning to code. Specifically, she’s been learning front-end web development, starting with HTML and CSS.

One of her projects as part of a coding bootcamp she joined is to build a basic site with the HTML and CSS she’s learned. She experimented with a CSS-powered dropdown menu on her project site, and hit a snag with it, so I took a look at it last night.

Merging a pull request on GitHub

In the process of working out a solution, we found something new we can do as a coding couple … submit and merge pull requests (no pun intended there 😜).


How YOU want to show up today

Photo looking through glasses by Saketh Garuda on Unsplash
Photo by Saketh Garuda on Unsplash

One of my colleagues shared a terrific question she asks herself in the mornings if she’s not in an ideal mood when that alarm goes off.

It really appeals to me, and I thought I’d share it:

“How do you want to show up to the world today?”

I think this works pretty well for a variety of circumstances. Thanks Brezo!

Applications Coding Tutorials

The missing piece in my Python scripts

My quest to automate parts of my workflows usually involves writing Python scripts to streamline some of my tasks as a Happiness Engineer.

One output has confused me for far longer than it should have, and I was shown the light today (in the form of a pretty simple solution).

My dilemma

Many of my scripts generate template documents. These include meeting agendas, hangout notes, and team reports. These documents include a couple components that I’ve largely automated using Python, such as –

  • Calculating dates and times in reports (sometimes including timezone conversions);
  • Taking inputs I provide in response to command line prompts, running calculations, and adding those to fields in my reports; and so on.

Many of my documents have a static list of team members that I ping much like Twitter mentions when I publish them as posts on internal blogs (we use internal blogs quite a lot, as you can imagine). Those lists each need to be updated manually every time there’s a change in the team composition, in each of the documents the list appears in.

Although the team composition doesn’t change frequently, I often find myself re-using a script for a team report, or hangout agenda, for example, in another group I work with. This means another set of documents where I need to manually create a list of people, and maintain that.

An example could be something like this:

Pinging: @john-doe, @maryjacobs, @davesmith, @janestuart, @tomwright, @steverobinson

The solution

Currently, the first part of generating this sort of list of people is creating a .csv file that looks something like this:


I was planning on using Python Classes to do this, but quickly realised that I don’t understand Classes nearly well enough to using this feature for this aspect of my documents.

I realised that there’s actually a simpler solution using .csv files and the csv module available in Python instead, after watching Corey Schafer‘s tutorial on this, here:

As an aside, Schafer’s tutorials are wonderful!

I was able to borrow from Schafer’s solutions to write a script that produced a list that looks something like this:

Pinging: ['@john-doe', '@maryjacobs', '@davesmith', '@janestuart', '@tomwright', '@steverobinson']

My script looked like this:

import csv

with open('people.csv', 'r') as csv_file:
    csv_reader = csv.DictReader(csv_file)

    members = []

    for line in csv_reader:
        wpuser = f"@{line['wp_user']}"

print(f'Pinging: {members}')

I couldn’t work out how to just generate a list of usernames separated by spaces. I ran into a similar issue with other scripts where I similarly loop over a list of items to produce some sort of list-generated output.

In other words, I couldn’t figure out how to output the list of usernames without the []' characters you see in my initial output.

So, I asked for help on reddit where JohnnyJordaan pointed me to this StackOverflow post that includes a couple solutions to a similar question. I had searched for a solution to my challenge, but didn’t come across this answer (or anything like it).

Clearly, I need to work on my Googling skills when it comes to finding solutions to my coding challenges.

Anyway, the solution that JohnnyJordaan suggested is pretty simple. Instead of using something like print(f'Pinging: {members}'), I could rather join the items in the list with a statement like this:

print(f'Pinging: {", ".join(members)}')

As I suspected, the solution is pretty simple. It just eluded me, completely. So thank you to JohnnyJordaan for the pointer!

I also like the * that came up in one of the StackOverflow solutions, but it doesn’t work with the f strings that I tend to use. Still, there are other ways to use them. Trey Hunner has an interesting post about these operators here (if you’re interested).