<?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[Esther is a confused human being: Coding ]]></title><description><![CDATA[LLM Projects Building & Philosophy on building fast]]></description><link>https://learnlearnlearn.substack.com/s/coding</link><image><url>https://substackcdn.com/image/fetch/$s_!C4ED!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcda04160-ff4e-4302-b0ac-3a6c91c547cd_466x466.png</url><title>Esther is a confused human being: Coding </title><link>https://learnlearnlearn.substack.com/s/coding</link></image><generator>Substack</generator><lastBuildDate>Sun, 09 Aug 2026 11:30:47 GMT</lastBuildDate><atom:link href="https://learnlearnlearn.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Esther]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[learnlearnlearn@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[learnlearnlearn@substack.com]]></itunes:email><itunes:name><![CDATA[Esther]]></itunes:name></itunes:owner><itunes:author><![CDATA[Esther]]></itunes:author><googleplay:owner><![CDATA[learnlearnlearn@substack.com]]></googleplay:owner><googleplay:email><![CDATA[learnlearnlearn@substack.com]]></googleplay:email><googleplay:author><![CDATA[Esther]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Hit my manager]]></title><description><![CDATA[lessons learned]]></description><link>https://learnlearnlearn.substack.com/p/hit-my-manager</link><guid isPermaLink="false">https://learnlearnlearn.substack.com/p/hit-my-manager</guid><dc:creator><![CDATA[Esther]]></dc:creator><pubDate>Fri, 12 Dec 2025 02:06:47 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!6Vy-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F729b1906-112b-4edc-8bce-60d57437da98_2048x1182.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Over the years, so many of us have worked in environments where the stress gets so intense that you <em>half-jokingly</em> fantasize about throwing something at your manager. Instead of doing that in real life (please don&#8217;t), I made a game to help all of us release that energy: Hit Your Manager. </p><p>https://www.hitmymanager.com/</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6Vy-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F729b1906-112b-4edc-8bce-60d57437da98_2048x1182.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6Vy-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F729b1906-112b-4edc-8bce-60d57437da98_2048x1182.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6Vy-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F729b1906-112b-4edc-8bce-60d57437da98_2048x1182.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6Vy-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F729b1906-112b-4edc-8bce-60d57437da98_2048x1182.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6Vy-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F729b1906-112b-4edc-8bce-60d57437da98_2048x1182.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6Vy-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F729b1906-112b-4edc-8bce-60d57437da98_2048x1182.jpeg" width="1456" height="840" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/729b1906-112b-4edc-8bce-60d57437da98_2048x1182.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:840,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;No alternative text description for this image&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;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="No alternative text description for this image" title="No alternative text description for this image" srcset="https://substackcdn.com/image/fetch/$s_!6Vy-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F729b1906-112b-4edc-8bce-60d57437da98_2048x1182.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6Vy-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F729b1906-112b-4edc-8bce-60d57437da98_2048x1182.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6Vy-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F729b1906-112b-4edc-8bce-60d57437da98_2048x1182.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6Vy-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F729b1906-112b-4edc-8bce-60d57437da98_2048x1182.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 aria-hidden="true" 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><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">btw, my manager loves my game. </figcaption></figure></div><p>The story starts with a sad, overworked employee being bullied by a terrible boss. But one day&#8230; he finally decides he&#8217;s done. This little worker is ready to stand up for himself.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0ls-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fabfcc-5394-4b94-8367-3235a3fba63b_2732x1441.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0ls-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fabfcc-5394-4b94-8367-3235a3fba63b_2732x1441.png 424w, https://substackcdn.com/image/fetch/$s_!0ls-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fabfcc-5394-4b94-8367-3235a3fba63b_2732x1441.png 848w, https://substackcdn.com/image/fetch/$s_!0ls-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fabfcc-5394-4b94-8367-3235a3fba63b_2732x1441.png 1272w, https://substackcdn.com/image/fetch/$s_!0ls-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fabfcc-5394-4b94-8367-3235a3fba63b_2732x1441.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0ls-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fabfcc-5394-4b94-8367-3235a3fba63b_2732x1441.png" width="1456" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/96fabfcc-5394-4b94-8367-3235a3fba63b_2732x1441.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3524715,&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;:false,&quot;internalRedirect&quot;:&quot;https://learnlearnlearn.substack.com/i/181170280?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fabfcc-5394-4b94-8367-3235a3fba63b_2732x1441.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_!0ls-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fabfcc-5394-4b94-8367-3235a3fba63b_2732x1441.png 424w, https://substackcdn.com/image/fetch/$s_!0ls-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fabfcc-5394-4b94-8367-3235a3fba63b_2732x1441.png 848w, https://substackcdn.com/image/fetch/$s_!0ls-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fabfcc-5394-4b94-8367-3235a3fba63b_2732x1441.png 1272w, https://substackcdn.com/image/fetch/$s_!0ls-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fabfcc-5394-4b94-8367-3235a3fba63b_2732x1441.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 aria-hidden="true" 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><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>This is the first time I fully poured my heart into making a game, and wow &#8212; it took me <em>hella</em> time. Here are some things I learned along the way, especially about using AI to design.</p><h2>1. AI can create something impressive fast &#8212; but consistency is a beast</h2><p>AI is great at generating those eye-catching first drafts. But getting consistent characters, consistent styles, consistent sprites? Not easy. Not even close.<br>It kept giving me designs that didn&#8217;t match the theme, or characters that mutated every few frames. I spent <em>so</em> much time fixing weird eyes, weird faces, and weird randomness.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!e-dL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01e5ec9e-1d8d-40a9-b3be-b0a4b47ff607_1432x1126.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!e-dL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01e5ec9e-1d8d-40a9-b3be-b0a4b47ff607_1432x1126.png 424w, https://substackcdn.com/image/fetch/$s_!e-dL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01e5ec9e-1d8d-40a9-b3be-b0a4b47ff607_1432x1126.png 848w, https://substackcdn.com/image/fetch/$s_!e-dL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01e5ec9e-1d8d-40a9-b3be-b0a4b47ff607_1432x1126.png 1272w, https://substackcdn.com/image/fetch/$s_!e-dL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01e5ec9e-1d8d-40a9-b3be-b0a4b47ff607_1432x1126.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!e-dL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01e5ec9e-1d8d-40a9-b3be-b0a4b47ff607_1432x1126.png" width="1432" height="1126" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/01e5ec9e-1d8d-40a9-b3be-b0a4b47ff607_1432x1126.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1126,&quot;width&quot;:1432,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:691734,&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;:false,&quot;internalRedirect&quot;:&quot;https://learnlearnlearn.substack.com/i/181170280?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01e5ec9e-1d8d-40a9-b3be-b0a4b47ff607_1432x1126.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_!e-dL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01e5ec9e-1d8d-40a9-b3be-b0a4b47ff607_1432x1126.png 424w, https://substackcdn.com/image/fetch/$s_!e-dL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01e5ec9e-1d8d-40a9-b3be-b0a4b47ff607_1432x1126.png 848w, https://substackcdn.com/image/fetch/$s_!e-dL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01e5ec9e-1d8d-40a9-b3be-b0a4b47ff607_1432x1126.png 1272w, https://substackcdn.com/image/fetch/$s_!e-dL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01e5ec9e-1d8d-40a9-b3be-b0a4b47ff607_1432x1126.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 aria-hidden="true" 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><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">character design and development process </figcaption></figure></div><h2>2. Prompting is a real skill (and I don&#8217;t speak &#8220;designer&#8221;)</h2><p>My designer friends know all the magic words, &#8220;chip,&#8221; &#8220;composition,&#8221; and a bunch of terms I&#8217;ve never used in my life. They speak the language that helps AI stay consistent and intentional with its design.</p><p>I&#8230; absolutely do not.</p><p>So when I prompt, AI just <em>freestyles</em>. And the freestyle is almost never what I want. Learning to talk to AI like a designer is basically learning a whole new dialect.</p><p>What&#8217;s funny is: in programming, it&#8217;s the opposite. I can fix a bug instantly by talking to AI in engineering language, while my designer friends get stuck because they don&#8217;t know how to &#8220;speak code&#8221; to AI. It made me realize prompting isn&#8217;t universal, it&#8217;s domain-specific.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zdIV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F754b9375-252a-4e4a-9453-748000d1d881_1182x1404.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zdIV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F754b9375-252a-4e4a-9453-748000d1d881_1182x1404.png 424w, https://substackcdn.com/image/fetch/$s_!zdIV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F754b9375-252a-4e4a-9453-748000d1d881_1182x1404.png 848w, https://substackcdn.com/image/fetch/$s_!zdIV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F754b9375-252a-4e4a-9453-748000d1d881_1182x1404.png 1272w, https://substackcdn.com/image/fetch/$s_!zdIV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F754b9375-252a-4e4a-9453-748000d1d881_1182x1404.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zdIV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F754b9375-252a-4e4a-9453-748000d1d881_1182x1404.png" width="1182" height="1404" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/754b9375-252a-4e4a-9453-748000d1d881_1182x1404.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1404,&quot;width&quot;:1182,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:856332,&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://learnlearnlearn.substack.com/i/181170280?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F754b9375-252a-4e4a-9453-748000d1d881_1182x1404.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_!zdIV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F754b9375-252a-4e4a-9453-748000d1d881_1182x1404.png 424w, https://substackcdn.com/image/fetch/$s_!zdIV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F754b9375-252a-4e4a-9453-748000d1d881_1182x1404.png 848w, https://substackcdn.com/image/fetch/$s_!zdIV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F754b9375-252a-4e4a-9453-748000d1d881_1182x1404.png 1272w, https://substackcdn.com/image/fetch/$s_!zdIV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F754b9375-252a-4e4a-9453-748000d1d881_1182x1404.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 aria-hidden="true" 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><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">Left: Old angle design, Right: new angle design (like a watch)</figcaption></figure></div><h2>3. Simple ideas are not simple when you try to make them <em>good</em></h2><p>&#8220;Just make a game where you hit a manager.&#8221; Sounds easy! </p><p>But it&#8217;s quite the opposite. </p><p>Initially, we made the game because we want improve <a href="https://phet.colorado.edu/sims/html/projectile-motion/latest/projectile-motion_en.html">this current physic engine</a> about gravity. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ehzd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5ea0ec6-89dc-494c-b979-839d81ff0e43_3024x1709.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ehzd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5ea0ec6-89dc-494c-b979-839d81ff0e43_3024x1709.png 424w, https://substackcdn.com/image/fetch/$s_!ehzd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5ea0ec6-89dc-494c-b979-839d81ff0e43_3024x1709.png 848w, https://substackcdn.com/image/fetch/$s_!ehzd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5ea0ec6-89dc-494c-b979-839d81ff0e43_3024x1709.png 1272w, https://substackcdn.com/image/fetch/$s_!ehzd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5ea0ec6-89dc-494c-b979-839d81ff0e43_3024x1709.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ehzd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5ea0ec6-89dc-494c-b979-839d81ff0e43_3024x1709.png" width="3024" height="1709" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f5ea0ec6-89dc-494c-b979-839d81ff0e43_3024x1709.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1709,&quot;width&quot;:3024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:920088,&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://learnlearnlearn.substack.com/i/181170280?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8169a0ed-4c59-4e7b-8e68-cecc94ba13cd_3024x1964.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_!ehzd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5ea0ec6-89dc-494c-b979-839d81ff0e43_3024x1709.png 424w, https://substackcdn.com/image/fetch/$s_!ehzd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5ea0ec6-89dc-494c-b979-839d81ff0e43_3024x1709.png 848w, https://substackcdn.com/image/fetch/$s_!ehzd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5ea0ec6-89dc-494c-b979-839d81ff0e43_3024x1709.png 1272w, https://substackcdn.com/image/fetch/$s_!ehzd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5ea0ec6-89dc-494c-b979-839d81ff0e43_3024x1709.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 aria-hidden="true" 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><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&#8217;s complicated and ugly so we want to improve it. </figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!K2ZO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6d8f7ae-3298-4c2c-b0dd-898f0cf4b7f8_1338x778.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!K2ZO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6d8f7ae-3298-4c2c-b0dd-898f0cf4b7f8_1338x778.png 424w, https://substackcdn.com/image/fetch/$s_!K2ZO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6d8f7ae-3298-4c2c-b0dd-898f0cf4b7f8_1338x778.png 848w, https://substackcdn.com/image/fetch/$s_!K2ZO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6d8f7ae-3298-4c2c-b0dd-898f0cf4b7f8_1338x778.png 1272w, https://substackcdn.com/image/fetch/$s_!K2ZO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6d8f7ae-3298-4c2c-b0dd-898f0cf4b7f8_1338x778.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!K2ZO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6d8f7ae-3298-4c2c-b0dd-898f0cf4b7f8_1338x778.png" width="1338" height="778" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d6d8f7ae-3298-4c2c-b0dd-898f0cf4b7f8_1338x778.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:778,&quot;width&quot;:1338,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:713251,&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://learnlearnlearn.substack.com/i/181170280?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6d8f7ae-3298-4c2c-b0dd-898f0cf4b7f8_1338x778.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_!K2ZO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6d8f7ae-3298-4c2c-b0dd-898f0cf4b7f8_1338x778.png 424w, https://substackcdn.com/image/fetch/$s_!K2ZO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6d8f7ae-3298-4c2c-b0dd-898f0cf4b7f8_1338x778.png 848w, https://substackcdn.com/image/fetch/$s_!K2ZO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6d8f7ae-3298-4c2c-b0dd-898f0cf4b7f8_1338x778.png 1272w, https://substackcdn.com/image/fetch/$s_!K2ZO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6d8f7ae-3298-4c2c-b0dd-898f0cf4b7f8_1338x778.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 aria-hidden="true" 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><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">Our early version: too much texts and the explanation is lengthy</figcaption></figure></div><p>We originally wanted people to scan real objects and learn physics by playing with them. It sounded exciting &#8212; scan a cup, toss it in the game, and watch real-world physics come to life.</p><p>But it&#8217;s actually very hard to do it well. Building accurate physics engines takes a long time, and once we finally got gravity &#8220;right,&#8221; the gameplay wasn&#8217;t fun. Objects stayed in the air for so long that everything felt slow and boring. Real physics &#8800; good game design.</p><p>So we pivoted toward a storyline everyone can instantly resonate with: hitting someone. Simple, emotional, universally understood.</p><p>But to actually make this idea work, we had to</p><ul><li><p>build a clear storyline</p></li><li><p>test the mechanics with real users (some found it too easy, others too hard, so I spent forever tuning tiny details),</p></li><li><p>iterate until the gameplay made intuitive sense</p></li></ul><p>And that&#8217;s just the creative side. There&#8217;s also all the invisible work behind the scenes:Most players are on mobile &#8594; so now I have to redesign the entire experience for mobile. API costs are too high &#8594; so I need to rethink the architecture and optimize everything.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UCRn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff99de9cb-223f-4eac-ae28-8aa90d29a52e_1174x1288.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UCRn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff99de9cb-223f-4eac-ae28-8aa90d29a52e_1174x1288.png 424w, https://substackcdn.com/image/fetch/$s_!UCRn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff99de9cb-223f-4eac-ae28-8aa90d29a52e_1174x1288.png 848w, https://substackcdn.com/image/fetch/$s_!UCRn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff99de9cb-223f-4eac-ae28-8aa90d29a52e_1174x1288.png 1272w, https://substackcdn.com/image/fetch/$s_!UCRn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff99de9cb-223f-4eac-ae28-8aa90d29a52e_1174x1288.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UCRn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff99de9cb-223f-4eac-ae28-8aa90d29a52e_1174x1288.png" width="458" height="502.47359454855194" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f99de9cb-223f-4eac-ae28-8aa90d29a52e_1174x1288.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1288,&quot;width&quot;:1174,&quot;resizeWidth&quot;:458,&quot;bytes&quot;:601335,&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://learnlearnlearn.substack.com/i/181170280?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff99de9cb-223f-4eac-ae28-8aa90d29a52e_1174x1288.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_!UCRn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff99de9cb-223f-4eac-ae28-8aa90d29a52e_1174x1288.png 424w, https://substackcdn.com/image/fetch/$s_!UCRn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff99de9cb-223f-4eac-ae28-8aa90d29a52e_1174x1288.png 848w, https://substackcdn.com/image/fetch/$s_!UCRn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff99de9cb-223f-4eac-ae28-8aa90d29a52e_1174x1288.png 1272w, https://substackcdn.com/image/fetch/$s_!UCRn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff99de9cb-223f-4eac-ae28-8aa90d29a52e_1174x1288.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 aria-hidden="true" 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><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">51% of users open on mobile, so I have no choice but to add it too :/</figcaption></figure></div><p>A &#8220;simple idea&#8221; becomes complex the moment you try to make it <em>good</em>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!P1_6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3acd89d7-513b-443b-a891-67e3018c1024_1222x784.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!P1_6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3acd89d7-513b-443b-a891-67e3018c1024_1222x784.png 424w, https://substackcdn.com/image/fetch/$s_!P1_6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3acd89d7-513b-443b-a891-67e3018c1024_1222x784.png 848w, https://substackcdn.com/image/fetch/$s_!P1_6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3acd89d7-513b-443b-a891-67e3018c1024_1222x784.png 1272w, https://substackcdn.com/image/fetch/$s_!P1_6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3acd89d7-513b-443b-a891-67e3018c1024_1222x784.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!P1_6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3acd89d7-513b-443b-a891-67e3018c1024_1222x784.png" width="1222" height="784" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3acd89d7-513b-443b-a891-67e3018c1024_1222x784.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:784,&quot;width&quot;:1222,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1055590,&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://learnlearnlearn.substack.com/i/181170280?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3acd89d7-513b-443b-a891-67e3018c1024_1222x784.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_!P1_6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3acd89d7-513b-443b-a891-67e3018c1024_1222x784.png 424w, https://substackcdn.com/image/fetch/$s_!P1_6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3acd89d7-513b-443b-a891-67e3018c1024_1222x784.png 848w, https://substackcdn.com/image/fetch/$s_!P1_6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3acd89d7-513b-443b-a891-67e3018c1024_1222x784.png 1272w, https://substackcdn.com/image/fetch/$s_!P1_6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3acd89d7-513b-443b-a891-67e3018c1024_1222x784.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 aria-hidden="true" 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><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">different kinds of cover designs inspired by other video games</figcaption></figure></div><h2>4. AI shines when you use it as a debugging with imaginations</h2><p>One big problem I had was detecting collision using x/y positions. I was confused for hours. Then I asked AI to visualize the collision area with a green box. Instantly the issue became obvious. Sometimes, AI isn&#8217;t a good designer, but it&#8217;s an amazing assistant when you need clarity.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JHyR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad44d728-d924-4234-b150-90ee5c2ef48e_1172x1102.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JHyR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad44d728-d924-4234-b150-90ee5c2ef48e_1172x1102.png 424w, https://substackcdn.com/image/fetch/$s_!JHyR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad44d728-d924-4234-b150-90ee5c2ef48e_1172x1102.png 848w, https://substackcdn.com/image/fetch/$s_!JHyR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad44d728-d924-4234-b150-90ee5c2ef48e_1172x1102.png 1272w, https://substackcdn.com/image/fetch/$s_!JHyR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad44d728-d924-4234-b150-90ee5c2ef48e_1172x1102.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JHyR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad44d728-d924-4234-b150-90ee5c2ef48e_1172x1102.png" width="518" height="487.061433447099" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ad44d728-d924-4234-b150-90ee5c2ef48e_1172x1102.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1102,&quot;width&quot;:1172,&quot;resizeWidth&quot;:518,&quot;bytes&quot;:529402,&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://learnlearnlearn.substack.com/i/181170280?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad44d728-d924-4234-b150-90ee5c2ef48e_1172x1102.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_!JHyR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad44d728-d924-4234-b150-90ee5c2ef48e_1172x1102.png 424w, https://substackcdn.com/image/fetch/$s_!JHyR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad44d728-d924-4234-b150-90ee5c2ef48e_1172x1102.png 848w, https://substackcdn.com/image/fetch/$s_!JHyR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad44d728-d924-4234-b150-90ee5c2ef48e_1172x1102.png 1272w, https://substackcdn.com/image/fetch/$s_!JHyR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad44d728-d924-4234-b150-90ee5c2ef48e_1172x1102.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 aria-hidden="true" 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><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 ask ai add a box for the collision area I was setting, so I don&#8217;t have to read that crazy (x,y) with decimals</figcaption></figure></div><h2>5. Storytelling still matters in game design</h2><p>Good gameplay needs to feel connected to the narrative. Even a simple arcade game needs progression that makes sense.</p><p>For example:</p><ul><li><p><strong>Level 1</strong>: the manager is just standing</p></li><li><p><strong>Level 2</strong>: the manager starts walking around</p></li></ul><p>The story advances, and the difficulty increases naturally. Designing these transitions required more creativity than I expected.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0Tbt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff62cac46-92a2-47d1-953e-6fd9fb96c7a7_1170x888.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0Tbt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff62cac46-92a2-47d1-953e-6fd9fb96c7a7_1170x888.png 424w, https://substackcdn.com/image/fetch/$s_!0Tbt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff62cac46-92a2-47d1-953e-6fd9fb96c7a7_1170x888.png 848w, https://substackcdn.com/image/fetch/$s_!0Tbt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff62cac46-92a2-47d1-953e-6fd9fb96c7a7_1170x888.png 1272w, https://substackcdn.com/image/fetch/$s_!0Tbt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff62cac46-92a2-47d1-953e-6fd9fb96c7a7_1170x888.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0Tbt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff62cac46-92a2-47d1-953e-6fd9fb96c7a7_1170x888.png" width="602" height="456.9025641025641" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f62cac46-92a2-47d1-953e-6fd9fb96c7a7_1170x888.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:888,&quot;width&quot;:1170,&quot;resizeWidth&quot;:602,&quot;bytes&quot;:615073,&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://learnlearnlearn.substack.com/i/181170280?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff62cac46-92a2-47d1-953e-6fd9fb96c7a7_1170x888.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_!0Tbt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff62cac46-92a2-47d1-953e-6fd9fb96c7a7_1170x888.png 424w, https://substackcdn.com/image/fetch/$s_!0Tbt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff62cac46-92a2-47d1-953e-6fd9fb96c7a7_1170x888.png 848w, https://substackcdn.com/image/fetch/$s_!0Tbt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff62cac46-92a2-47d1-953e-6fd9fb96c7a7_1170x888.png 1272w, https://substackcdn.com/image/fetch/$s_!0Tbt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff62cac46-92a2-47d1-953e-6fd9fb96c7a7_1170x888.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 aria-hidden="true" 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><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 will be the minimal engineering work to level up while creating a cohesive story?</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!k_c0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb5bf016-d027-46a9-bebc-e32514168c26_2020x1702.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!k_c0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb5bf016-d027-46a9-bebc-e32514168c26_2020x1702.png 424w, https://substackcdn.com/image/fetch/$s_!k_c0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb5bf016-d027-46a9-bebc-e32514168c26_2020x1702.png 848w, https://substackcdn.com/image/fetch/$s_!k_c0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb5bf016-d027-46a9-bebc-e32514168c26_2020x1702.png 1272w, https://substackcdn.com/image/fetch/$s_!k_c0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb5bf016-d027-46a9-bebc-e32514168c26_2020x1702.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!k_c0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb5bf016-d027-46a9-bebc-e32514168c26_2020x1702.png" width="1456" height="1227" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cb5bf016-d027-46a9-bebc-e32514168c26_2020x1702.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1227,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1672734,&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://learnlearnlearn.substack.com/i/181170280?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb5bf016-d027-46a9-bebc-e32514168c26_2020x1702.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_!k_c0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb5bf016-d027-46a9-bebc-e32514168c26_2020x1702.png 424w, https://substackcdn.com/image/fetch/$s_!k_c0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb5bf016-d027-46a9-bebc-e32514168c26_2020x1702.png 848w, https://substackcdn.com/image/fetch/$s_!k_c0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb5bf016-d027-46a9-bebc-e32514168c26_2020x1702.png 1272w, https://substackcdn.com/image/fetch/$s_!k_c0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb5bf016-d027-46a9-bebc-e32514168c26_2020x1702.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 aria-hidden="true" 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><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 video edit all the storylines </figcaption></figure></div><h2>6. Boring ideas aren&#8217;t always boring</h2><p>We originally planned to make a very basic throwing game. In the first hour of the hackathon, we were already bored of it. But my designer friend refused to give up. We kept pushing, refining, adjusting, and the game slowly transformed into what it is today.</p><p>That process taught me how to collaborate with both AI and human designers. People love to say you can just &#8220;vibe code&#8221; your way through things, but as a programmer I learned the opposite: polishing a game takes way more time, thought, and obsessiveness than I ever imagined.</p><div><hr></div><p>I started this project because I interviewed with Brilliant and learned interactive programming with p5.js for the interview challenge. I didn&#8217;t get the job, but that interview somehow grew into something much bigger.</p><p>Now I&#8217;m excited to take these lessons into future projects, maybe even building more interactive learning experiences like the ones Brilliant creates.</p><p>Who knows? This might just be the start of something cool.</p>]]></content:encoded></item><item><title><![CDATA[Learn as if you are a student taking exams]]></title><description><![CDATA[On engineering]]></description><link>https://learnlearnlearn.substack.com/p/learn-as-if-you-are-a-student-taking</link><guid isPermaLink="false">https://learnlearnlearn.substack.com/p/learn-as-if-you-are-a-student-taking</guid><dc:creator><![CDATA[Esther]]></dc:creator><pubDate>Mon, 15 Jul 2024 05:12:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!n73m!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fcfe87c-5be3-41e1-a363-6615662c3bfb_1178x1198.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When we grow up as an adults, most of the time, we lost our learning attitude. I&#8217;m not saying that we don&#8217;t work hard or learn diligently as a student, but I did lost that precision and quality I used to have when preparing for exams. </p><p>What if, I imagine myself learning like a students preparing for an exam again? </p><ul><li><p>Before: I self study ML in my free time, but I often want to stop when things get hard, or I ignored what I didn&#8217;t understand. </p></li><li><p>With the new attitude: I don&#8217;t just take notes for important concepts. I take complete notes to the level that I can read it without supporting documents (aka I also need to handwrite codes). Yet, slowing things done greatly improve my understanding and attention to important details. </p></li></ul><div class="image-gallery-embed" data-attrs="{&quot;gallery&quot;:{&quot;images&quot;:[{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4fcfe87c-5be3-41e1-a363-6615662c3bfb_1178x1198.png&quot;},{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d0554c70-9cef-4c5a-9229-801e1fa43f21_1092x1136.png&quot;}],&quot;caption&quot;:&quot;Handwrite pytorch code and understanding all functions&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/cdfd7afc-b820-4e47-969a-80e0083ec3cf_1456x720.png&quot;}},&quot;isEditorNode&quot;:true}"></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RUFt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F799de529-e615-4bba-9aa3-c1d22b2bd772_4032x3024.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RUFt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F799de529-e615-4bba-9aa3-c1d22b2bd772_4032x3024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!RUFt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F799de529-e615-4bba-9aa3-c1d22b2bd772_4032x3024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!RUFt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F799de529-e615-4bba-9aa3-c1d22b2bd772_4032x3024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!RUFt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F799de529-e615-4bba-9aa3-c1d22b2bd772_4032x3024.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RUFt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F799de529-e615-4bba-9aa3-c1d22b2bd772_4032x3024.jpeg" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/799de529-e615-4bba-9aa3-c1d22b2bd772_4032x3024.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;:3609741,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RUFt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F799de529-e615-4bba-9aa3-c1d22b2bd772_4032x3024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!RUFt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F799de529-e615-4bba-9aa3-c1d22b2bd772_4032x3024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!RUFt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F799de529-e615-4bba-9aa3-c1d22b2bd772_4032x3024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!RUFt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F799de529-e615-4bba-9aa3-c1d22b2bd772_4032x3024.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 aria-hidden="true" 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><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">Youtube video + graph to notes</figcaption></figure></div><p>When I&#8217;m bored doing similar work, what if I imagine I&#8217;m a student practicing problem set? </p><ul><li><p>Before: I get annoyed that there is bug here and bug there. </p></li><li><p>Now: I wrote now all the problems and time it. </p><ul><li><p>Problem set 1: The bar doesn&#8217;t show&#8230;.. Problem solving time: x min</p></li><li><p>Problem set 2: &#8230;</p></li></ul></li></ul><p>It greatly reduced my personal boredom, but also allow me to monitor my progress. </p><p>As a engineer, of course, we rarely do handwritten notes, and we think build build build will help us improve. Yet, can we do better by applying different learning methods? </p><div><hr></div><p>Inspired by my law student friend&#8217;s bar test studying style, and another friend who used flashcard app to study leetocde. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!v0ih!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e11f797-f3a2-4303-8e3f-5b06182f47d0_2184x1544.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!v0ih!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e11f797-f3a2-4303-8e3f-5b06182f47d0_2184x1544.png 424w, https://substackcdn.com/image/fetch/$s_!v0ih!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e11f797-f3a2-4303-8e3f-5b06182f47d0_2184x1544.png 848w, https://substackcdn.com/image/fetch/$s_!v0ih!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e11f797-f3a2-4303-8e3f-5b06182f47d0_2184x1544.png 1272w, https://substackcdn.com/image/fetch/$s_!v0ih!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e11f797-f3a2-4303-8e3f-5b06182f47d0_2184x1544.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!v0ih!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e11f797-f3a2-4303-8e3f-5b06182f47d0_2184x1544.png" width="1456" height="1029" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0e11f797-f3a2-4303-8e3f-5b06182f47d0_2184x1544.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1029,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;No description available.&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="No description available." title="No description available." srcset="https://substackcdn.com/image/fetch/$s_!v0ih!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e11f797-f3a2-4303-8e3f-5b06182f47d0_2184x1544.png 424w, https://substackcdn.com/image/fetch/$s_!v0ih!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e11f797-f3a2-4303-8e3f-5b06182f47d0_2184x1544.png 848w, https://substackcdn.com/image/fetch/$s_!v0ih!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e11f797-f3a2-4303-8e3f-5b06182f47d0_2184x1544.png 1272w, https://substackcdn.com/image/fetch/$s_!v0ih!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e11f797-f3a2-4303-8e3f-5b06182f47d0_2184x1544.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 aria-hidden="true" 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><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">Using flashcard to study leetcode</figcaption></figure></div>]]></content:encoded></item><item><title><![CDATA[How to build tokenizer from scratch - Part 1 ]]></title><description><![CDATA[Interactive play and learn]]></description><link>https://learnlearnlearn.substack.com/p/how-to-build-tokenizer-from-scratch</link><guid isPermaLink="false">https://learnlearnlearn.substack.com/p/how-to-build-tokenizer-from-scratch</guid><dc:creator><![CDATA[Esther]]></dc:creator><pubDate>Thu, 04 Apr 2024 05:19:39 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!A-jP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9493a89c-09d6-4943-91e3-9781a7b14eb8_1400x709.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Esther began learning how to build the GPT tokenizer with Andrej Karpathy. As she was learning, she realized, &#8220;OMG! The content is AMAZING! But why is it so&#8230; inhuman?&#8221; (YouTube content greater than 30min = inhuman). The video is a scary 2 hours. Most of the time, people don&#8217;t even dare to start. Can we make the learning less scary and more fun?</p><p>So she created this blog so people can learn through playing!</p><ul><li><p><strong>Blog post: </strong><a href="https://byte-pairing.vercel.app/">https://byte-pairing.vercel.app/</a></p></li><li><p>Github: <a href="https://github.com/esther119/build-tokenization-from-scratch">https://github.com/esther119/build-tokenization-from-scratch</a></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_!A-jP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9493a89c-09d6-4943-91e3-9781a7b14eb8_1400x709.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!A-jP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9493a89c-09d6-4943-91e3-9781a7b14eb8_1400x709.png 424w, https://substackcdn.com/image/fetch/$s_!A-jP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9493a89c-09d6-4943-91e3-9781a7b14eb8_1400x709.png 848w, https://substackcdn.com/image/fetch/$s_!A-jP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9493a89c-09d6-4943-91e3-9781a7b14eb8_1400x709.png 1272w, https://substackcdn.com/image/fetch/$s_!A-jP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9493a89c-09d6-4943-91e3-9781a7b14eb8_1400x709.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!A-jP!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9493a89c-09d6-4943-91e3-9781a7b14eb8_1400x709.png" width="1000" height="506.42857142857144" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9493a89c-09d6-4943-91e3-9781a7b14eb8_1400x709.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:709,&quot;width&quot;:1400,&quot;resizeWidth&quot;:1000,&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;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-large" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!A-jP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9493a89c-09d6-4943-91e3-9781a7b14eb8_1400x709.png 424w, https://substackcdn.com/image/fetch/$s_!A-jP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9493a89c-09d6-4943-91e3-9781a7b14eb8_1400x709.png 848w, https://substackcdn.com/image/fetch/$s_!A-jP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9493a89c-09d6-4943-91e3-9781a7b14eb8_1400x709.png 1272w, https://substackcdn.com/image/fetch/$s_!A-jP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9493a89c-09d6-4943-91e3-9781a7b14eb8_1400x709.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 aria-hidden="true" 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><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>Since Medium doesn&#8217;t allow interactive elements, I put my blog post teaser here. I&#8217;m looking for more animation and interactive ideas to improve this blog post!</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;ccf03a87-1bd4-462c-8301-08da70745285&quot;,&quot;duration&quot;:null}"></div><p></p>]]></content:encoded></item><item><title><![CDATA[Why learning history helps you learn coding ]]></title><description><![CDATA[Learning from The Dream Machine]]></description><link>https://learnlearnlearn.substack.com/p/why-learning-history-helps-you-to</link><guid isPermaLink="false">https://learnlearnlearn.substack.com/p/why-learning-history-helps-you-to</guid><dc:creator><![CDATA[Esther]]></dc:creator><pubDate>Thu, 07 Mar 2024 04:25:58 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc660a33a-0e30-4d89-9ebc-82314685946c_2160x1620.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>We coded coded and coded to learn to engineer. Yet, without knowing the past, we only get a screenshot of the presence and lack of vision for the future. After reading The Dream Machine, I&#8217;m going to use some examples to explain why the past development of computer science concepts is closely tied to the present software architecture. I selected several concepts that are closely related to the development of modern machines. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!O0a3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F656fb0d0-b5ad-419e-93e9-c1ce0a9f5507_2296x1662.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!O0a3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F656fb0d0-b5ad-419e-93e9-c1ce0a9f5507_2296x1662.png 424w, https://substackcdn.com/image/fetch/$s_!O0a3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F656fb0d0-b5ad-419e-93e9-c1ce0a9f5507_2296x1662.png 848w, https://substackcdn.com/image/fetch/$s_!O0a3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F656fb0d0-b5ad-419e-93e9-c1ce0a9f5507_2296x1662.png 1272w, https://substackcdn.com/image/fetch/$s_!O0a3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F656fb0d0-b5ad-419e-93e9-c1ce0a9f5507_2296x1662.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!O0a3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F656fb0d0-b5ad-419e-93e9-c1ce0a9f5507_2296x1662.png" width="1456" height="1054" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/656fb0d0-b5ad-419e-93e9-c1ce0a9f5507_2296x1662.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1054,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:695024,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!O0a3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F656fb0d0-b5ad-419e-93e9-c1ce0a9f5507_2296x1662.png 424w, https://substackcdn.com/image/fetch/$s_!O0a3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F656fb0d0-b5ad-419e-93e9-c1ce0a9f5507_2296x1662.png 848w, https://substackcdn.com/image/fetch/$s_!O0a3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F656fb0d0-b5ad-419e-93e9-c1ce0a9f5507_2296x1662.png 1272w, https://substackcdn.com/image/fetch/$s_!O0a3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F656fb0d0-b5ad-419e-93e9-c1ce0a9f5507_2296x1662.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 aria-hidden="true" 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><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><h2>Where does even the idea of a computer come from? Imagine a mathematician with a pen and paper. </h2><p>There are already some basic raw forms of computers, such as punch cards, but most of them are perceived as an engine with specific usage. The initial idea of the computer is from Turing&#8217;s imagination. He imagined a computer is like a mathematician with pen and paper. The hands, eyes, and pencils are replaced as a scanning device that can move forward on the tape, representing the read and write of the machine. And an internal search pad to record &#8220;the state&#8221; (The current intermediate steps of computation) of a machine. </p><blockquote><p>Let&#8217;s replace the two-dimensional sheet of paper with an infinitely long tape divided into squares, like a roll of postage stamps. Each square will either be blank or have a symbol written on it. (The symbols could be anything&#8212;numbers, letters, colors, pictures, whatever&#8212;so long as there was just one per square.)</p><p>Next, said Turing, <strong>let&#8217;s replace the mathematician&#8217;s hand, eye, and pencil with a scanning device that can move backward and forward along the tape one square at a time, reading and writing symbols as it goes. (A modern analogy would be the read/write head of a tape recorder or a VCR.) Let&#8217;s also replace the mathematician&#8217;s &#8220;state of mind,&#8221; his minute-to-minute sense of what&#8217;s going on in the calculation, with a kind of internal scratch pad that records the current &#8220;state&#8221; of the machine.</strong> (Example: &#8220;I am currently in the process of carrying a 4 to the next column of addition.&#8221;) Each different state can also be labeled by a symbol.</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_!EbE5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc660a33a-0e30-4d89-9ebc-82314685946c_2160x1620.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EbE5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc660a33a-0e30-4d89-9ebc-82314685946c_2160x1620.png 424w, https://substackcdn.com/image/fetch/$s_!EbE5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc660a33a-0e30-4d89-9ebc-82314685946c_2160x1620.png 848w, https://substackcdn.com/image/fetch/$s_!EbE5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc660a33a-0e30-4d89-9ebc-82314685946c_2160x1620.png 1272w, https://substackcdn.com/image/fetch/$s_!EbE5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc660a33a-0e30-4d89-9ebc-82314685946c_2160x1620.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EbE5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc660a33a-0e30-4d89-9ebc-82314685946c_2160x1620.png" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c660a33a-0e30-4d89-9ebc-82314685946c_2160x1620.png&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;:269210,&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;: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_!EbE5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc660a33a-0e30-4d89-9ebc-82314685946c_2160x1620.png 424w, https://substackcdn.com/image/fetch/$s_!EbE5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc660a33a-0e30-4d89-9ebc-82314685946c_2160x1620.png 848w, https://substackcdn.com/image/fetch/$s_!EbE5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc660a33a-0e30-4d89-9ebc-82314685946c_2160x1620.png 1272w, https://substackcdn.com/image/fetch/$s_!EbE5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc660a33a-0e30-4d89-9ebc-82314685946c_2160x1620.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 aria-hidden="true" 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><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><h2>How does a machine know what operation to do next? Inspiration of cellular automata.</h2><p>Before computers were programmable, they were operator-supervised, meaning that machines could only perform based on the instruction of the operator. They do not know the state they are in, so they cannot make their own decision. For instance, the decision is based on some conditions &#8220;If variable X = 0, then do operation Y, else do operation Z.&#8221;</p><p>The start of understanding the states of machines is the famous automata. If you know cellular automata, you will probably say &#8220;Ah ha!&#8221; When we learn it in our CS class, we are given some initial rules, such as: </p><blockquote><p>At any given time and in any given cell, the automata could be in only one of a finite number of states, which could be thought of as red, white, blue, green, and yellow, or 1, 2, 3, and 4, or living and dead, or whatever. At each tick of the clock, the automata would make a transition to a new state, which would be determined by its own current state and that of its neighbors. </p></blockquote><p>If you have learned this in school, you will probably know that the teacher will ask you the formula of state transition, the equilibrium, to the evolution of states. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZclM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33efc056-1f7a-4969-92f4-839681944369_1792x1340.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZclM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33efc056-1f7a-4969-92f4-839681944369_1792x1340.png 424w, https://substackcdn.com/image/fetch/$s_!ZclM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33efc056-1f7a-4969-92f4-839681944369_1792x1340.png 848w, https://substackcdn.com/image/fetch/$s_!ZclM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33efc056-1f7a-4969-92f4-839681944369_1792x1340.png 1272w, https://substackcdn.com/image/fetch/$s_!ZclM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33efc056-1f7a-4969-92f4-839681944369_1792x1340.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZclM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33efc056-1f7a-4969-92f4-839681944369_1792x1340.png" width="1456" height="1089" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/33efc056-1f7a-4969-92f4-839681944369_1792x1340.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1089,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:558867,&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_!ZclM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33efc056-1f7a-4969-92f4-839681944369_1792x1340.png 424w, https://substackcdn.com/image/fetch/$s_!ZclM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33efc056-1f7a-4969-92f4-839681944369_1792x1340.png 848w, https://substackcdn.com/image/fetch/$s_!ZclM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33efc056-1f7a-4969-92f4-839681944369_1792x1340.png 1272w, https://substackcdn.com/image/fetch/$s_!ZclM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33efc056-1f7a-4969-92f4-839681944369_1792x1340.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 aria-hidden="true" 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><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 simulation class note: different initial densities and radius (the range of neighbors that will influence the cell) will create different output</figcaption></figure></div><p>Things start to click all of a sudden. </p><h2>How does a computer become a general-purpose tool? Von Neuman&#8217;s &#8220;First Draft&#8221;: we fetch execute and return. </h2><p>To describe why computers are general purpose today, I will need to use an analogy to describe software and hardware. You can imagine software is music and hardware is the instrument. You can play all kinds of music on a piano, is like you can use a computer for anything from writing a novel to flying jets. On the other hand, the same music can be played on different instruments like tubas and pipe organs. It is like you can run Google Sheets on both Windows and Mac.</p><p>Before Turing and Von Neuman&#8217;s &#8220;First Draft,&#8221; we think that a computer is just a fancier adding machine. This is how Von Neuman imagined the computer, </p><blockquote><p>Finally, said von Neumann, the central control unit would be the heart of the computer, the part that decided what to do next. (Today this is usually known as the central processing unit, or CPU.) Its decisions would in turn be governed by a program stored in the memory unit.</p><p>How was the central control unit supposed to go about executing those programs? Von Neumann had quite a bit of leeway in his answer, thanks to Alan Turing. As he was undoubtedly well aware, his abstract architecture was logically equivalent to a Turing machine, with the memory, input, and output units collectively corresponding to the tape, and the central arithmetic and central control units collectively corresponding to the read/write head.</p></blockquote><p>The fundamental basis of how a machine operates is: fetch execute and return. It feels similar to the language we use in javascript, we fetch the data, execute some functions, and return the results. This is the underlying of how machines operate our codes. </p><blockquote><p>He envisioned the central controller as going through an endless cycle: <strong>fetch the next chunk of instructions or data from the memory unit, execute the appropriate operation, and then send the results back for storage in memory. Fetch, execute, return. Fetch, execute, return.</strong></p></blockquote><p>Before this, we can either ask a machine to do one set of operations or use an operator to make modifications. Back at this time, it&#8217;s not good enough because it goes through everything step by step. It&#8217;s like trying to make a dinner salad the hard way: go out and buy the lettuce, bring it home, and chop it up. Go out and buy the carrots, bring them home, and chop them up. But at least, they can perform many different kinds of things based on the instruction in the memory address. </p><h2>Where does RAM come from? To speed up the computation by not waiting for the correct address. </h2><p>I always find it weird to call RAM (random access memory). Why does it need to be random? Why is RAM faster than hard disk? </p><p>Since now you understand that the machine&#8217;s operation process is fetch, execute, and return, they need to know the memory address the fetch the next instruction they need to do, but that&#8217;s slow. </p><blockquote><p>Among many other things, the 1946 report pointed out how much more efficient a computer would be if it could get access to each memory address at "random"-that is, instantaneously, without having to wait until the correct address came around on a circulating tape or a mercury delay line. Naturally, such a storage scheme became known as Random-Access Memory, or RAM. (Of course, the report also concluded that the memory unit should store the data as charged spots on the face of a cathode-ray tube &#8212;a cutting-edge technology in 1946, but now so thoroughly obsolete that almost no one remembers it.)</p></blockquote><p>Hence, the term &#8220;random access&#8221; means that the CPU can access any memory cell directly, without having to go through all the preceding cells. This contrasts with sequential access, where data must be accessed in a predetermined order.</p><h2>Where does a function come from? Subroutine in Lisp, a reusable and modular function.</h2><p>We already have some idea of subroutines in Von Newman&#8217;s first draft, but the real application of it is from Lisp, a programming language from the 1950s by John McCarthy. </p><blockquote><p>The use of software building blocks was hardly a new concept even then, of course. Starting in the 1940s, long before Lisp, or Fortran, or any of the other languages appeared, <strong>programmers had learned that they could save themselves a lot of time and confusion by breaking up programs into subroutines-reusable, self-contained procedures that could each do one specific task</strong>. One subroutine might calculate the cube root of any given number, for instance, while another might sort any given list of names alphabetically. These procedures could in turn be broken up into still simpler subroutines, and so on, all the way down to the level of individual commands, if need be. Indeed, as programmers tackled tougher and tougher challenges in the 1950s &#8212; the SAGE project, for example-this kind of decomposition had become increasingly critical.* Even today, under the rubric of "structured programming."</p></blockquote><p>Before the idea of a subroutine, our code is just a big chunk of things together. Super hard to debug when it gets bigger. But in Lisp, the programmer can finally start with some basic functions and create their own. It makes so much sense why everyone is saying that writing modular code is good. Logically, it makes sense, but it&#8217;s indeed an evolution of thoughts. </p><h2>Where does the idea of multitasking come from? Time-sharing, the computer switches tasks fast enough without humans noticing it. </h2><p>Project Mac from the 1960s is the first machine that allows time sharing. Time-sharing is a computing technique that allows multiple users to share a single computer system simultaneously. Before time sharing, we are only using batch processing. In batch processing systems, users submit their jobs or programs to a computer operator, who then compiles and executes them one after another sequentially. Is there a better way to allocate computer resources? </p><blockquote><p>So, McCarthy wondered, why not let the CPU skip from one user's memory area to the next user's in sequence, executing a few steps of each task as it went? <strong>If that cycle was repeated rapidly enough, the users would never notice the gaps (think of a kindergarten teacher holding simultaneous conversations with a dozen insistent five-year-olds). Each of them would perceive his or her program to be executing continuously.</strong> And more to the point, each would be able to create and modify and execute programs interactively, as if he or she had sole control of the computer. Since the users would be sharing the computer's processing time as well as its storage space, McCarthy took to calling his scheme time-sharing.</p></blockquote><p>One of the most fascinating things about time sharing is not only sharing computer resources, it also allows information sharing because they are accessing the same system. Hence, the system became the repository of the knowledge of the community, and people started to discuss whether should we have passwords or we should just share all the resources together. </p><h2>Where do TCP/IP come from? The invention of a network.</h2><p>ARPA community is trying to build a network so different computers can talk to each other. They are facing some challenges. The two main challenges are: </p><ol><li><p>How to send the information from one computer to another? </p></li><li><p>How can computers know where to send the information? </p></li></ol><p>To send the information, first, they need to break the information chunks into smaller chunks, which is called a packet. </p><blockquote><p>A second conclusion was a bit more esoteric, said Roberts, but less of a surprise: <strong>digital messages could not be sent through the network as a continuous stream of bits. Instead, they would have to be broken into segments, with some fixed number of bits in each one</strong> (think of a long letter written on a series of postcards).</p><p>The farther a message traveled, the greater the chances that one or more bits would be garbled by static and distortion on the line. And in the digital world, one erroneous bit might easily spell disaster. Thus the digital postcards, or "packets," in modern parlance.</p></blockquote><p>Second, they need the computer to read the digital address (destination address, return address&#8230;) on the packet, so they know where to send it, which is the routing. </p><blockquote><p>the clerks in each telegraph office had to write down messages as they arrived, then key them in again to send them farther down the line.) The idea was to keep the complex, highway-map structure of the network, with lines running every which way and an ARPA site sitting at each intersection. But the individual sites would share routing responsibilities equally. <strong>That is, the computer at each site would first read the digital address on each packet as it came in. (The packets would actually carry the digital equivalent of an entire bill of lading, with destination address, return address, error-checking codes, message identifiers, and so forth.)</strong></p></blockquote><p>That&#8217;s good, but what if there are many packets being sent? It will become a congestion! So they come up with the idea of having small computers as designated points for entry and exit of packets like limited access highways. </p><blockquote><p>Clark remembers saying. "So my idea was simply to define the network to be something self-contained." <strong>That is, make the ARPA network into the digital equivalent of a limited-access highway, with an "interchange" located just outside each town.</strong> Each of these digital interchanges would actually be a small computer, of course, separate from the main computer. But like its asphalt counterpart, the digital interchange would handle all the routing chores. It would provide an on-ramp to the network for new packets coming out of the main computer; an off-ramp for incoming packets addressed to the main computer; and traffic directions for packets passing through on their way to other computers.</p></blockquote><p>So now, they need to have small computers to handle the routings. They are called independent routing computers. </p><blockquote><p>Now, said Clark, the beauty of this scheme was that it would simplify life for everybody. ARPA could take responsibility for designing and implementing the network proper-meaning the information highways and the digital interchanges-without having to worry that some contractor somewhere would mess up his site's programming and thereby bollix up the whole system. And the contractors, for their part, could focus on one comparatively <strong>simple task-establishing a link from their central computer to the routing computer&#8212; without having to worry about all the ins and outs of all the other computers on the network</strong>. So, said Clark, that was the idea: small, independent routing computers.</p></blockquote><p>We just learned the history of network protocols. That&#8217;s why we talk about IP (internet protocol) packets and TCP (Transmission Control Protocol). The IP address is like the phone number assigned to your smartphone. TCP is all the technology that makes the phone ring, and that enables you to talk to someone on another phone.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8RyC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab19c13b-5e49-4bbf-a861-f2965982e5d8_964x946.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8RyC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab19c13b-5e49-4bbf-a861-f2965982e5d8_964x946.png 424w, https://substackcdn.com/image/fetch/$s_!8RyC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab19c13b-5e49-4bbf-a861-f2965982e5d8_964x946.png 848w, https://substackcdn.com/image/fetch/$s_!8RyC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab19c13b-5e49-4bbf-a861-f2965982e5d8_964x946.png 1272w, https://substackcdn.com/image/fetch/$s_!8RyC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab19c13b-5e49-4bbf-a861-f2965982e5d8_964x946.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8RyC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab19c13b-5e49-4bbf-a861-f2965982e5d8_964x946.png" width="964" height="946" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ab19c13b-5e49-4bbf-a861-f2965982e5d8_964x946.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:946,&quot;width&quot;:964,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1401183,&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_!8RyC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab19c13b-5e49-4bbf-a861-f2965982e5d8_964x946.png 424w, https://substackcdn.com/image/fetch/$s_!8RyC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab19c13b-5e49-4bbf-a861-f2965982e5d8_964x946.png 848w, https://substackcdn.com/image/fetch/$s_!8RyC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab19c13b-5e49-4bbf-a861-f2965982e5d8_964x946.png 1272w, https://substackcdn.com/image/fetch/$s_!8RyC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab19c13b-5e49-4bbf-a861-f2965982e5d8_964x946.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 aria-hidden="true" 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><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>And then those scientists spent lots of time convincing, fighting, and discussing how to set a protocol that everyone uses nowadays. That&#8217;s why we are using so many protocols e.g. Hypertext Transfer Protocol (HTTP), following the same rules. </p><h2>Closing notes</h2><p>When reading the history of computer science, I found it really funny that our ancestors were mind-blown by things that I find so stupid today, like copy and paste. </p><div id="youtube2-B6rKUf9DWRI" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;B6rKUf9DWRI&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/B6rKUf9DWRI?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>This quote from Steve Jobs resonates with me after reading the book. </p><div class="pullquote"><p>&#8220;Life can be so much broader, once you discover one simple fact, and that is that everything around you that you call 'life' was made up by people who were no smarter than you.&#8221;</p></div><p>All these complicated concepts that we have struggled with in school are evolutions of thoughts for decades. But it starts pretty simple, such as Turning&#8217;s imagination of a computer as a mathematician with a pencil and paper. Learning history demystifies a lot of fear we have when we start learning computer science, gives us an understanding of why we need to do things like this today, and a glimpse of how our ancestors imagined the future of computers. In contrast to just learning how to code, I believe learning the why of all inventions emerge will bring our joy of learning and depth of understanding to the next level. </p>]]></content:encoded></item><item><title><![CDATA[讓工程成為我的方言]]></title><description><![CDATA[&#22914;&#26524;&#24037;&#31243;&#26159;&#19968;&#39318;&#19971;&#35328;&#32085;&#21477;&#21602;&#65311;]]></description><link>https://learnlearnlearn.substack.com/p/566</link><guid isPermaLink="false">https://learnlearnlearn.substack.com/p/566</guid><dc:creator><![CDATA[Esther]]></dc:creator><pubDate>Sat, 17 Feb 2024 05:30:10 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09f43cce-9710-4484-af11-a144bd300fad_1726x1229.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#25105;&#26377;&#19968;&#20491;&#22818;&#65292;&#26159;&#35731;&#24037;&#31243;&#35486;&#35328;&#25104;&#28858;&#25105;&#30340;&#26041;&#35328;&#12290;</p><p>&#26368;&#36817;&#32893;&#20102;Jeremy &#23416;&#32722;&#28145;&#24230;&#23416;&#32722;&#30340;&#20998;&#20139;&#65292;&#20182;&#35498;&#20182;&#30070;&#26178;&#22825;&#22825;&#29105;&#20999;&#22320;&#25171;&#38283;&#28145;&#24230;&#23416;&#32722;&#30340;&#25945;&#31185;&#26360;&#65292;&#23416;&#21040;&#20570;&#22818;&#20063;&#26371;&#22818;&#21040;&#26799;&#24230;&#19979;&#38477;&#27861;&#65288;Gradient descent&#65289;&#12290;&#25105;&#32893;&#21040;&#30340;&#26178;&#20505;&#65292;&#24515;&#24819;&#65292;&#24590;&#40636;&#26371;&#36889;&#40636;&#19981;&#20844;&#24179;&#65292;&#28858;&#20160;&#40636;&#20182;&#30340;&#33126;&#34955;&#21487;&#20197;&#22818;&#21040;&#26799;&#24230;&#19979;&#38477;&#27861;&#65292;&#25105;&#30340;&#33126;&#34955;&#38290;&#26247;&#26178;&#38291;&#21482;&#26371;&#33258;&#21205;&#29983;&#25104;&#28846;&#20180;&#32882;&#36889;&#31278;&#32933;&#30338;&#21127;&#21602;&#65311;&#28858;&#20160;&#40636;&#23427;&#19981;&#26371;&#28961;&#32842;&#26178;&#21578;&#35380;&#25105;&#65292;&#25105;&#20497;&#20358;&#35079;&#32722;&#19968;&#19979;&#27888;&#21202;&#32026;&#25976;&#30340;&#20844;&#24335;&#65288;Taylor Series&#65289;&#21543;&#65281;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2o4m!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63242cbd-1478-45c9-89b1-41eeb9982db4_2160x1620.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2o4m!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63242cbd-1478-45c9-89b1-41eeb9982db4_2160x1620.png 424w, https://substackcdn.com/image/fetch/$s_!2o4m!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63242cbd-1478-45c9-89b1-41eeb9982db4_2160x1620.png 848w, https://substackcdn.com/image/fetch/$s_!2o4m!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63242cbd-1478-45c9-89b1-41eeb9982db4_2160x1620.png 1272w, https://substackcdn.com/image/fetch/$s_!2o4m!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63242cbd-1478-45c9-89b1-41eeb9982db4_2160x1620.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2o4m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63242cbd-1478-45c9-89b1-41eeb9982db4_2160x1620.png" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/63242cbd-1478-45c9-89b1-41eeb9982db4_2160x1620.png&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;: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_!2o4m!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63242cbd-1478-45c9-89b1-41eeb9982db4_2160x1620.png 424w, https://substackcdn.com/image/fetch/$s_!2o4m!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63242cbd-1478-45c9-89b1-41eeb9982db4_2160x1620.png 848w, https://substackcdn.com/image/fetch/$s_!2o4m!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63242cbd-1478-45c9-89b1-41eeb9982db4_2160x1620.png 1272w, https://substackcdn.com/image/fetch/$s_!2o4m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63242cbd-1478-45c9-89b1-41eeb9982db4_2160x1620.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 aria-hidden="true" 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><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>&#26044;&#26159;&#25105;&#38283;&#22987;&#36944;&#24819;&#65292;&#22914;&#20309;&#35731;&#24037;&#31243;&#19981;&#21934;&#21934;&#21482;&#26159;&#30693;&#35672;&#25110;&#26159;&#25216;&#34899;&#65292;&#32780;&#25104;&#28858;&#25105;&#30340;&#19968;&#37096;&#20221;&#12290;&#22240;&#27492;&#65292;&#25105;&#23601;&#22312;&#38290;&#26247;&#26178;&#38291;&#21839;&#25105;&#30340;&#33126;&#34955;&#65292;&#25105;&#20497;&#20358;&#24819;&#24819;&#21083;&#21083;&#23416;&#21040;&#20102;&#20160;&#40636;&#24037;&#31243;&#30693;&#35672;&#21543;&#65281;&#27794;&#24819;&#21040;&#33126;&#34955;&#24819;&#20102;&#20841;&#31186;&#65292;&#23601;&#35498;&#12300;&#22826;&#32047;&#20102;&#65281;&#12301;&#65292;&#28982;&#24460;&#33258;&#21205;&#36914;&#20837;&#30561;&#30496;&#27169;&#24335;&#12290;&#22312;&#35264;&#23519;&#20043;&#24460;&#65292;&#25105;&#30332;&#29694;&#20841;&#20214;&#20107;&#65306;</p><ol><li><p>&#25105;&#30340;&#33126;&#34955;&#21482;&#26377;&#22312;&#21839;&#38988;&#35299;&#19981;&#38283;&#30340;&#26178;&#20505;&#25165;&#39000;&#24847;&#24605;&#32771;&#65292;&#36890;&#24120;&#26159;&#26377; bug &#30340;&#26178;&#20505;&#12290;</p></li><li><p>&#25105;&#30340;&#33126;&#34955;&#26159;&#25078;&#24816;&#30340;&#65292;&#21482;&#24819;&#20570;&#31777;&#21934;&#30340;&#20107;&#24773;&#12290;&#22240;&#28858;&#32232;&#25925;&#20107;&#23481;&#26131;&#12289;&#24605;&#32771;&#38627;&#65292;&#25152;&#20197;&#38290;&#26247;&#26178;&#38291;&#30070;&#28982;&#21482;&#32232;&#25925;&#20107;&#12290;</p></li></ol><p>&#37027;&#25105;&#26377;&#27794;&#26377;&#21487;&#33021;&#25844;&#23637;&#25105;&#23565;&#24037;&#31243;&#30340;&#26082;&#23450;&#21360;&#35937;&#65292;&#35731;&#20182;&#19981;&#21482;&#26159;&#28436;&#31639;&#27861;&#33287;&#25216;&#34899;&#21839;&#38988;&#65292;&#34701;&#21512;&#26356;&#22810;&#30340;&#25925;&#20107;&#21644;&#24819;&#20687;&#21147;&#21602;&#65311;</p><p>&#33289;&#20491;&#20363;&#23376;&#20358;&#35498;&#65292;&#30070;&#25105;&#22312;&#23416; CORS &#30340;&#26178;&#20505;&#65292;&#36889;&#26159;&#19968;&#20491;&#32178;&#36335;&#30340;&#35299;&#37323;&#29256;&#26412;&#65306;</p><blockquote><p><em><strong>Cross-Origin Resource Sharing</strong> (<a href="https://developer.mozilla.org/en-US/docs/Glossary/CORS">CORS</a>) is an <a href="https://developer.mozilla.org/en-US/docs/Glossary/HTTP">HTTP</a>-header based mechanism that allows a server to indicate any <a href="https://developer.mozilla.org/en-US/docs/Glossary/Origin">origins</a> (domain, scheme, or port) other than its own from which a browser should permit loading resources. CORS also relies on a mechanism by which browsers make a &#8220;preflight&#8221; request to the server hosting the cross-origin resource, in order to check that the server will permit the actual request. In that preflight, the browser sends headers that indicate the HTTP method and headers that will be used in the actual request.</em></p></blockquote><p>Cross-Origin Resource Sharing&#12289;server&#12289;mechanism &#26159;&#20844;&#27578;&#27584;&#65292;&#38627;&#24618;&#25105;&#30340;&#33126;&#34955;&#38290;&#26247;&#30340;&#26178;&#20505;&#19981;&#39000;&#24847;&#24819;&#36889;&#20214;&#20107;&#24773;&#12290;&#37027;&#35731;&#25105;&#25226;&#36889;&#20491;&#27010;&#24565;&#32232;&#25104;&#19968;&#20491;&#25925;&#20107;&#32102;&#20320;&#32893;&#12290;</p><p>&#20320;&#24819;&#20687; CORS &#26159;&#19968;&#20491;&#35377;&#21487;&#36890;&#34892;&#35657;&#12290;&#24819;&#20687;&#20320;&#21644;&#23567;&#26126;&#20303;&#22312;&#20841;&#20491;&#19981;&#21516;&#30340;&#25151;&#23376;&#65292;&#28982;&#24460;&#20320;&#24819;&#21435;&#25214;&#23567;&#26126;&#32842;&#22825;&#12290;&#22914;&#26524;&#20320;&#21040;&#20182;&#23478;&#30340;&#26178;&#20505;&#65292;&#23601;&#30452;&#25509;&#25171;&#38283;&#20182;&#23478;&#30340;&#23478;&#38272;&#65292;&#37027;&#20063;&#22826;&#27794;&#26377;&#31150;&#35980;&#20102;&#21543;&#65281;&#20320;&#32317;&#26159;&#24471;&#20808;&#30693;&#36947;&#23567;&#26126;&#26377;&#27794;&#26377;&#31354;&#65292;&#24819;&#19981;&#24819;&#21644;&#20320;&#35498;&#35441;&#12290;&#26044;&#26159;&#65292;&#20320;&#35442;&#20570;&#30340;&#20107;&#24773;&#26377;&#20841;&#20214;&#65306;</p><ol><li><p>&#25970;&#25970;&#23567;&#26126;&#30340;&#23478;&#38272;&#65292;&#30475;&#30475;&#20154;&#23478;&#29694;&#22312;&#33021;&#19981;&#33021;&#21644;&#20320;&#35498;&#35441;</p></li><li><p>&#22914;&#26524;&#23567;&#26126;&#35498;&#22909;&#65292;&#37027;&#20877;&#25226;&#20320;&#24515;&#20013;&#30340;&#35441;&#21578;&#35380;&#20182;</p></li></ol><p>&#20197;&#24037;&#31243;&#35486;&#35328;&#30340;&#35282;&#24230;&#20358;&#30475;&#65292;&#20320;&#21644;&#23567;&#26126;&#37117;&#26159;&#32178;&#31449;&#12290;&#22914;&#26524;&#20320;&#24819;&#21644;&#23567;&#26126;&#35201;&#19968;&#20123;&#36039;&#26009;&#65292;&#20320;&#23601;&#38283;&#20808;&#26377;&#31150;&#35980;&#22320;&#25970;&#25970;&#20182;&#23478;&#30340;&#23478;&#38272;&#65292;&#36889;&#23601;&#21483;&#20570; CORS &#20013;&#30340; preflight request&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2MAh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09f43cce-9710-4484-af11-a144bd300fad_1726x1229.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2MAh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09f43cce-9710-4484-af11-a144bd300fad_1726x1229.png 424w, https://substackcdn.com/image/fetch/$s_!2MAh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09f43cce-9710-4484-af11-a144bd300fad_1726x1229.png 848w, https://substackcdn.com/image/fetch/$s_!2MAh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09f43cce-9710-4484-af11-a144bd300fad_1726x1229.png 1272w, https://substackcdn.com/image/fetch/$s_!2MAh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09f43cce-9710-4484-af11-a144bd300fad_1726x1229.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2MAh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09f43cce-9710-4484-af11-a144bd300fad_1726x1229.png" width="1456" height="1037" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/09f43cce-9710-4484-af11-a144bd300fad_1726x1229.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1037,&quot;width&quot;:1456,&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;: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_!2MAh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09f43cce-9710-4484-af11-a144bd300fad_1726x1229.png 424w, https://substackcdn.com/image/fetch/$s_!2MAh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09f43cce-9710-4484-af11-a144bd300fad_1726x1229.png 848w, https://substackcdn.com/image/fetch/$s_!2MAh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09f43cce-9710-4484-af11-a144bd300fad_1726x1229.png 1272w, https://substackcdn.com/image/fetch/$s_!2MAh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09f43cce-9710-4484-af11-a144bd300fad_1726x1229.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 aria-hidden="true" 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><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>&#36890;&#24120;&#65292;&#20182;&#20497;&#23478;&#36996;&#26371;&#26377;&#20491;&#30475;&#38272;&#30340;&#65292;&#21483;&#20570; OPTIONS&#65292;&#21578;&#35380;&#20320;&#20320;&#26159;&#19981;&#26159;&#20801;&#35377;&#21644;&#23567;&#26126;&#35498;&#35441;&#65288;&#30475;&#30475;&#20320;&#26377;&#27794;&#26377;&#31526;&#21512;&#35370;&#23458;&#35215;&#23450;&#65281;&#65289;&#22914;&#26524;&#20320;&#26377;&#25343;&#21040;&#35377;&#21487;&#65292;&#20320;&#23601;&#21487;&#20197;&#21644;&#23567;&#26126;&#35201;&#20320;&#24819;&#35201;&#30340;&#36039;&#35338;&#65292;&#25110;&#26159;&#25226;&#20320;&#24515;&#20013;&#30340;&#35441;&#21578;&#35380;&#20182;&#12290;</p><p>&#22914;&#26524;&#20197;&#26356;&#35443;&#32048;&#30340;&#26041;&#24335;&#35299;&#37323;&#65292;&#30475;&#38272;&#30340;&#36996;&#21487;&#20197;&#27770;&#23450;&#23567;&#26126;&#30340;&#35370;&#23458;&#35215;&#31684;&#12290;</p><ul><li><p>&#35370;&#23458;&#38656;&#35201;&#20808;&#30331;&#35352;&#21966;&#65311;Access-Control-Allow-Origin: Specifies which origin(s) are allowed.</p></li><li><p>&#20160;&#40636;&#35201;&#30340;&#35527;&#35441;&#26041;&#24335;&#26159;&#34987;&#20801;&#35377;&#30340;&#65311;&#20320;&#21482;&#33021;&#32893;&#23567;&#26126;&#35498;&#36996;&#26159;&#20320;&#20063;&#21487;&#20197;&#20659;&#35441;&#32102;&#23567;&#26126;&#65311;</p><p>Access-Control-Allow-Methods: Lists the HTTP methods that are allowed.</p></li><li><p>&#24590;&#40636;&#27171;&#30340;&#35527;&#35441;&#36039;&#35338;&#26684;&#24335;&#26159;&#26680;&#21487;&#30340;&#65311;Access-Control-Allow-Headers: Indicates which headers can be used in the actual request. (JSON, plain text&nbsp;&#8230;)</p></li></ul><p>&#38614;&#28982;&#22914;&#26524;&#21934;&#32020;&#21482;&#30475;&#36889;&#20123;&#31243;&#24335;&#21477;&#27861;&#65292;&#30906;&#23526;&#38476;&#29983;&#21448;&#21487;&#24597;&#65292;&#20294;&#33509;&#20180;&#32048;&#28145;&#31350;&#65292;&#23601;&#26371;&#30332;&#29694;&#20182;&#20497;&#30340;&#21629;&#21517;&#26159;&#26377;&#36947;&#29702;&#30340;&#12290;Access-Control-Allow-Origin &#20195;&#34920;&#20801;&#35377;&#30340;&#36039;&#35338;&#20358;&#28304;&#65292;Access-Control-Allow-Methods &#20195;&#34920;&#20132;&#27969;&#30340;&#26041;&#24335;&#65292;&#32780; Access-Control-Allow-Headers &#65288;&#36611;&#19981;&#30452;&#35258;&#65289;&#34920;&#31034;&#21487;&#20197;&#20659;&#36865;&#30340;&#38989;&#22806;&#36039;&#35338;&#12290;</p><p>&#30070;&#28982;&#65292;&#35201;&#25105;&#30340;&#33126;&#34955;&#24819;&#21644;&#23567;&#26126;&#32842;&#22825;&#30340;&#25925;&#20107;&#65292;&#27604;&#24819; CORS &#31561;&#25216;&#34899;&#21517;&#35422;&#23481;&#26131;&#22810;&#20102;&#65281;</p><p>&#22312;&#23416;&#26371;&#23416;&#32722;&#24037;&#31243;&#19981;&#25033;&#35442;&#21482;&#24819;&#31243;&#24335;&#20989;&#25976;&#33287;&#23531;&#20316;&#21477;&#27861;&#65292;&#25033;&#35442;&#26356;&#24291;&#27867;&#30340;<a href="https://learnlearnlearn.substack.com/p/the-key-to-learning-deeply-in-programming">&#23416;&#32722;&#19968;&#38272;&#31185;&#25216;&#30340;&#35373;&#35336;&#29702;&#24565;&#21644;&#21839;&#38988;&#32972;&#26223;&#24460;</a>&#65292;&#25105;&#38283;&#22987;&#37325;&#26032;&#24819;&#20687;&#24037;&#31243;&#30340;&#23416;&#32722;&#65292;&#19981;&#25033;&#35442;&#21482;&#20407;&#38480;&#26044;&#28436;&#31639;&#27861;&#12289;&#37007;&#36655;&#12289;&#33287;&#21839;&#38988;&#35299;&#27770;&#30340;&#26041;&#24335;&#65292;&#26356;&#25033;&#35442;&#24291;&#38346;&#30340;&#25509;&#32013;&#23427;&#34584;&#34523;&#32178;&#32114;&#33324;&#29872;&#29872;&#30456;&#25187;&#30340;&#25925;&#20107;&#33287;&#20154;&#39006;&#35373;&#35336;&#30340;&#31934;&#24039;&#25163;&#34269;&#65292;&#23427;&#21487;&#26159;&#19968;&#20491;&#32769;&#31062;&#23447;&#31934;&#24515;&#35373;&#35336;&#30340;&#24605;&#32771;&#26041;&#24335;&#21644;&#35486;&#35328;&#21602;&#65281;</p><p>&#35692;&#22914;&#35498;&#65292;&#25105;&#20497;&#34987;&#36843;&#25509;&#32013;&#38651;&#33126;&#30340;&#36939;&#20316;&#26041;&#24335;&#23601;&#26159; 0 &#21644; 1 &#65292;&#36889;&#19981;&#26159;&#24456;&#22855;&#24618;&#21966;&#65311;&#35504;&#26371;&#36889;&#40636;&#24819;&#21602;&#65311;&#20294;&#22914;&#26524;&#20320;&#38321;&#35712; The Dream Machine&#65292;&#20102;&#35299;&#36039;&#35338;&#29702;&#35542;&#30340;&#21109;&#22987;&#20154; Shannon &#30340;&#21109;&#20316;&#32972;&#26223;&#65292;&#23601;&#26371;&#19981;&#31105;&#21854;&#28982;&#22833;&#31505;&#12290;&#20182;&#30070;&#26178;&#26159;&#20491;&#27794;&#27794;&#28961;&#21839;&#24471;&#30740;&#31350;&#29983;&#65292;&#21482;&#26159;&#30332;&#29694;&#38651;&#27969;&#30340;&#38283;&#38283;&#38364;&#38364;&#65292;&#22909;&#20687;&#37007;&#36655;&#31995;&#32113;&#35041;&#30340; 0 &#21644; 1&#65292;&#35258;&#24471;&#22909;&#29609;&#65292;&#26044;&#26159;&#23601;&#29992;&#20182;&#23531;&#20102;&#19968;&#31687;&#35542;&#25991; A Symbolic Analysis of Relay and Switching Circuits&#65292;&#22823;&#23478;&#21083;&#30475;&#21040;&#36889;&#31687;&#35542;&#25991;&#26178;&#65292;&#20063;&#27794;&#24819;&#22826;&#22810;&#65292;&#35258;&#24471;&#20182;&#30495;&#26377;&#21109;&#24847;&#65292;&#30070;&#20182;&#30070;&#26178;&#25343;&#36889;&#38651;&#36335;&#26495;&#36914;&#36774;&#20844;&#23460;&#29609;&#30340;&#26178;&#20505;&#65292;&#21516;&#20107;&#20497;&#37117;&#35258;&#24471;&#20182;&#22312;&#29609;&#29609;&#20855;&#65281;&#20294;&#36889;&#20491;&#24819;&#27861;&#21371;&#25299;&#23637;&#20154;&#39006;&#30340;&#24819;&#20687;&#65292;&#25104;&#28858;&#38651;&#33126;&#36939;&#20316;&#26041;&#24335;&#30340;&#38283;&#31471;&#12290;</p><p>&#25105;&#27880;&#24847;&#21040;&#36523;&#37002;&#26377;&#20123;&#24037;&#31243;&#24107;&#22240;&#28858;&#20182;&#20497;&#25793;&#26377;&#30340;&#30693;&#35672;&#32780;&#26377;&#29305;&#21029;&#30340;&#20778;&#36234;&#24863;&#12290;&#26377;&#20154;&#21578;&#35380;&#25105;&#65306;&#12300;&#25105;&#21738;&#20358;&#30340;&#32654;&#22283;&#26178;&#38291;&#21644;&#26032;&#20154;&#33457;&#19977;&#21313;&#20998;&#37912;&#35299;&#37323; OLTP &#21644; OLAP &#30340;&#24046;&#21029;&#65281;&#12301;&#36889;&#20123;&#25216;&#34899;&#21517;&#35422;&#32893;&#20358;&#21487;&#24597;&#65292;&#20294;&#22914;&#26524;&#39000;&#24847;&#31245;&#24494;&#33457;&#40670;&#26178;&#38291;&#30740;&#31350;&#19968;&#19979;&#65292;&#23601;&#26371;&#30332;&#29694;&#20182;&#35527;&#30340;&#21482;&#26159;&#36039;&#26009;&#24235;&#38568;&#33879;&#26178;&#20195;&#38656;&#27714;&#30340;&#28436;&#36914;&#32631;&#20102;&#65292;&#21644;&#20854;&#20182;&#30693;&#35672;&#27794;&#26377;&#22826;&#22823;&#30340;&#24046;&#21029;&#65292;&#23601;&#20063;&#26159;&#19968;&#38272;&#23416;&#21839;&#12290;&#25105;&#24819;&#65292;&#25105;&#20497;&#31038;&#26371;&#32102;&#24037;&#31243;&#24456;&#22810;&#26082;&#23450;&#21360;&#35937;&#65292;&#20687;&#26159;&#12300;&#24037;&#31243;&#26159;&#20491;&#31070;&#31192;&#30340;&#65292;&#32880;&#26126;&#20154;&#25165;&#33021;&#23416;&#30340;&#38936;&#22495;&#12301;&#25110;&#32773;&#26159;&#12300;&#24037;&#31243;&#24107;&#37117;&#26377;&#31038;&#20132;&#38556;&#31001;&#12301;&#31561;&#65292;&#37117;&#26159;&#26377;&#31001;&#23416;&#32722;&#30340;&#65292;&#30050;&#31455;&#36889;&#20123;&#21360;&#35937;&#65292;&#20063;&#21482;&#26159;&#31038;&#26371;&#35380;&#35498;&#30340;&#19968;&#20491;&#25925;&#20107;&#65292;&#25105;&#20497;&#21487;&#20197;&#33258;&#20027;&#22320;&#21435;&#27770;&#23450;&#35201;&#19981;&#35201;&#30456;&#20449;&#23427;&#12290;</p><p>&#23565;&#26044;&#21738;&#20491;&#35201;&#29992;&#36575;&#39636;&#30340;&#28608;&#36783;&#65292;&#25033;&#35442;&#35201;&#20687;&#26159;&#36783;&#35542;&#21738;&#38291;&#40629;&#21253;&#24215;&#20986;&#29200;&#30340;&#21487;&#38924;&#26356;&#22909;&#21507;&#65292;&#23416;&#32722;&#24037;&#31243;&#30340;&#24819;&#20687;&#20063;&#19981;&#25033;&#35442;&#20407;&#38480;&#26044;&#19968;&#20491;&#31359;&#33879;&#24125; T &#65292;&#25226;&#33258;&#24049;&#37782;&#22312;&#38512;&#26263;&#30340;&#22320;&#19979;&#23460;&#21069;&#38754;&#65292;&#30447;&#33879;&#19968;&#22534;&#38651;&#33126;&#34722;&#24149;&#30340;&#40657;&#23458;&#65292;&#23565;&#26044;&#24037;&#31243;&#23416;&#32722;&#30340;&#24819;&#20687;&#65292;&#25033;&#35442;&#35201;&#26159;&#20491;&#21109;&#20316;&#30340;&#36942;&#31243;&#12289;&#34269;&#34899;&#30340;&#24819;&#20687;&#12289;&#21644;&#26085;&#24120;&#29983;&#27963;&#30340;&#32048;&#30862;&#35722;&#21270;&#12290;</p><p>&#26377;&#26178;&#65292;&#25105;&#26371;&#22312;&#24037;&#31243;&#35041;&#26371;&#36935;&#35211;&#27794;&#30475;&#36942;&#30340;&#26032;&#21934;&#23383;&#65292;&#32893;&#19981;&#25026;&#37027;&#20123;&#22806;&#22283;&#20154;&#21040;&#24213;&#22312;&#39250;&#33292;&#20123;&#20160;&#40636;&#65307;</p><p>&#26377;&#26178;&#65292;&#23416;&#24037;&#31243;&#26159;&#23531;&#19968;&#39318;&#19971;&#35328;&#32085;&#21477;&#65292;&#25105;&#24471;&#38013;&#30740;&#22914;&#20309;&#23531;&#20986;&#24179;&#20164;&#30456;&#23565;&#30340;&#26684;&#24459;&#65307;</p><p>&#26377;&#26178;&#65292;&#23416;&#24037;&#31243;&#20687;&#26159;&#32244;&#32722;&#25237;&#31811;&#65292;&#35201;&#19981;&#26039;&#35079;&#32722;&#24590;&#40636;&#24478;&#19981;&#21516;&#35282;&#24230;&#37117;&#21487;&#20197;&#36914;&#27934;&#65307;</p><p>&#26377;&#26178;&#65292;&#23416;&#24037;&#31243;&#20687;&#26159;&#25340;&#25340;&#22294;&#65292;&#25105;&#24471;&#25214;&#21040;&#19979;&#19968;&#20491;&#26368;&#31526;&#21512;&#33394;&#35519;&#30340;&#26041;&#22602;&#65307;</p><p>&#26377;&#26178;&#65292;&#23416;&#24037;&#31243;&#20687;&#26159;&#30475;&#19968;&#20491;&#29359;&#32618;&#29694;&#22580;&#65292;&#25105;&#26159;&#20491;&#36774;&#26696;&#30340;&#20597;&#25506;&#65307;</p><p>&#26377;&#26178;&#65292;&#23416;&#24037;&#31243;&#20687;&#26159;&#32893;&#19968;&#21063;&#19978;&#21476;&#26178;&#20195;&#30340;&#20659;&#35498;&#65292;&#25105;&#32838;&#32893;&#20808;&#20154;&#30340;&#32570;&#22833;&#33287;&#26234;&#24935;&#65307;</p><p>&#25105;&#22987;&#32066;&#30456;&#20449;&#65292;&#21807;&#26377;&#25105;&#20497;&#33021;&#22816;&#23631;&#26820;&#31038;&#26371;&#19981;&#26039;&#21578;&#35380;&#25105;&#20497;&#30340;&#25925;&#20107;&#65292;&#25105;&#20497;&#25165;&#33021;&#20197;&#37325;&#26032;&#21109;&#36896;&#25105;&#20497;&#23565;&#24037;&#31243;&#30340;&#24819;&#20687;&#33287;&#29702;&#35299;&#65292;&#35731;&#24037;&#31243;&#25104;&#28858;&#25105;&#20497;&#30340;&#26041;&#35328;&#65292;&#25104;&#28858;&#25105;&#20497;&#21628;&#21560;&#24515;&#36339;&#30340;&#19968;&#37096;&#20998;&#12290;</p><p>&#21407;&#25991;&#65306;<a href="https://learnlearnlearn.substack.com/p/engineering-as-a-language-of-mine">Engineering as a language of mine</a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Engineering as a language of mine ]]></title><description><![CDATA[What if engineering is a story?]]></description><link>https://learnlearnlearn.substack.com/p/engineering-as-a-language-of-mine</link><guid isPermaLink="false">https://learnlearnlearn.substack.com/p/engineering-as-a-language-of-mine</guid><dc:creator><![CDATA[Esther]]></dc:creator><pubDate>Sat, 17 Feb 2024 03:06:28 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!2MAh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09f43cce-9710-4484-af11-a144bd300fad_1726x1229.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;ve been dreaming about making engineering a language of mine after hearing <a href="https://open.spotify.com/episode/1ytjds3jQ9f2VnoIcxs5RB?si=041f137ee70a4bdd&amp;nd=1&amp;dlsi=b3601ca52d544d38">Jeremy&#8217;s podcast</a>. If he can dream about gradient descent when he is sleeping, why couldn&#8217;t my mind talk about the Taylor series when it&#8217;s wandering?</p><p>As I&#8217;m working toward it, I quickly notice two things:</p><ol><li><p>My mind only thinks about engineering problems when it&#8217;s uncomfortable, e.g., when I cannot figure out some bugs.</p></li><li><p>My mind doesn&#8217;t talk about the Taylor series during its free time because it&#8217;s lazy.</p></li></ol><p>I tried to recall lots of engineering problems during my free time, and I realized my mind wanted to shut down if there weren&#8217;t any problems I hadn&#8217;t resolved yet. It much rather thinks about narratives, aka some easy telenovelas, that are convenient to come up with. This makes sense because our mind is wired with lots of stories we choose to believe in.</p><p>Then how do I make engineering a language of mine? After being inspired by the story of engineering, I wonder if it might be possible to make engineering a mixture of problem-solving and storytelling.</p><p>For instance, when I think about CORS (Cross-Origin Resource Sharing), you will get the definition of it:</p><blockquote><p><em><strong>Cross-Origin Resource Sharing</strong> (<a href="https://developer.mozilla.org/en-US/docs/Glossary/CORS">CORS</a>) is an <a href="https://developer.mozilla.org/en-US/docs/Glossary/HTTP">HTTP</a>-header based mechanism that allows a server to indicate any <a href="https://developer.mozilla.org/en-US/docs/Glossary/Origin">origins</a> (domain, scheme, or port) other than its own from which a browser should permit loading resources. CORS also relies on a mechanism by which browsers make a &#8220;preflight&#8221; request to the server hosting the cross-origin resource, in order to check that the server will permit the actual request. In that preflight, the browser sends headers that indicate the HTTP method and headers that will be used in the actual request.</em></p></blockquote><p>Goddam it! No wonder my mind doesn&#8217;t want to think about it when it has free time. However, let me remake this as a story for you.</p><p>CORS is like a permission slip when two friends living in different houses want to talk to each other. If you just go straight to their house and open their door, that&#8217;s completely disrespectful! You should ask if they are willing to talk first. To have great communication, you need to do two things:</p><ol><li><p>You knock on the door and ask if they want to have a conversation atm</p></li><li><p>If they say yes, you tell them what is on your mind</p></li></ol><p>In engineering terms, you and your friend are websites. If you want to ask something from them, your respectful knock on the door is called the &#8220;preflight request.&#8221;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2MAh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09f43cce-9710-4484-af11-a144bd300fad_1726x1229.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2MAh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09f43cce-9710-4484-af11-a144bd300fad_1726x1229.png 424w, https://substackcdn.com/image/fetch/$s_!2MAh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09f43cce-9710-4484-af11-a144bd300fad_1726x1229.png 848w, https://substackcdn.com/image/fetch/$s_!2MAh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09f43cce-9710-4484-af11-a144bd300fad_1726x1229.png 1272w, https://substackcdn.com/image/fetch/$s_!2MAh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09f43cce-9710-4484-af11-a144bd300fad_1726x1229.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2MAh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09f43cce-9710-4484-af11-a144bd300fad_1726x1229.png" width="1456" height="1037" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/09f43cce-9710-4484-af11-a144bd300fad_1726x1229.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1037,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:171298,&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_!2MAh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09f43cce-9710-4484-af11-a144bd300fad_1726x1229.png 424w, https://substackcdn.com/image/fetch/$s_!2MAh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09f43cce-9710-4484-af11-a144bd300fad_1726x1229.png 848w, https://substackcdn.com/image/fetch/$s_!2MAh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09f43cce-9710-4484-af11-a144bd300fad_1726x1229.png 1272w, https://substackcdn.com/image/fetch/$s_!2MAh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09f43cce-9710-4484-af11-a144bd300fad_1726x1229.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 aria-hidden="true" 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><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>Usually, there will be a doorman, called OPTIONS, telling you if they want to talk to you (e.g. comply with the rules as a guest). If you are permitted, you can talk to your friend and get and give whatever you want!</p><p>To put it into even more detail, the doorman can specify rules on who can talk to your friends.</p><ul><li><p>Does the guest need to be registered? Access-Control-Allow-Origin: Specifies which origin(s) are allowed.</p></li><li><p>What kind of conversation is allowed? Are you allowed to give or take the information? Access-Control-Allow-Methods: Lists the HTTP methods that are allowed.</p></li><li><p>What type of information you can give or take? Access-Control-Allow-Headers: Indicates which headers can be used in the actual request. (JSON, plain text&nbsp;&#8230;)</p></li></ul><p>Even though merely looking at the codes looks daunting, if you give the language a closer look, you will realize the naming makes a lot of sense with the story. Access-Control-Allow-Origin is talking about where the source comes from, Access-Control-Allow-Methods is about the methods to communicate, and Access-Control-Allow-Headers (less intuitive) is about some additional information that is being sent.</p><p>Asking my mind to recall this story is so much easier than thinking of CORS, server, mechanism, bla bla bla&#8230;</p><p>Combining the <a href="https://learnlearnlearn.substack.com/p/the-key-to-learning-deeply-in-programming">philosophical level</a>, thinking of problem context and design philosophy to learn about engineering, I started to think maybe I should expand my perception of engineering from algorithms and problem-solving process to a web of stories and an intricate design of human ideas, and a language our ancestors created.</p><p>I find lots of engineers have a superiority complex for the knowledge they have. This is tied with the social perception of &#8220;engineering is a difficult mysterious discipline that is only for smart people&#8221; or &#8220;engineering is for socially awkward nerds who are as cold as machines.&#8221; When they talk about it, they sound scarily smart in the beginning. However, if it doesn&#8217;t deter me from learning deeply about it, it is just another piece of knowledge, another kind of information. The prominent social perception essentially is just another story that we can choose to believe or not to believe.</p><p>Debating about which engineering technology to use should be similar to debating which bakery sells the best croissant. The image of learning engineering shouldn&#8217;t be imagining yourself as a hacker wearing a hoodie in a basement, sitting humpbackedly in front of computers. The image of learning should be a creative process, an imagination, a daily encounter. </p><p>Sometimes, you encounter new vocabulary that you don&#8217;t know what the locals are talking about. </p><p>Sometimes, engineering is like practicing a serve in ping pong that you try to master.</p><p>Sometimes, it&#8217;s like a crime scene where you try to find the murderer. </p><p>Sometimes, engineering is seeing many different living room designs that you try to pick for your house. Sometimes, it&#8217;s a recipe you try to follow. </p><p>Sometimes, engineering is a puzzle that you try to find the next piece. </p><p>Sometimes, engineering is an ancient fairytale that a grandpa is telling you.</p><p>I believe only when we are able to let go of the social narrative of engineering, we are free to recreate engineering as a language of ours.</p>]]></content:encoded></item><item><title><![CDATA[AWS Lambda Deployment Learning Guide ]]></title><description><![CDATA[For node express and python flask]]></description><link>https://learnlearnlearn.substack.com/p/aws-lambda-deployment-learning-guide</link><guid isPermaLink="false">https://learnlearnlearn.substack.com/p/aws-lambda-deployment-learning-guide</guid><dc:creator><![CDATA[Esther]]></dc:creator><pubDate>Thu, 15 Feb 2024 22:23:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11961d0b-93f3-47a1-8d75-4a5acb9e3c14_1652x1330.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Deployment is often the biggest pain in software development. Hence, I&#8217;m here to share my learning strategies, steps to deploy, and working github templates for people who want to deploy their Python Flask and node express app on AWS Lambda functions. </p><h2>Step 1: Download sam cli (command line for aws) </h2><h2>Step 2: Add credentials</h2><ul><li><p>I recommend using &#8220;root user&#8221; rather than setting up the IAM role in the beginning. Permission problems can be annoying when while root user has all the permission.</p></li></ul><ul><li><p>To add root users, go to security credentials, and add an access key.</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_!544w!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6729c52-0fb9-40f8-888c-a87c02942c66_911x371.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!544w!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6729c52-0fb9-40f8-888c-a87c02942c66_911x371.png 424w, https://substackcdn.com/image/fetch/$s_!544w!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6729c52-0fb9-40f8-888c-a87c02942c66_911x371.png 848w, https://substackcdn.com/image/fetch/$s_!544w!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6729c52-0fb9-40f8-888c-a87c02942c66_911x371.png 1272w, https://substackcdn.com/image/fetch/$s_!544w!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6729c52-0fb9-40f8-888c-a87c02942c66_911x371.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!544w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6729c52-0fb9-40f8-888c-a87c02942c66_911x371.png" width="911" height="371" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e6729c52-0fb9-40f8-888c-a87c02942c66_911x371.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:371,&quot;width&quot;:911,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:39842,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!544w!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6729c52-0fb9-40f8-888c-a87c02942c66_911x371.png 424w, https://substackcdn.com/image/fetch/$s_!544w!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6729c52-0fb9-40f8-888c-a87c02942c66_911x371.png 848w, https://substackcdn.com/image/fetch/$s_!544w!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6729c52-0fb9-40f8-888c-a87c02942c66_911x371.png 1272w, https://substackcdn.com/image/fetch/$s_!544w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6729c52-0fb9-40f8-888c-a87c02942c66_911x371.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 aria-hidden="true" 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><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><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Sz-P!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F903de36b-1275-4b43-a757-64a8ac6a4eff_1553x225.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Sz-P!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F903de36b-1275-4b43-a757-64a8ac6a4eff_1553x225.png 424w, https://substackcdn.com/image/fetch/$s_!Sz-P!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F903de36b-1275-4b43-a757-64a8ac6a4eff_1553x225.png 848w, https://substackcdn.com/image/fetch/$s_!Sz-P!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F903de36b-1275-4b43-a757-64a8ac6a4eff_1553x225.png 1272w, https://substackcdn.com/image/fetch/$s_!Sz-P!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F903de36b-1275-4b43-a757-64a8ac6a4eff_1553x225.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Sz-P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F903de36b-1275-4b43-a757-64a8ac6a4eff_1553x225.png" width="1456" height="211" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/903de36b-1275-4b43-a757-64a8ac6a4eff_1553x225.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:211,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:54197,&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;: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_!Sz-P!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F903de36b-1275-4b43-a757-64a8ac6a4eff_1553x225.png 424w, https://substackcdn.com/image/fetch/$s_!Sz-P!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F903de36b-1275-4b43-a757-64a8ac6a4eff_1553x225.png 848w, https://substackcdn.com/image/fetch/$s_!Sz-P!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F903de36b-1275-4b43-a757-64a8ac6a4eff_1553x225.png 1272w, https://substackcdn.com/image/fetch/$s_!Sz-P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F903de36b-1275-4b43-a757-64a8ac6a4eff_1553x225.png 1456w" sizes="100vw"></picture><div></div></div></a></figure></div><h2>Step 3: Start with a simple sample template from aws </h2><ul><li><p>Run <code>sam init</code> on your terminal </p></li><li><p>Build your function and test if it is correct</p><ul><li><p>Build: <code>sam build</code></p></li><li><p>Test your lint: <code>cfn-lint template.yaml</code> This command is very helpful because we usually want to modify our <code>template.yaml</code> file, and it gives us the exact line on our error. </p></li><li><p>Test your function: <code>sam validate</code></p></li></ul></li><li><p>Try to run it locally</p><ul><li><p><code>sam local invoke</code>: You can invoke your local function. To specify a function when you have multiple functions, use <code>sam local invoke {{your_function_name}}</code></p></li><li><p><code>sam local start-api</code>: You will receive an output API that you can test on. </p></li></ul></li><li><p>Deploy on aws </p><ul><li><p><code>sam deploy</code>: You will be able to see your function on cloud formation. </p></li></ul></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_!4PmH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83178cfd-f353-4949-8b6c-9f522606d0a5_1920x782.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4PmH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83178cfd-f353-4949-8b6c-9f522606d0a5_1920x782.png 424w, https://substackcdn.com/image/fetch/$s_!4PmH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83178cfd-f353-4949-8b6c-9f522606d0a5_1920x782.png 848w, https://substackcdn.com/image/fetch/$s_!4PmH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83178cfd-f353-4949-8b6c-9f522606d0a5_1920x782.png 1272w, https://substackcdn.com/image/fetch/$s_!4PmH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83178cfd-f353-4949-8b6c-9f522606d0a5_1920x782.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4PmH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83178cfd-f353-4949-8b6c-9f522606d0a5_1920x782.png" width="1456" height="593" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/83178cfd-f353-4949-8b6c-9f522606d0a5_1920x782.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:593,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:233184,&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_!4PmH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83178cfd-f353-4949-8b6c-9f522606d0a5_1920x782.png 424w, https://substackcdn.com/image/fetch/$s_!4PmH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83178cfd-f353-4949-8b6c-9f522606d0a5_1920x782.png 848w, https://substackcdn.com/image/fetch/$s_!4PmH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83178cfd-f353-4949-8b6c-9f522606d0a5_1920x782.png 1272w, https://substackcdn.com/image/fetch/$s_!4PmH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83178cfd-f353-4949-8b6c-9f522606d0a5_1920x782.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 aria-hidden="true" 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><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><h2>Step 4: Add your own functions</h2><h3>Python: Flask </h3><p>Basic folder structure</p><pre><code>&#9500;&#9472;&#9472; README.md
&#9500;&#9472;&#9472; __init__.py
&#9500;&#9472;&#9472; events
&#9474;   &#9492;&#9472;&#9472; event.json
&#9500;&#9472;&#9472; hello_world
&#9474;   &#9500;&#9472;&#9472; __init__.py
&#9474;   &#9500;&#9472;&#9472; app.py
&#9474;   &#9492;&#9472;&#9472; requirements.txt
&#9500;&#9472;&#9472; samconfig.toml
&#9500;&#9472;&#9472; template.yaml
&#9492;&#9472;&#9472; tests
    &#9500;&#9472;&#9472; __init__.py
    &#9500;&#9472;&#9472; integration
    &#9474;   &#9500;&#9472;&#9472; __init__.py
    &#9474;   &#9492;&#9472;&#9472; test_api_gateway.py
    &#9500;&#9472;&#9472; requirements.txt
    &#9492;&#9472;&#9472; unit
        &#9500;&#9472;&#9472; __init__.py
        &#9492;&#9472;&#9472; test_handler.py</code></pre><p>The only thing we need to modify is the <code>app.py</code> file to add flask, and <code>template.yaml</code> to configure aws lambda. </p><p>My <code>app.py</code></p><pre><code>from flask import Flask
