Ofo Bike Sharing

Out for my morning constitutional in an unfamiliar Dallas neighborhood this morning, I stumbled across a couple of bikes that weren’t chained up, seemed in good repair, but were conspicuously not stolen. “Odd!” I thought, and slipped across the street to take a closer look.

Their frames were of the 40 pound, nearly-indestructible sort favored by bike rental companies and they were painted a bright yellow. As I got close enough to read the placard in the basket, I realized that’s just what they were. They were owned by Ofo, a company I hadn’t heard of, but which promised the first ride free, the drug dealer’s favorite promotional strategy. (They evidently just started operations in Dallas.) I downloaded the app, entered by credit card info, and used it to unlock the bike and tool around the neighboorhood for a while.

The ride was fun. A cheery bell on one handlebar and a three speed shifter on the other meant ensured that I didn’t run anybody down nor get going too fast — probably a sensible thing, given that Ofo neither provided nor encouraged helmets. The bike itself featured a sturdy basket and was big, heavy, and rigid — good for basic commuting tasks, but nothing you’d want for super-long distances. And the $1/hour rate was eminently reasonable and much more favorable than the other bike rental services I’ve tried.

Ofo’s big innovation seems to be not using docking stations. They rely on users to park the bikes legally wherever they end their trips. This doubtless saves costs, but does seem to open up the bikes for theft. They combat this by using bikes that are pretty clunky and unattractive (not a strategy that has worked completely effectively for bowling shoes). There’s already a cellular radio onboard to allow the bikes to be unlocked. While the app asks for GPS access on your phone, presumably there’s a GPS chip as well on the bike so if someone does toss one in the back of a truck, they can keep track of where it goes.

All in all, I think this is a great idea. Cheaper rates for bike rental combined with the broader distribution of the vehicles possible without the need for docking stations improved the bike renter’s experience markedly. Seeing bikes scattered around a neighborhood is visually charming in a way that dock-based rental systems aren’t. I think Ofo has a good idea and business model if they can turn a profit with their low rates. The 5 star reviews for their app on the app store would seem to agree.

Getting Unity and Arduino Working Together

Yesterday I set myself a goal of getting Unity talking to Arduino, the microcontroller that’s hugely popular in the maker community. I was interested in doing so because several of our VR projects have been site-specific installations that could benefit from a large LED scoreboard, physical actuators (rumble motors, heat lamps, fans, etc.) to heighten the experience, or just a “This person flailing his arms around can’t see you; please stand back!” warning light.

Fortunately, given than both Unity and Arduino are very popular, this path is fairly well-trodden already. The most common approach is to establish a serial connection between the computer running Unity and the Arduino board. This is straightforward to do, though it requires tweaking a few settings in Unity to allow access to the serial libraries.

For the Arduinos that have USB port, the physical connection is as simple as plugging in a USB cable. For the boards that have only serial pins, wiring in a converter chip will be necessary to bridge the two. I used the Arduino Uno since it supports USB and I didn’t feel like soldering.

The next decision is whether to write your code from scratch or to use a library to ease this task. If you’re more of a DIY person, the amount of code you have to write isn’t outrageous. Alan Zucconi has an excellent article that will guide you through what you need on both systems.

If you’re looking to get up and running quickly, however, you may prefer one of the options available in the Unity Asset Store. These come with all the code you need for many use cases already written, a variety of examples, and niceties like custom UI in the Unity editor. I ended up using Marc Teyssier’s excellent Uduino package, which has good documentation and supports digital input and output, analog input and output, and servo motor control out of the box.

(I ended up having trouble at first, as my board wasn’t setting the pin mode to digital output when the code commanded it to. I wasn’t sure whether this was a problem with my board or with the code, but adding some additional commands to the Arduino code to make sure that the pin mode got reset cleared up the problem.)

I rigged up a simple relay circuit, created a sample scene, and before too long, had a light in my living room turning on and off with the scene lighting in Unity. Viola!

This is merely a proof of concept — a technical spike to sort out some unknowns. Now that we’ve got these waters mapped, I hope to add some production physical effects to future projects. Excelsior!

Moving to VR

About a year ago, I decided it was time for a career shift. I managed a fabulous team of mobile developers who were a joy to work with, but I missed creating things. I talked to my boss at Mutual Mobile about the problem; he encouraged me to chart out a way back to an engineer role within the company.

