This site has been migrated to bradgrimm.com
This year HireVue ran a fun little competition. Remember the fun little Valentines boxes from elementary school? The goal was to make the most technologically advanced box possible, and to deliver creative cards to the other engineering rooms. One of the judging criteria was best use of code and poetry. Below are poems I wrote for it.
Disclaimer: You really have to be a developer to understand most of these, proceed at your own risk.
In dissecting the heart, I admit I got lazy,
In lieu of true love, I ran something crazy.
K-nearest neighbors, performed on each vuer,
Inputting your code, to output the top wooer.
The scores tell story, that’s rather disturbing,
An AUC of ninety, you won’t beat our learning.
Your team however scored only the default…
Look at the bright side, it wasn’t a segfault.
Your love is like python, it’s not statically typed,
With only confusion from args that I’ve piped.
For with you 0 is greater than None.
Inexplicably “none” is still larger than 1.
You have me spinning, and checking the trace,
And feeling heartbroken; I misplaced your whitespace.
You reviewed my code, and stroked my ego,
And promised it was safe for any repo.
Then the build broke by a strange set of codes.
How could you let it dereference null nodes?
But late at night I caught you… git blame!
How could you? Merging +0 what shame.
I feel myself floating, with I-Triple-E.
Since the moment I saw your graph theory.
It was a biparte, it sets you apart,
I’ve encrypted your love on the drive of my heart.
But now I feel divided, I’m feeling quite small.
Your love’s precision’s blowing up in a sprawl.
Then today I hit zero, in a short 4 byte span.
But now all I see is a stream saying NaN.
You are my tuple, you are my bool.
A standard type. The HireVue Tool!
With you by my side, I fear no splunk.
Nor sentry, nor entry in any code chunk.
Today we debug, we control the flow.
Tomorrow we ride on Python Three O!
You had the very most beautiful stream,
Like angelic bits from a VP9 dream.
I watched it countless times on repeat,
With an insights score that simply said “sweet”.
The love faded slowly, iteration destroys,
Over time all I saw was a sequence of noise.
I carefully saved it to disk with each session,
But I should have used lossless compression.
Love is Mobile
At first we fought, I’m a droid you’re a fruit,
You laughed at my updates, I showed off my root.
But over the years I learned we were made,
By the same Chinese factories with every upgrade.
Surprised I found love when I looked at your glow,
And saw that our soul shared HireVue Pro.
As a developer with a variety of apps in the store my ratings are super important to me. But even more important than the actual ratings of my apps are the perceived ratings of my apps. What exactly do I mean? Well I think this comic by Randall Munroe sums it up best:
Quite frankly that little sliver of pixels can make a huge difference. Especially the jump from 3.5 stars to 4.0 stars. But one of the things I’ve always found interesting is what ‘3.5 stars’ actually means. Where exactly is the cutoff? Does 3.5 stars mean 3.5 or lower? Or does it mean the closest star value (3.25 to 3.75)? Or does it mean something completely different?
Well it turns out it isn’t really straightforward to answer this question for two big reasons:
1) Stars are different in different locations. The web shows stars different than the app, and at times different pages have showed them different as well.
Here’s Goofy glass on mobile with 4.5 stars on the left, and 4.0 stars on the right (web).
2) The metric changes from time to time. Users probably never notice, but what a 4.0 app is today, isn’t necessarily what it was yesterday.
The Old Metric
What was the old metric? Well it was actually relatively simple compared to how it works now. The old rule was simple, round to the nearest half star. So for instance:
4.75 – 5.0 = 5 stars
4.25 – 4.75 = 4.5 stars
3.75 – 4.25 = 4 stars.
And so on…
This meant that from a realistic perspective most of my apps fit into the 4-star rating. My voice changers (notoriously low rated) fit into the 3.5 stars, and Goofy Glass at one point broke into 4.5 stars.
Then one day tons more reviews started rolling in. In fact I started getting as many as 5x to 10x more reviews. What had changed? The Play Store started prompting users to rate apps with the promise of providing similar apps the user would love. This had two side effects: 1) Lot’s more ratings were showing up on apps. 2) The ratings were generally lower (though arguably more accurate). Users often just uninstall an uninteresting app, but now were being prompted for a rating. They also were asked a slightly different question… Instead of: “What should this app be rated?” it was: “Would you like us to find apps similar to this one?” And that question effects ratings significantly.
My apps all took a dive after that. Goofy Glass which had been trending upward for the past few months, started dipping without any indication as to why. And even worse, the ‘recommendation’ reviews don’t come with comments, so no valid feedback comes through to help improve the app, if they ran into issues, or what they’d like to see to win them back.
The New Metric (Mobile)
I’m guessing Google noticed the dip in ratings. And since then they’ve played with a few different displays. The most recent one is particularly interesting. They’ve effectively gotten ride of whole stars in favor of half-star ratings. The new ratings are as follows:
5.00 = 5.0 stars
4.01 – 4.99 = 4.5 stars
4.00 = 4 stars (Must be exactly 4.0)
3.01 – 3.99 = 3.5 stars
In my opinion this is really weird. That means that my painting app, which has generally favorable reviews gets lumped with my voice changers, which have pretty bad reviews. And if you take a look at the difference in graphs… you’ll notice they really don’t seem to fit into the same category. Palette Painter (with a 3.9 review) seems to have tons of fans with just a few haters. While Funny Voice Changer has almost as many haters and fans. Yet, they both show up with a 3.5 star rating to anyone looking.
Now admittedly they’ve also made it easier to see the exact number (see the 3.9) on the app page itself. But of course that is after they click on the app, and if you are like me… 3.5 stars apps just aren’t worth my time (while a 4.0 star app often is).
The New Metric (Web)
The web on the other hand does something completely different. They fill in stars as a percentage of the full star. What that means (in theory) is that if you had a 4.1 star rating it would show up with 10% of the last star filled.
I actually like idea if it can be implemented correctly. The only problem I see with the current iteration is that the percentage stars don’t start on the left and right side of the star. They actually start in the space between. What this effectively means is a 4.2 star looks identical to a 4.0 star and a 3.9 star. While a 3.3 has a little tiny bit of a sliver being drawn in.
Effectively this means that the difference form web to mobile can be a full visual star. Anyway, I don’t know if anyone else has noticed these weird ratings. And I’d be really curious to hear the reasonings behind them, but I just thought I’d call them as I see them.
Our second baby is on the way, and we’ve been working on putting the room together. All this sketching reminds me of 3 years ago when we did the same for Logan’s room…
In the last three years we’ve had a lot of people ask how we did it, and a few have asked us to do their rooms. We are not really artistically inclined, so I think it surprises people how nice the room looks. Here’s few tips on how to make it look right.
1) Light Colored Chalk
Chalk is *way* better than pencil. It is easy to erase, which is very important when your painting shouldn’t show lines. It will mix in with your paint, which makes it easy to paint right over it. And last of all the thick lines allow seeing big objects really well.
2) Use a Template
Unless you are an amazing artist, try to find a similar object to what you are trying to draw. You don’t have to follow it exactly, but it will do wonders in helping notice the little nuances of your painting.
But remember, a template does not mean you have to copy it exactly. You’ll see from the above Luigi pictures that we wanted a flatter, simpler look. When comparing them side by side our image of Luigi doesn’t look nearly as impressive. But when standing by itself nobody notices the least bit.
When we were drawing the goomba the final result always came out so scary. This was a child’s room, so that didn’t sit well with us. After fixing it 2 or 3 times we finally realized a smile would look much better than the grumpy goomba frown. Don’t be afraid to take similar liberties.
3) Iterate Over and Over
It turns out you don’t need to be a great artist, you just need to be a stubborn perfectionist. We don’t paint very fast, in fact the #1 reason we haven’t said yes is because we just imagine the countless number of hours we would spend in their house, bothering them and getting in their way.
But it is completely fine to make mistakes. We have a simple policy: “Sit on every drawing at least one day before painting it in.” When we first drew Mario we loved how he looked, but something just felt off. After a night we realized one of his arms was *way* too long. We made some edits, waited another day, and finally were happy with the results.
4) Be Careful with Black
While most cartoons have a heavy amount of black lines, we found they just didn’t look good on the walls. But we found that we couldn’t just drop them completely. Instead, Sarah simply lightened or darkened the current color to give the effect of lines.
5) White Out Where Needed
We were painting on a fairly dark blue wall. At first we just painted straight on the wall, but it made it hard to get the colors right. Instead we learned that for lighter colors it was really important to put down a layer of white first. This did wonders to make sure the color was the exact color that we mixed.
Bonus: Don’t be Colorblind
Not that you have control over this… But seriously, I’m super lucky I have a wife who could mix colors. My first attempt at Mario’s Green Pipe turned out to be an ugly brown mess (or at least so I’m told). From that point on Sarah was our designated “painter of all things”.
Imagine a rough morning where you wake up early to get to work. Your family is still asleep, and you aren’t able to say a proper goodbye before leaving. There’s a big important deadline, and it is taking all of your time and energy. You are finally starting to get things done when the phones rings… it is your child, super sad that they didn’t get to see you. Just then your child starts crying on the phone for you to come back home. You love them, but how do you show them with so much to worry about at work?
One idea to try is the copycat game. It is a fun and simple game that we like to play. Send your kids a picture of yourself making a silly face and ask them to copy it and send a picture back.
It may not seem like much, but it will go a long way for your kids. It helps remind your kids that you haven’t forgotten them, and that you still love them. But it doesn’t take as much time as a phone call or video chat would, and it can be a lifesaver on a busy day.
I find on any given day it doesn’t take more than 6-8 pictures. Part of the fun is the anticipation of what picture is going to come next, so you don’t need to worry about taking more than one an hour. And if too much time goes on before you send a picture, they can always nudge you back by sending their own face to copy.
Give it a try and let me know if your kids love it as much as my boy does.
Through my years of development I have always strived to be an honest developer. I want my users to have a good experience. I want to build fun, new, exciting, polished apps. And I want to play by the rules…
But not everybody plays by the rules.
When I released Spot Animals a few months back I was very disappointed that I could not even find my app in the store by name. Or by any other combination of search terms, no matter how much I scrolled down. Trust me, after lots of development, nothing is worse. Here’s me searching for it by name.
Originally called ‘Hidden Objects Animals’
While searching for my app I came across a variety of other apps that were high in the ranks, but seemingly poorly built. I was on a quest to figure out why. Admittedly, many of the apps were generally high quality, and had a lot of downloads to help them keep their high ranking. After searching for a while I came across this app:
Now, I’m not going say whether this app deserves its ranking or not, I didn’t download or play it. But as I was scouring their reviews I found a really disconcerting trend. Let’s see how fast you can see the trend…
I think I can sum up all the above with “Cute cute cute cute cute”. I found page after page of ratings that had exactly the same rating… some number of Cute’s and a high 4 or 5-star rating.
Now it is possible that there are simply a ton of people that just find this app unbearably cute. But more than likely these were purchased reviews. Almost none of the reviewers have thumbnails, and they all look awfully similar. The chances of this being the case sounds particularly low to me. This really got me wondering… How many apps simply cheat their way to the top?
I’m not certain how many apps do this, but I assume it must be a lot. Since my apps are on the store I am required to provide a public facing email that users can contact me at. Sadly, about half of emails I get are advertisements. And of those there are two main categories. The first are advertising networks: Our ads will make you way more money! But a close second is: We’ll get you more ratings/downloads. Here is an example of one such email:
Now, I’m not sure how well Google is able to crack down on this, but it actually sounds like an incredible difficult thing to do. It is a short step from encouraging 100 of your friends to download your app, to paying a 100 of your friends to download and rate it 5-stars. How does Google distinguish the difference between the two without seeing the money transfer? I’m not really sure they can.
So if I’m receiving this many requests there must merit behind it. Which makes me believe the number of apps using this method of deception isn’t small.
So is it tempting to use this with my apps? Of course! There’s always that desire boost ones downloads and ratings, who wouldn’t want that? And there’s always the question of: “If I get the ball rolling, how big could it become?”.
But I got into app development because it is fun. And I refuse to let the illusion of grandeur dissuade me from doing what I love, and doing it in a way is honest and true to my values. And of course the fear of getting my apps kicked off the store is always there too.
Anyway, I’m curious if anyone else has seen this kind of trend elsewhere, and what other developers feel about it. Is there anything honest apps can do to combat it?
Note: Since it has been months since I originally released “Spot!”. I wondered how it fares now. The good news is, it is showing up just fine in the rankings, and interestingly enough the other app isn’t in that list anymore. Who knows the magic behind the store ranking, but one thing is for sure, just because you have a certain rank (or don’t) doesn’t guarantee you’ll stay there.
While redesigning my app Goofy Glass, I came across this interesting finding. Android isn’t left-hand friendly! Now I’m not left-handed, so this has never been a problem for me. But, I am colorblind so I can relate to the frustration of designs excluding a minority of us and essentially making it unusable for us.
So… What do I mean it isn’t left-handed friendly?
1) Software home buttons stays right.
If you have a device with software buttons, try it. You’ll notice, the software buttons always stay on the bottom or the right, depending if it in portrait or landscape.
This get particularly weird when using the Google Camera app. That app does attempt to support left-handed use. But this puts you weird position… you now are stuck using two hands in this orientation, where you would have been perfectly fine in the right-hand friendly version.
While it is nice to see Google does try to support it in some apps, the software buttons and the system in general do not.
2) No easy way for develops to support it on their own.
While Android as a whole does a marvelous job of designing for any device, they don’t make it easy to define a layout for landscape-left vs landscape-right. You can specify the based on size, density, language, and even orientation (portrait vs landscape)… but not which landscape version you are in.
This puts developers in a strange position of needing to handle all of the effort themselves. Assuming of course that their apps really need to change based on handedness at all, which admittedly isn’t very common. But then again, I’m not left-handed, I’d be curious to see what other frustrations those who are have run into while using Android.
Can It Be Done?
Of course it can! Simply listen to the accelerometer and use that to determine your layout instead of using layout specific folders (as is traditional in Android). But be prepared for a lot more work in code, and a little bit more of a mess with your layouts.
This is exactly what I ended up doing with Goofy Glass. Since I was essentially creating a camera app similar in some regards to the build in Android camera. It tricky to do, but it was a bunch of extra effort, of course a lot of that effort was simply redesigning the layouts to look the way they should and making sure that all the lists were reversed in left-hand mode.
Anyway, I just thought it was interesting and a little disappointing, but overall probably not even important for most apps… as I doubt very few need to be specifically designed with that in mind.
For years I have wanted to sync my Christmas lights to music. Each year comes and goes without even a single blinking light on my house. But no more… this year I decided to finally sync my house to the radio station FM 100.3!
Last night we turned it on for our first end-to-end test run. And here are the results. What do you think?
For those who are a little more curious about how it works, I’ll be writing a much more detailed set of posts about it later. But a quick view of the pipeline is as follows:
Radio -> Custom Audio Cable -> Android -> Frequency Magic -> Bluetooth -> Arduino -> 16 Channel Relay -> Christmas Lights
And there’s more to come. A few strands of lights are still in transit. And there’s a variety of tweaks I still plan to make.
Earlier this year I gave a presentation titled Battling the Media Framework. I’ve had a lot of bitter-sweet experience dealing with Android’s media framework. I’ve had experience with camera & OpenGL via Goofy Glass, mic & audio with my voice changers, and a healthy amount of video at both Sorenson Communications and currently with HireVue.
The short and skinny of it is: “These API’s on Android are super hard”. My goal with each of those apps has been to support as many devices as possible with the best experience possible. With over 7000 devices, it hasn’t always been easy.
For some practical tips on how to deal with the shortcomings of those API’s feel free to check out my slides here.
I recently gave a presentation regarding Android TV for the Google Developers Group in Utah. All in all I am very impressed with Android TV. Google has learned a lot of lessons as they’ve attempted this with Google TV, Nexus Q, and the Chromecast. This iteration finally gets the experience right.
I also was impressed how easy it was to port existing code to Android TV. I attempted to port HireVue Pro, and it turned out gorgeous and simple to use. I really hope these TV’s garner the attention of developers, because it really could finally change the outdated TV experience.
Here’s to hoping.
The entire presentation (minus one video which wouldn’t upload) can be found here.