import json
app = Flask(__name__)

@app.route('/')
def hello(event, context):
         return {
            "statusCode": 200,
            "body": json.dumps({
                "message": "Success"
            })
        }

if __name__ == '__main__':
    app.run(debug=True)</code></pre><p>Corresponding <code>template.yaml</code> file </p><pre><code>AWSTemplateFormatVersion: "2010-09-09"
Transform: AWS::Serverless-2016-10-31

Resources:
  FlaskAppLambda:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: hello_world/
      Handler: app.hello
      Runtime: python3.9
      Events:
        FlaskAppApi:
          Type: Api
          Properties:
            Path: /
            Method: get</code></pre><h3>Node: Express</h3><p>While I was using zip as a package type of Python deployment, when you use Node, the aws template is naturally tied with the Docker container, but you can also choose to not use it.</p><p>Basic folder structure</p><pre><code>.
&#9500;&#9472;&#9472; README.md
&#9500;&#9472;&#9472; events
&#9500;&#9472;&#9472; hello-world
&#9474;   &#9500;&#9472;&#9472; Dockerfile
&#9474;   &#9500;&#9472;&#9472; app.mjs
&#9474;   &#9500;&#9472;&#9472; handler.mjs
&#9474;   &#9500;&#9472;&#9472; index.mjs
&#9474;   &#9500;&#9472;&#9472; node_modules
&#9474;   &#9500;&#9472;&#9472; package-lock.json
&#9474;   &#9500;&#9472;&#9472; package.json
&#9474;   &#9492;&#9472;&#9472; tests
&#9500;&#9472;&#9472; samconfig.toml
&#9492;&#9472;&#9472; template.yaml</code></pre><p>Some useful command lines to see if your container is correctly connected with your Node. </p><ul><li><p>To see all containers: <code>docker ps -a</code></p></li><li><p>To see only the running ones: <code>docker ps</code></p></li><li><p>To run a specific container: <code>docker run --platform linux/amd64 -it helloworldfunction:nodejs18.x-v1</code></p></li></ul><p>Here, you will need to modify several files: <code>index.mjs</code>, <code>template.yaml</code>. I bolded all the code that I added apart from the template. </p><p>The aws template comes with <code>app.mjs</code></p><pre><code>/**
 *
 * Event doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-input-format
 * @param {Object} event - API Gateway Lambda Proxy Input Format
 *
 * Context doc: https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-context.html
 * @param {Object} context
 *
 * Return doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html
 * @returns {Object} object - API Gateway Lambda Proxy Output Format
 *
 */

