Marathon Training Update

I’m signed up for the California International Marathon (a.k.a. CIM) in Sacramento, which is in less than 3 weeks! This will be my first marathon (the SF Marathon this year was supposed to be, but I gave myself a toe injury by overtraining). My goal is simply to finish. I think having any sort of time-based goal would risk pushing me past the point of injury during the race. Am I ready?

I'm Joining Waymo

Quick life update: I’ve left the Chrome team and joined Waymo (formerly the Google self-driving car project). It was a fantastic whirlwind 3 years working on infrastructure for Chromium and helping to–in a very small way–push the open web forward. On the team I launched, a resource to help align the APIs of all browsers. I worked on syncing source code across repos. I launched a couple TensorFlow ML models.

Things I Learned as a First-Time Intern Host

I hosted an intern for the first time this summer. It was my first time being somebody’s manager and it became a huge learning experience for me as well as a really fun time. My intern worked on adding many features to velocity-tracking charts, rewriting both of our ML models in TensorFlow 2.0, and a few other projects. Here are the biggest areas where I struggled as a host and the important lessons I took away from those experiences.

How are Words Represented in Machine Learning? Part 1

Machine learning on human languages is a super exciting space right now. Applications are exploding—just think of how many natural language ML models it takes to run a smart assistant, from transforming spoken audio to text, to finding the exact part of a web page that answers your question, to choosing the correct words with the correct grammar to reply to you. At work I recently had the opportunity to build an NLP system.

3 Tips for New Technical Interviewers

One year ago I conducted my first software engineering interview at Google. In that first interview I gave, I guarantee you I was more nervous than the candidate I was interviewing. Those first few interviews were particularly nerve-wracking. A lot was on the line—I didn’t want to screw up this person’s career by being a bad interviewer! Since then I’ve conducted a great deal more interviews and learned a lot about how to interview candidates successfully.

On Being Injured (Again)

tl;dr: I signed up for the SF Marathon (this would have been my first marathon), then overtrained, got injured, and am currently recovering. I’m probably going to defer my registration to 2020 and become a cheering squad this year. (╯°□°)╯︵ ┻━┻ This is a cycle I’ve been through over and over again. I literally wrote about this in 2015. Being injured massively sucks. I can’t exercise the way I usually do, and I don’t get see my running buddies.

Setting Up a Recruiter Auto-reply Bot

If you’re a software engineer, you’re likely familiar with unsolicited emails from recruiters. Most are probably template emails. Some of them are funny, some are thoughtful, and some of them ask you to move 3000 miles, take a 50% pay cut, and code in a language you don’t know. Impact Recruiter emails have a measurable impact on productivity. If I were to hand-write a response to each one (taking 2 minutes), and I got 1 recruiter email a day, that’s 12 hours of work, or more than one full work day of each year… gone.

Measuring My Chinese Progress

Last summer I started learning Mandarin Chinese. To start I began taking classes at a Chinese language school in SF. For more practice I started an Instagram @jeffcarp_zh and tried writing a couple blog posts. Almost a year later, I’m still going to Chinese class on a semi-regular basis (1 hour a week except when I’m taking a break) and keep up a daily spaced-repetition flashcard habit using the Pleco Chinese dictionary app (usually on the train into work).

Reading Notes: The Shame of the Nation

The Shame of the Nation: The Restoration of Apartheid Schooling in America Author: Jonathan Kozol Published: 2005 Rating: ⭐⭐⭐⭐⭐ This is an upsetting book. It describes the dream of integrated schooling enabled by Brown v. Board of Education in 1954 and how, through racist policy making at the federal, state, and local levels, this dream has been slowly dismantled resulting in an American school system that is as segregated today as it was during the civil rights movement.

Kaiser SF Half Race Report

Overall It went great, I PR’d by 10 minutes! The course is super fast and the light drizzle of rain didn’t really put a damper on things. Report t-0:20 I arrived and was able to use the bathroom – they did a great job of making sure there were enough port-a-potties. After that since it was drizzling I hid under a tree to the side of the start line with a bunch of other runners who looked like they were from a club and knew what they were doing.

Building a Running Pace Calculator With AMP

Sometimes you need to know how fast you need to run to achieve a personal best time. Previously the way I did this was to search “running pace calculator” and follow and use one of the top results. However, I was doing this almost always on mobile and none of those results are very mobile friendly. There might be good native apps for this, but I’m a fan of the web and don’t want to download an extra app if I can avoid it.

How I Host Static Sites With Automatic Deploy on Green

