Thursday, May 18, 2017

Moments Inside Google I/O 2017

Google I/O 2017 is the highly-anticipated and much-improved follow-on edition of Google I/O 2016.  It's evident throughout all aspects of the conference that they took feedback and lessons learned from last year's maiden foray into the Shoreline Amphitheater to make for a much more awesome experience.  Now, I sit here writing this to you from inside the Amphitheatre itself, comfortable in just a thin long-sleeve shirt and jeans, no wind at all (unlike last year), awash in sound from the LCD Soundsystem.  However, I almost didn't write you this story.

A Nearly Missed Opportunity

The registration window for I/O 17 came upon us.  Stacy reminded me it was time for this, but I balked at the price -- up $150 from last year!  Nevertheless, I still planned to register... until I didn't.  I hadn't realized I forgot until a day after registration closed.  My heart fell through the floor, and Stacy rolled her eyes... Oh Stevo... Oh well... I thought all hope was lost until she told me of an opportunity to try again for another shot at a ticket through the Women Techmakers raffle.  I applied for the raffle dutifully -- it's never fun to fill out the long Google I/O registration form though -- but knowing it was my only shot, it needed to get done.  Fast forward just a couple days later, April 18, tax day, and on a day when I was about to spend about $12,000 between car repairs and the tax bill... well, I got debited another $750 when I won the raffle.  Now that actually felt good, because it was $300 off the regular ticket price anyway!

What to Do In the Bay Area

Prior to the event, besides bumming around San Francisco while Stacy participated in various Women Techmakers events (and all the touristy stuff that entails) (except for how I actually wandered through the Tenderloin district once accidentally and a couple times on purpose), I spent a significant part of "Day Zero" wandering around the Sunnyvale area hitting up old-time electronics stores still leftover from the days when hardware companies ruled Silicon Valley and software was something you crammed onto a tiny PROM chip if you were lucky.  (But more on that possibly next week... I have to make sure I'm clear to post some of those pictures, plus Google I/O is timely this week!)

Anyway, there are some "Zero-Day" parties sponsored by companies participating in Google I/O.  I scored invitations and tickets to the Netflix party and, for the second year, the Intel IoT party.  The night started with the Netflix party for me, which I arrived at after dropping off my haul from all the old electronics and computer stores.  It was at the Computer History Museum in Mountain View, very close to the Googleplex.  It is a cool museum, but unfortunately most of the people there seemed to already be in their little cliques and didn't seem too terribly interested in talking to a guy with a cool homemade LED badge.  It's kind of sad how insular a lot of tech folks can be.

After that party, I headed a bit northwest to the Intel Day Zero IoT party, where like last year, they had a variety of demos and you could earn tokens for swag by listening to these demos, and even more tokens by talking shop with the Intel representatives at the booths.  This one is set up more like a dance party with loud music and flowing beer, and the people at the Intel party seem to be more in a social mood; rather than just standing around on their phones talking amongst their own coworkers, people are flowing around between so many demos that there are plenty of opportunities to meet cool people.  Now, the Netflix party had demos too, but maybe there were not enough or they weren't so compelling?

In any event, even from the experience of getting tickets for I/O on Tuesday before the event, I could already tell things were going to be better.  They had actual organization for the Uber & Lyft rides, and so I knew they had taken into account at least some of the lessons from last year.  In fact, here are my takes on how it's better:

  • Break-out sessions are overall in much larger rooms.  Last year, only one or two of the rooms were really big; the rest of the sessions were in small geodesic domes.  This year, those geodesic domes are reserved for demo rooms (which were mostly outdoors last year, with the exception of a few like Firebase and BigQuery), and all the conference rooms are large.  In fact, I think a couple rooms are even bigger than the biggest rooms last year.
  • The food actually tastes like it has flavor.  The downside to this is I was really looking forward to getting a "food cleansing" like I got last year, but with the improvement in quality, it doesn't feel like that's going to happen.
  • We're back to getting a lot of nice swag.
  • The transportation situation has improved a bunch, as they had well-planned routes for Uber and Lyft drivers to take.
  • There seems to be quite a bit more seating around the venue.
From what I can tell, the cost of these improvements seems to be that some of the demo areas seem to be a bit more squishy than they were last year.  However, previously the Office Hours and Design Reviews took place in half-open tents; this year, they are also in enclosed rooms.  There are still a bunch of demos to be seen; plenty on Firebase of course, but also Android Auto, Google Assistant, Android Things, and all the ways in which these platforms can be connected.

The key takeaway I have from all this talk though, including everything from the keynote to the breakout sessions, is:

Don't bother specializing in any one particular area.

As a developer who has always had a wide variety of interests in the field and written in a number of programming languages, I've seen where Google is trying to make things previously unfathomably difficult and basically impractical for any corporation to want to invest in (and for academics to only dream of) to be made possible.  At first, we saw Sundar Pichai talk about Google training machine learning models to come up with...other machine learning models.  Computers will now be testing in parallel what it takes data scientists months or possibly years to come up with on their own in series and only after lots of tedious model building and testing.  The other big announcement is that Kotlin is now being added to Android Studio in addition to Java.  And while Google promises that Java will still be a first-class language and supported heavily, it will soon become evident that those who know Kotlin will become much more efficient and effective at implementing Android code than those still thrashing through standard Java code.

Other notable events:

* Ellie Powers, Product Manager for Google Play developers, introduces Google Baby at Speechless.  As a result of my live-tweeting all of Speechless, she now follows me on Twitter.  Cool!

* Stacy was the headliner of a Women Android Developers panel in San Francisco Thursday night.

* "Make Your Android O-Face" will be the next big social media trend.

* And there's still a whole 'nother day of the conference left, so we'll see what transpires!

Thursday, May 11, 2017

Journey to a Fully Custom Pinball Machine - Part 1

The"maker bone" has bit me pretty hard since 2011 when I began working on LEDgoes/BriteBlox and won 3rd place the Apps for Metro Chicago hackathon with Owtsee/headonout.  And while I've worked on a mixture of side projects for profit and fun since, I can't help but note the urge to do more ridiculous things for myself just to say I did them -- not necessarily to make any sort of profit (in fact, most of my projects sink an enormous amount of time spent over several years before true completion), but for the notoriety.

The Actual Beginning Of This Post

There... Now that the part Google Plus will post as the headline is out of the way, it seems to me that my coworkers generally love me, and I love them too.  I am seen as quite the maker type inside my area, and have been invited to participate in events even in various groups I don't necessarily belong to because they like to "claim" me.  Often, these are external recruiting events, and I love exuding the ideals of our culture while getting a bit of exposure for my stuff, and it's even more fun to see the people I meet at these events working inside my office within the ensuing weeks or months.

It should be noted that the ROM hack of Tapper was done for the first such event.  I gave them a choice between me coming up with a clone of Microsoft's "Rodent's Revenge" (rethemed with elements from our business) or retheming the Tapper arcade game to show the logo of where we were rather than the Budweiser logo.  They picked the latter, thus that was born.  It even turned into a class I give periodically.

For the next event a bit over four months later, I sent along several ideas for things I could show.  They picked BriteBlox, despite that I pretty much showed that already along with Tapper.  I was a little less enthusiastic to simply show another LED light show, so I brainstormed about what else I could build around an LED light show.


I was inspired, with only about a month to prepare, to combine this endeavor with something else on my agenda: making a custom pinball machine.  I'd already had in mind several things I wanted to experiment with on my very own game, and with not a lot of time left (read: time to write tons of game logic for different modes, not to mention wiring in all kinds of switches, drop targets, and toys), I actually opted to neglect the Bally Ms. Pac-Man cabinet I bought solely for the purpose of making my own full custom game (I even sanded all the paint off it a while back already) and go with a custom cabinet design that's only about 60% the size of a full commercial game.  This way, it wouldn't look so empty when I don't bother to populate the playfield with a whole lot of game elements, and it's also "easily" portable (you can pick it up by yourself without needing to tie it up, strap it to a dolly, take legs off, etc).

T minus One Month

After talking to someone particularly enthusiastic about my project, I knew I had to act fast.  I dabbled around with a Windows program called Visual Pinball to build and test my layout on the computer.  Version 10 has a fair number of idiosyncrasies, and although it's an open-source project, it requires a fancy version of Visual Studio that has some development libraries the free version doesn't come with.  So much for trying to make it the way I like it... Nevertheless, with enough perseverance, I managed to build myself a nice layout that seemed to play well, especially when I learned how to play "two-dimensional piano" in order to nudge the game (in the simulator) every which way to make the ball really go where I wanted it to.  (Is it wrong that I designed a game that requires nudging in order to be fun?  I feel like it adds to the skill of a well-rounded pinball player...)

Of course, any time I'm dealing with CAD software (even if it's a pinball simulator), I spend a whole lot of time with geometry.  Most of this was fairly simple measuring, but still tedious as I often liked to write down all the measurements to the ten-thousandth of an inch.  This is far more precision than I really needed for the CNC router, but I wanted to make every effort to ensure it would play in real life just like it did in the simulator.  This meant collecting precise alignments of the lanes, the round area in the back where the ball curves over onto the playfield after the initial shot, the pop bumper, the slingshot holes, rollover targets, general illumination... you get the idea.  Once it was all measured, I duplicated everything into VCarve (our program of choice for the CNC router), which took yet more time just from the sheer number of elements required for even a fairly simple playfield.  And this didn't even account for any "stencils" as to where mounting hardware for all the playfield accessories would go; I ended up attaching them by eye, hand, and feel later on.