export const lambdaHandler = async (event, context) =&gt; {
  try {
    // Check if the HTTP method is POST
    if (event.httpMethod !== "POST") {
      return {
        statusCode: 405, // Method Not Allowed
        body: JSON.stringify({
          error: "Method not allowed. Use POST method.",
        }),
      };
    }

    // Parse the incoming request body
    const requestBody = JSON.parse(event.body);

    // Your POST request handling logic here

    return {
      statusCode: 200,
      body: JSON.stringify({
        message: "hello world",
      }),
    };
  } catch (err) {
    console.log(err);
    return {
      statusCode: 500,
      body: JSON.stringify({
        error: "Internal Server Error",
      }),
    };
  }
};</code></pre><p>Create a new file: <code>index.mjs </code></p><pre><code><strong>import express from "express";

const app_test = express();

app_test.get("/myfunction/get", (req, res) =&gt; {
  console.log("Received a GET request to /myfunction");
  res.json({ message: "Hello, World!" });
});

// Handler for POST requests to /hello
app_test.post("/myfunction/post", (req, res) =&gt; {
  console.log("Received a POST request to /myfunction/hell");
  res.json({ message: "Received a POST request to /myfunction/hell" });
});

const port = 3002;
app_test.listen(port, () =&gt; {
  console.log(`Server running at http://localhost:${port}`);
});

export default app_test;</strong></code></pre><p>Modify <code>template.yaml</code></p><pre><code>AWSTemplateFormatVersion: "2010-09-09"
Transform: AWS::Serverless-2016-10-31
Description: &gt;
  sam-node-template

  Sample SAM Template for sam-node-template

# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
Globals:
  Function:
    Timeout: 3

Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      PackageType: Image
      Architectures:
        - x86_64
      Events:
        HelloWorld:
          Type: Api
          Properties:
            Path: /
            Method: post
    Metadata:
      DockerTag: nodejs18.x-v1
      DockerContext: ./hello-world
      Dockerfile: Dockerfile
  # Define the functions section here
  <strong>MyFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: hello-world/ #path to the function code
      Handler: handler.hello
      Runtime: nodejs18.x
      Events:
        MyGetFunction:
          Type: Api
          Properties:
            Path: /myfunction/get
            Method: GET
        MyPostFunction:
          Type: Api
          Properties:
            Path: /myfunction/post
            Method: POST</strong>

