<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Andrew Liu's Blog]]></title><description><![CDATA[Welcome to Costco, I love you.]]></description><link>https://www.liu.blog</link><image><url>https://substackcdn.com/image/fetch/$s_!KqfF!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4006949f-a59a-47ff-a70f-41e9859b3ac9_1280x1280.png</url><title>Andrew Liu&apos;s Blog</title><link>https://www.liu.blog</link></image><generator>Substack</generator><lastBuildDate>Sat, 16 May 2026 18:53:33 GMT</lastBuildDate><atom:link href="https://www.liu.blog/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Andrew Liu]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[woke@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[woke@substack.com]]></itunes:email><itunes:name><![CDATA[Andrew Liu]]></itunes:name></itunes:owner><itunes:author><![CDATA[Andrew Liu]]></itunes:author><googleplay:owner><![CDATA[woke@substack.com]]></googleplay:owner><googleplay:email><![CDATA[woke@substack.com]]></googleplay:email><googleplay:author><![CDATA[Andrew Liu]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Don't live on autopilot]]></title><description><![CDATA[A framework for what deserves your attention.]]></description><link>https://www.liu.blog/p/autopilot</link><guid isPermaLink="false">https://www.liu.blog/p/autopilot</guid><dc:creator><![CDATA[Andrew Liu]]></dc:creator><pubDate>Fri, 01 May 2026 03:35:08 GMT</pubDate><enclosure url="https://images.unsplash.com/photo-1624933796245-4b07a2ae0cbf?fm=jpg&amp;q=60&amp;w=3000&amp;auto=format&amp;fit=crop&amp;ixlib=rb-4.1.0&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The first week I started at Scale AI, I had a chat with Alex the CEO about whether Scale was already a &#8220;successful startup.&#8221; He predicted that if the company were to operate on autopilot without him around, it would fall into a downward spiral before ultimately imploding.</p><p>I kept revisiting this thought experiment because it applies to life in general. Your life is a startup; it can crash and burn. So I repurposed it into a recipe for how to live.</p><p>All you need to do is ask yourself a similar question: <strong>in my life, what would fail if left on autopilot?</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1624933796245-4b07a2ae0cbf?fm=jpg&amp;q=60&amp;w=3000&amp;auto=format&amp;fit=crop&amp;ixlib=rb-4.1.0&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://images.unsplash.com/photo-1624933796245-4b07a2ae0cbf?fm=jpg&amp;q=60&amp;w=3000&amp;auto=format&amp;fit=crop&amp;ixlib=rb-4.1.0&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D 424w, https://images.unsplash.com/photo-1624933796245-4b07a2ae0cbf?fm=jpg&amp;q=60&amp;w=3000&amp;auto=format&amp;fit=crop&amp;ixlib=rb-4.1.0&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D 848w, https://images.unsplash.com/photo-1624933796245-4b07a2ae0cbf?fm=jpg&amp;q=60&amp;w=3000&amp;auto=format&amp;fit=crop&amp;ixlib=rb-4.1.0&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D 1272w, https://images.unsplash.com/photo-1624933796245-4b07a2ae0cbf?fm=jpg&amp;q=60&amp;w=3000&amp;auto=format&amp;fit=crop&amp;ixlib=rb-4.1.0&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1624933796245-4b07a2ae0cbf?fm=jpg&amp;q=60&amp;w=3000&amp;auto=format&amp;fit=crop&amp;ixlib=rb-4.1.0&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" width="728" height="485.3333333333333" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1624933796245-4b07a2ae0cbf?fm=jpg&amp;q=60&amp;w=3000&amp;auto=format&amp;fit=crop&amp;ixlib=rb-4.1.0&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:2000,&quot;width&quot;:3000,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;brown wooden canoe on brown soil&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="brown wooden canoe on brown soil" title="brown wooden canoe on brown soil" srcset="https://images.unsplash.com/photo-1624933796245-4b07a2ae0cbf?fm=jpg&amp;q=60&amp;w=3000&amp;auto=format&amp;fit=crop&amp;ixlib=rb-4.1.0&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D 424w, https://images.unsplash.com/photo-1624933796245-4b07a2ae0cbf?fm=jpg&amp;q=60&amp;w=3000&amp;auto=format&amp;fit=crop&amp;ixlib=rb-4.1.0&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D 848w, https://images.unsplash.com/photo-1624933796245-4b07a2ae0cbf?fm=jpg&amp;q=60&amp;w=3000&amp;auto=format&amp;fit=crop&amp;ixlib=rb-4.1.0&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D 1272w, https://images.unsplash.com/photo-1624933796245-4b07a2ae0cbf?fm=jpg&amp;q=60&amp;w=3000&amp;auto=format&amp;fit=crop&amp;ixlib=rb-4.1.0&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Don&#8217;t be like this plane.</figcaption></figure></div><h1>Boiling the frog (you are the frog)</h1><p>Major failure modes in life come from boiling the frog: <em>you don&#8217;t notice the problem until it&#8217;s too late</em>. Imagine what your life looks like 10 years out. Some areas will be fine, but others area will suffer. If you were to change nothing, where does your life go?</p><p>Some things in life feel like a big deal right now but aren&#8217;t actually important. Conversely, the real priorities can be a big deal later while barely being noticeable in the moment. But you should focus on them now.</p><p>Why do important life domains rarely feel like a big deal in the present? <strong>Because they either compound, or they expire.</strong></p><h2>Compounding Domains</h2><ul><li><p><strong>Finances:</strong> Money can snowball in either direction. Crippling debt can keep you trapped for the rest of your life, while smart financial habits allow you to retire early. You don&#8217;t want to be the recently-laid-off 60-year-old with a mortgage and no savings.</p></li><li><p><strong>Physical health:</strong> Muscle growth peaks at a relatively early age and slows down. The same happens with agility. Your physical fitness influences your longevity, and improving your fitness becomes harder when you&#8217;re old or unhealthy. The best way to be healthy when you&#8217;re old is to be healthy when you&#8217;re young.</p></li><li><p><strong>Friendship:</strong> Quality friendships are key to wellbeing. But friendships atrophy and drift apart because people are too &#8220;busy,&#8221; and people complain that it&#8217;s hard to make friends as adults.</p></li></ul><h2>Expiring Domains</h2><ul><li><p><strong>Dating and marriage:</strong> Dating gets harder as you age. On average, people become less attractive and more set in their ways. Fertility goes down, and it becomes harder to meet people. Yet who you partner with is arguably the most important decision of your life.</p></li><li><p><strong>Travel and experiences:</strong> You may not have the ability to travel later in life. This may be due to physical health, energy levels, or from other life obligations. So do it while you can. Money is fungible; experiences less so.</p></li><li><p><strong>Geographic optionality:</strong> Avoid putting down roots until you&#8217;re confident you want to stay somewhere for the long term. Homeownership is often treated like a checkbox rather than a choice. Far too often, people never move (or stay in their hometown), which closes off many opportunities.</p></li></ul><p>None of these <em>feel</em> urgent in the moment, but they are. By the time it&#8217;s obvious, the ship has already sailed. That&#8217;s why it&#8217;s important to be vigilant of these failure modes while they don&#8217;t feel like a big deal.</p><h1>What should you be doing right now?</h1><ol><li><p>Identify parts of your life that are operating on autopilot. Which ones are projected to fail? <em>The parts of life that fail on autopilot are where your attention is most needed.</em></p></li><li><p>Select the highest priority part of your life that&#8217;s on track to fail. You can only really fix one or two things at a time. When prioritizing, ask: What will expire soon? What will compound the most? What will be hard to reverse?</p></li><li><p>Focus your attention on the most important &#8220;autopilot failure mode,&#8221; and intervene until you&#8217;re happy with its trajectory. </p></li><li><p>Systematize that part of your life (i.e. build good habits) so it won&#8217;t regress the moment you divert your attention elsewhere.</p></li><li><p>Repeat the process.</p></li></ol><p>Another way to describe this is to &#8220;find the ticking time bomb and defuse it.&#8221; Most lives don&#8217;t fail in the conventional sense. They just pass by until options quietly disappear. So your job is to notice what won&#8217;t fix itself and act before it&#8217;s too late.</p>]]></content:encoded></item><item><title><![CDATA[A simple financial setup guide for clueless high income earners]]></title><description><![CDATA[Do you have a bunch of cash sitting in a high-yield savings account? And you have no idea what to do with it? Well this blog post is for you!]]></description><link>https://www.liu.blog/p/voo-and-chill</link><guid isPermaLink="false">https://www.liu.blog/p/voo-and-chill</guid><dc:creator><![CDATA[Andrew Liu]]></dc:creator><pubDate>Sun, 08 Mar 2026 04:28:43 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!fZlW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66bb94a8-a51c-4cf0-9719-7429a585717f_2192x2192.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This blog post was inspired by a couple of friends and coworkers figuring out how to manage their money.</p><p>It&#8217;s not for day traders or people trying to gamble. It&#8217;s not for people struggling to live below their means. There are plenty of resources for you, but this is not the correct place to look. <strong>You&#8217;ll need a fair chunk of cash to implement the contents of this blog post. If this ain&#8217;t you, stop reading!</strong></p><p>Here&#8217;s the situation I see way too frequently:</p><ul><li><p>You&#8217;re a (relatively) high earner who lives well below your means.</p></li><li><p>You&#8217;re probably sitting on a pile of cash in a high-yield savings account, and you probably have a concentrated position on a single company&#8217;s stock (i.e. your employer).</p></li><li><p>While you&#8217;re not in financial trouble, the lack of a strategy makes you nervous about the future. <strong>You want a simple, idiot-proof, low-maintenance strategy that just works.</strong></p></li></ul><p>Fortunately, it&#8217;s not that hard.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.liu.blog/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Andrew Liu's Blog! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h1>The strategy</h1><ol><li><p>Calculate and save up an emergency fund (3-6 months of expenses). Keep that in a high-yield savings account.</p></li><li><p>Pay off any remaining debts.</p></li><li><p>Figure out if you&#8217;ll need a lump sum of cash in the future (e.g. to buy a house).</p></li><li><p>Max out your tax-advantaged retirement accounts (e.g. 401k, HSA, mega-backdoor Roth).</p></li><li><p>Chuck any surplus cash into a taxable investment account.</p></li><li><p>Go touch grass.</p></li></ol><p>Hopefully the first three steps should be simple enough. Usually it&#8217;s the investment part that trips people up. (&#8220;Where do I put my money? What do I buy?&#8221;)</p><h1>What do I do? Where do I put my money?</h1><p>Prioritize contributing to retirement accounts because of the tax benefits. Understand how much money you need for spending and how much you have to spare for investing. Then it&#8217;s time to click some buttons.</p><h2>401(k)</h2><p>The first place you&#8217;ll want to put invest is into a 401(k). Max it out. You&#8217;ll probably get employer matching. It&#8217;s free money.</p><p>You should aim to max out your 401(k) every year. That&#8217;s around $24k of contributions per year at the time of writing. Any contributions to the 401(k) must come out of your paycheck, and you typically configure the contribution amount/percentage via your brokerage.</p><p>How you spread out your contributions is up to you. What matters is that you max out the account by end of year. Personally I try to max things out as quickly as possible: at the start of the year, I hold on to some cash and then contribute 100% of my paycheck until the retirement accounts are maxed out.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EtRL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98188fb4-c36c-46c8-b6e4-82ec381de5f7_2692x1612.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EtRL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98188fb4-c36c-46c8-b6e4-82ec381de5f7_2692x1612.png 424w, https://substackcdn.com/image/fetch/$s_!EtRL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98188fb4-c36c-46c8-b6e4-82ec381de5f7_2692x1612.png 848w, https://substackcdn.com/image/fetch/$s_!EtRL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98188fb4-c36c-46c8-b6e4-82ec381de5f7_2692x1612.png 1272w, https://substackcdn.com/image/fetch/$s_!EtRL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98188fb4-c36c-46c8-b6e4-82ec381de5f7_2692x1612.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EtRL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98188fb4-c36c-46c8-b6e4-82ec381de5f7_2692x1612.png" width="1456" height="872" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/98188fb4-c36c-46c8-b6e4-82ec381de5f7_2692x1612.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:872,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:380762,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.liu.blog/i/188669898?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98188fb4-c36c-46c8-b6e4-82ec381de5f7_2692x1612.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EtRL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98188fb4-c36c-46c8-b6e4-82ec381de5f7_2692x1612.png 424w, https://substackcdn.com/image/fetch/$s_!EtRL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98188fb4-c36c-46c8-b6e4-82ec381de5f7_2692x1612.png 848w, https://substackcdn.com/image/fetch/$s_!EtRL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98188fb4-c36c-46c8-b6e4-82ec381de5f7_2692x1612.png 1272w, https://substackcdn.com/image/fetch/$s_!EtRL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98188fb4-c36c-46c8-b6e4-82ec381de5f7_2692x1612.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">My retirement account contributions in Vanguard. I configured it to take my entire paycheck and put it into a pre-tax 401(k) and mega backdoor Roth IRA. It will automatically stop once I hit the IRS limit. I set it and forget it once per year.</figcaption></figure></div><p>&#8220;Should I contribute to a pre-tax 401(k) or Roth?&#8221; I&#8217;ll be honest, it really doesn&#8217;t matter. Flip a coin. Or if you&#8217;re too lazy to flip a coin, just pick Roth. The difference in the long run is minuscule and situationally dependent. The math needed to figure out what&#8217;s optimal for you isn&#8217;t worth the time, in my opinion.</p><h2>Mega Backdoor Roth IRA</h2><p>Maxed out your 401(k)? Great job! If your employers supports the mega backdoor Roth IRA and you <em>still</em> have money from your paycheck <em>that you don&#8217;t plan to use</em>, you can continue to contribute parts of your paycheck up to the IRS limits.</p><p>I&#8217;ve written about the <a href="https://www.liu.blog/p/megabackdoor">mega backdoor Roth IRA</a> previously, so I won&#8217;t harp on it too much here. Just make sure it&#8217;s actually offered by your employer, and make sure you have the money to spare. As of the time of writing, it&#8217;s an additional $35k of contributions after maxing out your 401(k).</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;41bb252f-6f47-4233-92e6-63bb8aeca7b2&quot;,&quot;caption&quot;:&quot;If you're lucky enough to work at a company with a generous 401(k) policy, you might be able to take advantage of a wonderful investment mechanism called the mega backdoor Roth IRA. Each year, you can contribute a large chunk of money that grows tax free until the end of time. Nice!&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;The Mega Backdoor Roth&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:9212428,&quot;name&quot;:&quot;Andrew Liu&quot;,&quot;bio&quot;:&quot;Chrome Security at Google | &#127929; &#129355; &#129313; Piano, BJJ, and Improv | &#128272; Open sourced Google Authenticator | &#129302; Started ML Infra team at Scale AI | &#128205; SF -> DC&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/5c353352-4762-4d4b-8b9d-e6d3ce745326_340x340.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2020-11-23T02:50:31.000Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/70dcdaa7-5bdb-4d63-a57f-68d3a030f1cb_2000x1335.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.liu.blog/p/megabackdoor&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:157216054,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:48246,&quot;publication_name&quot;:&quot;Andrew Liu's Blog&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!KqfF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4006949f-a59a-47ff-a70f-41e9859b3ac9_1280x1280.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>Unlike the 401(k), contributing to a mega backdoor Roth isn&#8217;t for everyone. There&#8217;s no employer matching, and the limit you can contribute is quite high. <strong>Do not max out a mega backdoor Roth IRA if you expect you&#8217;ll need that $35k within a few years.</strong></p><h2>HSA</h2><p>It&#8217;s a bit less obvious, but a Health Savings Account (HSA) is a tax-advantaged investment account. I recommend young and healthy people opt for an HSA if possible. You can contribute money from your paycheck into your HSA. Your employer probably contributes money into your HSA as well.</p><p>With your HSA money, you can spend it on medical expenses, but you can also invest the money. If possible, max out your annual HSA contributions, and set it to auto-invest. Even if you don&#8217;t expect to get sick, it&#8217;s a great avenue for future medical expenses. And transferring an HSA to your children doesn&#8217;t get taxed, so you can really stick it to Uncle Sam.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fZlW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66bb94a8-a51c-4cf0-9719-7429a585717f_2192x2192.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fZlW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66bb94a8-a51c-4cf0-9719-7429a585717f_2192x2192.png 424w, https://substackcdn.com/image/fetch/$s_!fZlW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66bb94a8-a51c-4cf0-9719-7429a585717f_2192x2192.png 848w, https://substackcdn.com/image/fetch/$s_!fZlW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66bb94a8-a51c-4cf0-9719-7429a585717f_2192x2192.png 1272w, https://substackcdn.com/image/fetch/$s_!fZlW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66bb94a8-a51c-4cf0-9719-7429a585717f_2192x2192.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fZlW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66bb94a8-a51c-4cf0-9719-7429a585717f_2192x2192.png" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/66bb94a8-a51c-4cf0-9719-7429a585717f_2192x2192.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:438320,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.liu.blog/i/188669898?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66bb94a8-a51c-4cf0-9719-7429a585717f_2192x2192.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fZlW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66bb94a8-a51c-4cf0-9719-7429a585717f_2192x2192.png 424w, https://substackcdn.com/image/fetch/$s_!fZlW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66bb94a8-a51c-4cf0-9719-7429a585717f_2192x2192.png 848w, https://substackcdn.com/image/fetch/$s_!fZlW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66bb94a8-a51c-4cf0-9719-7429a585717f_2192x2192.png 1272w, https://substackcdn.com/image/fetch/$s_!fZlW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66bb94a8-a51c-4cf0-9719-7429a585717f_2192x2192.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">My HSA investment portfolio within HealthEquity. It&#8217;s set to hold a (mandatory) $500 cash reserve and auto-invest everything else into VIIIX (an S&amp;P 500 proxy).</figcaption></figure></div><p>A side note on HSAs: if you have medical expenses, prefer to pay with &#8220;normal&#8221; money rather than withdrawing from your HSA. You should be careful about taking money out of a tax-advantaged investment account. You won&#8217;t get an opportunity to put it back in.</p><h2>Taxable accounts</h2><p>You&#8217;ve maxed out your 401(k), the mega backdoor Roth, and your HSA. And you <em>still</em> want to invest more? You absolute stud! Maybe you can just Venmo me the extra money instead.</p><p>On a more serious note, you don&#8217;t want to hold surplus funds as cash for too long. Open up a brokerage account. Any will do. I recommend a large brokerage with a shit UI. The shittier the UI, the less tempted you are to fuck around. Brokerages with nice UIs encourage you to constantly look at your money, which is a recipe for doing something stupid and ruining years of compounding.</p><p>Vanguard, <a href="https://fidelity.app.link/e/4GKxQUjek1b">Fidelity</a>, and <a href="https://www.schwab.com/client-referral?refrid=REFERHPCQHPN4">Schwab</a> all work great. If you already have an employer account with a broker, it&#8217;s easy to open up a personal account with them too. (For example, Google employees might prefer a Schwab account, since that&#8217;s where their stock goes.) <a href="https://ibkr.com/referral/andrew9229">Interactive Brokers</a> also works, but its UI is too shit, even for me. Avoid <a href="https://join.robinhood.com/andrewl1411">Robinhood</a>; its UI is too nice. <a href="https://m1.finance/2x8piiLHuUkm">M1 Finance</a> is fine (because of their auto-rebalancing features), but be careful since their UI is nice. Most importantly, use my referral codes so I can afford guac on my Chipotle burritos.</p><h1>Investing: what do I actually buy?</h1><p>Investing is important. If used correctly, money compounds. When it comes time to retire, you want to live off your compounding nest egg. Compounding takes time, so try to invest as much as you can as early as you can.</p><p>The two greatest mistakes in investing is (a) taking too much risk and (b) not taking enough risk. Understand your personal risk tolerance. The <a href="https://www.bogleheads.org/wiki/Getting_started">Bogleheads</a> and <a href="https://www.reddit.com/r/personalfinance/wiki/commontopics/">Reddit /r/personalfinance</a> wikis are great starting points for further reading.</p><p>Here&#8217;s what you do:</p><ol><li><p>Pick a low-cost, diversified index fund (or funds).</p></li><li><p>Put your investment cash into said fund(s).</p></li><li><p>Periodically deposit more funds into the portfolio and rebalance as necessary.</p></li></ol><h2>What&#8217;s in Andrew&#8217;s portfolio?</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Kl5G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73839ada-7dbb-40fd-8d80-e15927f9c827_1296x370.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Kl5G!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73839ada-7dbb-40fd-8d80-e15927f9c827_1296x370.png 424w, https://substackcdn.com/image/fetch/$s_!Kl5G!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73839ada-7dbb-40fd-8d80-e15927f9c827_1296x370.png 848w, https://substackcdn.com/image/fetch/$s_!Kl5G!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73839ada-7dbb-40fd-8d80-e15927f9c827_1296x370.png 1272w, https://substackcdn.com/image/fetch/$s_!Kl5G!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73839ada-7dbb-40fd-8d80-e15927f9c827_1296x370.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Kl5G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73839ada-7dbb-40fd-8d80-e15927f9c827_1296x370.png" width="1296" height="370" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/73839ada-7dbb-40fd-8d80-e15927f9c827_1296x370.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:370,&quot;width&quot;:1296,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:137902,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.liu.blog/i/188669898?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73839ada-7dbb-40fd-8d80-e15927f9c827_1296x370.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Kl5G!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73839ada-7dbb-40fd-8d80-e15927f9c827_1296x370.png 424w, https://substackcdn.com/image/fetch/$s_!Kl5G!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73839ada-7dbb-40fd-8d80-e15927f9c827_1296x370.png 848w, https://substackcdn.com/image/fetch/$s_!Kl5G!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73839ada-7dbb-40fd-8d80-e15927f9c827_1296x370.png 1272w, https://substackcdn.com/image/fetch/$s_!Kl5G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73839ada-7dbb-40fd-8d80-e15927f9c827_1296x370.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">What I tell you doesn&#8217;t matter unless I&#8217;ve actually walked the walk.</figcaption></figure></div><p>In <em>Skin in the Game</em>, Nassim Taleb made a great quote about investing advice. <a href="https://www.goodreads.com/quotes/9136608-don-t-tell-me-what-you-think-tell-me-what-you">&#8220;Don&#8217;t tell me what you think, tell me what you have in your portfolio.&#8221;</a> Here&#8217;s what I have in my portfolio:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fQ-9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae376462-6737-4284-83e7-5b1e2939e081_2906x1714.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fQ-9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae376462-6737-4284-83e7-5b1e2939e081_2906x1714.png 424w, https://substackcdn.com/image/fetch/$s_!fQ-9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae376462-6737-4284-83e7-5b1e2939e081_2906x1714.png 848w, https://substackcdn.com/image/fetch/$s_!fQ-9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae376462-6737-4284-83e7-5b1e2939e081_2906x1714.png 1272w, https://substackcdn.com/image/fetch/$s_!fQ-9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae376462-6737-4284-83e7-5b1e2939e081_2906x1714.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fQ-9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae376462-6737-4284-83e7-5b1e2939e081_2906x1714.png" width="1456" height="859" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ae376462-6737-4284-83e7-5b1e2939e081_2906x1714.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:859,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:317675,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.liu.blog/i/188669898?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae376462-6737-4284-83e7-5b1e2939e081_2906x1714.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fQ-9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae376462-6737-4284-83e7-5b1e2939e081_2906x1714.png 424w, https://substackcdn.com/image/fetch/$s_!fQ-9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae376462-6737-4284-83e7-5b1e2939e081_2906x1714.png 848w, https://substackcdn.com/image/fetch/$s_!fQ-9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae376462-6737-4284-83e7-5b1e2939e081_2906x1714.png 1272w, https://substackcdn.com/image/fetch/$s_!fQ-9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae376462-6737-4284-83e7-5b1e2939e081_2906x1714.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A screenshot of my taxable portfolio within Interactive Brokers. Pretty simple! (Note: I&#8217;m holding treasuries because it&#8217;s the money I&#8217;ll use to pay taxes this year.)</figcaption></figure></div><p>I hold <a href="https://www.ishares.com/us/products/239726/ishares-core-sp-500-etf">IVV</a>/<a href="https://www.ishares.com/us/products/239623/ishares-msci-eafe-etf">EFA</a>/<a href="https://imgpfunds.com/im-dbi-managed-futures-strategy-etf/">DMBF</a> with a 50/50/50 allocation. Three positions. That&#8217;s it. All equally weighted. My taxable portfolio is 1.5x leveraged (hence it&#8217;s not a 33/33/33 allocation). For every two dollars I have, I borrow one dollar on margin. <strong>Do not take leverage if you don&#8217;t know what you&#8217;re doing. Taking leverage can fuck you and kill decades of progress. You can get by just fine without leverage.</strong></p><p>For my tax-advantaged portfolios, it&#8217;s a lot simpler. I just go 100% in the S&amp;P 500. No leverage. It&#8217;s all auto-invested. My two investment accounts are my 401(k) and my HSA. In my 401(k), the portfolio is completely in <a href="https://investor.vanguard.com/mutual-funds/profile/pe/overview/M219">Vanguard&#8217;s S&amp;P 500 proxy</a>. In my HSA, the portfolio is completely <a href="https://investor.vanguard.com/investment-products/mutual-funds/profile/viiix">VIIIX</a>, which is some other S&amp;P 500 proxy. The exact fund doesn&#8217;t matter: VOO, IVV, or some other S&amp;P 500 proxy will all have 99.9% correlation. These were not deliberate strategic decisions on my part; I just picked whatever S&amp;P 500 proxy was available.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sO8q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fbf642b-1e0f-42fc-9616-49e5e0bc622a_2704x1870.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sO8q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fbf642b-1e0f-42fc-9616-49e5e0bc622a_2704x1870.png 424w, https://substackcdn.com/image/fetch/$s_!sO8q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fbf642b-1e0f-42fc-9616-49e5e0bc622a_2704x1870.png 848w, https://substackcdn.com/image/fetch/$s_!sO8q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fbf642b-1e0f-42fc-9616-49e5e0bc622a_2704x1870.png 1272w, https://substackcdn.com/image/fetch/$s_!sO8q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fbf642b-1e0f-42fc-9616-49e5e0bc622a_2704x1870.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sO8q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fbf642b-1e0f-42fc-9616-49e5e0bc622a_2704x1870.png" width="1456" height="1007" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2fbf642b-1e0f-42fc-9616-49e5e0bc622a_2704x1870.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1007,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:284405,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.liu.blog/i/188669898?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fbf642b-1e0f-42fc-9616-49e5e0bc622a_2704x1870.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!sO8q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fbf642b-1e0f-42fc-9616-49e5e0bc622a_2704x1870.png 424w, https://substackcdn.com/image/fetch/$s_!sO8q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fbf642b-1e0f-42fc-9616-49e5e0bc622a_2704x1870.png 848w, https://substackcdn.com/image/fetch/$s_!sO8q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fbf642b-1e0f-42fc-9616-49e5e0bc622a_2704x1870.png 1272w, https://substackcdn.com/image/fetch/$s_!sO8q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fbf642b-1e0f-42fc-9616-49e5e0bc622a_2704x1870.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">My 401(k) in Vanguard. I just chuck it all into the S&amp;P 500.</figcaption></figure></div><p>Why do I do what I do?</p><ul><li><p>I have a stake in both domestic index funds and international index funds. Having exposure to both domestic and international equities obviates the need for bonds.</p></li><li><p>I have a stake in a managed futures strategy as a hedge in situations where equities perform poorly.</p></li><li><p>I leverage 1.5x such that I magnify returns without suffering from volatility drag.</p></li><li><p>For my retirement accounts, my position is much simpler because retirement accounts can&#8217;t take leverage. (Also I have a financial advisor managing my taxable account, and I&#8217;m too lazy to do anything fancier for my retirement accounts.)</p></li></ul><p><strong>Don&#8217;t blindly copy me. I&#8217;ll give you suggestions in the next section. </strong>If none of this made sense to you, don&#8217;t stress out.</p><h2>Recommended example portfolios</h2><p>In my examples, I&#8217;ll use <a href="https://investor.vanguard.com/investment-products/etfs/profile/voo">VOO</a> to represent the S&amp;P 500 (i.e. domestic) index and <a href="https://investor.vanguard.com/investment-products/etfs/profile/vxus">VXUS</a> to represent the international index. There are many funds that track the same index, so when you buy for yourself, you don&#8217;t need those exact ticker symbols.</p><p>I present to you the <strong>1-fund portfolio</strong> and the <strong>2-fund portfolio</strong>:</p><ul><li><p>The 1-fund portfolio: 100% in VOO</p><ul><li><p>So simple! You literally can&#8217;t go wrong with this. The S&amp;P 500 is already super diverse.</p></li><li><p>In your retirement accounts, you can opt to go for a target retirement date fund as well. It doesn&#8217;t really matter.</p></li></ul></li><li><p>The 2-fund portfolio: 50/50 in VOO and VXUS; equally weighted</p><ul><li><p>This is good if you want international exposure.</p></li><li><p>This is also good if you want to scratch that itch with having more than 1 position in your portfolio.</p></li><li><p>Why have a 50/50 allocation instead of 60/40 or something else? Because 50/50 is simple. People will debate all day about whether to hold more domestic or international equities. Don&#8217;t waste your time, and instead go for a &#8220;good enough&#8221; portfolio.</p></li></ul></li></ul><p>Did you expect something more complicated? I sure hope not. These are set-it-and-forget-it portfolios that will make you a very happy camper over a long time horizon.</p><p>It&#8217;s hard to go wrong since you&#8217;re sufficiently diversified. Diversification is the only free lunch in investing. Do not take leverage. If you find this blog post informative, you&#8217;re not ready to handle leverage. Your goal is the match the index, not beat it. The best strategy to match the index is to buy the index.</p><h1>Maintenance</h1><p>Investments into retirement accounts should be fully automated. Contributions will come straight out of your paycheck. You may need to adjust contributions once a year, since IRS limits change and health insurance policies change.</p><p>For personal investment accounts, try not to mess with it too frequently. (Every month or quarter is perfectly fine.) Ideally you rebalance around the same time you get a cash infusion (e.g. every other paycheck). When rebalancing, buy positions in your portfolio that are underweight; try to avoid selling overweight positions. Most brokerages have some form of auto-investing that will track a target portfolio allocation. So ideally, you&#8217;ll have to do very little manual decision-making in general.</p><p><strong>If a part of your compensation is in company stock, sell the stock as soon as it vests and reinvest the proceeds.</strong> Some companies offer auto-sell programs so you only need to handle reinvesting the cash. I know of many people who are hesitant to sell company stock. It&#8217;s a rabbit-hole of a debate, and I won&#8217;t go to deep into it. If you had the cash, would you buy back the stock? If not, then you should diversify. Furthermore, you organically incur concentration risk with your employer, even without the additional concentration risk from holding too much of a single stock.</p><p>At this point, everything should be automated and diversified. Great! Pat yourself on the back. Now we proceed to the most important step: <strong>STOP THINKING ABOUT INVESTING and go touch grass.</strong> Money is a means to an end. You&#8217;ve set yourself up for success. Now go live a good life. </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.liu.blog/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Andrew Liu's Blog! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Vibe coding has made me lazy, which is great!]]></title><description><![CDATA[I wrote ClickFix.fyi, deployed OpenClaw, and organized my BJJ notes without doing much thinking.]]></description><link>https://www.liu.blog/p/vibe-coding</link><guid isPermaLink="false">https://www.liu.blog/p/vibe-coding</guid><dc:creator><![CDATA[Andrew Liu]]></dc:creator><pubDate>Mon, 02 Mar 2026 01:23:14 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!XMqz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26caf02a-48e9-4613-a9b9-04c239aab170_2368x1568.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;m a software engineer. In a sense, my job is to be as lazy as possible. Since AI is all the hotness now, there&#8217;s been an influx of various tools. I tried a few of them for different use cases:</p><ol><li><p>I used Antigravity to set up a website with interactive demos.</p></li><li><p>I used OpenClaw to manage my self-hosted services.</p></li><li><p>I used Claude Code to organize my BJJ notes.</p></li></ol><p>Each of these were done within a day. I did minimal typing, and it was mostly free. Here are my experiences.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.liu.blog/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Andrew Liu's Blog! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h1>ClickFix.fyi - Antigravity</h1><p>At work, I&#8217;m working on mitigation of the ClickFix scam. While there are various news articles about ClickFix, there&#8217;s no centralized informational site about it actually is. So I vibe coded an informational site in a day or so.</p><p>It&#8217;s called <a href="https://www.clickfix.fyi/">ClickFix.fyi</a>. Curious about what ClickFix is? Well now you can visit the site!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DWr5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F457d76f2-8786-4e3b-aaa9-f14609298bf0_1868x2374.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DWr5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F457d76f2-8786-4e3b-aaa9-f14609298bf0_1868x2374.png 424w, https://substackcdn.com/image/fetch/$s_!DWr5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F457d76f2-8786-4e3b-aaa9-f14609298bf0_1868x2374.png 848w, https://substackcdn.com/image/fetch/$s_!DWr5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F457d76f2-8786-4e3b-aaa9-f14609298bf0_1868x2374.png 1272w, https://substackcdn.com/image/fetch/$s_!DWr5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F457d76f2-8786-4e3b-aaa9-f14609298bf0_1868x2374.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DWr5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F457d76f2-8786-4e3b-aaa9-f14609298bf0_1868x2374.png" width="1456" height="1850" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/457d76f2-8786-4e3b-aaa9-f14609298bf0_1868x2374.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1850,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:387615,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.liu.blog/i/187905214?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F457d76f2-8786-4e3b-aaa9-f14609298bf0_1868x2374.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!DWr5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F457d76f2-8786-4e3b-aaa9-f14609298bf0_1868x2374.png 424w, https://substackcdn.com/image/fetch/$s_!DWr5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F457d76f2-8786-4e3b-aaa9-f14609298bf0_1868x2374.png 848w, https://substackcdn.com/image/fetch/$s_!DWr5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F457d76f2-8786-4e3b-aaa9-f14609298bf0_1868x2374.png 1272w, https://substackcdn.com/image/fetch/$s_!DWr5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F457d76f2-8786-4e3b-aaa9-f14609298bf0_1868x2374.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">An interactive demo included in the ClickFix.fyi site.</figcaption></figure></div><p>By nature of it being work-relevant, I used <a href="https://antigravity.google/">Google Antigravity</a>. It&#8217;s great. You just tell it what to do. I wanted a static site, so it made a site using <a href="https://astro.build/">Astro</a>. I don&#8217;t know Astro, but it doesn&#8217;t matter. I just told it what to do; I didn&#8217;t even review the code. It was awesome. It can even generate images and interactive demos.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XMqz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26caf02a-48e9-4613-a9b9-04c239aab170_2368x1568.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XMqz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26caf02a-48e9-4613-a9b9-04c239aab170_2368x1568.png 424w, https://substackcdn.com/image/fetch/$s_!XMqz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26caf02a-48e9-4613-a9b9-04c239aab170_2368x1568.png 848w, https://substackcdn.com/image/fetch/$s_!XMqz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26caf02a-48e9-4613-a9b9-04c239aab170_2368x1568.png 1272w, https://substackcdn.com/image/fetch/$s_!XMqz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26caf02a-48e9-4613-a9b9-04c239aab170_2368x1568.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XMqz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26caf02a-48e9-4613-a9b9-04c239aab170_2368x1568.png" width="1456" height="964" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/26caf02a-48e9-4613-a9b9-04c239aab170_2368x1568.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:964,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:589133,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.liu.blog/i/187905214?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26caf02a-48e9-4613-a9b9-04c239aab170_2368x1568.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XMqz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26caf02a-48e9-4613-a9b9-04c239aab170_2368x1568.png 424w, https://substackcdn.com/image/fetch/$s_!XMqz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26caf02a-48e9-4613-a9b9-04c239aab170_2368x1568.png 848w, https://substackcdn.com/image/fetch/$s_!XMqz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26caf02a-48e9-4613-a9b9-04c239aab170_2368x1568.png 1272w, https://substackcdn.com/image/fetch/$s_!XMqz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26caf02a-48e9-4613-a9b9-04c239aab170_2368x1568.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A screenshot of my Antigravity instance used to code ClickFix.fyi. Here I&#8217;m generating the favicon.</figcaption></figure></div><p>At the time, I was on the free tier. I used Claude models first, but the quota burned out almost immediately. Not surprising, I guess. But the Gemini quota was surprisingly generous for a free tier. You can work through an entire project without having to worry about running out of quota. (Though the caveat is that once you run out of quota, you&#8217;re kind of fucked because you have to wait a week. On paid plans it&#8217;s a lot better.)</p><h1>VM Management - OpenClaw</h1><p>Coding is great and all, but what happens when you give AI real power? <a href="https://openclaw.ai/">OpenClaw</a> has been all the hotness recently, so I wanted to test it out.</p><p>The first step? Get a free VM. Oracle Cloud has a free tier that&#8217;s quite generous. You can get a 4-core machine with 24GB RAM on their free tier. The only caveat is that it&#8217;s an ARM machine. But honestly that doesn&#8217;t matter. I like self-hosting random shit by myself, so having a free beefy machine is great.</p><p>With OpenClaw, the real limiting factor is the model itself. It doesn&#8217;t require much compute otherwise. So if you self-host a model, you&#8217;d better have a lot of GPU compute. It&#8217;s better to pay $20 for a <s>Claude</s> ChatGPT subscription. Then you can run OpenClaw on a toaster. (You shouldn&#8217;t be buying a Mac Mini unless you have a specific reason. The correct way to go is to have the Gateway on a VM and <a href="https://docs.openclaw.ai/nodes">add your local Mac as a node</a>.) I set a Telegram bot for my OpenClaw instance, and then it was easy to chat on the go. And all of this was (mostly) free.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SmbP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf2324f3-b45c-419a-8dd7-65d0ff4f5253_1666x1924.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SmbP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf2324f3-b45c-419a-8dd7-65d0ff4f5253_1666x1924.png 424w, https://substackcdn.com/image/fetch/$s_!SmbP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf2324f3-b45c-419a-8dd7-65d0ff4f5253_1666x1924.png 848w, https://substackcdn.com/image/fetch/$s_!SmbP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf2324f3-b45c-419a-8dd7-65d0ff4f5253_1666x1924.png 1272w, https://substackcdn.com/image/fetch/$s_!SmbP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf2324f3-b45c-419a-8dd7-65d0ff4f5253_1666x1924.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SmbP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf2324f3-b45c-419a-8dd7-65d0ff4f5253_1666x1924.png" width="1456" height="1681" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bf2324f3-b45c-419a-8dd7-65d0ff4f5253_1666x1924.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1681,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1162232,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.liu.blog/i/187905214?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf2324f3-b45c-419a-8dd7-65d0ff4f5253_1666x1924.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SmbP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf2324f3-b45c-419a-8dd7-65d0ff4f5253_1666x1924.png 424w, https://substackcdn.com/image/fetch/$s_!SmbP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf2324f3-b45c-419a-8dd7-65d0ff4f5253_1666x1924.png 848w, https://substackcdn.com/image/fetch/$s_!SmbP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf2324f3-b45c-419a-8dd7-65d0ff4f5253_1666x1924.png 1272w, https://substackcdn.com/image/fetch/$s_!SmbP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf2324f3-b45c-419a-8dd7-65d0ff4f5253_1666x1924.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Some of my chats with my OpenClaw bot. Here I give it GitHub access and it sets up a new repository with minimal prompting.</figcaption></figure></div><p>And goddamn, it was quite nerve wracking. While setting up, I asked the bot about OpenClaw configs. I was expecting answers and links to documentation. Instead it directly modified its own configs. Eventually I gave it access to my GitHub so it could back up its own data. And it did all of that with minimal prompting from me. So far it&#8217;s been doing a great job, even though it&#8217;s scary, since OpenClaw can basically pwn my GitHub if it goes rogue. While the blast radius is still limited, I lack the proper failsafes, yet I&#8217;m also eager to expand its access so it can do more.</p><h1>Obsidian BJJ Notes - Claude Code</h1><p>As a Google shill, I&#8217;ve been using Gemini CLI at work. But I paid for Claude, and I wanted to try out Claude Code and get value out of my subscription. But Antigravity was good enough for my coding projects; I didn&#8217;t have any other project out of the blue to work on. Then it dawned on me that I didn&#8217;t need to use Claude Code for code.</p><p>I have an <a href="https://obsidian.md/">Obsidian</a> vault for all of my notes. It&#8217;s all markdown files. The vault contains my journal and also random notes. Of those notes, I have a folder for BJJ. Historically I&#8217;ve kept raw notes around every class. Those raw notes have never really been synthesized into anything deeper than that. For those who do BJJ, you&#8217;ll know that positions in BJJ resemble a flowchart: you transition into different positions depending on what happens. Obsidian is great for back-linking: a page can link to another page quite easily; it matches the graph-like nature of BJJ.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!W47G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0af1c98-019d-4c8f-91f1-7cfec0e4c818_3126x2230.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!W47G!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0af1c98-019d-4c8f-91f1-7cfec0e4c818_3126x2230.png 424w, https://substackcdn.com/image/fetch/$s_!W47G!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0af1c98-019d-4c8f-91f1-7cfec0e4c818_3126x2230.png 848w, https://substackcdn.com/image/fetch/$s_!W47G!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0af1c98-019d-4c8f-91f1-7cfec0e4c818_3126x2230.png 1272w, https://substackcdn.com/image/fetch/$s_!W47G!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0af1c98-019d-4c8f-91f1-7cfec0e4c818_3126x2230.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!W47G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0af1c98-019d-4c8f-91f1-7cfec0e4c818_3126x2230.png" width="728" height="519.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d0af1c98-019d-4c8f-91f1-7cfec0e4c818_3126x2230.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:1039,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:717605,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.liu.blog/i/187905214?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0af1c98-019d-4c8f-91f1-7cfec0e4c818_3126x2230.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!W47G!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0af1c98-019d-4c8f-91f1-7cfec0e4c818_3126x2230.png 424w, https://substackcdn.com/image/fetch/$s_!W47G!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0af1c98-019d-4c8f-91f1-7cfec0e4c818_3126x2230.png 848w, https://substackcdn.com/image/fetch/$s_!W47G!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0af1c98-019d-4c8f-91f1-7cfec0e4c818_3126x2230.png 1272w, https://substackcdn.com/image/fetch/$s_!W47G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0af1c98-019d-4c8f-91f1-7cfec0e4c818_3126x2230.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A graph view of my BJJ notes in Obsidian. Notice how related positions are no interconnected.</figcaption></figure></div><p>It&#8217;s quite nice. Claude asked how I&#8217;d like the notes organized, and we had a relatively nice back and forth. Then it took my raw notes and put everything into its own page. At this point I feel like Claude is the real BJJ expert here. All I had to do is go to sleep and let the AI cook.</p><p>I will note that volume (not complexity) might be the bottleneck for AI. I ran out of Claude quota (on a paid plan) and had to wait five hours before resuming the job. The organization of the positions isn&#8217;t inherently complex; it&#8217;s just a lot of work, and it&#8217;s a lot of notes.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!71fN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac6ab529-d701-4b7d-9ee8-081eb88b7eb8_1912x1916.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!71fN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac6ab529-d701-4b7d-9ee8-081eb88b7eb8_1912x1916.png 424w, https://substackcdn.com/image/fetch/$s_!71fN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac6ab529-d701-4b7d-9ee8-081eb88b7eb8_1912x1916.png 848w, https://substackcdn.com/image/fetch/$s_!71fN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac6ab529-d701-4b7d-9ee8-081eb88b7eb8_1912x1916.png 1272w, https://substackcdn.com/image/fetch/$s_!71fN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac6ab529-d701-4b7d-9ee8-081eb88b7eb8_1912x1916.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!71fN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac6ab529-d701-4b7d-9ee8-081eb88b7eb8_1912x1916.png" width="1456" height="1459" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ac6ab529-d701-4b7d-9ee8-081eb88b7eb8_1912x1916.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1459,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:423606,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.liu.blog/i/187905214?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac6ab529-d701-4b7d-9ee8-081eb88b7eb8_1912x1916.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!71fN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac6ab529-d701-4b7d-9ee8-081eb88b7eb8_1912x1916.png 424w, https://substackcdn.com/image/fetch/$s_!71fN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac6ab529-d701-4b7d-9ee8-081eb88b7eb8_1912x1916.png 848w, https://substackcdn.com/image/fetch/$s_!71fN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac6ab529-d701-4b7d-9ee8-081eb88b7eb8_1912x1916.png 1272w, https://substackcdn.com/image/fetch/$s_!71fN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac6ab529-d701-4b7d-9ee8-081eb88b7eb8_1912x1916.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The Claude Code session I used to reorganize my BJJ notes. Here it&#8217;s presenting a template outline for the notes.</figcaption></figure></div><h1>Conclusion</h1><p>So what did I learn from all of this?</p><ul><li><p>AI is pretty good at this point. As you get more comfortable, you should give it more agentic/destructive permissions. <strong>Don&#8217;t just use it for coding.</strong></p></li><li><p>Using AI doesn&#8217;t necessarily save you time. <strong>If things aren&#8217;t sufficiently clear, it will fuck up.</strong></p><ul><li><p>This is especially bad if you have the &#8220;stare-and-wait&#8221; workflow, where you sit there like a ding-dong and as the AI does something. That doesn&#8217;t save you any time; if you do that, you&#8217;re better off manually coding. The important part is that you give the AI the info it needs and then you leave to do something else.</p></li></ul></li><li><p><strong>Laziness is a virtue, so long as you outsource the work that doesn&#8217;t require your judgment.</strong> For a lot of this work, I could have done it myself (albeit slower). So it&#8217;s perfect for AI. But for other things that I didn&#8217;t know (e.g. Astro), I didn&#8217;t learn shit, and I wouldn&#8217;t be able to maintain the website without the help of AI.</p></li><li><p>Quota (for both free and paid tiers) is scarce but pretty reasonable, in my opinion. The value you get from paying is far greater than the monetary cost. Lots of people have subscription fatigue and aversion to paying for software, but that&#8217;s a mistake. <strong>You should index on the value you get from your expenses.</strong></p></li><li><p>Regarding security, I need to have a better plan. It&#8217;s not a bad idea to give AI more intrusive permissions. Being a chicken gets you nowhere. But there is the real threat model of an AI going rogue or making an honest mistake and fucking everything up. For example, in my case, the biggest risk is that Claude nukes all of my GitHub repositories. Not the end of the world, but it&#8217;s still pretty bad. Realistically, I don&#8217;t want to revoke those permissions, but I do need a reliable failsafe. In my situation, I suppose it should be some form of killswitch to disable the VM hosting my OpenClaw gateway.</p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.liu.blog/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Andrew Liu's Blog! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Five Years Ago, I Came to My Senses and Quit Alcohol]]></title><description><![CDATA[I realized I was killing myself and becoming an NPC, which made me reconsider some life choices.]]></description><link>https://www.liu.blog/p/alcohol</link><guid isPermaLink="false">https://www.liu.blog/p/alcohol</guid><dc:creator><![CDATA[Andrew Liu]]></dc:creator><pubDate>Fri, 23 Jan 2026 19:17:59 GMT</pubDate><enclosure url="https://images.unsplash.com/photo-1525268323446-0505b6fe7778?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxNXx8YWxjb2hvbHxlbnwwfHx8fDE3NjkxMjQxNDh8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The summer I turned 21, I got drunk for the first time.</p><p>I was in San Francisco for the summer interning at Dropbox. Dropbox has quite the drinking culture: every other weekend, the entire intern cohort would squeeze into a tiny apartment, stock the place up with beers, and play drinking games all night long. The world would get fuzzier as I became progressively more inebriated, but I enjoyed the process since I was having so much fun.</p><p>It was an abrupt introduction to alcohol. I recall my last day in SF that summer: the morning of my flight, I stumbled my way to the airport hungover and half lucid. I have no clue how I got back home in one piece.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UKsX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b31384c-041f-4f13-b1ed-1e571e05cf75_135x127.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UKsX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b31384c-041f-4f13-b1ed-1e571e05cf75_135x127.png 424w, https://substackcdn.com/image/fetch/$s_!UKsX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b31384c-041f-4f13-b1ed-1e571e05cf75_135x127.png 848w, https://substackcdn.com/image/fetch/$s_!UKsX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b31384c-041f-4f13-b1ed-1e571e05cf75_135x127.png 1272w, https://substackcdn.com/image/fetch/$s_!UKsX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b31384c-041f-4f13-b1ed-1e571e05cf75_135x127.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UKsX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b31384c-041f-4f13-b1ed-1e571e05cf75_135x127.png" width="209" height="196.61481481481482" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7b31384c-041f-4f13-b1ed-1e571e05cf75_135x127.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:127,&quot;width&quot;:135,&quot;resizeWidth&quot;:209,&quot;bytes&quot;:11843,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.liu.blog/i/176465986?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b31384c-041f-4f13-b1ed-1e571e05cf75_135x127.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UKsX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b31384c-041f-4f13-b1ed-1e571e05cf75_135x127.png 424w, https://substackcdn.com/image/fetch/$s_!UKsX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b31384c-041f-4f13-b1ed-1e571e05cf75_135x127.png 848w, https://substackcdn.com/image/fetch/$s_!UKsX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b31384c-041f-4f13-b1ed-1e571e05cf75_135x127.png 1272w, https://substackcdn.com/image/fetch/$s_!UKsX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b31384c-041f-4f13-b1ed-1e571e05cf75_135x127.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><figcaption class="image-caption">A real life picture of me when I&#8217;m drunk.</figcaption></figure></div><p>After graduating college and moving to the Bay Area, I drank infrequently, but whenever a social event had alcohol in the picture, I had a bad habit of drinking too much. There&#8217;s a joke that one drink is just right, two drinks is too many, and three drinks is not enough. That embodies how I handle my limits.</p><p>I&#8217;d take a shot of tequila, feel nothing, and pound a few extra shots since &#8220;nothing was happening.&#8221; Some time would pass and as I became less lucid, I&#8217;d utter a few regrettable remarks and forget how the rest of the night went.</p><p>You have to cut me some slack. I was an impressionable person in my early 20s. I wanted to fit in and have fun, and alcohol seemed like an easy way to socially blend in.</p><p>Then COVID hit. I left the Bay Area and I had a bunch of time alone to reflect on how I wanted to live my life.</p><h1>Why did I quit?</h1><p>The fact that I didn&#8217;t know my limits was bad enough, but I would come to realize that the act of drinking was already pretty bad. Bad enough that I concluded that this needed to stop.</p><h2>I was slowly killing myself&#8230;</h2><p>I&#8217;ve blacked out more times than I&#8217;d care to admit. If you think about it, being drunk is quite terrifying. Parts of your brain turn off. You lose control of your thoughts, despite trying your hardest to stay lucid. It&#8217;s as if you&#8217;re thinking someone else&#8217;s thoughts. It&#8217;s how I imagine dying feels; it&#8217;s totally different from falling asleep.</p><p><strong>I realized that every time I got drunk, I was slowly killing myself.</strong> It&#8217;s scary when you can&#8217;t recognize or trust your own mind.</p><h2>&#8230;for literally no good reason.</h2><p>The stupid part is that I never even enjoyed drinking. I only did so at social events when alcohol was freely available. The tech industry in Silicon Valley has a drinking culture, so it&#8217;s actively tolerated, if not encouraged.</p><p>I drank to fit in and trick myself into having fun. But the truth is that I wasn&#8217;t having fun. <strong>By drinking for social validation, I was living someone else&#8217;s life.</strong> It wasn&#8217;t a real choice of mine, and deep down I didn&#8217;t want to live my life pretending to be someone else.</p><h1>How did I stop?</h1><p>It was pretty easy, actually. I made a declaration to myself to pause all drinking for 5 years. After that duration passed, I&#8217;d give myself permission to reevaluate. At the beginning, it was remarkably easy to enforce, since it happened during the COVID lockdowns.</p><p>Otherwise, I employed a few identity/mindset shifts:</p><ul><li><p>I can have fun and fit in without alcohol. Alcohol doesn&#8217;t make you braver; it makes you stupider. Alcohol doesn&#8217;t build social status; it reduces your social awareness.</p></li><li><p>It&#8217;s more important to be high-agency and make my own independent decisions, rather than &#8220;going with the flow.&#8221;</p></li><li><p>I want to prove to myself that I can say no to people. If you only go on autopilot, you&#8217;re nothing more than an NPC.</p></li><li><p>I don&#8217;t want to destroy my body and my mind. That prospect is scarier than any perceived benefits of alcohol.</p></li></ul><p>With the proper mindset, it became easy to just stop drinking. Whenever I was at a bar, I&#8217;d just have a mocktail. At parties, I&#8217;d simply socialize while sober. For me, this was all mental.</p><h1>Miscellaneous thoughts</h1><ul><li><p>My life is better, and my mind is definitely clearer. Avoiding alcohol is arguably just as important as writing, when it comes to being a clear thinker.</p></li><li><p>Quitting alcohol has definitely tested (and validated) my ability to resist social pressure and take ownership of my choices.</p></li><li><p>You can definitely have fun without alcohol. If anything, it&#8217;s quite amusing being the one sober person in a room full of drunk people.</p></li><li><p>People are remarkably respectful of my choice not to drink. For that I am grateful.</p></li><li><p>Scott Galloway has an interesting perspective around <a href="https://www.profgalloway.com/firewater/">society&#8217;s shift away from alcohol</a>. His claims that the pendulum has swung too far against alcohol (&#8220;the worst thing that&#8217;s happened to young people is the anti-alcohol movement&#8221;) and pushes for people to drink more and make more &#8220;bad decisions.&#8221; Otherwise the loneliness epidemic persists, and young people aren&#8217;t pushed to take social risks. As a chronic over-thinker, I believe he does have a point. Is the trade-off worth it? For now, I&#8217;m still a teetotaler, but I do need to take this into consideration.</p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.liu.blog/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#127866; Subscribe! Do it! You know you want to! &#127866;</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1525268323446-0505b6fe7778?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxNXx8YWxjb2hvbHxlbnwwfHx8fDE3NjkxMjQxNDh8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://images.unsplash.com/photo-1525268323446-0505b6fe7778?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxNXx8YWxjb2hvbHxlbnwwfHx8fDE3NjkxMjQxNDh8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1525268323446-0505b6fe7778?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxNXx8YWxjb2hvbHxlbnwwfHx8fDE3NjkxMjQxNDh8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1525268323446-0505b6fe7778?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxNXx8YWxjb2hvbHxlbnwwfHx8fDE3NjkxMjQxNDh8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1525268323446-0505b6fe7778?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxNXx8YWxjb2hvbHxlbnwwfHx8fDE3NjkxMjQxNDh8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1525268323446-0505b6fe7778?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxNXx8YWxjb2hvbHxlbnwwfHx8fDE3NjkxMjQxNDh8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" width="2500" height="1664" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1525268323446-0505b6fe7778?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxNXx8YWxjb2hvbHxlbnwwfHx8fDE3NjkxMjQxNDh8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1664,&quot;width&quot;:2500,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;assorted bottle on table&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="assorted bottle on table" title="assorted bottle on table" srcset="https://images.unsplash.com/photo-1525268323446-0505b6fe7778?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxNXx8YWxjb2hvbHxlbnwwfHx8fDE3NjkxMjQxNDh8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1525268323446-0505b6fe7778?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxNXx8YWxjb2hvbHxlbnwwfHx8fDE3NjkxMjQxNDh8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1525268323446-0505b6fe7778?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxNXx8YWxjb2hvbHxlbnwwfHx8fDE3NjkxMjQxNDh8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1525268323446-0505b6fe7778?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxNXx8YWxjb2hvbHxlbnwwfHx8fDE3NjkxMjQxNDh8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@sergio_as">S&#233;rgio Alves Santos</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><p></p>]]></content:encoded></item><item><title><![CDATA[2025 Year in Review]]></title><description><![CDATA[My 2025 year in review.]]></description><link>https://www.liu.blog/p/2025</link><guid isPermaLink="false">https://www.liu.blog/p/2025</guid><dc:creator><![CDATA[Andrew Liu]]></dc:creator><pubDate>Thu, 01 Jan 2026 01:58:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!1iM9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1100f844-4768-4cfa-8baf-79afb90cfe60_5712x4284.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em><strong>Links to my previous year-in-review blog posts:</strong></em></p><ul><li><p><em><strong><a href="https://www.liu.blog/p/2024">2024</a></strong></em></p></li><li><p><em><strong><a href="https://www.liu.blog/p/2023">2023</a></strong></em></p></li></ul><p>Ever since I&#8217;ve begun writing these year-in-review blog posts, there&#8217;s been a looming pressure to one-up the previous years. 2025 felt like a relatively tame year in comparison to the past two years, and I&#8217;ve made my peace with it. The first half of the year felt like a blur, but it did get better in the second half. And throughout 2025, a fair bit happened:</p><ul><li><p>I got my blue belt in BJJ and competed for the first time.</p></li><li><p>I gave me first external conference talk.</p></li><li><p>I spent a month in Asia, and I visited Taiwan and Japan for the first time.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1iM9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1100f844-4768-4cfa-8baf-79afb90cfe60_5712x4284.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1iM9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1100f844-4768-4cfa-8baf-79afb90cfe60_5712x4284.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1iM9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1100f844-4768-4cfa-8baf-79afb90cfe60_5712x4284.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1iM9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1100f844-4768-4cfa-8baf-79afb90cfe60_5712x4284.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1iM9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1100f844-4768-4cfa-8baf-79afb90cfe60_5712x4284.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1iM9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1100f844-4768-4cfa-8baf-79afb90cfe60_5712x4284.jpeg" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1100f844-4768-4cfa-8baf-79afb90cfe60_5712x4284.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4808910,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.liu.blog/i/182452532?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1100f844-4768-4cfa-8baf-79afb90cfe60_5712x4284.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1iM9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1100f844-4768-4cfa-8baf-79afb90cfe60_5712x4284.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1iM9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1100f844-4768-4cfa-8baf-79afb90cfe60_5712x4284.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1iM9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1100f844-4768-4cfa-8baf-79afb90cfe60_5712x4284.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1iM9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1100f844-4768-4cfa-8baf-79afb90cfe60_5712x4284.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The outside of my 2025 holiday card.</figcaption></figure></div><h1>Overview of the year</h1><p>I started the year feeling aimless. In 2024, I had moved and switched jobs, so I felt I should take a bit of a breather. But when you don&#8217;t have a goal, you&#8217;re usually quite passive with your time.</p><p>It felt like the first half of the year went to various one-off social events. I barely remember them, and I have little to show for it. Fortunately, external goals and obligations with a strict deadline (e.g. preparing for a BJJ competition and travel) forced me to snap out of it. Then the year started to pick up.</p><h2>Brazilian Jiu-Jitsu</h2><p>Around May, I decided to sign up for a BJJ competition. I trained for a while, but I never competed before. Nor was I comfortable fighting under pressure. So it was about time to give it a try.</p><p>I started increasing the time I spent on the mats and reduced my focus on other areas of life. Around two weeks before my competition, I dislocated my toe in training. It wasn&#8217;t bad enough to change any plans, but I did literally end up limping my way into the competition.</p><p>There&#8217;s a night-and-day difference between competing in BJJ and normal sparring. Someone is going at you 100% unhinged. Your adrenaline goes through the roof, and your field of vision decreases. And after a match, you find yourself completely gassed out. But you learn a lot. You notice what works and what breaks down when you&#8217;re under pressure.</p><p>I competed a second time shortly afterwards. That one forced me to deal with loss. It&#8217;s a rare and interesting emotion you feel when you drive an hour to some random sports center, lose in a single-elimination bracket, get handed a participation trophy, and stand on a podium to get your picture taken while wearing said participation trophy.</p><p>Later in the year, I got promoted to a blue belt. Honestly nothing changed, except the color of the belt.</p><div class="image-gallery-embed" data-attrs="{&quot;gallery&quot;:{&quot;images&quot;:[{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/246d2a13-f0ef-47cc-8a20-58d0a8882af8_1126x1374.jpeg&quot;},{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/98cb557c-bfb0-4b20-b712-869b2e8994d8_2696x2941.jpeg&quot;},{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/383a7ba0-2003-43e7-8eec-77775ca0d932_3024x4032.jpeg&quot;},{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2db1ab58-ff13-477c-8a7c-42fa9d63af9a_3024x4032.jpeg&quot;}],&quot;caption&quot;:&quot;Clockwise from top left: my first BJJ competition, getting my blue belt, Google-branded BJJ gear, dropping in for a class in Tokyo.&quot;,&quot;alt&quot;:&quot;&quot;,&quot;staticGalleryImage&quot;:{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/48408735-8afd-49c5-8115-b397a96aa534_1456x1456.png&quot;}},&quot;isEditorNode&quot;:true}"></div><p>BJJ really is a lot of fun. I enjoy it a lot, and you should try it out if you haven&#8217;t already. Next year, I plan to begin training Judo in tandem with BJJ, as I&#8217;d like to learn how to grapple while standing.</p><h2>Career</h2><p>It was a turbulent year at Google. My manager left early in the year, then layoffs happened, then <a href="https://privacysandbox.google.com/blog/update-on-plans-for-privacy-sandbox-technologies">Privacy Sandbox became defunct</a>, and then came a giant reorg that dragged on for months. I&#8217;ve been at startups before, I&#8217;m used to volatility at work. It&#8217;s just unexpected for a company of this size. But Google&#8217;s stock price has performed well this year, so I&#8217;m happy.</p><p>On a less tongue-in-cheek note, things are picking back up at work. The reorg has been settling in a reasonable manner.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0WUR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe87aab26-f529-4013-868a-342c5cbfa31e_1376x1152.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0WUR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe87aab26-f529-4013-868a-342c5cbfa31e_1376x1152.png 424w, https://substackcdn.com/image/fetch/$s_!0WUR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe87aab26-f529-4013-868a-342c5cbfa31e_1376x1152.png 848w, https://substackcdn.com/image/fetch/$s_!0WUR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe87aab26-f529-4013-868a-342c5cbfa31e_1376x1152.png 1272w, https://substackcdn.com/image/fetch/$s_!0WUR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe87aab26-f529-4013-868a-342c5cbfa31e_1376x1152.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0WUR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe87aab26-f529-4013-868a-342c5cbfa31e_1376x1152.png" width="516" height="432" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e87aab26-f529-4013-868a-342c5cbfa31e_1376x1152.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1152,&quot;width&quot;:1376,&quot;resizeWidth&quot;:516,&quot;bytes&quot;:166588,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.liu.blog/i/182452532?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe87aab26-f529-4013-868a-342c5cbfa31e_1376x1152.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0WUR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe87aab26-f529-4013-868a-342c5cbfa31e_1376x1152.png 424w, https://substackcdn.com/image/fetch/$s_!0WUR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe87aab26-f529-4013-868a-342c5cbfa31e_1376x1152.png 848w, https://substackcdn.com/image/fetch/$s_!0WUR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe87aab26-f529-4013-868a-342c5cbfa31e_1376x1152.png 1272w, https://substackcdn.com/image/fetch/$s_!0WUR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe87aab26-f529-4013-868a-342c5cbfa31e_1376x1152.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Internally, people were meme&#8217;ing about GOOG dropping below $200 early in the year. Nobody expected it to go above $300.</figcaption></figure></div><p>Halfway through the year, <a href="https://scale.com/blog/scale-ai-announces-next-phase-of-company-evolution">Meta &#8220;acquired&#8221; a 50% stake in Scale AI</a> for around $15 billion. As a result of the deal, shareholders were paid a one-time dividend. It was a pretty neat experience shared between me and my former coworkers. Startups rarely have an exit, and Meta acquisition was certainly unexpected.</p><p>In the back of my head, I&#8217;ve had a desire to give conference talks. After coming back from Defcon this year, I was inspired to actually do it. After preparing proposals and <a href="https://docs.google.com/presentation/d/1znvv_gKdgoAwx1kePxZ_KadVozszS396yy_DiiyVdBc/edit">slides</a>, I spoke at 3 different conferences this year. Speaking is a lot of work: you do a bunch of preparation that culminates in an hour-long presentation. But it&#8217;s fun and I glad I did it. It&#8217;s a nice way to share my work outside of the workplace.</p><div class="image-gallery-embed" data-attrs="{&quot;gallery&quot;:{&quot;images&quot;:[{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/abd98673-b213-4983-b98a-3b448dc87479_4284x5712.jpeg&quot;},{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3d3a6f6e-0128-499b-9a5e-aa627daa9f00_3024x4032.jpeg&quot;},{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/93280eb0-23b9-48a1-a4ab-9d60950380d2_3024x4032.jpeg&quot;},{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2a71569d-b67e-4edd-b8e4-1623f37423af_4284x5712.jpeg&quot;}],&quot;caption&quot;:&quot;Clockwise from top left: speaking at DevFest DC, speaking at BSides NoVA, hanging out with a robotic dog, speaker swag from BSides.&quot;,&quot;alt&quot;:&quot;&quot;,&quot;staticGalleryImage&quot;:{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ab5b8c7e-6ac3-494b-99e1-a5c3c87b0a63_1456x1456.png&quot;}},&quot;isEditorNode&quot;:true}"></div><p>So how would I summarize this year career-wise? Pretty good, albeit unexpectedly adventurous.</p><h2>Travel</h2><p>Compared to previous years, I didn&#8217;t travel much. Or rather, I had fewer trips. I definitely had my longest trip abroad this year.</p><p>In August, I went to Defcon in Las Vegas. That&#8217;s been an annual tradition for a while now. Though this year, there was a speaker who gave a talk on Privacy Sandbox: it was cool to see someone external talk about my project at work.</p><div class="image-gallery-embed" data-attrs="{&quot;gallery&quot;:{&quot;images&quot;:[{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/02c8a9e0-5120-431f-8c73-0c04e7f58c23_4032x3024.jpeg&quot;},{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4118fe3e-4b50-4577-ad5d-be673759d47c_3024x4032.jpeg&quot;},{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/65c7b892-7ea3-41ca-8db8-525ac61b8835_4284x5712.jpeg&quot;}],&quot;caption&quot;:&quot;Left to right: book signing with the Privacy Sandbox speaker, the inside of the signed book, me on a boat.&quot;,&quot;alt&quot;:&quot;&quot;,&quot;staticGalleryImage&quot;:{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d639bb1f-47cd-4a0a-8ad7-9c7d3bf759c3_1456x474.png&quot;}},&quot;isEditorNode&quot;:true}"></div><p>For most of November, I was abroad in Asia. I was going to <a href="https://www.w3.org/2025/11/TPAC/">a conference</a> in Kobe, Japan. But since I was already in Asia, why not stay for a while?</p><p>I started in Kobe, where I was mostly working. The rest of the month was a long vacation: I went to Taipei, Beijing, and Tokyo. It was my first time going to Taiwan and Japan, and I&#8217;m glad I fit so much into a single trip. A month in Asia is a long time, so I can&#8217;t really describe the details in a blog post. Needless to say, it was ton of fun, and I&#8217;m glad to be back home after being away for so long.</p><div class="image-gallery-embed" data-attrs="{&quot;gallery&quot;:{&quot;images&quot;:[{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a673d612-6828-4fcc-a5fa-6f93b58514c7_1980x3520.jpeg&quot;},{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a45249b4-9e44-4b4e-a1d8-3b9aebd0fa01_3024x4032.jpeg&quot;},{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ce03af05-8910-4974-943e-4c3b157a6ef0_4284x5712.jpeg&quot;},{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0b2ba65d-926e-4be0-91c1-567870079832_4284x5712.jpeg&quot;},{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8e005d4e-f1ec-4526-a1dc-cce4c09daac5_3260x4906.jpeg&quot;},{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a52efc53-d014-4da3-86d3-67f45f4763bb_5712x4284.jpeg&quot;}],&quot;caption&quot;:&quot;Clockwise from top left: eating Kobe beef, the night market in Taipei, doing the Killer Queen Jojo pose on top of Shibuya Sky, doing a Jojo pose in front of the Jojo store, wearing a kimono at Senso-Ji temple, omakase in Tokyo with various international friends.&quot;,&quot;alt&quot;:&quot;&quot;,&quot;staticGalleryImage&quot;:{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7e280efb-3ac9-4e87-b2f2-39f72cf68732_1456x964.png&quot;}},&quot;isEditorNode&quot;:true}"></div><h1>What&#8217;s next?</h1><p>The big lesson I want to take into 2026 is to avoid aimlessness. You must always have a goal in mind and something to work towards. It&#8217;s better to have a bad goal (and later switch to a better goal) than to not have any goals at all. Why? There&#8217;s no pressure to change when you&#8217;re aimless, and a lot of time can fly by before you &#8220;wake up.&#8221;</p><p>So how do I want to go about 2026? The theme is to be dialed in. <a href="https://marginalrevolution.com/">Tyler Cowen</a> pioneered the idea of having a personal production function. Most people are consumers, not producers. I&#8217;d like to be the latter.</p><ul><li><p>For example, I didn&#8217;t publish any blog posts (besides my annual reviews) this year. I&#8217;d like to change that. One blog post a month seems like a reasonable minimum.</p></li><li><p>I should be more aware of what&#8217;s going on in the industry outside of work. That means being an active member in external communities and opportunistically speaking at more conferences.</p></li><li><p>It&#8217;s important to have some side project to tinker on at all times, no matter how silly. For instance, I&#8217;m currently learning how to clone apartment keys. It doesn&#8217;t have to be ambitious, it just needs to exist.</p></li><li><p>And of course, I&#8217;d like to start learning Judo and be consistent with it.</p></li></ul><p>Happy new year!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!evOc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83b57b0a-2a69-4ebf-af14-068b48de9d21_5712x4284.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!evOc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83b57b0a-2a69-4ebf-af14-068b48de9d21_5712x4284.jpeg 424w, https://substackcdn.com/image/fetch/$s_!evOc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83b57b0a-2a69-4ebf-af14-068b48de9d21_5712x4284.jpeg 848w, https://substackcdn.com/image/fetch/$s_!evOc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83b57b0a-2a69-4ebf-af14-068b48de9d21_5712x4284.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!evOc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83b57b0a-2a69-4ebf-af14-068b48de9d21_5712x4284.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!evOc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83b57b0a-2a69-4ebf-af14-068b48de9d21_5712x4284.jpeg" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/83b57b0a-2a69-4ebf-af14-068b48de9d21_5712x4284.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:5195986,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.liu.blog/i/182452532?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83b57b0a-2a69-4ebf-af14-068b48de9d21_5712x4284.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!evOc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83b57b0a-2a69-4ebf-af14-068b48de9d21_5712x4284.jpeg 424w, https://substackcdn.com/image/fetch/$s_!evOc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83b57b0a-2a69-4ebf-af14-068b48de9d21_5712x4284.jpeg 848w, https://substackcdn.com/image/fetch/$s_!evOc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83b57b0a-2a69-4ebf-af14-068b48de9d21_5712x4284.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!evOc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83b57b0a-2a69-4ebf-af14-068b48de9d21_5712x4284.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The inside of my 2025 holiday card.</figcaption></figure></div><h1>Miscellaneous learnings</h1><h2>On human nature</h2><ul><li><p>People don&#8217;t know what they want, and they&#8217;re quite receptive to what you want. So be clear with what you want, and go for it. (Corollary: the squeaky wheel gets the grease. I mean this in a positive way. People are usually happy to help you.)</p></li><li><p>I&#8217;m quite likable as a person. At least in the long term. Though I don&#8217;t give the best first impressions, since I&#8217;m robotic. The solution to this seems to be to just own it and be clear if I&#8217;m joking around/being sarcastic. (People are bad at recognizing sarcasm.)</p></li><li><p>Be approachable. Approach people. Most people are chicken, so you should minimize friction for them.</p></li><li><p>I used to say that courage is the limiting resource, not intelligence. Though I still stand by that statement, I think it&#8217;s actually agency that matters. Courage is more of a means to cultivating agency. Be as high-agency as possible.</p></li></ul><h2>On progress</h2><ul><li><p>What has taught me the most and the fastest is doing reps, reps, reps.</p></li><li><p>There truly is no perfect time to start. Excessive waiting doesn&#8217;t beget any benefits. The first half of the year was less interesting than the second half because I was just waiting around. (Note that this is not the same as &#8220;precrastination.&#8221; Quickly workshopping solutions in your head is a useful skill.)</p></li><li><p>Do not be aimless. Have a bad goal is better than having no goal. You must be in the driver&#8217;s seat of your life, or else you&#8217;ll be dragged around, and time will just pass you by. Your attention is precious and limited.</p></li></ul><h2>On mortality</h2><ul><li><p>My life is pretty good. Like really freaking good. So when things don&#8217;t go my way, I shouldn&#8217;t be all that sad when putting everything into perspective.</p></li><li><p>When managing finances, there are three states of being: <a href="https://engaging-data.com/will-money-last-retire-early/">rich, broke, and dead</a>. Your life expectancy plays a huge role into how much you can and should spend.</p></li><li><p>Most things are just a means to an end, and you probably think otherwise because of your ego. Go to work and make money; your career isn&#8217;t a reflection of your value as a human. Apologize to others if you&#8217;re wrong; avoiding a moment of embarrassment isn&#8217;t worth a lifetime of regret.</p></li></ul><h2>On human relationships</h2><ul><li><p>There will be times that tempt you into exhibiting toxic behavior. Resist the urge; do not be toxic. Ever. On the flip side, you must have zero tolerance for toxic behavior from others.</p></li><li><p>Deal with interpersonal issues as soon as possible, even if they feel too small to be worth talking about. If problems grow and fester, it&#8217;ll be too late. Better to nip it in the bud.</p></li><li><p>And the biggest learning of the year: <strong>accept people for who they are.</strong> Just because you don&#8217;t vibe with someone doesn&#8217;t mean you&#8217;re broken or they&#8217;re broken. It doesn&#8217;t mean anyone did something wrong. Different people want different things, and you don&#8217;t have to change people. So you must learn to accept others (including yourself) for who they are, not what you want them to be. Then it becomes easier to appreciate the hidden beauty within everyone.</p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.liu.blog/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Congrats, you&#8217;ve read to the end. Did you know that you could subscribe for email updates?</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p><em><strong>Links to my previous year-in-review blog posts:</strong></em></p><ul><li><p><em><strong><a href="https://www.liu.blog/p/2024">2024</a></strong></em></p></li><li><p><em><strong><a href="https://www.liu.blog/p/2023">2023</a></strong></em></p></li></ul>]]></content:encoded></item><item><title><![CDATA[Advice on advice]]></title><description><![CDATA[Most advice is bad. Fortunately, we can dissect why it's bad and how to give advice that's less bad.]]></description><link>https://www.liu.blog/p/advice</link><guid isPermaLink="false">https://www.liu.blog/p/advice</guid><dc:creator><![CDATA[Andrew Liu]]></dc:creator><pubDate>Wed, 19 Feb 2025 15:02:52 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/d072b702-d459-4c2b-bb8e-176f63b9cb06_1024x768.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EgPZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebc6615-399f-47f7-bc4b-9aaeadfdf28d_1024x768.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EgPZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebc6615-399f-47f7-bc4b-9aaeadfdf28d_1024x768.jpeg 424w, https://substackcdn.com/image/fetch/$s_!EgPZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebc6615-399f-47f7-bc4b-9aaeadfdf28d_1024x768.jpeg 848w, https://substackcdn.com/image/fetch/$s_!EgPZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebc6615-399f-47f7-bc4b-9aaeadfdf28d_1024x768.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!EgPZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebc6615-399f-47f7-bc4b-9aaeadfdf28d_1024x768.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EgPZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebc6615-399f-47f7-bc4b-9aaeadfdf28d_1024x768.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1ebc6615-399f-47f7-bc4b-9aaeadfdf28d_1024x768.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EgPZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebc6615-399f-47f7-bc4b-9aaeadfdf28d_1024x768.jpeg 424w, https://substackcdn.com/image/fetch/$s_!EgPZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebc6615-399f-47f7-bc4b-9aaeadfdf28d_1024x768.jpeg 848w, https://substackcdn.com/image/fetch/$s_!EgPZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebc6615-399f-47f7-bc4b-9aaeadfdf28d_1024x768.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!EgPZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ebc6615-399f-47f7-bc4b-9aaeadfdf28d_1024x768.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><blockquote><p>"All models are wrong, some models are useful."<br><br>- some autistic statistician, probably</p></blockquote><p>I like to receive advice. Hearing others&#8217; perspectives expands my own thinking, and it's a helpful tool. What's not to love? But after listening to enough advice, you realize that not all advice is created equal. Even "good" advice shared with the best of intentions can send you down the wrong path.</p><p>When receiving advice, it's risky to listen blindly. The quality of your filtering mechanism decides the impact that advice has on your life. I would go so far as to say that the act of receiving advice well may be equally as difficult as giving good advice.</p><h1>Pitfalls with &#8220;good&#8221; advice</h1><p>If I were to compress all problems with advice into a phrase, it would be that <strong>context matters and incentives matter</strong>. Advice is not universally true, and true advice is not universally useful.</p><h2>Advice is context dependent</h2><p>What works for others may not work for you. People tend to share what worked for them and what they <em>think</em> is true. Unfortunately that guarantees nothing.</p><p>Take for example, the common advice to "just be yourself." It's not universally true and can even be destructive. Self-conscious people might benefit from being themselves, but delusional people will not. The receiver matters.</p><ul><li><p><strong>Corollary: Advice is vulnerable to the <a href="https://xyproblem.info/">XY problem</a>.</strong> If you give advice, are you addressing the core issue or some different-but-related problem?</p></li><li><p><strong>Corollary: Smart people can give stupid advice.</strong> Don&#8217;t assume smart people are infallible. Nobody knows your personal situation as well as you do.</p></li><li><p><strong>Corollary: Confidently-given advice warrants skepticism.</strong> Confidence is either backed up by evidence or delusion. Unless someone else knows the nuances of your life well, assume the latter.</p></li></ul><h2>Advice needs skin in the game</h2><p>Incentives matter. Consider the following pieces of advice, and notice what's wrong with them:</p><ul><li><p>"You should buy my online course." (Ulterior motive)</p></li><li><p>"Hurry up, get married, and have kids. Time is ticking!" (Projection)</p></li><li><p>"Don't stress out, you're perfect. The other person is wrong." (Walking on eggshells)</p></li></ul><p>Why doesn&#8217;t everybody give brutally honest advice? Because all advice givers play a meta game of some sort. Exploring <em>why</em> they say something is just as important as hearing <em>what</em> they say.</p><ul><li><p><strong>Corollary: Follow your own advice.</strong> It's easy to tell other people to do stuff. Beware hypocrites.</p></li><li><p><strong>Corollary: The only real advice is to think for yourself. </strong>You&#8217;re the only person with your own best interests in mind. Everything you hear passes through your own internal filtering mechanism. It&#8217;s your last line of defense.</p></li></ul><h1>The 3 axes of advice</h1><p>Advice tends to fall along 3 different spectrums:</p><ul><li><p>How it makes you feel.</p></li><li><p>How correct it is.</p></li><li><p>How useful it is.</p></li></ul><p>It's worth paying attention to where a piece of advice falls on each of these spectrums. Otherwise, you may improperly weigh advice. It's easy to conflate advice that makes you feel good with advice that's correct, for instance.</p><h2>Feel-good</h2><p>Some people just know how to say all the right words. Two different people might tell you the same thing, and only one of them can make it land. But whether something makes you feel good or not doesn't determine its validity.</p><p>Contrast these two statements:</p><ol><li><p>"You're unhealthy and need to lose weight."</p></li><li><p>"Don't worry, the perfect one is out there waiting for you."</p></li></ol><p>The rude piece of advice may be true, while the one that sounds good is completely meaningless!</p><h2>Correct</h2><p>Advice that is "more correct" may be worse than advice that's directionally correct (or even wrong). The receiver may suffer from information overload or misinterpret the advice.</p><p>Here are two approaches to weight-loss advice:</p><ol><li><p>"Make sure to keep your daily caloric intake slightly below your TDEE."</p></li><li><p>"Stop drinking soda."</p></li></ol><p>I zoned out halfway through reading the first bullet point.</p><h2>Useful</h2><p>Arguably, this is the only trait around advice that matters. Whether advice is useful has painfully little to do with whether it sounds good or is true.</p><p>For example:</p><ol><li><p>"Follow your talent; don't follow your passion."</p></li><li><p>"Just keep going to the gym, and it'll cure your anxiety."</p></li></ol><p>I'm not sure if these statements feel good. I don't even know if they're correct. But they&#8217;ve sure been helpful.</p><h1>Receiving and giving better advice</h1><p><strong>As a receiver:</strong></p><ol><li><p>Focus first on whether the advice is useful. Disregard everything else.</p></li><li><p>Hear what everyone has to say, but don&#8217;t necessarily adopt their advice.</p></li></ol><p><strong>As a giver:</strong></p><ol><li><p>Prioritize making the advice useful. You <em>do</em> want to help, right?</p></li><li><p>Then prioritize making the advice feel good. It&#8217;ll increase the chance that others listen to you. &#8220;Tough love&#8221; is seldom persuasive.</p></li><li><p>Remember you don&#8217;t have to give advice in the first place if it&#8217;s not going to be a net positive.</p></li></ol><p>But feel free to ignore everything I said. This is just my advice.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.liu.blog/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[2024 Year in Review]]></title><description><![CDATA[My 2024 year in review.]]></description><link>https://www.liu.blog/p/2024</link><guid isPermaLink="false">https://www.liu.blog/p/2024</guid><dc:creator><![CDATA[Andrew Liu]]></dc:creator><pubDate>Tue, 07 Jan 2025 04:41:17 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e681762a-7ce2-4dc6-a1b4-6d0469f2c025_2000x1333.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KMHA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2143e9bb-d5b4-47c9-b1b5-79a6e27df1df_2000x1333.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KMHA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2143e9bb-d5b4-47c9-b1b5-79a6e27df1df_2000x1333.jpeg 424w, https://substackcdn.com/image/fetch/$s_!KMHA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2143e9bb-d5b4-47c9-b1b5-79a6e27df1df_2000x1333.jpeg 848w, https://substackcdn.com/image/fetch/$s_!KMHA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2143e9bb-d5b4-47c9-b1b5-79a6e27df1df_2000x1333.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!KMHA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2143e9bb-d5b4-47c9-b1b5-79a6e27df1df_2000x1333.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KMHA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2143e9bb-d5b4-47c9-b1b5-79a6e27df1df_2000x1333.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2143e9bb-d5b4-47c9-b1b5-79a6e27df1df_2000x1333.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KMHA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2143e9bb-d5b4-47c9-b1b5-79a6e27df1df_2000x1333.jpeg 424w, https://substackcdn.com/image/fetch/$s_!KMHA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2143e9bb-d5b4-47c9-b1b5-79a6e27df1df_2000x1333.jpeg 848w, https://substackcdn.com/image/fetch/$s_!KMHA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2143e9bb-d5b4-47c9-b1b5-79a6e27df1df_2000x1333.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!KMHA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2143e9bb-d5b4-47c9-b1b5-79a6e27df1df_2000x1333.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@kajtek?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Kajetan Sumila</a> / <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Unsplash</a></figcaption></figure></div><p>For me, the overarching theme of 2024 was building infrastructure and reducing life volatility. While that sounds a lot like "settling down," I'd argue I'm going for the opposite: you can only do so many things at a time. If the rest of your life isn't in order, how do you expect to hit ambitious goals? The less random stuff you have to worry about in life, the easier it is to focus on what matters.</p><p>Anyway, enough yapping. Here are some highlights from 2024:</p><ul><li><p>I moved to Crystal City.</p></li><li><p>I returned to Google after being away for 5 years.</p></li><li><p>I started hosting parties for the tech community in Washington DC.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Xw-V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36e764c8-a18a-4363-8778-2f868365581f_2000x1500.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Xw-V!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36e764c8-a18a-4363-8778-2f868365581f_2000x1500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Xw-V!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36e764c8-a18a-4363-8778-2f868365581f_2000x1500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Xw-V!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36e764c8-a18a-4363-8778-2f868365581f_2000x1500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Xw-V!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36e764c8-a18a-4363-8778-2f868365581f_2000x1500.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Xw-V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36e764c8-a18a-4363-8778-2f868365581f_2000x1500.jpeg" width="2000" height="1500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/36e764c8-a18a-4363-8778-2f868365581f_2000x1500.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1500,&quot;width&quot;:2000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!Xw-V!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36e764c8-a18a-4363-8778-2f868365581f_2000x1500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Xw-V!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36e764c8-a18a-4363-8778-2f868365581f_2000x1500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Xw-V!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36e764c8-a18a-4363-8778-2f868365581f_2000x1500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Xw-V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36e764c8-a18a-4363-8778-2f868365581f_2000x1500.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The front of my 2024 holiday card.</figcaption></figure></div><h2>Recap of the year</h2><p>Coming from <a href="https://andrew.cloud/2023/">last year's review</a>, on the top of my mind was the need to leave the suburbs, make a notable career shift, and maintain the trajectory from the previous year. It's not much, but each of these was a major project.</p><p>Here was my thought process: where I live and where I work can be the two most volatile life variables. What if I could move to a place where I'd never want to leave, and what if I could have my work be less hectic than a tech startup? Then those two variables could effectively run on autopilot. I could focus on everything else.</p><p>(As per usual, I'm not going to publish many of the spicier details. But you're always welcome to <a href="https://andrew.cloud/contact">ask me about them in private</a>.)</p><h3>Moving</h3><p>Early in the year, I decided it was time to leave...to go to Manhattan. If I were to move to a city, what better place than New York? It didn't sit quite right with me, but I dismissed it as a matter of expanding my comfort zone.</p><p>By a stroke of luck, I had a friend with an apartment in Murray Hill that would be vacant for a few months. I took up his offer to stay there. The plan was to do a month-long NYC trial period and begin touring apartments. Less than an hour after arriving in the city, I realized I didn't want to move to NYC. You see, I don't believe in sunk costs. As a DMV-raised kid, I'm a bit of a clean freak. The place is too filthy. Seeing the average resident on the street was depressing: they just look so dead inside. I was having a bad day, yet I was the happiest person in Manhattan. Three days after arriving, I left the city. Longest month of my life.</p><p>The biggest learning from the trip was that I needed "boots on the ground" as soon as possible. I learn fast and can make quick decisions once I gather real experiences. The next candidate for where I'd live was Washington DC/Northern Virginia. So I immediately started going on apartment tours. No time for theorizing.</p><p>One day I was having dinner with a bunch of friends at Amazon in Crystal City, and we went on a walk after eating. We passed by a building under construction. It has signs saying that it was leasing, and that piqued my interest. The next day, I toured the place, and I realized that I'd found my HQ2.</p><div class="image-gallery-embed" data-attrs="{&quot;gallery&quot;:{&quot;images&quot;:[{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b2fb2ab8-4b31-46e7-9afe-ac4cce7f85d9_1024x768.jpeg&quot;},{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/11ab82cf-2447-471c-9d57-0151df10c5e1_1600x1200.jpeg&quot;},{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5a75f6dc-b949-4855-bcc0-30efb47ea480_1024x768.jpeg&quot;},{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/66cc7e2a-a9ef-401c-bb91-5dd6afb2bef4_768x1024.jpeg&quot;}],&quot;caption&quot;:&quot;(top left) An empty corner of the apartment. (top right) Recruiting help for my move-in. (bottom left) The layout afterward. (bottom right) A view into DC.&quot;,&quot;alt&quot;:&quot;&quot;,&quot;staticGalleryImage&quot;:{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0d3d3a94-366e-4541-a5e8-4f32eb174043_1456x1456.png&quot;}},&quot;isEditorNode&quot;:true}"></div><p>Over the next couple of months, I'd move to Crystal City. Staying within the DMV was convenient, as I had plenty of friends to help with the move (and even do the interior design of the place). The place is lovely.</p><h3>Work</h3><p>Most of the second quarter of the year was dedicated to interviewing around. I figured it was time to leave Stairwell and return to Big Tech. When I had <a href="https://andrew.cloud/leaving-google/">left Google the first time around</a>, I believed that a person was either a startup guy or a big company guy. My belief is now that everybody has a certain number of "startup tokens" in their life that gets consumed for each startup they work at. I had already burned many such tokens, so it was time for a change of pace. And thus began the LeetCode grind.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6TUS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3afbf4d-de37-4a67-b0fb-16122af37510_1198x836.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6TUS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3afbf4d-de37-4a67-b0fb-16122af37510_1198x836.png 424w, https://substackcdn.com/image/fetch/$s_!6TUS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3afbf4d-de37-4a67-b0fb-16122af37510_1198x836.png 848w, https://substackcdn.com/image/fetch/$s_!6TUS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3afbf4d-de37-4a67-b0fb-16122af37510_1198x836.png 1272w, https://substackcdn.com/image/fetch/$s_!6TUS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3afbf4d-de37-4a67-b0fb-16122af37510_1198x836.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6TUS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3afbf4d-de37-4a67-b0fb-16122af37510_1198x836.png" width="1198" height="836" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f3afbf4d-de37-4a67-b0fb-16122af37510_1198x836.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:836,&quot;width&quot;:1198,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!6TUS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3afbf4d-de37-4a67-b0fb-16122af37510_1198x836.png 424w, https://substackcdn.com/image/fetch/$s_!6TUS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3afbf4d-de37-4a67-b0fb-16122af37510_1198x836.png 848w, https://substackcdn.com/image/fetch/$s_!6TUS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3afbf4d-de37-4a67-b0fb-16122af37510_1198x836.png 1272w, https://substackcdn.com/image/fetch/$s_!6TUS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3afbf4d-de37-4a67-b0fb-16122af37510_1198x836.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">My LeetCode streak.</figcaption></figure></div><p>The job market in tech has evolved in the past few years. From interviewing around, I've noticed many differences:</p><ul><li><p>Though the job market isn't what it used to be in the late 2010's, it's not that bad for senior folks. I didn't have much trouble gathering interest and landing interviews. However, I've that's not the case for new grads. I feel bad for them, because I'm not sure what I'd do if I were in their shoes.</p></li><li><p>The interviewing "meta" has evolved for the better, in my opinion. Companies now openly say they give "LeetCode-styled" interview questions rather than saying some bullshit about coding questions being around fundamentals. The openness actually means interviewers end up asking better questions.</p></li><li><p>Nowadays, FAANG companies require candidates to go through team matching before receiving an offer. Back in the day, it was the other way around. I find it pretty reasonable. But that creates the scenario where candidates who passed the technical interviews can be stuck in "team matching limbo" for an indefinite period of time.</p></li><li><p>Despite the changes from COVID, remote work is not sticking as much as people expected. And generally, companies are trying to pull workers back to the tech hubs. However, it seems like hybrid has become the default for tech work.</p></li></ul><p>All things considered, I didn't apply to too many places. My criteria was simple: go to a FAANG or FAANG-adjacent tech company that was either remote or had a DC office. It wasn't all sunshine and rainbows: I tend to obsess over problems and fixate on worst-case scenarios. For instance, I temporarily developed a bit of a LeetCode "addiction" that impacted my physical health. And at times, I'd randomly worry about the prospect of having to break my lease.</p><p>Though everything panned out perfectly in the end. I returned to Google in their DC office. It was almost 5 years on the dot since I'd originally left. Readjusting to Google was pretty easy. I'm having a great time.</p><div class="image-gallery-embed" data-attrs="{&quot;gallery&quot;:{&quot;images&quot;:[{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/092ff71b-b7d6-4bd5-ae40-92545b124985_1024x768.jpeg&quot;},{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f4cf1aa5-b755-4fee-b6d0-ddaa2d642c67_768x1024.jpeg&quot;}],&quot;caption&quot;:&quot;(left) The lobby of the Google DC office. (right) My Noogler hat.&quot;,&quot;alt&quot;:&quot;&quot;,&quot;staticGalleryImage&quot;:{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a4dfa812-d44e-4a11-b5f4-c114a4a41259_1456x720.png&quot;}},&quot;isEditorNode&quot;:true}"></div><h3>Travel</h3><p>Travel was relatively light this year. The first half of the year was completely dedicated to moving and interviewing. It's probably better that way: I'm not the biggest fan of traveling, as it breaks a lot of good habits you form from your normal routine.</p><p>Besides various trips to NYC and the Bay Area, I took my annual Defcon trip, and I did an Asia trip where I visited China and then went to Thailand for the first time:</p><ul><li><p>This Defcon, I went as a member of the press. How? I'm a journalist for this blog!</p></li><li><p>In China, I went to Beijing, Wuxi, and Shanghai. They all have very different vibes.</p></li><li><p>I visited Chiang Mai and Bangkok in Thailand. Like with China, the cities all have different vibes. I also saw live Muay Thai for the first time.</p></li></ul><div class="image-gallery-embed" data-attrs="{&quot;gallery&quot;:{&quot;images&quot;:[{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3d88b573-572e-4f12-abfe-1287650e2baa_1024x768.jpeg&quot;},{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/75a15c9b-1497-4616-bb67-f3b4e93bc925_768x1024.jpeg&quot;},{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4671ce9f-c311-403f-a4a9-68f1af81549c_768x1024.jpeg&quot;}],&quot;caption&quot;:&quot;(left) Defcon in Vegas. (center) The three tallest towers in Shanghai. (right) A photo bomber in Chiang Mai.&quot;,&quot;alt&quot;:&quot;&quot;,&quot;staticGalleryImage&quot;:{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/20d0cc52-34a9-424f-8cbb-1b6658443063_1456x474.png&quot;}},&quot;isEditorNode&quot;:true}"></div><h3>Hobbies and Projects</h3><p>When it comes to hobbies, this year felt overshadowed by last year. There wasn't anything wrong; 2023 was just such a good year that it was hard to compete with. I started so many new things last year, so this year was mostly continuing what I started. I continued to do improv, albeit less due to other life changes. I got my fourth stripe in BJJ and went on a hiatus due to moving.</p><p>Something new that happened was the creation of <a href="https://www.dctechparties.com/">DC Tech Parties</a>. Washington DC doesn't have the same tech community that SF or NYC have, so I figured there was an opportunity to construct a social center of gravity. So a few DC friends and I began party hosting. As with all new endeavors, you expect it to be a dumpster fire. But instead, we ended up having multiple events with hundreds of people.</p><div class="image-gallery-embed" data-attrs="{&quot;gallery&quot;:{&quot;images&quot;:[{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b1a26587-0e81-4cf2-8a27-ceb7c62e3b9a_768x1024.jpeg&quot;},{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4e4c63ac-eb67-4f4d-9354-13fd1c763896_1024x768.jpeg&quot;},{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8ad3f4ab-2952-4fbe-b810-c98f122957ee_768x1024.jpeg&quot;}],&quot;caption&quot;:&quot;(left) A custom tech-themed drink menu. (center) The DC Tech Parties venue. (right) The organizers behind DC Tech Parties.&quot;,&quot;alt&quot;:&quot;&quot;,&quot;staticGalleryImage&quot;:{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eff20b65-3f37-4915-b894-eb38c079b91a_1456x474.png&quot;}},&quot;isEditorNode&quot;:true}"></div><p>On the piano front, I'm building a new repertoire. When I resumed playing last year, I focused on relearning pieces I had previously played. However, I no longer need a teacher; I can self-teach pretty much any song. It's quite liberating: I can teach myself all of the bangers. Earlier in the year, I taught myself Liebestraum No. 3 by Liszt, and after that, I learned Fantaisie-Impromptu by Chopin. Liebestraum is in a good-enough state (video below). While I've learned the entirety of Fantasie-Impromptu, it's not performance-ready quite yet.</p><div id="youtube2-CpAR5Wz4R3I" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;CpAR5Wz4R3I&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/CpAR5Wz4R3I?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h2>What's next?</h2><p>Well this is embarrassing. I haven't thought that far. The end of the year was filled with one-off social events (including ones that I hosted), so it's pretty easy to get lost in the weeds. It'll be easier to mull things over in January.</p><p>I have two initial thoughts that don't offer much closure, unfortunately. First, my life baseline is pretty good, so it's pretty hard to complain. Maybe I should just enjoy the moment. Second, a lot of things require maintenance (BJJ, hosting, etc.) so I can't arbitrarily drop the good things I have in pursuit of shiny new conquests.</p><p>This is all a fancy way of saying that I have no clue what I'm doing.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tN30!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3af858c-7933-4014-a626-3e3e69140ea2_2000x1500.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tN30!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3af858c-7933-4014-a626-3e3e69140ea2_2000x1500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!tN30!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3af858c-7933-4014-a626-3e3e69140ea2_2000x1500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!tN30!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3af858c-7933-4014-a626-3e3e69140ea2_2000x1500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!tN30!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3af858c-7933-4014-a626-3e3e69140ea2_2000x1500.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tN30!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3af858c-7933-4014-a626-3e3e69140ea2_2000x1500.jpeg" width="2000" height="1500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a3af858c-7933-4014-a626-3e3e69140ea2_2000x1500.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1500,&quot;width&quot;:2000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!tN30!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3af858c-7933-4014-a626-3e3e69140ea2_2000x1500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!tN30!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3af858c-7933-4014-a626-3e3e69140ea2_2000x1500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!tN30!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3af858c-7933-4014-a626-3e3e69140ea2_2000x1500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!tN30!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3af858c-7933-4014-a626-3e3e69140ea2_2000x1500.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The back of my 2024 holiday card.</figcaption></figure></div><h2>Miscellaneous learnings</h2><ul><li><p>Showing up is literally half the battle. Showing up again is the other half. (This is especially important for me, since almost nothing in life seems to go well on the first try.)</p></li><li><p>Respect your social battery. I'm an introvert who can trick people into think I'm extroverted. But if I burn out my social battery, I'll end up paying with my health.</p></li><li><p>I'm actually neurotic as fuck whenever I experience cognitive dissonance. I suspect that's the case for most seemingly "emotionless" people.</p></li><li><p>Fear of rejection is worse than rejection. I'm pretty good at taking rejection, but I'm bad at putting myself at risk of rejection. Besides, my life is objectively too good to be sad about rejection.</p></li><li><p>Rumination is waste of time. You should be focused on the present or the future. Though rumination isn't the same as reflection or introspection. When examining the past, it must be in service of organizing your thoughts or forming a strategy for the future.</p></li><li><p>Power dynamics and market forces apply to most things. Changing your environment can flip those dynamics. For example, my thought process while apartment-hunting differed wildly by location. While in Manhattan, I kept asking myself "what can I tolerate?" But in NoVA, I got to be picky: there were too many good options.</p></li><li><p>Direct strategies usually beat out indirect ones. Boots on the ground. You learn much faster by trying something out, failing, and iterating. On the other hand, making grand plans tend to be a waste of time, since they usually get flushed down the toilet in lieu of real world data.</p></li><li><p>Never drink the Kool-Aid. This isn't a new learning, and I've included it again because I struggle to follow this.</p></li><li><p>Investing money into your external appearance is worth it. This not just limited to clothing and can include aspects such as your living situation.</p></li><li><p>Improv and party hosting are life changing. I'm happier. It's easier to talk to people. It's easier to make other people happy. It took me a year to realize this, and I'm including it because it's such a big deal.</p></li></ul>]]></content:encoded></item><item><title><![CDATA[Macbook setup 2024 update]]></title><description><![CDATA[How I set up a fresh laptop (revised 2024 edition).]]></description><link>https://www.liu.blog/p/mac-setup-2024</link><guid isPermaLink="false">https://www.liu.blog/p/mac-setup-2024</guid><dc:creator><![CDATA[Andrew Liu]]></dc:creator><pubDate>Fri, 12 Jul 2024 03:03:17 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/b9e81744-ab52-40c8-889a-db7d55e252c5_2000x2000.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1rl4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe60d86a2-0762-4d57-b827-2ee4255ca1cf_2000x2000.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1rl4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe60d86a2-0762-4d57-b827-2ee4255ca1cf_2000x2000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1rl4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe60d86a2-0762-4d57-b827-2ee4255ca1cf_2000x2000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1rl4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe60d86a2-0762-4d57-b827-2ee4255ca1cf_2000x2000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1rl4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe60d86a2-0762-4d57-b827-2ee4255ca1cf_2000x2000.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1rl4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe60d86a2-0762-4d57-b827-2ee4255ca1cf_2000x2000.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e60d86a2-0762-4d57-b827-2ee4255ca1cf_2000x2000.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1rl4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe60d86a2-0762-4d57-b827-2ee4255ca1cf_2000x2000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1rl4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe60d86a2-0762-4d57-b827-2ee4255ca1cf_2000x2000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1rl4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe60d86a2-0762-4d57-b827-2ee4255ca1cf_2000x2000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1rl4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe60d86a2-0762-4d57-b827-2ee4255ca1cf_2000x2000.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@applefanboy?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">AB</a> / <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Unsplash</a></figcaption></figure></div><p>It's been about a year since I published my <a href="https://andrew.cloud/mac-setup/">laptop setup guide</a>. Since then, I've tweaked a few more settings and provisioned a few more laptops.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;0d678c0f-2043-4f08-a410-c2ec549aa9fe&quot;,&quot;caption&quot;:&quot;In June 2023, Apple released the 15-inch version of the MacBook Air. I was due for a laptop upgrade, and it was the perfect form factor. It's surprising that they never had a \&quot;non-pro\&quot; laptop with a large screen size.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;How I set up a new MacBook&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:9212428,&quot;name&quot;:&quot;Andrew Liu&quot;,&quot;bio&quot;:null,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/5c353352-4762-4d4b-8b9d-e6d3ce745326_340x340.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2023-07-03T02:08:39.000Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/061b5157-48b7-4b07-98d3-a0f9a6f5993c_2000x1333.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://woke.substack.com/p/mac-setup&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:157216098,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Andrew Liu's Blog&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e5f32c2-8769-436f-ba6e-1bf6ad755771_1280x1280.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><h1>Native Settings</h1><p>Everything here is modified within the System Settings app.</p><ul><li><p><a href="https://support.apple.com/guide/mac-help/change-computers-local-hostname-mac-mchlp2322/mac">Change your laptop's hostname</a> to something unique. A templated name like <code>yourname-mbp</code> is bound to have namespace collisions.</p></li><li><p>Within the Keyboard section...</p><ul><li><p>Customize the modifier keys (<code>Keyboard Shortcuts &gt; Modifier Keys</code>). I remap the caps lock key to escape.</p></li><li><p>Go to <code>Text Replacements...</code> and remove all entries.</p></li></ul></li><li><p>Within the Control Center, set <code>Automatically hide and show the menu bar</code> to <code>Never</code>.</p></li><li><p>Within the Lock Screen section, set <code>Require password after sceen saver begins or display is turned off</code> to <code>Immediately</code>. This locks the laptop immediately if the lid closes.</p></li><li><p>Within the Appearance section...</p><ul><li><p>Set <code>Show scroll bars</code> to <code>Always</code> .</p></li><li><p>Set <code>Click on the scroll bar to</code> to <code>Jump to the spot that's clicked</code>.</p></li></ul></li><li><p>Within the Desktop &amp; Dock settings, set windows to minimize using the scale effect.</p></li><li><p>Customize the hot corners. Remove the quick note from the bottom right, and add the notification center to the top right. That way, if you're not using a trackpad, you can still easily pull up notifications.</p></li></ul><h1>Finder</h1><p>There are a bunch of finder settings. I loosely follow the steps outlined in <a href="https://www.youtube.com/watch?v=dVxMrVJ58as&amp;t=164s">this video</a>. Just give it a watch and follow along.</p><p>For reference, this is what my finder window looks like after it's been set up. You can compare to mine as reference.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_3Ru!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3819401d-3489-4eab-a384-5886041cc259_1826x996.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_3Ru!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3819401d-3489-4eab-a384-5886041cc259_1826x996.png 424w, https://substackcdn.com/image/fetch/$s_!_3Ru!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3819401d-3489-4eab-a384-5886041cc259_1826x996.png 848w, https://substackcdn.com/image/fetch/$s_!_3Ru!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3819401d-3489-4eab-a384-5886041cc259_1826x996.png 1272w, https://substackcdn.com/image/fetch/$s_!_3Ru!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3819401d-3489-4eab-a384-5886041cc259_1826x996.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_3Ru!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3819401d-3489-4eab-a384-5886041cc259_1826x996.png" width="1826" height="996" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3819401d-3489-4eab-a384-5886041cc259_1826x996.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:996,&quot;width&quot;:1826,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!_3Ru!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3819401d-3489-4eab-a384-5886041cc259_1826x996.png 424w, https://substackcdn.com/image/fetch/$s_!_3Ru!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3819401d-3489-4eab-a384-5886041cc259_1826x996.png 848w, https://substackcdn.com/image/fetch/$s_!_3Ru!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3819401d-3489-4eab-a384-5886041cc259_1826x996.png 1272w, https://substackcdn.com/image/fetch/$s_!_3Ru!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3819401d-3489-4eab-a384-5886041cc259_1826x996.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A screenshot of my default Finder window.</figcaption></figure></div><h1>Apps</h1><p>Most of the apps in the <a href="https://andrew.cloud/mac-setup/">previous blog post</a> have stayed the same. However, I have added some extras. I personally pay for all of them, but they have free versions that work great too.</p><ul><li><p><a href="https://aptonic.com/">Dropzone 4</a> to have a place on the menu bar to send items or do quick actions.</p></li><li><p><a href="https://coconut-flavour.com/coconutbattery/">Coconut Battery</a> to monitor battery health.</p></li><li><p><a href="https://apphousekitchen.com/">AlDente</a> to regulate battery charge.</p></li><li><p><a href="https://github.com/ther0n/UnnaturalScrollWheels">UnnaturalScrollWheels</a> to have proper trackpad and mouse scrolling at the same time.</p></li><li><p><a href="https://www.macbartender.com/">Bartender 5</a> to organize the menu bar.</p></li></ul><p>And that's it. You now have a perfectly functional MacBook!</p>]]></content:encoded></item><item><title><![CDATA[Hosting a Colab GPU runtime on Windows]]></title><description><![CDATA[How I set up a GPU-powered Python kernel (using a Windows machine in my basement).]]></description><link>https://www.liu.blog/p/jupyter</link><guid isPermaLink="false">https://www.liu.blog/p/jupyter</guid><dc:creator><![CDATA[Andrew Liu]]></dc:creator><pubDate>Sun, 31 Mar 2024 05:05:02 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/64affaeb-6273-400c-8794-16e12fc38dd4_2000x1478.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jORn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2efa1572-6288-4a5f-806a-4122238e4d1c_2000x1478.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jORn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2efa1572-6288-4a5f-806a-4122238e4d1c_2000x1478.jpeg 424w, https://substackcdn.com/image/fetch/$s_!jORn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2efa1572-6288-4a5f-806a-4122238e4d1c_2000x1478.jpeg 848w, https://substackcdn.com/image/fetch/$s_!jORn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2efa1572-6288-4a5f-806a-4122238e4d1c_2000x1478.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!jORn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2efa1572-6288-4a5f-806a-4122238e4d1c_2000x1478.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jORn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2efa1572-6288-4a5f-806a-4122238e4d1c_2000x1478.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2efa1572-6288-4a5f-806a-4122238e4d1c_2000x1478.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jORn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2efa1572-6288-4a5f-806a-4122238e4d1c_2000x1478.jpeg 424w, https://substackcdn.com/image/fetch/$s_!jORn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2efa1572-6288-4a5f-806a-4122238e4d1c_2000x1478.jpeg 848w, https://substackcdn.com/image/fetch/$s_!jORn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2efa1572-6288-4a5f-806a-4122238e4d1c_2000x1478.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!jORn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2efa1572-6288-4a5f-806a-4122238e4d1c_2000x1478.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@timgarifov?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Timur Garifov</a> / <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Unsplash</a></figcaption></figure></div><p>The title's a mouthful. Let me explain:</p><ol><li><p>I want remote access to a Python kernel with GPU acceleration.</p></li><li><p>Renting GPU compute is expensive. (I'm just casually tinkering around.)</p></li><li><p>I have a physical GPU at home, BUT it's on a Windows desktop.</p></li></ol><p>So the question is how do I expose a GPU-powered Jupyter Notebook to a remote machine?</p><ul><li><p>The notebook must have GPU acceleration available.</p></li><li><p>The notebook must be remotely accessible.</p></li><li><p>My desktop must not get pwned.</p></li><li><p>Ideally the Windows host experiences minimal changes or side effects.</p></li></ul><p>After some tinkering, I ended up with an arrangement that checks all the boxes. The Windows machine hosts a Linux environment via <a href="https://learn.microsoft.com/en-us/windows/wsl/about">WSL</a>. The Linux environment installs <a href="https://tailscale.com/">Tailscale</a>, so my other machines can reach it. Then the Linux environment acts as a normal notebook server.</p><p>Here's how I set it up.</p><h2>Choosing the Host (WSL)</h2><p>We start with a standard Windows host machine. On Windows, we also have the option to use WSL or a virtual machine.</p><ul><li><p>Virtual machines do not support GPU passthrough (while the host is also using the GPU). This is a non-starter.</p></li><li><p>Windows is a yucky operating system. Let's prefer to avoid it.</p></li><li><p>Dual booting Linux is a possibility, but the Windows host would not be able to operate at the same time.</p></li><li><p>WSL supports GPU passthrough, but the networking aspect is complicated. However, all of this is solved by Tailscale. This is the preferred route.</p></li></ul><p><a href="https://ubuntu.com/desktop/wsl">Installing Ubuntu</a> (or any other distro) for WSL is pretty straightforward. Once you're on your Linux "machine," you can verify that it does indeed have GPU access.</p><div class="captioned-image-container"><figure><pre><code>&#10095; uname -r
5.15.146.1-microsoft-standard-WSL2
&#10095; nvidia-smi -L
GPU 0: NVIDIA GeForce GTX 1070</code></pre><figcaption class="image-caption">As you can see here, WSL has access to the host's GPU.</figcaption></figure></div><h2>Installing Tailscale</h2><p>For those unfamiliar with Tailscale, the simplest way I can describe is as <a href="https://tailscale.com/blog/how-tailscale-works">a VPN that just works</a>. You can reach any machine in the network, even if it's behind a NAT. That way, you don't arbitrarily expose your machine to the public Internet.</p><p>Installing Tailscale in WSL comes with <a href="https://tailscale.com/kb/1295/install-windows-wsl2#considerations">a few caveats</a> though. WSL does not come with <a href="https://askubuntu.com/a/1379567">Systemd enabled</a>, so many services will not work. Tailscale requires a daemon, for example. (We'll also want other services, such as SSH.) Fortunately, enabling Systemd is as simple as modifying a config file. In <code>/etc/wsl.conf</code>, set the configuration as such:</p><div class="captioned-image-container"><figure><pre><code>&#10095; sudo cat /etc/wsl.conf
[boot]
systemd=true</code></pre><figcaption class="image-caption">WSL doesn't have Systemd enabled by default.</figcaption></figure></div><p>Now you can <a href="https://tailscale.com/kb/1017/install">install Tailscale</a>. You'll also want to install additional dependencies:</p><ul><li><p><a href="https://www.youtube.com/watch?v=VjkE4dqdHX8">SSH for remote access</a> (and port forwarding) to the machine</p></li><li><p>Tmux to keep the WSL instance and Jupyter server running in the background</p></li></ul><div class="captioned-image-container"><figure><pre><code># Install SSH server and tmux.
sudo apt install openssh-server tmux

