32. GopherCon 2019 Spotlight, Part 1
Hosted by Chris Castle, with guests Nick Gerakines, Jessica Lucci, Tim Raymond, Jay McGavren, Carolyn Van Slyck, and Robert Ross.
GopherCon is the conference for all things golang, where Go community members congregate to discuss best practices, upcoming language changes, cool implementations, and more. Chris Castle caught up with several attendees to talk about what they're excited about. In this first half of a two-part episode, you'll hear from employees at Mattel, GitHub, and Microsoft, as well as authors and instructors, on how they've integrated Go into their work.
Chris Castle recently attended GopherCon 2019 in San Diego, and captured small conversations from many different Go community members. In Part One of a two-part episode, he had several conversations with GopherCon speakers about what they were building.
Nick Gerakines is the Director of Software Engineering at Mattel, the toy company. Mattel has several toys with Internet connectivity, and Go is the primary language used for all of their connected products, whether it's to support authentication and parental controls, or providing product catalog and product instance information. A lot of core gameplay mechanics, such as the number of "miles" a car has ridden on a track, are also transmitted and reported through Go services.
Robert Ross works at FireHydrant. They're using Go for their Kubernetes integration and internal developer tools for local development. For example, they are able to build Docker Compose files on the fly. His favorite aspect about the language is that it can build a portable (and performant!) binary with very few lines of code.
Jessica Lucci is an infrastructure engineer at GitHub. Her interest in Go is catered towards establishing some standardizations beyond simple code formatting. For example, with the recent introduction of Go modules, devising a system around versioning third-party libraries is an interesting problem, particularly when it comes to pinning versions for consistency or updating versions in the event of a CVE.
Tim Raymond works for Gopher Guides, and conducted a training session on testing your Go code. His favorite aspect of GopherCon is its community, where new and old friends meet to share their interests.
Jay McGavren is the author of Head First Go, a programming book designed to teach programmers about how to be effective with Go. It will take Go beginners from basic language features all the way to coding a simple web app.
Carolyn Van Slyck works for Microsoft, and she's used Go to design her perfect CLI. By focusing on the developer experience, she was not only able to abstract away some of the harder tasks which a user might rely upon piping several commands together into one, but she also isolated some of the CLI-specific aspects, such as argument parsing, for future developers to feel more confident when contributing to the project.
Links from this episode
- The Mattel Hot Wheels id toy is powered by Go services
- Modules are a newer system of dependency management for Go
- Head First Go is a programming tutorial for Go, written by Jay McGavren and published by O'Reilly Media
- Gopher Guides leads Go workshops for interested individuals
- Jessica Lucci's talk, "You Can't Go Your Own Way"
- Tim Raymond's lightning talk, "Parsing Expression Grammar"
- Jay McGavren's talk, "Teaching Tech", on effectively teaching programming
- Carolyn Van Slyck's talk, "Design Command-Line Tools People Love"
Chris: Hello. Welcome to Code[ish]. I'm Chris Castle. I'm a developer advocate for Heroku, and today, we've got a great community-focused episode for you. Code[ish] recently went to GopherCon 2019 in sunny San Diego where Salesforce Engineering was a sponsor. We wanted to capture small conversations from lots of different Go community members and then share those out to you and others who maybe weren't able to attend GopherCon. But we had so many great conversations that we had to split this into two episodes. Part one includes conversations from GopherCon speakers like Carolyn Van Slyck, Jessica Lucci, some workshop instructors, and some others. So let's kick off part one. We'll start with a fun story from a software engineering leader at Mattel. Yes, the toy company Mattel who are using Go with their Hot Wheels cars.
Nick: My name is Nick Gerakines. I'm the Director of Software Engineering at Mattel. I work on the Mattel Connected Product Platform team, and we basically support all of Mattel's connected products, whether you're working on Hot Wheels id and building digital play and physical play experiences or controlling your SmartConnect Fisher-Price Rock 'n Play Swing.
Chris: How does Go relate to all of this? Why are you at GopherCon?
Chris: I feel like we need video to do this justice and to show the listeners or the viewers what you're actually doing here. We'll include a link-
Nick: I'm sure we can.
Chris: ... to a photo or something like that or a short video. But we were playing with right before we were chatting here, we were playing with the Mattel cars through the loop, and what are all the pieces called? There's the portal.
Nick: So Hot wheels id is, it's a new play experience for Hot Wheels cars. The idea is that each car has an NFC tag, which means that it's both uniquely identifiable and can accrue its own stats. So now, you know how many miles your car has traveled or how many times it's traveled through a track. So the Smart Track is able to connect and understand its own configuration. So it knows if you have the portal piece and then immediately after the portal piece, which is also the launcher, the loop, and then a turn and so forth. So the game itself allows you to have different challenges and modes based on the configuration of the track as well as just sort of open free play with a car.
Chris: And then so each track connects to a mobile device or a tablet or something like that over Bluetooth, and then the tablet then communicates to these services that you've built and your team has built in the cloud, right?
Nick: That's correct. The portal itself is not Wi-Fi enabled. It connects via Bluetooth to a mobile device, a tablet, a phone. In theory, it could connect to a computer, I guess, but that's not the mechanic that we've implemented so far. Our OTA services, account management services-
Chris: What's OTA? Sorry.
Nick: OTA stands for over the air. That's how we deliver firmware updates-
Chris: Oh, over the air updates.
Nick: ... to the both the portal and to the individual tracks. Because the tracks themselves, they have chips in them to both connect to other track pieces and have that data bus that understands what's going on when the kid's playing with the, when the person's playing with the set.
Chris: Person, adult, or kid or whoever.
Nick: You'd be surprised. There's this whole world of treasure hunting. It's an interesting community.
Chris: All the kids can play with their own cars, bring them to each other's houses on each other's tracks, and race them and play games against each other.
Nick: Yeah, that's exactly right. We've purposely avoided having any real concept of technology backed trading because these cars, they're entirely the same shape and size and weight as any other Hot Wheels car. So you can trade them, play with them, use them on the other tracksets. You can take the cars from Walmart or Target or anywhere else that you get them and play with them on this track as well. It doesn't really require anything special. You just unlock these additional benefits for the car, set of the NFC tags on the track that can scan them.
Chris: Well, that's great. Nice to hear about that stuff. It's pretty exciting to see cool integrations of the physical world and especially play with the software cloud services world.
Nick: And that's really it. Hot Wheels id and some of the upcoming products that I can't necessarily talk about, they really do represent a lot of thought and time put into how can we create the best experience that isn't limiting, how can we allow kids to have open play and have this imaginative, creative experience that isn't just, "Oh, now I can only do this one segment of this mobile game or this map that a developer has implemented." So I'm really excited for the next year into... It's going to be a cool time.
Robert: My name is Robert Ross. People like to call me Bobby Tables after the XKCD comic, and that's what my Twitter handle is, GitHub-
Chris: Is Bobby Tables the flip tables?
Robert: Oh, no. That's the sequel injection one.
Chris: Oh, Little Bobby Tables with semi-colon.
Robert: Robert Drop Table Students, so that's my nickname. It's my GitHub handle, the Twitter, all of the other ones as well.
Chris: How does your company or what do you use Go for?
Robert: So we're using Go at FireHydrant for our Kubernetes integration and also just CLI tools that we build for developer tools for ourselves. So we've built things for local development, so we can build Docker Compose files kind of on the fly. So we don't have one giant Docker Compose file. We'll just have somebody that kind of pushes a file together for us and things like that.
Chris: What's your favorite thing about the Go language or community or the conference?
Robert: I think my favorite thing about the language is that I can build a portable binary in less than 50 lines that actually does something useful. I like using it for manipulating data locally. And you can do some really quick things that provide a lot of value with not a lot of code. And that can be used on a Windows machine, a Linux machine, Mac, and that's awesome for me.
Chris: You don't need the stack of supporting packages and libraries and everything like other programming languages often do.
Robert: Yeah. And there's not a lot of syntax to do a lot, which I also really appreciate.
Jessica: Hi. So my name is Jessica Lucci, and I'm an infrastructure engineer at GitHub.
Chris: What brought you to GitHub, or what has been your history through this world of software engineering?
Jessica: Oh, it's been a long and colorful history. So I started way, ways ago as a full stack engineer and got an opportunity to work in ops. And I found that I liked building tools for other developers more than I liked building products for customers. So that was kind of my gateway experience into the ops world, and I've been doing that for awhile now. And GitHub was just a next logical step on the path because their whole platform is building things for developers.
Chris: So what's your talk at GopherCon going to cover, and yeah, what's your elevator pitch to get people excited about it?
Jessica: We've been working for the past almost half a year now on standardizing how we use different programming languages at GitHub. And the reason we got into that was that we all like to move quickly at GitHub, but we were finding that it was becoming increasingly more difficult to switch between different projects efficiently. And a lot of that was because we didn't have standards around how we structured projects or what libraries we used. And so it was causing a whole slew of issues, which I will cover in fun detail at my talk, but it prompted us to do this wide sweeping effort to rework a lot of that. And so the talk will be going over how we reworked it and kind of what we learned in the process. And there'll be fun pictures too, so there's that.
Chris: What's an example of just one of the things that you're standardizing, right? There's lots of things that could be standardized. It could be indentation, right, which go format takes care of to lots of other things. What's one example?
Jessica: Oh, man. I could spend all day on code formatting. I mean, I know Go is opinionated, but I am also opinionated, so it's a perfect match. But I think one of the cool things we're standardizing is how we do versioning of Go modules. So we previously were doing vendoring. So modules are very new to us, and we're still figuring out how they fit into-
Chris: Yeah, you and everybody.
Jessica: ... our ecosystem. But by switching over to them, we're working on consolidating on a given set of versions now that we can pin versions but also building systems so that we can push out updates to any projects using those versioned modules. So that helps us because if there's a security flaw or something in a library, and we patch it-
Chris: Like a vulnerability or CVE or something.
Jessica: Yeah. And we're also using that system to provide other org-wide updates. So it's the cool thing in general, but versioning is a difficult thing to do correctly. So that's what we're working on.
Chris: And there are lots of different languages, and different package managers have struggled with building the perfect way to do versioning of dependencies.
Jessica: If there is one.
Chris: Yeah. Right, right.
Tim: So I'm Tim. I work for Gopher Guides, and we do corporate trainings in the Go programming language for different companies. And we also do workshops at conferences such as GopherCon. We did the testing workshop yesterday.
Chris: How'd that go? Did you have a good turnout or lots of excited gopher learners?
Tim: Lots of excited gophers. We have a lot of gophers that can now test their applications better, which is always great. We love testing.
Chris: What would you say is your reason for coming to GopherCon? Did you come to learn, come to share your passion, come to meet people?
Tim: I've really like to come to GopherCon to engage with the community, and I've been coming to GopherCon for five or six years now. I've been to all of them, so you see you a lot of old friends and a lot of new friends, and it's great to help introduce new members of the community to other people and help grow our community that much more.
Chris: So how long have you kind of figured out that you enjoy the teaching aspect of helping developers learn?
Tim: I'd say in the past year I've really started to get more into teaching and organized meetups in the past, and it's fun to learn more about how to teach these things better.
Chris: Teach effectively, how to build a curriculum, and connect with different people who learn different ways.
Chris: I'm sure that's not easy to do, but it's cool to have people that are excited about expanding the population of gophers and the different types of gophers out there, so that's cool.
Jay: My name's Jay McGavren. I'm the author of Head First Go published just this year by O'Reilly.
Chris: What's your favorite thing about the Go language or community?
Jay: Well, this might be a little bit of a boring answer, but I like the stability of the language. Russ Cox was giving his keynote yesterday, and he talked a lot about the iterative loop that they go through before introducing new features, how they test everything very carefully to make sure that it works. I like a language that's nice and stable where they're not doing like Python and splitting their community in half with a major version upgrade for example. They're largely over that problem, but it caused a real schism for a while.
Chris: Yeah, right, it was a big issue, yeah, two seven to three something.
Jay: So I like that Go is being very careful about how they proceed through their upgrade paths.
Chris: Can you talk about a little bit about what you were here doing on Wednesday at GopherCon?
Jay: So I was here to teach an introductory workshop. Went pretty good I'd have to say. Got about 50 attendees in there. All had a really good time.
Chris: All beginners starting to learn Go?
Jay: All beginners, yeah. Some of them came in a little more experienced than I expected them to, but I think they still had a pretty good time.
Chris: What would you say, as an educator of Go, someone who's taught Go, what's the best way to get started learning Go or to get into Go?
Jay: Well, thank you for that perfect setup for plugging my book because I am quite fond of Head First Go as a tutorial, especially for those who don't have a whole lot of experience developing in other languages. If you are coming to Go from another programming language and you're feeling pretty confident and want more of a reference book, you might want to look at my competitor, The Go Programming Language, a really solid reference book.
Chris: Are those both O'Reilly books?
Jay: No. I am sorry, but I forget the publisher for The Go Programming Language.
Chris: But yours is from O'Reilly?
Jay: Yeah. Mine is from O'Reilly.
Jay: No, I am very much starting from scratch. Ideally, yes, when you come to Head First Go, you have programmed a little bit before, but we've got hooks for those with absolutely no programming experience. We do explain what a variable is. We do explain what a function is and so forth.
Carolyn: I'm Carolyn Van Slyck. I live out of Chicago, and I work remotely for Microsoft on the Azure team, but I don't do anything with Microsoft or Azure, so I'm a terrible employee.
Chris: That's all right. They think you're valuable in some way. They like you.
Carolyn: So what I do do is I work on open source developer tools. So for example, a lot of people on my team work on things like Helm, Draft, Brigade. And so what I work on is something called Porter, which is for Cloud Native Application Bundles, which is completely new, and no one knows what it is. But what it lets you do is it makes cloud installers. So if you wanted to bundle up everything it takes to install your application on the cloud, not just the Docker image, but maybe your Terraform scripts and maybe the Helm client actually as well, everything you need to make it repeatable, reliable in a single click, that's what Porter is.
Chris: It's part of the Cloud Native Computing Foundation, is it one of the projects kind of under that umbrella?
Carolyn: So CNAB is a spec, and specs don't quite live in CNCF, so it's part of the Linux foundation. But Porter may eventually move into CNCF. Maybe if we can make something work, that'd be pretty cool.
Chris: You just gave a talk about CLIs.
Carolyn: I did.
Chris: Can you share a little bit more about that, what you talked about?
Carolyn: My work on Porter was my one chance to make the perfect CLI, pretty much. I'd made a bunch of CLIs in the past where my hands were kind of tied because I kind of wrote it with people who had other opinions or half of it was written already, and I was new. I wasn't the lead on the project. With Porter, I was the lead on the project, and I got to kind of go-
Chris: You get to make the decisions.
Carolyn: I'd done it horribly in the past. I committed atrocities. Let's do it right. And what do I mean by let's do it right? Oftentimes, it was just kind of written with the idea that we needed to implement functionality, but we weren't quite thinking about what would it feel like to the user as they were typing it. How would we make it really easy for them to accomplish a task? We weren't really focused on that. We were just like, "We need to get this functionality out there."
Carolyn: So instead, we started with, "I want commands that I can say out loud. I want commands that'll make it really easy to do that single click install," and it would do all the things for you, maybe not just the things that are associated what we think of as part of our domain of doing, say, Porter. So if we need to do hard stuff with OpenSSL or we need to do weird, gnarly things that normally we'd say, "Oh, that's fine. The user can just pipe that," no, no, we don't get to push that off and make that their problem.
Chris: You don't get to say, "That's not my job."
Carolyn: No, it has to be part of our thing. Our goal was that anything that was hard has to just be one command that you can say out loud and you can understand and remember.
Chris: That focus on UX is one of my passions also. User experience or developer experience for these kinds of tools is like, "Let's think about that person first and what they're trying to achieve," and not just kind of exposing maybe a nice wrapper around API endpoints.
Carolyn: Yeah, exactly. Nothing was allowed to be code gen. You can write code gen, but then everything had to be artisanal, small batch, kind of finishing touches.
Carolyn: Exactly. They go around it. And then the other piece is that all of the code had to be maintainable, not just by me. Because what if I leave? What if I grow in my career, and I decide do something different. I don't want the tool to kind of languish. I want it to be in a state where anyone on my team who knows Go would be comfortable picking up and working on this. And oftentimes what happens is with a CLI, there are frameworks, for example, Cobra or Viper or a couple other things, that are intimidating the people who aren't familiar with it. So one of the things I did with Porter is I took an opportunity essentially to isolate them into very limited pieces of the code base and pushed them into packages where 99% of the code base has nothing to do with them. They're not littered about.
Carolyn: So if you work on Porter, you just see normal Go code everywhere, and you don't realize it's a CLI. And it makes it extremely easy to test because you don't have to know how to test Cobra. You don't need to know how to set up the right kind of structures to work with Viper. You just need to know how to make a regular Go structure, feed it into a normal struct that's called Porter, and then run it. And it does just what you think it should do, and it kind of works like anything else you could run on say, the Go Playground. And then you're done. No one has any excuse to not work on it essentially on my team.
Chris: I mean, in many ways it sounds like, not to belittle it all, but it sounds like nice abstraction, right? So it's like, I can jump into this one piece and understand it, and I don't need to understand all of the very high level stuff or the very low level stuff or stuff on the sides also just to work on one piece.
Carolyn: Yeah, I didn't say it in the talk, but there's a little bit of stealth dependency injection going on and other words that maybe people don't want to think about or associate with Go, but it's there.
Chris: I love it. That's how you get ideas to grow in getting people to support them. You kind of just introduce them slightly and see how people respond and then go from there.
Chris: All right, and that's it for part one. Thanks for joining us. Stay tuned for the second part where we chat with day two keynote opener, Aaron Schlesinger, GopherCon keynote closer, Johnny Boursiquot, Liz Rice from Aqua Security, and Beyang Liu from Sourcegraph, who provided live blogging for all of the GopherCon talks this year.
A podcast brought to you by the developer advocate team at Heroku, exploring code, technology, tools, tips, and the life of the developer.
Developer Advocate, Heroku
Chris thrives on simplicity and helping others. He writes code, prototypes hardware, and smiles at strangers, helping developers build more and better
Director of Software Engineering, Mattel, Inc.
Nick is a software engineer, speaker, swing dancer, open source contributor, and the author of several books about software development and DevOps.
Infrastructure Engineer, GitHub
Most people call me Lucci and my special talents include dockering-all-the-things, ctl’ing kubes, devoops’ing, and being late to everything.
Partner, Gopher Guides
Tim is a full-stack developer with over six years of experience writing Go for companies such as USA Today, InfluxData, and Mattel.
Developer and Author, Jay McGavren
Author of the OReillyMedia books Head First Ruby and Head First Go. Developer with 15 years of experience.
Carolyn Van Slyck
Senior Software Engineer, Microsoft
Carolyn is a software developer on the Microsoft Azure team, with a passion for dev tools and building vibrant inclusive communities around them.
CEO of FireHydrant.io, A Layer 8 Router for Incident Response
More episodes from Code[ish]
Pia Mancini, Joe Kutner, Josh Simmons, and Chris Castle
Open source communities face several challenges. Besides receiving fair compensation, there are questions of sustainability, governance, mental health, marketing themselves to CTOs, alongside technical challenges such as issue triage and... →
Leah Silber and Jamie White
Open source thrives on community contributions; sometimes, those contributions come from companies that encourage their employees to participate in open source work. But balancing the concerns of your job with those of an open source project... →
Carol Nichols, Jake Goulding, and Chris Castle
Rust is a type-safe, concurrent, and memory efficient language from Mozilla. Developers from various backgrounds are turning towards it more as a means of quickly writing performant and functional code for browsers, cryptocurrencies,... →