Outputs:
  # ServerlessRestApi is an implicit API created out of Events key under Serverless::Function
  # Find out more about other implicit resources you can reference within SAM
  # https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api

  HelloWorldApi:
    Description: "API Gateway endpoint URL for Prod stage for Hello World function"
    Value: !Sub "https://${HelloWorldFunction}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/"
  HelloWorldFunction:
    Description: "Hello World Lambda Function ARN"
    Value: !GetAtt HelloWorldFunction.Arn
  HelloWorldFunctionIamRole:
    Description: "Implicit IAM Role created for Hello World function"
    Value: !GetAtt HelloWorldFunctionRole.Arn
  <strong>MyFunctionArn:
    Description: "ARN of MyFunction"
    Value: !GetAtt MyFunction.Arn
  MyFunctionApi:
    Description: "API of MyFunction"
    Value: !Sub "https://${MyFunction}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/"
  MyFunctionIamRole:
    Description: "Implicit IAM Role created for My function"
    Value: !GetAtt MyFunctionRole.Arn</strong></code></pre><h2>Learning Strategies </h2><ol><li><p>Always remember to run it locally first.  </p><ol><li><p>Run without lambda: You can run with your Python through <code>python3 app.py</code> or <code>node index.js</code>. </p></li><li><p>Run with lambda locally: You can build with <code>sam build</code>, test with <code>sam validate</code>, and test your local API through <code>sam local start-api</code>. </p></li><li><p>Run lambda deployment: After <code>sam deploy</code>, look around your aws cloud console to gain bug reports. You can also directly add an API test on the console to prevent authentication or other potential problems. </p></li></ol></li><li><p><strong>Test the deployment environment first before integrating it with your code</strong>: This is the biggest learning I gained. Usually, I rush to integrate the deployment code with my existing codebase, but the bug becomes very complex because of too many moving parts involved. This time, I played around the code with Python and Node first to make sure I understood how to tweak it. I only integrate my Nodejs deployment code with my codebase when I&#8217;m confident that my get and post request both work on my deployment testing code. </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_!dLoL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11961d0b-93f3-47a1-8d75-4a5acb9e3c14_1652x1330.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dLoL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11961d0b-93f3-47a1-8d75-4a5acb9e3c14_1652x1330.png 424w, https://substackcdn.com/image/fetch/$s_!dLoL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11961d0b-93f3-47a1-8d75-4a5acb9e3c14_1652x1330.png 848w, https://substackcdn.com/image/fetch/$s_!dLoL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11961d0b-93f3-47a1-8d75-4a5acb9e3c14_1652x1330.png 1272w, https://substackcdn.com/image/fetch/$s_!dLoL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11961d0b-93f3-47a1-8d75-4a5acb9e3c14_1652x1330.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dLoL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11961d0b-93f3-47a1-8d75-4a5acb9e3c14_1652x1330.png" width="1456" height="1172" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/11961d0b-93f3-47a1-8d75-4a5acb9e3c14_1652x1330.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1172,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:229089,&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_!dLoL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11961d0b-93f3-47a1-8d75-4a5acb9e3c14_1652x1330.png 424w, https://substackcdn.com/image/fetch/$s_!dLoL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11961d0b-93f3-47a1-8d75-4a5acb9e3c14_1652x1330.png 848w, https://substackcdn.com/image/fetch/$s_!dLoL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11961d0b-93f3-47a1-8d75-4a5acb9e3c14_1652x1330.png 1272w, https://substackcdn.com/image/fetch/$s_!dLoL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11961d0b-93f3-47a1-8d75-4a5acb9e3c14_1652x1330.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 aria-hidden="true" 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><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><h2>Working templates on my Github</h2><ul><li><p>Node template: <a href="https://github.com/esther119/sam-node-template">here</a></p></li><li><p>Node template with express: <a href="https://github.com/esther119/sam-node-template/tree/node-express">here</a></p></li><li><p>Python template: <a href="https://github.com/esther119/sam-python-template">here</a></p></li><li><p>Python Flask template: <a href="https://github.com/esther119/sam-python-template/tree/flask">here</a></p></li></ul>]]></content:encoded></item><item><title><![CDATA[Rethink the self-learning journey for a junior engineer]]></title><description><![CDATA[Painkiller development]]></description><link>https://learnlearnlearn.substack.com/p/rethink-the-self-learning-journey</link><guid isPermaLink="false">https://learnlearnlearn.substack.com/p/rethink-the-self-learning-journey</guid><dc:creator><![CDATA[Esther]]></dc:creator><pubDate>Wed, 31 Jan 2024 00:56:35 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb36bd2c4-ad17-4231-972d-c4b0a1bcee01_1517x1232.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>How most people think of programming </h2><p>Most people associate programming with generating lots of codes. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Bz3G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb36bd2c4-ad17-4231-972d-c4b0a1bcee01_1517x1232.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Bz3G!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb36bd2c4-ad17-4231-972d-c4b0a1bcee01_1517x1232.png 424w, https://substackcdn.com/image/fetch/$s_!Bz3G!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb36bd2c4-ad17-4231-972d-c4b0a1bcee01_1517x1232.png 848w, https://substackcdn.com/image/fetch/$s_!Bz3G!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb36bd2c4-ad17-4231-972d-c4b0a1bcee01_1517x1232.png 1272w, https://substackcdn.com/image/fetch/$s_!Bz3G!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb36bd2c4-ad17-4231-972d-c4b0a1bcee01_1517x1232.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Bz3G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb36bd2c4-ad17-4231-972d-c4b0a1bcee01_1517x1232.png" width="514" height="417.27197802197804" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b36bd2c4-ad17-4231-972d-c4b0a1bcee01_1517x1232.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1182,&quot;width&quot;:1456,&quot;resizeWidth&quot;:514,&quot;bytes&quot;:1970991,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Bz3G!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb36bd2c4-ad17-4231-972d-c4b0a1bcee01_1517x1232.png 424w, https://substackcdn.com/image/fetch/$s_!Bz3G!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb36bd2c4-ad17-4231-972d-c4b0a1bcee01_1517x1232.png 848w, https://substackcdn.com/image/fetch/$s_!Bz3G!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb36bd2c4-ad17-4231-972d-c4b0a1bcee01_1517x1232.png 1272w, https://substackcdn.com/image/fetch/$s_!Bz3G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb36bd2c4-ad17-4231-972d-c4b0a1bcee01_1517x1232.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 aria-hidden="true" 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><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>And many current AI solutions emphasize alleviating the burden on humans to write code. However, the actual process of programming is heavily tied to various skill sets, including solving engineering problems, project management, and the ability to self-learn&#8212;especially when building projects as a way to progress. Here, I want to explore how we might rethink the self-learning journey for junior engineers as they attempt to learn through building projects.</p><h2>What programming actually is in a project </h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Wfu2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd4c433-b134-4551-b41e-5e42f5759967_1928x1421.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Wfu2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd4c433-b134-4551-b41e-5e42f5759967_1928x1421.png 424w, https://substackcdn.com/image/fetch/$s_!Wfu2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd4c433-b134-4551-b41e-5e42f5759967_1928x1421.png 848w, https://substackcdn.com/image/fetch/$s_!Wfu2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd4c433-b134-4551-b41e-5e42f5759967_1928x1421.png 1272w, https://substackcdn.com/image/fetch/$s_!Wfu2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd4c433-b134-4551-b41e-5e42f5759967_1928x1421.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Wfu2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd4c433-b134-4551-b41e-5e42f5759967_1928x1421.png" width="1456" height="1073" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ffd4c433-b134-4551-b41e-5e42f5759967_1928x1421.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1073,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:748638,&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;: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_!Wfu2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd4c433-b134-4551-b41e-5e42f5759967_1928x1421.png 424w, https://substackcdn.com/image/fetch/$s_!Wfu2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd4c433-b134-4551-b41e-5e42f5759967_1928x1421.png 848w, https://substackcdn.com/image/fetch/$s_!Wfu2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd4c433-b134-4551-b41e-5e42f5759967_1928x1421.png 1272w, https://substackcdn.com/image/fetch/$s_!Wfu2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd4c433-b134-4551-b41e-5e42f5759967_1928x1421.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 aria-hidden="true" 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><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>When a junior engineer attempts to solve a problem or implement new ideas, they need to begin with technical planning, research various technologies to address the issue, compare different solutions, formulate hypotheses, and validate these hypotheses through testing. However, each step requires different abilities:</p><ol><li><p><strong>Planning:</strong> Ability to plan out solutions within the desired difficulty level.</p></li><li><p><strong>Research:</strong> Ability to differentiate between good and useful resources (evaluation) and those that are not, and identify important learning spots.</p></li><li><p><strong>Hypothesis Formulation:</strong> Ability to detect incorrect assumptions they may have when setting up hypotheses.</p></li><li><p><strong>Hypothesis Validation:</strong> Ability to proof of concepts that can be transferred to the actual project.</p></li><li><p><strong>Implementation: </strong>Ability to implement the solutions and unblock when encountering problems.</p></li></ol><p>They might need multiple iterations. For instance, to host a full-stack image gallery app, they might consider different technologies including Node.js, Vercel, and Next.js. If they want to decide which technology will be best to quickly load the images, they will need to test different solutions through research and hypothesis testing for each technology.</p><h2>3 Problems in self-learning for a junior engineer </h2><h3>Research: The superficial learning problem </h3><p>If you are familiar with Bayesian inference, you probably know that our minds constantly update when new information comes in. However, the difference between a junior and senior engineer lies in experience, indicating the ability to assign correct weight to prioritize important concepts or problems for deeper exploration. Since junior engineers don&#8217;t have much prior experience, they are more likely to treat all information with equal weight, feeling puzzled by potential directions, and unable to delve deep into essential concepts.</p><p>For instance, even in React, one might simply see `props.name` and believe they understand `props` without comprehending the relationships between child and parent components, the concept of single-direction data flow, and the idea of lifting state &#8212; concepts strongly connected to the initial design of props.</p><p>More often than not, important concepts are overlooked by simply copying and pasting without a deep understanding of the underlying principles. This results in an inability to grasp more complicated concepts in the future.</p><h3>Hypothesis testing: The wrong assumption problem</h3><p>Whenever we try to implement an idea or resolve a problem, we will have a "bug hypothesis." These hypotheses are formed based on evidence and assumptions. If we set our assumptions incorrectly, we can never formulate a good hypothesis to address our problems at hand.</p><p>For instance, I spent the entire afternoon working on the integration from text to speech, wondering why the generated speech couldn&#8217;t be played. It was only later that I discovered the issue&#8212; the QuickTime Player on Mac doesn't support MP3 as a file format!</p><p>However, operating under my implicit assumption that my QuickTime Player could definitely play my MP3 file, I spent time working on the wrong hypothesis until a senior engineer friend pointed it out.</p><h3>Validate hypothesis &amp; Implementation: The give-up problem </h3><p>The process of validating hypotheses can consume a significant amount of time and energy, often representing a common period when individuals abandon their projects.</p><p>When building projects, I constantly face decision-making challenges. Questions such as "Which technology is best suited to solve this problem?" and "How much time should I invest in a particular testing?" consistently arise. At times, the need to learn a new technology to test a hypothesis adds complexity. This process can be both painful and time-consuming, ultimately proving fruitless for the current project due to underestimation of difficulty or limitations in available learning resources.</p><p>For example, my roommate rebuilt her entire language learning app without using Unity because she hypothesized that she could achieve her desired features without it. This hypothesis was based on extensive online research and initial proof-of-concept building. However, she ended up resetting her entire GitHub repository painfully and relearning Unity when she realized her hypothesis was falsified. </p><p>While the initial hypothesis may seem promising, unexpected complexities or limitations can emerge during the testing and implementation phases, and the flood of overwhelming negative emotions becomes a reason for learners to give up on their projects.</p><h1>How might we ease the pain? </h1><p>I want to temporarily disregard online coding boot camps and paid classes as solutions due to the monetary constraints that most junior engineers face, being either poor students or recent graduates.</p><h2>Current personal solutions</h2><p>The simplest way to observe what learners do is by working on safe projects (e.g.  working on projects with existing working code on YouTube or replicating code from others' GitHub repositories) </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2mn2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9443dc63-8491-4069-9ea3-31f4e499811e_1592x1183.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2mn2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9443dc63-8491-4069-9ea3-31f4e499811e_1592x1183.png 424w, https://substackcdn.com/image/fetch/$s_!2mn2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9443dc63-8491-4069-9ea3-31f4e499811e_1592x1183.png 848w, https://substackcdn.com/image/fetch/$s_!2mn2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9443dc63-8491-4069-9ea3-31f4e499811e_1592x1183.png 1272w, https://substackcdn.com/image/fetch/$s_!2mn2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9443dc63-8491-4069-9ea3-31f4e499811e_1592x1183.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2mn2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9443dc63-8491-4069-9ea3-31f4e499811e_1592x1183.png" width="1456" height="1082" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9443dc63-8491-4069-9ea3-31f4e499811e_1592x1183.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1082,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:332448,&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_!2mn2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9443dc63-8491-4069-9ea3-31f4e499811e_1592x1183.png 424w, https://substackcdn.com/image/fetch/$s_!2mn2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9443dc63-8491-4069-9ea3-31f4e499811e_1592x1183.png 848w, https://substackcdn.com/image/fetch/$s_!2mn2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9443dc63-8491-4069-9ea3-31f4e499811e_1592x1183.png 1272w, https://substackcdn.com/image/fetch/$s_!2mn2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9443dc63-8491-4069-9ea3-31f4e499811e_1592x1183.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 aria-hidden="true" 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><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>However, this strategy introduces a conflict between creativity and safety when undertaking new projects. Some of my friends build numerous projects but only by following the successful and existing work of others because they lack confidence in their ability to gauge the scope and difficulty of constructing their own. In fact, they simply don't know how to start.</p><p>This safety-first approach not only diminishes the enjoyment of building but also lacks an assessment of applying the concepts learned. How can we de-risk the building process and provide learners with more freedom to imagine what they want to realize?</p><h2>Community Solutions: Buildspace</h2><p>I've come across another existing solution that is well-known in Silicon Valley: Buildspace. This event invites learners to submit their weekly projects and share comments on Twitter as part of an accountability system. However, it primarily addresses motivation issues and does not alleviate the other challenges associated with learning engineering through building passion projects.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sjs-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21b4f1cc-0fc3-4666-b4e2-67a9c3777630_960x1157.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sjs-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21b4f1cc-0fc3-4666-b4e2-67a9c3777630_960x1157.png 424w, https://substackcdn.com/image/fetch/$s_!sjs-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21b4f1cc-0fc3-4666-b4e2-67a9c3777630_960x1157.png 848w, https://substackcdn.com/image/fetch/$s_!sjs-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21b4f1cc-0fc3-4666-b4e2-67a9c3777630_960x1157.png 1272w, https://substackcdn.com/image/fetch/$s_!sjs-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21b4f1cc-0fc3-4666-b4e2-67a9c3777630_960x1157.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sjs-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21b4f1cc-0fc3-4666-b4e2-67a9c3777630_960x1157.png" width="450" height="542.34375" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/21b4f1cc-0fc3-4666-b4e2-67a9c3777630_960x1157.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1157,&quot;width&quot;:960,&quot;resizeWidth&quot;:450,&quot;bytes&quot;:627623,&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_!sjs-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21b4f1cc-0fc3-4666-b4e2-67a9c3777630_960x1157.png 424w, https://substackcdn.com/image/fetch/$s_!sjs-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21b4f1cc-0fc3-4666-b4e2-67a9c3777630_960x1157.png 848w, https://substackcdn.com/image/fetch/$s_!sjs-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21b4f1cc-0fc3-4666-b4e2-67a9c3777630_960x1157.png 1272w, https://substackcdn.com/image/fetch/$s_!sjs-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21b4f1cc-0fc3-4666-b4e2-67a9c3777630_960x1157.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 aria-hidden="true" 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><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><h2>How can I pick up full-stack development in a few months?</h2><p>Reflecting on my personal learning experience, I realize that the reason I was able to grasp full-stack development in a short time is not solely due to my hard work. Many learners also put in a lot of effort to learn engineering. However, the key factor contributing to my success was the abundance of resources in San Francisco. In this environment, I am constantly exposed to best practices in coding and easy-to-use, up-to-date technology. Participating in hackathons exposes me to what's possible, and I frequently encounter people who are happy to teach me the entire mental models for new technology, eliminating the need to slowly piece together various bits of information.</p><p>For example, in an effort to reduce my give-up rate and address my poor intuition in problem-solving, I force myself to use a well-structured template when building side projects. I break down projects into multiple versions of MVP, build proof of concepts before adopting new technology, time-box my exploration of new solutions, and iteratively reflect and improve during my learning process. Yet, I found that these practices were still not quite enough, and I wonder how we can do better than this.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!m-86!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36db0e8c-7bcb-441b-9c56-86a8d2309227_1888x1696.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!m-86!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36db0e8c-7bcb-441b-9c56-86a8d2309227_1888x1696.png 424w, https://substackcdn.com/image/fetch/$s_!m-86!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36db0e8c-7bcb-441b-9c56-86a8d2309227_1888x1696.png 848w, https://substackcdn.com/image/fetch/$s_!m-86!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36db0e8c-7bcb-441b-9c56-86a8d2309227_1888x1696.png 1272w, https://substackcdn.com/image/fetch/$s_!m-86!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36db0e8c-7bcb-441b-9c56-86a8d2309227_1888x1696.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!m-86!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36db0e8c-7bcb-441b-9c56-86a8d2309227_1888x1696.png" width="1456" height="1308" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/36db0e8c-7bcb-441b-9c56-86a8d2309227_1888x1696.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1308,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:285307,&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_!m-86!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36db0e8c-7bcb-441b-9c56-86a8d2309227_1888x1696.png 424w, https://substackcdn.com/image/fetch/$s_!m-86!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36db0e8c-7bcb-441b-9c56-86a8d2309227_1888x1696.png 848w, https://substackcdn.com/image/fetch/$s_!m-86!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36db0e8c-7bcb-441b-9c56-86a8d2309227_1888x1696.png 1272w, https://substackcdn.com/image/fetch/$s_!m-86!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36db0e8c-7bcb-441b-9c56-86a8d2309227_1888x1696.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 aria-hidden="true" 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><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><h2>Our idea: The development of a painkiller</h2><p>We aim to address the three problems in self-learning for juniors:</p><ul><li><p>Detecting hidden assumptions by asking guided questions.</p></li><li><p>Encouraging in-depth learning through following up on new concepts.</p></li><li><p>Auto-generating code for proof of concepts to validate hypotheses.</p></li></ul><p>What we are essentially imagining is having a senior engineer sitting next to you, with intelligence-guided questions to uncover your assumptions and lead you to the right problems with confident evidence of proof of concepts. </p><p>This is the procedure that my friend and I have built for this first-generation tool:</p><ol><li><p>Track the problems you are attempting to work on during research.</p></li><li><p>Provide suggested questions to address hidden assumptions and problems.</p></li><li><p>Generate explanations for you.</p></li><li><p>Offer follow-up questions to encourage learning beyond the superficial, guiding you down the rabbit hole.</p></li><li><p>Provide sample code so you can "see" the concept and easily test hypotheses.</p></li></ol><p>For instance, when I attempted to learn about information theory, the AI gave me Huffman code to understand how information is compressed. Similarly, when exploring the difference between runtime and build time, the tool generated a timer with simulation for runtime and build time so I can see the difference. </p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;109824b2-ed84-4cd8-85df-94d5d4fa8348&quot;,&quot;duration&quot;:null}"></div><p>Based on our interviews with learners, most people find the most value in the sample code generation. The "Ah-ha" moment from seeing sample codes allows people to learn through an immediate connection between their hypotheses and the real output. While the guided questions are useful to re-center learners on better questions, we haven't been able to observe the in-depth dive of learnings from more follow-up questions. </p><p>If von Neumann&#8217;s First Draft has already transformed our understanding of machines from a fancier specialized adding machine to a general-purpose tool, I cannot see why the self-learning journey of a junior engineer cannot imagine whatever ideas they want to build in their minds. If hardware is our instrument, software should be the music that allows us complete freedom to play and experiment with different notes Hence, the self-learning journey should allow as much creativity and fun as possible, steering away from the grinding and emotionally traumatizing process learners usually describe and fear. The purpose of self-learning software should be to play, not to cause pain.</p><p>All in all, I love this entire building process because I can observe different learners and see how they solve their problems in their heads, all while rethinking how to improve my own learning process. This idea is very preliminary, but the point is to throw out bricks to attract jade ideas from people (&#25291;&#30938;&#24341;&#29577;). </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AvmS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe297afa0-5d62-4e20-acae-62928e05b5d2_2140x1244.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AvmS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe297afa0-5d62-4e20-acae-62928e05b5d2_2140x1244.png 424w, https://substackcdn.com/image/fetch/$s_!AvmS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe297afa0-5d62-4e20-acae-62928e05b5d2_2140x1244.png 848w, https://substackcdn.com/image/fetch/$s_!AvmS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe297afa0-5d62-4e20-acae-62928e05b5d2_2140x1244.png 1272w, https://substackcdn.com/image/fetch/$s_!AvmS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe297afa0-5d62-4e20-acae-62928e05b5d2_2140x1244.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AvmS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe297afa0-5d62-4e20-acae-62928e05b5d2_2140x1244.png" width="1456" height="846" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e297afa0-5d62-4e20-acae-62928e05b5d2_2140x1244.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:846,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:285704,&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_!AvmS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe297afa0-5d62-4e20-acae-62928e05b5d2_2140x1244.png 424w, https://substackcdn.com/image/fetch/$s_!AvmS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe297afa0-5d62-4e20-acae-62928e05b5d2_2140x1244.png 848w, https://substackcdn.com/image/fetch/$s_!AvmS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe297afa0-5d62-4e20-acae-62928e05b5d2_2140x1244.png 1272w, https://substackcdn.com/image/fetch/$s_!AvmS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe297afa0-5d62-4e20-acae-62928e05b5d2_2140x1244.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 aria-hidden="true" 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><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></p>]]></content:encoded></item><item><title><![CDATA[Product Design: Help junior engineers learn deeper in programming ]]></title><description><![CDATA[Iteration #1: Learning through nested highlighting]]></description><link>https://learnlearnlearn.substack.com/p/product-design-help-junior-engineers</link><guid isPermaLink="false">https://learnlearnlearn.substack.com/p/product-design-help-junior-engineers</guid><dc:creator><![CDATA[Esther]]></dc:creator><pubDate>Tue, 02 Jan 2024 05:31:05 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2342ab18-561e-4a5d-867d-dd65b2082f95_2160x1620.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As I was researching how to design our first MVP for our <a href="https://learnlearnlearn.substack.com/p/learning-idea-1-help-junior-engineer">Learning idea #1: Help junior engineers learn programming</a>, I felt super depressed. Because people have already done all the ideas! What should I do?  </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6wAc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c18105b-5a20-463d-a2e4-545f8a6c17dd_2440x1352.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6wAc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c18105b-5a20-463d-a2e4-545f8a6c17dd_2440x1352.png 424w, https://substackcdn.com/image/fetch/$s_!6wAc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c18105b-5a20-463d-a2e4-545f8a6c17dd_2440x1352.png 848w, https://substackcdn.com/image/fetch/$s_!6wAc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c18105b-5a20-463d-a2e4-545f8a6c17dd_2440x1352.png 1272w, https://substackcdn.com/image/fetch/$s_!6wAc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c18105b-5a20-463d-a2e4-545f8a6c17dd_2440x1352.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6wAc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c18105b-5a20-463d-a2e4-545f8a6c17dd_2440x1352.png" width="1456" height="807" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6c18105b-5a20-463d-a2e4-545f8a6c17dd_2440x1352.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:807,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1898087,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6wAc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c18105b-5a20-463d-a2e4-545f8a6c17dd_2440x1352.png 424w, https://substackcdn.com/image/fetch/$s_!6wAc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c18105b-5a20-463d-a2e4-545f8a6c17dd_2440x1352.png 848w, https://substackcdn.com/image/fetch/$s_!6wAc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c18105b-5a20-463d-a2e4-545f8a6c17dd_2440x1352.png 1272w, https://substackcdn.com/image/fetch/$s_!6wAc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c18105b-5a20-463d-a2e4-545f8a6c17dd_2440x1352.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 aria-hidden="true" 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><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">research for inspiration</figcaption></figure></div><p>In short, our idea is about: <strong>We want to help junior engineers to learn deeper. Deep enough for them not only to understand how a piece of code works, but learn how to apply it and potentially provide problem context and design philosophy so they don&#8217;t only know how to do it, but why and when to use a concept.</strong> </p><p>Because the problem is, as a beginner for learning a new tool or new concept, we always stop at a surface level of learning, because we assume that we roughly know it. Or, we are distracted by so many external resources that we see, and overwhelmed by the amount of information. Can we build a tool that allows engineers to really drill down into some important concepts and learn them by heart? </p><p>To do that, my design research focuses on 3 main dimensions: Highlighting tools, coding assistants, and chat-based tools to see how existing solutions look like. </p><ul><li><p>Highlighting tools: These range from just highlighting the website to highlighting and creating a dictionary for keywords, and even making all the highlights a knowledge card so the learning can connect to each other. </p></li><li><p>Coding assistant: Coding assistant usually has a side panel at VS code, where they highlight the code and generate how to modify it. </p></li><li><p>Chat-based tools: Chat with websites or co-pilot with all the websites you are currently browsing </p></li></ul><h1>Highlighting tools </h1><h2><a href="https://www.highlighty.app/">Highlighty</a></h2><ul><li><p>function: highlight </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_!NY0y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8dce1b1-d4c9-4bd2-916a-a43690569f5b_1728x910.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NY0y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8dce1b1-d4c9-4bd2-916a-a43690569f5b_1728x910.png 424w, https://substackcdn.com/image/fetch/$s_!NY0y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8dce1b1-d4c9-4bd2-916a-a43690569f5b_1728x910.png 848w, https://substackcdn.com/image/fetch/$s_!NY0y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8dce1b1-d4c9-4bd2-916a-a43690569f5b_1728x910.png 1272w, https://substackcdn.com/image/fetch/$s_!NY0y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8dce1b1-d4c9-4bd2-916a-a43690569f5b_1728x910.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NY0y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8dce1b1-d4c9-4bd2-916a-a43690569f5b_1728x910.png" width="1456" height="767" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e8dce1b1-d4c9-4bd2-916a-a43690569f5b_1728x910.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:767,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1089990,&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_!NY0y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8dce1b1-d4c9-4bd2-916a-a43690569f5b_1728x910.png 424w, https://substackcdn.com/image/fetch/$s_!NY0y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8dce1b1-d4c9-4bd2-916a-a43690569f5b_1728x910.png 848w, https://substackcdn.com/image/fetch/$s_!NY0y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8dce1b1-d4c9-4bd2-916a-a43690569f5b_1728x910.png 1272w, https://substackcdn.com/image/fetch/$s_!NY0y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8dce1b1-d4c9-4bd2-916a-a43690569f5b_1728x910.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 aria-hidden="true" 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><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><h2><a href="https://feedly.com/">Feedly</a></h2><ul><li><p>Highlight + search for keywords</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_!LY71!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff91024e-3c00-4188-bd58-512aeb198bda_1986x1444.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LY71!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff91024e-3c00-4188-bd58-512aeb198bda_1986x1444.png 424w, https://substackcdn.com/image/fetch/$s_!LY71!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff91024e-3c00-4188-bd58-512aeb198bda_1986x1444.png 848w, https://substackcdn.com/image/fetch/$s_!LY71!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff91024e-3c00-4188-bd58-512aeb198bda_1986x1444.png 1272w, https://substackcdn.com/image/fetch/$s_!LY71!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff91024e-3c00-4188-bd58-512aeb198bda_1986x1444.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LY71!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff91024e-3c00-4188-bd58-512aeb198bda_1986x1444.png" width="1456" height="1059" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ff91024e-3c00-4188-bd58-512aeb198bda_1986x1444.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1059,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:578346,&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_!LY71!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff91024e-3c00-4188-bd58-512aeb198bda_1986x1444.png 424w, https://substackcdn.com/image/fetch/$s_!LY71!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff91024e-3c00-4188-bd58-512aeb198bda_1986x1444.png 848w, https://substackcdn.com/image/fetch/$s_!LY71!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff91024e-3c00-4188-bd58-512aeb198bda_1986x1444.png 1272w, https://substackcdn.com/image/fetch/$s_!LY71!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff91024e-3c00-4188-bd58-512aeb198bda_1986x1444.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 aria-hidden="true" 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><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><h2><a href="https://www.sentelo.com/">Sentelo</a></h2><ul><li><p>function: Highlight + summarize + explain + give an example</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_!DSCc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe01d7d19-f81d-4b1e-8463-82ef77b5c1a3_2222x1314.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DSCc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe01d7d19-f81d-4b1e-8463-82ef77b5c1a3_2222x1314.png 424w, https://substackcdn.com/image/fetch/$s_!DSCc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe01d7d19-f81d-4b1e-8463-82ef77b5c1a3_2222x1314.png 848w, https://substackcdn.com/image/fetch/$s_!DSCc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe01d7d19-f81d-4b1e-8463-82ef77b5c1a3_2222x1314.png 1272w, https://substackcdn.com/image/fetch/$s_!DSCc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe01d7d19-f81d-4b1e-8463-82ef77b5c1a3_2222x1314.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DSCc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe01d7d19-f81d-4b1e-8463-82ef77b5c1a3_2222x1314.png" width="1456" height="861" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e01d7d19-f81d-4b1e-8463-82ef77b5c1a3_2222x1314.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:861,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1281637,&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_!DSCc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe01d7d19-f81d-4b1e-8463-82ef77b5c1a3_2222x1314.png 424w, https://substackcdn.com/image/fetch/$s_!DSCc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe01d7d19-f81d-4b1e-8463-82ef77b5c1a3_2222x1314.png 848w, https://substackcdn.com/image/fetch/$s_!DSCc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe01d7d19-f81d-4b1e-8463-82ef77b5c1a3_2222x1314.png 1272w, https://substackcdn.com/image/fetch/$s_!DSCc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe01d7d19-f81d-4b1e-8463-82ef77b5c1a3_2222x1314.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 aria-hidden="true" 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><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><h2><a href="https://chromewebstore.google.com/detail/recall-summarize-save-any/ldbooahljamnocpaahaidnmlgfklbben">Recall</a> </h2><ul><li><p>function: highlight + knowledge card + connect knowledge + question practices</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_!kGL9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feddeb90b-1566-4376-a18d-0fd9a868a02b_2698x1482.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kGL9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feddeb90b-1566-4376-a18d-0fd9a868a02b_2698x1482.png 424w, https://substackcdn.com/image/fetch/$s_!kGL9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feddeb90b-1566-4376-a18d-0fd9a868a02b_2698x1482.png 848w, https://substackcdn.com/image/fetch/$s_!kGL9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feddeb90b-1566-4376-a18d-0fd9a868a02b_2698x1482.png 1272w, https://substackcdn.com/image/fetch/$s_!kGL9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feddeb90b-1566-4376-a18d-0fd9a868a02b_2698x1482.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kGL9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feddeb90b-1566-4376-a18d-0fd9a868a02b_2698x1482.png" width="1456" height="800" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eddeb90b-1566-4376-a18d-0fd9a868a02b_2698x1482.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:800,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2031613,&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_!kGL9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feddeb90b-1566-4376-a18d-0fd9a868a02b_2698x1482.png 424w, https://substackcdn.com/image/fetch/$s_!kGL9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feddeb90b-1566-4376-a18d-0fd9a868a02b_2698x1482.png 848w, https://substackcdn.com/image/fetch/$s_!kGL9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feddeb90b-1566-4376-a18d-0fd9a868a02b_2698x1482.png 1272w, https://substackcdn.com/image/fetch/$s_!kGL9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feddeb90b-1566-4376-a18d-0fd9a868a02b_2698x1482.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 aria-hidden="true" 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><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><h1>Coding assistant</h1><h2><a href="https://www.codium.ai/">Codeium</a></h2><ul><li><p>function: Generate code explanation and code at their sidebar</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_!lFV8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd45cb1f-1a2e-4037-9e5c-e931ccc475a5_960x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lFV8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd45cb1f-1a2e-4037-9e5c-e931ccc475a5_960x720.png 424w, https://substackcdn.com/image/fetch/$s_!lFV8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd45cb1f-1a2e-4037-9e5c-e931ccc475a5_960x720.png 848w, https://substackcdn.com/image/fetch/$s_!lFV8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd45cb1f-1a2e-4037-9e5c-e931ccc475a5_960x720.png 1272w, https://substackcdn.com/image/fetch/$s_!lFV8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd45cb1f-1a2e-4037-9e5c-e931ccc475a5_960x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lFV8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd45cb1f-1a2e-4037-9e5c-e931ccc475a5_960x720.png" width="960" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dd45cb1f-1a2e-4037-9e5c-e931ccc475a5_960x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:960,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:360103,&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_!lFV8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd45cb1f-1a2e-4037-9e5c-e931ccc475a5_960x720.png 424w, https://substackcdn.com/image/fetch/$s_!lFV8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd45cb1f-1a2e-4037-9e5c-e931ccc475a5_960x720.png 848w, https://substackcdn.com/image/fetch/$s_!lFV8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd45cb1f-1a2e-4037-9e5c-e931ccc475a5_960x720.png 1272w, https://substackcdn.com/image/fetch/$s_!lFV8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd45cb1f-1a2e-4037-9e5c-e931ccc475a5_960x720.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 aria-hidden="true" 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><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><h1>Chat</h1><h2><a href="https://chatwebpage.com/?via=topaitools">ChatWebpage</a></h2><ul><li><p>function: Chat with websites</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_!z3Mb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F717af4e2-bdc6-4aaa-b550-50cfe6f2c362_2490x1412.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!z3Mb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F717af4e2-bdc6-4aaa-b550-50cfe6f2c362_2490x1412.png 424w, https://substackcdn.com/image/fetch/$s_!z3Mb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F717af4e2-bdc6-4aaa-b550-50cfe6f2c362_2490x1412.png 848w, https://substackcdn.com/image/fetch/$s_!z3Mb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F717af4e2-bdc6-4aaa-b550-50cfe6f2c362_2490x1412.png 1272w, https://substackcdn.com/image/fetch/$s_!z3Mb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F717af4e2-bdc6-4aaa-b550-50cfe6f2c362_2490x1412.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!z3Mb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F717af4e2-bdc6-4aaa-b550-50cfe6f2c362_2490x1412.png" width="1456" height="826" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/717af4e2-bdc6-4aaa-b550-50cfe6f2c362_2490x1412.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:826,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:649658,&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_!z3Mb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F717af4e2-bdc6-4aaa-b550-50cfe6f2c362_2490x1412.png 424w, https://substackcdn.com/image/fetch/$s_!z3Mb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F717af4e2-bdc6-4aaa-b550-50cfe6f2c362_2490x1412.png 848w, https://substackcdn.com/image/fetch/$s_!z3Mb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F717af4e2-bdc6-4aaa-b550-50cfe6f2c362_2490x1412.png 1272w, https://substackcdn.com/image/fetch/$s_!z3Mb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F717af4e2-bdc6-4aaa-b550-50cfe6f2c362_2490x1412.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 aria-hidden="true" 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><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><h2><a href="https://sider.ai/">Sider</a></h2><p>function: chat + explain + summarize + translate + write + OCR + grammar check (basically whatever interaction that you might need with the browser) </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!u3Hz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd000ceec-fe6b-40b4-8c41-c9f1e2733ff4_2742x1588.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!u3Hz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd000ceec-fe6b-40b4-8c41-c9f1e2733ff4_2742x1588.png 424w, https://substackcdn.com/image/fetch/$s_!u3Hz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd000ceec-fe6b-40b4-8c41-c9f1e2733ff4_2742x1588.png 848w, https://substackcdn.com/image/fetch/$s_!u3Hz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd000ceec-fe6b-40b4-8c41-c9f1e2733ff4_2742x1588.png 1272w, https://substackcdn.com/image/fetch/$s_!u3Hz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd000ceec-fe6b-40b4-8c41-c9f1e2733ff4_2742x1588.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!u3Hz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd000ceec-fe6b-40b4-8c41-c9f1e2733ff4_2742x1588.png" width="1456" height="843" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d000ceec-fe6b-40b4-8c41-c9f1e2733ff4_2742x1588.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:843,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1402756,&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_!u3Hz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd000ceec-fe6b-40b4-8c41-c9f1e2733ff4_2742x1588.png 424w, https://substackcdn.com/image/fetch/$s_!u3Hz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd000ceec-fe6b-40b4-8c41-c9f1e2733ff4_2742x1588.png 848w, https://substackcdn.com/image/fetch/$s_!u3Hz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd000ceec-fe6b-40b4-8c41-c9f1e2733ff4_2742x1588.png 1272w, https://substackcdn.com/image/fetch/$s_!u3Hz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd000ceec-fe6b-40b4-8c41-c9f1e2733ff4_2742x1588.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 aria-hidden="true" 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><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>Many tools look really cool. However, most of the highlighting tools are limited to learning a keyword, not an entire concept. Even with the tool that won the Chrome extension award, <a href="https://sider.ai/">Sider</a>, acts more like an assistant for the web, but not for learning purposes. </p><p>Is there an opportunity that I can make a tool, that engineers can learn from a piece of code &#8594; to a concept &#8594; to the problem context or design philosophy to apply the concept? For example, can we look at props.name in react, but learn how the sharing state between components (Lifting State Up), to the single direction design philosophy in react? </p><p>To constrain the scope of MVP, we decided to only implement one idea: whenever there is a highlight, you will keep drilling down on that highlight. In contrast to asking one question on every different webpage, we are imagining a situation where you highlight something that you are curious or confused about, and AI will give you more explanation on it, and then you keep drilling down from the explanation that AI provides you. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wmMm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2342ab18-561e-4a5d-867d-dd65b2082f95_2160x1620.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wmMm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2342ab18-561e-4a5d-867d-dd65b2082f95_2160x1620.png 424w, https://substackcdn.com/image/fetch/$s_!wmMm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2342ab18-561e-4a5d-867d-dd65b2082f95_2160x1620.png 848w, https://substackcdn.com/image/fetch/$s_!wmMm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2342ab18-561e-4a5d-867d-dd65b2082f95_2160x1620.png 1272w, https://substackcdn.com/image/fetch/$s_!wmMm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2342ab18-561e-4a5d-867d-dd65b2082f95_2160x1620.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wmMm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2342ab18-561e-4a5d-867d-dd65b2082f95_2160x1620.png" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2342ab18-561e-4a5d-867d-dd65b2082f95_2160x1620.png&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;:344713,&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_!wmMm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2342ab18-561e-4a5d-867d-dd65b2082f95_2160x1620.png 424w, https://substackcdn.com/image/fetch/$s_!wmMm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2342ab18-561e-4a5d-867d-dd65b2082f95_2160x1620.png 848w, https://substackcdn.com/image/fetch/$s_!wmMm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2342ab18-561e-4a5d-867d-dd65b2082f95_2160x1620.png 1272w, https://substackcdn.com/image/fetch/$s_!wmMm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2342ab18-561e-4a5d-867d-dd65b2082f95_2160x1620.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 aria-hidden="true" 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><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>Well&#8230;for sure I&#8217;m not only imagining this. I would love to have coding examples to practice the new concepts, want to have AI to know where my exact blockage on this learning is, what to learn next, and how can I apply this concept to my project&#8230;&#8230;.</p><p>However, we decided just to focus on the nested highlighting idea for our first user testing round. We aren&#8217;t sure if this is a good idea yet! </p><div><hr></div><p>Feeling Note: I was initially feeling quite discouraged because I was that those top Chrome extension products cover even more functions! Even though our ideas have a 10% difference, 90% is the same. So&#8230;maybe I shouldn&#8217;t even try? But several friends told me, that the first version of ideas will always be similar and a product is great isn&#8217;t only because it&#8217;s a brand new idea, there are so many other things that matter. So I decided to give this idea a shot! </p>]]></content:encoded></item><item><title><![CDATA[Learning idea #1: Help junior engineers learn programming ]]></title><description><![CDATA[Learn react props & state in depth]]></description><link>https://learnlearnlearn.substack.com/p/learning-idea-1-help-junior-engineer</link><guid isPermaLink="false">https://learnlearnlearn.substack.com/p/learning-idea-1-help-junior-engineer</guid><dc:creator><![CDATA[Esther]]></dc:creator><pubDate>Fri, 29 Dec 2023 05:46:41 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08f77b9a-818a-44be-8402-36e7134faf86_2160x1620.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p>Prerequisite for this post: You will need to know some React to understand this post. </p></blockquote><p>If you have read <a href="https://learnlearnlearn.substack.com/p/the-key-to-learning-deeply-in-programming">The Key to Learning Deeply in Programming</a>, my friend and I start to wonder: Is there any way AI can uplift the stress of building side projects and help junior engineers learn better? </p><p>Today, I spent some time breaking down problems and ideating potential solutions, and I want to use React statement management as an example to demonstrate how might we learn deeply through AI. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5IVm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dd911bf-e467-4323-8f27-3e6f8a21c3c5_2378x1582.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5IVm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dd911bf-e467-4323-8f27-3e6f8a21c3c5_2378x1582.png 424w, https://substackcdn.com/image/fetch/$s_!5IVm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dd911bf-e467-4323-8f27-3e6f8a21c3c5_2378x1582.png 848w, https://substackcdn.com/image/fetch/$s_!5IVm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dd911bf-e467-4323-8f27-3e6f8a21c3c5_2378x1582.png 1272w, https://substackcdn.com/image/fetch/$s_!5IVm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dd911bf-e467-4323-8f27-3e6f8a21c3c5_2378x1582.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5IVm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dd911bf-e467-4323-8f27-3e6f8a21c3c5_2378x1582.png" width="1456" height="969" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8dd911bf-e467-4323-8f27-3e6f8a21c3c5_2378x1582.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:969,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:451493,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5IVm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dd911bf-e467-4323-8f27-3e6f8a21c3c5_2378x1582.png 424w, https://substackcdn.com/image/fetch/$s_!5IVm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dd911bf-e467-4323-8f27-3e6f8a21c3c5_2378x1582.png 848w, https://substackcdn.com/image/fetch/$s_!5IVm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dd911bf-e467-4323-8f27-3e6f8a21c3c5_2378x1582.png 1272w, https://substackcdn.com/image/fetch/$s_!5IVm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dd911bf-e467-4323-8f27-3e6f8a21c3c5_2378x1582.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 aria-hidden="true" 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><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">Break down all challenges I encounter when building my side projects.</figcaption></figure></div><h1>How might we help first-time React learners to learn better? </h1><p>I ask AI to generate some important concepts to learn for a React beginner and choose state &amp; props as an example to dive deeper. This is the thread of conversation I have with AI. Feel free to skip or just read the highlight because it&#8217;s quite long.</p><ul><li><p>Explain in simple terms: props &amp; state </p></li><li><p>Demo code for explanation</p></li><li><p>Q: Applying in a novel scenario</p></li><li><p>A: Applying in a novel scenario</p></li><li><p>A: Explain the novel scenario</p></li><li><p>A: Explain the novel scenario with visualization</p></li><li><p>Problem context and design philosophy</p></li></ul><h2>Explain in simple terms</h2><p><em>AI, can you explain props and state for me?</em> </p><ol><li><p><strong>Props:</strong> This is information that <strong>a parent component passes down to its child components. Think of it like a teacher giving books to their students. Each student gets a book (props) from the teacher (parent component). They can read, use, and learn from it, but they cannot alter the content of the book.</strong></p></li><li><p><strong>State:</strong> This is information that a component maintains and can change over time. <strong>It's like a note you write to yourself that you can add to, erase, and modify as you need</strong>. In terms of components, this is data that can change after the component is loaded.</p></li></ol><div><hr></div><h2>Demo code for explanation</h2><p><em>AI, generate a code example to explain.</em></p><h3>Example 1: props</h3><p>Here, we'll create a <code>Greeting</code> component that receives a name via props and displays a greeting message.</p><p><code>function Greeting(props) {</code></p><p><code>  return &lt;h1&gt;Hello, {props.name}!&lt;/h1&gt;;</code></p><p><code>}</code></p><p><code>function App() {</code></p><p><code>  return &lt;Greeting name="Alice" /&gt;;</code></p><p><code>}</code></p><p>In this example:</p><ul><li><p>The <code>Greeting</code> component accepts <code>props</code>.</p></li></ul><ul><li><p><code>props.name</code> is used to dynamically display the name.</p></li></ul><ul><li><p>In <code>App</code>, we use the <code>Greeting</code> component and pass a <code>name</code> prop with the value <code>"Alice"</code>.</p></li></ul><h3><strong>Example 2: Using State</strong></h3><p>Now, let's create a <code>Counter</code> component that uses state to keep track of a count value. </p><p><code>import React, { useState } from 'react';</code></p><p><code>function Counter() {</code></p><p><code>  const [count, setCount] = useState(0);</code></p><p><code>  return (</code></p><p><code>    &lt;div&gt;</code></p><p><code>      &lt;p&gt;You clicked {count} times&lt;/p&gt;</code></p><p><code>      &lt;button onClick={() =&gt; setCount(count + 1)}&gt;Click me&lt;/button&gt;</code></p><p><code>    &lt;/div&gt;</code></p><p><code>  );</code></p><p><code>}<br><br>function App() {</code></p><p><code>  return &lt;Counter /&gt;;</code></p><p><code>}</code></p><p>In this example:</p><ul><li><p>The <code>Counter</code> component uses the <code>useState</code> hook to create a <code>count</code> state variable.</p></li></ul><ul><li><p><code>count</code> stores the current count, and <code>setCount</code> is the function to update it.</p></li></ul><ul><li><p>When the button is clicked, <code>setCount</code> is called to increment the <code>count</code>.</p></li></ul><ul><li><p>The <code>Counter</code> component keeps track of and displays its own count state.</p></li></ul><h3>Example 3: Combining Props and State</h3><p>Finally, let's combine both concepts in a more interactive example.</p><p><code>function User(props) {</code></p><p><code>  const [loggedIn, setLoggedIn] = useState(false);</code></p><p><code>  return (</code></p><p><code>    &lt;div&gt;</code></p><p><code>      &lt;p&gt;Welcome, {props.name}! {loggedIn ? "You are logged in." : "You are not logged in."}&lt;/p&gt;</code></p><p><code>      &lt;button onClick={() =&gt; setLoggedIn(!loggedIn)}&gt;</code></p><p><code>        {loggedIn ? "Log out" : "Log in"}</code></p><p><code>      &lt;/button&gt;</code></p><p><code>    &lt;/div&gt;</code></p><p><code>  );</code></p><p><code>}<br><br>function App() {</code></p><p><code>  return &lt;User name="Bob" /&gt;;</code></p><p><code>}</code></p><p>How do you feel about the response? I think this is not enough to learn the core idea of state and props. However, this is also the same thing I get when I was learning through youtube. </p><div><hr></div><h3>Q: Applying in a novel scenario</h3><p><em>AI, give me a novel scenario to practice this concept</em>.</p><p>Let's say you want to develop a simple weather application using React that displays the current weather condition of a city. The application should have two components:</p><ol><li><p><code>CityInput</code>: A form input field that allows users to type in the name of the city. This will be a "controlled component", meaning that the input value should be controlled by the component's state.</p></li><li><p><code>WeatherDisplay</code>: A component that takes the city name as a prop and displays the current weather condition of the city. Note: We'll not tackle the actual weather data fetching here, you might use an external API for that in an actual application.</p></li></ol><p><strong>How would you structure your components in terms of state and props? Could you write a simple skeleton of these components?</strong></p><p><strong>Hint: What information changes over time? Where does information flow?</strong></p><p>Remember, the key thing here is to think about the state (what changes over time) and the props (how the information flows from parent to child).</p><div><hr></div><p>It becomes interesting right? So I responed: <br>- What information changes over time? weather <br>- How the information flow from parent to child: parent - city, children - city weather</p><h3>A: Applying in a novel scenario</h3><p>That's correct!</p><p>In this scenario, the weather and the city, both can change over time so they should be kept in state. The city's state would be in <code>CityInput</code>, whereas <code>WeatherDisplay</code>'s state would be the weather.</p><p>The information flow from the parent to child would be the selected city that's passed from <code>CityInput</code> (parent) to <code>WeatherDisplay</code> (child). When the city state in <code>CityInput</code> changes, it will trigger a re-render, passing the new city prop to <code>WeatherDisplay</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_!ZCCC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e985a08-08d5-42ec-bc0c-83189702823d_2160x1620.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZCCC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e985a08-08d5-42ec-bc0c-83189702823d_2160x1620.png 424w, https://substackcdn.com/image/fetch/$s_!ZCCC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e985a08-08d5-42ec-bc0c-83189702823d_2160x1620.png 848w, https://substackcdn.com/image/fetch/$s_!ZCCC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e985a08-08d5-42ec-bc0c-83189702823d_2160x1620.png 1272w, https://substackcdn.com/image/fetch/$s_!ZCCC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e985a08-08d5-42ec-bc0c-83189702823d_2160x1620.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZCCC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e985a08-08d5-42ec-bc0c-83189702823d_2160x1620.png" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4e985a08-08d5-42ec-bc0c-83189702823d_2160x1620.png&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;:241080,&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_!ZCCC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e985a08-08d5-42ec-bc0c-83189702823d_2160x1620.png 424w, https://substackcdn.com/image/fetch/$s_!ZCCC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e985a08-08d5-42ec-bc0c-83189702823d_2160x1620.png 848w, https://substackcdn.com/image/fetch/$s_!ZCCC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e985a08-08d5-42ec-bc0c-83189702823d_2160x1620.png 1272w, https://substackcdn.com/image/fetch/$s_!ZCCC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e985a08-08d5-42ec-bc0c-83189702823d_2160x1620.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 aria-hidden="true" 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><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">Esther&#8217;s viz</figcaption></figure></div><p>Here's a simple skeleton code for the two components:</p><pre><code><code>import React, { useState } from "react";