I thought carefully about my options. I could go back to iOS engineering, which my previous boss had done. He was delighted with the change and had no regrets whatever about stepping down from management to an engineering job. But I enjoy learning and figuring out new things and, while iOS is a fantastically enjoyable platform to develop for, iOS 10 seemed pretty mature. I moved from web development to mobile because the web stopped feeling like the wild west. Now I had the same sense about mobile.

So I looked at alternatives. Mutual Mobile had a months-old Virtual Reality practice at that point that was gaining steam. While I hadn’t yet spent any serious time with Unity, which the team uses for its work, my son and some of my fellow engineers both had and were clearly enjoying the experience.

I floated my plan to retool myself into a VR engineer to my boss and the VR team, all of whom were gracious enough to give it an enthusiastic thumbs-up. So in early 2017, I began a self-administered crash course in Unity and VR. I found Unity’s online training materials to be excellent, and by the time we executed my official transition to the VR team, I was able to jump in and contribute to the team without a problem.

(I was still green compared to the other two excellent engineers working on our projects, but made up for it by continuing to do management of our engineering and project management teams.)

I’ve now gotten to contribute to a Cardboard project and do all the engineering for an Oculus Rift project. (The former should be available in the mobile app stores soon, and the latter will be installed in the Bass Pro HQ in Springfield in a few weeks.) The team’s also doing work with several other really interesting clients; I’m excited about the work ahead.

Now that I’m past the initial hurdles in Unity, I’m learning things I think might benefit other developers and/or VR enthusiasts. Accordingly, I’m going to post things here to document my learning. My areas of particular interest include: Good Software Architecture in Unity, Cool Stuff our Team is Doing, Using Physical Props in VR, and Accessibility in VR.

If you’re interested in any of these areas or just in creating VR, please get in touch or just follow along. I’m excited about this next phase of my career, and will be happy to have company!

Honeymoon, Day 5: The Giant’s Causeway and a Train Trip

We earmarked Friday for The Giant’s Causeway. We loaded up early and headed north, stopping only for a quick breakfast along the way. After our arrival and my first Irish Magners cider (which lived up to my friend Jason’s enthusiasm for it), we started our hike down to the Causeway.

I had, of course, heard about the site before, but was still amazed by the reality of it. The regular hexagonal basalt columns are like nothing I’d seen in creation before, and it was easy to see why it is one of Beki’s favorite places in the world. (As a reader, I gave it the highest praise I can offer a place: “I’d love to bring a book and sit here for hours.”) We clambered happily over the rocks for an hour or so, and then hiked up the hillside to enjoy some spectacular views overlooking the causeway and the land around.

We then dropped by the ruins of Dunluce Castle, a nearby site that was beautifully situated on a large outcropping over the sea. We learned a bit about the history of the place, read the slightly self-congratulatory quotes about the importance of the archaeology there, enjoyed more spectacular views, and dodged enthusiastic schoolchildren who were barreling around taking selfies in every cranny of the place.

Randy and Beki then dropped us off in Coleraine to pick up the train to Derry/Londonderry. (Evidently the Irish Republicans call it the former, Loyalists the latter, and there’s strong conviction about it. “There’s no such place as Londonderry, but I can sell you a ticket to Derry” ticketing agents might tell an unsuspecting traveler.) Michael Palin described this as one of the most beautiful rail journeys in the world. We enjoyed gliding past verdant green fields filled with content cows and sheep, as well as vibrant fields of yellow rapeseed crops, and lamented that we didn’t have time to explore Derry before hopping back on the train to Belfast.

Our last stop for the day was The Crown Liquor Saloon, a downtown pub that was restored in 2007. Decorated with elaborate tile, stained glass, and woodwork, and featuring a number of semi-private booths, it was an ideal place to enjoy a drink and dinner.

Honeymoon, Day 4: Travel & Belfast

Thursday was a travel day. We spent the earlier part of the day getting from Ballymoney to Belfast, where we’d be staying for the next couple of nights. The drive was lovely. More of the country unfolded before us as we listened to our new friends Sammy and Kylie. Kris was delighted by the signs that directed us not only to the nearest gas stations but also to the nearest castles, which seemed equally numerous.

