Build a Sentence Generator Markov Chain 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.

Book Review: 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.

Book Review: 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

A shorter version of this post was initially published on April 1, 2018. This is an expanded and rewritten version. A hash function is a function (in both the math and programming sense) that is “one way” – meaning given the output $y$, it’s near impossible to find the input $x$. Hash functions are extremely versatile and are found in all parts of software engineering. They’re how a a Bitcoin miner tries to guess the next block in a blockchain.

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

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.

[Medium] Goodbye 2017, Hello 2018 »

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.

[Medium] 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.

[Medium] How to be an Asshole »

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.

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.