// CityInput component
function CityInput( { onUpdateCity } ) {
  const [city, setCity] = useState("");

  const handleChange = event =&gt; {
    setCity(event.target.value);
    // Notify parent component about city update
    onUpdateCity(event.target.value);
  };

    return (
      &lt;input type="text" value={city} onChange={handleChange} placeholder="Enter city name" /&gt;
    );
}

// WeatherDisplay component
function WeatherDisplay( { city } ) {
  const [weather, setWeather] = useState("");

  // Assume we have a fetchWeather function to get weather data
  // useEffect(() =&gt; {
  //   fetchWeather(city).then(data =&gt; setWeather(data));
  // }, [city]);
 
  return (
    &lt;h2&gt;The current weather in {city} is {weather}&lt;/h2&gt;
  );
}

// Parent component, here just an example
// It handles city updates from CityInput
function WeatherApp() {
  const [city, setCity] = useState("");
    
  const handleUpdateCity = (updatedCity) =&gt; {
    setCity(updatedCity);
  };

  return (
    &lt;&gt;
      &lt;CityInput onUpdateCity={handleUpdateCity} /&gt;
      &lt;WeatherDisplay city={city} /&gt;
    &lt;/&gt;
  );
}</code></code></pre><p>Please note that you'd need a real API call in <code>WeatherDisplay</code> to fetch weather data - it's commented out because it's not the focus of the question. In <code>CityInput</code>, we also introduced an <code>onUpdateCity</code> prop which allows <code>CityInput</code> to notify its parent (<code>WeatherApp</code>) about changes. <strong>This is a key pattern in React: "lifting state up", when the state is managed by a parent component or even higher.</strong></p><div><hr></div><h3>A: Explain the novel scenario </h3><p><em>It starts to get into the important part of it, so I follow up: I don't understand onUpdateCity and handleUpdateCity.</em> </p><p>I apologize for any confusion. Let's dive a little deeper to understand <code>onUpdateCity</code> and <code>handleUpdateCity</code>.</p><p>Here's their purpose:</p><ul><li><p><code>onUpdateCity</code> is basically a function that's passed as a prop from the <code>WeatherApp</code> component to the <code>CityInput</code> component. When we say <code>onUpdateCity={handleUpdateCity}</code> inside <code>WeatherApp</code>, we're saying "Hey, <code>CityInput</code>, here's a function that you should call when the city changes."</p></li></ul><ul><li><p>Inside the <code>CityInput</code> component, it calls this passed function in its <code>handleChange</code> function. So, any time the city value changes due to a user typing in the input field, it not only updates its own state 'city' but also informs the parent component (in this case <code>WeatherApp</code>) about this change by calling <code>onUpdateCity(event.target.value)</code>.</p></li></ul><ul><li><p><code>handleUpdateCity</code> is that function in the <code>WeatherApp</code> component that gets called. When this happens, it receives the updated city and uses it to update the state of the <code>WeatherApp</code> component.</p></li></ul><p><strong>The reason we do this roundabout thing is because the </strong><code>WeatherDisplay</code><strong> component, which is also a child of </strong><code>WeatherApp</code><strong>, needs to know when the city changes. But </strong><code>CityInput</code><strong> and </strong><code>WeatherDisplay</code><strong> are siblings -- they don't have a direct way to communicate. So we use their common parent </strong><code>WeatherApp</code><strong> as a conduit for that communication.</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_!sqzn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08f77b9a-818a-44be-8402-36e7134faf86_2160x1620.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sqzn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08f77b9a-818a-44be-8402-36e7134faf86_2160x1620.png 424w, https://substackcdn.com/image/fetch/$s_!sqzn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08f77b9a-818a-44be-8402-36e7134faf86_2160x1620.png 848w, https://substackcdn.com/image/fetch/$s_!sqzn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08f77b9a-818a-44be-8402-36e7134faf86_2160x1620.png 1272w, https://substackcdn.com/image/fetch/$s_!sqzn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08f77b9a-818a-44be-8402-36e7134faf86_2160x1620.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sqzn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08f77b9a-818a-44be-8402-36e7134faf86_2160x1620.png" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/08f77b9a-818a-44be-8402-36e7134faf86_2160x1620.png&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;:372859,&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_!sqzn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08f77b9a-818a-44be-8402-36e7134faf86_2160x1620.png 424w, https://substackcdn.com/image/fetch/$s_!sqzn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08f77b9a-818a-44be-8402-36e7134faf86_2160x1620.png 848w, https://substackcdn.com/image/fetch/$s_!sqzn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08f77b9a-818a-44be-8402-36e7134faf86_2160x1620.png 1272w, https://substackcdn.com/image/fetch/$s_!sqzn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08f77b9a-818a-44be-8402-36e7134faf86_2160x1620.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 aria-hidden="true" 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><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">Esther&#8217;s viz. In short, parent and child are connected. But the child cannot talk to each other, so they need their parent to connect them. The parent passes the city change function (handleUpdatedCity) so the city component(child 1), can change the city data. The parent now has the city data information to pass to the city temperature component(child 2) to update the temperature.  </figcaption></figure></div><p>This is a common pattern in React called "lifting state up". Instead of trying to sync states across multiple components (which gets complex and error-prone very quickly), we "lift the state up" to a common ancestor and then distribute it down as props. This keeps our state logic in one place and our components more predictable and easier to understand.</p><div><hr></div><h3>A: Explain the novel scenario with visualization</h3><p><em>Good job! AI starts to teach me in depth, using the parent/child information! Well, but since I still don&#8217;t understand, I ask: Can you visualize who is calling who. that's confusing.</em></p><p>Absolutely, we can look at the process as a model of communication between three individuals:</p><ol><li><p><code>CityInput</code> (a child who observes and reports)</p></li></ol><ol><li><p><code>WeatherApp</code> (a parent who listens and informs)</p></li></ol><ol><li><p><code>WeatherDisplay</code> (another child who receives updates)</p></li></ol><p>Let's represent each component with these individuals and see how they interact:</p><ul><li><p>The <code>CityInput</code> (the observing child) is like a child playing outdoors. When the child observes a change (e.g., it starts to rain), they run inside to tell the parent, using the method the parent has told them to (onUpdateCity).</p></li></ul><ul><li><p><code>WeatherApp</code> (the parent) is the decision-maker of the house. They are listening for updates from <code>CityInput</code> (the observing child) via the <code>handleUpdateCity</code> function. Upon hearing about the rainfall, the parent then updates their knowledge (state), which in turn informs their other child - <code>WeatherDisplay</code>.</p></li></ul><ul><li><p>The <code>WeatherDisplay</code> (the child receiving updates) then takes this new information (the weather condition) that it gets from the parent as a prop and acts on it. It may respond to this update by putting on a raincoat or grabbing an umbrella.</p></li></ul><p>This represents the flow of information.</p><p>Here's it visually:</p><pre><code><code>CityInput - (observes an event and tells parent) -&gt; WeatherApp - (updates state and informs WeatherDisplay) -&gt; WeatherDisplay</code></code></pre><p>It's two communication lanes that form a cycle:</p><ol><li><p><code>CityInput -&gt; WeatherApp</code>: via <code>onUpdateCity</code> prop (aka the parent's instruction).</p></li></ol><ol><li><p><code>WeatherApp -&gt; WeatherDisplay</code>: via <code>city</code> prop (aka the parent's update to its other child).</p></li></ol><p>Hope this clarifies how the communication is happening between the components!</p><div><hr></div><h3>Problem context and design philosophy</h3><p><em>Wow! This become so clear and finally understand more about props and state instead of pretending </em><code>props.name</code><em> is the world! So I AI about the problem context and philosophy for this design.</em></p><p>In GUI applications, the state of the application and the interface needs to change often due to user interactions (clicks, keystrokes, etc), and these changes need to be accurately reflected on the screen in real-time.</p><p>In traditional, procedural programming, this can lead to difficult-to-track bugs and inefficient code, as different parts of the application may need precise knowledge about others in order to function. React's model abstracts away this complexity through a single-direction data flow, and a diffing algorithm that efficiently updates only the parts of the interface that need changing.</p><p>&#8230;</p><ul><li><p><strong>Bidirectional data binding (the method before react)</strong>: This means that if you have two pieces of data, like a textbox and a model (an object that holds data), they are linked or "bound" together. So, if you change the data in the model, the textbox will automatically show this new data. It also means if someone types into the textbox, the data in the model will be updated to reflect that.</p></li></ul><p>This seems convenient, right? But imagine if you have lots of these data bindings in a complex app. If an error pops up, it becomes difficult to trace which change caused it. Plus, with multiple components manipulating the data, it can lead to unexpected results.</p><ul><li><p><strong>Unidirectional data flow</strong> <strong>(React's approach)</strong>: React took a different approach, called "unidirectional data flow". Remember the LEGO analogy? With React, data moves in one direction, from top (parent component) to bottom (child component), just like building up a LEGO structure from base to top.</p></li></ul><p>This means a child component can't directly update something in a parent component. If a change is needed, it must ask the parent component to do it. This helps keep things organized and makes code easier to understand, as you always know where the change is coming from. It also reduces the likelihood of bugs because you are controlling exactly where and how changes are made.</p><p><strong>So, while bidirectional data binding is like a busy roundabout with traffic coming from all directions, React's unidirectional flow can be seen more like a one-way street, which can make managing complex applications much simpler and cleaner.</strong></p><div><hr></div><p>Kudos to you if you actually read it till here, but look! I also learn so many new things from the conversation with AI! To summarise the learning. </p><ol><li><p>I learn how to apply props &amp; state through the novel scenario </p></li><li><p>I learn why props &amp; state as a design philosophy. React is designed as a unidirectional data flow to contrast with the messy bidirectional data binding approach in the old days. Hence, the parent-child relationship makes so much more sense now! </p></li></ol><p>If you look back at my thread with AI, you will realize the most important parts are missing in our learning journey when we learn it for the first time ourselves.</p><p>My thread </p><ul><li><p>Explain in simple terms</p></li><li><p>Demo code for explanation</p></li><li><p><strong>Q: Applying in a novel scenario (missing) </strong></p></li><li><p><strong>A: Applying in a novel scenario (missing) </strong></p></li><li><p><strong>A: Explain the novel scenario (missing) </strong></p></li><li><p><strong>A: Explain the novel scenario with visualization (missing) </strong></p></li><li><p><strong>Problem context and design philosophy (missing) </strong></p></li></ul><p>That&#8217;s why I always feel like I&#8217;m just sort of know state management but not really. However, after going through the in-depth application and problem context, it makes so much sense now. so here is the idea: </p><div class="pullquote"><p>How might we assist junior engineers in learning a new concept through in-depth concept application, solidifying with problem context and design philosophy? </p></div><p>So far, it seems that the chat interface is bad, and it requires us to prompt it. But is there a way to integrate it with learners&#8217; lives so beginners can pay attention to important but new learning concepts? </p><p>Me and my friend will be ideating on this tomorrow. </p>]]></content:encoded></item><item><title><![CDATA[The key to learning deeply in programming]]></title><description><![CDATA[It's philosophy]]></description><link>https://learnlearnlearn.substack.com/p/the-key-to-learning-deeply-in-programming</link><guid isPermaLink="false">https://learnlearnlearn.substack.com/p/the-key-to-learning-deeply-in-programming</guid><dc:creator><![CDATA[Esther]]></dc:creator><pubDate>Wed, 27 Dec 2023 03:22:05 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aacf929-611b-4b0e-91f6-4b2abfbe5b5a_2160x1620.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Today, I learned a new way to delve deeply into programming: having discussions. (Yes, I spent my entire Christmas learning programming because I had no friends and family around.)</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8uZk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7621fa29-506c-4f49-ad3f-38a829fca330_1000x626.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8uZk!,w_424,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7621fa29-506c-4f49-ad3f-38a829fca330_1000x626.gif 424w, https://substackcdn.com/image/fetch/$s_!8uZk!,w_848,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7621fa29-506c-4f49-ad3f-38a829fca330_1000x626.gif 848w, https://substackcdn.com/image/fetch/$s_!8uZk!,w_1272,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7621fa29-506c-4f49-ad3f-38a829fca330_1000x626.gif 1272w, https://substackcdn.com/image/fetch/$s_!8uZk!,w_1456,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7621fa29-506c-4f49-ad3f-38a829fca330_1000x626.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8uZk!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7621fa29-506c-4f49-ad3f-38a829fca330_1000x626.gif" width="1000" height="626" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7621fa29-506c-4f49-ad3f-38a829fca330_1000x626.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:626,&quot;width&quot;:1000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:6191179,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&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_!8uZk!,w_424,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7621fa29-506c-4f49-ad3f-38a829fca330_1000x626.gif 424w, https://substackcdn.com/image/fetch/$s_!8uZk!,w_848,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7621fa29-506c-4f49-ad3f-38a829fca330_1000x626.gif 848w, https://substackcdn.com/image/fetch/$s_!8uZk!,w_1272,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7621fa29-506c-4f49-ad3f-38a829fca330_1000x626.gif 1272w, https://substackcdn.com/image/fetch/$s_!8uZk!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7621fa29-506c-4f49-ad3f-38a829fca330_1000x626.gif 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 aria-hidden="true" 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><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 Christmas learning</figcaption></figure></div><p>Most programming education tools suck. They teach you how to do things, like a user manual, but don't tell you where they come from and why they are needed. What can we do about it? </p><h2>The Importance of Design Philosophy &amp; Problem Context </h2><p>The moment my friend explained the philosophy and historical context behind a technology's development, everything clicked, and I learned the tool so much more easily. For instance, he taught me about the development of the app router in Next.js. He said, "Because the app gets very complicated over time, we need a better abstraction so that the team can work hand in hand without knowing what other people are doing." </p><p>Okay, I understand what it means, but how does this philosophy show in the design of the tool? He pulled out the app he built and showed me the code with all the child components. "Look at the layout of my onboard page. There are so many tabs, but the onboard bar will stay the same no matter how the children inside change." When I saw the code, I immediately understood why Next.js forced us to use "layout.tsx" as a name everywhere and how another engineer developing the children inside no longer needs to see any code related to the onboard bar.</p><p>After our talks, I learned that I can separate my programming learning into several layers.</p><ul><li><p><strong>Implementation level:</strong> How to debug my current problem right now?</p><ul><li><p>This is what I did in the beginning and still do (when I'm lazy). I just copy and paste the error message and the code into ChatGPT or Stack Overflow. I try to run the code and see if it works.</p></li></ul></li><li><p><strong>Functional level:</strong> How does this function work?</p><ul><li><p>This is what I'm gradually learning through having a technical learning template and forcing myself to stop and learn.</p></li></ul></li><li><p><strong>Philosophy level:</strong> How does this language work, and how is it designed? What problem is it trying to solve?</p><ul><li><p>This is the part he taught me. With his experience, he gave me a conceptual view at the philosophical level and demonstrated it through his code template on a functional level.</p></li></ul></li></ul><p>Why do all these levels matter? It's about patterns. Most engineers I meet don't think about patterns or only have a "sense" but not an in-depth understanding of them. They just try to piece information together from their experience. In my previous work, when I asked a question, my ex-boss would just answer the exact question I asked but wouldn't tell me what motivated this question and what the mental models I was lacking were. Over time, I wrote lots of code, memorized everything, and tried to apply it in similar cases, but I never truly understood it. Though My senior engineer tried to explain things to me, which I kind of got, it wasn't as holistic and clear as when my friend explained things across three levels to me.</p><p>Another example is when I asked a front-end developer about React. I was in all the bugs and asked him how to fix them. Beyond debugging and thinking through the code, he taught me, "There is a difference between declarative vs. imperative language. Imperative language is what you know. You ask the computer to do step 1, step 2, and step 3, while declarative language, like React, is that you only want to know the beginning and the end and ask the code to show it when it happens." All of a sudden, all these weird state management things in React started to make sense to me.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ciJH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aacf929-611b-4b0e-91f6-4b2abfbe5b5a_2160x1620.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ciJH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aacf929-611b-4b0e-91f6-4b2abfbe5b5a_2160x1620.png 424w, https://substackcdn.com/image/fetch/$s_!ciJH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aacf929-611b-4b0e-91f6-4b2abfbe5b5a_2160x1620.png 848w, https://substackcdn.com/image/fetch/$s_!ciJH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aacf929-611b-4b0e-91f6-4b2abfbe5b5a_2160x1620.png 1272w, https://substackcdn.com/image/fetch/$s_!ciJH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aacf929-611b-4b0e-91f6-4b2abfbe5b5a_2160x1620.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ciJH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aacf929-611b-4b0e-91f6-4b2abfbe5b5a_2160x1620.png" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2aacf929-611b-4b0e-91f6-4b2abfbe5b5a_2160x1620.png&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;:262920,&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_!ciJH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aacf929-611b-4b0e-91f6-4b2abfbe5b5a_2160x1620.png 424w, https://substackcdn.com/image/fetch/$s_!ciJH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aacf929-611b-4b0e-91f6-4b2abfbe5b5a_2160x1620.png 848w, https://substackcdn.com/image/fetch/$s_!ciJH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aacf929-611b-4b0e-91f6-4b2abfbe5b5a_2160x1620.png 1272w, https://substackcdn.com/image/fetch/$s_!ciJH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2aacf929-611b-4b0e-91f6-4b2abfbe5b5a_2160x1620.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 aria-hidden="true" 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><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>The last example he taught me was about the server component in the app router. Before, I thought it was cool, and more convenient than the way we did things before (something on the client side), but I never knew exactly why. And then he taught me the dream of Next.js. Rather than separating the front end and back end, what if we have one thing that can somehow remix them together, so we will never need to worry about connecting both of them anymore? I still don't fully understand it, but I think it's starting to give me a sense of why I might want to use it and an interest in starting my exploration. Because I thought the people who designed this were so confusing and stupid.</p><h2><strong>What&#8217;s the difference between a senior engineer and a junior engineer?</strong></h2><p>Asking the right question. </p><p>It may sound super easy, but it's hard to apply it. For instance, the last time when my audio file didn't play, we debugged it for two hours, and he said, "Wait, it's because QuickTime Player doesn't support MP3!" For me, why is it possible for an audio player not to support mp3? Isn't supporting MP3 the most basic thing for an audio player on this planet? However, without challenging the assumption that "My audio player might not support the current audio format," I don't think I would ever figure out this problem even if you give me a century. </p><p>Another example is the <code>getstaticprops</code> the function I tried to learn in Next.js. I was annoyed by why this function disappeared in their new version, App Router. I thought, "This is so stupid, is it because this tool is so new that they haven't built it?" He immediately caught this assumption and asked, <strong>"Why is it not there? What might be the reason behind it?"</strong> And then we learned why App Router exists.</p><p>Today, we spent three hours together just <em>talking</em> through the project I worked on yesterday. <strong>What were my assumptions when solving the problems, deciding the tools to use, and how do form all my decisions? </strong></p><p>In essence, when he keeps asking, "What do you assume about it and why?" it helps me catch the wrong assumptions and accumulate a better understanding to ask the right questions. However, how to ask good questions then? </p><h2>How to ask good questions?</h2><p>From him, I learned these two questions helped me a lot with the process of actually understanding it. </p><ul><li><p><strong>Why? Why doesn&#8217;t it work? </strong>What is my hypothesis when I see my audio files don&#8217;t work? When I exclude some possibilities, what&#8217;s my assumption behind it?   </p></li></ul><ul><li><p><strong>How? How do you utilize the concept you just learned in the code you have now?</strong> For example, how do you pass information in the event handler without having it in your component?</p></li><li><p><strong>So what? What will happen if we introduce this new function and tool?</strong> What kind of difference will be made? For instance, if the server component is implemented, what will it look like for the user?</p></li></ul><p>Throughout our conversation, I finally learned what it means to delve deep into something. People often say that to become proficient in one thing, you should keep asking why and focus on learning one thing deeply. I know this, and I think everyone knows this, but none of us knows how to apply it when we are new to something. I used to make lots of mistakes by looking into irrelevant code because I was trying to go deep and felt frustrated wondering why I was just getting more confused. I'm super grateful that today he showed me a pathway on how to do it effectively and became my free tutor along the way.</p><p>As I have enough knowledge on implementation and functional level, the next step I will take is to learn all the design philosophies and problem contexts of new technologies. I believe it will give me better intuition into asking the right questions as a junior engineer. </p><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Problems in Spanish Flashcard Making]]></title><description><![CDATA[Builder vs user's mindset]]></description><link>https://learnlearnlearn.substack.com/p/problems-in-spanish-flashcard-making</link><guid isPermaLink="false">https://learnlearnlearn.substack.com/p/problems-in-spanish-flashcard-making</guid><dc:creator><![CDATA[Esther]]></dc:creator><pubDate>Sun, 17 Dec 2023 04:57:09 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d13234f-02e0-4e6b-b1d6-b2307818a854_2160x1620.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When I was writing my post, Visualizing vocabulary, I thought it would be really simple to ask AI to generate images and create an app out of it. </p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;950aec56-4665-4492-99b2-581d05dff256&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Visualizing vocabulary&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:11910887,&quot;name&quot;:&quot;Esther&quot;,&quot;bio&quot;:&quot;Esther is a confused individual, and my friends say &#8220;she is a confusing one too.&#8221; I don't know la, but I love learnlearnlearn.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/975d6a75-ded8-40ad-ac6e-2bf7cea6df96_3088x2316.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2023-12-11T05:46:07.867Z&quot;,&quot;cover_image&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%2Fbf0d52b4-317b-4501-9996-1a6e1f9b4181_1940x1466.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://learnlearnlearn.substack.com/p/visualizing-vocabulary&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:139668308,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:2,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Esther is a confused human being&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%2Fcda04160-ff4e-4302-b0ac-3a6c91c547cd_466x466.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>However, as I was trying to make my own manually today, I realized there were many important elements that are missing. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XH8Z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd062abb7-70ab-4bd4-bca4-020125d101db_2266x1622.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XH8Z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd062abb7-70ab-4bd4-bca4-020125d101db_2266x1622.png 424w, https://substackcdn.com/image/fetch/$s_!XH8Z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd062abb7-70ab-4bd4-bca4-020125d101db_2266x1622.png 848w, https://substackcdn.com/image/fetch/$s_!XH8Z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd062abb7-70ab-4bd4-bca4-020125d101db_2266x1622.png 1272w, https://substackcdn.com/image/fetch/$s_!XH8Z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd062abb7-70ab-4bd4-bca4-020125d101db_2266x1622.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XH8Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd062abb7-70ab-4bd4-bca4-020125d101db_2266x1622.png" width="1456" height="1042" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d062abb7-70ab-4bd4-bca4-020125d101db_2266x1622.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1042,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3266749,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XH8Z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd062abb7-70ab-4bd4-bca4-020125d101db_2266x1622.png 424w, https://substackcdn.com/image/fetch/$s_!XH8Z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd062abb7-70ab-4bd4-bca4-020125d101db_2266x1622.png 848w, https://substackcdn.com/image/fetch/$s_!XH8Z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd062abb7-70ab-4bd4-bca4-020125d101db_2266x1622.png 1272w, https://substackcdn.com/image/fetch/$s_!XH8Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd062abb7-70ab-4bd4-bca4-020125d101db_2266x1622.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 aria-hidden="true" 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><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">flashcards I made today. </figcaption></figure></div><p>Here are my problems </p><ol><li><p><strong>The image generation process takes a long time.</strong> Dalle is super slow. In fact, all the AI image generators are slow. I was really annoyed waiting for 30 seconds to generate an image that might be good and representative. </p><ol><li><p>I need a translation from Spanish to English first and add an extra image generation prompt. </p></li><li><p>Even if everything is good, I might still be unsatisfied, I need to find a way to cancel and tweak my inputs. </p></li><li><p>I do not care if the image is pretty, but it needs to give me a really strong association with words. </p></li></ol></li><li><p><strong>I need a place to store my images.</strong> I fill it in a big folder already as I have 25 images. What if I want to remember several hundred words? </p></li><li><p><strong>I want sound!!!</strong> Looking at the image is really boring. How can I generate and pronounce sounds? </p></li><li><p><strong>I want side notes!</strong> Looking at the word is hard to remember. I want to have the context from Harry Potter so I can know how and when to use it. But also, writing those notes is quite annoying. I want an easy way to match the notes with the word. </p></li><li><p><strong>I don&#8217;t want to stare at my laptop all the time!</strong> I love circling words in my Harry Potter Spanish book. I want to have as little time on my laptop as possible. </p></li></ol><p>After 1 hr of testing and with only 20 useful images out, I was annoyed. I realized I imagined it as a programming problem but not as a learning problem. So I underestimated how customized I needed my tool to be. I finally realize why lots of programmers that build lots of fancy but useless products. As a person really trying to learn Spanish, I don&#8217;t care how many features my flashcard app has, but I want to have something that can actually make me engage more in learning, and less in operational work.</p><p>Hence, I decided to throw away all my imagination of productionizing this tool. I just want to selfishly make this flashcard thing as helpful as it can be for me. I don&#8217;t mind dragging all the files to wherever. Using my hand to generate images is fine as long as it&#8217;s quick and simple. </p><p>I noticed the discrepancy between the builder and the user in the development of any tool. The real needs that a builder or a programmer imagines can be really different from the user, due to the lack of experience of the own tool they make. A builder can imagine, &#8220;Yes an AI auto flashcard generator will be so simple and easy to build!&#8221; Yet, they might not fully grasp the subtleties and specific requirements, like how an image should strongly and accurately trigger associations for the word being learned. The absence of this firsthand experience can lead to a mismatch between the basic structure of the tool and its intended purpose. While builders focus on crafting a visually appealing and functional tool, learners are more concerned with enhancing their learning experience. <strong>The nuanced difference between possessing exceptional craftsmanship and addressing immediate problems is the gap between the builder&#8217;s mindset and the user&#8217;s mindset.</strong> (highlight to remind my future self)</p><p>Yes, yes. My builder mindset is debating with my user&#8217;s mindset today. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GL89!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d13234f-02e0-4e6b-b1d6-b2307818a854_2160x1620.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GL89!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d13234f-02e0-4e6b-b1d6-b2307818a854_2160x1620.png 424w, https://substackcdn.com/image/fetch/$s_!GL89!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d13234f-02e0-4e6b-b1d6-b2307818a854_2160x1620.png 848w, https://substackcdn.com/image/fetch/$s_!GL89!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d13234f-02e0-4e6b-b1d6-b2307818a854_2160x1620.png 1272w, https://substackcdn.com/image/fetch/$s_!GL89!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d13234f-02e0-4e6b-b1d6-b2307818a854_2160x1620.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GL89!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d13234f-02e0-4e6b-b1d6-b2307818a854_2160x1620.png" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7d13234f-02e0-4e6b-b1d6-b2307818a854_2160x1620.png&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;:438270,&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_!GL89!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d13234f-02e0-4e6b-b1d6-b2307818a854_2160x1620.png 424w, https://substackcdn.com/image/fetch/$s_!GL89!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d13234f-02e0-4e6b-b1d6-b2307818a854_2160x1620.png 848w, https://substackcdn.com/image/fetch/$s_!GL89!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d13234f-02e0-4e6b-b1d6-b2307818a854_2160x1620.png 1272w, https://substackcdn.com/image/fetch/$s_!GL89!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d13234f-02e0-4e6b-b1d6-b2307818a854_2160x1620.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 aria-hidden="true" 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><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></p>]]></content:encoded></item><item><title><![CDATA[Visualizing vocabulary]]></title><description><![CDATA[Memorize with AI]]></description><link>https://learnlearnlearn.substack.com/p/visualizing-vocabulary</link><guid isPermaLink="false">https://learnlearnlearn.substack.com/p/visualizing-vocabulary</guid><dc:creator><![CDATA[Esther]]></dc:creator><pubDate>Mon, 11 Dec 2023 05:46:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!kncH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf0d52b4-317b-4501-9996-1a6e1f9b4181_1940x1466.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As I was reading <a href="https://www.goodreads.com/en/book/show/19661852">Fluent Forever: How to Learn Any Language Fast and Never Forget It</a>, I was reminded of a simple vocabulary memorizing method: Don&#8217;t use translation! Use images! </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kncH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf0d52b4-317b-4501-9996-1a6e1f9b4181_1940x1466.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kncH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf0d52b4-317b-4501-9996-1a6e1f9b4181_1940x1466.png 424w, https://substackcdn.com/image/fetch/$s_!kncH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf0d52b4-317b-4501-9996-1a6e1f9b4181_1940x1466.png 848w, https://substackcdn.com/image/fetch/$s_!kncH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf0d52b4-317b-4501-9996-1a6e1f9b4181_1940x1466.png 1272w, https://substackcdn.com/image/fetch/$s_!kncH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf0d52b4-317b-4501-9996-1a6e1f9b4181_1940x1466.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kncH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf0d52b4-317b-4501-9996-1a6e1f9b4181_1940x1466.png" width="1456" height="1100" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bf0d52b4-317b-4501-9996-1a6e1f9b4181_1940x1466.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1100,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1404078,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kncH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf0d52b4-317b-4501-9996-1a6e1f9b4181_1940x1466.png 424w, https://substackcdn.com/image/fetch/$s_!kncH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf0d52b4-317b-4501-9996-1a6e1f9b4181_1940x1466.png 848w, https://substackcdn.com/image/fetch/$s_!kncH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf0d52b4-317b-4501-9996-1a6e1f9b4181_1940x1466.png 1272w, https://substackcdn.com/image/fetch/$s_!kncH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf0d52b4-317b-4501-9996-1a6e1f9b4181_1940x1466.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 aria-hidden="true" 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><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><h2>My old method</h2><p>Yes, I did the image method before for Spanish clothing. Images are so much more fun than looking at boring translation words, but&#8230;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!O8Kx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dbafb2a-8f4c-4fd8-b8b0-cb6a8d5f4c9d_2160x1620.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!O8Kx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dbafb2a-8f4c-4fd8-b8b0-cb6a8d5f4c9d_2160x1620.png 424w, https://substackcdn.com/image/fetch/$s_!O8Kx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dbafb2a-8f4c-4fd8-b8b0-cb6a8d5f4c9d_2160x1620.png 848w, https://substackcdn.com/image/fetch/$s_!O8Kx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dbafb2a-8f4c-4fd8-b8b0-cb6a8d5f4c9d_2160x1620.png 1272w, https://substackcdn.com/image/fetch/$s_!O8Kx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dbafb2a-8f4c-4fd8-b8b0-cb6a8d5f4c9d_2160x1620.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!O8Kx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dbafb2a-8f4c-4fd8-b8b0-cb6a8d5f4c9d_2160x1620.png" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5dbafb2a-8f4c-4fd8-b8b0-cb6a8d5f4c9d_2160x1620.png&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;:754781,&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;: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_!O8Kx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dbafb2a-8f4c-4fd8-b8b0-cb6a8d5f4c9d_2160x1620.png 424w, https://substackcdn.com/image/fetch/$s_!O8Kx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dbafb2a-8f4c-4fd8-b8b0-cb6a8d5f4c9d_2160x1620.png 848w, https://substackcdn.com/image/fetch/$s_!O8Kx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dbafb2a-8f4c-4fd8-b8b0-cb6a8d5f4c9d_2160x1620.png 1272w, https://substackcdn.com/image/fetch/$s_!O8Kx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dbafb2a-8f4c-4fd8-b8b0-cb6a8d5f4c9d_2160x1620.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 aria-hidden="true" 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><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>Creating all these images took so much time, and lazy Esther ended up doing the translation method. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PG7E!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e98d9cc-39ca-45c0-a7e1-712a796aff45_4032x3024.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PG7E!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e98d9cc-39ca-45c0-a7e1-712a796aff45_4032x3024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!PG7E!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e98d9cc-39ca-45c0-a7e1-712a796aff45_4032x3024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!PG7E!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e98d9cc-39ca-45c0-a7e1-712a796aff45_4032x3024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!PG7E!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e98d9cc-39ca-45c0-a7e1-712a796aff45_4032x3024.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PG7E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e98d9cc-39ca-45c0-a7e1-712a796aff45_4032x3024.jpeg" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2e98d9cc-39ca-45c0-a7e1-712a796aff45_4032x3024.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;:3940108,&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;: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_!PG7E!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e98d9cc-39ca-45c0-a7e1-712a796aff45_4032x3024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!PG7E!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e98d9cc-39ca-45c0-a7e1-712a796aff45_4032x3024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!PG7E!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e98d9cc-39ca-45c0-a7e1-712a796aff45_4032x3024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!PG7E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e98d9cc-39ca-45c0-a7e1-712a796aff45_4032x3024.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 aria-hidden="true" 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><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>Nowadays, since AI can do lots of artwork, I started to imagine, can lazy Esther just ask AI to create the drawing part for her? </p><h2>My idea</h2><p>This is my idea sketch. There are three simple ideas that come up to my mind. </p><ol><li><p>Memory gallery: Whenever I input new vocab, AI will generate an image and store it in a flashcard library. </p></li><li><p>Matching Game: I can play a drag-and-drop matching game for the vocabulary in the memory gallery to review. (Note: But the most powerful memorizing method is still &#8220;recall&#8221; aka you look at the image and actively think of the word from your brain)</p></li><li><p>Practice with AI: I look like the photo, and try to describe the image with the vocabulary that I learn.</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_!9pYm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69de2c7e-b228-420d-801b-8e1553ad39b7_2346x2001.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9pYm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69de2c7e-b228-420d-801b-8e1553ad39b7_2346x2001.jpeg 424w, https://substackcdn.com/image/fetch/$s_!9pYm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69de2c7e-b228-420d-801b-8e1553ad39b7_2346x2001.jpeg 848w, https://substackcdn.com/image/fetch/$s_!9pYm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69de2c7e-b228-420d-801b-8e1553ad39b7_2346x2001.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!9pYm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69de2c7e-b228-420d-801b-8e1553ad39b7_2346x2001.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9pYm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69de2c7e-b228-420d-801b-8e1553ad39b7_2346x2001.jpeg" width="1456" height="1242" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69de2c7e-b228-420d-801b-8e1553ad39b7_2346x2001.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1242,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:393774,&quot;alt&quot;:&quot;&quot;,&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;: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_!9pYm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69de2c7e-b228-420d-801b-8e1553ad39b7_2346x2001.jpeg 424w, https://substackcdn.com/image/fetch/$s_!9pYm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69de2c7e-b228-420d-801b-8e1553ad39b7_2346x2001.jpeg 848w, https://substackcdn.com/image/fetch/$s_!9pYm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69de2c7e-b228-420d-801b-8e1553ad39b7_2346x2001.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!9pYm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69de2c7e-b228-420d-801b-8e1553ad39b7_2346x2001.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 aria-hidden="true" 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><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>Today, I tested with Dalle3 to see if this idea is possible. I asked it to draw whatever word I learned from Harry Potter recently. </p><ul><li><p>draw manzana (apple in Spanish): </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_!qQWM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a241491-232d-4665-ace1-7fbd761848eb_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qQWM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a241491-232d-4665-ace1-7fbd761848eb_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!qQWM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a241491-232d-4665-ace1-7fbd761848eb_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!qQWM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a241491-232d-4665-ace1-7fbd761848eb_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!qQWM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a241491-232d-4665-ace1-7fbd761848eb_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qQWM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a241491-232d-4665-ace1-7fbd761848eb_1024x1024.webp" width="443" height="443" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4a241491-232d-4665-ace1-7fbd761848eb_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:443,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Generated by DALL&#183;E&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="Generated by DALL&#183;E" title="Generated by DALL&#183;E" srcset="https://substackcdn.com/image/fetch/$s_!qQWM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a241491-232d-4665-ace1-7fbd761848eb_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!qQWM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a241491-232d-4665-ace1-7fbd761848eb_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!qQWM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a241491-232d-4665-ace1-7fbd761848eb_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!qQWM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a241491-232d-4665-ace1-7fbd761848eb_1024x1024.webp 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 aria-hidden="true" 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><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">Make sense</figcaption></figure></div><ul><li><p>draw fracasar (fail/break down in Spanish): </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_!l38S!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4fe1cb8-1ab3-4ce6-b993-fb7341f8459a_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!l38S!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4fe1cb8-1ab3-4ce6-b993-fb7341f8459a_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!l38S!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4fe1cb8-1ab3-4ce6-b993-fb7341f8459a_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!l38S!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4fe1cb8-1ab3-4ce6-b993-fb7341f8459a_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!l38S!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4fe1cb8-1ab3-4ce6-b993-fb7341f8459a_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!l38S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4fe1cb8-1ab3-4ce6-b993-fb7341f8459a_1024x1024.webp" width="429" height="429" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c4fe1cb8-1ab3-4ce6-b993-fb7341f8459a_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:429,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A scene depicting the concept of 'Fracasado' (meaning 'failure' in Spanish) in a symbolic, abstract manner. Imagine a canvas filled with dark, muted colors and chaotic, overlapping shapes. In the center, there's a broken clock, its hands scattered around, symbolizing lost time. Shattered pieces of a mirror reflect distorted images, representing the fragmentation of dreams and aspirations. Around these central elements, faint, ghostly silhouettes of people with their heads bowed, as if in defeat or disappointment, add to the atmosphere of despair. The overall scene conveys a sense of chaos, loss, and the emotional impact of failure.&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="A scene depicting the concept of 'Fracasado' (meaning 'failure' in Spanish) in a symbolic, abstract manner. Imagine a canvas filled with dark, muted colors and chaotic, overlapping shapes. In the center, there's a broken clock, its hands scattered around, symbolizing lost time. Shattered pieces of a mirror reflect distorted images, representing the fragmentation of dreams and aspirations. Around these central elements, faint, ghostly silhouettes of people with their heads bowed, as if in defeat or disappointment, add to the atmosphere of despair. The overall scene conveys a sense of chaos, loss, and the emotional impact of failure." title="A scene depicting the concept of 'Fracasado' (meaning 'failure' in Spanish) in a symbolic, abstract manner. Imagine a canvas filled with dark, muted colors and chaotic, overlapping shapes. In the center, there's a broken clock, its hands scattered around, symbolizing lost time. Shattered pieces of a mirror reflect distorted images, representing the fragmentation of dreams and aspirations. Around these central elements, faint, ghostly silhouettes of people with their heads bowed, as if in defeat or disappointment, add to the atmosphere of despair. The overall scene conveys a sense of chaos, loss, and the emotional impact of failure." srcset="https://substackcdn.com/image/fetch/$s_!l38S!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4fe1cb8-1ab3-4ce6-b993-fb7341f8459a_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!l38S!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4fe1cb8-1ab3-4ce6-b993-fb7341f8459a_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!l38S!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4fe1cb8-1ab3-4ce6-b993-fb7341f8459a_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!l38S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4fe1cb8-1ab3-4ce6-b993-fb7341f8459a_1024x1024.webp 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 aria-hidden="true" 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><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">Wow, Ai can draw abstract concept well! </figcaption></figure></div><p>draw obtener (get/obtain in Spanish) </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eQ9z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92c16157-6f16-4d9e-8303-bda0d5094bdb_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eQ9z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92c16157-6f16-4d9e-8303-bda0d5094bdb_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!eQ9z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92c16157-6f16-4d9e-8303-bda0d5094bdb_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!eQ9z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92c16157-6f16-4d9e-8303-bda0d5094bdb_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!eQ9z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92c16157-6f16-4d9e-8303-bda0d5094bdb_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eQ9z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92c16157-6f16-4d9e-8303-bda0d5094bdb_1024x1024.webp" width="429" height="429" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/92c16157-6f16-4d9e-8303-bda0d5094bdb_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:429,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Generated by DALL&#183;E&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="Generated by DALL&#183;E" title="Generated by DALL&#183;E" srcset="https://substackcdn.com/image/fetch/$s_!eQ9z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92c16157-6f16-4d9e-8303-bda0d5094bdb_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!eQ9z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92c16157-6f16-4d9e-8303-bda0d5094bdb_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!eQ9z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92c16157-6f16-4d9e-8303-bda0d5094bdb_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!eQ9z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92c16157-6f16-4d9e-8303-bda0d5094bdb_1024x1024.webp 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 aria-hidden="true" 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><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">Damn, I don&#8217;t think I will ever forget this word in my life</figcaption></figure></div><p>I was sooooo amazed by AI! I thought they wouldn&#8217;t understand how to describe abstract words, such as fail or obtain, but they do it so well that I don&#8217;t think I will ever forget these three words in my mind! </p><h2>Prototype </h2><p>After seeing the possibility, I built a quick prototype for the memory gallery I was imagining. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5bm1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65bbb071-93fe-4105-9038-74e00de446cf_1400x456.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5bm1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65bbb071-93fe-4105-9038-74e00de446cf_1400x456.gif 424w, https://substackcdn.com/image/fetch/$s_!5bm1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65bbb071-93fe-4105-9038-74e00de446cf_1400x456.gif 848w, https://substackcdn.com/image/fetch/$s_!5bm1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65bbb071-93fe-4105-9038-74e00de446cf_1400x456.gif 1272w, https://substackcdn.com/image/fetch/$s_!5bm1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65bbb071-93fe-4105-9038-74e00de446cf_1400x456.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5bm1!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65bbb071-93fe-4105-9038-74e00de446cf_1400x456.gif" width="1200" height="390.85714285714283" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/65bbb071-93fe-4105-9038-74e00de446cf_1400x456.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:456,&quot;width&quot;:1400,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:1220048,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&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-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5bm1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65bbb071-93fe-4105-9038-74e00de446cf_1400x456.gif 424w, https://substackcdn.com/image/fetch/$s_!5bm1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65bbb071-93fe-4105-9038-74e00de446cf_1400x456.gif 848w, https://substackcdn.com/image/fetch/$s_!5bm1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65bbb071-93fe-4105-9038-74e00de446cf_1400x456.gif 1272w, https://substackcdn.com/image/fetch/$s_!5bm1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65bbb071-93fe-4105-9038-74e00de446cf_1400x456.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 aria-hidden="true" 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><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>How convenient it be if AI could handle the drawing labor work for me? </p><h2>Next question</h2><p>&#8220;Learn a word&#8221; for me means that I can easily apply it verbally in the sentence. Now, I can recognize the word, but how can I get to that application stage? What are the traditional methods that are effective? Can I use AI to practice with me? </p><div><hr></div><h2>Appendix </h2><p>Where I&#8217;m stuck at: If you have read <a href="https://learnlearnlearn.substack.com/p/the-bottleneck-in-learning-a-new">The Bottleneck in Learning a New Language</a>, you will also know that I struggle a lot with applying the past tense. It takes me 30 seconds to think and say it out loud. I was thinking of talking to an AI to practice, but I don&#8217;t think that&#8217;s enough &#8220;stretch&#8221; to practice different verbs. Incubating more ideas! </p>]]></content:encoded></item><item><title><![CDATA[Play in a Art x AI Hackathon]]></title><description><![CDATA[Can you call me an artist?]]></description><link>https://learnlearnlearn.substack.com/p/play-in-a-art-x-ai-hackathon</link><guid isPermaLink="false">https://learnlearnlearn.substack.com/p/play-in-a-art-x-ai-hackathon</guid><dc:creator><![CDATA[Esther]]></dc:creator><pubDate>Sun, 10 Dec 2023 03:06:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ca9ce6-7a18-4ff5-8bb3-1d359f0604f8_2160x1620.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Oh, honey, I usually don&#8217;t like to go to hackathons. Because a hackathon is like a place where a lot of scary tech bros doing things I don&#8217;t understand. Worst of all, they don&#8217;t let me sleep. In San Francisco, there are hackathons every weekend and I had a crazy flatmate before (See my funny post: <a href="https://lampmaa22.medium.com/gotta-die-as-an-overwork-labor-e9520bc4d5e5">Gotta die as an overwork labor</a>), so I started to go to some hackathons. Today, I went to an art hackathon with a friend, and I&#8217;m so excited to show you our creation! </p><p>We got some drawings from an artist, and then we just created more art! </p><p>Artist&#8217;s 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/973453cd-8a2e-4f6e-a133-e4cb758f69c2_1171x1280.jpeg&quot;},{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6e86c6f2-ccd3-49ae-ace5-38caf497e32c_761x1280.jpeg&quot;},{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eb5e9b4d-7d4a-4c31-b05e-e6a4bbdd1856_786x1280.jpeg&quot;},{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/450f2c47-e356-44db-b4f9-8a8ea9226140_766x1280.jpeg&quot;}],&quot;caption&quot;:&quot;From the artist&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/03c50b29-557b-4ef2-a6d1-a44ce011362c_1456x1456.png&quot;}},&quot;isEditorNode&quot;:true}"></div><p>Our work: </p><div class="image-gallery-embed" data-attrs="{&quot;gallery&quot;:{&quot;images&quot;:[{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e67d1e60-d45a-483d-a587-d38d47031108_1596x1536.png&quot;},{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ee7b13ee-9984-4b75-ba8a-c8acdf8d1c7f_1576x1536.png&quot;},{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/359d826f-30c5-4919-8a2c-7b0df19c2c2c_1576x1536.png&quot;},{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ac956380-b0b6-4429-980d-52752202e659_1562x1536.png&quot;}],&quot;caption&quot;:&quot;My friend used AI to create this!&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/eea3a86d-6030-470f-88d2-633a441f4bf8_1456x1456.png&quot;}},&quot;isEditorNode&quot;:true}"></div><p>We played with it for 3 hours on a cloud GPU called <a href="https://www.runpod.io/console/gpu-secure-cloud">RunPod</a>, and my friend taught me <a href="https://github.com/comfyanonymous/ComfyUI">Comfy UI</a>, we used Control Net, VAE, and Lora to make it! (Yes, I have no idea what I&#8217;m talking about either because I&#8217;m just throwing words at you) We figured so many problems out today and I&#8217;m so so so happy hehe.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XtmW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d611194-4d25-4cae-ad79-dc2e61ea5b52_2862x1719.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XtmW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d611194-4d25-4cae-ad79-dc2e61ea5b52_2862x1719.png 424w, https://substackcdn.com/image/fetch/$s_!XtmW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d611194-4d25-4cae-ad79-dc2e61ea5b52_2862x1719.png 848w, https://substackcdn.com/image/fetch/$s_!XtmW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d611194-4d25-4cae-ad79-dc2e61ea5b52_2862x1719.png 1272w, https://substackcdn.com/image/fetch/$s_!XtmW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d611194-4d25-4cae-ad79-dc2e61ea5b52_2862x1719.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XtmW!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d611194-4d25-4cae-ad79-dc2e61ea5b52_2862x1719.png" width="1200" height="721.1538461538462" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5d611194-4d25-4cae-ad79-dc2e61ea5b52_2862x1719.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:875,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:1024087,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XtmW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d611194-4d25-4cae-ad79-dc2e61ea5b52_2862x1719.png 424w, https://substackcdn.com/image/fetch/$s_!XtmW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d611194-4d25-4cae-ad79-dc2e61ea5b52_2862x1719.png 848w, https://substackcdn.com/image/fetch/$s_!XtmW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d611194-4d25-4cae-ad79-dc2e61ea5b52_2862x1719.png 1272w, https://substackcdn.com/image/fetch/$s_!XtmW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d611194-4d25-4cae-ad79-dc2e61ea5b52_2862x1719.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 aria-hidden="true" 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><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">How Comfy UI look at</figcaption></figure></div><p>Out of curiosity, I put my drawing inside and see what it would look like. Let me show you my proudest baby! </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jqJw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ca9ce6-7a18-4ff5-8bb3-1d359f0604f8_2160x1620.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jqJw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ca9ce6-7a18-4ff5-8bb3-1d359f0604f8_2160x1620.png 424w, https://substackcdn.com/image/fetch/$s_!jqJw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ca9ce6-7a18-4ff5-8bb3-1d359f0604f8_2160x1620.png 848w, https://substackcdn.com/image/fetch/$s_!jqJw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ca9ce6-7a18-4ff5-8bb3-1d359f0604f8_2160x1620.png 1272w, https://substackcdn.com/image/fetch/$s_!jqJw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ca9ce6-7a18-4ff5-8bb3-1d359f0604f8_2160x1620.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jqJw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ca9ce6-7a18-4ff5-8bb3-1d359f0604f8_2160x1620.png" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/02ca9ce6-7a18-4ff5-8bb3-1d359f0604f8_2160x1620.png&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;:1497952,&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_!jqJw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ca9ce6-7a18-4ff5-8bb3-1d359f0604f8_2160x1620.png 424w, https://substackcdn.com/image/fetch/$s_!jqJw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ca9ce6-7a18-4ff5-8bb3-1d359f0604f8_2160x1620.png 848w, https://substackcdn.com/image/fetch/$s_!jqJw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ca9ce6-7a18-4ff5-8bb3-1d359f0604f8_2160x1620.png 1272w, https://substackcdn.com/image/fetch/$s_!jqJw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02ca9ce6-7a18-4ff5-8bb3-1d359f0604f8_2160x1620.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 aria-hidden="true" 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><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>I think AI really knows me by heart &#10084;&#65039;</p><h2>Appendix </h2><p>AI also created this and this, but I&#8217;m not a long-haired white woman &#128548;  </p><div class="image-gallery-embed" data-attrs="{&quot;gallery&quot;:{&quot;images&quot;:[{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f1741422-b8be-40a5-ad8f-6f8d0f834ca8_512x512.png&quot;},{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e76aa0d1-f55d-4270-9774-ed532babd366_512x512.png&quot;}],&quot;caption&quot;:&quot;Other AI art&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/37dc915c-c46e-48d5-8ffe-07a1038c8523_1456x720.png&quot;}},&quot;isEditorNode&quot;:true}"></div><div><hr></div><p>And we made <a href="https://docs.google.com/presentation/d/1xn_V0-Bv-iEUjKY5sGih-27vjZpq9pMD/edit?usp=sharing&amp;ouid=115913138386406534697&amp;rtpof=true&amp;sd=true">this funny slide</a> and went back home without demoing. The next day, we noticed that we got the third price on twitter haha</p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Overcome resistance to build]]></title><description><![CDATA[Observe my mental blockage]]></description><link>https://learnlearnlearn.substack.com/p/overcome-resistance-to-build</link><guid isPermaLink="false">https://learnlearnlearn.substack.com/p/overcome-resistance-to-build</guid><dc:creator><![CDATA[Esther]]></dc:creator><pubDate>Sun, 26 Nov 2023 03:10:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!C4ED!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcda04160-ff4e-4302-b0ac-3a6c91c547cd_466x466.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Even though I was passionate about building an AI solution for learning Spanish (See <a href="https://learnlearnlearn.substack.com/p/the-bottleneck-in-learning-a-new">The Bottleneck in Learning a New Language</a>), I encountered massive resistance to creating it. Why? </p>
      <p>
          <a href="https://learnlearnlearn.substack.com/p/overcome-resistance-to-build">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Takeaways as an LLM Engineer]]></title><description><![CDATA[LLM best practices I learn in a startup]]></description><link>https://learnlearnlearn.substack.com/p/takeaways-as-an-llm-engineer</link><guid isPermaLink="false">https://learnlearnlearn.substack.com/p/takeaways-as-an-llm-engineer</guid><dc:creator><![CDATA[Esther]]></dc:creator><pubDate>Sun, 10 Sep 2023 22:00:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!iPPy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6de743c-14ef-4f8b-83d0-9089e3183658_974x1112.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1><strong>Introduction</strong></h1><p>I have been working on an AI learning company for two months that provides interesting knowledge and images whenever you have questions in your mind. For example, if you want to ask about 3D printing, the AI can generate information on that topic. This is one example that AI generates.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iPPy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6de743c-14ef-4f8b-83d0-9089e3183658_974x1112.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iPPy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6de743c-14ef-4f8b-83d0-9089e3183658_974x1112.png 424w, https://substackcdn.com/image/fetch/$s_!iPPy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6de743c-14ef-4f8b-83d0-9089e3183658_974x1112.png 848w, https://substackcdn.com/image/fetch/$s_!iPPy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6de743c-14ef-4f8b-83d0-9089e3183658_974x1112.png 1272w, https://substackcdn.com/image/fetch/$s_!iPPy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6de743c-14ef-4f8b-83d0-9089e3183658_974x1112.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iPPy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6de743c-14ef-4f8b-83d0-9089e3183658_974x1112.png" width="492" height="561.7084188911705" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c6de743c-14ef-4f8b-83d0-9089e3183658_974x1112.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1112,&quot;width&quot;:974,&quot;resizeWidth&quot;:492,&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_!iPPy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6de743c-14ef-4f8b-83d0-9089e3183658_974x1112.png 424w, https://substackcdn.com/image/fetch/$s_!iPPy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6de743c-14ef-4f8b-83d0-9089e3183658_974x1112.png 848w, https://substackcdn.com/image/fetch/$s_!iPPy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6de743c-14ef-4f8b-83d0-9089e3183658_974x1112.png 1272w, https://substackcdn.com/image/fetch/$s_!iPPy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6de743c-14ef-4f8b-83d0-9089e3183658_974x1112.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 aria-hidden="true" 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><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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ceL-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5f7c45e-1a01-43de-82de-f920c8f11d1a_1858x1240.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ceL-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5f7c45e-1a01-43de-82de-f920c8f11d1a_1858x1240.webp 424w, https://substackcdn.com/image/fetch/$s_!ceL-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5f7c45e-1a01-43de-82de-f920c8f11d1a_1858x1240.webp 848w, https://substackcdn.com/image/fetch/$s_!ceL-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5f7c45e-1a01-43de-82de-f920c8f11d1a_1858x1240.webp 1272w, https://substackcdn.com/image/fetch/$s_!ceL-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5f7c45e-1a01-43de-82de-f920c8f11d1a_1858x1240.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ceL-!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5f7c45e-1a01-43de-82de-f920c8f11d1a_1858x1240.webp" width="992" height="662.2417582417582" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b5f7c45e-1a01-43de-82de-f920c8f11d1a_1858x1240.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:972,&quot;width&quot;:1456,&quot;resizeWidth&quot;:992,&quot;bytes&quot;:122854,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&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-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ceL-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5f7c45e-1a01-43de-82de-f920c8f11d1a_1858x1240.webp 424w, https://substackcdn.com/image/fetch/$s_!ceL-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5f7c45e-1a01-43de-82de-f920c8f11d1a_1858x1240.webp 848w, https://substackcdn.com/image/fetch/$s_!ceL-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5f7c45e-1a01-43de-82de-f920c8f11d1a_1858x1240.webp 1272w, https://substackcdn.com/image/fetch/$s_!ceL-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5f7c45e-1a01-43de-82de-f920c8f11d1a_1858x1240.webp 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 aria-hidden="true" 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><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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Xjz3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb16f720-dd54-4c48-9bf1-501dab2272d6_1858x1240.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Xjz3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb16f720-dd54-4c48-9bf1-501dab2272d6_1858x1240.webp 424w, https://substackcdn.com/image/fetch/$s_!Xjz3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb16f720-dd54-4c48-9bf1-501dab2272d6_1858x1240.webp 848w, https://substackcdn.com/image/fetch/$s_!Xjz3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb16f720-dd54-4c48-9bf1-501dab2272d6_1858x1240.webp 1272w, https://substackcdn.com/image/fetch/$s_!Xjz3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb16f720-dd54-4c48-9bf1-501dab2272d6_1858x1240.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Xjz3!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb16f720-dd54-4c48-9bf1-501dab2272d6_1858x1240.webp" width="988" height="659.5714285714286" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bb16f720-dd54-4c48-9bf1-501dab2272d6_1858x1240.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:972,&quot;width&quot;:1456,&quot;resizeWidth&quot;:988,&quot;bytes&quot;:124968,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&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-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Xjz3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb16f720-dd54-4c48-9bf1-501dab2272d6_1858x1240.webp 424w, https://substackcdn.com/image/fetch/$s_!Xjz3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb16f720-dd54-4c48-9bf1-501dab2272d6_1858x1240.webp 848w, https://substackcdn.com/image/fetch/$s_!Xjz3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb16f720-dd54-4c48-9bf1-501dab2272d6_1858x1240.webp 1272w, https://substackcdn.com/image/fetch/$s_!Xjz3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb16f720-dd54-4c48-9bf1-501dab2272d6_1858x1240.webp 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 aria-hidden="true" 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><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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0t8x!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d3b9a5d-5c11-4670-bf6f-c4ff91eae087_1858x1240.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0t8x!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d3b9a5d-5c11-4670-bf6f-c4ff91eae087_1858x1240.webp 424w, https://substackcdn.com/image/fetch/$s_!0t8x!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d3b9a5d-5c11-4670-bf6f-c4ff91eae087_1858x1240.webp 848w, https://substackcdn.com/image/fetch/$s_!0t8x!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d3b9a5d-5c11-4670-bf6f-c4ff91eae087_1858x1240.webp 1272w, https://substackcdn.com/image/fetch/$s_!0t8x!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d3b9a5d-5c11-4670-bf6f-c4ff91eae087_1858x1240.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0t8x!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d3b9a5d-5c11-4670-bf6f-c4ff91eae087_1858x1240.webp" width="992" height="662.2417582417582" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3d3b9a5d-5c11-4670-bf6f-c4ff91eae087_1858x1240.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:972,&quot;width&quot;:1456,&quot;resizeWidth&quot;:992,&quot;bytes&quot;:120012,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&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-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0t8x!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d3b9a5d-5c11-4670-bf6f-c4ff91eae087_1858x1240.webp 424w, https://substackcdn.com/image/fetch/$s_!0t8x!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d3b9a5d-5c11-4670-bf6f-c4ff91eae087_1858x1240.webp 848w, https://substackcdn.com/image/fetch/$s_!0t8x!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d3b9a5d-5c11-4670-bf6f-c4ff91eae087_1858x1240.webp 1272w, https://substackcdn.com/image/fetch/$s_!0t8x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d3b9a5d-5c11-4670-bf6f-c4ff91eae087_1858x1240.webp 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 aria-hidden="true" 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><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 is not our real product but an example web view.</figcaption></figure></div><p>As an LLM Engineer, a significant portion of my work involves ensuring the quality of content and images. I evaluate whether the content provides meaningful information or is just a collection of meaningless words. I also check whether the images are relevant to the content. If you work on AI-generated images, you are likely familiar with the issues that AI faces. For example, people may appear distorted in the images, and the AI may generate lots of meaningless text.</p><p>Here are some of the things I have learned in my first two months on the job.</p><h1><strong>Simple instruction for LLM is usually better.</strong></h1><p>Before I joined, the old pipeline our company used had one prompt and asked AI to fit in 100 requirements. They asked AI to provide something interesting, be fun and engaging, avoid filler words, and not do certain things. They also asked AI to format some texts in style A, some in style B, and some in style C, D, E, F, G. When they asked AI to do so many things, AI became overwhelmed and the results were very poor.</p><p>However, if we understand that LLM/transformer is a series of predictions for the next word with some emphasis window (self-attention mechanism), we probably want to make sure AI can understand the one important goal and bias toward it rather than trying to achieve many goals at the same time. That&#8217;s why it&#8217;s usually better to do a chain if we have multiple objectives, but the trade-off will be latency. That&#8217;s why based on my experience the simpler the instruction, the better the performance.</p><p>Note: In addition, we also want to be aware of the initial dataset that it was trained on. Is our questioning format the same as the format that it was trained on? We should align our format with those.</p><h1><strong>Only Problems That Form a Pattern Are Worth Solving.</strong></h1><p>However, team members without a technical background may not understand it, and I often receive complaints such as &#8220;This image is off&#8221; or &#8220;That content is horrible&#8221;.</p><p>To be fair, I can make sure to resolve one specific content they complain about by specifying instructions. But is it worth the cost of the other 100 pieces of content that are good? So whenever my team members complain about content or image quality, the first question I ask myself is usually:</p><blockquote><p><em>Is it a corner case or a pattern?</em></p></blockquote><p>If it isn&#8217;t a pattern, it probably isn&#8217;t worth solving.</p><h1><strong>Keen Observations are the Key to Resolving LLM Problems.</strong></h1><p>One week, our founder kept saying &#8220;Our image AI is on LSD!&#8221; because the images the AI-generated were often rainbow-colored, crystal-like complicated patterns, and had a mix of colors in the background. To them, it seemed like the world was collapsing because everything was scary. However, when I looked into the problem, I noticed that all the &#8220;LSD images&#8221; were because the content was introducing abstract topics such as social justice and equality. The AI didn&#8217;t know how to draw them, so they got creative.</p><p>After giving them prompts to generate more concrete objects, many images became significantly better.</p><p>&#8220;Great work, Esther!&#8221; My founder beamed. Little did he know that it only took me less than an hour to figure this out and resolve this issue that seemed to be so large in scale. When this technology is so new, a scientific mindset such as observation, hypothesis, and experimentation is my toolkit.</p><h1><strong>The trade-off in LLM</strong></h1><h2><strong>The Trade-off Between Depth and Length, and Tone</strong></h2><p>When my team expressed dissatisfaction with the content quality, saying things such as &#8220;the texts are too long,&#8221; &#8220;the content isn&#8217;t informative,&#8221; and &#8220;there is no personality in the text,&#8221; I provided several examples to illustrate how content often represents a trade-off between various factors.</p><p>The following are three examples of writing about Giffen Goods:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5fiO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23192141-7416-41b9-b011-91da612a716c_1856x610.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5fiO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23192141-7416-41b9-b011-91da612a716c_1856x610.png 424w, https://substackcdn.com/image/fetch/$s_!5fiO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23192141-7416-41b9-b011-91da612a716c_1856x610.png 848w, https://substackcdn.com/image/fetch/$s_!5fiO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23192141-7416-41b9-b011-91da612a716c_1856x610.png 1272w, https://substackcdn.com/image/fetch/$s_!5fiO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23192141-7416-41b9-b011-91da612a716c_1856x610.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5fiO!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23192141-7416-41b9-b011-91da612a716c_1856x610.png" width="878" height="288.8475274725275" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23192141-7416-41b9-b011-91da612a716c_1856x610.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:479,&quot;width&quot;:1456,&quot;resizeWidth&quot;:878,&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-large" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!5fiO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23192141-7416-41b9-b011-91da612a716c_1856x610.png 424w, https://substackcdn.com/image/fetch/$s_!5fiO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23192141-7416-41b9-b011-91da612a716c_1856x610.png 848w, https://substackcdn.com/image/fetch/$s_!5fiO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23192141-7416-41b9-b011-91da612a716c_1856x610.png 1272w, https://substackcdn.com/image/fetch/$s_!5fiO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23192141-7416-41b9-b011-91da612a716c_1856x610.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 aria-hidden="true" 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><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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zkfH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F571142d3-4a4d-4333-ae8f-df5587cbb1dc_1856x610.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zkfH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F571142d3-4a4d-4333-ae8f-df5587cbb1dc_1856x610.png 424w, https://substackcdn.com/image/fetch/$s_!zkfH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F571142d3-4a4d-4333-ae8f-df5587cbb1dc_1856x610.png 848w, https://substackcdn.com/image/fetch/$s_!zkfH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F571142d3-4a4d-4333-ae8f-df5587cbb1dc_1856x610.png 1272w, https://substackcdn.com/image/fetch/$s_!zkfH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F571142d3-4a4d-4333-ae8f-df5587cbb1dc_1856x610.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zkfH!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F571142d3-4a4d-4333-ae8f-df5587cbb1dc_1856x610.png" width="882" height="290.16346153846155" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/571142d3-4a4d-4333-ae8f-df5587cbb1dc_1856x610.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:479,&quot;width&quot;:1456,&quot;resizeWidth&quot;:882,&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-large" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!zkfH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F571142d3-4a4d-4333-ae8f-df5587cbb1dc_1856x610.png 424w, https://substackcdn.com/image/fetch/$s_!zkfH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F571142d3-4a4d-4333-ae8f-df5587cbb1dc_1856x610.png 848w, https://substackcdn.com/image/fetch/$s_!zkfH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F571142d3-4a4d-4333-ae8f-df5587cbb1dc_1856x610.png 1272w, https://substackcdn.com/image/fetch/$s_!zkfH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F571142d3-4a4d-4333-ae8f-df5587cbb1dc_1856x610.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 aria-hidden="true" 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><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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oofH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F800603ca-a4e8-45ea-a36e-04d2ae2bc182_1856x610.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oofH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F800603ca-a4e8-45ea-a36e-04d2ae2bc182_1856x610.png 424w, https://substackcdn.com/image/fetch/$s_!oofH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F800603ca-a4e8-45ea-a36e-04d2ae2bc182_1856x610.png 848w, https://substackcdn.com/image/fetch/$s_!oofH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F800603ca-a4e8-45ea-a36e-04d2ae2bc182_1856x610.png 1272w, https://substackcdn.com/image/fetch/$s_!oofH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F800603ca-a4e8-45ea-a36e-04d2ae2bc182_1856x610.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oofH!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F800603ca-a4e8-45ea-a36e-04d2ae2bc182_1856x610.png" width="880" height="289.5054945054945" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/800603ca-a4e8-45ea-a36e-04d2ae2bc182_1856x610.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:479,&quot;width&quot;:1456,&quot;resizeWidth&quot;:880,&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-large" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!oofH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F800603ca-a4e8-45ea-a36e-04d2ae2bc182_1856x610.png 424w, https://substackcdn.com/image/fetch/$s_!oofH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F800603ca-a4e8-45ea-a36e-04d2ae2bc182_1856x610.png 848w, https://substackcdn.com/image/fetch/$s_!oofH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F800603ca-a4e8-45ea-a36e-04d2ae2bc182_1856x610.png 1272w, https://substackcdn.com/image/fetch/$s_!oofH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F800603ca-a4e8-45ea-a36e-04d2ae2bc182_1856x610.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 aria-hidden="true" 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><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>As you can see,</p><ul><li><p>Example 1 (Top): It has the most personality with an analogy to assist understanding. However, it has filler words, such as &#8220;Ever heard of Giffen goods?&#8221;</p></li><li><p>Example 2 (Middle): It still has some personality, and we successfully solved the problem of long texts. However, it suffers from some information loss.</p></li><li><p>Example 3 (Bottom): It has adequate information with an acceptable length, but now it looks like a boring textbook!</p></li></ul><p>Beyond the trade-off of tone, length, and depth, a trade-off exists in all prompt engineering practices because when AI is biased toward achieving one goal, some other things get sacrificed. If we are not trying to train a better, bigger model but building an LLM application in production, we have to lean toward whatever is more aligned with our business goals and user needs.</p><h2><strong>The Trade-Off Between Latency and Content Quality</strong></h2><p>Users feel frustrated if they have to wait more than a minute for the output after inputting their request. While it&#8217;s possible to train small models on specific tasks to reduce latency, these models will perform poorly if we ask them to handle tasks outside their domain. As I develop a general-purpose learning app, I&#8217;m hesitant to sacrifice content quality for speed.</p><p>You might ask, &#8220;Why not just stream the output?&#8221; However, the challenge I face in production involves a complicated chain of data validation and product requirements before sending the content to the users. Would users prefer waiting a minute to see the complete content or waiting 10 seconds to flip through every page?</p><p>I believe that as more AI tools with easy usage become available in the future, we might find a way to resolve this trade-off. For now, I&#8217;m trying to balance the competing demands of latency and content quality.</p><h1><strong>Prompt Engineering is Underestimated.</strong></h1><p>Most engineers think that prompt engineering isn&#8217;t &#8220;real&#8221; engineering. My engineer friend likes to say, &#8220;It&#8217;s just a GPT API wrapper.&#8221; But if I can soon create better prompts to replace coding, is it still stupid?</p><p>As an engineer, I used to find prompt engineering to be unimportant. Training on clusters and thinking about gradients seemed to be much cooler. However, from a business perspective, prompt engineering usually provides the biggest value at the lowest cost for content generation tasks.</p><p>Although there are already many prompt engineering cookbooks, it still requires lots of imagination and creativity to get the most out of this new technology. I hypothesize that we haven&#8217;t exhausted the potential of prompt engineering due to the indeterminate output and lack of an assistive evaluation tool in LLM.</p><p>Building a content evaluation tool is difficult, even through fine-tuning AI evaluation. But systematic exploration of prompts already exists. My friend built <a href="https://baserun.ai/playground">Baserun</a> for prompt testing and evaluating output, which is a first step towards systemizing this process.</p><h1><strong>Using Temperature as a Simple Design for Fall-Back Systems and Data Validation.</strong></h1><p>Currently, I use datatype checking to ensure that AI output is in the desired format. When it is not, I change the temperature to create variation and ask the AI to rerun. Langchain has an <a href="https://python.langchain.com/docs/modules/model_io/output_parsers/">output parser tool</a> for this purpose, but from my testing, their parser tool is not reliable, so I prefer to test on my own. Guardrail AI also has its own testing system, but while its design philosophy makes sense, the implementation is not intuitive, so I have not yet tried it.</p><p>Overall, rerunning is not ideal as it takes up more time. Additionally, data validation requires returning the entire AI output, which takes away the advantage of streaming. I would love to learn more about solutions for these aspects.</p><h1><strong>It&#8217;s super important to communicate the possibilities and limitations of LLM to your team.</strong></h1><p>In a team where most people don&#8217;t really know how LLM works, I gradually realized the importance of communicating the information gap. There are two main points that I keep communicating with my team:</p><ol><li><p><strong>Improvement isn&#8217;t linear, and my timeline differs from people&#8217;s expectations.</strong> My team seems to expect that the content will gradually improve day by day, but that&#8217;s a misunderstanding. I will need to build the infrastructure, validate the output, examine the latency, and experiment with different prompts and combinations of chains. But when I&#8217;m done with it, it will be a totally new version of output. Conversely, sometimes I can simply change the prompt in 5 minutes and fix some significant problems. My team might think I worked a lot to make this great progress, but it&#8217;s actually much simpler and quicker than they expected. Overall, the timeline I&#8217;m working on isn&#8217;t as linear as they think, so I need to provide them with more context on how AI works.</p></li><li><p><strong>Generating content that balances our expectations (users&#8217; needs in the future) matters more than satisfying everyone.</strong> In the &#8220;Trade-Offs Between One, Depth, and Length&#8221; section, I showed that people want content that is fun, with in-depth knowledge, and a comfortable length. However, I&#8217;ve started to communicate with them that there is a trade-off or balance we can achieve rather than satisfying everyone&#8217;s needs. I&#8217;m not discounting that with better models, we might find a happy balance. But it requires clear and measurable &#8220;amazing content&#8221; that needs much more user feedback data and iterations, rather than personal judgments. As an LLM engineer, I&#8217;m learning how to communicate with my team to implement future practices that allow for scaling and acknowledge current constraints and trade-offs.</p></li></ol><p>Here is what I have learned so far, but every day I still feel like I don&#8217;t know shit about LLM. Please let me know if you have any additional ideas for improving LLM engineering practices!</p>]]></content:encoded></item><item><title><![CDATA[LLM App Tutorial — Building Your Own Auto Email Follow-Up]]></title><description><![CDATA[A python tutorial to build your first practical but simple LLM tool]]></description><link>https://learnlearnlearn.substack.com/p/llm-app-tutorial-building-your-own</link><guid isPermaLink="false">https://learnlearnlearn.substack.com/p/llm-app-tutorial-building-your-own</guid><dc:creator><![CDATA[Esther]]></dc:creator><pubDate>Fri, 28 Jul 2023 18:21:01 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e402dca-cb5e-4076-87fb-0812055b9a40_3872x2496.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1><strong>Problem</strong></h1><p>Throughout my job-hunting process, I found following up on emails very painful for outreach and recruiting. You need to be respectful but not pushy. Following up in 1 day looks desperate, but following up in 5 days is too late. The thought of it gives me a BIG headache and I end up procrastinating a lot. When I finally feel ready, the position has already been filled due to the competitive US job market.</p><p>Following up with people, especially recruiters, is so painful! You need to be respectful, not pushy, but also hit the point). Thinking of it gives me a headache and I procrastinate so much. When I was finally ready to send, the position is already filled In the crazy US job market. So I use LLM to directly follow up for me if people don&#8217;t respond in three days!</p><h1><strong>Solution</strong></h1><p>I built an auto-email follow-up solution with <a href="https://www.linkedin.com/in/ACoAABmnL0IBwFB252KP_elv5VepGhINTFDFozY">Eugene Chan</a>. If an email you sent to recruiters or outreach hasn&#8217;t been responded to for three days, GPT will generate a follow-up draft for you.</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;a3db5d9e-eb44-4182-875d-09fe8588fba8&quot;,&quot;duration&quot;:null}"></div><h1><strong>Features</strong></h1><ol><li><p>An Email label to filter recruiters vs non-recruiters</p></li><li><p>For labeled emails that haven&#8217;t been replied to for three days, a GPT draft a follow-email based on your prior conversation.</p></li><li><p>The draft sends it to your inbox to remind you to follow up, and you can customize it yourself before sending it.</p></li></ol><h1><strong>How we did do it?</strong></h1><p>The flowchart below describes our entire process. It can be divided into the following three parts.</p><ol><li><p>Python as the main logic flow</p></li><li><p>AWS lambda as backend flow</p></li><li><p>Zapier for Google Authentication and Daily Event Triggering</p></li></ol><p>First, we use Python to create the main logic flow, ensuring that we can send the email from our local machine and that the output draft from GPT is correct. Second, we use AWS Lambda to wrap this Python script as our backend. When an event is triggered, AWS Lambda executes the Python process. Lastly, we use Zapier to handle Gmail authentication and set 9 am as the event trigger time for our AWS Lambda function.</p><p>Feel free to review our <a href="https://github.com/eugenechantk/auto-followup-gpt">github</a> to learn more 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_!CaWH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e402dca-cb5e-4076-87fb-0812055b9a40_3872x2496.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CaWH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e402dca-cb5e-4076-87fb-0812055b9a40_3872x2496.png 424w, https://substackcdn.com/image/fetch/$s_!CaWH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e402dca-cb5e-4076-87fb-0812055b9a40_3872x2496.png 848w, https://substackcdn.com/image/fetch/$s_!CaWH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e402dca-cb5e-4076-87fb-0812055b9a40_3872x2496.png 1272w, https://substackcdn.com/image/fetch/$s_!CaWH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e402dca-cb5e-4076-87fb-0812055b9a40_3872x2496.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CaWH!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e402dca-cb5e-4076-87fb-0812055b9a40_3872x2496.png" width="1200" height="773.9010989010989" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5e402dca-cb5e-4076-87fb-0812055b9a40_3872x2496.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:939,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&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-large" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!CaWH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e402dca-cb5e-4076-87fb-0812055b9a40_3872x2496.png 424w, https://substackcdn.com/image/fetch/$s_!CaWH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e402dca-cb5e-4076-87fb-0812055b9a40_3872x2496.png 848w, https://substackcdn.com/image/fetch/$s_!CaWH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e402dca-cb5e-4076-87fb-0812055b9a40_3872x2496.png 1272w, https://substackcdn.com/image/fetch/$s_!CaWH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e402dca-cb5e-4076-87fb-0812055b9a40_3872x2496.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 aria-hidden="true" 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><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">Flowchart for our workflow</figcaption></figure></div><h1><strong>Python as the main logic flow</strong></h1><h2><strong>Step 1: Import libraries</strong></h2><pre><code>from googleapiclient.discovery import build