Once we got to Belfast, we took a black cab tour around town. This brought home the history of The Troubles in a visceral way, as we saw shrines to those slain on both sides of the conflict. Our guide was in his teens during the peak of the tension and violence, and while he was careful not to skew his account, had clearly seen things that left a mark during that time. Sad and sobering that, while most of the violence in now nearly a generation in the past, that there are still Belfast residents who live in the shadow of “The Peace Wall” and who won’t go to the other side to have a drink. There are few past a certain age who haven’t lost someone to the violence of this conflict.

After the tour, we reconnected with Randy & Beki and enjoyed naps and a hike up the hill to Belfast Castle, a beautiful structure with a bistro and gardens overlooking the port and much of the rest of the city. We were struck by the cat motifs in the decor, and were later delighted by the discovery the legend that, like the ravens in the Tower of London, Belfast Castle would remain safe as long as a cat lived there.

We then headed back into town for dinner at “Made in Belfast,” a delightfully quirky restaurant with locally sourced deliciousness of various kinds. (My Ploughman’s Burger, with Irish beef, Irish cheese, and Irish ham was outstanding!) We then dropped in at The Dirty Onion for a couple pints (my first Irish Guiness!) and live music. It turned out, suprisingly, to be bluegrass. It also turned out, unsurprisingly, to be excellent.

Honeymoon, Day 3: Shipwreck Hike and New Friends

Wednesday dawned bright and early. We started the day with a planning session for the rest of our trip, and then a fantastic walk/hike/climb up the beach to a nearby shipwreck. The mix of terrain was delightfully different from the beaches I’m used to, with beautiful schist outcroppings thrusting through the sand and out into the water. We had to choose several times between a carefully timed run around a rock face while the tide momentarily sucked back out to sea and an ambitious bit of rock climbing.

We then made a foray into Gorey for lunch at The Book Cafe, which combines delicious food with a wonderful, quirky bookstore, full of general-interest and Irish author tomes. It would have been easy to lose myself for hours there and to miss the rest of the town. Beki and Randy next took us down to the wood turning shop of Robert O’Connor, who creates stunningly beautiful wood pieces in his shop and has lately started to craft wooden pennywhistles as well. I spent a happy quarter hour trying out various instruments while his dog Maggie looked on reproachfully when I hit high notes.

A trip to Tesco left us well-supplied for a dinner of African potato soup. We then stopped by friends that Beki & Randy had toured with, Sammy & Kylie, for a quick visit. We enjoyed the pleasures of good conversation and the storied Swedish confection, “Plopp”, of which they had a stash they willingly shared. (It’s better than it sounds.)

I was delighted to discover that Sammy was the singer for The Electrics, who were my introduction to Celtic rock around a dozen years ago. I went a little fanboy on them, and they were kind enough to send us on our way with a couple CDs and a thumb drive full of music, which has been the soundtrack of our honeymoon since.

Honeymoon: Days 1-2

After spending the day packing and saying farewell to the last of family and friends who had come for the wedding, our friend Ron drove Kris and me to the airport. We enjoyed a last American meal, visited with Savannah, whose flight was going out an hour after ours, and loaded up, waving to Savannah as we boarded.

The flight was long but uneventful. British Airways was great, taking good care of us while we watched La La Land and Doctor Strange. The in-flight entertainment included several other movies I’d had on my to-watch list, but I was exhausted, and even Marvel and Benedict Cumerbatch couldn’t keep me awake. We each enjoyed a few hours sleep by the time we touched down at Heathrow.

Our layover there was surprisingly pleasant. We walked a couple of miles, visited shops we couldn’t possibly afford, poked around the Harry Potter store, enjoyed the airport extension of Hamley’s (my favorite toy store), and grabbed a healthy lunch at Wagamama, which I’d remembered from the trip to my brother’s wedding 12 years earlier.

We landed in Dublin mid-afternoon, gathered our things, and visited the tourist information shops, collecting our own weight in brochures and maps, before jumping into the rental car and heading south. The beautiful green hills and mountains unfolded before us, hedgerows and sheep lending extra charm. It reminded me very much of England, but with mountains.

After leaving the motorway and whizzing past several other drivers at impossible speeds on the tiny roads, we finally made it to our dear friends and hosts for the first part of our trip, Randy and Beki. After exchanging enthusiastic hugs, we decided to take a walk down to the beach to fight the jet lag and to keep us awake until at least 9:00pm.

