ChargePoint Tensorflow-Powered TouchScreens

ChargePoint EV Chargers have to support extreme conditions, from being covered in ice after a winter storm in Finland, to extreme heat and sun in desert like environments like LA. The hardware team at ChargePoint evaluated and dismissed Capacitive, Resistive, Camera-Based, IR-Based touchscreen. The final solution was unique to the problem, a E-field (radio-frequency) based touchscreen that utilized copper antennas around the touchscreen, which is durable, immune from temperature and high-light problems, and cost-effective.

Software would need triangulate touch position based off 4 antennas on the 4 sides of the screen, which would be problematic, as the E-field values for the same on-screen touch position were different for left-handed vs right-handed users, as well as for tall vs short users, etc.

After multiple attempts using different algorithms and grid-fitting, I finally used Machine-Learning via TensorFlow. Training a model that included all these diverse users allowed real-time predictions to account for the variations in users, and provide highly accurate positions.

ChargePoint RFTouch ChargePoint DevBlog

Qt-WebAssembly ChargePoint EV Charger Simulator

During a Qt Live Event in Palo Alto, saw an awesome demonstration of Qt’s upcoming WebAssembly support. After the event the Qt developer who gave the presentation provided me with links to the test branches on GitHub as well as a few patches and workarounds, and even provided assistance when I encountered some compilation issues with my own code against the Qt WebAssembly target.

By the next day I had the ChargePoint EV Station UI working in the browser. This quickly lead to having an Online Simulator for creating training manual screenshots, doing virtual training, as well as doing UX review remotely.

ChargePoint Qt-WebAssembly Simulator

Pebble Emulator demo for Qemu Advent Calendar

Pebble was developing a emulator of our smartwatch for the desktop to improve the developer experience, but we were months away from deploying it to our SDK. There was still a lot of integration work, as well as build and tooling issues to deploy it to all of our supported platforms (OSX, Linux, Windows).

I have always been a fan of Qemu, and when I heard they were doing a image-a-day Advent Calendar, I thought it was the perfect opportunity to create a demo for Pebble developers and fans, independent of the SDK. It was packaged as a qemu emulator of the Pebble, within a Qemu emulator for TinyCoreLinux, to remove any issues deploying it to users desktops. Additionally, it bundled 5 Watchfaces and 6 Games/Applications (including my XKCD comic viewer & Stuart’s Tiny Bird game).

Pebble Emulator Demo Qemu Advent Calendar 2014

Pebble SmartWatch UI Sketchup Tool

While I was working at Pebble, I found myself mocking up my applications and partner applications as a series of screenshot and looking at them on the watch.

I created a desktop tool using node-webkit that allows for Drag-And-Drop of images into the application on the Desktop, it would then convert the image to a reduced/scaled PNG with a Pebble “frame” around the image, and then provides linkage between images by clicking and dragging buttons from one screenshot to another. Then a user could “live” demo on the watch, clicking buttons to navigate the same design tree created on the desktop.

Pebble Sketchup Tool

Skype for PS Vita

Had a blast while working at Skype. I had the fortune to work with Sony on porting Skype to the PS Vita. Being a fan of games and handhelds, it was exciting having my professional life cross over to gaming for a short while.

One of the more interesting things involved in the PS Vita port of Skype was that I had to modify the Skype audio encoding to enable it to use a PS Vita hardware-accelerated audio codec for SILK, the first time that SILK had not been a software encoder for Skype. Luckily for me the Skype audio codec engineers are a fun, smart, flexible bunch. They took the time to explain the intricacies of the encoding path, and helped me find workarounds so that we could plumb it to a hardware version of the codec.

Skype for PSVita

Nexis/787 UI

While working at Astronautics, I created the widget toolkit and built the UI for the NEXIS flight system, as well as the previous 787 flight system. NEXIS MENU

For the airport map, which typically had tens of thousands of polygons, in order to get good performance out of the Intel Graphics chip at the time, I created a minimal software renderer that drew on tiles, and uploaded them as textures to be panned. This allowed for better image quality, as the antialiasing of the Intel Graphics was poor, and since the rendering was cached, it boosted the FPS from ~3FPS (rendering all the polygons every frame) to the 30FPS cap (software pre-rendered tiles).

I also created a collision and bounding framework that kept relevant or important information on-screen even if it was located off-screen or beneath a UI element. This covered both cases such as other airplanes that would be off-screen with the current view but required the pilot to be aware of them, as well as other elements such as the runway identifiers such as “25R” in the picture below sliding with the runway edge to stay on-screen.

NEXIS UI Youtube Video