import json
import base64
# from lxml import etree
from datetime import datetime, timedelta
import json
import pandas as pd
import openai
import re
import os
from googleapiclient.errors import HttpError
from email.mime.text import MIMEText
from base64 import urlsafe_b64encode
from dotenv import load_dotenv</code></pre><pre><code># FOR AWS
openai.api_key = os.environ['OPENAI_KEY']</code></pre><h2><strong>Step 2: Fetch all emails and find those with the &#8220;Follow-up&#8221; label</strong></h2><p>To test the application locally, you will need to fetch the Gmail API and connect it as a service. This process is included in our <a href="https://github.com/eugenechantk/auto-followup-gpt/blob/main/app.py">app.py</a> code for authentication with Zapier and execution with AWS Lambda. Therefore, we have not included it in this logical flow. However, for local testing, you can follow this <a href="https://www.geeksforgeeks.org/how-to-read-emails-from-gmail-using-gmail-api-in-python/">tutorial</a> to set up the Gmail API.</p><pre><code>def find_all_messages(service, follow_up_label_id):
    # request a list of all the messages
    # We can also pass maxResults to get any number of emails. Like this:
    result = service.users().messages().list(
        userId='me', labelIds=['SENT', follow_up_label_id]).execute()
    messages = result.get('messages')
    return messages</code></pre><pre><code># find the follow up labels
