Social Media Update

I’ve deleted my Twitter account, which had my actual name. There’s a radio show host in California that’s also named Brian Copeland that was probably very upset I got @BrianCopeland earlier than him – he had to settle for @BrianCopie.

I’ve deleted my reddit account. I was /u/jhinra for 15 years, reddit was one of the first websites I really engaged with. I paid money immediately when they started the Reddit Gold program. I participated in Reddit Secret Santa, and was proud to call myself a redditor.

Both platforms brought me immense joy. I remember live-tweeting my jury duty in New York during grad school. I remember when my Power Point slide for Alicia teaching her coding went viral and was on the home page.

But more and more, I don’t want to participate in social media platforms that don’t care what I want. I don’t want suggested posts. I want to see stuff in reverse chronological order. I don’t want to make a political statement by actively participating on a platform.

I’m told there’s a phrase for this new phase of social media, enshittification. I feel it whole-heartedly.

I’m not sure where the internet is going, but I know I’ll be here, on my own website, without ads.

Hard Seltzer Tasting

Hard seltzer is seltzer water with alcohol. It’s a malted beverage, created in a similar way to beer, so it’s not technically liquor.

And it’s huge.

This past Friday, I felt a “tasting” itch. I used to host tastings a lot. I’ve done tastings for:

  • Scotch
  • Butter
  • Gin
  • Chocolate
  • Vodka
  • Sparkling Water
  • Cheese

It’s just so much fun! I think I first learned to like scotch whiskey by trying several samples in succession. Even the butter tasting showed that there’s dimensions to butter you might not normally notice.

Early in the summer, I had held a quickie tasting between Truly and White Claw, two of the biggest hard seltzer brands in the game. But two brands isn’t quite enough, so I hit a few liquor stores and found eight.

The Brands

In alphabetical order, here are the eight candidates (Images courtesy of brands or totalwine.com).

Bravazzi Hard Italian Soda – Blood Orange
Bud Light Seltzer – Strawberry
Crook & Marker – Black Cherry
Fulton Hard Seltzer – Blood Orange
Pabst Blue Ribbon Stronger Seltzer – Lime
Smirnoff Seltzer – Blood Orange
Truly – Wild Berry
White Claw – Black Cherry

The Methodology

We had six participants (well, seven, but one couple shared and ranked together). Each participant received a white 3oz plastic cup with a letter on it (in random order, participants were not aware of what brands were involved). One at a time, each participant received a cup, tasted it, then decided where the newest drink ranked among previous drinks served.

Other caveats:

  • This was single blind, but I was aware of each flavor as they were presented and also a participant, so my rankings are potentially biased.
  • Ties weren’t allowed.
  • Participants did not need to finish each drink before the next came. As such, many participants kept at least half a cup to compare and contrast at the end.

The Results

There are a lot of ways to consolidate rankings, but here’s four, where 1 was considered the “best” and 8 was considered “worst”, so smaller scores are better:

It’s pretty clear the Bravazzi Hard Italian Soda won. It got two first picks, three second place picks, and the worst was two picks at third place. One participant mentioned that perhaps “Hard Italian Soda” is fundamentally different than a hard seltzer.

Smirnoff Seltzer scored the worst, but only because Bud Light Seltzer was saved by a single participant that loved it and ranked it first. So let’s call Bud Light Seltzer polarizing and dump on both brands.

Most interesting for me is that Truly beat out White Claw. In my previous head-to-head competition, White Claw won.

Data is available here, if you were one of the participants and curious what you personally picked.

Neighborhood Art

Like all of you, I’ve been out walking the neighborhood significantly more than ever before. I’ve previously featured street art from NYC on this blog, feeling pretty jealous of all the art everywhere in that city.

Turns out, there’s plenty of it here. Here’s some of my favorites, just to give South Minneapolis a little bit more art cred.

Side of BlackEnd Tattoo, 23rd Ave and 38th Street
28th Ave and 38th Street
Side of Hennepin Overland Railway Historical Society, 25th Ave and 38th Street
24th Ave and 39th Street
Side of Ted Cook’s 19th Hole BBQ, 29th Ave and 38th Street
Side of Vintage Music, Cedar Ave and 38th Street
Standish Cafe Mural, 24th Ave and 38th Street

The Reverse Geocache Puzzle

You’ve heard of geocaching, right? Go to a location specified by GPS coordinates and find a hidden cache?

Mikal Hart created a box with a GPS inside that only opens when the box is at a set of GPS coordinates.

…a puzzle box that won’t open until it is taken to a certain location.

Quoted from http://arduiniana.org/projects/the-reverse-geo-cache-puzzle/

It’s such a cool idea, I really want to be the kind of person that makes something like this. I especially love the end of his writeup:

This little box is a novel way of combining a GPS, a servo, a button and a display. How many more marvelous combinations lurk out there, if only someone has the imagination to put them together the right way?

Quoted from http://arduiniana.org/projects/the-reverse-geo-cache-puzzle/

Fizz Buzz Enterprise Edition

This one’s hard to explain unless you’re a programmer, so bear with me…

The first thing you learn when programming is how to print “Hello, world!”. Very shortly afterwards, they teach you to do something slightly more complicated, the “fizz buzz” problem, meant to teach children about division:

[Children] generally sit in a circle. The player designated to go first says the number “1”, and each player thenceforth counts one number in turn. However, any number divisible by three is replaced by the word fizz and any number divisible by five by the word buzz. Numbers divisible by 15 become fizz buzz. A player who hesitates or makes a mistake is eliminated from the game.

quoted from https://en.wikipedia.org/wiki/Fizz_buzz

It’s not meant to be hard, just a toy problem to program. The code you write should output something like:

1
2
fizz
4
buzz
fizz
7
...

Working in Corporate America™, you code differently. Clear, concise code doesn’t get you ahead: “scalable”, jargon-filled code does. You’re supposed to write code that can run on computers around the world and serve billions of users. If one’s code is too simple and straight forward, the bosses will think one’s work is too easy.

Enter one of my favorite coding projects: Fizz Buzz Enterprise Edition.

FizzBuzz Enterprise Edition is a no-nonsense implementation of FizzBuzz made by serious businessmen for serious business purposes.

Project description from Fizz Buzz Enterprise Edition

Normally, fizz buzz can be written in a few lines:

for number in range(1, 100):
    if number % 3 == 0 and not number % 5 == 0:
        print("fizz")
    elif not number % 3 == 0 and number % 5 == 0:
        print("buzz")
    elif number % 3 == 0 and number % 5 == 0:
        print("fizzbuzz")
    else:
        print(number)

Fizz Buzz Enterprise Edition (FBEE) spreads this same logic across dozens of files. It’s really a work of art.

Now, explaining a joke sorta kills it, but here’s a few bullet points to help you get the joke. FBEE:

  • …is configurable to print on numbers other than 3 and 5
  • …can alter what “division” means
  • …has a rigorous testing package to ensure it performs accurately
  • …features a Contributor Code of Conduct

Not being a java programmer, my eyes sorta glaze over reading it. But I really appreciate the effort put into it. It’s also an open source project, which means anyone can contribute. This leads to a ton of issues raised by the community, such as #429:

It is apparent that people are pirating FizzBuzzEnterpriseEdition at an alarming rate, which the Accounting and Finance Team says is having a dramatic effect on our bottom line.

We need to look into options to protect our investment and our IP. I suggest some kind of Enterprise license manager with a USB dongle and quarterly subscription model.

Issue #429 submitted by drelephant

There’s a special place in my heart for a joke being taken as far as possible.

Woodburn Fractals

It’s a month into 2020 and I’m still clearing out my todo list. I don’t know about you, but I have a habit of bookmarking things I love with the intent of returning to them. But those bookmarks sit dormant and start to weigh me down with regret; why aren’t I doing cool stuff like this?!?

Because it’s a new decade, it’s time for a new approach. For the next several days, I’ll be blogging a few things I’ve stumbled across that inspire me. These are things I wish I had done myself, but it’s time to admit defeat and just admire the creativity of others.

First up is this amazing project where Kevindk9 saturates particle board wood in water, then uses a microwave oven transformer to burn beautiful patterns in said wood.

If you browse Kevindk9’s profile, it looks like he does a ton of cool stuff. Browse the gallery for some amazing close-ups of his work, then browse his profile for other crazy science-art. You won’t be disappointed.

2019 Recap

So, what’d I do in 2019?

Corn Palace of South Dakota, April 2019

Travel

You’d almost guess I don’t like Minneapolis the way I traveled last year:

  • Denver, CO
  • Sunnyvale, CA ( for work) x4
  • South Dakota + Wyoming
  • Anchorage, AK
  • Las Vegas, NV
  • Vancouver, BC, Canada
The crew at Mt. Rushmore

Ten Year Anniversary

In August, Alicia and I celebrated ten years of marriage with a trip back to Las Vegas, the same city we were married in 2009.

Elevator of the Aria, August 2019

Same city, but not the same place. We were married at the Wynn, which treated us great, but we thought it was time to explore the rest of Vegas. We stayed at the Aria for a full week, long enough for us to get bored of Vegas. Well, almost – it’s pretty sweet vacationing for a week.

Alicia is awesome and I’m lucky to have her.

Job Title Change

With no effort on my part, I changed titles from “Data Scientist” to “AI Scientist”. Title inflation, yo.

