I’m in love with this animated gif titled “Night Waves” courtesy of Reddit by /u /Kyro122 and wanted to share it.
You’ve heard of geocaching, right? Go to a location specified by GPS coordinates and find a hidden cache?
…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/
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.Issue #429 submitted by drelephant
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.
There’s a special place in my heart for a joke being taken as far as possible.
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.
So, what’d I do in 2019?
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
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.
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.
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
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.
- 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.
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:
- It’s terribly inefficient for Carl to have to type this out every time.
- 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.
- There’s no real-time charting to track trends in Carl’s water temperature.
So I got to work. Presenting, http://cwaas.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.
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:
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:
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 “.
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.
Here’s a story about sacrificing quality for delivery: don’t make squirrel burgers.
I’m usually a centrist. If there’s two competing moral principles, the best moral compass is probably somewhere in the middle. I’ve been on the side of rehabilitative criminal sentences (fix what caused the crime, don’t eye-for-an-eye ’em), but then some really awful case makes me want to just execute the asshole.
Thus, I really like when something pulls me towards the center. My father instilled the following principle in me when I was growing up:
At some point in your career, there’s going to be a day when the janitor doesn’t show up and there’s a huge mess in the bathroom. It doesn’t matter if you’re a mailworker or the CEO, that mess has to get cleaned. Don’t be the kind of person that says, “that’s beneath me!” Get the job done. [Paraphrased, not quoted]
I still think that’s a good lesson and has served me well. But the squirrel burger article makes another point – not every job should get done.
I’ve been a bad blogger. I see interesting content on the internet and don’t share it. I think, “eventually I’ll write an intelligent and meaningful post about it.” Then, months (years) later, I haven’t ever done anything and this blog goes months (years) without new content. Today is the day I stop the bad habit. Here’s the first in a (hopefully) long line of posts about small little things I like, or at least things I find insightful.
Fittingly, my first share is about someone displaying the kind of discipline I can only dream of:
Long story short: Mr. “Dick Tree” had a theory that you could max out your character at the very beginning of a video game. That person promised a follow up proving it was possible, then fell off the map. Frustrated, anonymous internet writer “CirclMastr” did it himself. He spent five hundred hours manually beating the smallest enemies in the earliest stages of the video game to prove it was possible. This is boring, menial, tedious labor, to say the least.
- Final Fantasy VII was (is) my favorite video game of all time, but this sounds like torture
- I’ve made a career out of “just doing it to get it done”, so I totally get the attitude of CirclMastr, but this still sounds like torture
- I dream of being the kind of person with the kind of discipline this would take, but fuck that, discipline for discipline’s sake is torture
I think my initial reaction was probably the same you feel right now: what a fucking waste of time. Even if he’s listening to podcasts while playing… or working out… or some other distraction… it is a shocking amount of time to spend with no pay off. I mean, this guy will get no money from it. No one will invite this guy to speak at a video gaming conference. Heck, he did it to spite someone that may never know he did it.
So… meaningless? Should we laugh at this guy?
CirclMastr has a response:
Life does not have inherent meaning; to say that our lives are pointless and our achievements meaningless is to state the obvious. No matter how grand our achievements or how broad their scope, time turns all to dust and death destroys all memory. But that does not mean we cannot ascribe our own meaning to what we do. It is because nothing has meaning unto itself that we are free to create meaning, to make metaphor, and in doing so reflect on ourselves and our world.
I found this article via reddit back on September 1st, 2017, but I still think about it. This story is perhaps the most meaningful thing I’ve read in recent memory. When it comes down to it, stupid passion is still passion.
PyData (https://pydata.org/) is a fairly regular conference put on by NumFocus (https://numfocus.org/), a non-profit that sponsors most of the big Python projects (NumPy, pandas, Jupyter, Julia, Bokeh…). Within the span of a few weeks, they’ve put on conferences in Washington DC, NYC and LA. Three weeks ago, I attended the PyData NYC version – here’s my highlights:
– Lead Developer for pandas (Jeff Reback) talked about the next version of pandas (due mid-November) which will treat NaN as a first class integer system (currently, NaN forces a column to convert to float64, which is really annoying when you’ve got Int64 columns).
– James Powell gave a really entertaining talk about the nitty-gritty of unicode and identifiers in Python (Poo Emoji is a valid identifier, but an ellipse is not – he dug into the C code to prove it). I had previously seen his “So you want to be a Python expert?” talk (https://pyvideo.org/pydata-seattle-2017/so-you-want-to-be-a-python-expert.html), he’s fantastic.
– giphy is using session browse data as sentences, passing it into word2vec, and using that for gif recommendations. Sound familiar?
– Bokeh is worth checking out, Luke Canavan (developer of Bokeh) made a browser-side face recognition model easily
– Lightning Talks are amazing. Five minute presentations, hard cut-offs. It was really refreshing to see short subject presentations boiled down to the bare bones.
– Julia is getting hot.
So – should you attend one yourself? It was certainly not very academic: very few talks had papers associated with them. PyData struck me as much more business/hacking/results oriented. A general theme was, “hey, this works, isn’t this cool?” On the plus side, attending this conference very seriously supports open source (most presentations were by open source package authors) and it was inspiring to see short subject talks.
Bottom line: Soft Recommend