What's new with this machine?

To summarize some of the enhancements I presented to the crowd at this recruiting event, and at the Texas Pinball Festival a couple weeks later:

  • High-end servo motor instead of complicated traditional flipper mechanisms
  • 3D-printed brackets as mounting hardware for many rollover switches & general illumination
  • Rollover targets consisting of inexpensive yet highly durable computer keyboard key switches rather than expensive specialty pinball switches that require constant cleaning and/or calibration
  • A DMD display consisting of a 24-panel BriteBlox LED matrix
As development went on, I also eliminated the need for a switch matrix by using an I2C port expander chip; more on that later.

Also, to increase our Intel street cred, I used the Intel Edison development board with the Arduino Breakout Kit, and fabricated my own driver board consisting of MOSFETs to drive the solenoids and pull-up resistors for every single switch.  No expensive P-ROC boards for me!  I'm doing this fully my way.  I know enough about single-board computers, development kits such as the Edison, and embedded C/C++ programming to just go about this myself... right?!

Stay tuned...

Usually I detail a project in a single blog post, thus many of my posts are really long.  Instead (because I'm crunched for time tonight anyway, and because this can easily be talked about in stages), I am going to write several posts on this project over the next few weeks, detailing the ins and outs of my journey.  And honestly, it has only been about three months since I started, thus the requisite number of years before I'm truly finished with something have nowhere near elapsed yet.  As such, there are still quite a few quirks with it (especially electrical gremlins) that I need to fix, and all that will be detailed here too.

I especially want to talk about my fights with MRAA and the Arduino Breakout Kit, and some of the "fun" involved with sensing multiple switches rapidly, from a technical standpoint anyway, and then of course get into softer things such as artwork and the game's logic and theme, and possibly a bit on fabricating the cabinet (which seemed to take a great deal of time).  Be sure to check in on Thursdays around this same time for future posts!