def find_follow_up_label(service):
    try:
        labels_results = service.users().labels().list(userId='me').execute()
        labels = labels_results.get('labels', [])
        print('labels', labels)        # #store all ids with follow-up label
        follow_up_label_id = None
        for label in labels:
            if label['name'] == 'Follow-up':
                follow_up_label_id = label['id']
        return follow_up_label_id
    except Exception as e:
        print(e)
        return None</code></pre><h2><strong>Step 3: Check if you are the sender of the last thread</strong></h2><p>Here, we can view all the threads along with their IDs and determine if we are the sender of the most recent thread.</p><pre><code>def get_thread_and_id(service, target_text):
    # find the thread for this email
    thread_id = target_text['threadId']
    thread = service.users().threads().get(userId='me', id=thread_id).execute()
    return thread, thread_id</code></pre><pre><code>def check_sender_of_last_thread(thread):
    if 'messages' in thread:
        last_message = thread['messages'][-1]
    if 'payload' in last_message:
        payload = last_message['payload']
        headers = payload['headers']
        for header in headers:
            if header['name'] == 'From':
                sender = header['value']
                return sender
    return None</code></pre><h2><strong>Step 4: Check if the email has not been responded to for 3+ days.</strong></h2><p>We are only computing the date at this point. After we gather all the necessary information for the next step, we will update the filter in 3 days.</p><pre><code>def get_subject_sender_receiver_date(headers, target_text):</code></pre><pre><code>    for d in headers:
        if d['name'] == 'Subject':
            subject = d['value']
        if d['name'] == 'From':
            sender = d['value']
        if d['name'] == 'To' or d['name'] == 'Delivered-To':
            receiver = d['value']    internal_date = target_text['internalDate']
    sent_time = datetime.fromtimestamp(
        int(internal_date) / 1000).strftime('%Y-%m-%d %H:%M:%S')
    return subject, sender, receiver, sent_time</code></pre><h2><strong>Step 5: Gather all the information of those emails you want to follow up</strong></h2><p>The <code>get_body</code> function decodes encrypted emails to text. The <code>not_replied_emails</code> function gathers all the necessary information for follow-up, including the message ID, subject, thread ID, receiver, sent time, and body.</p><pre><code>def get_body(payload):
&#9;&#9;'''Find Email body'''
    # The Body of the message is in Encrypted format. So, we have to decode it.
    # Get the data and decode it with base 64 decoder.</code></pre><pre><code>    parts = payload.get('parts')[0]
    # non pure text
    if 'multipart' in parts['mimeType']:
        for part in parts['parts']:
            if part['mimeType'] == 'text/plain':
                data = part['body']['data']
    # pure text
    else:
        data = parts['body']['data']    data = data.replace("-", "+").replace("_", "/")
    body = base64.b64decode(data).decode('utf-8')
    return bodydef not_replied_emails(service, follow_up_label_id):
&#9;&#9;'''Collect the email that we want to follow up in a data frame'''    messages = find_all_messages(service, follow_up_label_id)
    if (messages is None):
        return None
    # output data storage
    df = pd.DataFrame(columns=['msgId', 'subject', 'thread_id',
                      'sender', 'receiver', 'sent_time', 'body'])
    # iterate through all the messages
    thread_ids = set()    for msg in messages:
        # Get the message from its id
        txt = service.users().messages().get(
            userId='me', id=msg['id']).execute()
        # print("txt['labelIds']", txt['labelIds'])
        target_text = txt
        thread, thread_id = get_thread_and_id(service, target_text)
        last_sender = check_sender_of_last_thread(thread)        # Use try-except to avoid any Errors
        try:
            # Get value of 'payload' from dictionary 'target_text'
            payload = target_text['payload']
            headers = payload['headers']            subject, sender, receiver, sent_time = get_subject_sender_receiver_date(
                headers, target_text)            # check if the email is responded or not by seeing the last sender
            # and we haven't checked this thread yet
            if (last_sender == sender) and (thread_id not in thread_ids):
                thread_ids.add(thread_id)
                body = get_body(payload)                new_row = {'msgId': msg['id'], 'subject': subject, 'thread_id': thread_id, 'sender': sender,
                            'receiver': receiver, 'sent_time': sent_time, 'body': body}
                df.loc[len(df)] = new_row        except Exception as e:
            print('Error Occured: ', e)
            pass    # save as a json data
    df_dict = df.to_dict(orient='records')
    df['sent_time'] = df['sent_time'].astype(str)
    json_data = json.dumps(df_dict)    return json_data</code></pre><h2><strong>Step 6: Draft a follow-up with GPT using Openai API</strong></h2><p>We perform data cleaning and generate responses using the Openai API.</p><pre><code>def data_cleaning(json_str):
    # Convert the string to a DataFrame
    df = pd.read_json(json_str, orient='records')</code></pre><pre><code>    # filter dataframe that has been three days since the email was sent
    df['sent_time'] = pd.to_datetime(df['sent_time'])    # Calculate threshold date (current date - 3 days)
    threshold_date = datetime.now().date() - timedelta(days=3)    # Filter the dataframe based on the condition
    df = df[df['sent_time'].dt.date &lt;= threshold_date]    # Apply the function on the 'email_string' column
    df['receiver'] = df['receiver'].apply(extract_email)    # %%
    # add an empty column to the dataframe
    df['reply'] = ''    return dfdef extract_email(string):
    # Define the regex pattern
    pattern = r'[\\w\\.-]+@[\\w\\.-]+'
    matches = re.findall(pattern, string)
    if matches:
        return matches[0]
    else:
        return ""def openai_prompt_response(clean_body, receiver, subject):    try: 
        prompt = "I wrote this email: " + clean_body + "\\n" + \\
            "Can you write a follow-up email for this email I wrote? I don't need a subject, and the email should be less than 100 words, and every sentence should be complete. The email should include the phrase, follow up, in the email body."
        model = "text-davinci-003"
        response = openai.Completion.create(
            engine=model, prompt=prompt, max_tokens=100)        generated_text = response.choices[0].text
        
        generated_formatted = "This is a reminder to send a follow-up email to " + receiver + ".\\n" "The email you wrote previously has the subject of: " + subject + "\\n\\nHere is the drafted follow up for you &#128521;\\n"+ generated_text        return generated_formatted
    except Exception as e:
        print('Error Occured: ', e)
        return Nonedef delete_old_thread(input_text):
    pattern = r'On [\\w\\s,]+ at [\\d:\\s]+[APM]+ [\\w\\s]+ &lt;[\\w.-]+@[\\w.-]+&gt;'
    match = re.search(pattern, input_text, re.IGNORECASE)
    if match:
        return input_text[:match.start()]
    else:
        return input_textdef generate_reply(json_str):
    df = data_cleaning(json_str)
    for index, row in df.iterrows():
        msgId = row['msgId']
        subject = row['subject']
        sender = row['sender']
        receiver = row['receiver']
        sent_time = row['sent_time']
        body = row['body']        clean_body = delete_old_thread(body)        response = openai_prompt_response(body, receiver, subject)        df.loc[index, 'reply'] = response
    df['sent_time'] = df['sent_time'].astype(str)
    df_dict = df.to_dict(orient='records')
    openai_json = json.dumps(df_dict)    return openai_json</code></pre><h2><strong>Step 7: Send the draft email to yourself</strong></h2><p>We look through all the emails, sending them one by one.</p><pre><code>def send_one_email(service, sender, receiver, subject, message):
    # Create an email message
    email = MIMEText(message)
    email['to'] = receiver
    email['from'] = sender
    email['subject'] = subject</code></pre><pre><code>    # Encode the email content
    raw_email = urlsafe_b64encode(email.as_bytes()).decode('utf-8')    # Send the email
    try:
        message = service.users().messages().send(
            userId='me', body={'raw': raw_email}).execute()
        print('One email sent successfully!')
        return message
    except HttpError as error:
        print('An error occurred while sending the email:', error)
        return None# -- Main Function for Sending Email -- #
def send_email_to_all(service, openai_json, email_address):
    df = pd.read_json(openai_json, orient='records')
    email_list = []    for i in range(len(df)):
        sender = email_address  
        real_receiver = df['receiver'][i]
        receiver = email_address        subject = '-- Follow up reminder -- ' + \\
            df['subject'][i] + ' -- For ' + real_receiver + ' ---'
        print(subject)
        message = df['reply'][i]
        message = send_one_email(service, sender, receiver, subject, message)
        email_list.append({'id': df['msgId'][i], 'message': message})    return email_list</code></pre><h1><strong>AWS lambda as backend flow</strong></h1><p>Auto Follow-up consists of two components: a Zapier custom integration that serves as the interface for authentication and cron job orchestration, and a serverless function that handles the follow-up draft generation and sends reminders.</p><p>Our Python logic flow is administered through AWS Lambda. The code we execute on Lambda is referred to as a &#8220;Lambda function.&#8221; Lambda can automatically trigger functions (such as sending emails) when a specified event occurs (for example, Zapier&#8217;s daily checking time). If you are unfamiliar with AWS Lambda, you can check out an introduction <a href="https://www.youtube.com/watch?v=eOBq__h4OJ4">here</a>.</p><h1><strong>Building a serverless API with AWS</strong></h1><p>AWS offers a serverless application model (SAM) that simplifies the deployment of serverless code as Lambda functions and enables it to be served through APIs with the Amazon API Gateway. AWS&#8217;s serverless architecture includes a tool called SAM-CLI, which automates the compilation and deployment of serverless functions to an AWS cluster.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Eci-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9a39963-a0f3-4923-846a-5ff1eb63cc79_543x303.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Eci-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9a39963-a0f3-4923-846a-5ff1eb63cc79_543x303.png 424w, https://substackcdn.com/image/fetch/$s_!Eci-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9a39963-a0f3-4923-846a-5ff1eb63cc79_543x303.png 848w, https://substackcdn.com/image/fetch/$s_!Eci-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9a39963-a0f3-4923-846a-5ff1eb63cc79_543x303.png 1272w, https://substackcdn.com/image/fetch/$s_!Eci-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9a39963-a0f3-4923-846a-5ff1eb63cc79_543x303.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Eci-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9a39963-a0f3-4923-846a-5ff1eb63cc79_543x303.png" width="543" height="303" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b9a39963-a0f3-4923-846a-5ff1eb63cc79_543x303.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:303,&quot;width&quot;:543,&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_!Eci-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9a39963-a0f3-4923-846a-5ff1eb63cc79_543x303.png 424w, https://substackcdn.com/image/fetch/$s_!Eci-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9a39963-a0f3-4923-846a-5ff1eb63cc79_543x303.png 848w, https://substackcdn.com/image/fetch/$s_!Eci-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9a39963-a0f3-4923-846a-5ff1eb63cc79_543x303.png 1272w, https://substackcdn.com/image/fetch/$s_!Eci-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9a39963-a0f3-4923-846a-5ff1eb63cc79_543x303.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 aria-hidden="true" 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><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">AWS Serverless Application Model, which our generation and sending backend also follows</figcaption></figure></div><p>Our script for fetching all email threads that need a reply, generating a follow-up draft, and sending reminders to the user&#8217;s email lives in a single Python script that is wrapped as a Lambda function.</p><p>The AWS Serverless Application Model helps us create an API endpoint that receives requests and sends responses on behalf of the Lambda function. It ensures that our Lambda function receives the payload from the API request and sends the response back to the user through the API.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZDjh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e6df719-c5e6-43c2-8f6b-2257007d6af7_700x394.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZDjh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e6df719-c5e6-43c2-8f6b-2257007d6af7_700x394.png 424w, https://substackcdn.com/image/fetch/$s_!ZDjh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e6df719-c5e6-43c2-8f6b-2257007d6af7_700x394.png 848w, https://substackcdn.com/image/fetch/$s_!ZDjh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e6df719-c5e6-43c2-8f6b-2257007d6af7_700x394.png 1272w, https://substackcdn.com/image/fetch/$s_!ZDjh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e6df719-c5e6-43c2-8f6b-2257007d6af7_700x394.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZDjh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e6df719-c5e6-43c2-8f6b-2257007d6af7_700x394.png" width="700" height="394" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3e6df719-c5e6-43c2-8f6b-2257007d6af7_700x394.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:394,&quot;width&quot;:700,&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_!ZDjh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e6df719-c5e6-43c2-8f6b-2257007d6af7_700x394.png 424w, https://substackcdn.com/image/fetch/$s_!ZDjh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e6df719-c5e6-43c2-8f6b-2257007d6af7_700x394.png 848w, https://substackcdn.com/image/fetch/$s_!ZDjh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e6df719-c5e6-43c2-8f6b-2257007d6af7_700x394.png 1272w, https://substackcdn.com/image/fetch/$s_!ZDjh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e6df719-c5e6-43c2-8f6b-2257007d6af7_700x394.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 aria-hidden="true" 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><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>All the integration between the Lambda function and API Gateway is specified in the <code>template.yaml</code> file for the AWS Serverless Application Model.</p><pre><code>GenerateFollowUpFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: app.generate_follow_up_handler
      Runtime: python3.9
      Architectures:
        - x86_64
      Events:
        GenerateFollowUp:
          Type: Api # specify function as API will create an API endpoint with