…well, to be fair, I’m doing slightly more fancy stuff than before. In November, I gave a talk at Sisyphus Brewing about Natural Language Generation, part of a series of Data Science talks sponsored by Target. My coworkers have an every-other-week series of talks where we’re expected to speak about something we are interested in.

I’ve previously written about Natural Language Generation on this blog when I tried to recreate the Burger Hunter. I had been reading a lot about OpenAI‘s GPT-2, which was “so powerful, they couldn’t release it.” That certainly struck me as marketing hype, so I spent some time investigating it and created a presentation about it. No original research, but fun none-the-less.

Digitizing Slides

I FINALLY transferred slides from my parents into a digital format. It had been on my todo list for years. Feels so good to have it done. Side benefit, it is so much fun to see photos of my parents from before I was born. Although it’s been awhile since I was a beard guy, there’s definitely a resemblance.

Without permission (sorry Dad), here’s a few of my favorites:

Okay, that’s not fair. Yes, there were way more slides of my father, but I should embarrass my mother too. Here’s my favorites of her (sorry Mom):

Other Random Stuff

Livia is a chunker
Happier than over having a house alone

Here’s some other bullet points from 2019:

  • Livia is living the life having a house to herself.
  • I replaced the flushing mechanism in my toilet at home, which was running too long. Yay for plumbing!
  • I was David Bowie for Halloween.
David Fucking Bowie
Halloween 2019
  • Went thru a vegetarian phase again over the summer. I seem to do this about every four years. It’s not necessarily for moral reasons, vegetables just help me 💩better.
  • Perfectly average performance at Fantasy Football, I got 3rd in the season and 5th in the playoffs.
  • Mentored my third intern at Target over the summer, for which I’m 3 for 3 getting my intern a position at Target. My fifth year performing intern on-boarding, too!

Not a bad year, eh? Previously, I’ve said my 28th year was my favorite, but I think 34 has taken the cake.

Carl’s Water as a Service

My buddy Carl was at Tableau Conference in New Orleans in October and noticed something strange:

Oct 23, 2018, 1:56 PM: The temperature of the water at the hydration station varies widely. One had the perfect sipping temp, but I forgot which one it was

He’s an old man at heart, so apparently this is what he is concerned about in New Orleans. He continued throughout the conference:

Oct 23, 2018, 2:33 PM: Update regarding current cup of water: a bit to cold

Oct 23, 2018, 2:40 PM: Current water: too warm

Oct 23, 2018, 3:14 PM: Current water: too cold. May mix it with the too warm water

Oct 23, 2018, 3:16 PM: Failure. Additional water also too cold

Oct 23, 2018, 3:22 PM: HUGE news… Current water: Just Right !!

Oct 24, 2018, 10:42 AM: Current water temp, quite pleasant

Oct 24, 2018, 10:58 AM: current water temp: just a touch too cold

Oct 24, 2018, 11:58 AM: Current water: waaay too cold

… you get the idea (as well as how hydrated Carl stays).

Anyway, these mission critical transmissions had a few problems:

  1. It’s terribly inefficient for Carl to have to type this out every time.
  2. Text messages are a push-notification thing, instead of a passive data collection method. Ideally, I could go check on Carl’s water temperature at my convenience, instead of being notified.
  3. There’s no real-time charting to track trends in Carl’s water temperature.

So I got to work. Presenting, https://water.copeland.bz/, Carl’s Water as a Service!

It’s a python flask app with a sqlite3 database on the back end and the graph is powered by D3.js.

For Carl’s input, I wanted to to be as simple as possible. To update the world on the temperature of his water, Carl goes to a secret url and sees this page:

It’s mobile optimized, so he can bring it up on his phone, and it requires no authentication or reloading. Every time he hits a button, it’s instantly recorded and reflected on the home page.

You might notice the slider on the bottom. Carl had requested a slider (presumably to fine tune the temperature of his water), so I gave him a slider. He’s also not sure what the “Text Brian” button does, so that’s a plus.

If you’re super curious, you can see the code on my github repo, github.com/briancopelandbz/cwaas.

Cheers!

Edit 2020-10-05 : Previously, the website was http://cwaas.copeland.bz, but I’ve moved it to https://water.copeland.bz and updated the link above accordingly.

The Burger Hunter

tl;dr: The Burger Hunter ‘dissed’ White Castle, but still wrote solid burger reviews. I studied him and used machine learning to replicate his reviews after he quit writing.

I subscribe to Secrets of the City. It’s twice-weekly email that informs you of stuff coming up in the Twin Cities. Super good.

Back in 2017, it had a regular feature called “The Burger Hunter”. This guy reviewed hamburgers around the Twin Cities, ranking them from 1-10 on Flavor, Presentation, and Originality. Even better, this guy had a very specific writing style:

As you can imagine the meat gets dominated by onion and renders that smell we all know from 50 feet away. I order mine without the O’s because they’ve been pretty much marinating in um. Topped with cheese and tbh it’s the only contrast you’ll get in the flavor on this ride. It’s so BOM bun onion meat that the cheese actually stands out.

[Quoted from the White Castle review, for which I hate him for]

Seriously, Mr. Burger Hunter had such a distinctive voice: liberal emoji’s, acronyms no one understands, sentences to make an english teacher cry:

First off it’s a hot mess. But glorious. It’s like I hope nobody’s looking kinda good. Just dig in.

[Quoted from Joe Sensor’s review]

I originally started paying attention out of hate. If you sum the three scores, he gave my beloved White Castle a 17.1, the lowest ever. Which is also bullshit: his only four in any category ever was White Castle’s presentation. Those boxes are a national treasure. I’m not sarcastic at all – just look at this photo from the review of the burger tavern:

That’s ugly as shit. Especially compared to these beauties:

[photo stolen from godairyfree.org]

Enraged, I did what any Data Scientist would do – I scraped his corpus and made a dataset. Definitely explore for yourself, but some highlights:

  • Only one perfect score ever was granted to The Red Cow
  • The worst two scores were the first review (Annie’s Parlour, 17.5, which he still called “A damn good burger”) and last review (White Castle, 17.1)
  • Flavor exclusively exists between 7.1 and 10, making a ten point scale strange
  • The third lowest score ever (Miller’s Corner Bar) is described as “Before us is probably my number 1 most favorite hunt so far”)
  • To be fair, he starts his top review ever, “Have you ever woke up and said, ‘I had too much to dream last night?'” (Red Cow)

Needless to say, this guy is somewhere between, “I love hamburgers” and “BOW BEFORE YOUR HAMBURGER GOD“.

3D plots suck, but here’s every score he gave:

Really, they suck. See how Matt’s Bar looks high on presentation and low on flavor? It’s a Originality:10; Presentation;5, Flavor:10. The lightness of the dot is supposed to tell you it’s low on the presentation scale. Or not, I don’t really know. 3D plots suck. ¯\_(ツ)_/¯

More important than pivoting on 90+ reviews (such as discovering that Kelly’s Depot Bar is the best flavor, in spite of its originality or presentation), we need technology to fill the empty hole left by the Burger Hunter.

Enter Andrej Karpathy. This guy is writing about “Recurrent Neural Networks”, a brand of machine learning that’s good with sequences (like the sequence of letters you’re reading now!). Train a RNN with enough text, it can learn how to spell. Seriously – just give the model a seed of a few letters in a sentence, it guesses the next letter.

For example, let an RNN run through Shakespeare. Then, start it out by providing the first little bit of a text:

PANDARUS:
Alas, I thi

It starts guessing that the next letter is ‘n’. Shift one space over, it thinks the next letter is ‘k’. Eventually, it writes:

PANDARUS:
Alas, I think he shall be come approached and the day
When little srain would be attain’d into being never fed,
And who is but a chain and subjects of his death,
I should not sleep.

I’m glossing over details, but the takeaway here is that this is not a quote from one of Shakespeare’s plays. This RNN model is writing brand-new-Shakespeare. Let’s do this with the Burger Hunter!

I trained a model on every word the Burger Hunter ever published. It’s really entertaining how bad my model is at the beginning. Here’s an excerpt from early in training:

ed burger is a burger is a burger is a burger is a burger is a burger is a burger is a burger is a burger is a burger is a burger is a burger is a burger is a burger is a burger is a burger is a burger is a burger is a burger is a burger is a burger

Notice, the RNN gets the idea – after the sequence ‘burg’ comes the letter ‘e’. But it’s stuck in a loop, it doesn’t realize that ‘i’ does not follow after ‘is a burger ‘. But that’s okay, this was only about twenty minutes of training. Let’s zoom forward an hour:

e is so the burger is a sertise shat conled of cheese and the burger is a big burger cutter frilled and some fresh and they don’t spedite. the bun is soft, fresh and the burger is a secret saled frinl. the burger is topped with a secret sale a burger

It’s gibberish… but not bad! After only an hour of training, it’s starting to write coherent phrases, like “the bun is soft, fresh and “.

More training!

juicy & old timey! but the burger is to food in and the bacon is a big slice and down that are so good that anla to the sime cause they are doubling to the slime chute the meat flavor is fooding and put of some garlic just a smoked galf po y

That looks like something that a human might have written a little (a lot) drunk. It falls apart at the end… but notice, there’s no repeating. It’s just shy of cohesive sentences that tell a story. This is trained off only ~90 reviews. While this was the best result I achieved back in late 2017, technology is constantly getting better. 

We’ll meet again, Mr. Burger Hunter.