Categories
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 WordPress.com.

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
Categories
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.

Categories
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“.

Categories
Coding

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 😜).

Categories
Mindsets

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!

Categories
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:

first_name,last_name,username
John,Doe,john-doe
Mary,Smith-Robinson,maryjacobs
Dave,Smith,davesmith
Jane,Stuart,janestuart
Tom,Wright,tomwright
Steve,Robinson,steverobinson

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']}"
        members.append(wpuser)

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).

Categories
Events and Life Mindsets Policy issues Politics and government Social Web

The greatest propaganda machine in history

Sacha Baron Cohen recently spoke about how social media services have become the “greatest propaganda machine in history”.

Much of the media’s focus, when reporting on his remarks, was on his attack on Facebook. While he certainly targeted Facebook, he also spoke about how Google, YouTube, and Twitter shape online discourse, and how they help spread lies, bigotry, and attacks on fact-based discussions.

Think about it.  Facebook, YouTube and Google, Twitter and others—they reach billions of people.  The algorithms these platforms depend on deliberately amplify the type of content that keeps users engaged—stories that appeal to our baser instincts and that trigger outrage and fear.  It’s why YouTube recommended videos by the conspiracist Alex Jones billions of times.  It’s why fake news outperforms real news, because studies show that lies spread faster than truth.  And it’s no surprise that the greatest propaganda machine in history has spread the oldest conspiracy theory in history—the lie that Jews are somehow dangerous.  As one headline put it, “Just Think What Goebbels Could Have Done with Facebook.”

Sacha Baron Cohen

As much as we embrace free expression, we find it difficult to draw a line when liars and bigots abuse their right to free expression because doing that feels like hypocrisy.

Free expression isn’t unlimited, though. And pushing back against channels that help propagate misinformation, abuse, and false statements that impact substantial segments of the population is becoming more important.

At the very least, it’s worth watching Cohen’s talk, or reading his remarks:

We should also think carefully about how much trust we place in services that profit from the social chaos we see around us.

Featured image by Miguel Henriques
Categories
Events and Life Sports Wellbeing

I ran my first timed 5km race

Last week I ran my first timed 5km race as part of the annual Modiin Race. I set myself the goal of running in the 5km race last year when my wife and son competed in last year’s Modiin Race, and I’m pretty proud of myself for achieving my goal.

I started running again towards the end of 2018/beginning of 2019, and was pretty consistent until about April when I stopped running.

Then, as the race approached, I decided to start running again at the beginning of November when the weather started to cool.

My November running log
My November runs

My pace was predictably relatively slow to begin with (I hadn’t done much exercise for months, after all), but I feel like I improved nicely over the following two weeks.

I was hoping to complete the race in under 30 minutes, although I just realised that I based that goal on the assumption that the race course was 5km.

It was actually a little more, so my time was pretty good for my first 5km race in years (I ran a 5km fun run years ago in Johannesburg).

I wouldn’t say that I enjoy running, necessarily, but I do like getting out and exercising. I also enjoy the feeling of progress when I run further without slowing to walk, and the feeling of having accomplished something for myself afterwards.

My post race moment