# Enable SSH.
sudo systemctl enable ssh
sudo system status ssh

# Install Tailscale and join the tailnet.
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up</code></pre><figcaption class="image-caption">Within WSL, you'll need to set up SSH, tmux, and Tailscale.</figcaption></figure></div><p>You'll want to configure SSH and Tailscale as necessary. After all of this, don't forget to reboot the WSL instance.</p><h2>Starting a Jupyter Server</h2><p>With all the dependencies set up, you can <a href="https://jupyter.org/install">set up Jupyter Lab</a> in your WSL instance. It's a matter of installing a single PyPI package:</p><div class="captioned-image-container"><figure><pre><code>pip install jupyterlab</code></pre><figcaption class="image-caption">Jupyter Lab is the only required PyPI package for now. You can install more later.</figcaption></figure></div><p>Python should come out of the box in the Ubuntu WSL distribution. You may want to install other packages, but that can be done later within the notebook itself.</p><p>You can now start a Jupyter server. Most flags aren't critical <a href="https://research.google.com/colaboratory/local-runtimes.html">despite the documentation</a>, but you will need to make sure the server is protected by a token, or else Colab won't be able to connect to it. Additionally, you'll need to set the IP address the server listens on. By default it'll listen on <code>localhost</code>, which prevents remote access.</p><ul><li><p>If you have the server listen on <code>0.0.0.0</code>, it will accept connections from any origin. Usually this is bad security practice, but since the WSL instance is not publicly accessible, it's the end of the world.</p></li><li><p>Alternatively, you can set it to <code>$(tailscale ip -4)</code>. That forces the incoming connection to come from within the tailnet. The downside to this approach is that you'll have to run port forwarding for Colab even if you're on the Windows host OS. (This is described in more detail later.)</p></li></ul><p>With all the nuances out of the way, here's the command you can copy and paste. Be sure to run it within a tmux session.</p><div class="captioned-image-container"><figure><pre><code># A few notes:
#
# 1) Do this within a tmux session. You can detach from it later.
# 2) You can alternatively hardcode "0.0.0.0" for the --ip flag.
# 3) You can unset --IdentityProvider.token, but don't leave it blank.
#
jupyter lab \
  --no-browser \
  --ip="$(tailscale ip -4)" \
  --IdentityProvider.token="image_some_custom_password_here"</code></pre><figcaption class="image-caption">This command will start the Jupyter server and make it available to other machines in the tailnet. Run it within a tmux session.</figcaption></figure></div><p>Once the server is active, you can detach from the tmux session. Be sure to keep the session alive, so the notebook server (and Tailscale connection) do not disappear.</p><h2>Connecting to Jupyter Lab</h2><p>Now we switch gears and move to another computer. Before doing so, take a note of the tailnet IP (<code>tailscale ip -4</code>) or hostname of the WSL instance.</p><p>From any remote machine, as long as its <a href="https://tailscale.com/kb/1347/installation">part of the tailnet</a>, it can simply access Jupyter Lab. Just visit <code>http://wsl-tailscale-hostname-or-ip:8888/lab</code>. Pretty simple!</p><h2>Connecting to Colab</h2><blockquote><p><strong>Warning:</strong> Don't do this for any arbitrary Colab notebook running untrusted code. Remember that you're giving it <strong>remote code execution</strong> privileges on your machine.</p></blockquote><p>Using the Jupyter server as a Colab backend is a bit more involved. Colab only supports <code>localhost</code> as a local runtime host for some reason. So we'll have to port forward. (That's why SSH was a requirement when setting up WSL. Also, if you're on the Windows host, you can skip this step if the server is listening on <code>0.0.0.0</code>.) In a terminal on your remote machine, forward the port for the notebook server:</p><div class="captioned-image-container"><figure><pre><code>ssh wsl-tailscale-hostname-or-ip -L 8888:localhost:8888</code></pre><figcaption class="image-caption">Since Colab requires a localhost URL, you need to port forward.</figcaption></figure></div><p>Within a <a href="https://colab.google/">Colab notebook</a>, select the option to <code>Connect to a local runtime</code> and then put the local URL with the forwarded port. You'll also need the auth token from earlier.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GfzD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb479ac7-374b-483b-909b-34da53d1d23a_1106x808.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GfzD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb479ac7-374b-483b-909b-34da53d1d23a_1106x808.png 424w, https://substackcdn.com/image/fetch/$s_!GfzD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb479ac7-374b-483b-909b-34da53d1d23a_1106x808.png 848w, https://substackcdn.com/image/fetch/$s_!GfzD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb479ac7-374b-483b-909b-34da53d1d23a_1106x808.png 1272w, https://substackcdn.com/image/fetch/$s_!GfzD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb479ac7-374b-483b-909b-34da53d1d23a_1106x808.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GfzD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb479ac7-374b-483b-909b-34da53d1d23a_1106x808.png" width="1106" height="808" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/db479ac7-374b-483b-909b-34da53d1d23a_1106x808.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:808,&quot;width&quot;:1106,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!GfzD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb479ac7-374b-483b-909b-34da53d1d23a_1106x808.png 424w, https://substackcdn.com/image/fetch/$s_!GfzD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb479ac7-374b-483b-909b-34da53d1d23a_1106x808.png 848w, https://substackcdn.com/image/fetch/$s_!GfzD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb479ac7-374b-483b-909b-34da53d1d23a_1106x808.png 1272w, https://substackcdn.com/image/fetch/$s_!GfzD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb479ac7-374b-483b-909b-34da53d1d23a_1106x808.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">In Colab, select the local runtime option and put in the URL of the Jupyter server.</figcaption></figure></div><p>If the connection is successful, you should be able to interact with the kernel from your Jupyter server. Now's a good time to install any additional PyPI packages that you'd want, since a fresh WSL environment will not have much by default. Otherwise, it's identical to hosted runtimes, except you can keep the kernel alive indefinitely.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HWdW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a18595-8ea1-4681-b390-0ffac9e2bb8e_1642x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HWdW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a18595-8ea1-4681-b390-0ffac9e2bb8e_1642x768.png 424w, https://substackcdn.com/image/fetch/$s_!HWdW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a18595-8ea1-4681-b390-0ffac9e2bb8e_1642x768.png 848w, https://substackcdn.com/image/fetch/$s_!HWdW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a18595-8ea1-4681-b390-0ffac9e2bb8e_1642x768.png 1272w, https://substackcdn.com/image/fetch/$s_!HWdW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a18595-8ea1-4681-b390-0ffac9e2bb8e_1642x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HWdW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a18595-8ea1-4681-b390-0ffac9e2bb8e_1642x768.png" width="1642" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/22a18595-8ea1-4681-b390-0ffac9e2bb8e_1642x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1642,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!HWdW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a18595-8ea1-4681-b390-0ffac9e2bb8e_1642x768.png 424w, https://substackcdn.com/image/fetch/$s_!HWdW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a18595-8ea1-4681-b390-0ffac9e2bb8e_1642x768.png 848w, https://substackcdn.com/image/fetch/$s_!HWdW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a18595-8ea1-4681-b390-0ffac9e2bb8e_1642x768.png 1272w, https://substackcdn.com/image/fetch/$s_!HWdW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a18595-8ea1-4681-b390-0ffac9e2bb8e_1642x768.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The Colab local runtime is WSL-based and has GPU acceleration.</figcaption></figure></div><p>That's it! You're done! You can now use your own GPU on Colab from any remote machine.</p>]]></content:encoded></item><item><title><![CDATA[2023 Year in Review]]></title><description><![CDATA[Reflections from the year of 2023.]]></description><link>https://www.liu.blog/p/2023</link><guid isPermaLink="false">https://www.liu.blog/p/2023</guid><dc:creator><![CDATA[Andrew Liu]]></dc:creator><pubDate>Tue, 23 Jan 2024 03:44:33 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/3c901eea-1fe4-4afa-a7f8-bf0275ab7afb_2000x1333.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!g6w_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5f40d74-4084-4f1b-ab0d-e7fa45279c9f_2000x1333.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!g6w_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5f40d74-4084-4f1b-ab0d-e7fa45279c9f_2000x1333.jpeg 424w, https://substackcdn.com/image/fetch/$s_!g6w_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5f40d74-4084-4f1b-ab0d-e7fa45279c9f_2000x1333.jpeg 848w, https://substackcdn.com/image/fetch/$s_!g6w_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5f40d74-4084-4f1b-ab0d-e7fa45279c9f_2000x1333.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!g6w_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5f40d74-4084-4f1b-ab0d-e7fa45279c9f_2000x1333.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!g6w_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5f40d74-4084-4f1b-ab0d-e7fa45279c9f_2000x1333.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b5f40d74-4084-4f1b-ab0d-e7fa45279c9f_2000x1333.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!g6w_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5f40d74-4084-4f1b-ab0d-e7fa45279c9f_2000x1333.jpeg 424w, https://substackcdn.com/image/fetch/$s_!g6w_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5f40d74-4084-4f1b-ab0d-e7fa45279c9f_2000x1333.jpeg 848w, https://substackcdn.com/image/fetch/$s_!g6w_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5f40d74-4084-4f1b-ab0d-e7fa45279c9f_2000x1333.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!g6w_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5f40d74-4084-4f1b-ab0d-e7fa45279c9f_2000x1333.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@kajtek?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Kajetan Sumila</a> / <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Unsplash</a></figcaption></figure></div><p>2023 was the best year I've had in a while. It's not even comparable when looking at the amount of objective change I've gone through. Over the span of 12 months, here are some notable life changes:</p><ul><li><p>I began improv/standup comedy and performed on stage multiple times.</p></li><li><p>I took up Brazilian Jiu-Jitsu and can fight without panicking.</p></li><li><p>I resumed playing the piano after a decade long hiatus.</p></li><li><p>I began hosting local mixer parties.</p></li><li><p>I visited China for the first time in 20 years.</p></li><li><p>I snowboarded my first black trail.</p></li></ul><p>Most of the credit goes to the fact that I was intentionally leaving my comfort zone. If you stay in your comfort zone, you won't grow. It's not what you want in the long term. Therefore, you must always seek to remain right outside the cusp of your comfort zone at all times. It's like progressive overload applied outside of the weight room. It doesn't have to be much, nor does it have to be done in a specific way. Just don't live life on autopilot.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!32DU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8d64a48-c7ab-43cf-b6dd-ad48729988f5_2000x1500.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!32DU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8d64a48-c7ab-43cf-b6dd-ad48729988f5_2000x1500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!32DU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8d64a48-c7ab-43cf-b6dd-ad48729988f5_2000x1500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!32DU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8d64a48-c7ab-43cf-b6dd-ad48729988f5_2000x1500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!32DU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8d64a48-c7ab-43cf-b6dd-ad48729988f5_2000x1500.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!32DU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8d64a48-c7ab-43cf-b6dd-ad48729988f5_2000x1500.jpeg" width="2000" height="1500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b8d64a48-c7ab-43cf-b6dd-ad48729988f5_2000x1500.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1500,&quot;width&quot;:2000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;The front of my 2023 holiday card.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The front of my 2023 holiday card." title="The front of my 2023 holiday card." srcset="https://substackcdn.com/image/fetch/$s_!32DU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8d64a48-c7ab-43cf-b6dd-ad48729988f5_2000x1500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!32DU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8d64a48-c7ab-43cf-b6dd-ad48729988f5_2000x1500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!32DU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8d64a48-c7ab-43cf-b6dd-ad48729988f5_2000x1500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!32DU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8d64a48-c7ab-43cf-b6dd-ad48729988f5_2000x1500.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The front of my 2023 holiday card.</figcaption></figure></div><h2>Recap of the year</h2><p>Late in 2022, I resolved to stop being a tech bro maximalist. I'm a good software engineer. My career was never a problem. It's not my failure mode. But looking ahead, I'd still be living a pretty shit life.</p><p>After leaving the Bay Area, it's easy to see that people who are a bit too into tech can be a bit...boring. I didn't want to be like that. If work is your personality, that's no fun. Why not try to be more interesting?</p><p>So that was the theme of 2023. Reject tech bro maximalism. Keep yourself outside of your comfort zone however possible. Optimize for being a more interesting person.</p><p>(Since this is a public blog post, a lot of the spicier details and events are omitted. They're pretty important. While I'd like to say I'm an open book, but I'm not going arbitrarily broadcast everything into the public. So if you'd like to hear more, <a href="https://andrew.cloud/contact/">hit me up in private</a>.)</p><h3>BJJ</h3><p>In 2022, I fell down a bit of a UFC rabbit hole. It's a fascinating question: what's the "meta" of human unarmed combat? Turns out it's a combination of striking and grappling (which makes up modern MMA). Not all martial arts are created equal.</p><p>So I started <a href="https://en.wikipedia.org/wiki/Muay_Thai">Muay Thai</a> in late 2022 to explore the fighting rabbit hole. Since I didn't want brain damage, I quit Muay Thai and started <a href="https://en.wikipedia.org/wiki/Brazilian_jiu-jitsu">Brazilian Jiu-Jitsu</a> in early 2023. Muay Thai is a form of striking, while BJJ is a form of grappling. Instead of getting punched in the face, I can get choked out instead.</p><p>I really enjoy BJJ. It's something I've kept up throughout the year and up to the present. It really does change you. I recall going to the gym at 7 am and being pinned to the ground for minutes on end. It gets hard to breathe. You feel like you're literally being squashed. At the end of class, your ears are ringing and you feel like throwing up. And the next day, you rinse and repeat.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BTjj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15ac28a5-8ab3-4cf2-84e7-dbc680267222_1920x1440.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BTjj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15ac28a5-8ab3-4cf2-84e7-dbc680267222_1920x1440.jpeg 424w, https://substackcdn.com/image/fetch/$s_!BTjj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15ac28a5-8ab3-4cf2-84e7-dbc680267222_1920x1440.jpeg 848w, https://substackcdn.com/image/fetch/$s_!BTjj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15ac28a5-8ab3-4cf2-84e7-dbc680267222_1920x1440.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!BTjj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15ac28a5-8ab3-4cf2-84e7-dbc680267222_1920x1440.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BTjj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15ac28a5-8ab3-4cf2-84e7-dbc680267222_1920x1440.jpeg" width="1920" height="1440" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/15ac28a5-8ab3-4cf2-84e7-dbc680267222_1920x1440.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1440,&quot;width&quot;:1920,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Rolling in Brazilian Jiu-Jitsu.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Rolling in Brazilian Jiu-Jitsu." title="Rolling in Brazilian Jiu-Jitsu." srcset="https://substackcdn.com/image/fetch/$s_!BTjj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15ac28a5-8ab3-4cf2-84e7-dbc680267222_1920x1440.jpeg 424w, https://substackcdn.com/image/fetch/$s_!BTjj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15ac28a5-8ab3-4cf2-84e7-dbc680267222_1920x1440.jpeg 848w, https://substackcdn.com/image/fetch/$s_!BTjj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15ac28a5-8ab3-4cf2-84e7-dbc680267222_1920x1440.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!BTjj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15ac28a5-8ab3-4cf2-84e7-dbc680267222_1920x1440.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Not pictured: me getting my ass kicked.</figcaption></figure></div><p>But the change has been priceless. There's a level of peace that you earn. You know your day literally can't get worse. You know that in case shit really goes down, you can remain calm.</p><h3>Comedy</h3><p>Back in 2018, when I was at Google, there was a program where you could have 1:1 time with a random director for career advice. The chat wasn't useful. But I remember the director mentioning if I should try out an improv class, which caused me to get a mini panic attack from the very <em>thought</em> of trying such a class.</p><p>Five years later, I take my first improv class. It really isn't that bad. In fact, it's the most fun I've had as adult in a good while. Rarely do we get the opportunity to just play around. I recommend every adult try out an improv class at least once. It's not like you're performing or acting. A beginner class has you playing some simple games in private. It's a ton of fun.</p><p>I'm the type of person to overthink. I'm quite introspective and tend to be in my head too much. Improv actively punishes that behavior. You have to be living in the moment. Thinking and doing nothing is worse than doing something stupid. It's carried over into my life as a whole. Take conversations, for example. Not everything you say has to be insightful. It's better to keep the flow going.</p><p>Improv went so well that I decided to continue that journey and tried doing standup comedy. Standup and improv are pretty different, even though they're cut from the same cloth. When doing standup comedy, you have to write a lot. You need to rehearse your performance. For improv, the less you prepare, the better.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!F89G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d559cc9-dcd9-45be-91c0-9817db00d9f5_1280x960.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!F89G!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d559cc9-dcd9-45be-91c0-9817db00d9f5_1280x960.jpeg 424w, https://substackcdn.com/image/fetch/$s_!F89G!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d559cc9-dcd9-45be-91c0-9817db00d9f5_1280x960.jpeg 848w, https://substackcdn.com/image/fetch/$s_!F89G!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d559cc9-dcd9-45be-91c0-9817db00d9f5_1280x960.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!F89G!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d559cc9-dcd9-45be-91c0-9817db00d9f5_1280x960.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!F89G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d559cc9-dcd9-45be-91c0-9817db00d9f5_1280x960.jpeg" width="1280" height="960" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d559cc9-dcd9-45be-91c0-9817db00d9f5_1280x960.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:960,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;The green room of DC Improv.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The green room of DC Improv." title="The green room of DC Improv." srcset="https://substackcdn.com/image/fetch/$s_!F89G!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d559cc9-dcd9-45be-91c0-9817db00d9f5_1280x960.jpeg 424w, https://substackcdn.com/image/fetch/$s_!F89G!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d559cc9-dcd9-45be-91c0-9817db00d9f5_1280x960.jpeg 848w, https://substackcdn.com/image/fetch/$s_!F89G!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d559cc9-dcd9-45be-91c0-9817db00d9f5_1280x960.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!F89G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d559cc9-dcd9-45be-91c0-9817db00d9f5_1280x960.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Most comedy clubs have a green room where comedians hang out before the show. It's called a green room because the room is green.</figcaption></figure></div><p>After writing a few bits and bombing a few open mics, I ended up doing a few performances as well. Here are a few neat observations about standup comedy:</p><ul><li><p>It's one of the most honest forms of communication: you can't really hide laughter, nor can you fake laughter. So it's clear if you're funny or not.</p></li><li><p>Comedy writing has a clear purpose: control the audience's emotion. It's not like some work presentation where you're supposed to convey useful information. If anything, the audience losing brain cells is a sign of success.</p></li><li><p>Even though you're supposed to be "funny," that does not mean you don't take the craft seriously. Open mics are for A/B testing your jokes. You need to kill your ego and notice if your material sucks. I've seen plenty of delusional comedians who think they're funny and don't improve.</p></li></ul><p>Throughout the year, I did more improv and standup classes. At my core, I'm an introvert. But I've become pretty damn good at pretending to be extroverted.</p><p>(If you want to see videos of me performing, hit me up.)</p><h3>Snowboarding</h3><p>This season, I began snowboarding. The previous season, I tried skiing, but it wasn't for me. I didn't grow up as an athletic kid, so the self-preservation instinct made skiing difficult. I was too afraid of falling to learn.</p><p>Instead, I decided to give snowboarding a shot. Why? Because there was a higher learning curve. The first few days of snowboarding suck, but once it "clicks," it becomes a lot better. If you can do a green trail, you can survive a black trail. Whereas with skiing, moving up in skill will be a constant battle.</p><p>My plan was to bite the bullet and grind out the early learning stages of snowboarding. It was an investment of sorts: I have a few bad days at the beginning, and then I'll be fine afterward. It paid off. For my first few days at the slopes, my focus was on improving rather than having fun. Once I was able to do S-turns, then I really began to enjoy snowboarding. There's something to be said about sacrificing fun for intentional improvement: in the long term, you maximize your fun.</p><h3>Piano</h3><p>You've probably heard the stereotypes: the immigrant parents make their kid learn piano. The kid grinds outs the piano for 12 or so years throughout his childhood. He gets pretty good, but he grows to hate the piano. Once college comes, he quits and doesn't touch the instrument ever again.</p><p>That was me about a decade ago. I've always felt it to be a shame that I threw away such a talent. Learning the piano ate up a bunch of time and money. Halfway through 2023, I bought a keyboard and started practicing independently. It's pretty nice; I haven't forgotten all that much. But this time it's on my terms: I'm playing for my own enjoyment.</p><div id="youtube2-oPxQfUImLBM" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;oPxQfUImLBM&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/oPxQfUImLBM?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h3>Other hobbies</h3><p>So far I've only described the hits when it comes to trying out new hobbies. Early 2023 was definitely more of an exploration phase where I tried out multiple things. Not everything stuck. For example, I tried other things like woodworking, volunteering, and I got my concealed carry license. None of those were super interesting, so I wasn't consistent with them. It seems like my "trinity" of hobbies are BJJ, comedy, and piano. And maybe snowboarding during the winter. This may change in the future, but they've stuck for the time being.</p><p>It seems that I've done a good strategy for figuring out what I like: try out everything, do more of what sticks. People tend to have natural affinities towards different activities. A good test seems to be to ask what you'd enjoy doing alone. Some activities you'd do if a friend does. For other activities, you're the one dragging your friends. And once they quit, you're still happy doing it by yourself.</p><h3>Hosting cocktail parties</h3><p>The first ~2 years after Covid were a waste. I left the Bay Area and returned to the DMV, and most of my time was spent journaling. Otherwise I have very little to show for it. It feels bad grappling with the fact that you've thrown away years of your life.</p><p>I had since moved to my own place, so it was time to touch grass and bring people together. By pure coincidence I stumbled upon <a href="https://party.pro/book/">a book about hosting cocktail parties</a> while listening to a podcast. I agreed many of the book's theses, so I started to implement them.</p><p>Throughout the year, I hosted multiple mixer-styled cocktail parties. You know how you have multiple friend groups that don't know each other? They're all invited to the same event. Throw in some name tags, icebreakers, and alcohol, and you've got yourself a party.</p><p>A few pro tips when it comes to hosting parties:</p><ul><li><p>Yes, you SHOULD intermingle your various friend groups. Being a connector is good for the world.</p></li><li><p>People are both nice and lonely. Usually they appreciate that you think of them, and they're happy to support you. Stop thinking otherwise.</p></li><li><p>No offense, but most people are lazy bums. So you have to be the change you wish to see in the world. Waiting doesn't work.</p></li><li><p>Before a party, make sure the food, drinks, and seating are all uniformly distributed across the room. People tend to gravitate towards the food or seats, so you don't want people to crowd towards (or avoid) any singular area.</p></li><li><p>When hosting parties, only a few things really matter (e.g. marketing and name tags). Otherwise, let the people self organize and have fun. They're adults, and you should treat them as such.</p></li></ul><p>As a self-proclaimed shy introvert, I've become surprisingly good at making new friends and talking to random people. Most things in life are learnable skills, and hosting lots of events is starting to make people think that I'm a social butterfly.</p><h3>Travel</h3><p>I don't get the romanticization of travel. Personally, I'm a bit of a homebody. The biggest value I get from traveling is the reminder that the world moves on, regardless of whether or not you keep up. Throughout 2023, I left my home base a total of 5 times:</p><ol><li><p>Early in the year, I took a vacation to Amsterdam and London. That was cool, I guess.</p></li><li><p>Shortly afterward, I visited the Bay Area for work (and snowboarding).</p></li><li><p>A few months later, there was a work offsite in Vegas. I normally go to Vegas annually for DEF CON, so it wasn't that novel.</p></li><li><p>Pretty much right after that offsite, I returned to Vegas for <a href="https://defcon.org/html/defcon-31/dc-31-index.html">DEF CON 31</a>. I'm in Las Vegas way too much...</p></li><li><p>Towards the end of the year, I took a trip to China. That was the interesting one. It was the first time I'd been to the country in 20 years.</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0k8L!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F238c9094-85d8-413e-b316-e1de6561a587_2000x1500.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0k8L!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F238c9094-85d8-413e-b316-e1de6561a587_2000x1500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!0k8L!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F238c9094-85d8-413e-b316-e1de6561a587_2000x1500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!0k8L!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F238c9094-85d8-413e-b316-e1de6561a587_2000x1500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!0k8L!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F238c9094-85d8-413e-b316-e1de6561a587_2000x1500.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0k8L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F238c9094-85d8-413e-b316-e1de6561a587_2000x1500.jpeg" width="2000" height="1500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/238c9094-85d8-413e-b316-e1de6561a587_2000x1500.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1500,&quot;width&quot;:2000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Bazaar Meat in Las Vegas&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Bazaar Meat in Las Vegas" title="Bazaar Meat in Las Vegas" srcset="https://substackcdn.com/image/fetch/$s_!0k8L!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F238c9094-85d8-413e-b316-e1de6561a587_2000x1500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!0k8L!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F238c9094-85d8-413e-b316-e1de6561a587_2000x1500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!0k8L!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F238c9094-85d8-413e-b316-e1de6561a587_2000x1500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!0k8L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F238c9094-85d8-413e-b316-e1de6561a587_2000x1500.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The Alligator Hunters dining at the finest establishment in all of Las Vegas.</figcaption></figure></div><p>It might be a stretch to say that the China trip was life changing, but it really did give me an appreciation of the culture. Two decades ago, it was a third world country. Over the years, it's modernized. The cities are arguably nicer than America's major cities.</p><p>Chinese and American culture are wildly different from each other. I don't think most Americans understand how the Chinese think (and vice versa). American was created because the people value freedom and independence: that makes them good at innovation. China was built up from centuries of war: the people will happily conform to a powerful government in return for the promise of prosperity. That makes China good at copying what works and scaling it up.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4u7K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd940bf4c-bd1e-4c49-9848-e04833e20719_2000x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4u7K!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd940bf4c-bd1e-4c49-9848-e04833e20719_2000x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!4u7K!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd940bf4c-bd1e-4c49-9848-e04833e20719_2000x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!4u7K!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd940bf4c-bd1e-4c49-9848-e04833e20719_2000x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!4u7K!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd940bf4c-bd1e-4c49-9848-e04833e20719_2000x900.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4u7K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd940bf4c-bd1e-4c49-9848-e04833e20719_2000x900.jpeg" width="2000" height="900" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d940bf4c-bd1e-4c49-9848-e04833e20719_2000x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:900,&quot;width&quot;:2000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Tiananmen Square&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Tiananmen Square" title="Tiananmen Square" srcset="https://substackcdn.com/image/fetch/$s_!4u7K!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd940bf4c-bd1e-4c49-9848-e04833e20719_2000x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!4u7K!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd940bf4c-bd1e-4c49-9848-e04833e20719_2000x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!4u7K!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd940bf4c-bd1e-4c49-9848-e04833e20719_2000x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!4u7K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd940bf4c-bd1e-4c49-9848-e04833e20719_2000x900.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Taking pictures with our favorite comrade.</figcaption></figure></div><p>Their "app ecosystem" is a pretty neat case study: the WeChat and Alipay duopoly shows how a single app can do everything for you. It's pretty convenient. I suspect Instagram, Twitter, or Apple should race to become the WeChat of America. All of them need to get their peer-to-peer payments story down first. That makes the app practically useful. And Threads should have been a tab in the Instagram app. Since it's its own app, nobody's using it anymore.</p><h3>Work</h3><p>Ah yes, work. While life was happening, Stairwell was going through its own adventures.</p><p>I'm going to be vague with this. We lost some good people. We lost some bad people. We also gained some good people. It was a turbulent year. And now the company is in its best shape since I joined.</p><p>Now's actually a really good time to join. If you're interested in working at a security startup (and you're competent), hit me up.</p><h2>What's next?</h2><p>If you received a holiday card from me, you'd know that this blog post was written pretty late. As of the time of writing (late-ish January), I just got back from travel, so I haven't had time to think too deeply about what I hope to accomplish in 2024.</p><p>They're not well-fleshed out, but here are a few thoughts:</p><ul><li><p>Everything that I began in 2023, I should continue into 2024. It shouldn't be a one-and-done deal. Keep up the trajectory.</p></li><li><p>Ever since I started sparring in BJJ, I've been neglecting the weight room. I currently weigh 140 pounds. Back in SF I was sustainably in the 160's and was an absolute unit. I need to recover my strength and muscle.</p></li><li><p>Stairwell's in a state where success is guaranteed, now I can think about growing instead of putting out fires. My career role model is Kelsey Hightower; emulating his journey would be amazing.</p></li><li><p>I may be moving to a city next year. There's only so much you can do in the Maryland suburbs. I feel like I've pulled most of the levers that I can.</p></li></ul><p>To be honest, I'm a bit worried that it's all downhill from here. What can I accomplish in 2024 that would make it an equal or better year than 2023? I do feel some pressure in this regard, and I don't have a game plan for that.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!h_cL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83450114-cf53-4c14-8d10-c55c4f47efc0_2000x1500.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!h_cL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83450114-cf53-4c14-8d10-c55c4f47efc0_2000x1500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!h_cL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83450114-cf53-4c14-8d10-c55c4f47efc0_2000x1500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!h_cL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83450114-cf53-4c14-8d10-c55c4f47efc0_2000x1500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!h_cL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83450114-cf53-4c14-8d10-c55c4f47efc0_2000x1500.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!h_cL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83450114-cf53-4c14-8d10-c55c4f47efc0_2000x1500.jpeg" width="2000" height="1500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/83450114-cf53-4c14-8d10-c55c4f47efc0_2000x1500.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1500,&quot;width&quot;:2000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;The back of my 2023 holiday card.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The back of my 2023 holiday card." title="The back of my 2023 holiday card." srcset="https://substackcdn.com/image/fetch/$s_!h_cL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83450114-cf53-4c14-8d10-c55c4f47efc0_2000x1500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!h_cL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83450114-cf53-4c14-8d10-c55c4f47efc0_2000x1500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!h_cL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83450114-cf53-4c14-8d10-c55c4f47efc0_2000x1500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!h_cL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83450114-cf53-4c14-8d10-c55c4f47efc0_2000x1500.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The back of my 2023 holiday card.</figcaption></figure></div><p>On that note, let's wrap up this blog post with random wisdom that I gathered throughout the year.</p><h2>Miscellaneous learnings</h2><p>These are in no particular order. Some of these might be repeated.</p><h3>On the self</h3><ul><li><p>You must intentionally leave your comfort zone or else you won't grow. At all times, you should be living right outside the cusp of your comfort zone.</p></li><li><p>Most worthwhile results come in the long term, but honestly you can see pretty cool results over the span of a year.</p></li><li><p>Your ego tends to be the biggest blocker to happiness. Get rejected a lot: you'll realize it's not a big deal. Get your ass kicked: it'll end your physical insecurities. Humiliate yourself on stage: you'll learn how big your balls truly are.</p></li><li><p>Don't be afraid to delegate. You can only do so much as an individual. If I want to keep moving forward, I'll need some help. Most of my friends are supportive: I should take them up on their offers to help.</p></li><li><p>Without sounding like too much of a douchebag, I move past the change curve really fast. It might be because I'm intentional about being outside my comfort zone. But I can work past things in a month or two, when it would take other people years.</p></li></ul><h3>On socializing</h3><ul><li><p>The point of human conversation is to give the other person good vibes. It is not to conduct high-bandwidth information transfer.</p></li><li><p>You don't need to understand everything to make use of it. Not everything needs a rigorous definition. For example, I don't know what exactly "good vibes" or being funny entails. Yet I'll know it when I see it.</p></li><li><p>The best way to get your message across is to be funny and tell stories. Humans struggle to pay attention, let alone retain information.</p></li><li><p>Overthinking is the best way to ruin a conversation. Just say what's on your mind. Don't be afraid to attempt to joke around or sound stupid. Usually, these are of low consequence and high upside.</p></li><li><p>Being a connector is both the easiest and the best way to create social value. Humans are lonely and love it that you're thinking of them. Bringing people together will generate a lot of happiness in the world.</p></li><li><p>When meeting new people, be sure to exchange contact information before parting ways. (Both phone number AND Instagram.) You may regret not doing so.</p></li><li><p>If people aren't interested in talking, respect them. Don't try to win them over. Read the room. Move on.</p></li><li><p>Don't procrastinate on organizing social events. When things depend on other people, time is of the essence. Don't be the blocker, and give people ample buffer time.</p></li></ul><h3>On human nature</h3><ul><li><p>Random people tend to like it when you talk to them. So talk to as many people as possible. Just find some random excuse to talk. Or don't. Either works. Again, humans are lonely and actually would love to make a new friend.</p></li><li><p>Friendships are formed by frequent, casual, ad hoc interactions. So scheduling a monthly calendar event to catch up isn't effective. It kills the vibe. Not everybody may be in the mood to talk. It's better to randomly call or text. Or randomly invite them to events like dinner on the same day.</p></li><li><p>Women tend to have a higher baseline of social awareness than men. So the issue with most men is that they might be too dense (i.e. insufficient social awareness). On the other hand, the failure mode for women is that they become "divas" (i.e. they're way too particular about their social sensitivities).</p></li></ul><h3>On conflict</h3><ul><li><p>Do not shy away from conflict, especially if you're intimidated. Not everything is black and white, but some things are. There are some people who are too stupid to see nuance. Don't entertain such stupidity.</p></li><li><p>Learning how to fight gives you outsized benefits to your confidence and calmness. Your body language even changes. It makes all the difference knowing that you have a backup plan if all hell breaks loose.</p></li></ul>]]></content:encoded></item><item><title><![CDATA[The Distributed Pez Dispenser]]></title><description><![CDATA[How to get things done without being bogged down by bad planning.]]></description><link>https://www.liu.blog/p/pez-dispenser</link><guid isPermaLink="false">https://www.liu.blog/p/pez-dispenser</guid><dc:creator><![CDATA[Andrew Liu]]></dc:creator><pubDate>Fri, 14 Jul 2023 19:44:12 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/eef207a0-60fa-4174-835a-f36fb02aaeeb_2000x1333.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3-Mb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad59b4d8-0d82-4717-80de-543acd43b128_2000x1333.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3-Mb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad59b4d8-0d82-4717-80de-543acd43b128_2000x1333.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3-Mb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad59b4d8-0d82-4717-80de-543acd43b128_2000x1333.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3-Mb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad59b4d8-0d82-4717-80de-543acd43b128_2000x1333.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3-Mb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad59b4d8-0d82-4717-80de-543acd43b128_2000x1333.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3-Mb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad59b4d8-0d82-4717-80de-543acd43b128_2000x1333.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ad59b4d8-0d82-4717-80de-543acd43b128_2000x1333.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3-Mb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad59b4d8-0d82-4717-80de-543acd43b128_2000x1333.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3-Mb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad59b4d8-0d82-4717-80de-543acd43b128_2000x1333.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3-Mb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad59b4d8-0d82-4717-80de-543acd43b128_2000x1333.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3-Mb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad59b4d8-0d82-4717-80de-543acd43b128_2000x1333.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@ninjason?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Jason Leung</a> / <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Unsplash</a></figcaption></figure></div><blockquote><p>My whole system of life is keeping at it. The task of life is not to see clearly in the distance but to do the task at hand.<br><br>- Charlie Munger</p></blockquote><h3>The Problem</h3><p>Let's talk about planning and prioritization.</p><ul><li><p>People who trust big, fancy Gantt charts are destined to be disappointed. Why? Because anything beyond the short-term is too volatile for rigid planning to be useful.</p></li><li><p>If you're unwilling or unable to quickly change the plans as needed, that means you're not adaptable. Eventually, you'll end up working on the wrong thing. Arguably, that's worse than doing nothing!</p></li><li><p>An inability to account for (and adapt to) real-life volatility is a sign of bad planning. A plan that assumes a perfect world is a bad plan.</p></li></ul><h3>The Solution</h3><p>Well, that's just fantastic. Should we scrap all our plans and yolo it? Not quite. Enter the "distributed Pez dispenser" model of planning. It's basically gradient descent:</p><ol><li><p>Gather everything you may want to work on in the foreseeable future.</p></li><li><p>Put it in a fuzzy priority queue. This is our "distributed Pez dispenser."</p></li><li><p>Pop from the top of this Pez dispenser. The "next" item to work should be clear. It's the most important thing at the given moment. So focus on that. Do it well.</p></li><li><p>Add to, consume from, or rebuild the Pez dispenser as circumstances shift.</p></li></ol><h3>Properties of the Pez Dispenser</h3><p>The rest of the contents of the Pez dispenser should be a "gray box." That means you don't really know its exact contents, but you should have a rough idea. A "rough idea" means you have two things:</p><ul><li><p>A north star of what must be done.</p></li><li><p>A general sense of what may change.</p></li></ul><p>You don't need to over-index on anything beyond what's next, because it's subject to change. Actually, it's unlikely that it <em>won't</em> change, given the volatility of real life. Notice how this model accounts for such volatility while allowing us to make incremental progress. The next step should always be clear, and you should never be married to anything after that.</p><p>This concept applies to life in general as well. Plans change, but that doesn't mean you don't make plans. Rather, avoid rigid plans. Have adjustable plans, and execute the current step well. Then rinse and repeat.</p>]]></content:encoded></item><item><title><![CDATA[How I set up a new MacBook]]></title><description><![CDATA[How I set up a fresh laptop.]]></description><link>https://www.liu.blog/p/mac-setup</link><guid isPermaLink="false">https://www.liu.blog/p/mac-setup</guid><dc:creator><![CDATA[Andrew Liu]]></dc:creator><pubDate>Mon, 03 Jul 2023 02:08:39 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/061b5157-48b7-4b07-98d3-a0f9a6f5993c_2000x1333.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ezM9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16d67d98-2909-479b-bc77-47ed7fdfb74a_2000x1333.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ezM9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16d67d98-2909-479b-bc77-47ed7fdfb74a_2000x1333.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ezM9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16d67d98-2909-479b-bc77-47ed7fdfb74a_2000x1333.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ezM9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16d67d98-2909-479b-bc77-47ed7fdfb74a_2000x1333.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ezM9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16d67d98-2909-479b-bc77-47ed7fdfb74a_2000x1333.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ezM9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16d67d98-2909-479b-bc77-47ed7fdfb74a_2000x1333.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/16d67d98-2909-479b-bc77-47ed7fdfb74a_2000x1333.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ezM9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16d67d98-2909-479b-bc77-47ed7fdfb74a_2000x1333.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ezM9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16d67d98-2909-479b-bc77-47ed7fdfb74a_2000x1333.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ezM9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16d67d98-2909-479b-bc77-47ed7fdfb74a_2000x1333.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ezM9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16d67d98-2909-479b-bc77-47ed7fdfb74a_2000x1333.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@isaacmartin?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Isaac Martin</a> / <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Unsplash</a></figcaption></figure></div><p>In June 2023, Apple released the 15-inch version of the MacBook Air. I was due for a laptop upgrade, and it was the perfect form factor. It's surprising that they never had a "non-pro" laptop with a large screen size.</p><p>I was inspired by Swyx's ritual of <a href="https://www.swyx.io/new-mac-setup">documenting his Mac setup</a>, so I decided to do the same. This is how I set up a fresh MacBook.</p><h1>Native Settings</h1><p>Upon creating an account on a new Apple laptop, you'll want to log in to your Apple account. Afterward, you'll have free rein over your machine.</p><ul><li><p>Go to System Settings, set the trackpad sensitivity to its maximum value, and make trackpad taps register as clicks. I'm so used to this workflow nowadays that anything else feels so slow and will drive me insane.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qWQW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99bfc94f-86be-48d8-881a-246d1d79cc54_1810x1630.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qWQW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99bfc94f-86be-48d8-881a-246d1d79cc54_1810x1630.png 424w, https://substackcdn.com/image/fetch/$s_!qWQW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99bfc94f-86be-48d8-881a-246d1d79cc54_1810x1630.png 848w, https://substackcdn.com/image/fetch/$s_!qWQW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99bfc94f-86be-48d8-881a-246d1d79cc54_1810x1630.png 1272w, https://substackcdn.com/image/fetch/$s_!qWQW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99bfc94f-86be-48d8-881a-246d1d79cc54_1810x1630.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qWQW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99bfc94f-86be-48d8-881a-246d1d79cc54_1810x1630.png" width="1810" height="1630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/99bfc94f-86be-48d8-881a-246d1d79cc54_1810x1630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1630,&quot;width&quot;:1810,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!qWQW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99bfc94f-86be-48d8-881a-246d1d79cc54_1810x1630.png 424w, https://substackcdn.com/image/fetch/$s_!qWQW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99bfc94f-86be-48d8-881a-246d1d79cc54_1810x1630.png 848w, https://substackcdn.com/image/fetch/$s_!qWQW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99bfc94f-86be-48d8-881a-246d1d79cc54_1810x1630.png 1272w, https://substackcdn.com/image/fetch/$s_!qWQW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99bfc94f-86be-48d8-881a-246d1d79cc54_1810x1630.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Max out the trackpad sensitivity and enable "Tap to click." You'll be so much faster.</figcaption></figure></div><ul><li><p>Go to the control center settings to configure the menu bar. You'll want to show sound levels and battery percentage: both are super useful. On the other hand, hide the spotlight icon.</p></li><li><p>For the "Internet Accounts," I use Google for all my contacts. Sign in with Google and then sync only contacts.</p></li><li><p>Hide the Dock and remove any hide delay. You can make the Dock automatically hide in System Settings, but you'll need to use the command line to remove the Dock's hide delay. The command to do so is below:</p></li></ul><pre><code>defaults write com.apple.dock autohide-time-modifier -int 0; killall Dock</code></pre><h1>Tier 1 Downloads</h1><p>Configuring the native laptop settings allows you to operate the laptop without going insane. So far we haven't downloaded anything yet. The next items we download are "prerequisites" for doing almost anything, so we set them up first.</p><ul><li><p>Download <a href="https://www.google.com/chrome/">Google Chrome</a> and sign in with your Google Account. I have Chrome sync everything, so most of the legwork is done automatically.</p></li><li><p>Download and sign in to <a href="https://1password.com/downloads/mac/">1Password</a>. It's necessary to authenticate with almost every single account I use. (I only memorize the credentials necessary to bootstrap my way to accessing 1Password.)</p></li><li><p>Enable the SSH agent in 1Password. That allows you to use SSH keys stored in the password manager. Do not generate a new SSH key on the local machine.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PW3f!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4901350c-7502-4e5c-adc5-58bc9b5277e6_1940x1500.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PW3f!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4901350c-7502-4e5c-adc5-58bc9b5277e6_1940x1500.png 424w, https://substackcdn.com/image/fetch/$s_!PW3f!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4901350c-7502-4e5c-adc5-58bc9b5277e6_1940x1500.png 848w, https://substackcdn.com/image/fetch/$s_!PW3f!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4901350c-7502-4e5c-adc5-58bc9b5277e6_1940x1500.png 1272w, https://substackcdn.com/image/fetch/$s_!PW3f!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4901350c-7502-4e5c-adc5-58bc9b5277e6_1940x1500.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PW3f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4901350c-7502-4e5c-adc5-58bc9b5277e6_1940x1500.png" width="1940" height="1500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4901350c-7502-4e5c-adc5-58bc9b5277e6_1940x1500.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1500,&quot;width&quot;:1940,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!PW3f!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4901350c-7502-4e5c-adc5-58bc9b5277e6_1940x1500.png 424w, https://substackcdn.com/image/fetch/$s_!PW3f!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4901350c-7502-4e5c-adc5-58bc9b5277e6_1940x1500.png 848w, https://substackcdn.com/image/fetch/$s_!PW3f!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4901350c-7502-4e5c-adc5-58bc9b5277e6_1940x1500.png 1272w, https://substackcdn.com/image/fetch/$s_!PW3f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4901350c-7502-4e5c-adc5-58bc9b5277e6_1940x1500.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">I store my SSH key in 1Password. You can securely move it around as a result.</figcaption></figure></div><ul><li><p>Download <a href="https://iterm2.com/">iTerm2</a>. The Native terminal sucks. This allows us to peacefully operate on the command line. I know there are other modern terminals, but this one works well for me.</p></li></ul><h1>Command Line</h1><blockquote><h4><a href="https://andrew.cloud/dev-setup/">My Developer Setup (with Vim, Tmux, and Zsh)</a></h4><p>The details around my command line setup.</p></blockquote><p>Fortunately, I've <a href="https://andrew.cloud/dev-setup/">automated the vast majority of my command line setup</a> in a <a href="https://github.com/MrPickles/dotfiles">git repository</a>. As a result, I won't talk too much about the details. But you can read the <a href="https://andrew.cloud/dev-setup/">blog post</a> if you're interested. (It's a bit outdated though.)</p><p>All you need to do is run a one-line command:</p><pre><code>curl https://raw.githubusercontent.com/MrPickles/dotfiles/refs/heads/master/scripts/dotfiles.sh | bash</code></pre><p>The dotfiles setup script will not set up <a href="https://brew.sh/">Homebrew</a>, since that requires a new terminal session. You will need to do that manually.</p><p>With Homebrew installed, you'll want to install several other packages. I have them <a href="https://github.com/MrPickles/dotfiles/blob/7f521c4b8cbbc4d7a0fd3f3f39b8479c7e844c6e/scripts/macos.sh">in a script</a>, but they're subject to change. Afterward, open up Neovim, and it will install a few other packages (like <code>fzf</code>) automatically.</p><p>Finally, import the <a href="https://github.com/MrPickles/dotfiles/blob/7f521c4b8cbbc4d7a0fd3f3f39b8479c7e844c6e/config/iTerm.json">existing iTerm settings</a>. It'll set up the font and colors. You'll still need to install the <a href="https://github.com/romkatv/powerlevel10k#meslo-nerd-font-patched-for-powerlevel10k">recommended font for Powerlevel10k</a>.</p><h1>Tier 2 Downloads</h1><p>The next few downloads are pretty core to operating my machine. They're not mandatory, which is why I don't install them immediately.</p><ul><li><p><a href="https://www.alfredapp.com/">Alfred</a>: You'll want to disable Spotlight indexing and remove the default Spotlight shortcut. Then you can let Alfred use that shortcut.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Jd3V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F306b147e-ef5e-42a9-ae70-79012132ca0c_1810x1630.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Jd3V!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F306b147e-ef5e-42a9-ae70-79012132ca0c_1810x1630.png 424w, https://substackcdn.com/image/fetch/$s_!Jd3V!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F306b147e-ef5e-42a9-ae70-79012132ca0c_1810x1630.png 848w, https://substackcdn.com/image/fetch/$s_!Jd3V!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F306b147e-ef5e-42a9-ae70-79012132ca0c_1810x1630.png 1272w, https://substackcdn.com/image/fetch/$s_!Jd3V!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F306b147e-ef5e-42a9-ae70-79012132ca0c_1810x1630.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Jd3V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F306b147e-ef5e-42a9-ae70-79012132ca0c_1810x1630.png" width="1810" height="1630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/306b147e-ef5e-42a9-ae70-79012132ca0c_1810x1630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1630,&quot;width&quot;:1810,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!Jd3V!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F306b147e-ef5e-42a9-ae70-79012132ca0c_1810x1630.png 424w, https://substackcdn.com/image/fetch/$s_!Jd3V!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F306b147e-ef5e-42a9-ae70-79012132ca0c_1810x1630.png 848w, https://substackcdn.com/image/fetch/$s_!Jd3V!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F306b147e-ef5e-42a9-ae70-79012132ca0c_1810x1630.png 1272w, https://substackcdn.com/image/fetch/$s_!Jd3V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F306b147e-ef5e-42a9-ae70-79012132ca0c_1810x1630.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Disable the Spotlight shortcut, or else Alfred won't be able to use it.</figcaption></figure></div><ul><li><p><a href="https://folivora.ai/">BetterTouchTool</a>: Even if you don't have custom keyboard shortcuts, the drag-to-window-snap functionality is great on its own.</p></li><li><p><a href="https://licenses.cleanshot.com/download/cleanshotx">Cleanshot X</a>: Make sure it replaces any existing screenshot shortcuts. It's better than the native screenshot tool.</p></li><li><p><a href="https://tailscale.com/download/">Tailscale</a>: Once you connect your new machine to the Tailnet, it allows you to be part of a network with your other machines without the hassle of setting up a VPN.</p></li></ul><h1>Tier 3 Downloads</h1><p>The remaining downloads don't inhibit the normal operation of the machine itself. I do consider these the minimal set of programs that I use on a consistent basis, so I install them all immediately after wrapping up my tier 2 downloads.</p><p>They're listed in alphabetical order:</p><ul><li><p><a href="https://adguard.com/en/welcome.html">AdGuard</a>: This blocks ads that uBlock Origin misses.</p></li><li><p><a href="https://cron.com/download/macos">Cron</a>: Notion's calendar app.</p></li><li><p><a href="https://discord.com/download">Discord</a>: For chatting with gaming communities.</p></li><li><p><a href="https://www.dropbox.com/install">Dropbox</a>: Syncs my files.</p></li><li><p><a href="https://keepingyouawake.app/">KeepingYouAwake</a>: Keeps the laptop awake.</p></li><li><p><a href="https://keybase.io/download">Keybase</a>: For basic crypto operations.</p></li><li><p><a href="https://obsidian.md/">Obsidian</a>: All my notes are here.</p></li><li><p><a href="https://signal.org/en/download/">Signal</a>: My preferred chat app.</p></li><li><p><a href="https://slack.com/downloads/mac">Slack</a>: For work-related communications.</p></li><li><p><a href="https://apps.apple.com/app/spark-email-app-by-readdle/id1176895641">Spark</a>: An email client. Be sure to get Spark 2. Spark 3 sucks.</p></li><li><p><a href="https://www.spotify.com/us/download/mac/">Spotify</a>: For listening to music.</p></li><li><p><a href="https://streaksapp.com/">Streaks</a>: My habit tracker.</p></li><li><p><a href="https://todoist.com/downloads">Todoist</a>: My to-do list.</p></li><li><p><a href="https://www.whatsapp.com/download">WhatsApp</a>: For chatting with Android users and people living in third-world countries (same thing).</p></li><li><p><a href="https://www.wechat.com/">WeChat</a>: For chatting with Chinese relatives.</p></li></ul><h1>Wrapping Up</h1><ul><li><p>Be sure to log in to various accounts as necessary. This includes both websites on the browser and the recently downloaded apps.</p></li><li><p>Register any license keys as necessary. Most apps have a trial period, so there's plenty of time to do this. I store all of my license keys in 1Password.</p></li><li><p>Clean up the apps on the Dock, if you haven't already.</p></li><li><p>Be sure to revoke any old machine credentials as necessary. For example, you might want to remove old machines from Tailscale and Keybase.</p></li></ul><p>Cool! You're done. Enjoy the new laptop. &#128579;</p>]]></content:encoded></item><item><title><![CDATA[Preparing for Your First Ski Trip]]></title><description><![CDATA[Ski season is coming up. Here are my recommendations for people getting started.]]></description><link>https://www.liu.blog/p/skiing</link><guid isPermaLink="false">https://www.liu.blog/p/skiing</guid><dc:creator><![CDATA[Andrew Liu]]></dc:creator><pubDate>Wed, 14 Dec 2022 18:40:15 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/ef27505f-c16a-4ea3-8f67-3cb2de57cd6c_2000x1333.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Zl4s!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf817c1c-1198-43f5-a504-3b5724c1cd52_2000x1333.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Zl4s!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf817c1c-1198-43f5-a504-3b5724c1cd52_2000x1333.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Zl4s!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf817c1c-1198-43f5-a504-3b5724c1cd52_2000x1333.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Zl4s!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf817c1c-1198-43f5-a504-3b5724c1cd52_2000x1333.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Zl4s!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf817c1c-1198-43f5-a504-3b5724c1cd52_2000x1333.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Zl4s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf817c1c-1198-43f5-a504-3b5724c1cd52_2000x1333.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bf817c1c-1198-43f5-a504-3b5724c1cd52_2000x1333.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Zl4s!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf817c1c-1198-43f5-a504-3b5724c1cd52_2000x1333.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Zl4s!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf817c1c-1198-43f5-a504-3b5724c1cd52_2000x1333.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Zl4s!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf817c1c-1198-43f5-a504-3b5724c1cd52_2000x1333.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Zl4s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf817c1c-1198-43f5-a504-3b5724c1cd52_2000x1333.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@joanoger?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Joan Oger</a> / <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Unsplash</a></figcaption></figure></div><p>Ski season is coming up. Unless you prepare beforehand, you won't be in a state where you can actually do any skiing or snowboarding. Here are my recommendations for people getting started.</p><h2>Required Gear</h2><p>Skiing is expensive. You'll need a fair amount of equipment. Fortunately, a lot of this consists of fixed costs. So grab out your credit card and pull up Amazon. Most of the gear can be found pretty easily with a <em>"&lt;item name&gt; snowboarding"</em> query on Amazon. You don't need to be creative; usually, the first result works great.</p><h3>You probably already have these</h3><ul><li><p><strong>Winter jacket:</strong> Just a generic winter jacket.</p></li><li><p><strong>Gloves or mittens:</strong> Make these that these are waterproof. The cloth-based gloves aren't waterproof, nor will they do an effective job of keeping your hands warm.</p></li></ul><h3>Buy these</h3><ul><li><p><strong>Thermals or long johns:</strong> These don't have to be skin-tight. Your goal is to wear more layers in order to provide additional insulation.</p></li><li><p><strong>Long winter socks:</strong> These should go up to the calves (at least) and should be higher than your ski shoes/snowboarding boots.</p></li><li><p><strong>Snow pants:</strong> These will be pretty stretchy since you'll be fitting them <em>over</em> your ski shoes/snowboarding boots. So don't be surprised if they feel a bit large at first.</p></li><li><p><strong>Ski goggles:</strong> This one's self-explanatory. They should be large enough to fit over glasses, but I still recommend my myopic friends wear contact lenses.</p></li><li><p><strong>Helmet:</strong> The proper helmets will have a strap in the back to attach your goggles. For the best protection, I recommend getting a helmet that's <a href="https://mipsprotection.com/">MIPS certified</a>. They will be a lot more expensive than normal helmets, but I guess you decide how much your brain cells are worth. (Though if you're only going to be on the bunny slopes, it may not be a big deal.)</p></li><li><p><strong>Gaiter or balaclava:</strong> Also known as a "ski mask," these are key for blocking your face from wind and debris. Plus it insulates your head. You may also want one of these if you plan to rob a bank.</p></li><li><p><strong>[Snowboarding only] Butt pads:</strong> When snowboarding, expect to fall on your ass a lot. So I recommend getting some armor to prevent you from hurting your butt. (Unless you're into that kind of stuff.)</p></li><li><p><strong>[Snowboarding only] Knee pads:</strong> In a similar vein, expect to fall forward as well. Your knees will take repeated punishment, so having some armor there is a game-changer.</p></li><li><p><strong>[Snowboarding only] Wrist guards:</strong> Also when falling forward, humans will reflexively put their hands out to "break" the fall. This is the worst thing you can do. If you fall forward, hug yourself and try to land on your forearms. You want to distribute the force over your body. Otherwise, that's how you break your wrists. But in such a case, wrist guards may save you a lot of misery. (Note that I personally don't use wrist guards. They tend not to fit well with gloves.)</p></li></ul><h3>Rent these</h3><p>The renting portion is relatively self-explanatory. If going on a day trip, rent the actual equipment:</p><ul><li><p><strong>Skis, poles, and ski shoes</strong></p></li><li><p><strong>Snowboard and snowboarding boots</strong></p></li></ul><p>Expect to pay $50-100 to rent the gear for a day. Some resorts may provide a helmet as part of the rental bundle. I'd advise against buying the main equipment for the first few seasons, as you haven't formed a preference for what specific types of skis/snowboards you like.</p><p>If you forget to buy some of the recommended items, the resort will likely have them for sale or rent. But be aware that the prices will be marked up a lot. So save your money and do a better job of preparing.</p><p>In general, depending on how many days you plan to go to the resort, it may make sense to rent at a local shop, rather than renting from the resort. Pricing will be better, but there will also be an expectation of a longer-term rental. You'll have to do the math yourself for those situations. For day trips, don't waste your time; just rent from the resort.</p><h2>Other Considerations</h2><h3>Resort logistics</h3><ul><li><p>Ski resorts local to the DMV area include <a href="https://www.libertymountainresort.com/">Liberty</a> and <a href="https://www.skiwhitetail.com/">Whitetail</a>. These can be around an hour's drive and easily fit into a day trip.</p></li><li><p>Expect to pay around $200 per day. That's around $100 for a day pass and $100 for rental equipment. You may incur other expenses throughout the day, such as paying for food and lessons.</p></li><li><p>If you end up going for multiple days in a season, it's far more economical to buy a <a href="https://www.epicpass.com/">season pass</a>. The last time I did the math, the break-even point was around 10 trips or so.</p></li><li><p>I recommend setting up all of these logistics as early as possible since walk-in passes/rentals aren't guaranteed (and prices go up over time).</p></li></ul><h3>Skiing vs snowboarding</h3><p>Do you go skiing or snowboarding? They all have their pros and cons. Though if you've done neither and only plan to spend <em>one day</em>, I recommend you go skiing.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!i9HO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4574b0c4-6e80-43ae-a558-3592296d5e30_1502x324.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!i9HO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4574b0c4-6e80-43ae-a558-3592296d5e30_1502x324.png 424w, https://substackcdn.com/image/fetch/$s_!i9HO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4574b0c4-6e80-43ae-a558-3592296d5e30_1502x324.png 848w, https://substackcdn.com/image/fetch/$s_!i9HO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4574b0c4-6e80-43ae-a558-3592296d5e30_1502x324.png 1272w, https://substackcdn.com/image/fetch/$s_!i9HO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4574b0c4-6e80-43ae-a558-3592296d5e30_1502x324.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!i9HO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4574b0c4-6e80-43ae-a558-3592296d5e30_1502x324.png" width="1456" height="314" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4574b0c4-6e80-43ae-a558-3592296d5e30_1502x324.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:314,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:78320,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!i9HO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4574b0c4-6e80-43ae-a558-3592296d5e30_1502x324.png 424w, https://substackcdn.com/image/fetch/$s_!i9HO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4574b0c4-6e80-43ae-a558-3592296d5e30_1502x324.png 848w, https://substackcdn.com/image/fetch/$s_!i9HO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4574b0c4-6e80-43ae-a558-3592296d5e30_1502x324.png 1272w, https://substackcdn.com/image/fetch/$s_!i9HO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4574b0c4-6e80-43ae-a558-3592296d5e30_1502x324.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Before skiing or snowboarding, consider watching some tutorial videos (<a href="https://www.youtube.com/playlist?list=PLC502BC8CCA9BB32D">skiing</a>, <a href="https://www.youtube.com/watch?v=lpx2kH96L_A">snowboarding</a>) so you aren't taken completely by surprise. You can also take lessons, I've found that trial-and-error after watching tutorials tends to be more effective.</p><p><strong>EDIT:</strong> I found a better tutorial for skiing. Watch <a href="https://www.youtube.com/watch?v=lJjDovqcieg">this one</a> instead.</p><h3>Additional supplies</h3><ul><li><p>Bringing your own food is optional since there are cafes at the resort. Though it's not a bad idea to have snacks and water in the car.</p></li><li><p>Consider bringing sunscreen. Though it's not the end of the world if you're covered up.</p></li><li><p>Ski helmets will have ear flaps to insulate your ears, so it's possible to safely wear Airpods and listen to music while going down the slopes. But if you're reading this blog post, maybe you should focus on staying alive instead.</p></li></ul>]]></content:encoded></item><item><title><![CDATA[Defcon 30 Recon Village CTF Write-up]]></title><description><![CDATA[The write-up for challenges in the Recon Village CTF from Defcon 30.]]></description><link>https://www.liu.blog/p/dc30-writeup</link><guid isPermaLink="false">https://www.liu.blog/p/dc30-writeup</guid><dc:creator><![CDATA[Andrew Liu]]></dc:creator><pubDate>Wed, 17 Aug 2022 15:21:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/41c5a0e5-aeec-48e1-a6fd-c8c8abf25bd5_1152x544.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!p0pT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2da39f6a-dd3e-4f35-8402-1059b921b6da_1152x544.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!p0pT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2da39f6a-dd3e-4f35-8402-1059b921b6da_1152x544.jpeg 424w, https://substackcdn.com/image/fetch/$s_!p0pT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2da39f6a-dd3e-4f35-8402-1059b921b6da_1152x544.jpeg 848w, https://substackcdn.com/image/fetch/$s_!p0pT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2da39f6a-dd3e-4f35-8402-1059b921b6da_1152x544.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!p0pT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2da39f6a-dd3e-4f35-8402-1059b921b6da_1152x544.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!p0pT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2da39f6a-dd3e-4f35-8402-1059b921b6da_1152x544.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2da39f6a-dd3e-4f35-8402-1059b921b6da_1152x544.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!p0pT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2da39f6a-dd3e-4f35-8402-1059b921b6da_1152x544.jpeg 424w, https://substackcdn.com/image/fetch/$s_!p0pT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2da39f6a-dd3e-4f35-8402-1059b921b6da_1152x544.jpeg 848w, https://substackcdn.com/image/fetch/$s_!p0pT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2da39f6a-dd3e-4f35-8402-1059b921b6da_1152x544.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!p0pT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2da39f6a-dd3e-4f35-8402-1059b921b6da_1152x544.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><figcaption class="image-caption">The awards ceremony at Defcon 30.</figcaption></figure></div><p>Last week at <a href="https://defcon.org/html/defcon-30/dc-30-index.html">Defcon 30</a>, some friends and I attempted the <a href="https://reconvillage.org/">Recon Village CTF</a>. While spending most of Friday grinding out a CTF in a hotel room wasn't my original plan, it turned out to be a lot of fun.</p><p>After a rather late night, we ended up solving most of the challenges and got first place in the competition. This is the write-up for the CTF's challenges.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!P_wX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d7c0d8f-16c9-4504-ac11-863ee4a6162d_2322x1942.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!P_wX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d7c0d8f-16c9-4504-ac11-863ee4a6162d_2322x1942.png 424w, https://substackcdn.com/image/fetch/$s_!P_wX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d7c0d8f-16c9-4504-ac11-863ee4a6162d_2322x1942.png 848w, https://substackcdn.com/image/fetch/$s_!P_wX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d7c0d8f-16c9-4504-ac11-863ee4a6162d_2322x1942.png 1272w, https://substackcdn.com/image/fetch/$s_!P_wX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d7c0d8f-16c9-4504-ac11-863ee4a6162d_2322x1942.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!P_wX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d7c0d8f-16c9-4504-ac11-863ee4a6162d_2322x1942.png" width="2000" height="1673" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3d7c0d8f-16c9-4504-ac11-863ee4a6162d_2322x1942.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1673,&quot;width&quot;:2000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;CTF Scoreboard&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="CTF Scoreboard" title="CTF Scoreboard" srcset="https://substackcdn.com/image/fetch/$s_!P_wX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d7c0d8f-16c9-4504-ac11-863ee4a6162d_2322x1942.png 424w, https://substackcdn.com/image/fetch/$s_!P_wX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d7c0d8f-16c9-4504-ac11-863ee4a6162d_2322x1942.png 848w, https://substackcdn.com/image/fetch/$s_!P_wX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d7c0d8f-16c9-4504-ac11-863ee4a6162d_2322x1942.png 1272w, https://substackcdn.com/image/fetch/$s_!P_wX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d7c0d8f-16c9-4504-ac11-863ee4a6162d_2322x1942.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">We're the "alligator hunters." We came up with that name because two nights ago, we ate dinner at a restaurant with alligator heads plastered over the walls.</figcaption></figure></div><h2>CTF Challenges</h2><blockquote><p>&#128161; Some of these OSINT challenges involve real people. As a result, parts of this write-up will be censored to protect their privacy. This blog post is for educational purposes only, and <strong>we do not endorse the usage of these tactics to research private individuals</strong>. Please don't dox people or otherwise be a creep.</p></blockquote><h3>Jerlean's 54th Birthday</h3><blockquote><p>Jerlean was in Vegas for their 54th birthday recently. Which hotel did they stay at?</p></blockquote><p>Our natural instinct was to start Googling for someone named Jerlean, but Google didn't return anything relevant. We then tried to find Jerlean on Facebook, but that didn't bear fruit either. Turns out Instagram was the key.</p><p>By querying "vegas birthday" on Instagram and scrolling down, you'll eventually bump into the following picture:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!F6Z2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c3715f0-de7d-4178-a057-2ea57691c721_829x611.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!F6Z2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c3715f0-de7d-4178-a057-2ea57691c721_829x611.png 424w, https://substackcdn.com/image/fetch/$s_!F6Z2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c3715f0-de7d-4178-a057-2ea57691c721_829x611.png 848w, https://substackcdn.com/image/fetch/$s_!F6Z2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c3715f0-de7d-4178-a057-2ea57691c721_829x611.png 1272w, https://substackcdn.com/image/fetch/$s_!F6Z2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c3715f0-de7d-4178-a057-2ea57691c721_829x611.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!F6Z2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c3715f0-de7d-4178-a057-2ea57691c721_829x611.png" width="829" height="611" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2c3715f0-de7d-4178-a057-2ea57691c721_829x611.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:611,&quot;width&quot;:829,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Happy birthday, Jerlean!&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Happy birthday, Jerlean!" title="Happy birthday, Jerlean!" srcset="https://substackcdn.com/image/fetch/$s_!F6Z2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c3715f0-de7d-4178-a057-2ea57691c721_829x611.png 424w, https://substackcdn.com/image/fetch/$s_!F6Z2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c3715f0-de7d-4178-a057-2ea57691c721_829x611.png 848w, https://substackcdn.com/image/fetch/$s_!F6Z2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c3715f0-de7d-4178-a057-2ea57691c721_829x611.png 1272w, https://substackcdn.com/image/fetch/$s_!F6Z2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c3715f0-de7d-4178-a057-2ea57691c721_829x611.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Next year, I bet we'll have to do TikTok searches for OSINT...</figcaption></figure></div><p>It's an ad with no textual references to Jerlean, but you can glean all of the data from the photo. If you notice the post's location, you'll see that this was posted in <strong>New York-New York</strong>.</p><h3>Spammy Email Domain</h3><blockquote><p>On 11 August, what was the primary email domain from which spam was reported as coming from 185.129.62.62 and 107.189.28.253 (two bot IPs)?</p></blockquote><p>To figure out the domains associated with the IP addresses, we looked up the addresses in a <a href="https://www.stopforumspam.com/ipcheck/185.129.62.62">forum spam database</a>. The first IP address had a fair bit of activity on August 11.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_HRr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F708c8840-412e-4527-84eb-cdc7938397c7_1194x877.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_HRr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F708c8840-412e-4527-84eb-cdc7938397c7_1194x877.png 424w, https://substackcdn.com/image/fetch/$s_!_HRr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F708c8840-412e-4527-84eb-cdc7938397c7_1194x877.png 848w, https://substackcdn.com/image/fetch/$s_!_HRr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F708c8840-412e-4527-84eb-cdc7938397c7_1194x877.png 1272w, https://substackcdn.com/image/fetch/$s_!_HRr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F708c8840-412e-4527-84eb-cdc7938397c7_1194x877.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_HRr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F708c8840-412e-4527-84eb-cdc7938397c7_1194x877.png" width="1194" height="877" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/708c8840-412e-4527-84eb-cdc7938397c7_1194x877.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:877,&quot;width&quot;:1194,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Forum spam results for the bot IPs&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Forum spam results for the bot IPs" title="Forum spam results for the bot IPs" srcset="https://substackcdn.com/image/fetch/$s_!_HRr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F708c8840-412e-4527-84eb-cdc7938397c7_1194x877.png 424w, https://substackcdn.com/image/fetch/$s_!_HRr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F708c8840-412e-4527-84eb-cdc7938397c7_1194x877.png 848w, https://substackcdn.com/image/fetch/$s_!_HRr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F708c8840-412e-4527-84eb-cdc7938397c7_1194x877.png 1272w, https://substackcdn.com/image/fetch/$s_!_HRr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F708c8840-412e-4527-84eb-cdc7938397c7_1194x877.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Interestingly enough, the other IP didn't have as much useful information.</figcaption></figure></div><p>If you look at the emails sent on that date, you'll notice that the most common domain seems to be <code>hiroyuki4010.yoshito33.inwebmail.fun</code>.</p><h3>Wedding in Costa Rica</h3><blockquote><p>Wanting to remain anonymous online, discreetly named 'Phonenumber' from Costa Rica has a friend who works for Facebook. When did his friend get married?</p></blockquote><p>Since we were searching for a person and his friends, we turned to Facebook. By querying for people named <code>Phonenumber</code>, you'll find an account that's based in Costa Rica.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cVKV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11c8edb6-db46-4dd8-a89e-9c4ca635e8c6_1034x780.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cVKV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11c8edb6-db46-4dd8-a89e-9c4ca635e8c6_1034x780.png 424w, https://substackcdn.com/image/fetch/$s_!cVKV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11c8edb6-db46-4dd8-a89e-9c4ca635e8c6_1034x780.png 848w, https://substackcdn.com/image/fetch/$s_!cVKV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11c8edb6-db46-4dd8-a89e-9c4ca635e8c6_1034x780.png 1272w, https://substackcdn.com/image/fetch/$s_!cVKV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11c8edb6-db46-4dd8-a89e-9c4ca635e8c6_1034x780.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cVKV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11c8edb6-db46-4dd8-a89e-9c4ca635e8c6_1034x780.png" width="1034" height="780" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/11c8edb6-db46-4dd8-a89e-9c4ca635e8c6_1034x780.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:780,&quot;width&quot;:1034,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Phonenumber's Facebook page&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Phonenumber's Facebook page" title="Phonenumber's Facebook page" srcset="https://substackcdn.com/image/fetch/$s_!cVKV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11c8edb6-db46-4dd8-a89e-9c4ca635e8c6_1034x780.png 424w, https://substackcdn.com/image/fetch/$s_!cVKV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11c8edb6-db46-4dd8-a89e-9c4ca635e8c6_1034x780.png 848w, https://substackcdn.com/image/fetch/$s_!cVKV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11c8edb6-db46-4dd8-a89e-9c4ca635e8c6_1034x780.png 1272w, https://substackcdn.com/image/fetch/$s_!cVKV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11c8edb6-db46-4dd8-a89e-9c4ca635e8c6_1034x780.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Phonenumber's Facebook page</figcaption></figure></div><p>Next, we look through this person's friends list to see if there are any friends who work at Facebook. There happen to be two people. One of them isn't in a relationship, but the other person is married. If you check out this person's "about" page, you'll see the date when he got married.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nDgC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc782273e-74ed-40d2-81f3-e9f8c295f04a_1428x1122.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nDgC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc782273e-74ed-40d2-81f3-e9f8c295f04a_1428x1122.png 424w, https://substackcdn.com/image/fetch/$s_!nDgC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc782273e-74ed-40d2-81f3-e9f8c295f04a_1428x1122.png 848w, https://substackcdn.com/image/fetch/$s_!nDgC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc782273e-74ed-40d2-81f3-e9f8c295f04a_1428x1122.png 1272w, https://substackcdn.com/image/fetch/$s_!nDgC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc782273e-74ed-40d2-81f3-e9f8c295f04a_1428x1122.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nDgC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc782273e-74ed-40d2-81f3-e9f8c295f04a_1428x1122.png" width="1428" height="1122" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c782273e-74ed-40d2-81f3-e9f8c295f04a_1428x1122.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1122,&quot;width&quot;:1428,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Phonenumber's friend&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Phonenumber's friend" title="Phonenumber's friend" srcset="https://substackcdn.com/image/fetch/$s_!nDgC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc782273e-74ed-40d2-81f3-e9f8c295f04a_1428x1122.png 424w, https://substackcdn.com/image/fetch/$s_!nDgC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc782273e-74ed-40d2-81f3-e9f8c295f04a_1428x1122.png 848w, https://substackcdn.com/image/fetch/$s_!nDgC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc782273e-74ed-40d2-81f3-e9f8c295f04a_1428x1122.png 1272w, https://substackcdn.com/image/fetch/$s_!nDgC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc782273e-74ed-40d2-81f3-e9f8c295f04a_1428x1122.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Phonenumber's friend. You can see that he works at Facebook and exposes his wedding day.</figcaption></figure></div><h3>Missing Person Report</h3><blockquote><p>You're investigating a missing person who went missing following a party in 2019. While working through case notes you've come across the following NTIyMyBTb3V0aCBCcmFlc3dvb2QgQm91bGV2YXJkLCBIb3VzdG9u What date was the pool party?</p></blockquote><p>The payload <code>NTIyMyBTb3V0aCBCcmFlc3dvb2QgQm91bGV2YXJkLCBIb3VzdG9u</code> attached to the CTF question is base64 encoded. If you decode it, you end up with an address in Houston, Texas. Googling the address combined with "party" and "2019" will yield a single search result in the form of a Pastebin: <a href="https://pastebin.com/BNwRBAX4">https://pastebin.com/BNwRBAX4</a></p><p>The paste contains an email detailing plans for a pool party that will happen "this Saturday." The email was sent on April 18, 2019, so you can infer that the pool party itself was held on <strong>April 20, 2019</strong>.</p><h3>Party Co-host</h3><p>This is a follow-up to the previous question.</p><blockquote><p>There are two hosts of the party, one is Vanessa. What is the last name of the other host?</p></blockquote><p>If you re-read the email from the Pastebin, you'll notice a few bits of information:</p><ol><li><p>The party was held in Houston, Texas.</p></li><li><p>The email addresses and names of the recipients are public.</p></li><li><p>The hosts are named Vanessa and Meghana.</p></li></ol><p>Searching for the hosts directly on Facebook doesn't yield too many results. However, by looking up some of the email recipients (especially those with uncommon names), you'll eventually find people based in Texas. Looking through their friends list will allow you to find Vanessa. Looking through Vanessa's friends list will allow you to find Meghana.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WVXb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f2ea7e8-576d-4eae-8fe1-bab1a2b8fa58_1064x920.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WVXb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f2ea7e8-576d-4eae-8fe1-bab1a2b8fa58_1064x920.png 424w, https://substackcdn.com/image/fetch/$s_!WVXb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f2ea7e8-576d-4eae-8fe1-bab1a2b8fa58_1064x920.png 848w, https://substackcdn.com/image/fetch/$s_!WVXb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f2ea7e8-576d-4eae-8fe1-bab1a2b8fa58_1064x920.png 1272w, https://substackcdn.com/image/fetch/$s_!WVXb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f2ea7e8-576d-4eae-8fe1-bab1a2b8fa58_1064x920.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WVXb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f2ea7e8-576d-4eae-8fe1-bab1a2b8fa58_1064x920.png" width="1064" height="920" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0f2ea7e8-576d-4eae-8fe1-bab1a2b8fa58_1064x920.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:920,&quot;width&quot;:1064,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Meghana's Facebook profile&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Meghana's Facebook profile" title="Meghana's Facebook profile" srcset="https://substackcdn.com/image/fetch/$s_!WVXb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f2ea7e8-576d-4eae-8fe1-bab1a2b8fa58_1064x920.png 424w, https://substackcdn.com/image/fetch/$s_!WVXb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f2ea7e8-576d-4eae-8fe1-bab1a2b8fa58_1064x920.png 848w, https://substackcdn.com/image/fetch/$s_!WVXb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f2ea7e8-576d-4eae-8fe1-bab1a2b8fa58_1064x920.png 1272w, https://substackcdn.com/image/fetch/$s_!WVXb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f2ea7e8-576d-4eae-8fe1-bab1a2b8fa58_1064x920.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Meghana's Facebook profile. You can find her via Vanessa's profile (or most of the other email recipients).</figcaption></figure></div><p>As a reminder, these are real people. Please respect their privacy.</p><h3>Maiden Name</h3><blockquote><p>Callum lives in Scarborough, Toronto and works with kids. What's his wife's maiden name?</p></blockquote><p>Googling up Callum with his location and profession will lead to his LinkedIn page and reveal his last name. Looking up his full name and location on Facebook will lead to his Facebook page, which also contains the profile of his wife.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OQYr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffc2ff8a-6298-48a7-8025-81d23da6f029_1036x1106.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OQYr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffc2ff8a-6298-48a7-8025-81d23da6f029_1036x1106.png 424w, https://substackcdn.com/image/fetch/$s_!OQYr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffc2ff8a-6298-48a7-8025-81d23da6f029_1036x1106.png 848w, https://substackcdn.com/image/fetch/$s_!OQYr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffc2ff8a-6298-48a7-8025-81d23da6f029_1036x1106.png 1272w, https://substackcdn.com/image/fetch/$s_!OQYr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffc2ff8a-6298-48a7-8025-81d23da6f029_1036x1106.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OQYr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffc2ff8a-6298-48a7-8025-81d23da6f029_1036x1106.png" width="1036" height="1106" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ffc2ff8a-6298-48a7-8025-81d23da6f029_1036x1106.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1106,&quot;width&quot;:1036,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Callum's Facebook profile&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Callum's Facebook profile" title="Callum's Facebook profile" srcset="https://substackcdn.com/image/fetch/$s_!OQYr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffc2ff8a-6298-48a7-8025-81d23da6f029_1036x1106.png 424w, https://substackcdn.com/image/fetch/$s_!OQYr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffc2ff8a-6298-48a7-8025-81d23da6f029_1036x1106.png 848w, https://substackcdn.com/image/fetch/$s_!OQYr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffc2ff8a-6298-48a7-8025-81d23da6f029_1036x1106.png 1272w, https://substackcdn.com/image/fetch/$s_!OQYr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffc2ff8a-6298-48a7-8025-81d23da6f029_1036x1106.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Callum's Facebook profile. Although his wife changed her last name, you can infer her maiden name from the URL.</figcaption></figure></div><p>However, his wife changed her last name, and her maiden name isn't in her profile. But those who are observant will notice that the Facebook URL does not update unless manually changed. Callum's wife's URL contains her maiden name.</p><h3>Password Breach</h3><p>This is a follow-up to the previous question.</p><blockquote><p>Callum's password has been breached in connection with his primary email. What is it?</p></blockquote><p>Despite finding Callum's social media profiles, we weren't able to find his email address. As a result, we enumerated potential emails. (Using Gmail to autocomplete was helpful in filtering out potential and valid emails.) It turns out that his email used the common <code>firstname.lastname@gmail.com</code> format.</p><p>Then, Googling the email address along with terms like "password" led to a Pastebin that contained a password dump for emails. Callum's password was included in the paste: <a href="https://pastebin.com/1LeMmy4X">https://pastebin.com/1LeMmy4X</a></p><h3>Open Source</h3><p>The next few challenges are all based on CryptoRama, a fictional company.</p><blockquote><p>Hi, I'm Eva Hesington. Remember me from last year? I am the founder of CryptoRama. Thanks to your support we have been able to scale the business a lot. I cannot thank the open source community enough. Using Open source tools and platforms, our business has grown and our tech department is now running strong. We could not have done it without these Open Source tools and community. You can visit our website to find out more.</p></blockquote><p>This one had us stumped for a while, as Cryptorama was an actual company. We went down a few rabbit holes to no avail before querying Cryptorama with Eva Hesington's name included. That led to a single search result to a different Cryptorama: <a href="https://cryptorama.cloud/">https://cryptorama.cloud/</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TMMu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8706a50c-1c46-4ea3-b754-0bddf1026c12_1946x1620.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TMMu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8706a50c-1c46-4ea3-b754-0bddf1026c12_1946x1620.png 424w, https://substackcdn.com/image/fetch/$s_!TMMu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8706a50c-1c46-4ea3-b754-0bddf1026c12_1946x1620.png 848w, https://substackcdn.com/image/fetch/$s_!TMMu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8706a50c-1c46-4ea3-b754-0bddf1026c12_1946x1620.png 1272w, https://substackcdn.com/image/fetch/$s_!TMMu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8706a50c-1c46-4ea3-b754-0bddf1026c12_1946x1620.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TMMu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8706a50c-1c46-4ea3-b754-0bddf1026c12_1946x1620.png" width="1946" height="1620" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8706a50c-1c46-4ea3-b754-0bddf1026c12_1946x1620.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1620,&quot;width&quot;:1946,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;CryptoRama website&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="CryptoRama website" title="CryptoRama website" srcset="https://substackcdn.com/image/fetch/$s_!TMMu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8706a50c-1c46-4ea3-b754-0bddf1026c12_1946x1620.png 424w, https://substackcdn.com/image/fetch/$s_!TMMu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8706a50c-1c46-4ea3-b754-0bddf1026c12_1946x1620.png 848w, https://substackcdn.com/image/fetch/$s_!TMMu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8706a50c-1c46-4ea3-b754-0bddf1026c12_1946x1620.png 1272w, https://substackcdn.com/image/fetch/$s_!TMMu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8706a50c-1c46-4ea3-b754-0bddf1026c12_1946x1620.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">This question wasn't about open-source tools. Rather it was a pun on "opening the source."</figcaption></figure></div><p>If you checked the source of the website, you'd find the flag. It's embedded in a comment within <code>main.min.js</code>.</p><h3>Secret Sharing</h3><blockquote><p>We at CryptoRama are very concerned about sharing sensitive information with the outside world and even on the inside. We use secret sharing services. But looks like someone has been manipulating our secrets application and hindering our progress. Can you please check?</p></blockquote><p>The challenge mentions a secret sharing service but does not share any more details. So we need to find what service it's referring to. By looking at the <a href="https://crt.sh/?q=cryptorama.cloud">certificate transparency logs</a> for the CryptoRama website, we that there are a few valid subdomains. One of them is <a href="https://secrets.cryptorama.cloud/">https://secrets.cryptorama.cloud/</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fbDF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc83abc5e-c866-4832-85fe-01e106fea3b4_1894x872.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fbDF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc83abc5e-c866-4832-85fe-01e106fea3b4_1894x872.png 424w, https://substackcdn.com/image/fetch/$s_!fbDF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc83abc5e-c866-4832-85fe-01e106fea3b4_1894x872.png 848w, https://substackcdn.com/image/fetch/$s_!fbDF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc83abc5e-c866-4832-85fe-01e106fea3b4_1894x872.png 1272w, https://substackcdn.com/image/fetch/$s_!fbDF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc83abc5e-c866-4832-85fe-01e106fea3b4_1894x872.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fbDF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc83abc5e-c866-4832-85fe-01e106fea3b4_1894x872.png" width="1894" height="872" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c83abc5e-c866-4832-85fe-01e106fea3b4_1894x872.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:872,&quot;width&quot;:1894,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;SnapPass&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="SnapPass" title="SnapPass" srcset="https://substackcdn.com/image/fetch/$s_!fbDF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc83abc5e-c866-4832-85fe-01e106fea3b4_1894x872.png 424w, https://substackcdn.com/image/fetch/$s_!fbDF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc83abc5e-c866-4832-85fe-01e106fea3b4_1894x872.png 848w, https://substackcdn.com/image/fetch/$s_!fbDF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc83abc5e-c866-4832-85fe-01e106fea3b4_1894x872.png 1272w, https://substackcdn.com/image/fetch/$s_!fbDF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc83abc5e-c866-4832-85fe-01e106fea3b4_1894x872.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The secrets subdomain hosts an instance of SnapPass.</figcaption></figure></div><p>When examining the website, we see that it's running <a href="https://github.com/pinterest/snappass">SnapPass</a>, a secret-sharing app maintained by Pinterest. Users can write a secret to the app, and the app will generate a URL to view the secret. After the secret is viewed once, it will disappear forever.</p><p>There don't seem to be any CVEs associated with SnapPass, so perhaps the site is running a patched version with broken crypto. When looking among the forks of the repo, we see that there's <a href="https://github.com/CryptoRamaLtd/snappass">a fork that's created by CryptoRama</a>. And it also has a <a href="https://github.com/pinterest/snappass/commit/aeeedf3b77aaa568a695a87d51eda97821ef39af">patch that changes the URL generation</a>. Here's a summary of the patch:</p><ol><li><p>The encryption key is now the base64 encoded version of a hardcoded secret <code>6ardCD6XQ49FLrxY6fd7pB3DeeNmzn8Y</code>. With the base64 encoding, the string will be <code>NmFyZENENlhRNDlGTHJ4WTZmZDdwQjNEZWVObXpuOFk=</code>.</p></li><li><p>The secret URL has a prefix of <code>RV</code> (from the Redis prefix).</p></li><li><p>The secret URL additionally takes in the current timestamp.</p></li></ol><p>Overall, the format of the secret URL looks like this:</p><p>Although we have an algorithm to generate the secret URLs, it still takes two parameters: a UUID and the timestamp. For both, it's unfeasible to guess or brute force. Therefore, we need another way to make use of the URLs. Our next step is to find a source for the UUIDs and timestamps.</p><p>Looking around CryptoRama's Github profile, we find that it has a second repository called <a href="https://github.com/CryptoRamaLtd/Progress-Tracker">Progress Tracker</a>. Every minute or so, the repo updates with a new commit that changes a hash in <code>README.md</code>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!f3hB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaf75803-54de-4009-84b1-8bda2ddf2f09_1854x574.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!f3hB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaf75803-54de-4009-84b1-8bda2ddf2f09_1854x574.png 424w, https://substackcdn.com/image/fetch/$s_!f3hB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaf75803-54de-4009-84b1-8bda2ddf2f09_1854x574.png 848w, https://substackcdn.com/image/fetch/$s_!f3hB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaf75803-54de-4009-84b1-8bda2ddf2f09_1854x574.png 1272w, https://substackcdn.com/image/fetch/$s_!f3hB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaf75803-54de-4009-84b1-8bda2ddf2f09_1854x574.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!f3hB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaf75803-54de-4009-84b1-8bda2ddf2f09_1854x574.png" width="1854" height="574" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eaf75803-54de-4009-84b1-8bda2ddf2f09_1854x574.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:574,&quot;width&quot;:1854,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Progress tracker commit&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Progress tracker commit" title="Progress tracker commit" srcset="https://substackcdn.com/image/fetch/$s_!f3hB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaf75803-54de-4009-84b1-8bda2ddf2f09_1854x574.png 424w, https://substackcdn.com/image/fetch/$s_!f3hB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaf75803-54de-4009-84b1-8bda2ddf2f09_1854x574.png 848w, https://substackcdn.com/image/fetch/$s_!f3hB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaf75803-54de-4009-84b1-8bda2ddf2f09_1854x574.png 1272w, https://substackcdn.com/image/fetch/$s_!f3hB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaf75803-54de-4009-84b1-8bda2ddf2f09_1854x574.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Every minute or so, the repo gets a commit that updates the hash.</figcaption></figure></div><p>Notice that the hash in the file is the same format as a UUID. Also notice that every commit has an associated timestamp. If we take those two pieces of data, we have enough information to generate a URL in the SnapPass instance. From trial and error, it seems like the URL expects the timestamp to be of minute precision. If we plug in the converted timestamp and the hash, we get a valid URL.</p><p>Every commit in the repository creates a secret that contains the flag. Since it's a one-time use URL, that's why the repository keeps adding new secrets every minute.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!csba!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35394c38-db50-4fe6-9d91-cf80c291d508_1598x950.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!csba!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35394c38-db50-4fe6-9d91-cf80c291d508_1598x950.png 424w, https://substackcdn.com/image/fetch/$s_!csba!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35394c38-db50-4fe6-9d91-cf80c291d508_1598x950.png 848w, https://substackcdn.com/image/fetch/$s_!csba!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35394c38-db50-4fe6-9d91-cf80c291d508_1598x950.png 1272w, https://substackcdn.com/image/fetch/$s_!csba!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35394c38-db50-4fe6-9d91-cf80c291d508_1598x950.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!csba!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35394c38-db50-4fe6-9d91-cf80c291d508_1598x950.png" width="1598" height="950" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/35394c38-db50-4fe6-9d91-cf80c291d508_1598x950.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:950,&quot;width&quot;:1598,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;SnapPass flag location&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="SnapPass flag location" title="SnapPass flag location" srcset="https://substackcdn.com/image/fetch/$s_!csba!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35394c38-db50-4fe6-9d91-cf80c291d508_1598x950.png 424w, https://substackcdn.com/image/fetch/$s_!csba!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35394c38-db50-4fe6-9d91-cf80c291d508_1598x950.png 848w, https://substackcdn.com/image/fetch/$s_!csba!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35394c38-db50-4fe6-9d91-cf80c291d508_1598x950.png 1272w, https://substackcdn.com/image/fetch/$s_!csba!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35394c38-db50-4fe6-9d91-cf80c291d508_1598x950.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The secret containing the flag. A new one is generated every minute since each secret can only be read once.</figcaption></figure></div><h3>Public Server Backup</h3><blockquote><p>We lost access to one of our servers. Thankfully we had backups. All you have to do is find a piece (backup) of our server and make it whole by attaching it to another server. If you do this, you will have attained nirvana! Start looking at our website again.</p></blockquote><p>Going back to the Cryptorama website, we notice the <a href="https://evahesington-resources.s3.us-west-1.amazonaws.com/images/find/me/on/gitlab/about-2.jpg">picture of Eva</a>. It has a very interesting URL:</p><p>Searching for her name on Gitlab yields an account with a single repository containing her personal website. However, more interesting is a file called <code>account.txt</code> that <a href="https://gitlab.com/eva.hesington.1213/my-personal-website/-/blob/main/account.txt">contains details of her AWS account ID</a> and mentions an EC2 instance.</p><p>Since we've learned that she has an EC2 machine and we know her AWS account ID, the next step would be to see if there's any way to find details of her EC2 instance.</p><p>AWS allows you to snapshot EC2 instances onto EBS, and it's possible to have those snapshots be public. Since we know the account ID, we have the ability to find all of the public snapshots for the account. To do so, we enumerate through the AWS regions and use the command line to print out public EBS snapshots:</p><p>Most of the regions yield nothing, but in <code>us-west-1</code>, there's a single public snapshot:</p><p>We want to inspect the contents of the snapshot. In order to do so, we need to copy the snapshot over to our own account and then create our own EC2 instance that's based on the snapshot.</p><p>Once the image is in your account, you can create an EC2 instance, SSH into the machine, and view the flag.</p><h3>Asset Management</h3><blockquote><p>Our junior developer Henry Lopez cannot find his assets. Can you help him please? His credentials are given below: Username: henry.lopez Password: sHTA$H@&amp;sBjPG5</p></blockquote><p>It seems like Cryptorama has an assets server. When we looked at the certificate transparency logs, we saw that <a href="https://assets.cryptorama.cloud/">https://assets.cryptorama.cloud/</a> was a valid subdomain. Logging in with Henry's credentials leads us to the asset management page.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4UBw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F576a9fe3-4f4d-445c-9d1b-323bf7a6cfa1_1658x812.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4UBw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F576a9fe3-4f4d-445c-9d1b-323bf7a6cfa1_1658x812.png 424w, https://substackcdn.com/image/fetch/$s_!4UBw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F576a9fe3-4f4d-445c-9d1b-323bf7a6cfa1_1658x812.png 848w, https://substackcdn.com/image/fetch/$s_!4UBw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F576a9fe3-4f4d-445c-9d1b-323bf7a6cfa1_1658x812.png 1272w, https://substackcdn.com/image/fetch/$s_!4UBw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F576a9fe3-4f4d-445c-9d1b-323bf7a6cfa1_1658x812.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4UBw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F576a9fe3-4f4d-445c-9d1b-323bf7a6cfa1_1658x812.png" width="1658" height="812" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/576a9fe3-4f4d-445c-9d1b-323bf7a6cfa1_1658x812.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:812,&quot;width&quot;:1658,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!4UBw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F576a9fe3-4f4d-445c-9d1b-323bf7a6cfa1_1658x812.png 424w, https://substackcdn.com/image/fetch/$s_!4UBw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F576a9fe3-4f4d-445c-9d1b-323bf7a6cfa1_1658x812.png 848w, https://substackcdn.com/image/fetch/$s_!4UBw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F576a9fe3-4f4d-445c-9d1b-323bf7a6cfa1_1658x812.png 1272w, https://substackcdn.com/image/fetch/$s_!4UBw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F576a9fe3-4f4d-445c-9d1b-323bf7a6cfa1_1658x812.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">That's an awfully specific version of an awfully specific app...</figcaption></figure></div><p>From poking around the app, we learn that there's very little data to be found. We also see that the site is running v5.4.3 of <a href="https://snipeitapp.com/">Snipe-IT</a>. If you search for CVEs that are present in the running version of the app, you'll find <a href="https://nvd.nist.gov/vuln/detail/CVE-2022-1511">CVE-2022-1511</a>. It's an access control bug that was fixed in the following patch of Snipe-IT.</p><p>Because of the bug, users without proper permissions can access restricted resources. The resources don't show up as links in the app's sidebar, but they can just go to the URL directly. The <a href="https://huntr.dev/bounties/4a1723e9-5bc4-4c4b-bceb-1c45964cc71d/">proof of concept</a> shows a normal user visiting the <code>/hardware/requested</code> endpoint, even though there are no permissions. By doing the same and visiting <a href="https://assets.cryptorama.cloud/hardware/requested">https://assets.cryptorama.cloud/hardware/requested</a>, we can find the flag.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!62m_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5df1165d-3736-4a17-a7c9-33c7c305fe2f_1862x1164.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!62m_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5df1165d-3736-4a17-a7c9-33c7c305fe2f_1862x1164.png 424w, https://substackcdn.com/image/fetch/$s_!62m_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5df1165d-3736-4a17-a7c9-33c7c305fe2f_1862x1164.png 848w, https://substackcdn.com/image/fetch/$s_!62m_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5df1165d-3736-4a17-a7c9-33c7c305fe2f_1862x1164.png 1272w, https://substackcdn.com/image/fetch/$s_!62m_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5df1165d-3736-4a17-a7c9-33c7c305fe2f_1862x1164.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!62m_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5df1165d-3736-4a17-a7c9-33c7c305fe2f_1862x1164.png" width="1862" height="1164" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5df1165d-3736-4a17-a7c9-33c7c305fe2f_1862x1164.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1164,&quot;width&quot;:1862,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!62m_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5df1165d-3736-4a17-a7c9-33c7c305fe2f_1862x1164.png 424w, https://substackcdn.com/image/fetch/$s_!62m_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5df1165d-3736-4a17-a7c9-33c7c305fe2f_1862x1164.png 848w, https://substackcdn.com/image/fetch/$s_!62m_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5df1165d-3736-4a17-a7c9-33c7c305fe2f_1862x1164.png 1272w, https://substackcdn.com/image/fetch/$s_!62m_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5df1165d-3736-4a17-a7c9-33c7c305fe2f_1862x1164.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">We should not have permission to view this page.</figcaption></figure></div><h3>Control Panel RCE</h3><blockquote><p>Now that Henry has his assets, time to try out an application he created. <a href="https://control-panel.cryptorama.cloud/">https://control-panel.cryptorama.cloud/</a></p></blockquote><p>If you visit the website, you'll find a pretty unassuming app. It contains two buttons, one that shows the current working directory, and one that prints the current timestamp.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!k55i!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c7e5f17-4cfb-43a9-b0f9-9f993e87a9f7_1212x896.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!k55i!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c7e5f17-4cfb-43a9-b0f9-9f993e87a9f7_1212x896.png 424w, https://substackcdn.com/image/fetch/$s_!k55i!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c7e5f17-4cfb-43a9-b0f9-9f993e87a9f7_1212x896.png 848w, https://substackcdn.com/image/fetch/$s_!k55i!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c7e5f17-4cfb-43a9-b0f9-9f993e87a9f7_1212x896.png 1272w, https://substackcdn.com/image/fetch/$s_!k55i!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c7e5f17-4cfb-43a9-b0f9-9f993e87a9f7_1212x896.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!k55i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c7e5f17-4cfb-43a9-b0f9-9f993e87a9f7_1212x896.png" width="1212" height="896" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8c7e5f17-4cfb-43a9-b0f9-9f993e87a9f7_1212x896.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:896,&quot;width&quot;:1212,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!k55i!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c7e5f17-4cfb-43a9-b0f9-9f993e87a9f7_1212x896.png 424w, https://substackcdn.com/image/fetch/$s_!k55i!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c7e5f17-4cfb-43a9-b0f9-9f993e87a9f7_1212x896.png 848w, https://substackcdn.com/image/fetch/$s_!k55i!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c7e5f17-4cfb-43a9-b0f9-9f993e87a9f7_1212x896.png 1272w, https://substackcdn.com/image/fetch/$s_!k55i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c7e5f17-4cfb-43a9-b0f9-9f993e87a9f7_1212x896.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">CTF veterans could smell the RCE from a mile away...</figcaption></figure></div><p>If you inspect the network requests that happen from clicking the buttons, you'll notice that there's a request to <code>/cmd</code> that with form data. The payload has a single key, <code>filename</code> , and the value is either <code>first</code> or <code>second</code> depending on which button you clicked.</p><p>We then try to break the form by sending a request without the <code>filename</code> key. It causes the request to fail, because of a <code>BadRequestKeyError</code>. From looking at the ensuing HTML, we learn that...</p><ul><li><p>It's running a development build of Flask (since there's a stack trace).</p></li><li><p>The <code>/cmd</code> endpoint requires a value for <code>filename</code>.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tB_d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94d2293f-3bc6-41c2-801c-41cc8ecb44d0_2070x1046.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tB_d!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94d2293f-3bc6-41c2-801c-41cc8ecb44d0_2070x1046.png 424w, https://substackcdn.com/image/fetch/$s_!tB_d!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94d2293f-3bc6-41c2-801c-41cc8ecb44d0_2070x1046.png 848w, https://substackcdn.com/image/fetch/$s_!tB_d!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94d2293f-3bc6-41c2-801c-41cc8ecb44d0_2070x1046.png 1272w, https://substackcdn.com/image/fetch/$s_!tB_d!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94d2293f-3bc6-41c2-801c-41cc8ecb44d0_2070x1046.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tB_d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94d2293f-3bc6-41c2-801c-41cc8ecb44d0_2070x1046.png" width="2000" height="1011" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/94d2293f-3bc6-41c2-801c-41cc8ecb44d0_2070x1046.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1011,&quot;width&quot;:2000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!tB_d!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94d2293f-3bc6-41c2-801c-41cc8ecb44d0_2070x1046.png 424w, https://substackcdn.com/image/fetch/$s_!tB_d!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94d2293f-3bc6-41c2-801c-41cc8ecb44d0_2070x1046.png 848w, https://substackcdn.com/image/fetch/$s_!tB_d!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94d2293f-3bc6-41c2-801c-41cc8ecb44d0_2070x1046.png 1272w, https://substackcdn.com/image/fetch/$s_!tB_d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94d2293f-3bc6-41c2-801c-41cc8ecb44d0_2070x1046.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">If you don't include a filename in the form, you'll cause an error in the server. That reveals details about the backend implementation.</figcaption></figure></div><p>Scrolling down the stack trace, you'll find a snippet of the actual application code.</p><p>From reading the code, it seems to be...</p><ol><li><p>Reading the value at <code>filename</code>.</p></li><li><p>Constructing a URL based on that value.</p></li><li><p>Sending an HTTP request to get the contents of that URL.</p></li><li><p>Running the contents of the HTTP request via <code>eval</code>.</p></li><li><p>Sending the return value of the <code>eval</code> as part of the HTTP response.</p></li></ol><p>Though the snippet only covers the logic for local files, we suspected that there must be similar logic for remote files. We have no control of the local file content, but if we hosted our own files and had the server download those, we could in theory do arbitrary code execution.</p><p>The fastest way I think of to host files on the public Internet was to run a simple HTTP server and expose it via <code>ngrok</code>. So I created a directory with some test files and spun up an ngrok tunnel.</p><p>Then if you include the entire URL of your remote file as the value in the <code>filename</code> key, the server will execute the arbitrary code that you wrote. Listing the contents of the directory showed that there was a file called <code>flag.txt</code>. Then you could command the server to print out the contents of the flag.</p><h3>Doug's Golfing Experience</h3><blockquote><p>Can you locate this field on the outskirts of London in the image attached below. Once you do, what date did Doug leave a review for this place?</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OKhf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5766f7e-a212-4359-9ec6-ea6b1a17c406_1200x1600.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OKhf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5766f7e-a212-4359-9ec6-ea6b1a17c406_1200x1600.jpeg 424w, https://substackcdn.com/image/fetch/$s_!OKhf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5766f7e-a212-4359-9ec6-ea6b1a17c406_1200x1600.jpeg 848w, https://substackcdn.com/image/fetch/$s_!OKhf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5766f7e-a212-4359-9ec6-ea6b1a17c406_1200x1600.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!OKhf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5766f7e-a212-4359-9ec6-ea6b1a17c406_1200x1600.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OKhf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5766f7e-a212-4359-9ec6-ea6b1a17c406_1200x1600.jpeg" width="1200" height="1600" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f5766f7e-a212-4359-9ec6-ea6b1a17c406_1200x1600.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1600,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!OKhf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5766f7e-a212-4359-9ec6-ea6b1a17c406_1200x1600.jpeg 424w, https://substackcdn.com/image/fetch/$s_!OKhf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5766f7e-a212-4359-9ec6-ea6b1a17c406_1200x1600.jpeg 848w, https://substackcdn.com/image/fetch/$s_!OKhf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5766f7e-a212-4359-9ec6-ea6b1a17c406_1200x1600.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!OKhf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5766f7e-a212-4359-9ec6-ea6b1a17c406_1200x1600.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">We were given this image at the start of the challenge.</figcaption></figure></div><p>This picture seems to have been taken from a plane. The field is also quite distinct, which makes it easy to confirm whether you've found the correct location.</p><p>If you've ever flown in a plane before, you'll notice that the picture was taken at a relatively low altitude. A low altitude means that the plane is either landing or departing, which also implies that the plane is close to the airport. The field itself appears to be a golf course. If you search for golf courses near London airports on Google Maps, you'll eventually find a place called <a href="https://hounslowgolfpark.com/">Hounslow Golf Park</a> next to Heathrow Airport.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1L6v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F718a6b06-bbc8-4b6c-9c28-e5aa5080c8d0_2192x1258.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1L6v!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F718a6b06-bbc8-4b6c-9c28-e5aa5080c8d0_2192x1258.png 424w, https://substackcdn.com/image/fetch/$s_!1L6v!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F718a6b06-bbc8-4b6c-9c28-e5aa5080c8d0_2192x1258.png 848w, https://substackcdn.com/image/fetch/$s_!1L6v!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F718a6b06-bbc8-4b6c-9c28-e5aa5080c8d0_2192x1258.png 1272w, https://substackcdn.com/image/fetch/$s_!1L6v!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F718a6b06-bbc8-4b6c-9c28-e5aa5080c8d0_2192x1258.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1L6v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F718a6b06-bbc8-4b6c-9c28-e5aa5080c8d0_2192x1258.png" width="2000" height="1148" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/718a6b06-bbc8-4b6c-9c28-e5aa5080c8d0_2192x1258.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1148,&quot;width&quot;:2000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Google Maps search near Heathrow Airport&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Google Maps search near Heathrow Airport" title="Google Maps search near Heathrow Airport" srcset="https://substackcdn.com/image/fetch/$s_!1L6v!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F718a6b06-bbc8-4b6c-9c28-e5aa5080c8d0_2192x1258.png 424w, https://substackcdn.com/image/fetch/$s_!1L6v!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F718a6b06-bbc8-4b6c-9c28-e5aa5080c8d0_2192x1258.png 848w, https://substackcdn.com/image/fetch/$s_!1L6v!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F718a6b06-bbc8-4b6c-9c28-e5aa5080c8d0_2192x1258.png 1272w, https://substackcdn.com/image/fetch/$s_!1L6v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F718a6b06-bbc8-4b6c-9c28-e5aa5080c8d0_2192x1258.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Searching for "golf" near Heathrow airport will uncover Hounslow Golf Park.</figcaption></figure></div><p>Taking a look at the golf park's website confirms that it's the same field from the photo. Scrolling through the reviews, you'll find a review from Doug that was posted on <strong>July 16th</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qzYf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6387011e-c2f5-401f-bf41-d81bc3ae9bbe_2172x1286.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qzYf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6387011e-c2f5-401f-bf41-d81bc3ae9bbe_2172x1286.png 424w, https://substackcdn.com/image/fetch/$s_!qzYf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6387011e-c2f5-401f-bf41-d81bc3ae9bbe_2172x1286.png 848w, https://substackcdn.com/image/fetch/$s_!qzYf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6387011e-c2f5-401f-bf41-d81bc3ae9bbe_2172x1286.png 1272w, https://substackcdn.com/image/fetch/$s_!qzYf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6387011e-c2f5-401f-bf41-d81bc3ae9bbe_2172x1286.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qzYf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6387011e-c2f5-401f-bf41-d81bc3ae9bbe_2172x1286.png" width="2000" height="1184" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6387011e-c2f5-401f-bf41-d81bc3ae9bbe_2172x1286.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1184,&quot;width&quot;:2000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Hounslow Golf Park's website&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hounslow Golf Park's website" title="Hounslow Golf Park's website" srcset="https://substackcdn.com/image/fetch/$s_!qzYf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6387011e-c2f5-401f-bf41-d81bc3ae9bbe_2172x1286.png 424w, https://substackcdn.com/image/fetch/$s_!qzYf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6387011e-c2f5-401f-bf41-d81bc3ae9bbe_2172x1286.png 848w, https://substackcdn.com/image/fetch/$s_!qzYf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6387011e-c2f5-401f-bf41-d81bc3ae9bbe_2172x1286.png 1272w, https://substackcdn.com/image/fetch/$s_!qzYf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6387011e-c2f5-401f-bf41-d81bc3ae9bbe_2172x1286.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Scrolling through the golf park's website will confirm that it was in the original picture.</figcaption></figure></div><h2>Meet the Team</h2><p>Behind every CTF, there are names and faces that made it all a reality. Thanks to the organizers at Recon Village for creating the challenges in this CTF. It's also important to remember that solving this CTF was a team effort. Here are your alligator hunters:</p><ul><li><p>Chris Rodriguez</p></li><li><p><a href="https://www.linkedin.com/in/christianjosephjohnson/">Christian Johnson</a></p></li><li><p><a href="https://www.linkedin.com/in/jeremykrach/">Jeremy Krach</a></p></li><li><p><a href="https://x.com/liudotblog">Andrew Liu</a> (me)</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eiQI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff8dbcaa-149e-4deb-b214-60994ce35d03_1462x1178.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eiQI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff8dbcaa-149e-4deb-b214-60994ce35d03_1462x1178.png 424w, https://substackcdn.com/image/fetch/$s_!eiQI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff8dbcaa-149e-4deb-b214-60994ce35d03_1462x1178.png 848w, https://substackcdn.com/image/fetch/$s_!eiQI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff8dbcaa-149e-4deb-b214-60994ce35d03_1462x1178.png 1272w, https://substackcdn.com/image/fetch/$s_!eiQI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff8dbcaa-149e-4deb-b214-60994ce35d03_1462x1178.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eiQI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff8dbcaa-149e-4deb-b214-60994ce35d03_1462x1178.png" width="1462" height="1178" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ff8dbcaa-149e-4deb-b214-60994ce35d03_1462x1178.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1178,&quot;width&quot;:1462,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Defcon collage&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Defcon collage" title="Defcon collage" srcset="https://substackcdn.com/image/fetch/$s_!eiQI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff8dbcaa-149e-4deb-b214-60994ce35d03_1462x1178.png 424w, https://substackcdn.com/image/fetch/$s_!eiQI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff8dbcaa-149e-4deb-b214-60994ce35d03_1462x1178.png 848w, https://substackcdn.com/image/fetch/$s_!eiQI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff8dbcaa-149e-4deb-b214-60994ce35d03_1462x1178.png 1272w, https://substackcdn.com/image/fetch/$s_!eiQI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff8dbcaa-149e-4deb-b214-60994ce35d03_1462x1178.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Clockwise, starting from the top left: Christian and Chris at dinner; Andrew and Jeremy breaking out of restraints at the Rogues Village; the origin of the alligator hunters; Jeremy and Chris after Defcon's closing ceremony.</figcaption></figure></div><p>Hope you enjoyed reading this write-up! If you have any questions or feedback, feel free to reach out and share your thoughts.</p>]]></content:encoded></item><item><title><![CDATA[Tough questions you must ask before joining any startup]]></title><description><![CDATA[Looking to join a startup? Avoid buyer's remorse by asking these fundamental startup-centric questions.]]></description><link>https://www.liu.blog/p/startup-questions</link><guid isPermaLink="false">https://www.liu.blog/p/startup-questions</guid><dc:creator><![CDATA[Andrew Liu]]></dc:creator><pubDate>Wed, 01 Jun 2022 02:22:24 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/529f21b7-dc6c-4dc8-9231-348938ec8ab6_2000x1333.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!E525!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b0e705d-ebd6-4c83-b957-f794636f0de4_2000x1333.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!E525!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b0e705d-ebd6-4c83-b957-f794636f0de4_2000x1333.jpeg 424w, https://substackcdn.com/image/fetch/$s_!E525!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b0e705d-ebd6-4c83-b957-f794636f0de4_2000x1333.jpeg 848w, https://substackcdn.com/image/fetch/$s_!E525!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b0e705d-ebd6-4c83-b957-f794636f0de4_2000x1333.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!E525!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b0e705d-ebd6-4c83-b957-f794636f0de4_2000x1333.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!E525!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b0e705d-ebd6-4c83-b957-f794636f0de4_2000x1333.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b0e705d-ebd6-4c83-b957-f794636f0de4_2000x1333.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!E525!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b0e705d-ebd6-4c83-b957-f794636f0de4_2000x1333.jpeg 424w, https://substackcdn.com/image/fetch/$s_!E525!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b0e705d-ebd6-4c83-b957-f794636f0de4_2000x1333.jpeg 848w, https://substackcdn.com/image/fetch/$s_!E525!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b0e705d-ebd6-4c83-b957-f794636f0de4_2000x1333.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!E525!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b0e705d-ebd6-4c83-b957-f794636f0de4_2000x1333.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@bernardhermant?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Bernard Hermant</a> / <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Unsplash</a></figcaption></figure></div><p>So you're looking to join a startup. That's great! Startups can offer the most fulfilling years of your career.</p><p>At the same time, you need to be careful. It's worlds apart from working at a large, traditional company. Victory isn't assured, and you incur significantly more risk. I'm not trying to peddle some disaster scenario. In a relatively short period, the recent market downturn has caused a <a href="https://www.theverge.com/2022/5/23/23138602/klarna-bnpl-service-lays-off-10-percent-workers-economy-falters-video-messages">fair</a> <a href="https://techcrunch.com/2022/04/19/better-com-conducts-third-round-of-layoffs-in-five-months/">share</a> of <a href="https://techcrunch.com/2022/04/26/robinhood-to-lay-off-9-of-full-time-employees/">massive</a> <a href="https://fortune.com/2022/05/26/bolt-layoffs-employees-vent-frustrations-startup-axes-jobs/">layoffs</a> and <a href="https://techcrunch.com/2022/04/05/fast-shuts-doors-after-slow-growth-high-burn-precluded-fundraising-options/">company failures</a>.</p><blockquote><p>Only when the tide goes out do you discover who's been swimming naked.</p></blockquote><p>Despite those layoffs, good companies will still survive and thrive in the long run. So <a href="https://andrew.cloud/blog/leaving-google/">whether or not to join a startup</a> isn't the issue. What matters is that you make an informed decision. I've compiled a collection of questions I think everybody should ask before joining any startup.</p><h2>When starting out</h2><ul><li><p>What are you building? How far along are you? How long have you been doing it?</p></li><li><p>How do you (plan to) make money? Who are your customers?</p></li><li><p>Who are your investors? What were the terms of your funding?</p></li><li><p>Who are the founders? Do they have any sort of track record?</p></li></ul><p>Your goal when talking to a new startup is to understand the basic context. That means understanding the business model and whether the work will be interesting. Understanding the startup's age and progress will give you some insight into its velocity, which I'd argue is the most important trait of the company.</p><p>This is also the opportunity to gather some light, anecdotal intel about the company. Understanding who invested in the company can give you some signal about the rough quality of the company. Typically, top-tier VCs will not invest in obvious duds. Knowing a founder's track record can also be useful. For example, Domm Holland, the former CEO of Fast, left his previous startup with a <a href="https://www.npr.org/2022/02/17/1081201040/domm-holland-fast-stripe">trail of legal issues</a> behind him. Employees who joined the company before it failed would have noticed several red flags if they looked into the issue.</p><h2>When interviewing</h2><ul><li><p>Who will I be working with? Are they good?</p></li><li><p>How did you find this company? Why did you join?</p></li><li><p>How did the company compare to your expectations?</p></li><li><p>What <strong>don't</strong> you like about your job?</p></li></ul><p>Interviews go both ways. Someone may be interviewing you, but you're also assessing your interviewer. During an interview, you're talking to potential teammates. Do your due diligence and assess whether these are people you'd enjoy working with.</p><p>I recommend knowing whether your hypothetical teammates are competent, sane, and happy with their jobs. It'll foreshadow whether you'll remain sane and happy with your future job.</p><h2>Before getting an offer</h2><ul><li><p>What's your burn rate? What will be your burn rate in 6 months?</p></li><li><p>How much runway do you have?</p></li><li><p>What's your revenue? (Current numbers, NOT projected.)</p></li><li><p>When do you expect to become profitable?</p></li></ul><p>At this point, assuming interviews have gone well, you're looking to understand a company's financial fundamentals. Do not accept hand-wavy answers for any of these questions. <strong>Every company needs to know basic math.</strong></p><p>The burn rate of a company is roughly how much it spends, while its runway represents how long it'll be before the company runs out of money. In my opinion, a healthy company should have <strong>at least 2 years of runway</strong>. Otherwise, it may risk having to accept unfavorable terms in its next funding round (or just failing outright). There was recently a <a href="https://s3.documentcloud.org/documents/22036831/adaptingtoenduremay2022.pdf">leaked presentation</a> from Sequoia about adapting to the future, given the current state of the economy. The days of "growth at all cost" or blind hyper-growth have fallen out of favor. Startups having solid fundamentals will matter a lot more moving forward.</p><h2>After getting an offer</h2><ul><li><p>How many outstanding shares are there?</p></li><li><p>What's the strike price (or fair market value) per share? What were the historical strike prices?</p></li><li><p>What's the preferred price per share?</p></li><li><p>How does the company plan to liquidate its shares?</p></li><li><p>Do you have early exercise?</p></li><li><p>What's the exercise window if I leave?</p></li></ul><p>If you're working at a startup, you're likely being paid in stock options. So you pay money to buy shares of a company and bet that the price of those shares will go up. That's not easy to measure, so you must make sure you understand <a href="https://andrew.cloud/blog/equity/">how equity compensation works</a>.</p><p>Working with stock options can have tax implications, so you may have to make a strategy even if a company is doing well. Early exercise can reduce your taxes (at the expense of upfront cash). If you don't want to exercise any options yet, be sure to know when those options expire. It's usually 90 days after you leave a company, but it can vary. When I was at Scale, if you worked there for at least two years, they had a clause that extended that exercise window to five years after your last day.</p><h2>Talking to the CEO</h2><ul><li><p>What's the biggest existential threat to your company?</p></li><li><p>Who controls the company's board seats? What conditions would cause the board to fire you?</p></li><li><p>What's the worst-case scenario that you project happening to the business? What's your contingency plan in such a case?</p></li><li><p>What's your vision for the company? Under what conditions would you sacrifice that vision?</p></li></ul><p>Before you join a startup, you should have at least one conversation with the CEO. And it's not the time to make small talk. <strong>You must ask the tough questions.</strong> This is the person who's steering the ship, and the person who's probably thought the most about the company's destiny. Like with the questions about company financials, if you get hand-wavy answers, run away. You do not want to be working for this person.</p><p>The question about the worst-case scenario is partially a test to see how well-prepared the CEO is. Leaders should be ready for pretty dire situations. Sometimes these situations can require hard decisions. If a company's burn rate becomes too high, make sure the CEO has considered <a href="https://techcrunch.com/2022/05/19/yc-advises-founders-to-plan-for-the-worst/">doing a layoff to cut costs</a>. If runway becomes a problem, the CEO should be willing to take a down round to keep the company alive. Is this a person who will make unpopular decisions for the company's best interest, or is this someone who engages in wishful thinking? It's your job to find out.</p><h2>Talking to former employees</h2><ul><li><p>How long did you work at the company?</p></li><li><p>Why did you leave? What could have made you stay?</p></li><li><p>What were some good things about the company?</p></li></ul><p>To avoid "drinking the Kool-Aid," I recommend talking to at least one person who has left the startup. You get an example where things didn't work out, and you can talk to someone with no incentive for you to join the company. It's an opportunity to hear an opposing viewpoint and uncover red flags.</p><p>Be sure to understand how much the former employee actually knows about the company and whether this person was fired. (People may not always be upfront about that information.) Ironically, if this is a person you <em>wouldn't</em> work with, a company firing that person may be a green flag.</p><div><hr></div><p><em>Thanks for reading! Please share this if you have friends who are looking at startups.</em></p>]]></content:encoded></item><item><title><![CDATA[Your priorities are meaningless (unless you stack rank them)]]></title><description><![CDATA[If you think everything's important, that means that nothing is important. No two things in life can be equal.]]></description><link>https://www.liu.blog/p/rank-your-priorities</link><guid isPermaLink="false">https://www.liu.blog/p/rank-your-priorities</guid><dc:creator><![CDATA[Andrew Liu]]></dc:creator><pubDate>Thu, 24 Feb 2022 01:13:23 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/be4fafbd-7be5-454e-963c-53e410f4102e_2000x1500.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uKXI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f6b626a-3db8-4ec7-b39b-9771dd0796f4_2000x1500.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uKXI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f6b626a-3db8-4ec7-b39b-9771dd0796f4_2000x1500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!uKXI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f6b626a-3db8-4ec7-b39b-9771dd0796f4_2000x1500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!uKXI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f6b626a-3db8-4ec7-b39b-9771dd0796f4_2000x1500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!uKXI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f6b626a-3db8-4ec7-b39b-9771dd0796f4_2000x1500.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uKXI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f6b626a-3db8-4ec7-b39b-9771dd0796f4_2000x1500.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7f6b626a-3db8-4ec7-b39b-9771dd0796f4_2000x1500.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!uKXI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f6b626a-3db8-4ec7-b39b-9771dd0796f4_2000x1500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!uKXI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f6b626a-3db8-4ec7-b39b-9771dd0796f4_2000x1500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!uKXI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f6b626a-3db8-4ec7-b39b-9771dd0796f4_2000x1500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!uKXI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f6b626a-3db8-4ec7-b39b-9771dd0796f4_2000x1500.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@brett_jordan?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Brett Jordan</a> / <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Unsplash</a></figcaption></figure></div><p>As far as I can tell, every issue tracker and to-do list app known to man supports some feature that lets you prioritize your tasks.</p><p>You typically tag everything as high, medium, or low priority. Other apps may refer to them as "P0's" or "P1's," though they all use the same bucketing system. Sounds good on paper. I enjoy understanding my priorities just as much as the next person does. But what happens in practice? Personally, I experience a two-part problem.</p><ol><li><p>Everything gets labeled as a high priority.</p></li><li><p>You get confused about what's actually important.</p></li></ol><p>Dividing your priorities into buckets can backfire. If everything has a high priority, the system's meaningless. It's like giving each task a participation trophy.</p><p>Having real priorities means that no two things are equally important. By prioritizing one thing, you must explicitly deprioritize something else.</p><h2>Simple ordering solves this easily</h2><p>"But everything <em>is</em> important!" you might rebut in protest. I totally agree. Multiple things can be important, but that doesn't mean they're equally important. You can plan to buy both milk and eggs, but if the grocery store were rationing supplies, you'd eventually pick one over the other.</p><p>Here's what I recommend doing instead:</p><ul><li><p>Stack rank everything in order of their <strong>relative</strong> priority.</p></li><li><p>No two items can be equally ranked.</p></li><li><p>You're done. It's that simple. Start completing those tasks!</p></li></ul><p>Ranking tasks in an ordered list works so well because humans can intuitively sort items once we've given them some measurable values. Once you ban equal priorities, you're suddenly forced to make real decisions.</p><p>For those who still feel the need to divide tasks into buckets, you should still rank everything first. After ranking everything, then draw cut-off boundaries between your "high priority" and "medium priority" tasks. That way, you gain some notion of absolute importance without forgetting your relative prioritization. Though it's just a cherry on top. Stack ranking is enough.</p>]]></content:encoded></item><item><title><![CDATA[Should you leave Google for that startup?]]></title><description><![CDATA[It's a big career change, and you're giving up a great gig. But for some people, it's worth taking the leap. This is how you tell.]]></description><link>https://www.liu.blog/p/leaving-google</link><guid isPermaLink="false">https://www.liu.blog/p/leaving-google</guid><dc:creator><![CDATA[Andrew Liu]]></dc:creator><pubDate>Mon, 06 Dec 2021 03:16:20 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/cd30a0b1-7468-49ac-a18e-a32707e64849_2000x1333.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YZty!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a25a16-344c-48ff-b232-3b868ab99b98_2000x1333.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YZty!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a25a16-344c-48ff-b232-3b868ab99b98_2000x1333.jpeg 424w, https://substackcdn.com/image/fetch/$s_!YZty!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a25a16-344c-48ff-b232-3b868ab99b98_2000x1333.jpeg 848w, https://substackcdn.com/image/fetch/$s_!YZty!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a25a16-344c-48ff-b232-3b868ab99b98_2000x1333.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!YZty!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a25a16-344c-48ff-b232-3b868ab99b98_2000x1333.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YZty!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a25a16-344c-48ff-b232-3b868ab99b98_2000x1333.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d6a25a16-344c-48ff-b232-3b868ab99b98_2000x1333.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YZty!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a25a16-344c-48ff-b232-3b868ab99b98_2000x1333.jpeg 424w, https://substackcdn.com/image/fetch/$s_!YZty!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a25a16-344c-48ff-b232-3b868ab99b98_2000x1333.jpeg 848w, https://substackcdn.com/image/fetch/$s_!YZty!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a25a16-344c-48ff-b232-3b868ab99b98_2000x1333.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!YZty!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a25a16-344c-48ff-b232-3b868ab99b98_2000x1333.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@neonbrand?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">NeONBRAND</a> / <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Unsplash</a></figcaption></figure></div><p>During my time as an undergrad student, I saw Google as a dream job for software engineers. It felt like <em>the</em> place you'd ultimately want to end up--your career's final frontier. A generous helping of my classmates held identical beliefs. After graduating, I happily joined Google, and life was great. Yet a few years later, I couldn't help but feel the itch to leave the place for a smaller company.</p><p>I'm not unique in this regard. When comparing the relative tenures of ex-Googlers (or Xooglers), there seems to be a bimodal distribution of how long people tend to stick around. The people in the first cluster volunteer to leave the mothership after two years or so. It&#8217;s a fair chunk of time, but not long by most measures. Those who stay longer compose the other majority. These folks tend to be lifers--they stick around at Google for most of their careers.</p><p>Both groups share a common struggle. Not everybody leaves Google, but once in a while, someone <em>considers</em> doing so. At that moment, they must answer the same question: <em>is leaving worth it?</em></p><h2>Reasons to Leave (and Reasons to Stay)</h2><p>After leaving Google, I&#8217;ve worked at progressively smaller startups. Depending on your viewing angle, the difference between startups and a big tech company can either appear invisible or differ like night and day. Thus, it&#8217;s easier to dissect the individual motivations that encourage people to leave.</p><p>This list covers concrete differences (and similarities) between Google and startups, but by no means is it exhaustive. Assigning weights to each of these reasons is left as an exercise for the reader, but I&#8217;ll share how these fit into my own cost-benefit analysis.</p><h3>Learning Rate</h3><p>The learning rate at Google seems to fall off a cliff after your first year or so at the company. The work tends to be rather specialized and the average engineering velocity flows like dried molasses. I've met a handful of senior software engineers at the company who couldn't build a CRUD app to save their lives. While they&#8217;re smart and talented people, the nature of the job rarely provides opportunities to learn how to ship products end-to-end. If you feel frustrated with your growth rate and want to know "how the whole system works," joining a startup could be a solution. I wanted to optimize for learning early in my career, so this was the biggest catalyst in my decision to join a startup.</p><h3>Moving the Needle</h3><p>No matter how well or poorly you do, Google will be successful. Any team outside of ads has comparatively little impact on the company&#8217;s bottom line. Teams within ads have comparatively small projects in order to keep Google&#8217;s moneymaker stable. Depending on the size of a startup, your performance may directly impact its success. This can be an exciting prospect or too much pressure. Adjust your career path accordingly.</p><h3>Work-Life Balance</h3><p>Google has done an impressive job establishing a culture of work-life balance among its populace. It's a fantastic place to raise a family. The trade-off is that going above and beyond in your work has diminishing returns on your career trajectory. Work twice as hard as the next engineer? Expect to be promoted one cycle earlier. The game theory at Google rewards conformity. Your optimal strategy is to perform normally and enjoy your evening after clocking out at 5 pm. It's perfectly fine behavior, but it's not for everybody.</p><p>The stereotype that all startups have a bad work-life balance isn&#8217;t true. Some startups can be chill, while others grind hard. I&#8217;ve experienced both. Since your mileage may vary, be sure to ask questions when interviewing.</p><h3>Burnout</h3><p>Contrary to popular belief, I think burnout has little to do with how much one works. It aligns more with whether you feel a sense of purpose in your work. Hence the likelihood of burnout has less to do with company size and more with the quality of management. Within Google, I recommend finding teams with good managers and a low probability of being lost in a re-org. (Core infrastructure teams seem to be ideal.) For startups, look for companies with high levels of focus. A clear mission fosters a strong sense of purpose.</p><h3>Promotions</h3><p>I&#8217;m aware of groups of frustrated Googlers "stuck" at their level. Don't waste your time at a startup if you're promotion hunting. Google doesn't recognize the legitimacy of startup titles (assuming your startup even has a leveling system). Your best bet is to interview at Facebook and get slotted at a higher level. In the long run, staying at large companies with <a href="https://www.levels.fyi/">standardized engineering levels</a> will get you promoted the fastest. However, going to a startup can afford you unique opportunities like bigger projects and management. Sometimes having the equivalent opportunity at Google would require years of tenure.</p><h3>Compensation</h3><p>Startups will not match Google in compensation. However, in recent years, good startups have been inching closer to the base salaries you see at large companies. (The size and stage of a startup also impact its levels of cash compensation.) We&#8217;ll discuss equity compensation in the following section, but note that startup equity may not be liquid for several years.</p><h3>Perks</h3><p>It's hard to beat Google perks. I still hold fond memories of ordering matcha lattes from a barista when I strolled into the office every morning. I'd be done with the drink before reaching my desk. Sad to say, but I haven't received free barista-made coffee for years now. There were many other nice-to-haves that are easy to forget. For instance, being able to hop into any remote office to use a free gym was lovely. If you join a startup, all of it is gone. Stay at Google if you can&#8217;t give up the perks.</p><h3>Interesting People</h3><p>You'll meet more interesting people in the startup world. While I was an intern at Dropbox (back when it was a startup), I befriended a handful of full-time engineers. As I finished college, they would go on to more-or-less pollinate Silicon Valley. Some of them became early engineers at unicorns, like Figma and Airtable. Many of the folks I worked with at Scale AI would go on to found their own companies or become VCs.</p><p>The alumni network at Google has been comparatively dry. Most of the folks I've met at Google are still there. When giving career advice, Patrick McKenzie <a href="https://www.kalzumeus.com/2011/10/28/dont-call-yourself-a-programmer/">advises caution</a> against startups. One justification is that your startup network will struggle to find a job for you, while your megacorp network will be ripe with opportunity. Anecdotally, I've observed the opposite.</p><h2>You're Afraid of Uncertainty, Not Risk</h2><p>It's not fun to admit that humans are emotional beings, especially when others see you as a smart or rational person. But more often than not, when contemplating a career change, people get scared off &#8220;because it&#8217;s too risky.&#8221;</p><p>It&#8217;s easy to distress over the idea of falling behind in one's career. Imagining your peers being richer and farther along in their careers evokes waves of envy. Some scenarios sound absurd, so why do we imagine them? Humans have poor intuition for measuring risk, so we end up using <em>certainty</em> as a proxy for risk.</p><p>Although they look similar, risk and uncertainty are different beasts. Risk brings exposure to legitimate danger or loss. Uncertainty hints at a lack of confidence over future outcomes. The engineer who has worked diverse jobs may lead a career with low certainty, but it&#8217;s not fair to catastrophize the degree of risk. She may have built up a healthy resume and an army of employers eager to hire her back. Inversely, someone working on the same thing his entire life can have risk, despite high levels of certainty. The moment his company cancels the wrong project, he may find that his career is put on pause.</p><p>So whenever someone feels squeamish about the prospect of post-startup destitution, I advise separating out legitimate risks and perceived risks. For example, being unemployable isn&#8217;t a real risk. You can always find a new job if your current company isn&#8217;t doing well. If you made it into Google before, you can probably get back into Google again. A startup failing is a legitimate risk, but your career will be fine. Working at a startup can yield worse (or better) outcomes, but resist exaggerating its magnitude. (Don't underestimate the value of having Google on your resume either. I had to set my LinkedIn location to North Korea in order to suppress the barrage of recruiter solicitations.)</p><p>When planning amidst uncertainty, Reid Hoffman's <a href="https://greylock.com/greymatter/reid-hoffman-abzplanning/">ABZ planning framework</a> can prove a useful tool. You stack a layer of backup plans that allows you to adapt to changing or unforeseen circumstances. If something goes wrong, you can fall back to your next contingency plan. For most established software engineers, the "plan Z" can be to return to a previous company. Not bad for a worst-case scenario.</p><h2>You Probably Won't Get Rich by Working at a Startup (and That's Okay)</h2><p>You can expect around three-quarters of all startup equity packages to be worthless. The remaining quarter roughly breaks even with Google's stock package. Once in a blue moon, someone gets a life-changing amount of money. Those odds look gloomy, right?</p><p>Unfortunately, most startups fail outright. Those that don't may still stagnate or fail to become a big success. Since startup equity packages usually consist of options, it means that <a href="https://andrew.cloud/equity/">you're betting that the startup will multiply in value</a>. You effectively work for the &#8220;right&#8221; to buy startup shares while the share price is low. I can think of at least five example scenarios of what happens to those options:</p><ol><li><p><strong>The startup fails:</strong> Your options are literally worthless.</p></li><li><p><strong>The startup retains its value:</strong> Your options are still worthless. (It costs money to exercise those options, so you make zero profit.)</p></li><li><p><strong>The startup goes through mild growth:</strong> You make some profit from your options, but it's a rounding error compared to your salary.</p></li><li><p><strong>The startup multiplies its valuation:</strong> You break even with your equity package from Google.</p></li><li><p><strong>The startup pops off and multiplies its valuation by a lot:</strong> You're making exponentially more money than at other places.</p></li></ol><p>You might notice that these returns follow a <a href="https://www.angellist.com/blog/what-angellist-data-says-about-power-law-returns-in-venture-capital">power-law distribution</a>. The best startups are worth more than all the lower-tier startups combined. The average startup sucks. A startup that does better than its peers will do exponentially better.</p><p>If the odds are so slim, then why bother with a startup? If you're just here for the money, don't bother. The expected value for your compensation is lower at a startup. Folks genuinely interested in startups shouldn't be too discouraged though. So far, we've only looked at averages. Averages matter when you're picking at random, but your career is too important to leave things to chance. <strong>You need to look for startups that you believe will succeed.</strong> We're here to take calculated risks, not wild guesses.</p><p>The first thing you do when inspecting the pool of startups is to ignore the ones that are obviously doomed to fail. Think back to your days of interviewing other candidates. How many of them received offers? I recall that it was higher than the <a href="https://www.cnbc.com/2019/04/17/heres-how-many-google-job-interviews-it-takes-to-hire-a-googler.html">0.2% acceptance rate</a> reported by Google. We didn&#8217;t observe such a small acceptance rate because the vast majority of candidates who applied to Google got filtered out immediately. These are the people who haven't written a single line of code, and it's easy to detect. So the next time you meet a wantrepreneur who hasn't done any work, run away. They're contributing to the statistic, but you don't have to.</p><p>Look for startups with VC funding. Before venture capital firms invest in a company, they go through a process of due diligence, which includes assessing the company's business plan, team, and financials. You should do the same before joining any startup, but you can piggyback off the work of VCs. Talking to startups funded by reputable VCs reduces your search space. (You'll at least meet companies with convincing pitch decks.) My recommendation would be to make friends with VCs. It's a great way to get connected to portfolio companies and discover companies under the radar. VC funding isn't a silver bullet, though. Like with startups, the returns of venture capital firms follow a power-law distribution, and <a href="https://corporatefinanceinstitute.com/resources/knowledge/other/how-vcs-look-at-startups-and-founders/">funded startups still fail</a>. Hence the quality of the VC firm matters a lot.</p><p>You can also join larger startups, depending on your appetite for risk. By the time a company raises its Series C, its equity package feels more like a deferred compensation plan than a big bet. Unicorns on the verge of an IPO can still double or triple in valuation by the time they go public. It's not a bad return on investment for the amount of work you put in.</p><p>As a final note, joining a startup that doesn't pan out isn't the end of the world. The game only ends once you throw in the towel.</p><h2>Miscellaneous Advice</h2><ul><li><p>Consider whether switching teams makes more sense than switching companies. Leave Google if there's something missing from the <em>company</em>.</p></li><li><p>Google taught me the best practices for a software engineer. Scale taught me how to ship quickly products end-to-end. It's hard to get both skillsets in a single place. Figure out what you're looking for.</p></li><li><p>If you're young and career-oriented, take more risks. You have fewer life obligations and more chances to catch a big break.</p></li><li><p><a href="https://en.wikipedia.org/wiki/Drinking_the_Kool-Aid">Never drink the Kool-Aid</a>, no matter where you end up. Every company will try to present itself in the best light. Be sure you ask the hard questions and resist any pressures to make a hasty decision. Do what's right for you.</p></li><li><p>Are you struggling to find good startups? To get started, look at companies you respect. Which VC firms funded their early rounds? Try to connect with people from those firms. Their portfolio companies might be worth investigating too.</p></li><li><p>Always think for yourself. My values and experiences differ from yours, so what worked for me may not work for you.</p></li><li><p>Never blindly obey anyone's advice. The people matter more than the company itself. <strong>Search for good people.</strong> I try to surround myself with people smarter and more talented than me. Hopefully, it'll rub off on me one day.</p></li></ul><div><hr></div><p><em>Many thanks to Cat Wu and Brian Isganitis for your feedback on earlier drafts of this blog post.</em></p><p><em>If you're a software engineer thinking about moving from a big tech company to a startup, feel free to <a href="https://x.com/liukaian">reach out to me</a>. I'd love to help out with your decision-making process.</em></p>]]></content:encoded></item><item><title><![CDATA[My Developer Setup (with Vim, Tmux, and Zsh)]]></title><description><![CDATA[Customizing your development environment can be both important and fun. This is how I got started with using Vim, Tmux, and Zsh.]]></description><link>https://www.liu.blog/p/dev-setup</link><guid isPermaLink="false">https://www.liu.blog/p/dev-setup</guid><dc:creator><![CDATA[Andrew Liu]]></dc:creator><pubDate>Sun, 17 Oct 2021 23:56:22 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e78f1249-3220-4ffd-9018-e390873b129b_2000x1500.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kCwq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ac7e4fc-0e2d-4d5c-8e3b-b100d1364e05_2000x1500.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kCwq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ac7e4fc-0e2d-4d5c-8e3b-b100d1364e05_2000x1500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kCwq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ac7e4fc-0e2d-4d5c-8e3b-b100d1364e05_2000x1500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kCwq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ac7e4fc-0e2d-4d5c-8e3b-b100d1364e05_2000x1500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kCwq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ac7e4fc-0e2d-4d5c-8e3b-b100d1364e05_2000x1500.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kCwq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ac7e4fc-0e2d-4d5c-8e3b-b100d1364e05_2000x1500.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2ac7e4fc-0e2d-4d5c-8e3b-b100d1364e05_2000x1500.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kCwq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ac7e4fc-0e2d-4d5c-8e3b-b100d1364e05_2000x1500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kCwq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ac7e4fc-0e2d-4d5c-8e3b-b100d1364e05_2000x1500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kCwq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ac7e4fc-0e2d-4d5c-8e3b-b100d1364e05_2000x1500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kCwq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ac7e4fc-0e2d-4d5c-8e3b-b100d1364e05_2000x1500.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@6heinz3r?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Gabriel Heinzer</a> / <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Unsplash</a></figcaption></figure></div><p>Whether you're an industry veteran or a new coder, you should probably invest more time configuring your development environment. When you're staring at the same screen day after day, polishing that screen becomes one of the highest leverage tasks you can pick up in the long run.</p><p><a href="https://github.com/MrPickles/dotfiles">In this blog post, I share what I've done to customize my development environment.</a></p><h2>Why should you care?</h2><p>While customization is a personal choice, I still believe every developer should toy around with configurations at least once. It pays dividends in a couple of ways:</p><ul><li><p>You work faster when you're familiar with the tools at your disposal.</p></li><li><p>You enjoy your work more if you're working in a comfortable environment.</p></li><li><p>Configurations force you to dig through some abstractions and understand the tools you're using.</p></li></ul><p>(These are true from personal anecdote, at least.)</p><p>My development environment revolves around a <code>zsh</code> / <code>vim</code> / <code>tmux</code> setup. Most of my choices were made to optimize for speed and portability. Everything happens in the terminal, so there's minimal context switching. Certain tools I use (like Vim) have a learning curve, meaning you'll struggle to pick it up at first. But once you've achieved a certain level of competence, you become very productive. Everything works in any POSIX environment, meaning that I can clone a repository and have a working environment in a single command.</p><div><hr></div><h2>The Terminal and Oh-My-Zsh (<code>~/.zshrc</code>)</h2><p>On POSIX-based machines, I use <a href="https://www.zsh.org/">Zsh</a> as my default shell. (If I ever need to do development on a Windows machine, I install the <a href="https://docs.microsoft.com/en-us/windows/wsl/about">Windows Subsystem for Linux</a>. Then I set my shell to Zsh.)</p><p>While most terminals default to Bash, Zsh stands out due to its exceptional plugin support. That makes Zsh a preferable choice if you intend on customizing your shell. There's a rather popular Zsh framework called <a href="https://ohmyz.sh/">Oh-My-Zsh</a> that I use. It allows you to track things like the status of your git repository and Python virtual environment out of the box. You're also able to change themes at will, meaning you can get a pretty terminal with minimal effort. My Zsh theme of choice is called <a href="https://github.com/romkatv/powerlevel10k">powerlevel10k</a>. It allows me to have a terminal that looks like the screenshot below.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wRNg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe925f3-c9ed-426b-8f66-1f145a8e7da7_1286x204.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wRNg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe925f3-c9ed-426b-8f66-1f145a8e7da7_1286x204.png 424w, https://substackcdn.com/image/fetch/$s_!wRNg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe925f3-c9ed-426b-8f66-1f145a8e7da7_1286x204.png 848w, https://substackcdn.com/image/fetch/$s_!wRNg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe925f3-c9ed-426b-8f66-1f145a8e7da7_1286x204.png 1272w, https://substackcdn.com/image/fetch/$s_!wRNg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe925f3-c9ed-426b-8f66-1f145a8e7da7_1286x204.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wRNg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe925f3-c9ed-426b-8f66-1f145a8e7da7_1286x204.png" width="1286" height="204" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/afe925f3-c9ed-426b-8f66-1f145a8e7da7_1286x204.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:204,&quot;width&quot;:1286,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!wRNg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe925f3-c9ed-426b-8f66-1f145a8e7da7_1286x204.png 424w, https://substackcdn.com/image/fetch/$s_!wRNg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe925f3-c9ed-426b-8f66-1f145a8e7da7_1286x204.png 848w, https://substackcdn.com/image/fetch/$s_!wRNg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe925f3-c9ed-426b-8f66-1f145a8e7da7_1286x204.png 1272w, https://substackcdn.com/image/fetch/$s_!wRNg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe925f3-c9ed-426b-8f66-1f145a8e7da7_1286x204.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">My terminal can display the git status, command error code, battery percentage, and many other things.</figcaption></figure></div><p>For my terminal color scheme, I use <a href="https://ethanschoonover.com/solarized/">Solarized Dark</a>. It's been sold as an "objectively better" color scheme since the color contrast was designed to be easier on the eyes. To my knowledge, no other color scheme makes any claims of objective superiority. Since I didn't have strong opinions on the color of my terminal background, I picked Solarized Dark. If its claim is true, then I've chosen the "best" color scheme. If not, I suffer no penalty. Either way, I'm no worse off than before.</p><h2>Alternatives to Popular CLI Tools</h2><p>Some of the core commands you run daily might have been written before you were born. While that generally implies that these are reliable tools, it also means they're old and there exist modern alternatives. I've included a table of my favorites below:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5zFC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98be6a1-c208-4e36-903e-14320ddd0269_1518x470.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5zFC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98be6a1-c208-4e36-903e-14320ddd0269_1518x470.png 424w, https://substackcdn.com/image/fetch/$s_!5zFC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98be6a1-c208-4e36-903e-14320ddd0269_1518x470.png 848w, https://substackcdn.com/image/fetch/$s_!5zFC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98be6a1-c208-4e36-903e-14320ddd0269_1518x470.png 1272w, https://substackcdn.com/image/fetch/$s_!5zFC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98be6a1-c208-4e36-903e-14320ddd0269_1518x470.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5zFC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98be6a1-c208-4e36-903e-14320ddd0269_1518x470.png" width="1456" height="451" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f98be6a1-c208-4e36-903e-14320ddd0269_1518x470.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:451,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:72445,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5zFC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98be6a1-c208-4e36-903e-14320ddd0269_1518x470.png 424w, https://substackcdn.com/image/fetch/$s_!5zFC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98be6a1-c208-4e36-903e-14320ddd0269_1518x470.png 848w, https://substackcdn.com/image/fetch/$s_!5zFC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98be6a1-c208-4e36-903e-14320ddd0269_1518x470.png 1272w, https://substackcdn.com/image/fetch/$s_!5zFC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98be6a1-c208-4e36-903e-14320ddd0269_1518x470.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>For the most part, all you need to do is to install the replacement command and then alias it to your original command. It becomes a drop-in replacement, and your life becomes better without any additional effort.</p><pre><code>alias ls="exa"
