<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>jeffcarp</title>
    <link>/</link>
    <description>Recent content on jeffcarp</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 23 Feb 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>A Debugging Journey into XLA, TPUs, and JAX</title>
      <link>/posts/2026/debugging-xla-tpus-jax/</link>
      <pubDate>Mon, 23 Feb 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/debugging-xla-tpus-jax/</guid>
      <description>&lt;p&gt;I published an account of an interesting* &lt;a href=&#34;https://jeffcarp.substack.com/p/a-debugging-journey-into-xla-tpus&#34;&gt;yak shaving&#xA;journey&lt;/a&gt; I&#xA;went on to debug a custom Pallas kernel on TPU. I&amp;rsquo;ll probably inline the&#xA;content here at some point.&lt;/p&gt;&#xA;&lt;p&gt;*Maybe to me and two other people on Earth&lt;/p&gt;</description>
    </item>
    <item>
      <title>Helpful Mindset Shifts for GPU Users Looking at TPUs</title>
      <link>/posts/2026/tpus-for-gpu-users/</link>
      <pubDate>Thu, 29 Jan 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/tpus-for-gpu-users/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;Disclaimer: The views and opinions expressed in this post are my own and do&#xA;not necessarily reflect the official policy or position of my employer.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As someone who&amp;rsquo;s worked with TPUs for a while, I&amp;rsquo;ve seen a common pattern in&#xA;people coming from the GPU world: they&amp;rsquo;ll take a look at a TPU chip&amp;rsquo;s specs,&#xA;then look at a comparable GPU, and see numbers for the GPU chip that are&#xA;obviously higher and scratch their head. Let&amp;rsquo;s look at TPU v5p (the&#xA;training-optimized chip released in 2023) compared to the Nvidia H200 (the&#xA;flagship AI GPU also released in 2023):&lt;/p&gt;</description>
    </item>
    <item>
      <title>Thoughts on Helix</title>
      <link>/posts/2026/helix/</link>
      <pubDate>Mon, 12 Jan 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/helix/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;/images/helix.jpeg&#34; alt=&#34;Friendship ended with vim, now Helix is my best friend&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve been a die-hard vim user for 12 years. But recently, inspired by posts&#xA;from &lt;a href=&#34;https://jvns.ca/blog/2025/10/10/notes-on-switching-to-helix-from-vim/&#34;&gt;Julia&#xA;Evans&lt;/a&gt;&#xA;and &lt;a href=&#34;https://felix-knorr.net/posts/2025-03-16-helix-review.html&#34;&gt;Felix Knorr&lt;/a&gt;,&#xA;I have been trying out &lt;a href=&#34;https://helix-editor.com/&#34;&gt;Helix&lt;/a&gt;&amp;ndash;a relatively new&#xA;terminal-based editor written in Rust&amp;ndash;and I&amp;rsquo;ve been pleasantly&#xA;surprised by the experience.&lt;/p&gt;&#xA;&lt;h2 id=&#34;things-i-like&#34;&gt;Things I like&lt;/h2&gt;&#xA;&lt;p&gt;It&amp;rsquo;s snappy! Even though some of the command flows have changed, I can still get&#xA;around the editor using my old vim muscle memory.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Initial Thoughts on Obsidian</title>
      <link>/posts/2025/obsidian/</link>
      <pubDate>Sun, 21 Dec 2025 00:00:00 +0000</pubDate>
      <guid>/posts/2025/obsidian/</guid>
      <description>&lt;p&gt;Over the years I’ve used a variety of different note taking apps and systems:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2008: During college I took mainly handwritten notes. I used &lt;strong&gt;Apple Notes&lt;/strong&gt; for casual snippets&lt;/li&gt;&#xA;&lt;li&gt;2012: Mostly kept &lt;strong&gt;Markdown&lt;/strong&gt; notes in a directory&lt;/li&gt;&#xA;&lt;li&gt;2016: Switched from iOS to Android and used &lt;strong&gt;Google Keep&lt;/strong&gt; for notes&lt;/li&gt;&#xA;&lt;li&gt;2020: Moved to &lt;strong&gt;Notion&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;2022-present: I’ve been using &lt;strong&gt;Apple Notes&lt;/strong&gt; as my primary note taking platform.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This year, based on a tip from a coworker, I started checking out&#xA;&lt;a href=&#34;https://obsidian.md/&#34;&gt;Obsidian&lt;/a&gt; and trialing it for taking notes, writing, and&#xA;planning various things. I&amp;rsquo;ve been enjoying it so far &amp;ndash; it feels like building&#xA;my own personal Wikipedia. Here are some additional thoughts.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Notes from Adaline Applied at AGI House</title>
      <link>/posts/2025/agi-house-notes/</link>
      <pubDate>Wed, 11 Jun 2025 00:00:00 +0000</pubDate>
      <guid>/posts/2025/agi-house-notes/</guid>
      <description>&lt;p&gt;Last week I attended an AI product summit at the beautiful AGI House on the&#xA;peninsula. It was a fun day getting exposed to what&amp;rsquo;s going on the frontier of&#xA;product and AI. Here are my semi-structured notes.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;/images/2025/IMG_5190.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;/images/2025/IMG_5192.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The thorniest issue in tool use is identity and authentication&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Authentication bugs are much worse with agents because they can move&#xA;faster (e.g. in 15 minutes an agent can exfiltrate a lot more data than a&#xA;human).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Memory for LLMS will become more critical. MCP-based memory will enable&#xA;portability across providers.&lt;/li&gt;&#xA;&lt;li&gt;Tool descriptions are important, treat them like system prompts. An example&#xA;of a great tool description is &lt;a href=&#34;https://github.com/modelcontextprotocol/servers/tree/main/src/sequentialthinking&#34;&gt;sequential&#xA;thinking&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Current models fall apart above 5 loaded tools&lt;/li&gt;&#xA;&lt;li&gt;Current pattern is to delegate tasks to a sub-agent that’s very well tested&#xA;against the specific inputs/outputs&lt;/li&gt;&#xA;&lt;li&gt;MoE points to further specialization in agent space&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;I&amp;rsquo;d rather have an agent that does one thing very well.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;Tiny teams&amp;rdquo;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Can you have super leverage by harnessing a fleet of agents?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Anthropic&amp;rsquo;s research into how long can a model complete a task correctly?&#xA;Currently O(mins) - next step O(10s of mins)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Proactive agents&lt;/strong&gt; (I thought this was super compelling)&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Background thread monitoring your life, chimes in when it can be useful.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;There are two types of challenges in AI product right now: ones that will&#xA;become solved as ai gets smarter, and those that will stay hard&lt;/li&gt;&#xA;&lt;li&gt;Meme: every tool came from the abuse of context&lt;/li&gt;&#xA;&lt;li&gt;Different software prioritizes different things, like being able to iterate&#xA;quickly, or better reasoning around the whole system&lt;/li&gt;&#xA;&lt;li&gt;Focus on where the handoff points are between humans and AI&lt;/li&gt;&#xA;&lt;li&gt;OpenAI is about to launch a platform with value exchange, same as FB did with&#xA;their dev platform, which they opened up then two years later rolled back and&#xA;slurped up the popular use cases into their platform - Brian Balfour&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The game is to join it, get the distribution, then get off it and take&#xA;your users with you ASAP&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Brand is associated with a person at the company having an opinion in public in a specific space&#xA;&lt;ul&gt;&#xA;&lt;li&gt;So: be out there and be visible in voicing your opinions as a thought leader and maybe iconoclast in a space&lt;/li&gt;&#xA;&lt;li&gt;It helps customers narrow down if their personality matches the brand&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Communication is lossy - holding the entire product in one persons head is super valuable&lt;/li&gt;&#xA;&lt;li&gt;User complaints don&amp;rsquo;t necessarily mean they&amp;rsquo;re switching&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Focus on what is the users &amp;ldquo;hell yes&amp;rdquo; case study&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;VCs are starting to focus on &amp;ldquo;quality of revenue&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;You can build a moat with your good taste&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Being opinionated is a plus for founders&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;cool-tools-mentioned&#34;&gt;Cool tools mentioned&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://opentools.com&#34;&gt;https://opentools.com&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://modelcontextprotocol.io/&#34;&gt;https://modelcontextprotocol.io/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.ragie.ai/&#34;&gt;https://www.ragie.ai/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://poe.com/&#34;&gt;Poe&lt;/a&gt; for &amp;lsquo;subscription fatigue&amp;rsquo; :)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thesephist.com/posts/tools/&#34;&gt;https://thesephist.com/posts/tools/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://corecursive.com/024-software-as-a-reflection-of-values-with-bryan-cantrill/&#34;&gt;https://corecursive.com/024-software-as-a-reflection-of-values-with-bryan-cantrill/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.granola.ai&#34;&gt;https://www.granola.ai&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://decagon.ai/product/overview&#34;&gt;https://decagon.ai/product/overview&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Best Articles of 2025</title>
      <link>/posts/2025/best-articles/</link>
      <pubDate>Fri, 25 Apr 2025 00:00:00 +0000</pubDate>
      <guid>/posts/2025/best-articles/</guid>
      <description>&lt;p&gt;This is an ongoing list of the best articles I’ve read this year.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://irhum.github.io/blog/pjit/&#34;&gt;Tensor Parallelism with jax.pjit&lt;/a&gt; - a super intuitive explanation of tensor parallelism&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://nlp.seas.harvard.edu/annotated-transformer/&#34;&gt;The Annotated Transformer&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://metaworld.me/blog/public/Attention-From-First-Principles&#34;&gt;Attention From First Principles&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://haseebq.com/my-ten-rules-for-negotiating-a-job-offer/&#34;&gt;Ten Rules for Negotiating a Job Offer&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://yewjin.substack.com/p/note-to-my-present-self&#34;&gt;Note to my present self&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=WIP_hLaLnLo&#34;&gt;Video: I&amp;rsquo;m Politely Begging You to Write Nonfiction&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.atvbt.com/21-facts-about-throwing-good-parties/&#34;&gt;21 Facts About Throwing Good Parties&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.tinytpu.com/&#34;&gt;Tiny TPU&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://kendraalbert.com/2025/07/21/lawyer-letters-without-lawyers.html&#34;&gt;Heavyweight: An Art Project About Lawyer Vibes&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>How to Fake Multiple CPUs in JAX</title>
      <link>/posts/2025/fake-multiple-cpus-jax/</link>
      <pubDate>Thu, 13 Mar 2025 00:00:00 +0000</pubDate>
      <guid>/posts/2025/fake-multiple-cpus-jax/</guid>
      <description>&lt;p&gt;Here&amp;rsquo;s how to emulate multiple CPUs when running JAX. This makes it easy to&#xA;test multi-TPU/GPU code without actually needing the accelerators.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; os&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;os&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;environ[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;XLA_FLAGS&amp;#39;&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    os&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;environ&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;XLA_FLAGS&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; --xla_force_host_platform_device_count=8&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; jax&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;jax&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;devices()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[CpuDevice(id=0),&#xA; CpuDevice(id=1),&#xA; CpuDevice(id=2),&#xA; CpuDevice(id=3),&#xA; CpuDevice(id=4),&#xA; CpuDevice(id=5),&#xA; CpuDevice(id=6),&#xA; CpuDevice(id=7)]&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Reflections on Becoming a Manager</title>
      <link>/posts/2025/reflections-on-management/</link>
      <pubDate>Fri, 31 Jan 2025 00:00:00 +0000</pubDate>
      <guid>/posts/2025/reflections-on-management/</guid>
      <description>&lt;p&gt;Last year after &lt;a href=&#34;/posts/2024/joining-google-again/&#34;&gt;rejoining Google&lt;/a&gt;, I became&#xA;a manager for the first time. As a long-time IC, I had some preconceived&#xA;beliefs about what the job would be like, many of which were wrong.&lt;/p&gt;&#xA;&lt;p&gt;During this transition a mentor pointed out one chapter from &lt;a href=&#34;https://www.goodreads.com/book/show/40086702-nine-lies-about-work&#34;&gt;Nine Lies about&#xA;Work&lt;/a&gt; about&#xA;how humans are terrible at objectively rating other’s behavior. The result is&#xA;that your entire work life is filtered through the lens of your manager’s point&#xA;of view. I think this is something anyone with a boss has experienced: a great&#xA;one can make your life amazing, and a bad or nonexistent one can make it a&#xA;living nightmare. The saying “you don’t leave a job, you leave a manager” has&#xA;rung especially true in my journey.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Doing Post-Quantum Cryptography in JAX</title>
      <link>/posts/2025/post-quantum-cryptography-jax/</link>
      <pubDate>Sun, 05 Jan 2025 00:00:00 +0000</pubDate>
      <guid>/posts/2025/post-quantum-cryptography-jax/</guid>
      <description>&lt;p&gt;In 2018 while studying ML and&#xA;&lt;a href=&#34;/posts/2018/cs255-cryptography&#34;&gt;cryptography&lt;/a&gt;&#xA;around the same time, I realized that many cryptographic algorithms can be&#xA;expressed as computation graphs, the same ones supported by major ML&#xA;frameworks, which led to a completely frivolous attempt to &lt;a href=&#34;/posts/2018/cryptography-in-tensorflow/&#34;&gt;implement&#xA;cryptographic algorithms in&#xA;TensorFlow&lt;/a&gt;, just to see if it would&#xA;work.&lt;/p&gt;&#xA;&lt;p&gt;The world has changed a lot since 2018. JAX is growing in popularity as an ML&#xA;framework, and in the cryptography space, post-quantum cryptography has gone&#xA;from a mostly theoretical threat to a &lt;a href=&#34;https://www.infoq.com/news/2024/12/google-willow-quantum-supremacy/&#34;&gt;slightly more real&#xA;one&lt;/a&gt;. So&#xA;continuing the motivation of the original post, I decided to look into&#xA;implementing a post-quantum cryptography algorithm in JAX.&lt;/p&gt;</description>
    </item>
    <item>
      <title>2024 Year in Review</title>
      <link>/posts/2024/year-in-review/</link>
      <pubDate>Wed, 25 Dec 2024 00:00:00 +0000</pubDate>
      <guid>/posts/2024/year-in-review/</guid>
      <description>&lt;p&gt;Keeping it short and sweet this year. Here are my highlights:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Welcomed a baby into the world!!!&lt;/li&gt;&#xA;&lt;li&gt;Recovered enough to run again&lt;/li&gt;&#xA;&lt;li&gt;Ran 138.5 miles&lt;/li&gt;&#xA;&lt;li&gt;Left Waymo and &lt;a href=&#34;/posts/2024/joining-google-again/&#34;&gt;Joined Google&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Became a manager&lt;/li&gt;&#xA;&lt;li&gt;Was mentioned in &lt;a href=&#34;https://techcrunch.com/2024/11/14/ai-pioneer-francois-chollet-leaves-google/#:~:text=Chollet%20said%20that%20Jeff%20Carpenter%2C%20a%20machine%20learning%20engineer%20at%20Google%2C%20will%20be%20taking%20over%20as%20team%20lead%20for%20Keras.&#34;&gt;TechCrunch&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Went to Hawaii for our babymoon&lt;/li&gt;&#xA;&lt;li&gt;Went to Taiwan and China to visit in-laws and got to pick tea on a tea farm&lt;/li&gt;&#xA;&lt;li&gt;Read &lt;a href=&#34;https://www.goodreads.com/user_challenges/52243484&#34;&gt;21 books&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Took 104 Waymos&lt;/li&gt;&#xA;&lt;li&gt;Drank 45 drinks (exactly the same as last year)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;img src=&#34;IMG_0356.jpeg&#34; alt=&#34;&#34;&gt;&#xA;&lt;img src=&#34;IMG_1834.jpeg&#34; alt=&#34;&#34;&gt;&#xA;&lt;img src=&#34;IMG_2747.jpeg&#34; alt=&#34;&#34;&gt;&#xA;&lt;img src=&#34;IMG_2758.JPG&#34; alt=&#34;&#34;&gt;&#xA;&lt;img src=&#34;IMG_2897.JPG&#34; alt=&#34;&#34;&gt;&#xA;&lt;img src=&#34;IMG_9817.jpeg&#34; alt=&#34;&#34;&gt;&#xA;&lt;img src=&#34;pudding.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>How I’m Learning JAX</title>
      <link>/posts/2024/learning-jax/</link>
      <pubDate>Fri, 13 Dec 2024 00:00:00 +0000</pubDate>
      <guid>/posts/2024/learning-jax/</guid>
      <description>&lt;p&gt;Recently I’ve been trying to learn more about JAX, the next-gen ML framework&#xA;from DeepMind. These are the resources I&amp;rsquo;ve found most helpful so far.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The &lt;a href=&#34;https://jax.readthedocs.io/en/latest/user_guides.html#user-guides&#34;&gt;JAX docs&lt;/a&gt;, which are excellent&lt;/li&gt;&#xA;&lt;li&gt;Patrick Kidger’s &lt;a href=&#34;https://kidger.site/thoughts/torch2jax/&#34;&gt;Learning JAX as a PyTorch developer&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;JAX AI Stack &lt;a href=&#34;https://docs.jaxstack.ai/en/latest/tutorials.html&#34;&gt;tutorials&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;The book &lt;a href=&#34;https://www.manning.com/books/deep-learning-with-jax&#34;&gt;JAX in Action&lt;/a&gt;, along with accompanying &lt;a href=&#34;https://github.com/che-shr-cat/JAX-in-Action&#34;&gt;Python notebooks&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Codebases: &lt;a href=&#34;https://github.com/google-deepmind/gemma&#34;&gt;Gemma&lt;/a&gt;, &lt;a href=&#34;https://github.com/AI-Hypercomputer/maxtext/&#34;&gt;MaxText&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://jax-ml.github.io/scaling-book/&#34;&gt;How to Scale Your Model&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If you know any more good pointers please let me know.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Best Posts I Read this Year</title>
      <link>/posts/2024/best-reading-this-year/</link>
      <pubDate>Mon, 02 Dec 2024 00:00:00 +0000</pubDate>
      <guid>/posts/2024/best-reading-this-year/</guid>
      <description>&lt;p&gt;Here’s a list of articles from this year that resonated with me.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://clairelevans.substack.com/p/brighter-than-a-cloud&#34;&gt;Brighter Than a Cloud&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://matt-rickard.com/five-principles-from-renaissance-technologies&#34;&gt;Five Principles from Renaissance Technologies&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://matt.sh/panic-at-the-job-market&#34;&gt;Panic! at the Job Market&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://neel04.github.io/my-website/blog/pytorch_rant/&#34;&gt;PyTorch is dead. Long live JAX.&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mohitdagarwal.substack.com/p/from-dominance-to-dilemma-nvidia&#34;&gt;The Future of Compute: NVIDIA&amp;rsquo;s Crown is Slipping&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://lanparty.house&#34;&gt;lanparty.house&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Trail Running Bucket List</title>
      <link>/posts/2024/running-bucket-list/</link>
      <pubDate>Sun, 01 Dec 2024 00:00:00 +0000</pubDate>
      <guid>/posts/2024/running-bucket-list/</guid>
      <description>&lt;p&gt;A while back I put together a personal &amp;ldquo;top 10&amp;rdquo; list of trail runs I want to&#xA;complete in my lifetime. In terms of running goals, I find myself drawn less to&#xA;the big races and time goals, and more to the thing that makes me want to get&#xA;out the door and run in the first place: running in beautiful places and taking&#xA;on technical and logistical challenges. This is my list as it currently stands.&#xA;I plan to keep this updated and write more about my journey here.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Favorite Technical Books</title>
      <link>/posts/2024/favorite-technical-books/</link>
      <pubDate>Fri, 29 Nov 2024 00:00:00 +0000</pubDate>
      <guid>/posts/2024/favorite-technical-books/</guid>
      <description>&lt;p&gt;Here&amp;rsquo;s a quick list of my favorite software engineering books I&amp;rsquo;ve read over&#xA;the years. I plan to keep this list updated as I discover (or am recommended,&#xA;hint hint) more.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/984428.Crypto&#34;&gt;Crypto: How the Code Rebels Beat the Government—Saving Privacy in the Digital Age&lt;/a&gt;, Levy&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/7602360-cryptography-engineering&#34;&gt;Cryptography Engineering: Design Principles and Practical Applications&lt;/a&gt;, Ferguson, Schneier, Kohno&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/23463279-designing-data-intensive-applications&#34;&gt;Designing Data-Intensive Applications&lt;/a&gt;, Kleppmann&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/61148808-designing-machine-learning-systems&#34;&gt;Designing Machine Learning Systems&lt;/a&gt;, Huyen&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/56344415-reinforcement-learning&#34;&gt;Reinforcement Learning&lt;/a&gt;, Winder&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/32899495-hands-on-machine-learning-with-scikit-learn-and-tensorflow&#34;&gt;Hands-On Machine Learning with Scikit-Learn and TensorFlow&lt;/a&gt;, Geron&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/27968891-site-reliability-engineering&#34;&gt;Site Reliability Engineering&lt;/a&gt;, Beyer, Jones, Petoff, Murphy&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/8474434-linux-kernel-development&#34;&gt;Linux Kernel Development&lt;/a&gt;, Love&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Reflecting on this Blog</title>
      <link>/posts/2024/tone-and-content/</link>
      <pubDate>Wed, 20 Nov 2024 00:00:00 +0000</pubDate>
      <guid>/posts/2024/tone-and-content/</guid>
      <description>&lt;p&gt;I wanted to take a second to reflect on the tone and content of this blog, which overall I’m not super satisfied with. This blog has primarily served as a place where I put mostly &lt;a href=&#34;/categories/software-engineering/&#34;&gt;software engineering&lt;/a&gt; and &lt;a href=&#34;/categories/running/&#34;&gt;running&lt;/a&gt; content over the years. However, rarely do I compose a post for this blog that I feel is “good enough” to be publishing here.&lt;/p&gt;&#xA;&lt;p&gt;This goes beyond perfectionism — I think seeing amazing content every day on aggregation websites like Reddit and “the orange website” creates this implicit feeling that every post I produce needs to be well-written, technically impressive, and cast me in a good light. For better or worse, having my name as the title of this blog makes me feel like every post has a material effect on my (vomits in mouth a little bit) personal brand.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Quickly saying “no” to ideas is harmful</title>
      <link>/posts/2024/quickly-saying-no/</link>
      <pubDate>Mon, 23 Sep 2024 00:00:00 +0000</pubDate>
      <guid>/posts/2024/quickly-saying-no/</guid>
      <description>&lt;p&gt;I’ve observed during my software engineering career the different reactions&#xA;senior engineers have when new ideas are brought up.&lt;/p&gt;&#xA;&lt;p&gt;Sometimes when an idea is presented, usually by a junior engineer, a senior&#xA;engineer will chime in very quickly to emphatically describe why it won’t work.&#xA;I think this is very harmful to team culture for a couple reasons.&lt;/p&gt;&#xA;&lt;p&gt;First, it reinforces the bias toward authority for senior engineers. When any&#xA;engineer brings up an idea, even if it’s overall a bad idea, there is always a&#xA;nugget of truth &amp;ndash; they observed a real issue and offered a real solution.&#xA;Immediately shooting down ideas discards this truth.&lt;/p&gt;</description>
    </item>
    <item>
      <title>I Joined Google (again)</title>
      <link>/posts/2024/joining-google-again/</link>
      <pubDate>Thu, 18 Jul 2024 00:00:00 +0000</pubDate>
      <guid>/posts/2024/joining-google-again/</guid>
      <description>&lt;figure&gt;&#xA;  &lt;amp-img&#xA;    alt=&#34;Joining Google in 2016 vs. 2024.&#34;&#xA;    src=&#34;/posts/2024/joining-google-again/then-vs-now.jpg&#34;&#xA;    width=&#34;800&#34;&#xA;    height=&#34;408&#34;&#xA;    class=&#34;&#34;&#xA;    lightbox&#xA;    layout=&#34;responsive&#34;&gt;&#xA;  &lt;/amp-img&gt;&#xA;  &lt;figcaption&gt;Joining Google in 2016 vs. 2024.&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;This Spring I joined Google for the second time. I’m working on core ML&#xA;infrastructure, specifically ML frameworks for Keras, JAX, and Gemini.&lt;/p&gt;&#xA;&lt;p&gt;Not everyone is aware that Waymo is a completely separate sister company to&#xA;Google. Going between the companies is an external hire in both directions.&lt;/p&gt;&#xA;&lt;p&gt;Since &lt;a href=&#34;/posts/2019/im-joining-waymo/&#34;&gt;joining Waymo&lt;/a&gt; four years ago, I worked&#xA;with a ton of excellent people on a lot of different aspects of ML infra,&#xA;including quantization-aware training, ML training frameworks, and global-scale&#xA;automation of TPU training and simulation pipelines. It was always super&#xA;rewarding walking around the streets of SF encountering a Waymo doing a&#xA;specific behavior and thinking to myself “I worked on that model!!” (at least&#xA;in very small part 🙂)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Engineering Management for the Rest of Us reading notes</title>
      <link>/posts/2024/engineering-management-for-the-rest-of-us/</link>
      <pubDate>Sat, 24 Feb 2024 00:00:00 +0000</pubDate>
      <guid>/posts/2024/engineering-management-for-the-rest-of-us/</guid>
      <description>&lt;p&gt;I really enjoyed &lt;a href=&#34;https://www.goodreads.com/book/show/58502800-engineering-management-for-the-rest-of-us&#34;&gt;this&#xA;book&lt;/a&gt;.&#xA;Here are some of the biggest takeaways for me.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;As a manager, your work is meetings.&lt;/strong&gt;&#xA;That means not protecting your calendar as much. People come before focus&#xA;blocks. Corollary: making sure you can perform at a high level in meetings;&#xA;meaning exercising in the morning or doing what it takes to make you the&#xA;happiest and best person in meetings.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;The importance of keeping a gratitude journal.&lt;/strong&gt;&#xA;Seeing the good in things makes you see the good in more things.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Deciding between a static and dynamic site</title>
      <link>/posts/2024/static-vs-dynamic/</link>
      <pubDate>Thu, 04 Jan 2024 00:00:00 +0000</pubDate>
      <guid>/posts/2024/static-vs-dynamic/</guid>
      <description>&lt;p&gt;Hi, I’m trying to blog more this year. Maybe not every day, but more&#xA;frequently.&lt;/p&gt;&#xA;&lt;p&gt;In &lt;a href=&#34;/posts/2023/file-formats-for-chinesedict/&#34;&gt;a recent post&lt;/a&gt; I mentioned I’ve&#xA;been working on a fast frontend for a Chinese-English dictionary. In the spirit&#xA;of &lt;a href=&#34;https://jvns.ca/blog/2021/05/24/blog-about-what-you-ve-struggled-with/&#34;&gt;&amp;ldquo;blog about what you&amp;rsquo;ve struggled&#xA;with&amp;rdquo;&lt;/a&gt;,&#xA;the biggest challenge I’m currently facing is choosing between designing the&#xA;site as front-end heavy or back-end heavy.&lt;/p&gt;&#xA;&lt;p&gt;I’ve written two initial versions of the site: one as a fully static website&#xA;and one as a fully backend app in Go. Despite the server-side version being&#xA;written in Go, I’m not super happy with the load time of the app. Even when the&#xA;server is warmed up, the initial document load time is 30-40ms, whereas the&#xA;static site is 10-20ms.&lt;/p&gt;</description>
    </item>
    <item>
      <title>2023 Year in Review</title>
      <link>/posts/2023/year-in-review/</link>
      <pubDate>Mon, 25 Dec 2023 00:00:00 +0000</pubDate>
      <guid>/posts/2023/year-in-review/</guid>
      <description>&lt;p&gt;Hi there, it’s time to reflect on what I was up to this year.&lt;/p&gt;&#xA;&lt;h2 id=&#34;running&#34;&gt;Running&lt;/h2&gt;&#xA;&lt;p&gt;I started 2023 thinking I had a long-term knee injury. Around Summertime I &lt;a href=&#34;https://jeffcarp.substack.com/p/the-1-year-running-injury&#34;&gt;made a breakthrough&lt;/a&gt; in discovering it wasn’t a knee issue but a toe issue. Since then I’ve been keeping the mileage low and trying to build a healthy base.&lt;/p&gt;&#xA;&lt;p&gt;In total I ran 361 miles this year, which is down from usual but I was very consistent in my training. I was super grateful to have the consistency and support from my running buddies at WeRunSF and Noe Run Club.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Considering File Formats for ChineseDict</title>
      <link>/posts/2023/file-formats-for-chinesedict/</link>
      <pubDate>Tue, 05 Dec 2023 00:00:00 +0000</pubDate>
      <guid>/posts/2023/file-formats-for-chinesedict/</guid>
      <description>&lt;p&gt;Recently I&amp;rsquo;ve been hacking on &lt;a href=&#34;https://chinesedict2.web.app/&#34;&gt;ChineseDict&lt;/a&gt;, a&#xA;fast web frontend to look up Chinese words. I started the project originally to&#xA;fulfill a specific use case: when practicing chatting with friends or watching&#xA;a video, I need search results in milliseconds, not seconds.&lt;/p&gt;&#xA;&lt;p&gt;The website uses the &lt;a href=&#34;https://cc-cedict.org/wiki/&#34;&gt;CC-EDICT&lt;/a&gt; dictionary to&#xA;power the results. I now want to expand each term with examples and extra data&#xA;in a way that&amp;rsquo;s easy to store on disk and update via git commit.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rules to Live By</title>
      <link>/posts/2023/rules-to-live-by/</link>
      <pubDate>Fri, 24 Nov 2023 00:00:00 +0000</pubDate>
      <guid>/posts/2023/rules-to-live-by/</guid>
      <description>&lt;figure&gt;&#xA;  &lt;img src=/images/cage-rules.jpg &gt;&#xA;  &lt;figcaption&gt;&#xA;    John Cage’s 10 rules for students and teachers&#xA;  &lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://kk.org/thetechnium/103-bits-of-advice-i-wish-i-had-known/&#34;&gt;Kevin Kelly - 103 Bits of Advice I Wish I Had Known&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://kk.org/thetechnium/68-bits-of-unsolicited-advice/&#34;&gt;Kevin Kelly - 68 Bits of Unsolicited Advice&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://druriley.com/100-rules-2020/&#34;&gt;Dru Riley - 100 Rules To Live By&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://radreads.co/43-life-lessons-at-age-43/&#34;&gt;Khe Hy - 43 life lessons at age 43&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/26796521-octaphilosophy&#34;&gt;Octaphilosophy: The Eight Elements of Restaurant André&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/tBxjacxRshE&#34;&gt;Thelonious Monk’s 25 Tips for Musicians&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.lesswrong.com/posts/7hFeMWC6Y5eaSixbD/100-tips-for-a-better-life&#34;&gt;Ideopunk - 100 Tips for a Better Life&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://russroberts.medium.com/my-twelve-rules-for-life-4041fb11a1b3&#34;&gt;Russ Roberts - My Twelve Rules for Life&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>2022 Year in Review</title>
      <link>/posts/2022/year-in-review/</link>
      <pubDate>Thu, 29 Dec 2022 00:00:00 +0000</pubDate>
      <guid>/posts/2022/year-in-review/</guid>
      <description>&lt;p&gt;Hi friends,&lt;/p&gt;&#xA;&lt;p&gt;Like &lt;a href=&#34;/posts/2022/2021-year-in-review/&#34;&gt;last year&lt;/a&gt;, here’s a brief overview of&#xA;what I got up to in 2022.&lt;/p&gt;&#xA;&lt;h2 id=&#34;running&#34;&gt;Running&lt;/h2&gt;&#xA;&lt;p&gt;Despite this being my biggest running year in terms of mileage (683mi), I&#xA;struggled with injuries pretty much the whole year, likely due to &lt;a href=&#34;/posts/2022/recent-running-lessons/&#34;&gt;too much&#xA;racing and not enough&#xA;training&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;My &amp;ldquo;goal race&amp;rdquo; for this year was running the Four Pass Loop, a 28mi loop with&#xA;9000ft of vert around the Maroon Bells in Colorado and rated the #1 trail run in&#xA;the country on &lt;a href=&#34;https://www.trailrunproject.com/trail/7001635/four-pass-loop&#34;&gt;Trail Run&#xA;Project&lt;/a&gt;. I made&#xA;it about halfway before turning around, due to running the Double Dipsea two&#xA;weeks before and not giving myself enough time to recover.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Recent Running Lessons</title>
      <link>/posts/2022/recent-running-lessons/</link>
      <pubDate>Tue, 13 Dec 2022 00:00:00 +0000</pubDate>
      <guid>/posts/2022/recent-running-lessons/</guid>
      <description>&lt;p&gt;&lt;strong&gt;When I have a running injury, it’s not always the right thing to completely stop running and wait for it to heal.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Sometimes it’s worse to stop running altogether, because while the injury is healing, all the surrounding muscles are getting weaker. This actually makes injury more likely when I return to running. My current strategy is to keep running as much as possible as long as the pain is less than 3/10.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Questions I Ask Companies in Interviews</title>
      <link>/posts/2022/questions-i-ask-companies-in-interviews/</link>
      <pubDate>Sun, 22 May 2022 00:00:00 +0000</pubDate>
      <guid>/posts/2022/questions-i-ask-companies-in-interviews/</guid>
      <description>&lt;p&gt;Inspired by Julia Evans’s post &lt;a href=&#34;https://jvns.ca/blog/2013/12/30/questions-im-asking-in-interviews/&#34;&gt;Questions I&amp;rsquo;m asking in&#xA;interviews&lt;/a&gt;&#xA;and Chip Huyen’s &lt;a href=&#34;https://huyenchip.com/ml-interviews-book/contents/2.3.2-questions-to-ask-your-interviewers.html&#34;&gt;Questions to ask your&#xA;interviewers&lt;/a&gt;&#xA;section from her ML Interviews book, here are the questions I ask in&#xA;interviews, targeting staff roles in ML infrastructure.&lt;/p&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;My general approach is:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Have 3-5 “primary” questions that cover the most important things.&lt;/li&gt;&#xA;&lt;li&gt;Have a backlog of 20 questions that I can fire off as necessary. I never want&#xA;to run out of questions or repeat a question in an interview.&lt;/li&gt;&#xA;&lt;li&gt;Only ask “&lt;em&gt;hard questions”&lt;/em&gt; after getting a job offer.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;primary-questions&#34;&gt;Primary Questions&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;What kind of scope and responsibility can I expect to have?&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;What are the biggest challenges you’re facing right now?&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;How does this team fit into the broader organization?&lt;/li&gt;&#xA;&lt;li&gt;How big is the team and how fast is it growing?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;backup-questions&#34;&gt;Backup Questions&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Recruiter-focused questions&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;What rubrics will I be evaluated on?&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;What kinds of questions should I be prepared for?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Team Alignment&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How fast are you growing and how is headcount allocated between teams?&lt;/li&gt;&#xA;&lt;li&gt;Who is competing for scope with your team (internal and external)?&lt;/li&gt;&#xA;&lt;li&gt;How many headcount do you have open right now?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Career&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;When does the career ladder split between IC and management? What does&#xA;that transition look like? How often do opportunities at that level come&#xA;about?&lt;/li&gt;&#xA;&lt;li&gt;How easy is it to change teams at the company if things don’t work out?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Enjoyment&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;What are the working hours like? When do most people work?&lt;/li&gt;&#xA;&lt;li&gt;What does your day look like?&lt;/li&gt;&#xA;&lt;li&gt;What do you like about working on this team? At this company?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Technology&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;What’s your tech stack like?&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Do you have an oncall rotation and what is it like?&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Do you standardize tech across teams?&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;What is your process for big projects? Do you write design docs? Do you&#xA;have design reviews?&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;How much tech debt do you have?&lt;/li&gt;&#xA;&lt;li&gt;How are tech teams organized? By technology or by product?&lt;/li&gt;&#xA;&lt;li&gt;What is the release cadence?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Leadership&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;What is your decision making process?&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;What are you looking for in employees and leaders?&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Who is the ultimate decision maker?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Kuli&#39;ou&#39;ou Ridge Loop Trail</title>
      <link>/posts/2022/kuliouou-ridge-trail/</link>
      <pubDate>Sat, 12 Mar 2022 00:00:00 +0000</pubDate>
      <guid>/posts/2022/kuliouou-ridge-trail/</guid>
      <description>&lt;figure&gt;&#xA;  &lt;amp-img&#xA;    alt=&#34;View from the second peak.&#34;&#xA;    src=&#34;/posts/2022/kuliouou-ridge-trail/IMG_03111.jpeg&#34;&#xA;    width=&#34;1765&#34;&#xA;    height=&#34;1765&#34;&#xA;    class=&#34;&#34;&#xA;    lightbox&#xA;    layout=&#34;responsive&#34;&gt;&#xA;  &lt;/amp-img&gt;&#xA;  &lt;figcaption&gt;View from the second peak.&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;While on vacation in Hawaii I was super pumped to get in a nice trail run. Here&amp;rsquo;s how it went.&lt;/p&gt;&#xA;&lt;h2 id=&#34;course&#34;&gt;Course&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt; &lt;/th&gt;&#xA;          &lt;th&gt; &lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Distance&lt;/td&gt;&#xA;          &lt;td&gt;5.3 miles&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Elevation gain&lt;/td&gt;&#xA;          &lt;td&gt;2326 ft&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Average grade&lt;/td&gt;&#xA;          &lt;td&gt;12%(!)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Duration&lt;/td&gt;&#xA;          &lt;td&gt;2:32:43&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Temperature&lt;/td&gt;&#xA;          &lt;td&gt;75F&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Humidity&lt;/td&gt;&#xA;          &lt;td&gt;87%&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Strava&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.strava.com/activities/6808950780&#34;&gt;Link&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;AllTrails&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.alltrails.com/trail/hawaii/oahu/kuliouou-ridge-loop-trail&#34;&gt;Link&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&#xA;&#xA;&#xA;&lt;figure&gt;&#xA;  &lt;amp-img&#xA;    alt=&#34;Viewed on Google Earth.&#34;&#xA;    src=&#34;/posts/2022/kuliouou-ridge-trail/google-earth.png&#34;&#xA;    width=&#34;3026&#34;&#xA;    height=&#34;1658&#34;&#xA;    class=&#34;&#34;&#xA;    lightbox&#xA;    layout=&#34;responsive&#34;&gt;&#xA;  &lt;/amp-img&gt;&#xA;  &lt;figcaption&gt;Viewed on Google Earth.&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;figure&gt;&#xA;  &lt;amp-img&#xA;    alt=&#34;Elevation profile.&#34;&#xA;    src=&#34;/posts/2022/kuliouou-ridge-trail/profile.png&#34;&#xA;    width=&#34;760&#34;&#xA;    height=&#34;360&#34;&#xA;    class=&#34;&#34;&#xA;    lightbox&#xA;    layout=&#34;responsive&#34;&gt;&#xA;  &lt;/amp-img&gt;&#xA;  &lt;figcaption&gt;Elevation profile.&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;h2 id=&#34;loadout&#34;&gt;Loadout&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Nutrition requirements&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Favorite Books of 2021</title>
      <link>/posts/2022/favorite-books-of-2021/</link>
      <pubDate>Sat, 01 Jan 2022 00:00:00 +0000</pubDate>
      <guid>/posts/2022/favorite-books-of-2021/</guid>
      <description>&lt;p&gt;Happy new year! Here are my 5 favorite books of 2021.&lt;/p&gt;&#xA;&lt;h2 id=&#34;empire-of-pain&#34;&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/43868109-empire-of-pain&#34;&gt;Empire of Pain&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;A sprawling, enthralling story of the opiate epidemic told through the lens of&#xA;multiple generations of the family that ushered it in. This book reminded me&#xA;of &lt;a href=&#34;https://www.goodreads.com/book/show/37976541-bad-blood&#34;&gt;Bad Blood&lt;/a&gt;, but&#xA;with far larger scope.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In his book Opium: A History, Martin Booth observes that when it comes to&#xA;products derived from the opium poppy, “history repeats itself.” During the&#xA;American Civil War, morphine was widely embraced as a salve for terrible&#xA;battlefield injuries, but it produced a generation of veterans who came home&#xA;after the war addicted to the drug.&lt;/p&gt;</description>
    </item>
    <item>
      <title>2021 Year in Review</title>
      <link>/posts/2021/year-in-review/</link>
      <pubDate>Sat, 25 Dec 2021 00:00:00 +0000</pubDate>
      <guid>/posts/2021/year-in-review/</guid>
      <description>&lt;p&gt;I wasn’t initially planning on writing a year in review blog post for 2021, but&#xA;I was recently reminded of how nice it is to have a &lt;a href=&#34;/categories/yearly-review/&#34;&gt;concise public record of&#xA;the things that were important to me&lt;/a&gt; for each year&#xA;(even if nobody other than me reads it). So here it goes!&lt;/p&gt;&#xA;&lt;h2 id=&#34;highlights&#34;&gt;Highlights&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Getting vaccinated!&lt;/li&gt;&#xA;&lt;li&gt;Going back out to restaurants and dining&lt;/li&gt;&#xA;&lt;li&gt;Attending weddings of my two of my best college friends&lt;/li&gt;&#xA;&lt;li&gt;First Waymo SF ride&lt;/li&gt;&#xA;&lt;li&gt;Traveling again&lt;/li&gt;&#xA;&lt;li&gt;Wednesday morning trail runs&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;img src=&#34;images/IMG_0832.jpg&#34; alt=&#34;Post-vaccination!&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Recruiter Autoreply Bot 2</title>
      <link>/posts/2021/recruiter-autoreply-bot-2/</link>
      <pubDate>Mon, 22 Nov 2021 00:00:00 +0000</pubDate>
      <guid>/posts/2021/recruiter-autoreply-bot-2/</guid>
      <description>&lt;p&gt;Let me state the obvious: recruiters aren’t actually sending most recruiter&#xA;emails. They automate it with software. However, the recipients of recruiter&#xA;emails must spend real human time either responding to or ignoring these&#xA;emails. Unfortunately just ignoring the emails triggers more followup emails&#xA;(they usually come in sets of 3). This adds up to a lot of wasted time.&lt;/p&gt;&#xA;&lt;h2 id=&#34;background&#34;&gt;&lt;strong&gt;Background&lt;/strong&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/posts/2019/recruiter-auto-reply-bot/&#34;&gt;Back in 2019&lt;/a&gt; I&#xA;created a bot that automatically responded to recruiters I tag with a certain&#xA;label in Gmail. The way the bot works is:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Things I Wish I Had Known About Earlier</title>
      <link>/posts/2021/things-i-wish-i-had-known-about-earlier/</link>
      <pubDate>Sat, 20 Nov 2021 21:02:53 -0800</pubDate>
      <guid>/posts/2021/things-i-wish-i-had-known-about-earlier/</guid>
      <description>&lt;h2 id=&#34;anki-and-spaced-repetition&#34;&gt;Anki and Spaced Repetition&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve adopted the &lt;a href=&#34;https://apps.ankiweb.net/&#34;&gt;Anki&lt;/a&gt; app to help learn new&#xA;vocabulary and retain various things I learn Currently my decks are:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;figure&gt;&#xA;  &lt;amp-img&#xA;    alt=&#34;My Anki decks&#34;&#xA;    src=&#34;/posts/2021/things-i-wish-i-had-known-about-earlier/IMG_2154.PNG&#34;&#xA;    width=&#34;1284&#34;&#xA;    height=&#34;1814&#34;&#xA;    class=&#34;&#34;&#xA;    lightbox&#xA;    layout=&#34;responsive&#34;&gt;&#xA;  &lt;/amp-img&gt;&#xA;  &lt;figcaption&gt;My Anki decks&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Spaced repetition flashcards are great. I would have done much better in school&#xA;if I had known about them.&lt;/p&gt;&#xA;&lt;h2 id=&#34;investing-and-indexing&#34;&gt;Investing and Indexing&lt;/h2&gt;&#xA;&lt;p&gt;For most of my 20s I didn&amp;rsquo;t know much about investing, so I avoided it. Better&#xA;to not risk my money, is what I thought. Turns out holding cash is also risky.&#xA;I wish I had known about index funds earlier — the book that taught me the most&#xA;on the subject is Jack Bogle&amp;rsquo;s &lt;a href=&#34;https://www.goodreads.com/book/show/171127.The_Little_Book_of_Common_Sense_Investing&#34;&gt;The Little Book of Common Sense&#xA;Investing&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>2020 Year in Review</title>
      <link>/posts/2020/year-in-review/</link>
      <pubDate>Sun, 27 Dec 2020 00:00:00 +0000</pubDate>
      <guid>/posts/2020/year-in-review/</guid>
      <description>&lt;p&gt;2020. What can I say? It was a year I don&amp;rsquo;t think any of us need to live again. Here&amp;rsquo;s a brief overview of my year.&lt;/p&gt;&#xA;&lt;h2 id=&#34;highlights&#34;&gt;Highlights&lt;/h2&gt;&#xA;&lt;p&gt;In February on Valentine&amp;rsquo;s day, Elva and I adopted Noona(!), an 8 year old Siberian Husky. She&amp;rsquo;s the chillest, sweetest dog. Due to lockdown starting 2 weeks later, I&amp;rsquo;m sure she thinks that spending all day at the house giving her attention is normal.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to clone a Google Source Repository in Working Copy iOS</title>
      <link>/posts/2020/how-to-clone-gcp-repo-working-copy/</link>
      <pubDate>Sat, 19 Dec 2020 02:00:00 -0700</pubDate>
      <guid>/posts/2020/how-to-clone-gcp-repo-working-copy/</guid>
      <description>&lt;p&gt;I recently went through this process and couldn&amp;rsquo;t find a guide (though I swear one existed at some point in the past). Here&amp;rsquo;s how to clone a git repository from Google Source Repositories in the Working Copy iOS or iPadOS app:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Navigate to &lt;a href=&#34;https://source.cloud.google.com/&#34;&gt;https://source.cloud.google.com/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Pick out the repo you want to clone and open the clone dialog (it looks like a &amp;ldquo;+&amp;rdquo; icon)&lt;/li&gt;&#xA;&lt;li&gt;Go to the &amp;ldquo;Manually generated credentials&amp;rdquo; tab&lt;/li&gt;&#xA;&lt;li&gt;Click on &amp;ldquo;Generate and store your Git credentials&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Go through the authentication flow&lt;/li&gt;&#xA;&lt;li&gt;You should be prompted to copy a shell command onto your clipboard&lt;/li&gt;&#xA;&lt;li&gt;Go to the Working Copy iOS app&lt;/li&gt;&#xA;&lt;li&gt;Go to Settings (the gear icon) &amp;gt; Authentication Cookies&lt;/li&gt;&#xA;&lt;li&gt;Tap the &amp;ldquo;+&amp;rdquo; icon and import from clipboard&lt;/li&gt;&#xA;&lt;li&gt;You should now be able to clone the repository using the &lt;code&gt;https://source.developers.google.com/p/...&lt;/code&gt; URL&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Hope that helps if you&amp;rsquo;re in the same boat.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Grace Hopper 2019 Trip Report</title>
      <link>/posts/2020/grace-hopper-2019-trip-report/</link>
      <pubDate>Sun, 16 Aug 2020 00:00:00 +0000</pubDate>
      <guid>/posts/2020/grace-hopper-2019-trip-report/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;IMG_20191002_001805.jpg&#34; alt=&#34;The GHC logo.&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Despite this trip report being over 9 months late, I wanted to share it because&#xA;I can&amp;rsquo;t stop thinking about how positive an experience this conference was.&#xA;Grace Hopper is the largest women in tech conference in the world, with around&#xA;25,000 attendees flying into Orlando, FL from all parts of the world for the&#xA;2019 conference. In previous years I had been interested in attending but&#xA;hadn&amp;rsquo;t gotten the chance—and I (as a man) also strongly did not want to take&#xA;the spot of a potential woman visiting the conference. This year I was lucky to&#xA;get the chance to attend and thought it would be a valuable experience to learn&#xA;how to be a better ally and advance the cause of women in tech, as well as&#xA;learn about the latest tech from across the industry.&lt;/p&gt;</description>
    </item>
    <item>
      <title>用20行Python构建Markov Chain语句生成器</title>
      <link>/posts/2020/markov-chain-python-zh/</link>
      <pubDate>Sat, 04 Jul 2020 10:44:41 -0800</pubDate>
      <guid>/posts/2020/markov-chain-python-zh/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;A bot who can write a long letter with ease, cannot write ill.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;small&gt;&lt;em&gt;—Jane Austen, Pride and Prejudice&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;&#xA;&lt;p&gt;这篇文章将引导您逐步学习如何使用Python从头开始编写马尔可夫链(&lt;a href=&#34;https://en.wikipedia.org/wiki/Markov_chain&#34;&gt;Markov&#xA;Chain&lt;/a&gt;)，以生成好像一个真实的人写的英语的全新句子。&#xA;简·奥斯丁的《傲慢与偏见》(&lt;a href=&#34;https://www.goodreads.com/book/show/1885.Pride_and_Prejudice&#34;&gt;Pride and Prejudice by Jane&#xA;Austen&lt;/a&gt;)&#xA;是我们用来构建马尔可夫链的文字。&#xA;&lt;a href=&#34;https://colab.research.google.com/drive/14KjFfYEVhFl3nyuGZtFi1vnv5hN88Qn2&#34;&gt;Colab&lt;/a&gt;&#xA;上有一篇可运行的笔记本版本。&lt;/p&gt;&#xA;&lt;p class=&#34;aside&#34;&gt;&#xA;Read&#xA;&lt;a href=&#34;/posts/2019/markov-chain-python/&#34;&gt;the English version of this post here&lt;/a&gt;.&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;setup&#34;&gt;Setup&lt;/h2&gt;&#xA;&lt;p&gt;首先下载“傲慢与偏见”的全文。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 下载Pride and Prejudice和并切断头.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;!&lt;/span&gt;curl https:&lt;span style=&#34;color:#f92672&#34;&gt;//&lt;/span&gt;www&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;gutenberg&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;org&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;files&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1342&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1342&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0.&lt;/span&gt;txt &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; tail &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;n&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;32&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;content&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;pride&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;and&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;prejudice&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;txt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 预览文件.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;!&lt;/span&gt;head &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;n &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;content&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;pride&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;and&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;prejudice&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;txt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current&#xA;                                 Dload  Upload   Total   Spent    Left  Speed&#xA;100  707k  100  707k    0     0  1132k      0 --:--:-- --:--:-- --:--:-- 1130k&#xA;PRIDE AND PREJUDICE&#xA;&#xA;By Jane Austen&#xA;&#xA;&#xA;&#xA;Chapter 1&#xA;&#xA;&#xA;It is a truth universally acknowledged, that a single man in possession&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;添加一些必要的导入。&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Most Commonly Used Chinese Words</title>
      <link>/posts/2020/most-common-chinese-words-on-weibo/</link>
      <pubDate>Sun, 15 Mar 2020 15:23:36 -0700</pubDate>
      <guid>/posts/2020/most-common-chinese-words-on-weibo/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;zh-wordcloud.png&#34; alt=&#34;The top 100 words in a word cloud.&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;I think the most effective way to learn a language is to prioritize learning&#xA;the day-to-day most frequently used words. Picking words to study in order of&#xA;frequency is the optimal way to maximally increase your marginal understanding&#xA;of the language for each successive word you learn.&lt;/p&gt;&#xA;&lt;p&gt;To that end, I took a dataset of Weibo (China&amp;rsquo;s Twitter) posts and ranked all&#xA;words that appeared in the dataset order of frequency.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Napa Half Race Report</title>
      <link>/posts/2020/napa-half-race-report/</link>
      <pubDate>Wed, 11 Mar 2020 08:24:16 -0800</pubDate>
      <guid>/posts/2020/napa-half-race-report/</guid>
      <description>&lt;figure&gt;&#xA;  &lt;amp-img&#xA;    alt=&#34;center-384&#34;&#xA;    src=&#34;/posts/2020/napa-half-race-report/finish.jpg&#34;&#xA;    width=&#34;618&#34;&#xA;    height=&#34;618&#34;&#xA;    class=&#34;&#34;&#xA;    lightbox&#xA;    layout=&#34;responsive&#34;&gt;&#xA;  &lt;/amp-img&gt;&#xA;  &lt;figcaption&gt;center-384&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&#xA;  &lt;img&#xA;    alt=&#34;{{ $alt }}&#34;&#xA;    src=&#34;finish.jpg&#34; /&gt;&#xA;  &lt;figcaption&gt;&#xA;      The end of the pain cave. Note: the clock time in the picture is for a different race.&#xA;    &lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;I PR&amp;rsquo;d my half marathon at the Napa Half!! Yeahh!!!!&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Old PR: &lt;strong&gt;1:31:37&lt;/strong&gt; at the &lt;a href=&#34;https://results.imathlete.com/kaiser-permanente/events/2019/kaiser-permanente-san-francisco-half-marathon-10k-5k/3289/entrant?share=1&#34;&gt;2019 Kaiser SF Half&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;New PR: &lt;strong&gt;1:28:59&lt;/strong&gt; (&lt;a href=&#34;https://results.rmraces.live/napa-valley-marathon/events/2020/kaiser-permanente-napa-valley-marathon/916/entrant?share=1&#34;&gt;link&lt;/a&gt;).&lt;/li&gt;&#xA;&lt;li&gt;Improvement: &lt;strong&gt;2.9%&lt;/strong&gt; (-2:38)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In this post I want to look into the race and more closely analyze what went&#xA;well, what could have gone better, and what was interesting about this race.&lt;/p&gt;</description>
    </item>
    <item>
      <title>jeffcarp CV</title>
      <link>/cv/</link>
      <pubDate>Fri, 03 Jan 2020 21:14:42 +0700</pubDate>
      <guid>/cv/</guid>
      <description>&lt;p&gt;This is a &lt;a href=&#34;https://jvns.ca/blog/brag-documents/&#34;&gt;&amp;ldquo;brag doc&amp;rdquo;&lt;/a&gt; to contain all my&#xA;accomplishments in a more long-winded and media-rich format than my resume can&#xA;handle.&lt;/p&gt;&#xA;&lt;h2 id=&#34;experience&#34;&gt;Experience&lt;/h2&gt;&#xA;&lt;h3 id=&#34;waymo&#34;&gt;Waymo&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;2019 to present &amp;mdash; Mountain View, CA&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Gained Python readability.&lt;/li&gt;&#xA;&lt;li&gt;(More here later)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;google&#34;&gt;Google&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;2016 to 2019 &amp;ndash; Mountain View, CA&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Built and launched &lt;a href=&#34;https://wpt.fyi/&#34;&gt;wpt.fyi&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Designed back-end, front-end, and data processing pipeline for promoting browser API interoperability.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;bugs.chromium.org&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Designed and built burn-down charts for velocity tracking.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;hiring-contributions&#34;&gt;Hiring contributions&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;SWE interviewer &amp;ndash; top 1% of interviewers at Google (by volume)&lt;/li&gt;&#xA;&lt;li&gt;Hosted 1 intern and co-hosted 2 STEP interns.&lt;/li&gt;&#xA;&lt;li&gt;Served on hiring committee.&lt;/li&gt;&#xA;&lt;li&gt;Led SWE interview prep workshops for students at target universities (UCTP program)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;braintree--paypal&#34;&gt;Braintree / PayPal&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;2014 to 2016 &amp;ndash; San Francisco, CA&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Projects</title>
      <link>/projects/</link>
      <pubDate>Fri, 03 Jan 2020 21:14:42 +0700</pubDate>
      <guid>/projects/</guid>
      <description>&lt;h1 id=&#34;colbybox-2012&#34;&gt;ColbyBox (2012)&lt;/h1&gt;&#xA;&lt;p&gt;I turned an infrequently used LCD screen in a prominent location in our college&amp;rsquo;s student center into a Twitter live feed that also supported photos and videos.&lt;/p&gt;&#xA;&lt;p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;figure&gt;&#xA;  &lt;img alt=&#34;The ColbyBox, an LCD in the student center.&#34; src=&#34;/projects/colbybox_hu_4d87258b3f9c25fe.jpg&#34; /&gt;&#xA;  &lt;figcaption&gt;The ColbyBox, an LCD in the student center.&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>2019 Year in Review</title>
      <link>/posts/2019/year-in-review/</link>
      <pubDate>Tue, 31 Dec 2019 04:37:09 +0700</pubDate>
      <guid>/posts/2019/year-in-review/</guid>
      <description>&lt;p&gt;In 2019 I got married&amp;mdash;twice! &lt;small&gt;(to the same person!)&lt;/small&gt; I changed jobs. I ran my first marathon. 2019 was a huge year in my life.&lt;/p&gt;&#xA;&lt;p&gt;I grew in a lot of ways this year. Wedding planning was a huge undertaking and strengthened our communication and quick decision making skills. Additionally this year I started working with a therapist which has been great&amp;mdash;I&amp;rsquo;m wondering why I never thought of doing that earlier.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Best Books I Read in 2019</title>
      <link>/posts/2019/best-books-2019/</link>
      <pubDate>Sat, 28 Dec 2019 11:11:11 +0800</pubDate>
      <guid>/posts/2019/best-books-2019/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;books-2019.png&#34; alt=&#34;Covers of the 4 books.&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Here are my 4 favorite books from 2019.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;A British couple buys a farmhouse in the South of France and spends the next 12 months exploring the countryside, meeting the locals, renovating the house, and of course, eating and drinking well in &lt;strong&gt;[A Year In Provence](&lt;a href=&#34;https://www.goodreads.com/book/show/&#34;&gt;https://www.goodreads.com/book/show/&lt;/a&gt; 40189.A_Year_in_Provence)&lt;/strong&gt; by Peter Mayle. For a premise that could come off as a little posh, the detail in this story is so rich and the storytelling so genial I couldn’t put it down. I recommend having Google translate closeby.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CIM Race Report</title>
      <link>/posts/2019/cim-race-report/</link>
      <pubDate>Thu, 12 Dec 2019 20:32:54 -0800</pubDate>
      <guid>/posts/2019/cim-race-report/</guid>
      <description>&lt;p&gt;I did it!! I ran my first marathon! It was painful&amp;hellip; but worth it! Despite&#xA;still being pretty sore I can tell you I would definitely do it again. Solid&#xA;&lt;a href=&#34;https://www.rei.com/blog/climb/fun-scale&#34;&gt;Type II fun&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;My final time was &lt;strong&gt;3:59:44&lt;/strong&gt;, sneaking in just under 4 hours. You can view the&#xA;full splits&#xA;&lt;a href=&#34;https://www.athlinks.com/event/3241/results/Event/891887/Course/1723361/Bib/2383&#34;&gt;here&lt;/a&gt;&#xA;and my run on &lt;a href=&#34;https://www.strava.com/activities/2920960950&#34;&gt;Strava here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;CIM race certificate&#34;&#xA;src=&#34;/images/2019/cim-certificate.png&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;Despite consciously trying to keep my pace under control in the first half, I&#xA;went out too fast. My first half marathon was &lt;strong&gt;1:50:59&lt;/strong&gt; vs. &lt;strong&gt;2:08:45&lt;/strong&gt;&#xA;for the second half&amp;mdash;a positive split of &lt;strong&gt;16%&lt;/strong&gt;. 😕&lt;/p&gt;</description>
    </item>
    <item>
      <title>Marathon Training Update</title>
      <link>/posts/2019/marathon-training-update/</link>
      <pubDate>Thu, 21 Nov 2019 08:47:45 -0800</pubDate>
      <guid>/posts/2019/marathon-training-update/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m signed up for the California International Marathon (a.k.a. CIM) in&#xA;Sacramento, which is in less than 3 weeks! This will be my first marathon&#xA;(the SF Marathon this year was supposed to be, but I &lt;a href=&#34;/posts/2019/on-being-injured-again/&#34;&gt;gave myself a toe injury&#xA;by overtraining&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;My goal is simply to finish. I think having any sort of time-based goal would&#xA;risk pushing me past the point of injury during the race.&lt;/p&gt;&#xA;&lt;p&gt;Am I ready? Probably not 😄. My longest long run so far&#xA;has been 15 miles. My weekly mileage is probably super low compared to most&#xA;marathon training programs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>I&#39;m Joining Waymo</title>
      <link>/posts/2019/im-joining-waymo/</link>
      <pubDate>Sun, 10 Nov 2019 15:38:38 -0800</pubDate>
      <guid>/posts/2019/im-joining-waymo/</guid>
      <description>&lt;p&gt;Quick life update: I&amp;rsquo;ve left the Chrome team and joined Waymo (formerly the&#xA;Google self-driving car project). I&amp;rsquo;ll be working on ML infrastructure.&lt;/p&gt;&#xA;&lt;p&gt;It was a fantastic whirlwind 3 years working on infrastructure for Chromium and&#xA;helping to&amp;ndash;in a very small way&amp;ndash;push the open web forward. On the team I&#xA;launched &lt;a href=&#34;https://wpt.fyi/&#34;&gt;wpt.fyi&lt;/a&gt;, a resource to help align the APIs of all&#xA;browsers.  I worked on syncing source code across repos. I launched a couple&#xA;TensorFlow ML models. And I helped make the bug tracker quicker and more useful&#xA;for everyone in the project.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Things I Learned as a First-Time Intern Host</title>
      <link>/posts/2019/things-i-learned-first-time-intern-host/</link>
      <pubDate>Sat, 31 Aug 2019 11:13:25 -0700</pubDate>
      <guid>/posts/2019/things-i-learned-first-time-intern-host/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;baybridge.jpg&#34; alt=&#34;The Bay Bridge&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;I hosted an intern for the first time this summer. It was my first time being&#xA;somebody&amp;rsquo;s manager and it became a huge learning experience for me as well as a&#xA;really fun time. My intern worked on &lt;a href=&#34;https://bugs.chromium.org/p/chromium/issues/list?mode=chart&amp;amp;q=Component%3ABlink&amp;amp;can=2&#34;&gt;adding many features to velocity-tracking&#xA;charts&lt;/a&gt;,&#xA;&lt;a href=&#34;https://chromium.googlesource.com/infra/infra/+/master/appengine/monorail/tools/ml/trainer2/&#34;&gt;rewriting our ML models in TensorFlow&#xA;2.0&lt;/a&gt;,&#xA;and a few other projects.&lt;/p&gt;&#xA;&lt;p&gt;Here are the biggest areas where I struggled as a host and the important&#xA;lessons I took away from those experiences.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How are Words Represented in Machine Learning?</title>
      <link>/posts/2019/how-are-words-represented-in-machine-learning/</link>
      <pubDate>Sat, 13 Jul 2019 01:31:29 +0000</pubDate>
      <guid>/posts/2019/how-are-words-represented-in-machine-learning/</guid>
      <description>&lt;p class=&#34;aside&#34;&gt;&#xA;    &lt;b&gt;Note:&lt;/b&gt;This post had a good run, but it is now very out of date.&#xA;    Check out newer content around &lt;a href=&#34;https://huggingface.co/learn/llm-course/en/chapter2/4&#34;&gt;tokenizers&lt;/a&gt;&#xA;    for a more up-to-date view.&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Machine learning on human languages is a super exciting space right now.&#xA;Applications are exploding&amp;mdash;just think of how many natural language ML models&#xA;it takes to run a smart assistant, from transforming spoken audio to text,&#xA;to finding the exact part of a web page that answers your question, to choosing&#xA;the correct words with the correct grammar to reply to you.&lt;/p&gt;</description>
    </item>
    <item>
      <title>3 Tips for New Technical Interviewers</title>
      <link>/posts/2019/3-tips-for-new-technical-interviewers/</link>
      <pubDate>Sat, 06 Jul 2019 15:00:31 -0700</pubDate>
      <guid>/posts/2019/3-tips-for-new-technical-interviewers/</guid>
      <description>&lt;p&gt;One year ago I conducted my first software engineering interview at Google.  In&#xA;that first interview I gave, I guarantee you I was more nervous than the&#xA;candidate I was interviewing. Those first few interviews were particularly&#xA;nerve-wracking. A lot was on the line&amp;mdash;I didn&amp;rsquo;t want to screw up this person&amp;rsquo;s&#xA;career by being a bad interviewer!&lt;/p&gt;&#xA;&lt;p&gt;Since then I&amp;rsquo;ve conducted a great deal more interviews and learned a lot about&#xA;how to interview candidates successfully. I want to share three small tips that&#xA;would have helped me improve as I was getting started.&lt;/p&gt;</description>
    </item>
    <item>
      <title>On Being Injured (Again)</title>
      <link>/posts/2019/on-being-injured-again/</link>
      <pubDate>Fri, 14 Jun 2019 14:55:14 -0700</pubDate>
      <guid>/posts/2019/on-being-injured-again/</guid>
      <description>&lt;h2 id=&#34;tldr&#34;&gt;tl;dr:&lt;/h2&gt;&#xA;&lt;p&gt;I signed up for the SF Marathon (this would have been my first marathon), then&#xA;overtrained, got injured, and am currently recovering. I&amp;rsquo;m probably going to&#xA;defer my registration to 2020 and become a cheering squad this year.&lt;/p&gt;&#xA;&lt;h1 id=&#34;-&#34;&gt;(╯°□°)╯︵ ┻━┻&lt;/h1&gt;&#xA;&lt;p&gt;This is a cycle I&amp;rsquo;ve been through over and over again. I literally&#xA;&lt;a href=&#34;/posts/2015/breaking-the-cycle/&#34;&gt;wrote about&#xA;this in 2015&lt;/a&gt;. Being injured massively sucks.&#xA;I can&amp;rsquo;t exercise the way I usually do, and I don&amp;rsquo;t get see my running buddies.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setting Up a Recruiter Auto-reply Bot</title>
      <link>/posts/2019/recruiter-auto-reply-bot/</link>
      <pubDate>Wed, 05 Jun 2019 13:16:00 -0700</pubDate>
      <guid>/posts/2019/recruiter-auto-reply-bot/</guid>
      <description>&lt;p&gt;If you&amp;rsquo;re a software engineer, you&amp;rsquo;re likely familiar with unsolicited emails&#xA;from recruiters. Most are probably template emails. Some of them are funny,&#xA;some are thoughtful, and some of them ask you to move 3000 miles, take a 50%&#xA;pay cut, and code in a language you don&amp;rsquo;t know.&lt;/p&gt;&#xA;&lt;h2 id=&#34;impact&#34;&gt;Impact&lt;/h2&gt;&#xA;&lt;p&gt;Recruiter emails have a measurable impact on productivity. If I were to&#xA;hand-write a response to each one (taking 2 minutes), and I got 1 recruiter&#xA;email a day, that&amp;rsquo;s 12 hours of work, or more than one full work day of each&#xA;year&amp;hellip; gone.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Measuring My Chinese Progress</title>
      <link>/posts/2019/measuring-my-chinese-progress/</link>
      <pubDate>Sat, 27 Apr 2019 22:20:24 -0700</pubDate>
      <guid>/posts/2019/measuring-my-chinese-progress/</guid>
      <description>&lt;p&gt;Last summer I started learning Mandarin Chinese. To start I began taking classes&#xA;at a&#xA;&lt;a href=&#34;http://kaixinlanguageschool.com/&#34;&gt;Chinese language school&lt;/a&gt; in SF.&#xA;For more practice I&#xA;started an Instagram &lt;a href=&#34;https://www.instagram.com/jeffcarp_zh/&#34;&gt;@jeffcarp_zh&lt;/a&gt; and&#xA;tried writing a &lt;a href=&#34;/categories/%E4%B8%AD%E6%96%87/&#34;&gt;couple blog posts&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Almost a year later, I&amp;rsquo;m still going to Chinese class on a semi-regular basis&#xA;(1 hour a week except when I&amp;rsquo;m taking a break) and keep up a daily spaced-repetition&#xA;flashcard&#xA;habit using the &lt;a href=&#34;https://www.pleco.com/&#34;&gt;Pleco Chinese dictionary app&lt;/a&gt;&#xA;(usually on the train into work).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kaiser SF Half Race Report</title>
      <link>/posts/2019/kaiser-sf-half-race-report/</link>
      <pubDate>Wed, 06 Feb 2019 13:46:20 -0800</pubDate>
      <guid>/posts/2019/kaiser-sf-half-race-report/</guid>
      <description>&lt;h2 id=&#34;overall&#34;&gt;Overall&lt;/h2&gt;&#xA;&lt;p&gt;It went great, I PR&amp;rsquo;d by 10 minutes! The course is super fast and the&#xA;light drizzle of rain didn&amp;rsquo;t really put a damper on things.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;/images/2019/kaiser.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;report&#34;&gt;Report&lt;/h2&gt;&#xA;&lt;h3 id=&#34;t-020&#34;&gt;t-0:20&lt;/h3&gt;&#xA;&lt;p&gt;I arrived and was able to use the bathroom &amp;ndash; they did a great job of making&#xA;sure there were enough port-a-potties. After that since it was drizzling I&#xA;hid under a tree to the side of the start line with a bunch of other runners&#xA;who looked like they were from a club and knew what they were doing.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building a Running Pace Calculator With AMP</title>
      <link>/posts/2019/building-a-running-pace-calculator-with-amp/</link>
      <pubDate>Sun, 03 Feb 2019 23:45:38 +0000</pubDate>
      <guid>/posts/2019/building-a-running-pace-calculator-with-amp/</guid>
      <description>&lt;p&gt;Sometimes you need to know how fast you need to run to achieve a &lt;a href=&#34;https://www.instagram.com/p/Btbw0wYniMd/&#34;&gt;personal best&#xA;time&lt;/a&gt;. Previously the way I did this&#xA;was to search &amp;ldquo;running pace calculator&amp;rdquo; and follow and use one of the top&#xA;results. However, I was doing this almost always on mobile and none of those&#xA;results are very mobile friendly. There might be good native apps for this,&#xA;but I&amp;rsquo;m a fan of the web and don&amp;rsquo;t want to download an extra app if I can avoid&#xA;it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How I Host Static Sites With Automatic Deploy on Green</title>
      <link>/posts/2019/how-i-host-static-sites-with-automatic-deploy-on-green/</link>
      <pubDate>Sun, 03 Feb 2019 23:19:44 +0000</pubDate>
      <guid>/posts/2019/how-i-host-static-sites-with-automatic-deploy-on-green/</guid>
      <description>&lt;p&gt;This site, &lt;a href=&#34;https://www.jeffcarp.com/&#34;&gt;jeffcarp.com&lt;/a&gt;, is written in markdown&#xA;and uses the &lt;a href=&#34;https://gohugo.io/&#34;&gt;Hugo static site generator&lt;/a&gt;. This post walks&#xA;you through how I set automatic building, testing, and deployment to Firebase&#xA;hosting.&lt;/p&gt;&#xA;&lt;h2 id=&#34;project-setup&#34;&gt;Project Setup&lt;/h2&gt;&#xA;&lt;p&gt;I assume we&amp;rsquo;re starting from a working Hugo project. For more on how to set&#xA;that up, see the &lt;a href=&#34;https://gohugo.io/getting-started/quick-start/&#34;&gt;Hugo docs&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;testing-setup&#34;&gt;Testing Setup&lt;/h2&gt;&#xA;&lt;p&gt;I want the site to be Deploy-on-Green (i.e. only if it passes the tests). The&#xA;CI setup I use is &lt;a href=&#34;https://cloud.google.com/cloud-build/docs/&#34;&gt;GCP Cloud&#xA;Build&lt;/a&gt;. I develop and debug these&#xA;tests locally using the &lt;code&gt;local-cloud-build&lt;/code&gt; command &lt;a href=&#34;https://cloud.google.com/cloud-build/docs/build-debug-locally&#34;&gt;documented&#xA;here&lt;/a&gt;. The steps&#xA;I want are:&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Year of the Pomodoro Technique</title>
      <link>/posts/2019/a-year-of-the-pomodoro-technique/</link>
      <pubDate>Tue, 29 Jan 2019 15:19:10 -0800</pubDate>
      <guid>/posts/2019/a-year-of-the-pomodoro-technique/</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;https://en.wikipedia.org/wiki/Pomodoro_Technique&#34;&gt;Pomodoro Technique&lt;/a&gt; is&#xA;method for improving productivity by segmenting work into 25-minute intervals.&#xA;You focus intensely on a task for 25 minutes, then take a break. Rinse, repeat.&lt;/p&gt;&#xA;&lt;p&gt;I began using the technique to study for the &lt;a href=&#34;/posts/2018/quantum-resistant-crypto-elliptic-curves-other-learnings/&#34;&gt;cryptography course I took last&#xA;winter&lt;/a&gt;.&#xA;The benefits were clear from the beginning. I enjoyed working in 25-minute&#xA;segments and started using it at work as well. I want to share with you some of&#xA;the things I learned along this year-long journey.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Inspired</title>
      <link>/posts/2019/book-review-inspired/</link>
      <pubDate>Sat, 19 Jan 2019 17:07:11 -0800</pubDate>
      <guid>/posts/2019/book-review-inspired/</guid>
      <description>&lt;div class=&#34;image-theater&#34;&gt;&#xA;  &lt;a href=&#34;https://www.goodreads.com/book/show/3323374-inspired&#34;&gt;&#xA;    &lt;img alt=&#34;Book: Inspired&#34;&#xA;      src=&#34;/images/2019/book-inspired.jpg&#34;&#xA;      style=&#34;width: 150px; margin: 0 auto;&#34; /&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.goodreads.com/book/show/3323374-inspired&#34;&gt;Inspired&lt;/a&gt; is a great&#xA;introduction on how to be a Product Manager by Marty Cagan, a former engineer&#xA;turned product expert. Here&amp;rsquo;s one of my favorite themes of the book:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Product:&lt;/strong&gt; build the right product &lt;br/&gt;&#xA;&lt;strong&gt;Engineering:&lt;/strong&gt; build the product right&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Here are the most poignant things I learned from this book organized by&#xA;category.&lt;/p&gt;&#xA;&lt;h2 id=&#34;product-team-structure&#34;&gt;Product team structure&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It&amp;rsquo;s important to have somebody between product marketing and engineering&#xA;(i.e. the product manager). Otherwise UX gets skipped and the TL has to&#xA;figure out what to build, which is a bad recipe for product-market fit.&lt;/li&gt;&#xA;&lt;li&gt;Also a bad idea is to let sales direct engineering, if you do that you get&#xA;features, not products.&lt;/li&gt;&#xA;&lt;li&gt;Most product orgs are basically feature factories&amp;hellip; don&amp;rsquo;t be like that.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;engineering-management&#34;&gt;Engineering management&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Run product management and design in parallel with engineering - the PM and&#xA;designers should always be 1-2 sprints ahead of eng.&lt;/li&gt;&#xA;&lt;li&gt;To combat tech debt, give the engineering team &amp;ldquo;headroom,&amp;rdquo; i.e. 20% of&#xA;resources to do with it what they want.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;the-importance-of-prototypes&#34;&gt;The importance of prototypes&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It&amp;rsquo;s really important to take an engineer or two and create usable prototypes&#xA;during the discovery phase. Otherwise most startups use their entire eng&#xA;process and release cycle to ship experiments in order for product to iterate.&#xA;This is why it takes 1.5-2 years for most companies to find traction, and why&#xA;many startups fail&lt;/li&gt;&#xA;&lt;li&gt;Cagan argues that making a full mock with all intended functionality not only&#xA;is preferrable, but will actually let you ship faster by reducing risk later&#xA;in engineering.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;general-product-management&#34;&gt;General product management&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Software projects have two stages: Discovery (build the right product) and&#xA;Execution (build the product right). After the discovery phase ends, the&#xA;product spec needs to be locked down otherwise changes create &amp;ldquo;churn.&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Don&amp;rsquo;t rely on your manager as a mentor, it&amp;rsquo;s not their job.&lt;/li&gt;&#xA;&lt;li&gt;To prevent surprises and make sure meetings with lots of high level&#xA;stakeholders run smoothly, reach out to them beforehand to get them on board.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I thought this book had some fresh things to say about confidence. Frequently&#xA;confidence is looked upon negatively in tech—something that MBAs who don&amp;rsquo;t&#xA;know what they&amp;rsquo;re talking about have. But I really liked Cagan&amp;rsquo;s take on it:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Build a Markov Chain Sentence Generator in 20 lines of Python</title>
      <link>/posts/2019/markov-chain-python/</link>
      <pubDate>Wed, 16 Jan 2019 10:44:41 -0800</pubDate>
      <guid>/posts/2019/markov-chain-python/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;A bot who can write a long letter with ease, cannot write ill.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;small&gt;&lt;em&gt;—Jane Austen, Pride and Prejudice&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;&#xA;&lt;p&gt;This post walks you through how to write a &lt;a href=&#34;https://en.wikipedia.org/wiki/Markov_chain&#34;&gt;Markov&#xA;Chain&lt;/a&gt; from scratch with Python in&#xA;order to generate completely new sentences that resemble English.&lt;/p&gt;&#xA;&lt;p&gt;The text we&amp;rsquo;ll be using to build the Markov Chain is &lt;a href=&#34;https://www.goodreads.com/book/show/1885.Pride_and_Prejudice&#34;&gt;Pride and Prejudice by&#xA;Jane Austen&lt;/a&gt;. You&#xA;can follow along here or grab a runnable notebook version of this post on&#xA;&lt;a href=&#34;https://colab.research.google.com/drive/14KjFfYEVhFl3nyuGZtFi1vnv5hN88Qn2&#34;&gt;Colab&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>2018 Year in Review</title>
      <link>/posts/2018/year-in-review/</link>
      <pubDate>Mon, 24 Dec 2018 15:39:13 -0700</pubDate>
      <guid>/posts/2018/year-in-review/</guid>
      <description>&lt;p&gt;For the &lt;a href=&#34;/categories/yearly-review/&#34;&gt;past few years&lt;/a&gt; I&amp;rsquo;ve been summing up my&#xA;yearly highlights in a blog post. It doesn&amp;rsquo;t matter if anyone reads these&#xA;posts&amp;mdash;it&amp;rsquo;s nice to have these to be able to look back on the big things that&#xA;happened in my life each year.&lt;/p&gt;&#xA;&lt;p&gt;So without further ado, here&amp;rsquo;s an overview of the big things that happened in&#xA;my life in 2018, from &lt;a href=&#34;#running&#34;&gt;Running&lt;/a&gt;, to &lt;a href=&#34;#reading&#34;&gt;Reading&lt;/a&gt;,&#xA;&lt;a href=&#34;#learning&#34;&gt;Learning&lt;/a&gt; &lt;a href=&#34;#work&#34;&gt;Work&lt;/a&gt;, and &lt;a href=&#34;#health&#34;&gt;Health&lt;/a&gt;, finally looking&#xA;at how I did on my &lt;a href=&#34;#goals&#34;&gt;2018 goals&lt;/a&gt; and setting 2019 goals.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mindset: The New Psychology of Success</title>
      <link>/posts/2018/book-review-mindset-carol-dweck/</link>
      <pubDate>Mon, 10 Dec 2018 15:38:56 -0800</pubDate>
      <guid>/posts/2018/book-review-mindset-carol-dweck/</guid>
      <description>&lt;a href=&#34;https://www.goodreads.com/book/show/40745.Mindset&#34;&gt;&#xA;  &lt;img alt=&#34;Book: Mindset: The New Psychology of Success&#34;&#xA;    src=&#34;/images/2018/mindset.jpg&#34;&#xA;    style=&#34;width: 200px; margin: 0 auto 2rem;&#34; /&gt;&#xA;&lt;/a&gt;&#xA;&lt;p&gt;This book is about two ways of thinking: the fixed mindset and the growth&#xA;mindset. In the fixed mindset you&amp;rsquo;re a finished product. Expending any extra&#xA;effort is unthinkable because supposedly you&amp;rsquo;re already perfect. Then there&amp;rsquo;s&#xA;the growth mindset, which tells us the only way you learn is from mistakes,&#xA;talent doesn&amp;rsquo;t get you very far, and the people who succeed are the ones who&#xA;work the hardest.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Solve Every Software Engineering Interview Question</title>
      <link>/posts/2018/how-to-solve-every-software-engineering-interview-question/</link>
      <pubDate>Tue, 20 Nov 2018 22:13:48 +0000</pubDate>
      <guid>/posts/2018/how-to-solve-every-software-engineering-interview-question/</guid>
      <description>&lt;figure&gt;&#xA;  &lt;img alt=&#34;The Googleplex at dusk&#34;&#xA;    src=&#34;/images/goog-night-1024.jpg&#34; /&gt;&#xA;  &lt;figcaption&gt;The Googleplex at dusk&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;This post unfortunately does not contain a secret skeleton key that will unlock&#xA;every tricky Software Engineering interview question. What&amp;rsquo;s below is a&#xA;framework that you can apply to every interview question that will set you up&#xA;for success every time.&lt;/p&gt;&#xA;&lt;p&gt;Software engineering interviews are not primarily about seeing if you can pull&#xA;the #1 most perfect solution to a problem out of your hat.  What&amp;rsquo;s more&#xA;important is showing your work: demonstrating your analytical skills and&#xA;problem solving ability. This is where a framework is useful.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Manager&#39;s Path</title>
      <link>/posts/2018/book-review-the-managers-path/</link>
      <pubDate>Wed, 14 Nov 2018 15:32:22 -0800</pubDate>
      <guid>/posts/2018/book-review-the-managers-path/</guid>
      <description>&lt;p style=&#34;width: 200px; margin: 0 auto 2rem;&#34;&gt;&#xA;  &lt;a href=&#34;https://www.goodreads.com/book/show/33369254-the-manager-s-path&#34;&gt;&#xA;    &lt;img alt=&#34;Miles ran per week 2018&#34;&#xA;      src=&#34;/images/the-managers-path.jpg&#34; /&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;I can&amp;rsquo;t recommend &lt;a href=&#34;https://www.goodreads.com/book/show/33369254-the-manager-s-path&#34;&gt;The Manager&amp;rsquo;s&#xA;Path&lt;/a&gt; by&#xA;Camille Fournier highly enough for Software Engineers. I found this book super useful for understanding the structure of&#xA;technical organizations. It contains tons of gems that I want to write on sticky&#xA;notes and post above my desk at work, like:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Especially as you become more senior, remember that your manager expects you&#xA;to bring solutions, not problems.&lt;/p&gt;</description>
    </item>
    <item>
      <title>More Similar Mandarin Words</title>
      <link>/posts/2018/more-similar-mandarin-words/</link>
      <pubDate>Sat, 20 Oct 2018 01:24:10 +0000</pubDate>
      <guid>/posts/2018/more-similar-mandarin-words/</guid>
      <description>&lt;p&gt;大家好，今天我要写一下更多相似的中文话。我的上次的blog post是英文写的&#xA;&lt;a href=&#34;/posts/2018-similar-mandarin-words/&#34;&gt;Similar Mandarin Words&lt;/a&gt;。下面是更同类的单词我遇到了在学中文。&lt;/p&gt;&#xA;&lt;h2 id=&#34;去-和-走&#34;&gt;“去” 和 “走”&lt;/h2&gt;&#xA;&lt;p&gt;都可以用去某处。“走”的意思是physically walk somewhere。去是more general。&lt;/p&gt;&#xA;&lt;h2 id=&#34;方才-和-刚才&#34;&gt;“方才” 和 “刚才”&lt;/h2&gt;&#xA;&lt;p&gt;在词典方才和刚才都有同的意思。但是没有人说方才。人人用刚才。&lt;/p&gt;&#xA;&lt;h2 id=&#34;很有意思-和-很有趣&#34;&gt;“很有意思” 和 “很有趣”&lt;/h2&gt;&#xA;&lt;p&gt;都是同的意思。很有意思还有可能用sarcastically。&lt;/p&gt;&#xA;&lt;h2 id=&#34;见到看到-或者-看那个用&#34;&gt;“见到”，“看到”, 或者 “看”，那个用？&lt;/h2&gt;&#xA;&lt;p&gt;看只是to see的意思。见到是看某人的意思。看到的意思是to notice。&#xA;也可以是看某人的意思但是&lt;/p&gt;&#xA;&lt;p&gt;再次谢谢Elva给教学我中文很好。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Reasons to Try Trail Running</title>
      <link>/posts/2018/reasons-to-try-trail-running/</link>
      <pubDate>Thu, 27 Sep 2018 18:44:49 +0000</pubDate>
      <guid>/posts/2018/reasons-to-try-trail-running/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;No car exhaust fumes.&lt;/li&gt;&#xA;&lt;li&gt;Works out different parts of your legs and core that wouldn&amp;rsquo;t otherwise be&#xA;exercised on asphalt.&lt;/li&gt;&#xA;&lt;li&gt;See wildlife.&lt;/li&gt;&#xA;&lt;li&gt;Visit places and see sights where roads don&amp;rsquo;t go.&lt;/li&gt;&#xA;&lt;li&gt;Races are more intimate and less anonymous. You make friends. Strangers&#xA;encourage you along the trail. You encourage strangers.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>It&#39;s OK to Make Mistakes in Coding Interviews</title>
      <link>/posts/2018/its-ok-to-make-mistakes-in-interviews/</link>
      <pubDate>Tue, 25 Sep 2018 01:02:51 -0700</pubDate>
      <guid>/posts/2018/its-ok-to-make-mistakes-in-interviews/</guid>
      <description>&lt;p&gt;Imagine you&amp;rsquo;re an interviewer in a software engineering interview. The&#xA;interviewee writes a method and it&amp;rsquo;s completely wrong. They go on to implement&#xA;other parts of the problem, then later realize there&amp;rsquo;s a bug and come back and&#xA;fix the original method.&lt;/p&gt;&#xA;&lt;p&gt;One thing that isn&amp;rsquo;t super clear for both interview candidates and interviewers&#xA;is how to treat mistakes like this. The candidate definitely made a mistake. But&#xA;their final implementation is correct. Should they be penalized?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sydney Photos</title>
      <link>/posts/2018/sydney-photos/</link>
      <pubDate>Thu, 26 Jul 2018 00:00:00 +0000</pubDate>
      <guid>/posts/2018/sydney-photos/</guid>
      <description>&lt;p&gt;I travelled to Sydney in July to work with Chrome folks over there. Here are&#xA;my pictures from the trip.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;figure&gt;&#xA;  &lt;img alt=&#34;The Sydney Harbour Bridge&#34; src=&#34;/posts/2018/sydney-photos/DSC00291_hu_c73987f4826bfca3.jpg&#34; /&gt;&#xA;  &lt;figcaption&gt;The Sydney Harbour Bridge&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;On Saturday I took the ferry to Manly Beach, a chill beach town up the coast&#xA;from Sydney.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;figure&gt;&#xA;  &lt;img alt=&#34;The view of the bridge and the opera house from the ferry.&#34; src=&#34;/posts/2018/sydney-photos/DSC00301_hu_cafae17efe3c1881.jpg&#34; /&gt;&#xA;  &lt;figcaption&gt;The view of the bridge and the opera house from the ferry.&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;The old escalators in one of the subway stations was repurposed into an art&#xA;piece that hangs at the entrance.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Doing Cryptography in TensorFlow</title>
      <link>/posts/2018/cryptography-in-tensorflow/</link>
      <pubDate>Sat, 23 Jun 2018 13:00:14 -0700</pubDate>
      <guid>/posts/2018/cryptography-in-tensorflow/</guid>
      <description>&lt;!--&#xA;After building a system with TensorFlow in Autumn 2017 and taking a course&#xA;on Cryptography in Winter 2018, I saw some interesting parallels.&#xA;&#xA;TensorFlow is marketed as a Machine Learning framework, but under the hood it&#39;s&#xA;a general platform for doing computations in the structure of a graph.&#xA;Similarly, cryptographic algorithms are frequently structured as the&#xA;manipulation of vectors or matrices in the structure of a graph. I put together&#xA;a Python notebook to explore this interesting relationship.&#xA;--&gt;&#xA;&lt;figure&gt;&#xA;  &lt;div style=&#34;display:flex;&#34;&gt;&#xA;    &lt;div style=&#34;flex:1;&#34;&gt;&#xA;        &lt;img src=&#34;feistel.gif&#34; alt=&#34;A Feistel Network, the algorithm behind DES.&#34; /&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div style=&#34;flex:1;&#34;&gt;&#xA;        &lt;img src=&#34;nnet.png&#34; alt=&#34;A neural network.&#34; /&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;figcaption&gt;&#xA;    On the left: the Feistel Network from the DES cipher, implemented below. On the right: a deep neural network.&#xA;  &lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://www.tensorflow.org/&#34;&gt;TensorFlow&lt;/a&gt;&lt;/strong&gt; is a popular machine learning&#xA;framework. If you look under the hood, TensorFlow is a general platform for&#xA;doing computation over tensors in the structure of a graph.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Some Similar Mandarin Words</title>
      <link>/posts/2018/similar-mandarin-words/</link>
      <pubDate>Sat, 23 Jun 2018 01:02:51 -0700</pubDate>
      <guid>/posts/2018/similar-mandarin-words/</guid>
      <description>&lt;p&gt;This year I&amp;rsquo;m trying to start learning Mandarin Chinese. Here are some confusingly similar words I&amp;rsquo;ve come across.&lt;/p&gt;&#xA;&lt;h2 id=&#34;认识-and-知道&#34;&gt;认识 and 知道&lt;/h2&gt;&#xA;&lt;p&gt;The difference is between knowing a person, 认识 (rènshí) and knowing a fact, 知道 (zhīdào).&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&lt;tr&gt;&#xA;  &lt;td&gt;&lt;b&gt;你认识她妈?&#xA;  &lt;td&gt;&lt;b&gt;你知道我很酷吗？&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;  &lt;td&gt;nǐ rènshí tā mā&#xA;  &lt;td&gt;nǐ zhīdào wǒ hěn kù mā&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;  &lt;td&gt;Do you know her?&#xA;  &lt;td&gt;Do you know I&#39;m cool?&#xA;&lt;/tr&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;正在-and-现在&#34;&gt;正在 and 现在&lt;/h2&gt;&#xA;&lt;p&gt;Both roughly mean &amp;ldquo;now&amp;rdquo; but 正在 (zhèngzài) means currently or in general and 现在 (xiànzài) means literally right at this moment.&lt;/p&gt;</description>
    </item>
    <item>
      <title>China Camp Trail Race Report: Things I Wish I Had Known</title>
      <link>/posts/2018/china-camp-trail-race-report/</link>
      <pubDate>Sun, 03 Jun 2018 18:44:49 +0000</pubDate>
      <guid>/posts/2018/china-camp-trail-race-report/</guid>
      <description>&lt;p&gt;Yesterday I ran Inside Trail&amp;rsquo;s &lt;a href=&#34;http://insidetrail.com/calendar/china-camp-trail-run/&#34;&gt;China Camp Trail&#xA;Run&lt;/a&gt;, my first trail&#xA;half. The course was good! The temperature was in the 80s but the course&#xA;offered lots of shade. It was mostly single track trails with a few friendly&#xA;mountain biker sightings. 1.5 miles into the race there was a nice steep 500ft&#xA;climb.&lt;/p&gt;&#xA;&lt;p&gt;As a beginner trail runner I want to share with you a few tips that I wish I&#xA;had heard before the race.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Understanding the Security of Cryptographic Hash Functions</title>
      <link>/posts/2018/understanding-security-cryptographic-hash-functions/</link>
      <pubDate>Mon, 16 Apr 2018 21:33:26 -0700</pubDate>
      <guid>/posts/2018/understanding-security-cryptographic-hash-functions/</guid>
      <description>&lt;p&gt;Hash functions are an extremely versatile tool that you can find nearly&#xA;everywhere in software engineering.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Bitcoin mining is done by &lt;a href=&#34;https://www.youtube.com/watch?v=bBC-nXj3Ng4&#34;&gt;repeatedly computing SHA256&#xA;hashes&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;git stores files internally using the SHA-1 hash of the content as the&#xA;filename (&lt;a href=&#34;https://en.wikipedia.org/wiki/Content-addressable_storage&#34;&gt;content-based&#xA;addressing&lt;/a&gt;).&lt;/li&gt;&#xA;&lt;li&gt;When you download an app, your phone verifies that the app you&amp;rsquo;re about to&#xA;run is the app you intended to download by computing a checksum (a hash of&#xA;the entire app) and comparing it to one provided by the app store. If the&#xA;values are different, that means someone might have changed the contents of&#xA;the app.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This article intends to give you a deeper understanding of cryptographic&#xA;hash functions, when to use them, and how to think about their security&#xA;properties.&lt;/p&gt;</description>
    </item>
    <item>
      <title>About</title>
      <link>/about/</link>
      <pubDate>Sun, 01 Apr 2018 21:14:42 -0700</pubDate>
      <guid>/about/</guid>
      <description>&lt;div class=&#34;split-when-wide&#34;&gt;&#xA;  &lt;div style=&#34;padding-right: 0.75em;&#34;&gt;&#xA;    &lt;p&gt;&#xA;      Hi, I&#39;m Jeff Carpenter, a software engineer living in San Francisco.&#xA;    &lt;/p&gt;&#xA;&#xA;    &lt;p&gt;&#xA;      I’m currently building frameworks for large-scale machine learning at&#xA;      Google. Prior to that I helped build out Waymo’s ML training and&#xA;      automation platform.&#xA;    &lt;/p&gt;&#xA;&#xA;    &lt;p&gt;&#xA;      Outside of work I&#39;m into &lt;a href=&#34;/categories/running/&#34;&gt;running&lt;/a&gt;,&#xA;      &lt;a href=&#34;/categories/books/&#34;&gt;books&lt;/a&gt;, and&#xA;      &lt;a href=&#34;/categories/chinese/&#34;&gt;learning&lt;/a&gt;&#xA;      &lt;a href=&#34;/categories/japanese/&#34;&gt;languages&lt;/a&gt;.&#xA;    &lt;/p&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div&gt;&#xA;    &lt;img alt=&#34;The author.&#34;&#xA;      src=&#34;/images/eljefe.jpg&#34;&#xA;      width=&#34;2048&#34;&gt;&#xA;    &lt;/img&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&lt;h2 id=&#34;elsewhere&#34;&gt;Elsewhere&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;These days I am most active on Threads: &lt;a href=&#34;http://threads.net/@jeffcarp&#34;&gt;@jeffcarp&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/jeffcarp&#34;&gt;GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.linkedin.com/in/jeffcarp/&#34;&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://jeffcarp.substack.com/&#34;&gt;Substack&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;best-of&#34;&gt;Best Of&lt;/h2&gt;&#xA;&lt;p&gt;Here are a few of my most read posts:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/posts/2019/markov-chain-python/&#34;&gt;Build a Markov Chain Sentence Generator in 20 lines of&#xA;Python&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/posts/2019/how-are-words-represented-in-machine-learning/&#34;&gt;How are Words Represented in Machine&#xA;Learning?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/posts/2018/how-to-solve-every-software-engineering-interview-question/&#34;&gt;How to Solve Every Software Engineering Interview&#xA;Question&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/posts/2018/understanding-security-cryptographic-hash-functions/&#34;&gt;Understanding the Security of Cryptographic Hash&#xA;Functions&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;current-side-projects&#34;&gt;Current Side Projects&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://chinesedict.fyi&#34;&gt;ChineseDict&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.appliedgradients.com/&#34;&gt;Applied Gradients&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;open-source&#34;&gt;Open Source&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I started &lt;a href=&#34;https://wpt.fyi/&#34;&gt;wpt.fyi&lt;/a&gt;, a data platform+dashboard for making browsers&#xA;more API compatible.&lt;/li&gt;&#xA;&lt;li&gt;I&amp;rsquo;m the maintainer of &lt;a href=&#34;https://github.com/jsdom/abab&#34;&gt;abab&lt;/a&gt;, a JavaScript&#xA;module for base64 with 8 million downloads weekly.&lt;/li&gt;&#xA;&lt;li&gt;Various contributions to&#xA;&lt;a href=&#34;https://github.com/chromium/chromium/commits?author=jeffcarp&#34;&gt;Chromium&lt;/a&gt; and Chromium infrastructure.&lt;/li&gt;&#xA;&lt;li&gt;Various contributions to&#xA;&lt;a href=&#34;https://github.com/jsdom/jsdom/commits?author=jeffcarp&#34;&gt;jsdom&lt;/a&gt;, a DOM emulation&#xA;library for JavaScript.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;!--&#xA;## Favorite&#xA;&#xA;- Bands: Air, Mild High Club, Vulfpeck, Yann Tiersen, Zero 7... my taste in music is basically the sountrack to the movie Garden State.&#xA;- Books (novels): Everything I Never Told You, A Little Life, The People in the Trees&#xA;- Books (non-fiction): Bad Blood, Salt Fat Acid Heat, The Manager&#39;s Path, Reinforcement Learning (Winder), A Year in Provence&#xA;- Movies: The Big Lebowski, Primer, Rushmore, Waking Life&#xA;--&gt;&#xA;&lt;h2 id=&#34;bookkeeping&#34;&gt;Bookkeeping&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The opinions expressed on this blog represent only my personal opinion and&#xA;not that of my current or past employers.&lt;/li&gt;&#xA;&lt;li&gt;Unless otherwise stated, all prose on this site is copyright under &lt;a href=&#34;https://creativecommons.org/licenses/by-nc-sa/4.0/&#34;&gt;CC&#xA;BY-NC-SA 4.0&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;All code is copyright under the &lt;a href=&#34;https://opensource.org/licenses/MIT&#34;&gt;MIT&#xA;License&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;things-i-revisit-every-so-often&#34;&gt;Things I Revisit Every so Often&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Yishan Wong, &lt;a href=&#34;http://algeri-wong.com/yishan/engineering-management.html&#34;&gt;Engineering Management&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;John Allspaw, &lt;a href=&#34;http://www.kitchensoap.com/2012/10/25/on-being-a-senior-engineer/&#34;&gt;On Being A Senior Engineer&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Dr. Richard W. Hamming, &lt;a href=&#34;https://www.youtube.com/watch?v=a1zDuOPkMSw&#34;&gt;You and Your Research&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;random-stuff&#34;&gt;Random Stuff&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/quotes/&#34;&gt;Quotes&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Playlists&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://open.spotify.com/playlist/0hdTC9DZY8d6qDEFKQ2AXZ&#34;&gt;Songs to Read to&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://open.spotify.com/playlist/7sJDSSueCpct0OoWLFJOLb&#34;&gt;Cabin Songs&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Thoughts on Stanford&#39;s CS255 Intro to Cryptography</title>
      <link>/posts/2018/cs255-cryptography/</link>
      <pubDate>Sat, 31 Mar 2018 12:31:22 -0700</pubDate>
      <guid>/posts/2018/cs255-cryptography/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve always been interested in Cryptography &amp;ndash; the field is a really compelling&#xA;marriage of beautiful mathematics with critical real-world applications.  Much&#xA;of the modern internet would not be possible without the clever math behind&#xA;asymmetric encryption.&lt;/p&gt;&#xA;&lt;p&gt;This Winter quarter I took &lt;a href=&#34;https://crypto.stanford.edu/~dabo/cs255/&#34;&gt;Stanford CS255: Introduction to&#xA;Cryptography&lt;/a&gt;. To be honest, it was&#xA;quite challenging as I was still working full time as a software engineer on&#xA;Chrome, and I was never that strong in the math department. However, I got a&#xA;ton out of this course and solidly recommend it to anyone interested. The&#xA;professor &amp;ndash; Dan Boneh &amp;ndash; was amazing and made the complex topics approachable.&#xA;He publishes the textbook for the course for free&#xA;&lt;a href=&#34;https://toc.cryptobook.us/book.pdf&#34;&gt;here&lt;/a&gt;. Here are some interesting things&#xA;I picked up from the course that I want to take with me.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New Blog, Who Dis?</title>
      <link>/posts/2018/new-blog-who-dis/</link>
      <pubDate>Fri, 30 Mar 2018 13:10:14 -0700</pubDate>
      <guid>/posts/2018/new-blog-who-dis/</guid>
      <description>&lt;p&gt;I updated the design of my blog and moved it from &lt;a href=&#34;https://jeff.is/&#34;&gt;jeff.is&lt;/a&gt;&#xA;to &lt;a href=&#34;https://www.jeffcarp.com/&#34;&gt;www.jeffcarp.com&lt;/a&gt;. The site&#xA;&lt;a href=&#34;https://jeff.is/&#34;&gt;jeff.is&lt;/a&gt; is still available, but I&amp;rsquo;ll be moving over content&#xA;shortly and setting up a redirect.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Export Evaluation Results in Tensorflow</title>
      <link>/posts/2018/export-evaulation-results-tensorflow/</link>
      <pubDate>Fri, 05 Jan 2018 21:33:26 -0700</pubDate>
      <guid>/posts/2018/export-evaulation-results-tensorflow/</guid>
      <description>&lt;p class=&#34;aside&#34;&gt;&#xA;  &lt;b&gt;2019 update:&lt;/b&gt; just a heads up, this post is about TensorFlow 1.x. For&#xA;  TensorFlow 2.x, you probably want to check out&#xA;  &lt;a href=&#34;https://www.tensorflow.org/guide/keras/custom_callback&#34;&gt;Keras custom&#xA;  callbacks&lt;/a&gt;.&#xA;&lt;/p&gt;&#xA;&lt;p&gt;In TensorFlow if you&amp;rsquo;re using a &lt;a href=&#34;https://www.tensorflow.org/api_docs/python/tf/estimator/Estimator&#34;&gt;&lt;code&gt;tf.estimator&lt;/code&gt;&lt;/a&gt; model, for instance &lt;a href=&#34;https://www.tensorflow.org/api_docs/python/tf/estimator/DNNLinearCombinedClassifier&#34;&gt;&lt;code&gt;tf.estimator.DNNLinearCombinedClassifier&lt;/code&gt;&lt;/a&gt;, and as part of your automated training infrastructure you want to save the evaluation results as a JSON file, it&amp;rsquo;s not super straightforward, so here&amp;rsquo;s how to do it.&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s say you define your &lt;code&gt;EvalSpec&lt;/code&gt; like this:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;eval_spec &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; tf&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;estimator&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;EvalSpec(eval_input_fn,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  steps&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;hparams&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;eval_steps,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  exporters&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;[exporter],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  name&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;eval&amp;#39;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;You&amp;rsquo;ll need to write a new exporter class that will take the &lt;code&gt;eval_result&lt;/code&gt; from your evaluation step and save it to a file using the &lt;code&gt;GFile&lt;/code&gt; API.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Goodbye 2017, Hello 2018</title>
      <link>/posts/2017/goodbye-2017-hello-2018/</link>
      <pubDate>Sun, 31 Dec 2017 21:33:26 -0700</pubDate>
      <guid>/posts/2017/goodbye-2017-hello-2018/</guid>
      <description>&lt;p&gt;Hi friends, here’s a quick overview of what I was up to this year.&lt;/p&gt;&#xA;&lt;h1 id=&#34;the-most-important-thing-that-happened-this-year&#34;&gt;The most important thing that happened this year&lt;/h1&gt;&#xA;&lt;p&gt;On a sunny day in August 2017, literally the smartest and most beautiful person&#xA;I know and I embarked on a beautiful trail run on Mt. Tamalpais in Marin that&#xA;ended on top of a mountain. Once we got to the summit, I asked her to marry me.&#xA;She said yes!!!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Example: Save and Load a TensorFlow Model</title>
      <link>/posts/2017/save-and-load-tensorflow-model/</link>
      <pubDate>Sun, 19 Nov 2017 19:07:30 +0000</pubDate>
      <guid>/posts/2017/save-and-load-tensorflow-model/</guid>
      <description>&lt;p class=&#34;aside&#34;&gt;&#xA;  &lt;b&gt;2020 update:&lt;/b&gt; just a heads up, this post is about TensorFlow 1.x. For&#xA;  TensorFlow 2.x, you probably want to check out&#xA;  &lt;a href=&#34;https://www.tensorflow.org/tutorials/keras/save_and_load&#34;&gt;this guide&#xA;  &lt;/a&gt;.&#xA;&lt;/p&gt;&#xA;&lt;p&gt;This post details how to save and load a TensorFlow model using the &lt;code&gt;DNNClassifier&lt;/code&gt; API.&lt;/p&gt;&#xA;&lt;p&gt;The key idea here is that you define a function or a class beforehand that takes a model directory (in which it will save and restore the model parameters), adds that to &lt;code&gt;RunConfig&lt;/code&gt;, and returns a &lt;code&gt;tf.contrib.learn.Estimator&lt;/code&gt;, for example, &lt;code&gt;tf.contrib.learn.DNNClassifier&lt;/code&gt;. See &lt;code&gt;make_estimator&lt;/code&gt; for more details.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Chrome Security Architecture</title>
      <link>/posts/2017/chrome-security-architecture/</link>
      <pubDate>Sun, 22 Oct 2017 19:07:30 +0000</pubDate>
      <guid>/posts/2017/chrome-security-architecture/</guid>
      <description>&lt;p&gt;While in Tokyo for&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PL9ioqAuyl6UK7Z0HHswBM5JgAp-izn_3S&#34;&gt;BlinkOn8&lt;/a&gt;,&#xA;a gathering for Blink and Chromium contributors, I gave a talk at a coding&#xA;school about the security architecture of Chromium. &lt;a href=&#34;https://bit.ly/chrome-sa-talk&#34;&gt;Here are the&#xA;slides&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m not an authority when it comes to security or specifically security in&#xA;Chrome, but I&amp;rsquo;m really interested in it and I hope this deck has some&#xA;information you find interesting as well.&lt;/p&gt;&#xA;&lt;iframe&#xA;    width=&#34;480&#34; height=&#34;300&#34;&#xA;    sandbox=&#34;allow-scripts allow-same-origin&#34;&#xA;    frameborder=&#34;0&#34;&#xA;    src=&#34;https://docs.google.com/presentation/d/e/2PACX-1vQYjvWdizWa8xl_EqRONOsZ2g36GZcGegX7ZD3QCFA3fED7cr7WVTy-O6bCQkACS2N1oPnaZpvMv7d8/embed?start=false&amp;loop=false&amp;delayms=3000&#34; /&gt;</description>
    </item>
    <item>
      <title>Mt. Rainier Backpacking Trip</title>
      <link>/posts/2017/mt-rainier-backpacking-trip/</link>
      <pubDate>Mon, 27 Feb 2017 00:00:00 +0000</pubDate>
      <guid>/posts/2017/mt-rainier-backpacking-trip/</guid>
      <description>&lt;p&gt;I went on a 7 day backpacking adventure around Mt. Rainier with two of my best&#xA;buds. Here&amp;rsquo;s the video.&lt;/p&gt;&#xA;&lt;iframe width=&#34;560&#34; height=&#34;315&#34;&#xA;src=&#34;https://www.youtube.com/embed/ZGWXyz_lgtU?si=VnL22cMSgUZW_0LM&#34;&#xA;title=&#34;YouTube video player&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay;&#xA;clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34;&#xA;referrerpolicy=&#34;strict-origin-when-cross-origin&#34; allowfullscreen&gt;&lt;/iframe&gt;</description>
    </item>
    <item>
      <title>2016 Year in Review</title>
      <link>/posts/2016/year-in-review/</link>
      <pubDate>Sat, 31 Dec 2016 15:39:13 -0700</pubDate>
      <guid>/posts/2016/year-in-review/</guid>
      <description>&lt;p&gt;2016 turned out to be a pretty crappy year, but it wasn’t all terrible. I made&#xA;some good progress on my personal goals, so there’s that. Here’s a review of my&#xA;2016. If this sort of post strikes you as excessive navel gazing, that’s&#xA;because it is — therefore I urge you to stop reading right now.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;My friends Doug &amp; Trip looking at Mt. Rainier&#34;&#xA;src=&#34;/images/2016-review-rainier.jpeg&#34; /&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;work&#34;&gt;Work&lt;/h2&gt;&#xA;&lt;p&gt;The theme for this year of my life is probably “insane amounts of learning.” In&#xA;the first half of 2016 I was at Braintree working on a new payments platform.&#xA;In August I joined the Google Chrome team.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Where Web Payments are Going</title>
      <link>/posts/2016/where-web-payments-are-going/</link>
      <pubDate>Sun, 31 Jul 2016 15:15:40 +0000</pubDate>
      <guid>/posts/2016/where-web-payments-are-going/</guid>
      <description>&lt;p&gt;I gave a talk at the SF Payments Engineers meetup about Web Payments. Here&amp;rsquo;s&#xA;the blogified version of that talk. Check out the &lt;a href=&#34;https://speakerdeck.com/jeffcarp/web-payments&#34;&gt;slides from my talk&#xA;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Mobile checkouts are a terrible experience for customers. Both consumers and&#xA;merchants are both feeling the pain. Mobile checkouts convert about 66%&#xA;worse than desktop checkouts.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;  &lt;img&#xA;    src=&#34;/images/2016/mobile-conversions.png&#34;&#xA;    alt=&#34;A presentation slide showing 66% fewer&#xA;conversions on mobile vs. desktop&#34;&gt;&#xA;  &lt;/img&gt;&#xA;  &lt;figcaption&gt;&#xA;    A slide from the PaymentRequest presentation at Google I/O 2016.&#xA;  &lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Part of the problem is that every company needs to build their own credit card&#xA;form. Checkouts range from great UX to terrible UX, but the heterogeneity is&#xA;what really makes it a pain for consumers.&lt;/p&gt;</description>
    </item>
    <item>
      <title>You are an engineering manager whether you realize it or not</title>
      <link>/posts/2016/you-are-an-engineering-manager/</link>
      <pubDate>Mon, 25 Jul 2016 21:33:26 -0700</pubDate>
      <guid>/posts/2016/you-are-an-engineering-manager/</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;&#xA;&lt;p&gt;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.&lt;/p&gt;</description>
    </item>
    <item>
      <title>2015 in 5 Themes</title>
      <link>/posts/2016/jeffs-2015-in-5-themes/</link>
      <pubDate>Mon, 11 Jan 2016 21:39:13 -0700</pubDate>
      <guid>/posts/2016/jeffs-2015-in-5-themes/</guid>
      <description>&lt;p&gt;Here are the 5 most defining themes of my 2015, in no particular order.&lt;/p&gt;&#xA;&lt;h1 id=&#34;1-scapula&#34;&gt;1. Scapula&lt;/h1&gt;&#xA;&lt;p&gt;I fractured my scapula (shoulder blade on my right side) on December 24, 2014&#xA;while skateboarding with my sister. I spent most of January 2015 resting and&#xA;recovering. Part of that meant starting physical therapy.&lt;/p&gt;&#xA;&lt;p&gt;PT was such a good influence on not just my scapula, but other parts of my&#xA;life, that I consider breaking my scapula a highly net positive life event.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Breaking the Cycle</title>
      <link>/posts/2015/breaking-the-cycle/</link>
      <pubDate>Sun, 29 Nov 2015 15:15:40 +0000</pubDate>
      <guid>/posts/2015/breaking-the-cycle/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve always been interested in running and looked up to friends who&amp;rsquo;ve trained for marathons or go running all the time. Running is great because it&amp;rsquo;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&amp;rsquo;m visiting).&lt;/p&gt;&#xA;&lt;p&gt;Throughout my life, however, I haven&amp;rsquo;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&amp;rsquo;t end up running much due to excessive heel pain (maybe I was growing too fast). In college I ran on and off &amp;ndash; I even &lt;a href=&#34;https://www.strava.com/activities/7640246/overview&#34;&gt;racked up 13.3 miles on a training run&lt;/a&gt; once &amp;ndash; but throughout college I had knee pain that kept me from training in any serious fashion.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wrist Upgrade: Suunto Ambit3</title>
      <link>/posts/2015/suunto-ambit3/</link>
      <pubDate>Sun, 25 Oct 2015 00:00:00 +0000</pubDate>
      <guid>/posts/2015/suunto-ambit3/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m not a huge runner but whenever I run I use&#xA;&lt;a href=&#34;https://www.strava.com/&#34;&gt;Strava&lt;/a&gt; for GPS tracking. I had been carrying my&#xA;phone with me while I ran, but since it&amp;rsquo;s on the larger side and I can&amp;rsquo;t easily&#xA;glance at it while I run, I looked into getting a watch with GPS + a heart rate&#xA;monitor. After some research, I decided on the Suunto Ambit3.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;The watch.&#34;&#xA;src=&#34;/images/2015/ambit3.jpg&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;Here are the things I like about it:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Reading Papers: Bufferbloat, SSL Warnings, Orleans, and more</title>
      <link>/posts/2015/reading-papers-bufferbloat-ssl-warnings-orleans/</link>
      <pubDate>Tue, 24 Mar 2015 00:00:00 +0000</pubDate>
      <guid>/posts/2015/reading-papers-bufferbloat-ssl-warnings-orleans/</guid>
      <description>&lt;p&gt;Inspired by the article &lt;a href=&#34;http://michaelrbernste.in/2014/10/21/should-i-read-papers.html&#34;&gt;&lt;em&gt;Should I read&#xA;papers?&lt;/em&gt;&lt;/a&gt; by&#xA;&lt;a href=&#34;http://michaelrbernste.in/&#34;&gt;Michael R. Bernstein&lt;/a&gt; and the amazing &lt;a href=&#34;http://paperswelove.org/&#34;&gt;Papers We&#xA;Love&lt;/a&gt; &lt;a href=&#34;https://github.com/papers-we-love/papers-we-love&#34;&gt;GitHub&#xA;repository&lt;/a&gt;, I set out at the&#xA;beginning of January 2015 with the goal of reading 15 academic papers. In this&#xA;post I want to share with you my notes for the 4 I loved the most.&lt;/p&gt;&#xA;&lt;h2 id=&#34;takeaways&#34;&gt;Takeaways&lt;/h2&gt;&#xA;&lt;p&gt;In a certain way reading papers is a comforting activity. In a world where the&#xA;front-end framework you&amp;rsquo;re using might be eclipsed in usefulness in 1 or 2&#xA;years, many of these papers present ideas that are as applicable today as they&#xA;were 43 years ago. Here are the publish dates of the 15 papers I read:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Visualizing JavaScript Project Structure</title>
      <link>/posts/2015/visualizing-javascript-project-structure/</link>
      <pubDate>Mon, 12 Jan 2015 00:00:00 +0000</pubDate>
      <guid>/posts/2015/visualizing-javascript-project-structure/</guid>
      <description>&lt;p&gt;Recently I thought to myself: fairly frequently I dive into a big JS codebase&#xA;and need to poke around for a while to get acquainted with the project&#xA;structure, wouldn&amp;rsquo;t it be nice if I could have a more visual way of seeing the&#xA;whole thing to make sense of it all?&lt;/p&gt;&#xA;&lt;p&gt;It was this need I was trying to fill when I embarked on my &lt;a href=&#34;https://www.braintreepayments.com/braintrust/walking-the-talk-open-dev-time-at-braintree&#34;&gt;open&#xA;dev&lt;/a&gt;&#xA;project last Friday. In this post I&amp;rsquo;ll try to walk through the steps I took so&#xA;you can replicate them. If you want to just to play with the final project,&#xA;it&amp;rsquo;s available as an npm module named &lt;code&gt;jsviz&lt;/code&gt; (npm:&#xA;&lt;a href=&#34;https://www.npmjs.com/package/jsviz&#34;&gt;jsviz&lt;/a&gt;, GitHub:&#xA;&lt;a href=&#34;https://github.com/jeffcarp/jsviz&#34;&gt;jeffcarp/jsviz&lt;/a&gt;).&lt;/p&gt;</description>
    </item>
    <item>
      <title>How System Calls Work</title>
      <link>/posts/2014/how-syscalls-work/</link>
      <pubDate>Thu, 18 Sep 2014 16:36:39 +0000</pubDate>
      <guid>/posts/2014/how-syscalls-work/</guid>
      <description>&lt;h2 id=&#34;why-should-you-care-about-syscalls&#34;&gt;Why should you care about syscalls?&lt;/h2&gt;&#xA;&lt;p&gt;As a web developer, learning about syscalls and the infrastructure around them&#xA;can make you feel quite a bit more confident in debugging and reasoning about&#xA;how systems will perform. Ruby and C++ both have their own idiomatic ways of&#xA;opening files, but in the end they both end up using the syscall &lt;code&gt;open()&lt;/code&gt;. This&#xA;is because userland processes (like web applications) have &lt;strong&gt;only one&lt;/strong&gt; way of&#xA;communicating with the operating system: syscalls.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Weird and Cool things from Linux Kernel Development</title>
      <link>/posts/2014/weird-and-cool-linux-kernel/</link>
      <pubDate>Fri, 12 Sep 2014 00:06:15 -0700</pubDate>
      <guid>/posts/2014/weird-and-cool-linux-kernel/</guid>
      <description>&lt;p&gt;Recently I picked up &lt;a href=&#34;http://www.amazon.com/Linux-Kernel-Development-3rd-Edition/dp/0672329468&#34;&gt;Linux Kernel&#xA;Development&lt;/a&gt;&#xA;by Robert Love since I like his posts on Quora. Here are the things that I&#xA;thought were cool or just surprised me.&lt;/p&gt;&#xA;&lt;h3 id=&#34;threaded-trees&#34;&gt;Threaded Trees&lt;/h3&gt;&#xA;&lt;p&gt;Are cool. They act both like trees and linked lists.&lt;/p&gt;&#xA;&lt;h3 id=&#34;child-processes-vs-threads&#34;&gt;Child processes vs Threads&lt;/h3&gt;&#xA;&lt;p&gt;The only difference between a child process and a thread in Linux is whether&#xA;the CLONE_VM flag was passed to clone(), which copies the parent&amp;rsquo;s address&#xA;space which allows the child to access the parent&amp;rsquo;s memory.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Unforseen Perks of Pair Programming</title>
      <link>/posts/2014/unforseen-perks-of-pair-programming/</link>
      <pubDate>Sun, 15 Jun 2014 19:03:46 +0000</pubDate>
      <guid>/posts/2014/unforseen-perks-of-pair-programming/</guid>
      <description>&lt;p&gt;As someone who had never pair programmed before, it was exciting to get thrown&#xA;into the deep end during my first week at Braintree where engineers pair nearly&#xA;100% of the time.&lt;/p&gt;&#xA;&lt;p&gt;The relative merits of pair programming have already been spoken about at&#xA;length.&lt;sup&gt;&lt;a href=&#34;#pair-1&#34;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&#34;#pair-2&#34;&gt;[2]&lt;/a&gt;&lt;/sup&gt;&#xA;This post is not an attempt to argue one way or another. Whether it works for&#xA;any organization is probably too context-dependent for any axioms I could lay&#xA;down.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Interviewing 2 Years in: What Worked</title>
      <link>/posts/2014/interviewing-2-years-in-what-worked/</link>
      <pubDate>Fri, 06 Jun 2014 00:00:00 +0000</pubDate>
      <guid>/posts/2014/interviewing-2-years-in-what-worked/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m almost pee-my-pants excited to announce that next week I&amp;rsquo;ll be joining the&#xA;team at &lt;a href=&#34;https://www.braintreepayments.com/&#34;&gt;Braintree&lt;/a&gt; and&#xA;&lt;a href=&#34;https://venmo.com/&#34;&gt;Venmo&lt;/a&gt; to work on their JavaScript SDK.&lt;/p&gt;&#xA;&lt;p&gt;Now that my job search is over, I want to share the lessons I learned from&#xA;interviewing as a software engineer 2 years into my career. Most of these are&#xA;not new (or specific to being 2 years into your career), but these points are&#xA;what specifically helped me the most.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Intro to Angular.js Talk</title>
      <link>/posts/2014/intro-to-angular-js-talk/</link>
      <pubDate>Mon, 28 Apr 2014 23:40:24 +0000</pubDate>
      <guid>/posts/2014/intro-to-angular-js-talk/</guid>
      <description>&lt;p&gt;On April 24 I gave a talk, Introduction to Angular.js, to the &lt;a href=&#34;https://www.meetup.com/html5livecode/events/173124562/&#34;&gt;SF HTML5 Live Code meetup group&lt;/a&gt;. Here&amp;rsquo;s the screencast:&lt;/p&gt;&#xA;&lt;iframe width=&#34;560&#34; height=&#34;315&#34;&#xA;src=&#34;https://www.youtube.com/embed/fK4DBauAfJs?si=t4wGVVkKpDpNg32S&#34;&#xA;title=&#34;YouTube video player&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay;&#xA;clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34;&#xA;referrerpolicy=&#34;strict-origin-when-cross-origin&#34; allowfullscreen&gt;&lt;/iframe&gt;</description>
    </item>
    <item>
      <title>Things learned while preparing for Angular Live Code</title>
      <link>/posts/2014/things-learned-preparing-for-angular-live-code/</link>
      <pubDate>Tue, 22 Apr 2014 00:00:00 +0000</pubDate>
      <guid>/posts/2014/things-learned-preparing-for-angular-live-code/</guid>
      <description>&lt;p&gt;This week I learned that there&amp;rsquo;s nothing quite like signing up to teach&#xA;something to make you realize you don&amp;rsquo;t actually know the material all that&#xA;well.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m giving an &lt;a href=&#34;http://www.meetup.com/html5livecode/events/173124562/&#34;&gt;introduction to AngularJS&#xA;talk&lt;/a&gt; this Thursday at&#xA;Startup House SF. You should come by if you want to learn about AngularJS.&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s Tuesday and 124 people have signed up and I&amp;rsquo;m kind of nervous to say the&#xA;least.  I&amp;rsquo;ve tried to channel my nervousness into preparation (we&amp;rsquo;ll see if it&#xA;pays off or not). Here are a few things I&amp;rsquo;ve learned in the process.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Prim&#39;s Algorithm in ClojureScript</title>
      <link>/posts/2014/prims-algorithm-in-clojurescript/</link>
      <pubDate>Sat, 05 Apr 2014 16:24:34 -0700</pubDate>
      <guid>/posts/2014/prims-algorithm-in-clojurescript/</guid>
      <description>&lt;video width=&#34;648&#34; height=&#34;360&#34; autoplay&gt;&#xA;   &lt;source src=&#34;/videos/prim.mov&#34; type=&#34;video/mp4&#34; /&gt;&#xA;&lt;/video&gt;&#xA;&lt;p&gt;If you want to jump to the animation in its natural habitat, &lt;a href=&#34;https://jeffcarp.github.io/maze&#34;&gt;see it&#xA;here&lt;/a&gt;. If you want to jump to the code: see the&#xA;&lt;a href=&#34;https://github.com/jeffcarp/maze/blob/gh-pages/maze.cljs&#34;&gt;ClojureScript&lt;/a&gt; or&#xA;&lt;a href=&#34;https://github.com/jeffcarp/maze/blob/c1e6d2641af8bd0767eec0531265b59d23e60e57/index.html#L26&#34;&gt;JavaScript&lt;/a&gt;&#xA;on GitHub.&lt;/p&gt;&#xA;&lt;p&gt;After being interested in maze generation and after checking out the &lt;a href=&#34;http://en.wikipedia.org/wiki/Maze_generation_algorithm&#34;&gt;Wikipedia page&lt;/a&gt;, I thought it&amp;rsquo;d be cool to implement one in JavaScript. After that, it looked like a good opportunity to try porting some JavaScript to ClojureScript.&lt;/p&gt;&#xA;&lt;p&gt;For the sake of brevity I&amp;rsquo;m leaving some of the more boilerplate functions out of this post. For the full code in each language, see the GitHub links above.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Two interesting IE JavaScript quirks</title>
      <link>/posts/2014/two-ie-js-quirks/</link>
      <pubDate>Fri, 14 Mar 2014 00:00:00 +0000</pubDate>
      <guid>/posts/2014/two-ie-js-quirks/</guid>
      <description>&lt;p&gt;In the past month I&amp;rsquo;ve diagnosed and fixed a couple particularly pernicious&#xA;bugs relating to JavaScript quirks in Internet Explorer. Hopefully if you&#xA;haven&amp;rsquo;t run into these before, this will save you some pain in the future.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-window-does-not-inherit-from-objectprototype&#34;&gt;1. &lt;code&gt;window&lt;/code&gt; does not inherit from &lt;code&gt;Object.prototype&lt;/code&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Oddly enough, according to the ECMAScript specification, the global &lt;code&gt;window&lt;/code&gt;&#xA;object does not necessarily have to inherit from &lt;code&gt;Object.prototype&lt;/code&gt;. In Chrome,&#xA;FF, and Safari, it does, but in IE it does not.&lt;/p&gt;</description>
    </item>
    <item>
      <title>JavaScript&#39;s Mutative vs. Non-Mutative Array Methods</title>
      <link>/posts/2014/mutative-vs-non-mutative-array-methods-in-js/</link>
      <pubDate>Thu, 20 Feb 2014 12:00:04 +0000</pubDate>
      <guid>/posts/2014/mutative-vs-non-mutative-array-methods-in-js/</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;&#xA;&lt;p&gt;First, let me define what I mean when I say mutative:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// If a method is mutative, that means it changes the original array.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;foo&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;foo&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;reverse&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;foo&lt;/span&gt;); &lt;span style=&#34;color:#75715e&#34;&gt;// [3, 2, 1]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Notice how we didn&amp;#39;t assign foo to new variable, reverse() acted upon it in place.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// In contrast, non-mutative array methods return a new copy of the original array.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Here, the new array concat() generates is lost since we didn&amp;#39;t assign it&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;bar&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;bar&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;concat&lt;/span&gt;([&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;bar&lt;/span&gt;); &lt;span style=&#34;color:#75715e&#34;&gt;// [1, 2, 3]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Now if we assign it, bar becomes the new array.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;bar&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;bar&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;concat&lt;/span&gt;([&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;bar&lt;/span&gt;); &lt;span style=&#34;color:#75715e&#34;&gt;// [1, 2, 3, 4, 5]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;table&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;th&gt;Mutative&lt;/th&gt;&#xA;    &lt;th&gt;Non-Mutative&lt;/th&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;&lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice&#34;&gt;splice&lt;/a&gt;&lt;/td&gt;&#xA;    &lt;td&gt;&lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice&#34;&gt;slice&lt;/a&gt;&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;&lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/unshift&#34;&gt;shift&lt;/a&gt;, &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/pop&#34;&gt;pop&lt;/a&gt;&lt;/td&gt;&#xA;    &lt;td&gt;&lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat&#34;&gt;concat&lt;/a&gt;&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;&lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/unshift&#34;&gt;unshift&lt;/a&gt;, &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push&#34;&gt;push&lt;/a&gt;&lt;/td&gt;&#xA;    &lt;td&gt;&lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every&#34;&gt;every&lt;/a&gt; *&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;&lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse&#34;&gt;reverse&lt;/a&gt;&lt;/td&gt;&#xA;    &lt;td&gt;&lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter&#34;&gt;filter&lt;/a&gt; *&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;&lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort&#34;&gt;sort&lt;/a&gt;&lt;/td&gt;&#xA;    &lt;td&gt;&lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach&#34;&gt;forEach&lt;/a&gt; *&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;&lt;/td&gt;&#xA;    &lt;td&gt;&lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf&#34;&gt;indexOf&lt;/a&gt;&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;&lt;/td&gt;&#xA;    &lt;td&gt;&lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf&#34;&gt;lastIndexOf&lt;/a&gt;&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;&lt;/td&gt;&#xA;    &lt;td&gt;&lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/join&#34;&gt;join&lt;/a&gt;&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;&lt;/td&gt;&#xA;    &lt;td&gt;&lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map&#34;&gt;map&lt;/a&gt; *&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;&lt;/td&gt;&#xA;    &lt;td&gt;&lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce&#34;&gt;reduce&lt;/a&gt; *&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;&lt;/td&gt;&#xA;    &lt;td&gt;&lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduceRight&#34;&gt;reduceRight&lt;/a&gt; *&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;&lt;/td&gt;&#xA;    &lt;td&gt;&lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some&#34;&gt;some&lt;/a&gt; *&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;&lt;/td&gt;&#xA;    &lt;td&gt;&lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toLocaleString&#34;&gt;toLocaleString&lt;/a&gt;&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;&lt;/td&gt;&#xA;    &lt;td&gt;&lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toString&#34;&gt;toString&lt;/a&gt;&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;NB: the functional methods marked with a * can be mutative if the function you pass to them modifies the original array. In my expierience this has been especially true in the case of Array.prototype.forEach.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hello World, Again</title>
      <link>/posts/2014/hello-world-again/</link>
      <pubDate>Sat, 08 Feb 2014 00:00:00 +0000</pubDate>
      <guid>/posts/2014/hello-world-again/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve tried numerous times to start a consistently updated blog. The main&#xA;deterring factor is that any time I go back and read my writing from a&#xA;week/month/year ago, I cringe.&lt;/p&gt;&#xA;&lt;p&gt;Maybe the reason I cringe is because I was blogging for the wrong reasons.&lt;/p&gt;&#xA;&lt;p&gt;This isn&amp;rsquo;t the part where I start pontificating what blogging should be about,&#xA;but I think what motivated me before was some vague need to toot my own horn,&#xA;or (god forbid) build by &amp;ldquo;personal brand.&amp;rdquo;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Japanese Programming</title>
      <link>/posts/2013/japanese-programming/</link>
      <pubDate>Mon, 25 Feb 2013 00:00:00 +0000</pubDate>
      <guid>/posts/2013/japanese-programming/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m certainly guilty of being a little to anglo-centric from time to time&#xA;(pizza is an American food, right?), so I was pleasantly surprised when I found&#xA;out that you can program in languages other than English. You can see the full&#xA;list on&#xA;&lt;a href=&#34;http://en.wikipedia.org/wiki/Non-English-based_programming_languages&#34;&gt;Wikipedia&lt;/a&gt;.&#xA;Since I&amp;rsquo;m into both computers and Japan, I thought I&amp;rsquo;d give a few of them a&#xA;spin.&lt;/p&gt;&#xA;&lt;h2 id=&#34;dolittle-ドリトル&#34;&gt;Dolittle ドリトル&lt;/h2&gt;&#xA;&lt;p&gt;According to its &lt;a&#xA;href=&#34;http://ja.wikipedia.org/wiki/%E3%83%89%E3%83%AA%E3%83%88%E3%83%AB_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)&#34;&gt;Wikipedia&#xA;page&lt;/a&gt;, Dolittle is a programming language for education developed by &lt;a href=&#34;http://ja.wikipedia.org/wiki/%E5%A4%A7%E9%98%AA%E9%9B%BB%E6%B0%97%E9%80%9A%E4%BF%A1%E5%A4%A7%E5%AD%A6&#34;&gt;Osaka&#xA;Electro-Communication&#xA;University&lt;/a&gt;.&#xA;Its creators called it Dolittle because they wanted to make a programming&#xA;language that made it very easy to start programming.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pechakucha Waterville Talk</title>
      <link>/posts/2012/pechakucha-waterville-talk/</link>
      <pubDate>Tue, 01 May 2012 16:33:54 -0700</pubDate>
      <guid>/posts/2012/pechakucha-waterville-talk/</guid>
      <description>&lt;p&gt;Here&amp;rsquo;s the talk I gave at Pechakucha Waterville my senior year at Colby&#xA;College. I talk about my filmmaking and quantified-self pursuits during&#xA;my time at Colby.&lt;/p&gt;&#xA;&lt;div style=&#34;padding:62.5% 0 0 0;position:relative;&#34;&gt;&lt;iframe&#xA;src=&#34;https://player.vimeo.com/video/45269109?badge=0&amp;amp;autopause=0&amp;amp;player_id=0&amp;amp;app_id=58479&#34;&#xA;frameborder=&#34;0&#34; allow=&#34;autoplay; fullscreen; picture-in-picture;&#xA;clipboard-write; encrypted-media&#34;&#xA;style=&#34;position:absolute;top:0;left:0;width:100%;height:100%;&#34; title=&#34;Jeff&#xA;Carpenter at PechaKucha Night Waterville vol. 7&#34;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;script&#xA;src=&#34;https://player.vimeo.com/api/player.js&#34;&gt;&lt;/script&gt;</description>
    </item>
    <item>
      <title>Ueno Zoo 上野動物園</title>
      <link>/posts/2012/ueno-zoo/</link>
      <pubDate>Tue, 07 Feb 2012 00:00:00 +0000</pubDate>
      <guid>/posts/2012/ueno-zoo/</guid>
      <description>&lt;p&gt;Yes, it is February and I am back in Maine. But the tale of my stay in Japan&#xA;has not been completely told.&lt;/p&gt;&#xA;&lt;p&gt;On a warmer-than-normal day in late January, my Colby friend Stephanie and I&#xA;ventured up to Ueno to visit the famous Ueno zoo.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;ueno-zoo-map-z3.png&#34; alt=&#34;A map of Ueno Zoo.&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;ueno-zoo-map-z10.png&#34; alt=&#34;A map of Ueno Zoo.&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Our first stop was naturally the panda exhibit.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img&#xA;alt=&#34;A sleepy panda.&#34;&#xA;src=&#34;https://live.staticflickr.com/7025/6838407945_0328fe17f0_k_d.jpg&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img&#xA;alt=&#34;The same sleepy panda.&#34;&#xA;src=&#34;https://live.staticflickr.com/7170/6838400965_cd5dcb7424_k_d.jpg&#34; /&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tsukiji Fish Market 築地市場</title>
      <link>/posts/2012/tsukiji-fish-market/</link>
      <pubDate>Thu, 02 Feb 2012 00:00:00 +0000</pubDate>
      <guid>/posts/2012/tsukiji-fish-market/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;map-z10.png&#34; alt=&#34;A map of Tsukiji.&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Located in the middle of Tokyo, &lt;a href=&#34;http://en.wikipedia.org/wiki/Tsukiji_fish_market&#34;&gt;Tsukiji Fish&#xA;Market&lt;/a&gt;, or &lt;em&gt;tsukiji uchiba&lt;/em&gt;&#xA;(築地市場), is the biggest fish market in the world. On my last weekend I woke&#xA;up early in the morning and headed over there with my Colby friend.&lt;/p&gt;&#xA;&lt;p class=&#34;aside&#34;&gt;&#xA;  &lt;b&gt;Editor&#39;s note:&lt;/b&gt; Tsukiji&#xA;  &lt;a href=&#34;https://en.wikipedia.org/wiki/Tsukiji_fish_market&#34;&gt;closed down in 2018&lt;/a&gt;&#xA;  and moved to &lt;a href=&#34;https://en.wikipedia.org/wiki/Toyosu_Market&#34;&gt;Toyosu&lt;/a&gt;&#xA;  for the 2020 Olympics.&#xA;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://farm8.staticflickr.com/7159/6777425599_601bf6bbb5_b.jpg&#34; alt=&#34;Inside the inner market.&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The market is filled with more sea life than an aquarium, although calling it&#xA;sea &amp;ldquo;life&amp;rdquo; might be a little misleading.&lt;/p&gt;</description>
    </item>
    <item>
      <title>January in Japan</title>
      <link>/posts/2012/january-in-japan/</link>
      <pubDate>Wed, 01 Feb 2012 00:00:00 +0000</pubDate>
      <guid>/posts/2012/january-in-japan/</guid>
      <description>&lt;p&gt;I spent January 2012 Tokyo, Japan interning at a Japanese advertising agency.&#xA;Beforehand I spent some time in Osaka and Kyoto, the region where I &lt;a href=&#34;/posts/2011/study-abroad-osaka-japan/&#34;&gt;studied&#xA;abroad in 2010&lt;/a&gt;. Here are some highlights&#xA;of my travels.&lt;/p&gt;&#xA;&lt;h3 id=&#34;kiyomizudera-清水寺&#34;&gt;Kiyomizudera 清水寺&lt;/h3&gt;&#xA;&lt;p&gt;Kiyomizu is one of the oldest, most beautiful, and most popular temples in&#xA;Kyoto. It was constructed entirely without the use of nails. Legend has it that&#xA;if you jump off the deck and survive the 13 meter fall, your life dream will&#xA;come true. &lt;br/&gt;&#xA;&lt;a href=&#34;/posts/2012/kiyomizu-temple/&#34;&gt;Full post here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tokyo Tower 東京タワー</title>
      <link>/posts/2012/tokyo-tower/</link>
      <pubDate>Fri, 27 Jan 2012 12:54:51 -0700</pubDate>
      <guid>/posts/2012/tokyo-tower/</guid>
      <description>&lt;!-- TODO: save higher-res photos locally --&gt;&#xA;&lt;p&gt;Come on, did you think I was going to be in Tokyo for a month and not do the&#xA;most touristy thing you could possibly do in Tokyo - go up Tokyo Tower?&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;map-z10.png&#34; alt=&#34;A map of Tokyo Tower.&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://farm8.staticflickr.com/7012/6769996899_476225f55a.jpg&#34; alt=&#34;Sitting before Tokyo tower is the Buddhist temple Zōjō-ji.&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://farm8.staticflickr.com/7002/6769997111_9145069ff7.jpg&#34; alt=&#34;Sitting before Tokyo tower is a fairly large temple, and in the temple&amp;rsquo;s garden is an installation of hundreds of little stone children, all holding a pinwheel.&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Nara 奈良</title>
      <link>/posts/2012/nara/</link>
      <pubDate>Sat, 07 Jan 2012 12:54:51 -0700</pubDate>
      <guid>/posts/2012/nara/</guid>
      <description>&lt;p&gt;I have to preface this post with my extreme gratitude for my friend Shintaro&amp;rsquo;s&#xA;family, who hosted me for the new year &lt;em&gt;oshōgatsu&lt;/em&gt; お正月 and took me on&#xA;their &lt;em&gt;hatsumōde&lt;/em&gt; 初詣. I can&amp;rsquo;t thank them enough for their hospitality.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Hatsumōde&lt;/em&gt; is the practice of going to a shrine or temple on the first&#xA;few days of the year. For Shintaro&amp;rsquo;s family&amp;rsquo;s &lt;em&gt;hatsumōde&lt;/em&gt;, we went to&#xA;Nara.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;map-z3.png&#34; alt=&#34;A map of Nara.&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fushimi Inari-taisha 伏見稲荷大社</title>
      <link>/posts/2012/fushimi-inari-taisha-shrine/</link>
      <pubDate>Thu, 05 Jan 2012 12:54:51 -0700</pubDate>
      <guid>/posts/2012/fushimi-inari-taisha-shrine/</guid>
      <description>&lt;p&gt;&lt;span style=&#34;font-size:2em;&#34;&gt;伏見&lt;/span&gt;&#xA;&lt;a href=&#34;http://en.wikipedia.org/wiki/Fushimi-ku,_Kyoto&#34;&gt;&lt;em&gt;Fushimi&lt;/em&gt;&lt;/a&gt;&#xA;is the ward of Kyoto where this shrine is located.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span style=&#34;font-size:2em;&#34;&gt;稲荷&lt;/span&gt;&#xA;&lt;a href=&#34;http://en.wikipedia.org/wiki/Inari_(god)&#34;&gt;&lt;em&gt;Inari&lt;/em&gt;&lt;/a&gt;&#xA;is the Shinto deity to whom this shrine is dedicated.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span style=&#34;font-size:2em;&#34;&gt;大社&lt;/span&gt;&#xA;&lt;a href=&#34;http://jisho.org/kanji/details/%E5%A4%A7%E7%A4%BE&#34;&gt;&lt;em&gt;Taisha&lt;/em&gt;&lt;/a&gt;&#xA;means &amp;ldquo;big shrine.&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;On the last day of the year, I got the chance to go back to Kyoto to see a&#xA;couple more shrines. There was one left that I needed to hit. (And by &amp;lsquo;one&amp;rsquo;, I&#xA;mean over a thousand).&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;map-z3.png&#34; alt=&#34;A map of Fushimi Inari.&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kiyomizu Temple 清水寺</title>
      <link>/posts/2012/kiyomizu-temple/</link>
      <pubDate>Tue, 03 Jan 2012 12:54:51 -0700</pubDate>
      <guid>/posts/2012/kiyomizu-temple/</guid>
      <description>&lt;!--TODO remove links to flickr images --&gt;&#xA;&lt;p&gt;After arriving at Hirakata and sleeping in late, my friends and I went to Kyoto&#xA;to see Kiyomizu temple. 清水寺 (kiyomizu-dera) was one of the places I wanted&#xA;to go while I was &lt;a href=&#34;/posts/2011/study-abroad-osaka-japan/&#34;&gt;studying abroad there in&#xA;2010&lt;/a&gt;, but never got the chance.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;map-z10.png&#34; alt=&#34;A map of Kiyomizu.&#34;&gt;&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;figure&gt;&#xA;  &lt;amp-img&#xA;    alt=&#34;Study abroad friends who joined me.&#34;&#xA;    src=&#34;/posts/2012/kiyomizu-temple/6620073203_3ce74fc13e_k_d.jpg&#34;&#xA;    width=&#34;2048&#34;&#xA;    height=&#34;1365&#34;&#xA;    class=&#34;&#34;&#xA;    lightbox&#xA;    layout=&#34;responsive&#34;&gt;&#xA;  &lt;/amp-img&gt;&#xA;  &lt;figcaption&gt;Study abroad friends who joined me.&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&#34;http://en.wikipedia.org/wiki/Kiyomizu-dera&#34;&gt;Kiyomizu&lt;/a&gt; is one of the&#xA;most popular temples in Kyoto along with the &lt;a&#xA;href=&#34;http://en.wikipedia.org/wiki/Kinkaku-ji&#34;&gt;Kinkaku-ji&lt;/a&gt; (Golden&#xA;Pavilion). The impression I got is that Kiyomizu is all about making dreams&#xA;come true (not in the Disney theme park sense).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Osaka Aquarium 海遊館</title>
      <link>/posts/2012/osaka-aquarium/</link>
      <pubDate>Tue, 03 Jan 2012 12:54:51 -0700</pubDate>
      <guid>/posts/2012/osaka-aquarium/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;The Osaka Aquarium.&#34;&#xA;src=&#34;https://live.staticflickr.com/7021/6625494589_1ceb364599_c_d.jpg&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;Osaka Aquarium is called the &amp;ldquo;Kaiyukan,&amp;rdquo; or sea 海 play 遊 building 館. I&#xA;noticed two main differences between American aquariums and the Kaiyukan.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;All of the sea life at the Kaiyukan was really happy and lively. I don&amp;rsquo;t&#xA;know what they feed the animals, but it&amp;rsquo;s working.&lt;/li&gt;&#xA;&lt;li&gt;They have a penguin parade.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Several times a day, the staff will waddle a gaggle of penguins around a the&#xA;front of the Kaiyukan. I came to the conclusion that this kind of thing&#xA;couldn&amp;rsquo;t happen in America because too many people like me would be tempted to&#xA;steal one.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Study Abroad in Japan</title>
      <link>/posts/2011/study-abroad-osaka-japan/</link>
      <pubDate>Mon, 03 Jan 2011 12:54:51 -0700</pubDate>
      <guid>/posts/2011/study-abroad-osaka-japan/</guid>
      <description>&lt;p&gt;In Fall 2010 I studied abroad at Kansai Gaidai University. It was an awesome&#xA;experience. Here&amp;rsquo;s a video I made about it.&lt;/p&gt;&#xA;&lt;iframe width=&#34;560&#34; height=&#34;315&#34;&#xA;src=&#34;https://www.youtube.com/embed/EiA2znoR57U?si=gdj9U9H9ybqqsx5Y&#34;&#xA;title=&#34;YouTube video player&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay;&#xA;clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34;&#xA;referrerpolicy=&#34;strict-origin-when-cross-origin&#34; allowfullscreen&gt;&lt;/iframe&gt;</description>
    </item>
    <item>
      <title>Huge Snow</title>
      <link>/posts/2010/huge-snow/</link>
      <pubDate>Wed, 21 Apr 2010 00:00:00 +0000</pubDate>
      <guid>/posts/2010/huge-snow/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve been having a warm, sunny spring here in Maine, so it was a surprise a&#xA;couple days ago when a huge snowstorm hit out of nowhere. The snow lasted for&#xA;about half a day, and then it returned to being sunny and nice.&lt;/p&gt;&#xA;&lt;iframe width=&#34;560&#34; height=&#34;315&#34;&#xA;src=&#34;https://www.youtube.com/embed/W-FIQZJqXjI?si=CZmZZXXHoXy7LVGG&#34;&#xA;title=&#34;YouTube video player&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay;&#xA;clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34;&#xA;referrerpolicy=&#34;strict-origin-when-cross-origin&#34; allowfullscreen&gt;&lt;/iframe&gt;</description>
    </item>
    <item>
      <title>NPR Station Summer Internship Recap</title>
      <link>/posts/2010/npr-summer-internship-recap/</link>
      <pubDate>Wed, 21 Apr 2010 00:00:00 +0000</pubDate>
      <guid>/posts/2010/npr-summer-internship-recap/</guid>
      <description>&lt;p&gt;This summer I interned in the news desk at WBUR, an NPR station in Boston known&#xA;for Car Talk and Here &amp;amp; Now. Here are some videos I helped produce.&lt;/p&gt;&#xA;&lt;iframe width=&#34;560&#34; height=&#34;315&#34;&#xA;src=&#34;https://www.youtube.com/embed/clxuMrVFYT0?si=dLw69DL778iRwVYo&#34;&#xA;title=&#34;YouTube video player&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay;&#xA;clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34;&#xA;referrerpolicy=&#34;strict-origin-when-cross-origin&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;iframe width=&#34;560&#34; height=&#34;315&#34;&#xA;src=&#34;https://www.youtube.com/embed/fep_zjd2SFg?si=3V3VrCUczSPVFI7d&#34;&#xA;title=&#34;YouTube video player&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay;&#xA;clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34;&#xA;referrerpolicy=&#34;strict-origin-when-cross-origin&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;iframe width=&#34;560&#34; height=&#34;315&#34;&#xA;src=&#34;https://www.youtube.com/embed/lbXM7_oUXfA?si=UziayeMFqDWKdLY-&#34;&#xA;title=&#34;YouTube video player&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay;&#xA;clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34;&#xA;referrerpolicy=&#34;strict-origin-when-cross-origin&#34; allowfullscreen&gt;&lt;/iframe&gt;</description>
    </item>
    <item>
      <title>Newsletter</title>
      <link>/newsletter/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/newsletter/</guid>
      <description>&lt;p&gt;Sign up for my &lt;s&gt;monthly-ish&lt;/s&gt; sporadic newsletter containing:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The best couple things I read this month&lt;/li&gt;&#xA;&lt;li&gt;Updates on personal projects&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;View &lt;a href=&#34;https://jeffcarp.substack.com/&#34;&gt;previous newsletters here&lt;/a&gt;, and my&#xA;earlier &lt;a href=&#34;https://tinyletter.com/jeffcarp/archive&#34;&gt;TinyLetter posts here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Quotes</title>
      <link>/quotes/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/quotes/</guid>
      <description>&lt;style&gt;&#xA;blockquote p {&#xA;    font-size: 1.2em;&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;To bear up under loss, to fight the bitterness of defeat and the weakness of&#xA;grief, to be victor over anger, to smile when tears are close, to resist evil&#xA;men and base instincts, to hate hate and to love love, to go on when it would&#xA;seem good to die, to seek ever after the glory and the dream, to look up with&#xA;unquenchable faith in something evermore about to be, that is what any man can&#xA;do, and so be great.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