The shore is beautiful, with a sandy beach nestled among rocky crags, and I immediately stripped off my shoes and socks to wade into the frigid Irish sea. We didn’t last long, however, before the chill won out, so we strolled back up to their flat, where they had a wonderful vegan shepherd’s pie waiting. It was fun to try Sriracha that didn’t come from Huy Fong and lacked the accustomed rooster on the front. The unpretentiously named “brown sauce” was also novel. All was delicious. We enjoyed tea, Irish cheese, and excellent company on the patio until five minutes after 9:00, at which point we decided we had fought the good fight against jet lag and fell into a deep, exhausted sleep for 9 hours.

Getting More Feedback

So, you want more feedback from the people you work with.
 
It’s critical to know what things you should be working on and how you’re progressing toward those goals. Our high-level goals are often well defined: write the login functionality for an app, sell 5 new contracts this month, etc. But how we do these things depends on the people around us and how well we work with them. If you’re part of a team, you need to know what they want from you to do your work best together.
 
The first challenge, of course, is getting any feedback at all. People are busy and have a hard time scavenging a few minutes to think about that sort of thing, much less figuring out good ways to communicate it.
 
The second challenge is getting honest feedback. Many of us want to be “nice” and to avoid saying things that are uncomfortable whenever we can. (If I’m honest, for me that usually has as much to do with cowardice and conflict-avoidance than with kindness.) So it’s important to think about how to make the process both as easy as possible and as safe and comfortable as it can be.
 