&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;# AWS API Gateway
          Properties:
            Path: /generate-follow-up
            Method: post</code></pre><p>Once the function is set up as an API, an endpoint will be created. This is done when the Serverless Application is deployed with SAM-CLI. All request payloads can be retrieved in the Lambda function using the <code>event['body']</code> object.</p><p>The challenging part is passing the response from the Lambda function through the API Gateway and back to the Zapier custom integration. The API Gateway has a specific request format that needs to be followed. If the format is not followed, the API Gateway will not pass the response back to the client, which in our case is the Zapier custom integration.</p><pre><code>{
  "isBase64Encoded": false,
  "statusCode": [[status code]],
  "body": [[string body]],
  "headers": {
    "content-type": "application/json"
  }
}</code></pre><h1><strong>Zapier for Google Authentication and Daily Event Triggering</strong></h1><h2><strong>Scheduling the reminder every day</strong></h2><p>To automatically check and generate follow-up reminders every day, we initially built a cron job worker. However, we ended up using Zapier&#8217;s custom integration platform. Zapier is a no-code workflow tool that allows people to integrate apps and chain them into automatic workflows with an &#8220;If-this-then-that&#8221; structure.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Y3vy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa131ceb3-088f-4b28-99e2-a74dee74d347_700x473.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Y3vy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa131ceb3-088f-4b28-99e2-a74dee74d347_700x473.png 424w, https://substackcdn.com/image/fetch/$s_!Y3vy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa131ceb3-088f-4b28-99e2-a74dee74d347_700x473.png 848w, https://substackcdn.com/image/fetch/$s_!Y3vy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa131ceb3-088f-4b28-99e2-a74dee74d347_700x473.png 1272w, https://substackcdn.com/image/fetch/$s_!Y3vy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa131ceb3-088f-4b28-99e2-a74dee74d347_700x473.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Y3vy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa131ceb3-088f-4b28-99e2-a74dee74d347_700x473.png" width="700" height="473" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a131ceb3-088f-4b28-99e2-a74dee74d347_700x473.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:473,&quot;width&quot;:700,&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_!Y3vy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa131ceb3-088f-4b28-99e2-a74dee74d347_700x473.png 424w, https://substackcdn.com/image/fetch/$s_!Y3vy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa131ceb3-088f-4b28-99e2-a74dee74d347_700x473.png 848w, https://substackcdn.com/image/fetch/$s_!Y3vy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa131ceb3-088f-4b28-99e2-a74dee74d347_700x473.png 1272w, https://substackcdn.com/image/fetch/$s_!Y3vy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa131ceb3-088f-4b28-99e2-a74dee74d347_700x473.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 aria-hidden="true" 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><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>While a cron job worker may seem like the most obvious choice, we ultimately chose to build our generation on Zapier for the following reasons:</p><ol><li><p>We needed to instantiate and orchestrate a cron job worker for each user (specifically, each Gmail account).</p></li><li><p>We needed to create a UI for users to authenticate with their Gmail account and grant us access to their sent emails.</p></li><li><p>We also needed to store the Gmail tokens for each user and handle token refresh, as users would not log in with Google every day when the cron job runs.</p></li></ol><p>Zapier turned out to be the best solution for running cron jobs for multiple users. It handles authentication and refreshing of Gmail credentials, has a scheduler that runs the cron job for us, and provides an intuitive UI for users to set it up.</p><h2><strong>How did it work?</strong></h2><p>To connect these two components, we expose an API from the serverless function to the Zapier custom integration. When the Zapier integration is triggered (e.g. daily, weekly), it calls the API to check for emails that need follow-up. Then, it sends a reminder and a drafted follow-up message from GPT back to the user&#8217;s email.</p><p>Although this appears to be a normal API flow, there are several challenges in connecting Zapier to the serverless API function (i.e., an AWS Lambda function):</p><ol><li><p>Zapier has a hard cap of 30 seconds for timeouts. However, depending on the follow-up items that need to be drafted and reminded, this often exceeds 30 seconds.</p></li><li><p>The AWS Lambda function does not automatically expose itself as an API. It needs to be wrapped in an API gateway to handle all the REST API requests and responses.</p></li></ol><h2><strong>Working within Zapier&#8217;s hard timeout</strong></h2><p>Zapier provides an &#8220;escape hatch&#8221; for custom integrations that may take more than 30 seconds to give a proper response. This method is called <code>performResume</code>. It allows Zapier integration to call an external API server and parse a callback URL for the external server to use to callback once the long operation is completed.</p><p>While Zapier is waiting, the workflow remains in a pending state (similar to <code>Promise</code> in JavaScript). When the external server calls back the callback URL, Zapier triggers the <code>performResume</code> function defined for the custom integration to complete the workflow.</p><p>In our case, since generating and sending follow-up reminders may take more than 30 seconds, when Zapier first calls our generate follow-up reminder API server, along with other required payload, it generates and passes a callback URL.</p><p>Once the generation and sending of reminders are complete, our backend posts a request to the callback URL that Zapier provided and triggers the <code>performResume</code> function, which returns the email reminder sent by our backend</p><h1><strong>Results</strong></h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CjXy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0035d531-587c-49bc-81c3-d6f0ecdb06f2_372x533.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CjXy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0035d531-587c-49bc-81c3-d6f0ecdb06f2_372x533.png 424w, https://substackcdn.com/image/fetch/$s_!CjXy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0035d531-587c-49bc-81c3-d6f0ecdb06f2_372x533.png 848w, https://substackcdn.com/image/fetch/$s_!CjXy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0035d531-587c-49bc-81c3-d6f0ecdb06f2_372x533.png 1272w, https://substackcdn.com/image/fetch/$s_!CjXy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0035d531-587c-49bc-81c3-d6f0ecdb06f2_372x533.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CjXy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0035d531-587c-49bc-81c3-d6f0ecdb06f2_372x533.png" width="372" height="533" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0035d531-587c-49bc-81c3-d6f0ecdb06f2_372x533.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:533,&quot;width&quot;:372,&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_!CjXy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0035d531-587c-49bc-81c3-d6f0ecdb06f2_372x533.png 424w, https://substackcdn.com/image/fetch/$s_!CjXy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0035d531-587c-49bc-81c3-d6f0ecdb06f2_372x533.png 848w, https://substackcdn.com/image/fetch/$s_!CjXy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0035d531-587c-49bc-81c3-d6f0ecdb06f2_372x533.png 1272w, https://substackcdn.com/image/fetch/$s_!CjXy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0035d531-587c-49bc-81c3-d6f0ecdb06f2_372x533.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 aria-hidden="true" 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><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>I shared this tool on LinkedIn, helping out 50+ friends and connections! &#127881;</p>]]></content:encoded></item><item><title><![CDATA[Learning Strategies to Finish Your First React App in a Day]]></title><description><![CDATA[Effective Learning Strategies, Motivation Techniques, and Resource Selection]]></description><link>https://learnlearnlearn.substack.com/p/learning-strategies-to-finish-your</link><guid isPermaLink="false">https://learnlearnlearn.substack.com/p/learning-strategies-to-finish-your</guid><dc:creator><![CDATA[Esther]]></dc:creator><pubDate>Sat, 22 Jul 2023 18:57:49 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7OEz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb903abd5-8999-4970-87c3-b8f9b65693af_1000x575.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1><strong>Project Scoping</strong></h1><p>When starting a new project, there are usually two directions to choose from: following a tutorial completely or using the tutorial to build what you want. While completely following a tutorial ensures success, building what you want sparks interest. Each direction has a very different learning strategy.</p><p>For my first website project, X, I used resources to build my chicken website because the system is simpler, and having fun motivates me for longer. However, for my first React App, since I don&#8217;t know much about the system structure, I decided to completely follow a trustworthy resource to understand the basics.</p><h1><strong>Personal Awareness</strong></h1><p>Timeline: I decided to finish it in only one day. Most people like to listen and follow the lesson one by one, and hence, most of them give up in the process because it&#8217;s dragging. Hence, I set a one-day maximum to do it myself because I know I will lose interest if I take longer.</p><h1><strong>Learning Resources</strong></h1><p>To ensure success in one day, I need to have very promising learning resources. Usually, paid online classes are the most promising, but they are boring, and I don&#8217;t want to pay. Here are my resource suggestions:</p><ul><li><p>Main resource: <a href="https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_getting_started">MDN web docs React</a></p></li><li><p>Secondary resource: <a href="https://www.youtube.com/playlist?list=PLC3y8-rFHvwgg3vaYJgHGnModB54rxOk3">ReactJS Tutorial for Beginners YouTube</a></p></li><li><p>Additional resource: ChatGPT</p></li></ul><p>I have tried MDN web doc for my first website building, so I know the quality is high. However, reading lots of text is tiring, and I don&#8217;t have many concepts about the reaction (components, state, etc.) yet, so I supplement with YouTube as a second resource. The <a href="https://www.youtube.com/playlist?list=PLC3y8-rFHvwgg3vaYJgHGnModB54rxOk3">ReactJS Tutorial</a> is better than &#8220;spending x hours to finish your first app video&#8221; because it chunks concepts, allowing me to grasp concepts quickly and feel motivated to finish watching. The additional resource, ChatGPT, provides more specific terms and coding examples because I don&#8217;t know where to put the example code and what they mean as a beginner!</p><h1><strong>Strategy in the Learning Process</strong></h1><h2><strong>Motivation: Let&#8217;s Do One More Section</strong></h2><p>I usually get quite frustrated or bored when trying to understand a big chunk of information when learning something new. Whenever I feel bored, I tell myself, &#8220;Let&#8217;s do one more section,&#8221; and then take a break or chat. After a certain point when things start to click, I immediately speed up.</p><h2><strong>Learning Strategy: Follow the Main Resource and Supplement with YouTube for High-Level Concepts. Use GPT to Dig into Specific Details</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7OEz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb903abd5-8999-4970-87c3-b8f9b65693af_1000x575.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7OEz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb903abd5-8999-4970-87c3-b8f9b65693af_1000x575.png 424w, https://substackcdn.com/image/fetch/$s_!7OEz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb903abd5-8999-4970-87c3-b8f9b65693af_1000x575.png 848w, https://substackcdn.com/image/fetch/$s_!7OEz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb903abd5-8999-4970-87c3-b8f9b65693af_1000x575.png 1272w, https://substackcdn.com/image/fetch/$s_!7OEz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb903abd5-8999-4970-87c3-b8f9b65693af_1000x575.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7OEz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb903abd5-8999-4970-87c3-b8f9b65693af_1000x575.png" width="1000" height="575" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b903abd5-8999-4970-87c3-b8f9b65693af_1000x575.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:575,&quot;width&quot;:1000,&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_!7OEz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb903abd5-8999-4970-87c3-b8f9b65693af_1000x575.png 424w, https://substackcdn.com/image/fetch/$s_!7OEz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb903abd5-8999-4970-87c3-b8f9b65693af_1000x575.png 848w, https://substackcdn.com/image/fetch/$s_!7OEz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb903abd5-8999-4970-87c3-b8f9b65693af_1000x575.png 1272w, https://substackcdn.com/image/fetch/$s_!7OEz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb903abd5-8999-4970-87c3-b8f9b65693af_1000x575.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 aria-hidden="true" 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><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>I will roughly browse through the code examples from the main resource, but the moment I feel tired of reading a concept I don&#8217;t understand immediately, I watch several relevant YouTube videos to supplement it and then go back. Usually, in this case, I can roughly understand what is going on at a higher level.</p><p>To understand specific implementations in the main resource, I put them into GPT and ask it to explain, so I can connect my high-level concepts with the code examples from my main resource.</p><h2><strong>Debug: Test and Ask</strong></h2><p>I use my high-level understanding to generate some hypotheses about bugs. However, I encounter a more complicated one that I don&#8217;t know how to handle. My roommate is a front-end engineer, so I ask him about the final bug, and explain the missing concept to me.</p><h1><strong>My Final Project Output:</strong></h1><p>View the web app: <a href="https://react-practice-f756.vercel.app/">here</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_!ehwf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd23dc9f-6bc4-48b2-a8f5-929e94977641_700x827.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ehwf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd23dc9f-6bc4-48b2-a8f5-929e94977641_700x827.png 424w, https://substackcdn.com/image/fetch/$s_!ehwf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd23dc9f-6bc4-48b2-a8f5-929e94977641_700x827.png 848w, https://substackcdn.com/image/fetch/$s_!ehwf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd23dc9f-6bc4-48b2-a8f5-929e94977641_700x827.png 1272w, https://substackcdn.com/image/fetch/$s_!ehwf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd23dc9f-6bc4-48b2-a8f5-929e94977641_700x827.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ehwf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd23dc9f-6bc4-48b2-a8f5-929e94977641_700x827.png" width="700" height="827" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dd23dc9f-6bc4-48b2-a8f5-929e94977641_700x827.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:827,&quot;width&quot;:700,&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_!ehwf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd23dc9f-6bc4-48b2-a8f5-929e94977641_700x827.png 424w, https://substackcdn.com/image/fetch/$s_!ehwf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd23dc9f-6bc4-48b2-a8f5-929e94977641_700x827.png 848w, https://substackcdn.com/image/fetch/$s_!ehwf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd23dc9f-6bc4-48b2-a8f5-929e94977641_700x827.png 1272w, https://substackcdn.com/image/fetch/$s_!ehwf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd23dc9f-6bc4-48b2-a8f5-929e94977641_700x827.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 aria-hidden="true" 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><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>Slay!</p>]]></content:encoded></item><item><title><![CDATA[Code without hands]]></title><description><![CDATA[Creative voice coding solution with students]]></description><link>https://learnlearnlearn.substack.com/p/code-without-hands</link><guid isPermaLink="false">https://learnlearnlearn.substack.com/p/code-without-hands</guid><dc:creator><![CDATA[Esther]]></dc:creator><pubDate>Wed, 19 Jul 2023 21:23:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!tFdi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F274a0ff4-5375-4047-87f8-13f62b6f0aba_600x657.gif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3>Problem</h3><p>From this post, <a href="https://medium.com/@lampmaa22/free-llm-gpt-tutorial-from-esther-7cc6b49d147e">Free LLM/GPT tutorial from Esther,</a> you know that I overwork myself too much, so I cannot type anymore. However, I know creative problem-solving. I still have my eyes and brain, so I came up with a solution: Why not ask people to code for me while I offer an LLM tutorial?</p><p>Another practice I want to gain from this experience is &#8220;technical planning&#8221;. To teach others, I need to make sure everything will work in the end, or else my students will feel terrible. Hence, it will push me to design an &#8220;extremely promising technical plan&#8221; rather than jumping to the first appealing solution for me, so I can practice being better at project scoping and technical planning.</p><h3>Initial Setup</h3><ul><li><p>Collaboration time: 3 hours. I set it as 3 hours to test if my idea will work.</p></li><li><p>Idea: I decided to try out the simplest idea possible, using our own front end to display GPT.</p></li><li><p>Planning: The day before, I spent around 1.5 hours scoping out the project. Some ideas I have including,</p></li></ul><ol><li><p>Flask app with render_template in HTML.</p></li><li><p>Langcorn and my own LLM customization in Python with the display on Vercel</p></li><li><p>Fetch API route -&gt; Display on HTML.</p></li></ol><p>I know option 3 looks easy and intuitive, but it takes me time to get there. I realized that options 1 and 2 might look cooler but with higher risks because the solution isn&#8217;t end-to-end. In this process, I keep pushing myself asking, &#8220;Can this be easier and more promising?&#8221; With my friend as my student in mind, I really push myself to the simplest.</p><h3>The tutorial</h3><p>We spent three hours together and another 40 minutes debugging to produce this simple output. Not bad, I would say.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tFdi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F274a0ff4-5375-4047-87f8-13f62b6f0aba_600x657.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tFdi!,w_424,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F274a0ff4-5375-4047-87f8-13f62b6f0aba_600x657.gif 424w, https://substackcdn.com/image/fetch/$s_!tFdi!,w_848,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F274a0ff4-5375-4047-87f8-13f62b6f0aba_600x657.gif 848w, https://substackcdn.com/image/fetch/$s_!tFdi!,w_1272,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F274a0ff4-5375-4047-87f8-13f62b6f0aba_600x657.gif 1272w, https://substackcdn.com/image/fetch/$s_!tFdi!,w_1456,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F274a0ff4-5375-4047-87f8-13f62b6f0aba_600x657.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tFdi!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F274a0ff4-5375-4047-87f8-13f62b6f0aba_600x657.gif" width="600" height="657" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/274a0ff4-5375-4047-87f8-13f62b6f0aba_600x657.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:657,&quot;width&quot;:600,&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;: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_!tFdi!,w_424,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F274a0ff4-5375-4047-87f8-13f62b6f0aba_600x657.gif 424w, https://substackcdn.com/image/fetch/$s_!tFdi!,w_848,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F274a0ff4-5375-4047-87f8-13f62b6f0aba_600x657.gif 848w, https://substackcdn.com/image/fetch/$s_!tFdi!,w_1272,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F274a0ff4-5375-4047-87f8-13f62b6f0aba_600x657.gif 1272w, https://substackcdn.com/image/fetch/$s_!tFdi!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F274a0ff4-5375-4047-87f8-13f62b6f0aba_600x657.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 aria-hidden="true" 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><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">our simple gpt web&nbsp;app</figcaption></figure></div><h3>Time Distribution</h3><ul><li><p>2 hours: Setting up, getting API, and generating output</p></li><li><p>1 hour 40 minutes: Trying streaming code</p></li></ul><h3>Advantages &amp; Disadvantages</h3><p>Here are some advantages and disadvantages of doing this voice control coding.</p><p>Advantages:</p><ul><li><p>Avoid random debugging: Since I cannot touch the code, I need to talk through the instructions out loud and be strategic and targeted when debugging.</p></li><li><p>Two people = bigger brain: Even though my partner is not an expert, they still provide great debugging ideas that help us make progress.</p></li><li><p>Work distribution: Sometimes, my partner factors the code and I look for solutions. This allows me to focus on the bigger picture rather than getting bogged down in details.</p></li></ul><p>Disadvantages:</p><ul><li><p>Higher communication cost: Sharing screens and code requires me to point out specific tabs and lines of code, which can be tiring. Students may move to other tabs or do other debugging that might not be right. To mitigate this, I ask him to push to GitHub and explain the code clearly to him. And the processing of exampling code helps me with debugging too.</p></li><li><p>Difficulty in tab management: Switching between tabs in the IDE, browser, and other applications can be confusing, and I often need to use voice controls to navigate.</p></li><li><p>It&#8217;s hard to debug when I&#8217;m unsure: Being unable to touch the code makes it slightly difficult to perform more tests while using voice control. That&#8217;s why I spent an additional 40 minutes debugging the streaming output on my own.</p></li></ul><p>You might ask: Will it be faster if I just code myself?</p><p>I might use the word &#8220;maybe&#8221;. Without this promising technical plan, I would still be struggling to piece together complex methods. As for debugging, it depends on the situation. Collaborating remotely increases the time it takes to debug due to the high communication cost, but it also reduces the time spent trying out random debugging ideas.</p><p>All in all, I find it pretty fun and want to experiment with different styles of pair programming in the future!</p>]]></content:encoded></item><item><title><![CDATA[What I learn from model deployment failure]]></title><description><![CDATA[Building lessons for ML in the future]]></description><link>https://learnlearnlearn.substack.com/p/what-i-learn-from-model-deployment</link><guid isPermaLink="false">https://learnlearnlearn.substack.com/p/what-i-learn-from-model-deployment</guid><dc:creator><![CDATA[Esther]]></dc:creator><pubDate>Mon, 17 Jul 2023 22:48:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ebcfe2-b76e-4470-888f-9cd412a758e8_1400x1121.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I spent the entire week deploying my cute stable diffusion model on Sagemaker and failed. Here are what I learn about ML model deployment and building.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!n9jH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ebcfe2-b76e-4470-888f-9cd412a758e8_1400x1121.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!n9jH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ebcfe2-b76e-4470-888f-9cd412a758e8_1400x1121.png 424w, https://substackcdn.com/image/fetch/$s_!n9jH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ebcfe2-b76e-4470-888f-9cd412a758e8_1400x1121.png 848w, https://substackcdn.com/image/fetch/$s_!n9jH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ebcfe2-b76e-4470-888f-9cd412a758e8_1400x1121.png 1272w, https://substackcdn.com/image/fetch/$s_!n9jH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ebcfe2-b76e-4470-888f-9cd412a758e8_1400x1121.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!n9jH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ebcfe2-b76e-4470-888f-9cd412a758e8_1400x1121.png" width="1400" height="1121" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/06ebcfe2-b76e-4470-888f-9cd412a758e8_1400x1121.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1121,&quot;width&quot;:1400,&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_!n9jH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ebcfe2-b76e-4470-888f-9cd412a758e8_1400x1121.png 424w, https://substackcdn.com/image/fetch/$s_!n9jH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ebcfe2-b76e-4470-888f-9cd412a758e8_1400x1121.png 848w, https://substackcdn.com/image/fetch/$s_!n9jH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ebcfe2-b76e-4470-888f-9cd412a758e8_1400x1121.png 1272w, https://substackcdn.com/image/fetch/$s_!n9jH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ebcfe2-b76e-4470-888f-9cd412a758e8_1400x1121.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 aria-hidden="true" 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><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><h1><strong>Points of failure</strong></h1><ol><li><p>Sagemaker is way too expensive. I spent $44 for using it for three days, and I cannot afford it.</p></li><li><p>The AI-generated image produced by Sagemaker is of poor quality. Despite using their stable AI model, the output looks terrible.</p></li></ol><div class="image-gallery-embed" data-attrs="{&quot;gallery&quot;:{&quot;images&quot;:[{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/35dd696e-7ce7-4b5c-b8e1-34adba42dbed_944x964.png&quot;},{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9346556c-d1a9-4e9f-a9ce-867932c8bd30_944x964.png&quot;},{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/77c54ba8-6843-47ea-9b94-31399fc7ff0a_944x964.png&quot;}],&quot;caption&quot;:&quot;stablility ai output from sagemaker&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/56216295-9cd5-48d5-b8d0-fa7461a952bd_1456x474.png&quot;}},&quot;isEditorNode&quot;:true}"></div><p>3. The technical difficulty is quite high. I got stuck generating my images on the endpoints for 2 days because images are very large outputs when represented as RGB numbers. I couldn&#8217;t find any tutorial on how to automatically upload them to S3 data storage and send them to the front end as a link.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://learnlearnlearn.substack.com/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 Esther&#8217;s Substack! 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><strong>What do I learn from my failure?</strong></h1><ol><li><p><strong>Gaining more information at the early stage may be more important than completing a single subproblem.</strong> I spent a lot of time working on the (3) endpoint technical difficulty, which caused me to overlook other important aspects, such as (2) the output quality. I was overly excited about trying AWS and had too much trust in their models. However, I should have first tested the AI image generation output. While software engineering involves breaking down problems into subproblems, starting with tracer bullets (proofs that the architecture, prototype, and outputs are compatible and feasible) should still be the primary focus.</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_!ma8e!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5717a3b9-921d-4467-b6fa-b46d052505ec_700x524.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ma8e!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5717a3b9-921d-4467-b6fa-b46d052505ec_700x524.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ma8e!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5717a3b9-921d-4467-b6fa-b46d052505ec_700x524.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ma8e!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5717a3b9-921d-4467-b6fa-b46d052505ec_700x524.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ma8e!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5717a3b9-921d-4467-b6fa-b46d052505ec_700x524.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ma8e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5717a3b9-921d-4467-b6fa-b46d052505ec_700x524.jpeg" width="700" height="524" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5717a3b9-921d-4467-b6fa-b46d052505ec_700x524.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:524,&quot;width&quot;:700,&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_!ma8e!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5717a3b9-921d-4467-b6fa-b46d052505ec_700x524.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ma8e!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5717a3b9-921d-4467-b6fa-b46d052505ec_700x524.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ma8e!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5717a3b9-921d-4467-b6fa-b46d052505ec_700x524.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ma8e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5717a3b9-921d-4467-b6fa-b46d052505ec_700x524.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 aria-hidden="true" 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><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">tracer bullet from the book, the pragmatic programmer</figcaption></figure></div><p><strong>2. Deploying machine learning models requires much more attention than just deploying the models themselves.</strong> I encountered many extra tasks beyond the deployment process. First, my computer would easily crash while running. Second, I needed to constantly monitor billing. Third, there were many new things to learn about setting up the system, such as dealing with permission problems when requesting quota increases. In order to design an effective system, I need to feel comfortable navigating AWS and understanding its potential constraints.</p><p><strong>3. Gain an overall understanding of the system before following the setup steps.</strong> Rather than treating AWS like a user manual and following the setup steps step-by-step, like assembling a bike, I should approach it like reading a research paper and browsing through everything to gain an overall understanding of each part. This will help me avoid the fear of the unknown and allow me to more easily unblock myself when issues arise.</p><p>4. When I wake up in the morning, I should spend 10 minutes asking myself:</p><blockquote><p>&#8220;Am I solving the right problem?&#8221;</p></blockquote><p>I usually wake up and start thinking about problems like a teenage boy in a messy love affair. But is that the right problem to pursue at this stage, or should I focus on fixing other parts first? What are the most important problems related to feasibility that I need to address now? I shouldn&#8217;t shy away from scary bottleneck problems and potentially call the project quits if it doesn&#8217;t pass feasibility and usability tests.</p><p><strong>5. Time boxing when trying something new.</strong> When experimenting with new technology, there are always unexpected bottlenecks. Timing each task is the best way to determine where I get stuck and how much time I spend on each task. Although this week&#8217;s failure is disappointing, I can still see that Tuesday and Wednesday were quite productive, and the bottleneck was the same problem as last Thursday and Friday.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IRes!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bf1b6d6-100b-4282-8d59-0dbc6ea7e86f_700x658.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IRes!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bf1b6d6-100b-4282-8d59-0dbc6ea7e86f_700x658.png 424w, https://substackcdn.com/image/fetch/$s_!IRes!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bf1b6d6-100b-4282-8d59-0dbc6ea7e86f_700x658.png 848w, https://substackcdn.com/image/fetch/$s_!IRes!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bf1b6d6-100b-4282-8d59-0dbc6ea7e86f_700x658.png 1272w, https://substackcdn.com/image/fetch/$s_!IRes!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bf1b6d6-100b-4282-8d59-0dbc6ea7e86f_700x658.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IRes!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bf1b6d6-100b-4282-8d59-0dbc6ea7e86f_700x658.png" width="700" height="658" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0bf1b6d6-100b-4282-8d59-0dbc6ea7e86f_700x658.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:658,&quot;width&quot;:700,&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_!IRes!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bf1b6d6-100b-4282-8d59-0dbc6ea7e86f_700x658.png 424w, https://substackcdn.com/image/fetch/$s_!IRes!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bf1b6d6-100b-4282-8d59-0dbc6ea7e86f_700x658.png 848w, https://substackcdn.com/image/fetch/$s_!IRes!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bf1b6d6-100b-4282-8d59-0dbc6ea7e86f_700x658.png 1272w, https://substackcdn.com/image/fetch/$s_!IRes!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bf1b6d6-100b-4282-8d59-0dbc6ea7e86f_700x658.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 aria-hidden="true" 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><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><strong>6. Put more effort into technical planning during the initial stages and create hypothesis-driven documentation throughout the process.</strong> Although documentation and technical planning may seem like a waste of time, I have learned that they provide significant value in ensuring that you are on the right track. To improve my documentation process, I started using a new system that clearly lays out different MVP versions, proof of concepts, and technical planning. Additionally, I documented all the encountered problems along with their potential problem hypotheses during the development process.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Jlaw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe29a5e0f-251d-448a-ae40-de6e124c8b86_700x933.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Jlaw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe29a5e0f-251d-448a-ae40-de6e124c8b86_700x933.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Jlaw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe29a5e0f-251d-448a-ae40-de6e124c8b86_700x933.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Jlaw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe29a5e0f-251d-448a-ae40-de6e124c8b86_700x933.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Jlaw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe29a5e0f-251d-448a-ae40-de6e124c8b86_700x933.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Jlaw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe29a5e0f-251d-448a-ae40-de6e124c8b86_700x933.jpeg" width="700" height="933" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e29a5e0f-251d-448a-ae40-de6e124c8b86_700x933.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:933,&quot;width&quot;:700,&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_!Jlaw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe29a5e0f-251d-448a-ae40-de6e124c8b86_700x933.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Jlaw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe29a5e0f-251d-448a-ae40-de6e124c8b86_700x933.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Jlaw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe29a5e0f-251d-448a-ae40-de6e124c8b86_700x933.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Jlaw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe29a5e0f-251d-448a-ae40-de6e124c8b86_700x933.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 aria-hidden="true" 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><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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LYFS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59e7cc6b-53f9-4abb-b51a-1d25d3b25b5b_700x582.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LYFS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59e7cc6b-53f9-4abb-b51a-1d25d3b25b5b_700x582.png 424w, https://substackcdn.com/image/fetch/$s_!LYFS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59e7cc6b-53f9-4abb-b51a-1d25d3b25b5b_700x582.png 848w, https://substackcdn.com/image/fetch/$s_!LYFS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59e7cc6b-53f9-4abb-b51a-1d25d3b25b5b_700x582.png 1272w, https://substackcdn.com/image/fetch/$s_!LYFS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59e7cc6b-53f9-4abb-b51a-1d25d3b25b5b_700x582.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LYFS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59e7cc6b-53f9-4abb-b51a-1d25d3b25b5b_700x582.png" width="700" height="582" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/59e7cc6b-53f9-4abb-b51a-1d25d3b25b5b_700x582.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:582,&quot;width&quot;:700,&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_!LYFS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59e7cc6b-53f9-4abb-b51a-1d25d3b25b5b_700x582.png 424w, https://substackcdn.com/image/fetch/$s_!LYFS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59e7cc6b-53f9-4abb-b51a-1d25d3b25b5b_700x582.png 848w, https://substackcdn.com/image/fetch/$s_!LYFS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59e7cc6b-53f9-4abb-b51a-1d25d3b25b5b_700x582.png 1272w, https://substackcdn.com/image/fetch/$s_!LYFS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59e7cc6b-53f9-4abb-b51a-1d25d3b25b5b_700x582.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 aria-hidden="true" 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><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 is also a way to think out loud.</figcaption></figure></div><p>This methodology is helpful when dealing with complex problems because it allows you time to reflect and readjust before pursuing every new idea that comes your way. A simple way to implement this is to imagine that you are reporting your progress to your manager.</p><p><strong>7. Remember to take a break.</strong> Last week, I overworked myself while thinking about a problem. As a result, my wrist and fingers hurt this week, making it difficult to do anything.</p><p><strong>8. Unblocking Your Emotions: </strong>I&#8217;ve learned that unblocking my emotions is a prerequisite to unblocking problems in the project. For instance, I was demotivated when I learned how expensive SageMaker was after trying it out on the first day. Should I stop the project because it&#8217;s not feasible?</p><p>To unblock my motivation issue, I created a brainstorming page called</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jxV_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13a59e86-e080-41f2-8a55-a5c4d9f245ad_700x966.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jxV_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13a59e86-e080-41f2-8a55-a5c4d9f245ad_700x966.png 424w, https://substackcdn.com/image/fetch/$s_!jxV_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13a59e86-e080-41f2-8a55-a5c4d9f245ad_700x966.png 848w, https://substackcdn.com/image/fetch/$s_!jxV_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13a59e86-e080-41f2-8a55-a5c4d9f245ad_700x966.png 1272w, https://substackcdn.com/image/fetch/$s_!jxV_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13a59e86-e080-41f2-8a55-a5c4d9f245ad_700x966.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jxV_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13a59e86-e080-41f2-8a55-a5c4d9f245ad_700x966.png" width="700" height="966" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/13a59e86-e080-41f2-8a55-a5c4d9f245ad_700x966.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:966,&quot;width&quot;:700,&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_!jxV_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13a59e86-e080-41f2-8a55-a5c4d9f245ad_700x966.png 424w, https://substackcdn.com/image/fetch/$s_!jxV_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13a59e86-e080-41f2-8a55-a5c4d9f245ad_700x966.png 848w, https://substackcdn.com/image/fetch/$s_!jxV_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13a59e86-e080-41f2-8a55-a5c4d9f245ad_700x966.png 1272w, https://substackcdn.com/image/fetch/$s_!jxV_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13a59e86-e080-41f2-8a55-a5c4d9f245ad_700x966.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 aria-hidden="true" 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><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>I am only willing to tackle the technical challenges in my path when I can unblock my emotions. Although I may give up on this project for now, I am confident that I will resolve it at some point in my life</p><p>Although it was a disappointing week, I didn&#8217;t let it defeat me. Instead, it encouraged me to learn about the entire machine-learning production process. To do so, I started reading &#8220;<a href="https://www.goodreads.com/book/show/60715378-designing-machine-learning-systems?from_search=true&amp;from_srp=true&amp;qid=xFnFKcq2AI&amp;rank=1">Designing Machine Learning Systems: An Iterative Process for Production-Ready Applications</a>&#8221; by <a href="https://www.goodreads.com/author/show/22327517.Chip_Huyen">Chip Huyen</a>. Without this pain, I wouldn&#8217;t have picked up a technical book, and without this experience, I wouldn&#8217;t understand all the terms and related to the processes in the book either.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7nAT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bb47ae9-d7da-46b7-8485-e8e5a630e81d_800x600.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7nAT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bb47ae9-d7da-46b7-8485-e8e5a630e81d_800x600.jpeg 424w, https://substackcdn.com/image/fetch/$s_!7nAT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bb47ae9-d7da-46b7-8485-e8e5a630e81d_800x600.jpeg 848w, https://substackcdn.com/image/fetch/$s_!7nAT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bb47ae9-d7da-46b7-8485-e8e5a630e81d_800x600.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!7nAT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bb47ae9-d7da-46b7-8485-e8e5a630e81d_800x600.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7nAT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bb47ae9-d7da-46b7-8485-e8e5a630e81d_800x600.jpeg" width="800" height="600" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3bb47ae9-d7da-46b7-8485-e8e5a630e81d_800x600.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:600,&quot;width&quot;:800,&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;: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_!7nAT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bb47ae9-d7da-46b7-8485-e8e5a630e81d_800x600.jpeg 424w, https://substackcdn.com/image/fetch/$s_!7nAT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bb47ae9-d7da-46b7-8485-e8e5a630e81d_800x600.jpeg 848w, https://substackcdn.com/image/fetch/$s_!7nAT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bb47ae9-d7da-46b7-8485-e8e5a630e81d_800x600.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!7nAT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bb47ae9-d7da-46b7-8485-e8e5a630e81d_800x600.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 aria-hidden="true" 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><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">So frustrated that I even complain to the&nbsp;ocean</figcaption></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://learnlearnlearn.substack.com/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 Esther&#8217;s Substack! 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></channel></rss>