This site,, is written in markdown and uses the Hugo static site generator. This post walks you through how I set automatic building, testing, and deployment to Firebase hosting. Project Setup I assume we’re starting from a working Hugo project. For more on how to set that up, see the Hugo docs. Testing Setup I want the site to be Deploy-on-Green (i.e. only if it passes the tests). The CI setup I use is GCP Cloud Build.

A Year of the Pomodoro Technique

The Pomodoro Technique is method for improving productivity by segmenting work into 25-minute intervals. You focus intensely on a task for 25 minutes, then take a break. Rinse, repeat. I began using the technique to study for the cryptography course I took last winter. The benefits were clear from the beginning. I enjoyed working in 25-minute segments and started using it at work as well. I want to share with you some of the things I learned along this year-long journey.

Reading Notes: Inspired

Inspired is a great introduction on how to be a Product Manager by Marty Cagan, a former engineer turned product expert. Here’s one of my favorite themes of the book: Product: build the right product Engineering: build the product right Here are the most poignant things I learned from this book organized by category. Product team structure It’s important to have somebody between product marketing and engineering (i.

Build a Markov Chain Sentence Generator in 20 lines of Python

A bot who can write a long letter with ease, cannot write ill. —Jane Austen, Pride and Prejudice This post walks you through how to write a Markov Chain from scratch with Python in order to generate completely new sentences that resemble English. The text we’ll be using to build the Markov Chain is Pride and Prejudice by Jane Austen. You can follow along here or grab a runnable notebook version of this post on Colab.

2018 Year in Review

For the past few years I’ve been summing up my yearly highlights in a blog post. It doesn’t matter if anyone reads these posts—it’s nice to have these to be able to look back on the big things that happened in my life each year. So without further ado, here’s an overview of the big things that happened in my life in 2018, from Running, to Reading, Learning Work, and Health, finally looking at how I did on my 2018 goals and setting 2019 goals.

Reading Notes: Mindset: The New Psychology of Success

This book is about two ways of thinking: the fixed mindset and the growth mindset. In the fixed mindset you’re a finished product. Expending any extra effort is unthinkable because supposedly you’re already perfect. Then there’s the growth mindset, which tells us the only way you learn is from mistakes, talent doesn’t get you very far, and the people who succeed are the ones who work the hardest.


你好!学习中文的时候,我发现了有的单词不可能在词典中找到。 以下是这些单词。 叽叽歪歪 词典也,谷歌翻译也没有翻译。 在网上搜索以后,我觉得叽叽歪歪用来形容话很多的人。我觉得叽叽歪歪是象声词。 半袖 我的词典有「长袖」和「短袖」但是它没有「半袖」(”half-sleeve shirt”)。 我在中文课学了这个单词。 蓝领,白领,金领 英文也有蓝领(”blue collar”)和白领(”white collar”), 但是英文也应该有金领(”gold collar”)。VP还有CEO是金领的人。 白白胖胖 这个可笑的单词-你可能会形容一个宝宝“白白胖胖”。 谢谢阅读我的博客! 杰夫

How to Solve Every Software Engineering Interview Question

The Googleplex at dusk This post unfortunately does not contain a secret skeleton key that will unlock every tricky Software Engineering interview question. What’s below is a framework that you can apply to every interview question that will set you up for success every time. Software engineering interviews are not primarily about seeing if you can pull the #1 most perfect solution to a problem out of your hat.

Reading Notes: The Manager's Path

I can’t recommend The Manager’s Path by Camille Fournier highly enough for Software Engineers. I’m not a tech lead, however I found this book super useful for understanding the structure of technical organizations. It contains many gems that I want to write on sticky notes and post above my desk at work. Like this: Especially as you become more senior, remember that your manager expects you to bring solutions, not problems.

More Similar Mandarin Words

大家好,今天我要写一下更多相似的中文话。我的上次的blog post是英文写的 Similar Mandarin Words。下面是更同类的单词我遇到了在学中文。 “去” 和 “走” 都可以用去某处。“走”的意思是physically walk somewhere。去是more general。 “方才” 和 “刚才” 在词典方才和刚才都有同的意思。但是没有人说方才。人人用刚才。 “很有意思” 和 “很有趣” 都是同的意思。很有意思还有可能用sarcastically。 “见到”,“看到”, 或者 “看”,那个用? 看只是to see的意思。见到是看某人的意思。看到的意思是to notice。 也可以是看某人的意思但是 再次谢谢Elva给教学我中文很好。


私は高校生の時に車の興味すごいあった。特に日本の車。私の最初の車はマツダだった。日本の車の雑誌よく読んだ。 大学入学の時に日本語初年度クラスに入りました。大学の日本語クラスの方が難しかった。 三年生に日本語に飛んで関西外国語大学で留学しました。多く日本人大学生友達作った。当初ホストファミリーと住んだけど暫くしてセミナーハウスに引っ越ししました。関西外大の先生のおかげて日本語改善出来ました。 大学生四年生に一ヶ月東京広告会社のインターンシップの機会がありました。2012一月に日本また行きました。インターンシップでIntelのCM作ることを助けました。会社員のおかげですごい楽しかった経験だった。 大学卒業したら日本語の授業おわり。しかし、すごいきれいな、頭がいい女性を合いました。彼女は日本で育ちなかったけど彼女の日本語がペラペラです。私たちが両方とも大学で日本語勉強して、日本でもインターンシップしました。 これまで私たちが毎日少しなくとも日本語お互いに練習します。今年私たちが中国語を学び始めたいと、私の基本的な日本語の知識がすごい便利しています。 私が間違えたら、教えたら嬉しいです。ありがとうございます。

Reasons to Try Trail Running

No car exhaust fumes. Works out different parts of your legs and core that wouldn’t otherwise be exercised on asphalt. See wildlife. Visit places and see sights where roads don’t go. Races are more intimate and less anonymous. You make friends. Strangers encourage you along the trail. You encourage strangers.

It's OK to Make Mistakes in Coding Interviews

Imagine you’re an interviewer in a software engineering interview. The interviewee writes a method and it’s completely wrong. They go on to implement other parts of the problem, then later realize there’s a bug and come back and fix the original method. One thing that isn’t super clear for both interview candidates and interviewers is how to treat mistakes like this. The candidate definitely made a mistake. But their final implementation is correct.

Doing Cryptography in Tensorflow

After building a system with TensorFlow in Autumn 2017 and taking a course on Cryptography in Winter 2018, I saw some interesting parallels. TensorFlow is Machine Learning framework but under the hood it’s a general platform for doing computations in the structure of a graph. Cryptographic algorithms are frequently structured as the manipulation of vectors or matrices in the structure of a graph. I put together a Python notebook to explore this interesting relationship.

Some Similar Mandarin Words

This year I’m trying to start learning Mandarin Chinese. Here are some confusingly similar words I’ve come across. 认识 and 知道 The difference is between knowing a person, 认识 (rènshí) and knowing a fact, 知道 (zhīdào). 你认识她妈? 你知道我很酷吗? nǐ rènshí tā mā nǐ zhīdào wǒ hěn kù mā Do you know her? Do you know I'm cool? 正在 and 现在 Both roughly mean “now” but 正在 (zhèngzài) means currently or in general and 现在 (xiànzài) means literally right at this moment.

China Camp Trail Race Report: Things I Wish I Had Known

Yesterday I ran Inside Trail’s China Camp Trail Run, my first trail half. The course was good! The temperature was in the 80s but the course offered lots of shade. It was mostly single track trails with a few friendly mountain biker sightings. 1.5 miles into the race there was a nice steep 500ft climb. As a beginner trail runner I want to share with you a few tips that I wish I had heard before the race.

Understanding the Security of Cryptographic Hash Functions

Hash functions are an extremely versatile tool that you can find nearly everywhere in software engineering. Bitcoin mining is done by repeatedly computing SHA256 hashes. git stores files internally using the SHA-1 hash of the content as the filename (content-based addressing). When you download an app, your phone verifies that the app you’re about to run is the app you intended to download by computing a checksum (a hash of the entire app) and comparing it to one provided by the app store.

Quantum-resistant crypto, Elliptic Curves, and other learnings

This Winter quarter I took Stanford CS255: Introduction to Cryptography. It was a super challenging and enriching course and I learned a ton about the mathematics and algorithms behind the cryptography we depend on every day. Here are some memorable high-level takeaways from the course. 1. Don’t implement crypto yourself Cryptography primitives like AES are extremely powerful and extremely difficult to do correctly. Use a high-level API to ensure you’re doing things right.

New Blog, Who Dis?

I updated the design of my blog and moved it from to The site is still available, but I’ll be moving over content shortly and setting up a redirect.

How to Export Evaluation Results in Tensorflow

2019 update: just a heads up, this post is about TensorFlow 1.x. In TensorFlow if you’re using a tf.estimator model, for instance tf.estimator.DNNLinearCombinedClassifier, and as part of your automated training infrastructure you want to save the evaluation results as a JSON file, it’s not super straightforward, so here’s how to do it. Let’s say you define your EvalSpec like this: eval_spec = tf.estimator.EvalSpec(eval_input_fn, steps=hparams.eval_steps, exporters=[exporter], name='eval') You’ll need to write a new exporter class that will take the eval_result from your evaluation step and save it to a file using the GFile API.

Goodbye 2017, Hello 2018

Hi friends, here’s a quick overview of what I was up to this year. The most important thing that happened this year On a sunny day in August 2017, literally the smartest and most beautiful person I know and I embarked on a beautiful trail run on Mt. Tamalpais in Marin that ended on top of a mountain. Once we got to the summit, I asked her to marry me.

Example: Save and Load a TensorFlow Model

I wrote a quick how-to on Kaggle demonstrating how to save and load a model in TensorFlow.

Chrome Security Architecture

While in Tokyo for BlinkOn8, a gathering for Blink and Chromium contributors, I gave a talk at a coding school about the security architecture of Chromium. Here are the slides. I’m far from an authority when it comes to security or specifically security in Chrome, but I’m really interested in it and I hope this deck has some information you find interesting as well.

2016 Year in Review

2016 turned out to be a pretty crappy year, but it wasn’t all terrible. I made some good progress on my personal goals, so there’s that. Here’s a review of my 2016. If this sort of post strikes you as excessive navel gazing, that’s because it is — therefore I urge you to stop reading right now. Work The theme for this year of my life is probably “insane amounts of learning.

Gender Bias in Tech Media

Where Web Payments are Going

I gave a talk at the SF Payments Engineers meetup about Web Payments. Here’s the blog-ified version of that talk. Check out the slides from my talk here. Mobile checkouts are a terrible experience for customers. Both consumers and merchants are both feeling the pain. Mobile checkouts convert about 66% worse than desktop checkouts. A slide from the PaymentRequest presentation at Google I/O 2016. Part of the problem is that every company needs to build their own credit card form.

You are an engineering manager whether you realize it or not

Over the past few months I’ve mentioned to friends that I want to learn engineering leadership skills. Each time the reaction is: “you want to get into management??” That’s not how I see it. As engineers we hold the lone wolf in high regard, the hoodie-wearing coder hacking away in the corner at a genius project. But large projects that deliver a ton of value are made by teams of engineers, not lone wolves.

How to be an Asshole

Do something rude. Make sure to realize that what you did was a huge infraction. Unforgivable. Your friends or coworkers will always remember that thing you did and your character is now permanently besmirched. Don’t make an effort to apologize or clean up the damage you caused, because your friends will no longer accept you. Seeing your friends reminds you of the damage you caused. Distance yourself further from these people.

Jeff's 2015 in 5 Themes

Here are the 5 most defining themes of my 2015, in no particular order. 1. Scapula I fractured my scapula (shoulder blade on my right side) on December 24, 2014 while skateboarding with my sister. I spent most of January 2015 resting and recovering. Part of that meant starting physical therapy. PT was such a good influence on not just my scapula, but other parts of my life, that I consider breaking my scapula a highly net positive life event.

Breaking the Cycle

I’ve always been interested in running and looked up to friends who’ve trained for marathons or go running all the time. Running is great because it’s really easy to fit into a busy schedule and it leads me to explore new parts of my city (or better yet, a city I’m visiting). Throughout my life, however, I haven’t been able to run much due to an ongoing series of injuries. In Middle School I absconded from the swim team for a semester to join the track team, but I didn’t end up running much due to excessive heel pain (maybe I was growing too fast).

Unforseen Perks of Pair Programming

As someone who had never pair programmed before, it was exciting to get thrown into the deep end during my first week at Braintree where engineers pair nearly 100% of the time. The relative merits of pair programming have already been spoken about at length.[1][2] This post is not an attempt to argue one way or another. Whether it works for any organization is probably too context-dependent for any axioms I could lay down.

Intro to Angular.js Talk

On April 24 I gave a talk, Introduction to Angular.js, to the SF HTML5 Live Code meetup group. Here’s the screencast:

JavaScript's Mutative vs. Non-Mutative Array Methods

This is an issue that has endlessly tripped me up in JavaScript and I hope this post will help clarify things a bit and hopefully discover a pattern one can use to discern between mutative and non-mutative array methods. First, let me define what I mean when I say mutative: // If a method is mutative, that means it changes the original array. var foo = [1, 2, 3]; foo.

Pechakucha Waterville Talk

Here’s the talk I gave at Pechakucha Waterville my senior year at Colby College. I talk about my filmmaking and quantified-self pursuits during my time at Colby.