alias cat="bat"
# and so on...</code></pre><h2>Fuzzy Finder</h2><p>One of the most underappreciated tools in the developer's arsenal is fuzzy searching. You type in <em>approximately</em> what you're looking for, and you get reasonable results. The specific tool I use for fuzzy searching is called <a href="https://github.com/junegunn/fzf"><code>fzf</code></a>. It's a general-purpose command-line fuzzy finder, so you can use it in conjunction with most shell operations. It's hard to explain without going into specifics, so I'll share a few ways I use <code>fzf</code>.</p><p>Suppose I'm looking for active Chrome processes on a machine. I might list processes and pipe them into <code>grep</code> (or <code>rg</code>). The problem here is that I have to know exactly what to search for immediately. If we pipe it into <code>fzf</code> instead, we can arbitrarily type search queries without having to reload the command.</p><pre><code>ps aux | grep Chrome # grep is case sensitive
ps aux | rg chrome # For grep/ripgrep, we get a static result.

ps aux | fzf # With fzf, we can comb through results on demand!</code></pre><p>Fuzzy searching isn't just for piping other commands. If working in a large git repository and want to open up a file in Vim, it's a pain to type in the specific file. Tab completion helps, but you still need to type in a majority of the path. Fortunately, <code>fzf</code> comes with a few keyboard shortcuts. I can type <code>vim &lt;ctrl-t&gt;</code> and <code>fzf</code> will show me a list of candidate files to open. I type in the approximate path to the file, and it can locate what I want with minimal effort on my end. There are similar keyboard shortcuts for shell history search and directory search. I just type in approximately what I want, and <code>fzf</code> does the rest.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kE87!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7071f88-e804-47bb-a474-e5238e713fc7_1628x908.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kE87!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7071f88-e804-47bb-a474-e5238e713fc7_1628x908.png 424w, https://substackcdn.com/image/fetch/$s_!kE87!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7071f88-e804-47bb-a474-e5238e713fc7_1628x908.png 848w, https://substackcdn.com/image/fetch/$s_!kE87!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7071f88-e804-47bb-a474-e5238e713fc7_1628x908.png 1272w, https://substackcdn.com/image/fetch/$s_!kE87!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7071f88-e804-47bb-a474-e5238e713fc7_1628x908.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kE87!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7071f88-e804-47bb-a474-e5238e713fc7_1628x908.png" width="1628" height="908" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e7071f88-e804-47bb-a474-e5238e713fc7_1628x908.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:908,&quot;width&quot;:1628,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!kE87!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7071f88-e804-47bb-a474-e5238e713fc7_1628x908.png 424w, https://substackcdn.com/image/fetch/$s_!kE87!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7071f88-e804-47bb-a474-e5238e713fc7_1628x908.png 848w, https://substackcdn.com/image/fetch/$s_!kE87!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7071f88-e804-47bb-a474-e5238e713fc7_1628x908.png 1272w, https://substackcdn.com/image/fetch/$s_!kE87!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7071f88-e804-47bb-a474-e5238e713fc7_1628x908.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">I no longer need to remember exact file paths. Now I can type in an approximate name and let fuzzy searching do the heavy lifting. All I had to type was &lt;ctrl-t&gt;.</figcaption></figure></div><h2>Text Editing (<code>~/.vimrc</code>)</h2><p>I don't use IDEs or "modern" text editors when coding. Instead, I use <a href="https://neovim.io/">Neovim</a> as my preferred text editor. (It's a drop-in replacement for Vim with a few added benefits.) There two are reasons why it stands out above any alternatives: it's fast and it's portable. Notice how those are the exact features I'm looking for!</p><p>Vim has been infamous for its keyboard shortcuts. If you know how to operate the text editor, your hands never need to leave the keyboard. You can also create macros within the text editor, meaning it's possible to automate any repetitive typing tasks. Vim is also a lightweight program. It starts up in milliseconds and can support files that are too large for "modern" text editors to even open. Everything just works. Since Vim runs within the terminal, it's possible to have the same experience across machines, even if you're developing over SSH. Just make sure the program has been installed and you're done.</p><p>While many consider Vim an "old" text editor, it can support modern features such as plugins and language servers. For package management, I use <a href="https://github.com/junegunn/vim-plug"><code>vim-plug</code></a> to install general Vim plugins. For language server support, I use <a href="https://github.com/neoclide/coc.nvim"><code>coc.nvim</code></a>. That way, if I need autocompletion or jump-to-definition for a language, I just need to type in a single command to install a new language server. Vim works well with <code>fzf</code> too. If I want to open a new file, I can hit <code>&lt;ctrl-p&gt;</code> and open a <code>fzf</code> buffer. It allows me to find arbitrary files without knowing their paths or closing my editor.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PShe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F676360f7-71c8-4730-8f65-77f1be8b88b7_2198x1622.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PShe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F676360f7-71c8-4730-8f65-77f1be8b88b7_2198x1622.png 424w, https://substackcdn.com/image/fetch/$s_!PShe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F676360f7-71c8-4730-8f65-77f1be8b88b7_2198x1622.png 848w, https://substackcdn.com/image/fetch/$s_!PShe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F676360f7-71c8-4730-8f65-77f1be8b88b7_2198x1622.png 1272w, https://substackcdn.com/image/fetch/$s_!PShe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F676360f7-71c8-4730-8f65-77f1be8b88b7_2198x1622.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PShe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F676360f7-71c8-4730-8f65-77f1be8b88b7_2198x1622.png" width="2000" height="1476" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/676360f7-71c8-4730-8f65-77f1be8b88b7_2198x1622.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1476,&quot;width&quot;:2000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!PShe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F676360f7-71c8-4730-8f65-77f1be8b88b7_2198x1622.png 424w, https://substackcdn.com/image/fetch/$s_!PShe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F676360f7-71c8-4730-8f65-77f1be8b88b7_2198x1622.png 848w, https://substackcdn.com/image/fetch/$s_!PShe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F676360f7-71c8-4730-8f65-77f1be8b88b7_2198x1622.png 1272w, https://substackcdn.com/image/fetch/$s_!PShe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F676360f7-71c8-4730-8f65-77f1be8b88b7_2198x1622.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Editor features like code search, autocompletion, and jump-to-definition either come out of the box or with a single command. I can almost do everything without closing Vim.</figcaption></figure></div><h2>Tmux (<code>~/.tmux.conf</code>)</h2><p>If you're a terminal-centric developer (like me), it makes sense to use a terminal multiplexer like <a href="https://en.wikipedia.org/wiki/Tmux"><code>tmux</code></a>. A terminal multiplexer allows you to split a terminal into multiple panes or create virtual tabs with new terminals. If you develop on a remote machine, terminal multiplexers become even more useful. You only need one SSH connection to maintain multiple terminals. Your <code>tmux</code> session also lives independently of your SSH connection. If you choose to log off, you don't lose your work. Just detach from <code>tmux</code> and reattach whenever you want to resume your work.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0QIG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F058ebf83-ec13-4b0f-89dd-fdd38f0231bf_3574x2132.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0QIG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F058ebf83-ec13-4b0f-89dd-fdd38f0231bf_3574x2132.png 424w, https://substackcdn.com/image/fetch/$s_!0QIG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F058ebf83-ec13-4b0f-89dd-fdd38f0231bf_3574x2132.png 848w, https://substackcdn.com/image/fetch/$s_!0QIG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F058ebf83-ec13-4b0f-89dd-fdd38f0231bf_3574x2132.png 1272w, https://substackcdn.com/image/fetch/$s_!0QIG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F058ebf83-ec13-4b0f-89dd-fdd38f0231bf_3574x2132.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0QIG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F058ebf83-ec13-4b0f-89dd-fdd38f0231bf_3574x2132.png" width="2000" height="1193" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/058ebf83-ec13-4b0f-89dd-fdd38f0231bf_3574x2132.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1193,&quot;width&quot;:2000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!0QIG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F058ebf83-ec13-4b0f-89dd-fdd38f0231bf_3574x2132.png 424w, https://substackcdn.com/image/fetch/$s_!0QIG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F058ebf83-ec13-4b0f-89dd-fdd38f0231bf_3574x2132.png 848w, https://substackcdn.com/image/fetch/$s_!0QIG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F058ebf83-ec13-4b0f-89dd-fdd38f0231bf_3574x2132.png 1272w, https://substackcdn.com/image/fetch/$s_!0QIG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F058ebf83-ec13-4b0f-89dd-fdd38f0231bf_3574x2132.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Tmux is a great way to control multiple terminals, even over SSH. You no longer need to worry about SSH connections failing, and it's trivial to keep processes running even if you need to close your laptop.</figcaption></figure></div><h2>Version Control (<code>~/.dotfiles</code>)</h2><p>To wrap everything neatly in a bow, I keep all of my dotfile configurations under version control. There's a <a href="https://github.com/mrpickles/dotfiles">single git repository</a> that holds all of my configuration files. Any local config file is just a symlink to a corresponding file within the git repository. If you're looking to get started, <a href="https://github.com/MrPickles/dotfiles">copying my dotfiles</a> is a great way to get your feet wet.</p><p>Since we have everything under version control, it's simple to track incremental changes over time. Additionally, I'm free to make experimental changes without fear of regressions. Version control also trivializes migrating the configs to a new machine. All you need to do is to clone the git repository and run a setup script that creates symlinks to the files within the repository.</p><p>For my dotfiles, I've created the following one-liner that does all the repository cloning and setup. I run the command, wait a few seconds, and the new machine turns into a familiar environment. And that's it. You're done.</p><pre><code># This command is literally all you need to get started...
curl -L andrew.cloud/dotfiles.sh | sh</code></pre><h2>Final Thoughts</h2><p>And that's all I have to share. Tinkering with configs has made me pickier, but it has also turned me into a better developer. We tend to have too much tolerance for default tooling, and that slows us down in the long run. A few years ago, I started to wonder why we didn't focus more on our development environments.</p><p>I hope reading this makes you question it as well.</p>]]></content:encoded></item><item><title><![CDATA[Writing a Discord Chatbot With GPT-3]]></title><description><![CDATA[I built a contest-winning Discord bot that uses GPT-3 to hold realistic conversations. We'll cover how you can do the same thing from scratch.]]></description><link>https://www.liu.blog/p/discord-bot</link><guid isPermaLink="false">https://www.liu.blog/p/discord-bot</guid><dc:creator><![CDATA[Andrew Liu]]></dc:creator><pubDate>Tue, 20 Jul 2021 00:13:06 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/10954f72-77ab-41cf-a6ef-603ac6bc9655_2000x1500.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!irhk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b3c0392-2e2c-4fdc-b4e8-389377a550c8_2000x1500.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!irhk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b3c0392-2e2c-4fdc-b4e8-389377a550c8_2000x1500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!irhk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b3c0392-2e2c-4fdc-b4e8-389377a550c8_2000x1500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!irhk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b3c0392-2e2c-4fdc-b4e8-389377a550c8_2000x1500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!irhk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b3c0392-2e2c-4fdc-b4e8-389377a550c8_2000x1500.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!irhk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b3c0392-2e2c-4fdc-b4e8-389377a550c8_2000x1500.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9b3c0392-2e2c-4fdc-b4e8-389377a550c8_2000x1500.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!irhk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b3c0392-2e2c-4fdc-b4e8-389377a550c8_2000x1500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!irhk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b3c0392-2e2c-4fdc-b4e8-389377a550c8_2000x1500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!irhk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b3c0392-2e2c-4fdc-b4e8-389377a550c8_2000x1500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!irhk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b3c0392-2e2c-4fdc-b4e8-389377a550c8_2000x1500.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>Several weeks ago, Replit partnered with 1729 to host a challenge to <a href="https://1729.com/replit-discord">write a Discord bot</a>. I won the grand prize by building an AI-powered chatbot.</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:140110842,&quot;url&quot;:&quot;https://balajis.com/p/replit-discord&quot;,&quot;publication_id&quot;:16663,&quot;publication_name&quot;:&quot;balajis.com&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8194919-5ff9-4a28-bf9f-6719897788c6_256x256.png&quot;,&quot;title&quot;:&quot;Learn to Make a Discord Bot with Replit&quot;,&quot;truncated_body_text&quot;:&quot;By Replit&quot;,&quot;date&quot;:&quot;2021-05-26T10:30:00.000Z&quot;,&quot;like_count&quot;:0,&quot;comment_count&quot;:0,&quot;bylines&quot;:[],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:false,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://balajis.com/p/replit-discord?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!H83T!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8194919-5ff9-4a28-bf9f-6719897788c6_256x256.png"><span class="embedded-post-publication-name">balajis.com</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Learn to Make a Discord Bot with Replit</div></div><div class="embedded-post-body">By Replit&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">5 years ago</div></a></div><p>The <a href="https://github.com/MrPickles/Cloudy-the-Discord-Bot">winning bot</a> leveraged GPT-3 to intelligently chat with people and write React code on the fly. How does all of this work? Let's explore how it happened!</p><h2>Introducing Cloudy &#128075;</h2><p>For the 1729 challenge, I wrote a Discord bot named "<a href="https://replit.com/@liuandrewk/Cloudy-The-Hackers-Assistant">Cloudy - The Hacker's Assistant</a>". The bot provided various utilities for online communities, including:</p><ul><li><p>Intelligent conversational chat (with memory) &#128172;</p></li><li><p>React component code generation &#128187;</p></li><li><p>Ethereum blockchain querying &#128177;</p></li><li><p>On-demand maps for <a href="https://innersloth.com/gameAmongUs.php">Among Us</a> &#128377;&#65039;</p></li></ul><p>To get a taste of Cloudy in action, check out the <a href="https://www.loom.com/share/25d612c2625c4321a899a14e30b868d9">demo video</a>.</p><h2>Underneath the Hood &#127899;&#65039;</h2><p>When designing Cloudy, my mental model split the bot into a few distinct sections. Specifically, there were three core layers:</p><ol><li><p>The infrastructure behind Discord bots. &#127959;&#65039;</p></li><li><p>Interacting with machine learning APIs. &#129302;</p></li><li><p>Deploying your bot. &#128640;</p></li></ol><p>All Discord bots need a certain degree of scaffolding before you get started. Cloudy leverages machine learning APIs to power its conversational chat and code generation. There's also a matter of shipping the bot so it can actually help out real users.</p><p>Once you understand all three layers, you should be able to build your own version of Cloudy. If at any time you're confused, feel free to refer to Cloudy's <a href="https://github.com/MrPickles/Cloudy-the-Discord-Bot">source code</a>.</p><h3>Setting up a Generic Discord Bot &#65039;&#127959;&#65039;</h3><p>All Discord bots share common properties that every developer should understand. These are also mandatory for getting started.</p><h4>Creating an Application</h4><p>You'll need to set up a <a href="https://discord.com/developers/applications">Discord application</a> as the first course of action. The application grants you API access and a bot account to use. There already exist <a href="https://discordpy.readthedocs.io/en/stable/discord.html">step-by-step instructions</a> for creating an application.</p><p>The process of setting up an application is more involved when it comes to permissions. If you lack the proper permissions, your bot may fail to work. Therefore, it's good to know what you want your bot to do before actually inviting it to any Discord servers.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ekUx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32fc85b4-9053-44ac-b3b5-a1c52f75e075_1107x854.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ekUx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32fc85b4-9053-44ac-b3b5-a1c52f75e075_1107x854.png 424w, https://substackcdn.com/image/fetch/$s_!ekUx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32fc85b4-9053-44ac-b3b5-a1c52f75e075_1107x854.png 848w, https://substackcdn.com/image/fetch/$s_!ekUx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32fc85b4-9053-44ac-b3b5-a1c52f75e075_1107x854.png 1272w, https://substackcdn.com/image/fetch/$s_!ekUx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32fc85b4-9053-44ac-b3b5-a1c52f75e075_1107x854.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ekUx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32fc85b4-9053-44ac-b3b5-a1c52f75e075_1107x854.png" width="1107" height="854" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/32fc85b4-9053-44ac-b3b5-a1c52f75e075_1107x854.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:854,&quot;width&quot;:1107,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!ekUx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32fc85b4-9053-44ac-b3b5-a1c52f75e075_1107x854.png 424w, https://substackcdn.com/image/fetch/$s_!ekUx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32fc85b4-9053-44ac-b3b5-a1c52f75e075_1107x854.png 848w, https://substackcdn.com/image/fetch/$s_!ekUx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32fc85b4-9053-44ac-b3b5-a1c52f75e075_1107x854.png 1272w, https://substackcdn.com/image/fetch/$s_!ekUx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32fc85b4-9053-44ac-b3b5-a1c52f75e075_1107x854.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">It's critical to set proper bot permissions or else your bot may not function. These are the permissions that Cloudy uses.</figcaption></figure></div><p>At the very least, a bot will need the <code>bot</code> scope. Bots that can take commands will also need the <code>applications.commands</code> scope. The necessary bot permissions vary depending on the specific functionality of the bot. These should be reasonably straightforward. For example, Cloudy uses three permissions:</p><ul><li><p><code>Send Messages</code></p></li><li><p><code>Embed Links</code></p></li><li><p><code>Add Reactions</code></p></li></ul><h4>Client Libraries</h4><p>Before diving too deep into the weeds, it's good to clarify what a Discord bot <em>actually is</em>.</p><p>Discord exposes numerous APIs to fetch updates within a Discord server. Many of these take the form of webhooks, such that developers get real-time updates. Discord's API also allows developers to post on behalf of applications.</p><p>Thus a Discord bot is a program that polls Discord's servers and posts updates as necessary. It's pretty straightforward if you think about it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!a6am!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba347b45-0a35-4d06-aa99-ddce7089333e_2000x830.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!a6am!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba347b45-0a35-4d06-aa99-ddce7089333e_2000x830.png 424w, https://substackcdn.com/image/fetch/$s_!a6am!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba347b45-0a35-4d06-aa99-ddce7089333e_2000x830.png 848w, https://substackcdn.com/image/fetch/$s_!a6am!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba347b45-0a35-4d06-aa99-ddce7089333e_2000x830.png 1272w, https://substackcdn.com/image/fetch/$s_!a6am!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba347b45-0a35-4d06-aa99-ddce7089333e_2000x830.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!a6am!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba347b45-0a35-4d06-aa99-ddce7089333e_2000x830.png" width="2000" height="830" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ba347b45-0a35-4d06-aa99-ddce7089333e_2000x830.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:830,&quot;width&quot;:2000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!a6am!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba347b45-0a35-4d06-aa99-ddce7089333e_2000x830.png 424w, https://substackcdn.com/image/fetch/$s_!a6am!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba347b45-0a35-4d06-aa99-ddce7089333e_2000x830.png 848w, https://substackcdn.com/image/fetch/$s_!a6am!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba347b45-0a35-4d06-aa99-ddce7089333e_2000x830.png 1272w, https://substackcdn.com/image/fetch/$s_!a6am!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba347b45-0a35-4d06-aa99-ddce7089333e_2000x830.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The lifecycle of a Discord bot. Your code constantly communicates with Discord's server in order to fetch and send updates.&nbsp;</figcaption></figure></div><p>Many client libraries abstract away the Discord APIs pretty well. Instead of dealing with API calls, developers just handle event-driven logic. They only need to program what happens when there's a relevant update from Discord. Cloudy was written using <a href="https://discordpy.readthedocs.io/en/stable/">one of these libraries</a>. Pick your favorite programming language, and you'll probably find a decent client library. After that, getting started with a running bot becomes simple.</p><h4>Slash Commands</h4><p>Client libraries should suffice for most use cases (such as chatbots). However, most don't support sending commands to bots. After years of complaints, Discord eventually added first-class support for real bot commands. These are known as slash commands.</p><div id="youtube2-4XxcpBxSCiU" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;4XxcpBxSCiU&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/4XxcpBxSCiU?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>Slash commands work well for specific user-triggered actions, such as modifying settings. For example, Cloudy exposes commands to change its chat mode and fetch Among Us maps. For almost everything else, it can handle things when it receives messages.</p><p>Note that slash commands are a somewhat recent feature. Thus most client libraries lack support for the feature. Cloudy uses an <a href="https://discord-py-slash-command.readthedocs.io/en/latest/">extension library</a> to support slash commands. However, you should note that these extensions may not exist for all languages.</p><p>With all pieces of infrastructure in place, these will roughly be the steps you take:</p><ol><li><p>Create a Discord application.</p></li><li><p>Set proper permissions for your bot.</p></li><li><p>Choose a client library and initialize your repository.</p></li><li><p>Find an extension library that supports slash commands.</p></li><li><p>Build out the business logic for your bot.</p></li></ol><p>At this point, you should have the scaffolding that all Discord bots contain. The next step is to build out the actual logic for the bot, which will diverge, depending on what you want. In the next section, we'll discuss how Cloudy leverages OpenAI for intelligent conversations.</p><h3>Working with Machine Learning APIs &#129302;</h3><p>Cloudy's main feature offers realistic conversational chat. The responses themselves are generated by <a href="https://openai.com/blog/gpt-3-apps/">GPT-3</a>, a text-based machine learning model. Under the hood, OpenAI handles a lot of the leg work. But you have to set things up properly or else the results become meaningless. Garbage in, garbage out.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!chXA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea588b7f-81c1-4701-8550-1ce82add52ae_626x394.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!chXA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea588b7f-81c1-4701-8550-1ce82add52ae_626x394.png 424w, https://substackcdn.com/image/fetch/$s_!chXA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea588b7f-81c1-4701-8550-1ce82add52ae_626x394.png 848w, https://substackcdn.com/image/fetch/$s_!chXA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea588b7f-81c1-4701-8550-1ce82add52ae_626x394.png 1272w, https://substackcdn.com/image/fetch/$s_!chXA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea588b7f-81c1-4701-8550-1ce82add52ae_626x394.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!chXA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea588b7f-81c1-4701-8550-1ce82add52ae_626x394.png" width="626" height="394" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ea588b7f-81c1-4701-8550-1ce82add52ae_626x394.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:394,&quot;width&quot;:626,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!chXA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea588b7f-81c1-4701-8550-1ce82add52ae_626x394.png 424w, https://substackcdn.com/image/fetch/$s_!chXA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea588b7f-81c1-4701-8550-1ce82add52ae_626x394.png 848w, https://substackcdn.com/image/fetch/$s_!chXA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea588b7f-81c1-4701-8550-1ce82add52ae_626x394.png 1272w, https://substackcdn.com/image/fetch/$s_!chXA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea588b7f-81c1-4701-8550-1ce82add52ae_626x394.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">With GPT-3, you can generate chat responses such that bots can emulate a normal conversation.</figcaption></figure></div><p>The end-to-end lifecycle of a conversation with Cloudy looks something like this:</p><ol><li><p>The user sends a message on Discord.</p></li><li><p>Cloudy the message from Discord's servers.</p></li><li><p>Cloudy generates a special prompt for GPT-3 and sends it to OpenAI.</p></li><li><p>OpenAI has GPT-3 generate a prediction and sends the results to Cloudy.</p></li><li><p>Cloudy converts the prediction into a chat response and sends it to Discord.</p></li></ol><p>However, a high-level overview isn't enough to answer a few core questions:</p><ul><li><p>What is GPT-3 and how does one access it?</p></li><li><p>How does one pass relevant data to GPT-3?</p></li></ul><p>These have more nuanced answers that deserve to be covered in detail.</p><h4>Setting Up the OpenAI API</h4><p>To generate realistic chat responses, Cloudy uses a machine learning model called GPT-3. GPT-3 is the latest in a <a href="https://en.wikipedia.org/wiki/GPT-3">family of language prediction models</a> created by <a href="https://openai.com/">OpenAI</a>. For these language models, callers can pass in some text as an initial prompt. The model then generates text to complete the prompt.</p><p>For instance, GPT-3 can receive a snippet of text as its input, such as the example below.</p><blockquote><p>Once upon a time there was...</p></blockquote><p>It will then generate text that deems to be the most probable continuation of what it received. (The continuation length and other terminating conditions can be parameterized.) The output from the example may look something like the following sentence.</p><blockquote><p>Once upon a time there was<strong> a sleeping cat. His name was Fluffy.</strong></p></blockquote><p>Unfortunately GPT-3 isn't open-source, unlike its predecessors. It's only available as a closed (and paid) API. To get access to the API, you'll need to join their <a href="https://beta.openai.com/">waitlist</a>. Despite the hurdles with accessing the model, GPT-3 is the best there is in terms of text completion. Once you have access to the OpenAI API, invoking GPT-3 is simple. Pass it a prompt and the model generates text.</p><h4>Using GPT-3 in a Real App</h4><p>Having a powerful machine learning model is great, but it's meaningless until we put it to work. In practice, that means converting your app data into a prompt that GPT-3 understands. It also entails transforming GPT-3's output into something useful for your app.</p><p>For Cloudy's chat feature, we build a starter prompt using previous chat data. From GPT-3's perspective, it's predicting what Cloudy would say, given a chat log.</p><p>Upon receiving a message, Cloudy constructs a "chat log" from all previous messages in a Discord channel. The previous messages serve to build a history that serves as "memory." We then prepend a text snippet with basic contexts, such as Cloudy's name and purpose. That way, the completion engine has foundational knowledge about the bot.</p><p>Cloudy's preprocessing generates a prompt that resembles the (incomplete) transcript of a play:</p><pre><code><code>The following is a conversation with an AI assistant. The assistant's name is Cloudy. The assistant is helpful, creative, clever, and very friendly.

Human: &lt;Something the user previously said over Discord&gt;
AI: &lt;Cloudy's previous response to the user's message&gt;

&lt;Imagine more Human/AI chat history here in the same format.&gt;

Human: &lt;The message Cloudy just received over Discord&gt;
AI:</code></code></pre><p>GPT-3 will then infer what belongs in the last message after the <code>AI:</code> token. Assuming that the previous conversations have been coherent, the AI should be able to generate a convincing response.</p><p>The same concepts apply beyond conversational chat. Cloudy also generates React code, given a natural language description. It may seem like an unrelated feature, but things change once you peel away the abstraction. In reality, it's a matter of GPT-3 pattern-matching against examples of code generation.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mFwj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F823c31c5-0a1b-4e24-b6a2-ba9d3b6f72ab_649x391.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mFwj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F823c31c5-0a1b-4e24-b6a2-ba9d3b6f72ab_649x391.png 424w, https://substackcdn.com/image/fetch/$s_!mFwj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F823c31c5-0a1b-4e24-b6a2-ba9d3b6f72ab_649x391.png 848w, https://substackcdn.com/image/fetch/$s_!mFwj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F823c31c5-0a1b-4e24-b6a2-ba9d3b6f72ab_649x391.png 1272w, https://substackcdn.com/image/fetch/$s_!mFwj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F823c31c5-0a1b-4e24-b6a2-ba9d3b6f72ab_649x391.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mFwj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F823c31c5-0a1b-4e24-b6a2-ba9d3b6f72ab_649x391.png" width="649" height="391" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/823c31c5-0a1b-4e24-b6a2-ba9d3b6f72ab_649x391.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:391,&quot;width&quot;:649,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!mFwj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F823c31c5-0a1b-4e24-b6a2-ba9d3b6f72ab_649x391.png 424w, https://substackcdn.com/image/fetch/$s_!mFwj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F823c31c5-0a1b-4e24-b6a2-ba9d3b6f72ab_649x391.png 848w, https://substackcdn.com/image/fetch/$s_!mFwj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F823c31c5-0a1b-4e24-b6a2-ba9d3b6f72ab_649x391.png 1272w, https://substackcdn.com/image/fetch/$s_!mFwj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F823c31c5-0a1b-4e24-b6a2-ba9d3b6f72ab_649x391.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Code generation may seem like a totally unique feature, but under the hood, it's quite similar to conversational chat.</figcaption></figure></div><p>To generate code, we need to construct a prompt that resembles our previous chat log. This time, the prompt omits user messages and bot responses. Instead, it contains previous examples of descriptions and code snippets. The penultimate line should contain the user's description of the react component. The prompt concludes with a token indicating that there should be code.</p><pre><code><code>description: a red button that says stop
code: &lt;button style={{color: 'white', backgroundColor: 'red'}}&gt;Stop&lt;/button&gt;

description: a blue box that contains 3 yellow circles with red borders
code: &lt;div style={{backgroundColor: 'blue', padding: 20}}&gt;
  &lt;div style={{backgroundColor: 'yellow', borderWidth: 1, border: '5px solid red', borderRadius: '50%', padding: 20, width: 100, height: 100}}&gt;&lt;/div&gt;
  &lt;div style={{backgroundColor: 'yellow', borderWidth: 1, border: '5px solid red', borderRadius: '50%', padding: 20, width: 100, height: 100}}&gt;&lt;/div&gt;
  &lt;div style={{backgroundColor: 'yellow', borderWidth: 1, border: '5px solid red', borderRadius: '50%', padding: 20, width: 100, height: 100}}&gt;&lt;/div&gt;
&lt;/div&gt;

description: (This is the placeholder for the user-provided input.)
code:</code></code></pre><p>The model should recognize the pattern and realize that React code should come next.</p><p>With all the GPT-3 interactions demystified, there are two things left to do. The bot must post-process the model's output and send the results back to Discord. From the user's perspective, it appears as if Cloudy is talking to them or writing code. What they don't see is that Cloudy's busy building a prompt and guessing what should come next.</p><h3>Deploying Your Bot &#128640;</h3><p>We have the scaffolding for a Discord bot, and we know it works with OpenAI. Now it's time to ship it! After all, the code is meaningless unless people use it.</p><h4>Running in Production</h4><p>Fortunately, it's pretty simple to deploy a Discord bot. All you need is a machine that will keep your bot running. Note that Discord bots don't receive incoming requests. Thus we avoid most of the complexities associated with traditional servers.</p><p>There are several free options available if you want to host a Discord bot. For Cloudy, I personally used <a href="https://replit.com/">Replit</a> to develop and host everything. While working on the bot, I could run the code to see my changes in real-time. It could also keep the bot alive when I was away. Ever since its inception, Cloudy has constantly been running on Replit.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6qWX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea1bc1ee-29f1-4143-a2e4-d86c05f1991c_456x508.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6qWX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea1bc1ee-29f1-4143-a2e4-d86c05f1991c_456x508.png 424w, https://substackcdn.com/image/fetch/$s_!6qWX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea1bc1ee-29f1-4143-a2e4-d86c05f1991c_456x508.png 848w, https://substackcdn.com/image/fetch/$s_!6qWX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea1bc1ee-29f1-4143-a2e4-d86c05f1991c_456x508.png 1272w, https://substackcdn.com/image/fetch/$s_!6qWX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea1bc1ee-29f1-4143-a2e4-d86c05f1991c_456x508.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6qWX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea1bc1ee-29f1-4143-a2e4-d86c05f1991c_456x508.png" width="456" height="508" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ea1bc1ee-29f1-4143-a2e4-d86c05f1991c_456x508.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:508,&quot;width&quot;:456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!6qWX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea1bc1ee-29f1-4143-a2e4-d86c05f1991c_456x508.png 424w, https://substackcdn.com/image/fetch/$s_!6qWX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea1bc1ee-29f1-4143-a2e4-d86c05f1991c_456x508.png 848w, https://substackcdn.com/image/fetch/$s_!6qWX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea1bc1ee-29f1-4143-a2e4-d86c05f1991c_456x508.png 1272w, https://substackcdn.com/image/fetch/$s_!6qWX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea1bc1ee-29f1-4143-a2e4-d86c05f1991c_456x508.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Replit is one of many ways to host your Discord bot. You just need to make sure that your program stays running.</figcaption></figure></div><h4>Inviting the Bot</h4><p>There's one final step before we can get the bot in the hands of our users. Someone has to invite the bot to their Discord server. If you've set up permissions correctly, this should be the easiest step. Grab the <a href="https://discord.com/oauth2/authorize?client_id=847843661973684224&amp;permissions=18496&amp;scope=bot%20applications.commands">invite link</a> from your application page, and share it with the world!</p><p><em><strong>Note:</strong> As of my writing this, I have run out of OpenAI API credits. As a result, Cloudy cannot converse or generate code for time being. (All other features still work fine.) While I appreciate the overwhelming usage and support, API access isn't cheap! </em>&#128517;</p><h2>Tying it All Together</h2><p>We've covered the infrastructure behind Discord bots and how to get started. We've also learned how to understand and interact with machine learning APIs. To wrap things up, we deployed our code to production. Now it's time to enjoy the fruits of our labor!</p><p>Here's the <a href="https://replit.com/@liuandrewk/Cloudy-The-Hackers-Assistant?v=1">REPL</a> for Cloudy. You're free to browse and run the code at your leisure. For best results, consider forking the project and gathering your own API keys.</p><p>Happy coding!</p><div><hr></div><p><em>Wow, you actually read this far? Good job! Nobody has that kind of attention span these days! </em>&#128584;</p>]]></content:encoded></item><item><title><![CDATA[How Nutrition Actually Works]]></title><description><![CDATA[As the world grows more obese, we should stop treating nutrition as a black box. It starts with knowing what we eat.]]></description><link>https://www.liu.blog/p/nutrition</link><guid isPermaLink="false">https://www.liu.blog/p/nutrition</guid><dc:creator><![CDATA[Andrew Liu]]></dc:creator><pubDate>Mon, 17 May 2021 23:45:57 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/de35b5b6-229b-43dc-b308-bfe3c7330b99_2000x1333.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XU81!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bc564b4-b12a-45bd-a997-e39c9b72e78b_2000x1333.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XU81!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bc564b4-b12a-45bd-a997-e39c9b72e78b_2000x1333.jpeg 424w, https://substackcdn.com/image/fetch/$s_!XU81!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bc564b4-b12a-45bd-a997-e39c9b72e78b_2000x1333.jpeg 848w, https://substackcdn.com/image/fetch/$s_!XU81!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bc564b4-b12a-45bd-a997-e39c9b72e78b_2000x1333.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!XU81!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bc564b4-b12a-45bd-a997-e39c9b72e78b_2000x1333.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XU81!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bc564b4-b12a-45bd-a997-e39c9b72e78b_2000x1333.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5bc564b4-b12a-45bd-a997-e39c9b72e78b_2000x1333.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XU81!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bc564b4-b12a-45bd-a997-e39c9b72e78b_2000x1333.jpeg 424w, https://substackcdn.com/image/fetch/$s_!XU81!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bc564b4-b12a-45bd-a997-e39c9b72e78b_2000x1333.jpeg 848w, https://substackcdn.com/image/fetch/$s_!XU81!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bc564b4-b12a-45bd-a997-e39c9b72e78b_2000x1333.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!XU81!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bc564b4-b12a-45bd-a997-e39c9b72e78b_2000x1333.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>Back in elementary school, my teachers would use the Food Pyramid to describe how to eat healthy. Younger readers may not be familiar with the Food Pyramid, but that might be a hidden blessing. Its recommendations were somewhat arbitrary. Throughout the years, the United States would continue to revise its dietary recommendations. However, Americans (<a href="https://www.nbcnews.com/health/health-news/whole-world-getting-fatter-study-finds-n771176">and people in the rest of the world</a>) continued to grow more obese.</p><p>With nutrition, our society suffers from too much instruction and not enough understanding. When we're told to "eat this" or that "this is unhealthy," it makes us outsource our thinking. What's worse is when the recommendations begin to contradict each other. Then it's outright confusing. Instead, it's better to know how your body actually interprets food. We can then derive an action plan from first principles. Most people see nutrition as a black box. You can change that.</p><p>This post contains three main sections:</p><ol><li><p>A History of the Food Pyramids &#128220;</p></li><li><p>Nutritional Building Blocks &#129521;</p></li><li><p>Actionable Eating &#129382;</p></li></ol><h2>A History of the Food Pyramids &#128220;</h2><p><em>(This entire section is a history lesson and can be skipped. If you're only interested in the fundamentals of nutrition, skip to the next section.)</em></p><p>For several decades, the United States government has been giving dietary advice. It's a typical case of good intentions being spoiled by bad results (and lobbyists). Let's take a look.</p><h3>Food Pyramid (1992 - 2005) &#9888;&#65039;</h3><p>The United States Department of Agriculture (USDA) came out with the first iteration of the Food Pyramid back in 1992. At the time, the recommendations revolved around the concept of food groups. Specifically, there are 6 different categories:</p><ul><li><p>Grains</p></li><li><p>Fruits</p></li><li><p>Vegetables</p></li><li><p>Dairy</p></li><li><p>Meats, Beans, Eggs, and Nuts</p></li><li><p>Fats, Oils and Sweets</p></li></ul><p>For each food group, the USDA recommended a certain number of servings to consume per day. Grains were at the bottom of the pyramid and composed the bulk of the recommended diet. Oils and sweets lived at the top and were supposed to be consumed "sparingly."</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fHxB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7966231-2644-4edc-a6ec-85f3da7d1d0f_730x569.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fHxB!,w_424,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7966231-2644-4edc-a6ec-85f3da7d1d0f_730x569.gif 424w, https://substackcdn.com/image/fetch/$s_!fHxB!,w_848,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7966231-2644-4edc-a6ec-85f3da7d1d0f_730x569.gif 848w, https://substackcdn.com/image/fetch/$s_!fHxB!,w_1272,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7966231-2644-4edc-a6ec-85f3da7d1d0f_730x569.gif 1272w, https://substackcdn.com/image/fetch/$s_!fHxB!,w_1456,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7966231-2644-4edc-a6ec-85f3da7d1d0f_730x569.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fHxB!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7966231-2644-4edc-a6ec-85f3da7d1d0f_730x569.gif" width="730" height="569" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f7966231-2644-4edc-a6ec-85f3da7d1d0f_730x569.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:569,&quot;width&quot;:730,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!fHxB!,w_424,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7966231-2644-4edc-a6ec-85f3da7d1d0f_730x569.gif 424w, https://substackcdn.com/image/fetch/$s_!fHxB!,w_848,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7966231-2644-4edc-a6ec-85f3da7d1d0f_730x569.gif 848w, https://substackcdn.com/image/fetch/$s_!fHxB!,w_1272,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7966231-2644-4edc-a6ec-85f3da7d1d0f_730x569.gif 1272w, https://substackcdn.com/image/fetch/$s_!fHxB!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7966231-2644-4edc-a6ec-85f3da7d1d0f_730x569.gif 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The original Food Pyramid. Unfortunately, its food groups don't classify food particularly well. Also, its portion recommendations aren't that accurate. Wait a second, that means everything's wrong!</figcaption></figure></div><p>While the Food Pyramid created a guideline about how to eat, it was rife with problems.</p><ol><li><p>The food categories did not align with science.</p></li><li><p>Serving recommendations were both poorly-defined and inaccurate.</p></li><li><p>Lobbying played a crucial role in the final design.</p></li></ol><h4>Food Categories</h4><p>I suspect the food group for grains was supposed to be a way of representing carbohydrates. But in that scenario, starchy foods such as potatoes should belong in the group.</p><p>Fruits and vegetables tend to be nutritionally similar, so there's no need for two groups. On the other hand, fats should not be in its own group, since all foods contain some amount of fat. These are some of the many grouping issues present in the Pyramid.</p><h4>Serving Sizes</h4><p>The concept of a "serving" isn't particularly helpful. The size of a serving can be arbitrary, meaning there's no standardized measure. Also the idea to consume fats "sparingly" can be dangerous. Humans need to consume some degree of fat, so preaching that "fat is bad" is an oversimplification. Meanwhile, having vegetarian or dairy-free diets can be perfectly fine.</p><h4>Lobbying</h4><p>When digging into the specifics of the Food Pyramid, observers can notice hints of <a href="https://pubmed.ncbi.nlm.nih.gov/8375951/">lobbyist influence</a>. For example, dairy products don't warrant their own food group. The dairy industry would think differently. (People who remember the Food Pyramid may also remember the "<a href="https://www.gotmilk.com/">Got Milk?</a>" campaign. The dairy industry has money to burn.)</p><p>It's also odd that cereal made its way into the grain group. Nutritionally, it ought to belong in the "Sweets" group. But cereal companies wouldn't be too happy if the government recommended limiting cereal intake.</p><p>It's funny in some sense. When you look at the Food Pyramid, it's split not by what's healthy. Rather, you see who paid the most to have their product shown on the menu.</p><h3>MyPyramid (2005 - 2011) &#129692;</h3><p>After a long decade, the USDA decided that the Food Pyramid was problematic and needed a facelift. In 2005, they replaced the Food Pyramid with MyPyramid. While MyPyramid still had problems, to its credit, it was a slight improvement. There were two notable changes:</p><ul><li><p>There was a new "group" representing physical activity.</p></li><li><p>Serving sizes were replaced with legitimate measurements (e.g. cups and ounces).</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bsmB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12ee64b3-48fd-437c-852f-a8d83a590aa4_1584x1224.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bsmB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12ee64b3-48fd-437c-852f-a8d83a590aa4_1584x1224.png 424w, https://substackcdn.com/image/fetch/$s_!bsmB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12ee64b3-48fd-437c-852f-a8d83a590aa4_1584x1224.png 848w, https://substackcdn.com/image/fetch/$s_!bsmB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12ee64b3-48fd-437c-852f-a8d83a590aa4_1584x1224.png 1272w, https://substackcdn.com/image/fetch/$s_!bsmB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12ee64b3-48fd-437c-852f-a8d83a590aa4_1584x1224.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bsmB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12ee64b3-48fd-437c-852f-a8d83a590aa4_1584x1224.png" width="1584" height="1224" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/12ee64b3-48fd-437c-852f-a8d83a590aa4_1584x1224.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1224,&quot;width&quot;:1584,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!bsmB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12ee64b3-48fd-437c-852f-a8d83a590aa4_1584x1224.png 424w, https://substackcdn.com/image/fetch/$s_!bsmB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12ee64b3-48fd-437c-852f-a8d83a590aa4_1584x1224.png 848w, https://substackcdn.com/image/fetch/$s_!bsmB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12ee64b3-48fd-437c-852f-a8d83a590aa4_1584x1224.png 1272w, https://substackcdn.com/image/fetch/$s_!bsmB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12ee64b3-48fd-437c-852f-a8d83a590aa4_1584x1224.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">MyPyramid did have some improvements over the original Food Pyramid, but it still fell under lobbyist influence. Additionally, it drew criticism for being too complicated.</figcaption></figure></div><p>Unfortunately, MyPyramid still carried the same lobbyist influences from its predecessor. The main food groups were largely the same. MyPyramid also drew criticism for being too complicated and confusing. Compared to its predecessor, MyPyramid had a short lifespan and was taken down after 6 years.</p><h3>MyPlate (2011 - present) &#127869;&#65039;</h3><p>MyPlate replaced MyPyramid in 2011 after criticism of the latter being too confusing. It is the current USDA recommendation.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SVPK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95b1f57f-9df9-4299-9245-fdbb62df844c_217x199.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SVPK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95b1f57f-9df9-4299-9245-fdbb62df844c_217x199.svg 424w, https://substackcdn.com/image/fetch/$s_!SVPK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95b1f57f-9df9-4299-9245-fdbb62df844c_217x199.svg 848w, https://substackcdn.com/image/fetch/$s_!SVPK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95b1f57f-9df9-4299-9245-fdbb62df844c_217x199.svg 1272w, https://substackcdn.com/image/fetch/$s_!SVPK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95b1f57f-9df9-4299-9245-fdbb62df844c_217x199.svg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SVPK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95b1f57f-9df9-4299-9245-fdbb62df844c_217x199.svg" width="217" height="199" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/95b1f57f-9df9-4299-9245-fdbb62df844c_217x199.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:199,&quot;width&quot;:217,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!SVPK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95b1f57f-9df9-4299-9245-fdbb62df844c_217x199.svg 424w, https://substackcdn.com/image/fetch/$s_!SVPK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95b1f57f-9df9-4299-9245-fdbb62df844c_217x199.svg 848w, https://substackcdn.com/image/fetch/$s_!SVPK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95b1f57f-9df9-4299-9245-fdbb62df844c_217x199.svg 1272w, https://substackcdn.com/image/fetch/$s_!SVPK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95b1f57f-9df9-4299-9245-fdbb62df844c_217x199.svg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">MyPlate is the current iteration of the "Food Pyramid." It's by far the simplest, since it recommends food ratios. That's good because it spreads the least amount of misinformation this way.</figcaption></figure></div><p>Instead of listing out food quantities, MyPlate describes the ratio of food types. Unfortunately, it suffers from oversimplification. The absolute quantity of food still matters, and the food groups still don't make sense. (Notice how dairy has stubbornly persisted across all USDA recommendations.)</p><p>To be fair to the USDA, getting nutritional guidance right isn't easy. But as long as the USDA suffers from the influence of food industries, don't expect reliable information. I don't see MyPlate lasting for too long before it's replaced by a new set of recommendations.</p><h2>Nutritional Building Blocks &#129521;</h2><p><em>(This section is a bit of a chemistry lesson. If you're only interested in actionable advice or have PTSD from your high school orgo classes, skip to the <a href="#actionable-eating-">next section</a>.)</em></p><p>Consuming food serves two main purposes:</p><ol><li><p>Provide energy for activity (and to live).</p></li><li><p>Provide materials to grow and repair the body.</p></li></ol><p>Notice that physical or mental pleasure is <em>not</em> one of the purposes of eating. It may be one of the derived side effects, but don't confuse it with the legitimate biological purposes.</p><p>With nutrients, it's helpful to view things through the lens of chemistry. Humans digest foods into certain chemical compounds that can used in the future. These chemical compounds are known as nutrients. The body can later trigger chemical reactions using nutrients as reactants or catalysts. These chemical reactions tend to either generate energy or construct cells.</p><p>We can examine nutrients through three fundamental components:</p><ol><li><p>Macronutrients &#127858;</p></li><li><p>Calories &#127853;</p></li><li><p>Micronutrients &#128138;</p></li></ol><h3>Macronutrients &#127858;</h3><p>Macronutrients comprise the chemical compounds that generate energy for the human body. These also tend to be the compounds that humans need the most. As such, macronutrients are typically measured in grams.</p><p>There are three core macronutrients:</p><ul><li><p>Carbohydrates &#127838;</p></li><li><p>Proteins &#127831;</p></li><li><p>Fats &#129361;</p></li></ul><p>When the body breaks down macronutrients, it receives energy from the compounds. Residual compounds from these macronutrients may also used for other vital purposes. It's worth noting that the body cannot naturally produce most of these compounds, meaning you need to have a reasonably balanced diet to live.</p><h4>Carbohydrates &#127838;</h4><p>Carbohydrates constitute the primary source of energy in the body. They comprise a family chemical compounds that include monosaccharides and polysaccharides. You may know these as sugars and starches. Besides energy production, the body also needs carbohydrates to support the immune system.</p><p>Carbohydrates can be divided into simple or complex carbs. Simple carbs tend to be sugars, while complex carbs can be found in foods such as brown rice or bread. The body uses simple carbs for energy, meaning simple carbs are easy to digest. It will break down complex carbs into simple carbs over time.</p><h4>Proteins &#127831;</h4><p>Proteins are compounds made of amino acids. Besides being an energy source, the amino acids play a role in constructing the body. High sources of protein tend to be meats, eggs, and legumes.</p><p>Note that the body cannot naturally produce <a href="https://en.wikipedia.org/wiki/Essential_amino_acid">certain necessary amino acids</a>. Therefore you must consume protein to live. Meats and eggs already contain all necessary amino acids. Vegans need a more varied diet (e.g. wheat and legumes) in order to cover all necessary amino acids.</p><h4>Fats &#129361;</h4><p>Fats are compounds made up of fatty acids. Fatty acids sustain the health of cell membranes, and thus help sustain skin and hair health. Like with the other macronutrients, fats can also be used as an energy source.</p><p>Among the fatty acids, there are subcategories based upon the molecular structure of the compounds.</p><ul><li><p>Unsaturated Fat &#128031;</p></li><li><p>Saturated Fat &#129385;</p></li><li><p>Trans Fat &#127839;</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vLq5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32d3982f-292f-467b-9b44-f230c8a21d48_500x321.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vLq5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32d3982f-292f-467b-9b44-f230c8a21d48_500x321.jpeg 424w, https://substackcdn.com/image/fetch/$s_!vLq5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32d3982f-292f-467b-9b44-f230c8a21d48_500x321.jpeg 848w, https://substackcdn.com/image/fetch/$s_!vLq5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32d3982f-292f-467b-9b44-f230c8a21d48_500x321.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!vLq5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32d3982f-292f-467b-9b44-f230c8a21d48_500x321.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vLq5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32d3982f-292f-467b-9b44-f230c8a21d48_500x321.jpeg" width="500" height="321" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/32d3982f-292f-467b-9b44-f230c8a21d48_500x321.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:321,&quot;width&quot;:500,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!vLq5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32d3982f-292f-467b-9b44-f230c8a21d48_500x321.jpeg 424w, https://substackcdn.com/image/fetch/$s_!vLq5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32d3982f-292f-467b-9b44-f230c8a21d48_500x321.jpeg 848w, https://substackcdn.com/image/fetch/$s_!vLq5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32d3982f-292f-467b-9b44-f230c8a21d48_500x321.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!vLq5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32d3982f-292f-467b-9b44-f230c8a21d48_500x321.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Saturated fats don't have any double bonds between carbon atoms, thus being saturated with the maximum number of hydrogen atoms.</figcaption></figure></div><p>Unsaturated fats contain at least one bent double bond between its carbon atoms. In practice, it means that these compounds cannot clump together tightly. These are the "healthy" fats and are in foods like fish, nuts, and avocados.</p><p>Saturated fats replace the carbon double bonds with single bonds to hydrogen atoms. The compound thus has a shape that allows it to be packed very densely. The dense packing of saturated fats in turn allows the build-up of bad cholesterol. Enough bad cholesterol will clog your arteries. You should try to limit consumption of saturated fats.</p><p>Trans fats occur commonly in foods made with hydrogenated oil. On a molecular level, trans fats are unsaturated fats whose shape gets transformed. There are no health benefits to trans fats whatsoever. As a result, the United States banned creation of artificial trans fats in 2018. Avoid consuming trans fats if possible.</p><h4>Other "Macros"</h4><p>There are other nutrients whose status as a macronutrient is debatable. The core macronutrients provide energy and are necessary in large quantities. On the other hand, these three compounds do not fit both requirements:</p><ul><li><p>Ethanol &#127863;</p></li><li><p>Water &#128167;</p></li><li><p>Fiber &#129365;</p></li></ul><p>Humans can metabolize ethanol, also known as drinking alcohol. However, it only provides energy and no other benefits. Thus you're literally consuming "empty calories."</p><p>Water does not provide any energy. Instead it acts as a catalyst for internal human reactions. Some consider it a macronutrient since humans need a large quantity of water to survive.</p><p>Fiber is a type of carbohydrate that cannot be digested (and doesn't provide energy). Instead, it aids with digestion. Fiber can be typically found in foods with complex carbohydrates.</p><h3>Calories &#127853;</h3><p>When you consume food, you can also think in terms of how much energy the food provides. Energy consumption and expenditure determines weight gain or loss.</p><p>Nutrition is normally measured in kilocalories. Kilocalories can also be called Calories (with a capital "C"). To remove ambiguity, I will refer to it as a kilocalorie when necessary. A kilocalorie is equivalent to 1000 calories (with a lowercase "c") and 4184 joules. A calorie represents the energy needed to raise one gram of water by one degree Celsius.</p><p>Each compound you consume has a fixed amount of energy per unit mass. Therefore, you can derive your total Calorie consumption by counting macros. (In general, I recommend examining your macros first and then deriving Calories.) The amount of energy per gram of each nutrient is below.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0Xhc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3517b873-5910-45d4-a884-9a059aa3f22a_1070x428.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0Xhc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3517b873-5910-45d4-a884-9a059aa3f22a_1070x428.png 424w, https://substackcdn.com/image/fetch/$s_!0Xhc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3517b873-5910-45d4-a884-9a059aa3f22a_1070x428.png 848w, https://substackcdn.com/image/fetch/$s_!0Xhc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3517b873-5910-45d4-a884-9a059aa3f22a_1070x428.png 1272w, https://substackcdn.com/image/fetch/$s_!0Xhc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3517b873-5910-45d4-a884-9a059aa3f22a_1070x428.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0Xhc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3517b873-5910-45d4-a884-9a059aa3f22a_1070x428.png" width="1070" height="428" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3517b873-5910-45d4-a884-9a059aa3f22a_1070x428.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:428,&quot;width&quot;:1070,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:53172,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0Xhc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3517b873-5910-45d4-a884-9a059aa3f22a_1070x428.png 424w, https://substackcdn.com/image/fetch/$s_!0Xhc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3517b873-5910-45d4-a884-9a059aa3f22a_1070x428.png 848w, https://substackcdn.com/image/fetch/$s_!0Xhc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3517b873-5910-45d4-a884-9a059aa3f22a_1070x428.png 1272w, https://substackcdn.com/image/fetch/$s_!0Xhc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3517b873-5910-45d4-a884-9a059aa3f22a_1070x428.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Calories in and calories out will directly affect your bodyweight. If you consume a surplus of energy, you will gain weight. Otherwise, a deficit of energy means that your body taps into its reserves and loses weight.</p><p>Weight control is a relatively simple equation. However, don't treat calories as the most important metric. For factors like organ health and body composition, macronutrients matter as well. As an example, suppose you consume a limited number of Calories. All of those Calories come from foods with high saturated fat. You will not become physically fat. However, don't be surprised if your arteries clog due to high cholesterol.</p><h3>Micronutrients &#128138;</h3><p>Besides macronutrients, the human body also requires other compounds in relatively small amounts. These are the micronutrients, and they tend to be measured in milligrams. Due to their small quantities, they are not sources of energy. Instead, micronutrients usually act as catalysts for vital bodily reactions (such as bone growth).</p><p>There are two variants of micronutrients:</p><ul><li><p>Vitamins &#127818;</p></li><li><p>Minerals &#129522;</p></li></ul><p>Vitamins are organic compounds while minerals are inorganic. That's about the only main difference between the variants. In general, a balanced diet should cover all the necessary micronutrients.</p><h2>Actionable Eating &#129382;</h2><p>Every human is different, so there's no one formula for eating. There are a few common traits we all share, however. The human body resembles a system striving to keep equilibrium. Thus any changes you make must stay consistent. Doing a diet may have some results in the short term, but as soon as you revert to old habits, your body follows suit. Your body will converge to match your actions.</p><p>To start off, set your desired trajectory. Your strategy should reflect your goals. It wouldn't make sense to tell a person trying to lose weight to have the same diet as a person trying to gain muscle. Notice that there are plenty of valid reasons to plan out how you eat:</p><ul><li><p>You'd like to lose weight.</p></li><li><p>You'd like to lower your bodyfat percentage.</p></li><li><p>You'd like to get stronger or gain muscle.</p></li><li><p>You want to maximize your lifespan.</p></li></ul><p>Figure out what you want first.</p><h3>Running the Numbers</h3><p>Human bodies vary a lot, so your caloric and nutritional needs may not be the same as mine. You'll need to establish some sort of baseline for yourself first. The two main baselines are <a href="https://en.wikipedia.org/wiki/Basal_metabolic_rate">basal metabolic rate</a> (BMR) and total daily energy expenditure (TDEE).</p><p>Your BMR represents how many Calories the body burns just by living. Males and people with larger bodyweights will have a larger BMR. Your TDEE approximates how many total Calories you spend daily based on your BMR and activity level. (Generally, TDEE is more useful than BMR.) So if the number of Calories you eat in a day matches your TDEE, you should maintain the same weight. There are <a href="https://tdeecalculator.net/">many</a> <a href="https://www.calculator.net/tdee-calculator.html">TDEE</a> <a href="https://fitnessvolt.com/tdee-calculator/">calculators</a> <a href="https://www.nerdfitness.com/blog/how-many-calories-should-i-eat-every-day-a-look-at-total-daily-energy-expenditure-tdee/">on</a> <a href="https://www.bodybuilding.com/fun/calculate-your-total-daily-energy-expenditure-tdee.html">the</a> <a href="https://calculator-online.net/tdee-calculator/">Internet</a>. Pick your favorite and determine your TDEE.</p><p>With your TDEE in hand, add or subtract 100-200 calories, depending on if you're looking to gain or lose weight. Having a larger difference may cause unwanted side effects (such as muscle loss or fat gain). Note that over time, you'll want to periodically recalculate your TDEE. It will change if your weight changes. You now have your daily target Calories.</p><p>Next up, you'll want to calculate your macronutrient targets. It's best to start with protein. Aim to consume <a href="https://pubmed.ncbi.nlm.nih.gov/29497353/">0.7-0.8 grams of protein per pound of bodyweight</a>. (You should also be able to derive your daily Calories from protein.) Around half of your daily Calories should come from carbohydrates. The remaining Calories in your "budget" will go towards fats. If you're looking to lose fat, it may be worth reducing your carbohydrate ratio and replacing it with protein.</p><p>At this point, you should know how many grams (and Calories) of each macronutrient to consume each day. Find the foods that will bring you to that target and enjoy! Prefer complex carbs over simple carbs and try to limit saturated fats.</p><h3>Miscellaneous Questions</h3><p>Below are some related topics that did not fit particularly well in any of the prior sections.</p><h4>How do I find foods that will hit my macronutrient targets?</h4><p>It may be helpful to think of eating foods as a system of equations. You cannot control the macronutrient ratio of foods, but you can how much you eat. A serving size on a nutrition label is arbitrary; you should decide the portion that's right for you.</p><p>Usually, the "cleaner" the food, the simpler it is in terms of macronutrient balance. They also tend not to have too much saturated fats or simple carbs. For example, wheat bread contains mostly carbs while chicken breast is mostly protein. Something like fried chicken will have weird ratios (and high saturated fat), making your calculations much harder.</p><h4>What if I feel too hungry or too full?</h4><p>Empty calories keep you hungry, forming a vicious cycle. Usually, cleaner foods should a lower number of Calories per unit volume. Therefore, it's easier to feel satiated if you're eating a high volume of clean foods.</p><p>Consider doing the opposite if you're feeling too full. Consuming liquids (e.g. a protein shake) also tends to prevent people from feeling full.</p><h4>Do I really need to count calories? Isn't this overkill?</h4><p>The proper answer is that it depends on your goals. If you're looking to win a bodybuilding competition, you should probably track numbers. If you generally want to get into better shape, it's not necessary at all. You should be able to learn to approximate things quite well without wasting much time. It's harder if you're eating at a restaurant, but don't worry too much. Your systematic habits will determine long term results.</p>]]></content:encoded></item></channel></rss>