Here are a few approaches I’ve found that work well:
 
  1. Ask a specific question out loud: “Hey, I want to be doing great work here. How do you feel I’m doing, and what’s one thing I could improve?” By asking verbally, we keep it quick; answering only requires a minute or two of someone’s time. By asking for a single thing to improve, we can also remove much of the concern that our colleagues have about coming across as mean or critical.

    When we ask for something specific, we allow others to offer an improvement as a favor rather than a criticism. Doing this verbally means that there’s no written record of what they say, which helps ease the pressure as well.

  2. Ask the same questions in Email, Slack, or another written format: This takes longer, both for you and for the people from whom you’re asking for input. Colleagues will be less candid, as they might have concerns that their comments are “on the record,” and you’ll get fewer responses.

    On the upside, you will get more thoughtful feedback as your respondents take more time to reflect on their answers. You will also have a record to which you can refer as you’re working to figure out how to improve your work.

  3. Use an anonymous feedback tool: There are several that help you gather feedback while assuring your respondents that you won’t know from whom it originates. (I’ve used http://www.get3sixty.com/ and like it pretty well.) Anonymity helps your colleagues express themselves freely without putting a strain on your relationship. This results in more candid feedback.

    Include more questions if you want a richer picture of others’ perceptions of you and your work. If you keep the questions consistent over time, you can use the answers to track your own progress. But remember, the more information you ask for, the fewer people will likely respond. Keep the time needed to respond under a minute to get the most results.

  4. Ask your manager: Why do I list this last? Because of the telephone game. You’ve played it as a kid. A line of people passes a message, whispering it from one to another. By the time it gets to the end, what emerges often has hilariously little to do with the original meaning. Likewise, the fewer people between the source of feedback and its recipient, the clearer the message you receive will be.

    Having your manager gather feedback for you is useful for performance appraisals, other situations where you need an official record, or when you’re having a tough time getting candid feedback on your own. But the closer you can get to the source, the better the feedback you will receive will be.

If you’d like more guidance and feedback from your team, give one of these approaches a try and see how it works. Try soliciting feedback from your teammates every two months or so, though your individual cadence may vary depending on your situation. If there’s a specific area you’re trying to improve, you might check in more often to see how you’re progressing. With a well-established team, you may need less frequent feedback . But if you want to improve, getting regular feedback and coaching from the people closest to you is one of the best ways to do it.

Engaged

Thursday afternoon, Kris Spilker and I got engaged.

I am, of course, delighted. It’s hard for me to articulate what I appreciate about this woman without sounding like a Jane Austen novel. She is kind, true, steadfast, and lovely. She embodies hospitality both in her home and in her conversation. The trust I have placed in her has been validated many times over; when she says she’ll do something, she follows through. She takes seriously and lives out the great commands of Jesus: “The first in importance is, ‘Listen, Israel: The Lord your God is one; so love the Lord God with all your passion and prayer and intelligence and energy.’ And here is the second: ‘Love others as well as you love yourself.’ There is no other commandment that ranks with these.” And we have a fantastic time making music together.

For those curious about the details: I took Thursday afternoon off work and took her to Wimberley where we had lunch at The Leaning Pear, a beautiful spot on Cypress Creek with marvelous food. We then climbed up a nearby hill (known variously as Old Baldy or Prayer Mountain) that affords beautiful views of the surrounding Texas Hill Country. When we reached the top, there was a drunk man and a tattooed woman doing yoga up there; not quite the cast I had envisioned for the occasion, but arguably the quintessential Texas Hill Country experience. We found a shady spot not too far from the yogi, pulled out the guitar I’d hauled up, and sang songs together for a while, drinking in the beauty of the place and laughing at ourselves as we stumbled over lyrics only half-remembered.

If John Hughes has taught us teens of the 80’s anything, it’s that Peter Gabriel songs are the proper way to profess one’s affections. Accordingly, I played and sang “The Book of Love,” which ends with the line “You ought to give me wedding rings.” (Note for pedants: yes, I know this wasn’t originally a Peter Gabriel song, but the John Hughes joke doesn’t work otherwise; just play along, OK?) I then pulled the ring from my guitar case and presented it to Kris, saying some inarticulate things that I mercifully do not remember. Fortunately, the prop carried the day, and she said yes.

Thus begins a new chapter of our lives. I very much look forward to continuing to better know and love each other’s families, kids, and other dear people, to further adventures in art, music, food, dancing, play, exploring the world, reverent silences, much laughter, and to serving the people around us and each other for many, many years to come.

Reflections on the Gains and Losses of Maturing Children

I found this on my hard drive this morning: a piece I’d written a first draft of almost exactly four years ago, but never got around to publishing. While it’s outdated in several ways now, I still thought it worth sharing belatedly.

Last month, I walked one of our kids to school for what will be the last time.

The occasion is not catastrophic. I have no fatal illness. Our kids have not been thrown out of school. We’ve not decided that public education is irredeemably flawed, nor are we starting out own magnet school for gifted children with our own surname. The cause, in this case, is the same one we all face: the march of time.

Maggie, our youngest, has just finished up her 5th grade year at Crockett Elementary. The school she will be attending next year is Miller, a Middle School which lacks Crockett’s one-block proximity to our home. Though we still have many years before we face the challenges of an empty nest, this melancholy-tinged march was a foretaste of things to come.

Already I have marked with sadness milestones along the way. Loose teeth are far less frequent around our house than once they were. I’m reminded of one exceptional day when Liam loudly announced that he’d lost a tooth, proudly displayed it for all to see, and then went back to jumping on the trampoline, only to announce 30 minutes later that he had lost another one.

I often see activities coming up on the library’s calendar and get excited about taking the kids, only to realize belatedly that our kids are all past the age where they would hold any interest. “Ooh, hey, a puppet show! The Billy Goats Gruff! Great Story! Oh, wait…my youngest child is now eleven, and billy goats now lack their former charm.”

Saddest for me is the fact that having an adventure becomes progressively more difficult. When a child is young, merely being in the world is a grand, continuous process of discovery. The bar is then raised a bit, but is still easy to clear: a simple walk through the neighborhood yields deer sightings, fascinating clouds, nests of insects. Later, once the neighborhood has become familiar, going to the park or down to the river is necessary to renew that sense of wonder and excitement. And, of course, it’s natural that doing something with one’s parents moves from a consistent delight to something less wonderful. (We have been singularly fortunate in that regard, as even our teenagers seem to still enjoy our company.)

But with these miniature tragedies also come a variety of joys. Each of our young people has such a rich, distinct personality that discovering them is a constant, unfolding delight, like watching a tree bloom and mature over the course of years. One develops an interest in music, and does great in band. Another has a sly sense of humor that continuously surprises and delights me. This one does amazing art; that one takes up theater.

And while adventures become more difficult to come by, they also become bigger and more exciting. We get to go SCUBA diving together. We play open mics together. We design and produce computer and card games. We build (and blow up) a huge variety of things in lumber and lego. We travel and explore the world around us. We explore other worlds that we have invented, tell each other stories that get more engaging with each passing year, and challenge and spur each other on to richer and deeper relationships with those around us.

With each swing of the sun across the sky, I have fractionally less of a child, and a tiny bit more of a friend. And that’s a trade that, while it comes with a bit of sadness for opportunities lost, is well worth making.