{"$schema":"https://ejfox.com/schema/page-twin@1.json","kind":"blog_post","url":"https://ejfox.com/blog/week-notes/2024-23","json_url":"https://ejfox.com/blog/week-notes/2024-23.json","generator":"ejfox.com/json-twin@1","data":{"cacheVersion":"2026-05-13-gear-cards","html":"<h2 class=\"\" id=\"overview-of-the-week\">Overview of the Week</h2>\n<p class=\"\">Mostly focusing on client work before 3 week summer break.</p>\n<blockquote class=\"md-blockquote\">\n<p class=\"text-zinc-600 dark:text-zinc-400\">This week focused on technology, political analysis, and personal productivity. Technological efforts included 3D visualization of LLM embeddings and testing the \"obsidian-note-toolbar\" plugin. A rapid prototyping video course is in development, using tools like Nuxt and Supabase.</p>\n</blockquote>\n<blockquote class=\"md-blockquote\">\n<p class=\"text-zinc-600 dark:text-zinc-400\">Political analysis examined Pro-Israel PACs' influence on assembly races and a secret Senate committee. Practical strategies for productivity included using bulk white T-shirts to manage low executive function days. These themes highlight the integration of tech, social awareness, and personal efficiency.</p>\n</blockquote>\n<svg class=\"mx-auto my-8 w-full max-w-prose\" height=\"1\">\n  <line x1=\"0\" y1=\"0\" x2=\"100%\" y2=\"0\" stroke=\"currentColor\" stroke-width=\"1\" stroke-dasharray=\"2,4\" />\n</svg>\n<h2 class=\"\" id=\"comparing-the-contents-of-two-folders-for-duplicated-markdown-posts\">Comparing the contents of two folders for duplicated markdown posts</h2>\n<figure data-rehype-pretty-code-figure=\"\" class=\"\"><pre class=\"md-pre\" style=\"background-color:#09090b;color:#cccac2\" tabindex=\"0\" data-language=\"sh\" data-theme=\"\"><code data-language=\"sh\" data-theme=\"\" style=\"display: grid;\" class=\"md-codeblock\"><span class=\"\" data-line=\"\"><span style=\"color:#73D0FF\" class=\"\">comm</span><span style=\"color:#95E6CB\" class=\"\"> -12</span><span style=\"color:#D5FF80\" class=\"\"> &#x3C;(</span><span style=\"color:#73D0FF\" class=\"\">find</span><span style=\"color:#D5FF80\" class=\"\"> ~/Library/Mobile</span><span style=\"color:#95E6CB\" class=\"\">\\ </span><span style=\"color:#D5FF80\" class=\"\">Documents/iCloud~md~obsidian/Documents/ejfox </span><span style=\"color:#95E6CB\" class=\"\">-maxdepth</span><span style=\"color:#DFBFFF\" class=\"\"> 1</span><span style=\"color:#95E6CB\" class=\"\"> -type</span><span style=\"color:#D5FF80\" class=\"\"> f </span><span style=\"color:#95E6CB\" class=\"\">-name</span><span style=\"color:#D5FF80\" class=\"\"> '*.md' </span><span style=\"color:#95E6CB\" class=\"\">-exec</span><span style=\"color:#D5FF80\" class=\"\"> basename {} </span><span style=\"color:#95E6CB\" class=\"\">\\;</span><span style=\"color:#F29E74\" class=\"\"> |</span><span style=\"color:#73D0FF\" class=\"\"> sort</span><span style=\"color:#D5FF80\" class=\"\">)</span><span style=\"color:#D5FF80\" class=\"\"> &#x3C;(</span><span style=\"color:#73D0FF\" class=\"\">find</span><span style=\"color:#D5FF80\" class=\"\"> ~/Library/Mobile</span><span style=\"color:#95E6CB\" class=\"\">\\ </span><span style=\"color:#D5FF80\" class=\"\">Documents/iCloud~md~obsidian/Documents/ejfox/drafts </span><span style=\"color:#95E6CB\" class=\"\">-maxdepth</span><span style=\"color:#DFBFFF\" class=\"\"> 1</span><span style=\"color:#95E6CB\" class=\"\"> -type</span><span style=\"color:#D5FF80\" class=\"\"> f </span><span style=\"color:#95E6CB\" class=\"\">-name</span><span style=\"color:#D5FF80\" class=\"\"> '*.md' </span><span style=\"color:#95E6CB\" class=\"\">-exec</span><span style=\"color:#D5FF80\" class=\"\"> basename {} </span><span style=\"color:#95E6CB\" class=\"\">\\;</span><span style=\"color:#F29E74\" class=\"\"> |</span><span style=\"color:#73D0FF\" class=\"\"> sort</span><span style=\"color:#D5FF80\" class=\"\">)</span></span><button type=\"button\" title=\"Copy code\" aria-label=\"Copy code\" data=\"comm -12 <(find ~/Library/Mobile\\ Documents/iCloud~md~obsidian/Documents/ejfox -maxdepth 1 -type f -name &#x27;*.md&#x27; -exec basename {} \\; | sort) <(find ~/Library/Mobile\\ Documents/iCloud~md~obsidian/Documents/ejfox/drafts -maxdepth 1 -type f -name &#x27;*.md&#x27; -exec basename {} \\; | sort)\" class=\"rehype-pretty-copy\" onclick=\"navigator.clipboard.writeText(this.attributes.data.value);this.classList.add(&#x27;rehype-pretty-copied&#x27;);window.setTimeout(() => this.classList.remove(&#x27;rehype-pretty-copied&#x27;), 3000);\"><span class=\"ready\"></span><span class=\"success\"></span></button><style class=\"\">:root {--copy-icon: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 48'%3E%3Cpath fill='%23adadad' d='M16.187 9.5H12.25a1.75 1.75 0 0 0-1.75 1.75v28.5c0 .967.784 1.75 1.75 1.75h23.5a1.75 1.75 0 0 0 1.75-1.75v-28.5a1.75 1.75 0 0 0-1.75-1.75h-3.937a4.25 4.25 0 0 1-4.063 3h-7.5a4.25 4.25 0 0 1-4.063-3M31.813 7h3.937A4.25 4.25 0 0 1 40 11.25v28.5A4.25 4.25 0 0 1 35.75 44h-23.5A4.25 4.25 0 0 1 8 39.75v-28.5A4.25 4.25 0 0 1 12.25 7h3.937a4.25 4.25 0 0 1 4.063-3h7.5a4.25 4.25 0 0 1 4.063 3M18.5 8.25c0 .966.784 1.75 1.75 1.75h7.5a1.75 1.75 0 1 0 0-3.5h-7.5a1.75 1.75 0 0 0-1.75 1.75'/%3E%3C/svg%3E\");--success-icon: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%2366ff85' d='M9 16.17L5.53 12.7a.996.996 0 1 0-1.41 1.41l4.18 4.18c.39.39 1.02.39 1.41 0L20.29 7.71a.996.996 0 1 0-1.41-1.41z'/%3E%3C/svg%3E\");}pre:has(code) {position: relative;}pre button.rehype-pretty-copy {right: 1px;padding: 0;width: 24px;height: 24px;display: flex;margin-top: 2px;margin-right: 8px;position: absolute;border-radius: 25%;backdrop-filter: blur(3px);& span {width: 100%;aspect-ratio: 1 / 1;}& .ready {background-image: var(--copy-icon);}& .success {display: none; background-image: var(--success-icon);}}&.rehype-pretty-copied {& .success {display: block;} & .ready {display: none;}}pre button.rehype-pretty-copy.rehype-pretty-copied {opacity: 1;& .ready { display: none; }& .success { display: block; }}</style></code></pre></figure>\n<ul class=\"list-disc\">\n<li class=\"\"><code class=\"md-inline-code\">find ~/Library/Mobile\\ Documents/iCloud~md~obsidian/Documents/ejfox -maxdepth 1 -type f -name '*.md' -exec basename {} \\;</code>\n<ul class=\"list-disc\">\n<li class=\"\">This part finds all <code class=\"md-inline-code\">.md</code> files in the root directory and prints their basenames (filenames without path).</li>\n</ul>\n</li>\n<li class=\"\"><code class=\"md-inline-code\">find ~/Library/Mobile\\ Documents/iCloud~md~obsidian/Documents/ejfox/drafts -maxdepth 1 -type f -name '*.md' -exec basename {} \\;</code>\n<ul class=\"list-disc\">\n<li class=\"\">This part finds all <code class=\"md-inline-code\">.md</code> files in the drafts directory and prints their basenames.</li>\n</ul>\n</li>\n<li class=\"\"><code class=\"md-inline-code\">sort</code>\n<ul class=\"list-disc\">\n<li class=\"\">Sorting the filenames to ensure the lists can be compared accurately.</li>\n</ul>\n</li>\n<li class=\"\"><code class=\"md-inline-code\">comm -12</code>\n<ul class=\"list-disc\">\n<li class=\"\"><code class=\"md-inline-code\">comm</code> compares two sorted files line by line.</li>\n<li class=\"\"><code class=\"md-inline-code\">-12</code> suppresses lines unique to the first and second file, showing only the common lines (duplicate filenames).</li>\n</ul>\n</li>\n</ul>\n<svg class=\"mx-auto my-8 w-full max-w-prose\" height=\"1\">\n  <line x1=\"0\" y1=\"0\" x2=\"100%\" y2=\"0\" stroke=\"currentColor\" stroke-width=\"1\" stroke-dasharray=\"2,4\" />\n</svg>\n<figure role=\"figure\" aria-label=\"Room 302 Studio website showing livestream management page with scheduled test broadcast at 5 going live in 5 days, alongside Vue.js component inspector displaying nested Card and Badge elements.\" class=\"\">\n<img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1717452530/Screenshot_2024-06-03_at_6.08.37_PM.png\" alt=\"Room 302 Studio website showing livestream management page with scheduled test broadcast at 5 going live in 5 days, alongside Vue.js component inspector displaying nested Card and Badge elements.\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/v1717452530/Screenshot_2024-06-03_at_6.08.37_PM.png 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/v1717452530/Screenshot_2024-06-03_at_6.08.37_PM.png 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1717452530/Screenshot_2024-06-03_at_6.08.37_PM.png 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/v1717452530/Screenshot_2024-06-03_at_6.08.37_PM.png 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" title=\"Room 302 Studio website showing livestream management page with scheduled test broadcast at 5 going live in 5 days, alongside Vue.js component inspector displaying nested Card and Badge elements.\" width=\"2904\" height=\"2474\" style=\"--splay-rot:-0.94deg;\" data-dimensions=\"2904×2474\" class=\"img-full my-8 rounded-sm img-splay w-full mx-auto py-4\" crossorigin=\"anonymous\">\n<figcaption class=\"\">Room 302 Studio website showing livestream management page with scheduled test broadcast at 5 going live in 5 days, alongside Vue.js component inspector displaying nested Card and Badge elements.</figcaption>\n</figure>\n<figure role=\"figure\" aria-label=\"Tyler Angert proposes features for an improved travel maps app: multi-route comparison, calendar integration, weather overlays, interactive itinerary planning, AI assistant, Google Maps sync, and search history navigation.\" class=\"\">\n<img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1717463243/Screenshot_2024-06-03_at_9.07.11_PM.png\" alt=\"Tyler Angert proposes features for an improved travel maps app: multi-route comparison, calendar integration, weather overlays, interactive itinerary planning, AI assistant, Google Maps sync, and search history navigation.\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/v1717463243/Screenshot_2024-06-03_at_9.07.11_PM.png 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/v1717463243/Screenshot_2024-06-03_at_9.07.11_PM.png 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1717463243/Screenshot_2024-06-03_at_9.07.11_PM.png 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/v1717463243/Screenshot_2024-06-03_at_9.07.11_PM.png 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" title=\"Tyler Angert proposes features for an improved travel maps app: multi-route comparison, calendar integration, weather overlays, interactive itinerary planning, AI assistant, Google Maps sync, and search history navigation.\" width=\"1174\" height=\"858\" style=\"--splay-rot:0.6deg;\" data-dimensions=\"1174×858\" class=\"img-full my-8 rounded-sm img-splay w-full mx-auto py-4\" crossorigin=\"anonymous\">\n<figcaption class=\"\">Tyler Angert proposes features for an improved travel maps app: multi-route comparison, calendar integration, weather overlays, interactive itinerary planning, AI assistant, Google Maps sync, and search history navigation.</figcaption>\n</figure>\n<figure role=\"figure\" aria-label=\"Async JavaScript function that generates image embeddings via Nomic API, sending image URLs to the embedding endpoint with authentication headers.\" class=\"\">\n<img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1717718095/Screenshot_2024-06-06_at_7.54.43_PM.png\" alt=\"Async JavaScript function that generates image embeddings via Nomic API, sending image URLs to the embedding endpoint with authentication headers.\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/v1717718095/Screenshot_2024-06-06_at_7.54.43_PM.png 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/v1717718095/Screenshot_2024-06-06_at_7.54.43_PM.png 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1717718095/Screenshot_2024-06-06_at_7.54.43_PM.png 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/v1717718095/Screenshot_2024-06-06_at_7.54.43_PM.png 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" title=\"Async JavaScript function that generates image embeddings via Nomic API, sending image URLs to the embedding endpoint with authentication headers.\" width=\"1218\" height=\"1018\" style=\"--splay-rot:2.77deg;\" data-dimensions=\"1218×1018\" class=\"img-full my-8 rounded-sm img-splay w-full mx-auto py-4\" crossorigin=\"anonymous\">\n<figcaption class=\"\">Async JavaScript function that generates image embeddings via Nomic API, sending image URLs to the embedding endpoint with authentication headers.</figcaption>\n</figure>\n<figure role=\"figure\" aria-label=\"Room 302 Studio homepage describing their bespoke innovation lab that guides concepts from ideation to implementation, featuring a case study on coral reef climate resilience with the Wildlife Conservation Society.\" class=\"\">\n<img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1717727463/Screenshot_2024-06-06_at_10.30.50_PM.png\" alt=\"Room 302 Studio homepage describing their bespoke innovation lab that guides concepts from ideation to implementation, featuring a case study on coral reef climate resilience with the Wildlife Conservation Society.\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/v1717727463/Screenshot_2024-06-06_at_10.30.50_PM.png 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/v1717727463/Screenshot_2024-06-06_at_10.30.50_PM.png 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1717727463/Screenshot_2024-06-06_at_10.30.50_PM.png 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/v1717727463/Screenshot_2024-06-06_at_10.30.50_PM.png 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" title=\"Room 302 Studio homepage describing their bespoke innovation lab that guides concepts from ideation to implementation, featuring a case study on coral reef climate resilience with the Wildlife Conservation Society.\" width=\"1854\" height=\"2314\" style=\"--splay-rot:-1.58deg;\" data-dimensions=\"1854×2314\" class=\"img-full my-8 rounded-sm img-splay aspect-[3/4] w-full mx-auto py-4\" crossorigin=\"anonymous\">\n<figcaption class=\"\">Room 302 Studio homepage describing their bespoke innovation lab that guides concepts from ideation to implementation, featuring a case study on coral reef climate resilience with the Wildlife Conservation Society.</figcaption>\n</figure>\n<figure role=\"figure\" aria-label=\"GitHub repository for room302studio/coachartie, a Discord and GPT-4V assistant, showing file structure, recent commits, and four contributors.\" class=\"\">\n<img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1717727545/Screenshot_2024-06-06_at_10.32.13_PM.png\" alt=\"GitHub repository for room302studio/coachartie, a Discord and GPT-4V assistant, showing file structure, recent commits, and four contributors.\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/v1717727545/Screenshot_2024-06-06_at_10.32.13_PM.png 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/v1717727545/Screenshot_2024-06-06_at_10.32.13_PM.png 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1717727545/Screenshot_2024-06-06_at_10.32.13_PM.png 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/v1717727545/Screenshot_2024-06-06_at_10.32.13_PM.png 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" title=\"GitHub repository for room302studio/coachartie, a Discord and GPT-4V assistant, showing file structure, recent commits, and four contributors.\" width=\"2474\" height=\"2160\" style=\"--splay-rot:2.36deg;\" data-dimensions=\"2474×2160\" class=\"img-full my-8 rounded-sm img-splay w-full mx-auto py-4\" crossorigin=\"anonymous\">\n<figcaption class=\"\">GitHub repository for room302studio/coachartie, a Discord and GPT-4V assistant, showing file structure, recent commits, and four contributors.</figcaption>\n</figure>\n<figure role=\"figure\" aria-label=\"GitHub repository for Coach Artie, a Discord bot AI assistant for Room 302 Studio&#x27;s collaborative creative space.\" class=\"\">\n<img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1717727590/Screenshot_2024-06-06_at_10.32.58_PM.png\" alt=\"GitHub repository for Coach Artie, a Discord bot AI assistant for Room 302 Studio&#x27;s collaborative creative space.\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/v1717727590/Screenshot_2024-06-06_at_10.32.58_PM.png 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/v1717727590/Screenshot_2024-06-06_at_10.32.58_PM.png 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1717727590/Screenshot_2024-06-06_at_10.32.58_PM.png 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/v1717727590/Screenshot_2024-06-06_at_10.32.58_PM.png 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" title=\"GitHub repository for Coach Artie, a Discord bot AI assistant for Room 302 Studio&#x27;s collaborative creative space.\" width=\"2224\" height=\"1914\" style=\"--splay-rot:1.88deg;\" data-dimensions=\"2224×1914\" class=\"img-full my-8 rounded-sm img-splay w-full mx-auto py-4\" crossorigin=\"anonymous\">\n<figcaption class=\"\">GitHub repository for Coach Artie, a Discord bot AI assistant for Room 302 Studio's collaborative creative space.</figcaption>\n</figure>\n<figure role=\"figure\" aria-label=\"Election Helpers JavaScript library documentation showing utility functions for parsing US election data and normalizing political party names.\" class=\"\">\n<img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1717727707/Screenshot_2024-06-06_at_10.34.55_PM.png\" alt=\"Election Helpers JavaScript library documentation showing utility functions for parsing US election data and normalizing political party names.\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/v1717727707/Screenshot_2024-06-06_at_10.34.55_PM.png 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/v1717727707/Screenshot_2024-06-06_at_10.34.55_PM.png 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1717727707/Screenshot_2024-06-06_at_10.34.55_PM.png 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/v1717727707/Screenshot_2024-06-06_at_10.34.55_PM.png 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" title=\"Election Helpers JavaScript library documentation showing utility functions for parsing US election data and normalizing political party names.\" width=\"2224\" height=\"1816\" style=\"--splay-rot:-1.98deg;\" data-dimensions=\"2224×1816\" class=\"img-full my-8 rounded-sm img-splay w-full mx-auto py-4\" crossorigin=\"anonymous\">\n<figcaption class=\"\">Election Helpers JavaScript library documentation showing utility functions for parsing US election data and normalizing political party names.</figcaption>\n</figure>\n<figure role=\"figure\" aria-label=\"Code snippet showing a React state update with useCallback hook, timestamped at 23:32.630, updating a budget value to 1000.\" class=\"\">\n<img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1717731154/Screenshot_2024-06-06_at_11.32.22_PM.png\" alt=\"Code snippet showing a React state update with useCallback hook, timestamped at 23:32.630, updating a budget value to 1000.\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/v1717731154/Screenshot_2024-06-06_at_11.32.22_PM.png 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/v1717731154/Screenshot_2024-06-06_at_11.32.22_PM.png 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1717731154/Screenshot_2024-06-06_at_11.32.22_PM.png 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/v1717731154/Screenshot_2024-06-06_at_11.32.22_PM.png 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" title=\"Code snippet showing a React state update with useCallback hook, timestamped at 23:32.630, updating a budget value to 1000.\" width=\"380\" height=\"238\" style=\"--splay-rot:-1.79deg;\" data-dimensions=\"380×238\" class=\"img-full my-8 rounded-sm img-splay w-full mx-auto py-4\" crossorigin=\"anonymous\">\n<figcaption class=\"\">Code snippet showing a React state update with useCallback hook, timestamped at 23:32.630, updating a budget value to 1000.</figcaption>\n</figure>\n<figure role=\"figure\" aria-label=\"Developer activity comparison showing @ejfox spends 269% more time tweeting than coding across GitHub and Twitter accounts.\" class=\"\">\n<img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1717738192/Screenshot_2024-06-07_at_1.29.40_AM.png\" alt=\"Developer activity comparison showing @ejfox spends 269% more time tweeting than coding across GitHub and Twitter accounts.\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/v1717738192/Screenshot_2024-06-07_at_1.29.40_AM.png 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/v1717738192/Screenshot_2024-06-07_at_1.29.40_AM.png 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1717738192/Screenshot_2024-06-07_at_1.29.40_AM.png 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/v1717738192/Screenshot_2024-06-07_at_1.29.40_AM.png 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" title=\"Developer activity comparison showing @ejfox spends 269% more time tweeting than coding across GitHub and Twitter accounts.\" width=\"1044\" height=\"598\" style=\"--splay-rot:1.01deg;\" data-dimensions=\"1044×598\" class=\"img-full my-8 rounded-sm img-splay aspect-video w-full mx-auto py-4\" crossorigin=\"anonymous\">\n<figcaption class=\"\">Developer activity comparison showing @ejfox spends 269% more time tweeting than coding across GitHub and Twitter accounts.</figcaption>\n</figure>\n<figure role=\"figure\" aria-label=\"Workflow diagram for weekly research curation: gather bookmarks, extract webpage content, generate themes from overlaps, then identify and summarize the most relevant facts connecting to ongoing research.\" class=\"\">\n<img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1717772574/Screenshot_2024-06-07_at_11.02.42_AM.png\" alt=\"Workflow diagram for weekly research curation: gather bookmarks, extract webpage content, generate themes from overlaps, then identify and summarize the most relevant facts connecting to ongoing research.\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/v1717772574/Screenshot_2024-06-07_at_11.02.42_AM.png 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/v1717772574/Screenshot_2024-06-07_at_11.02.42_AM.png 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1717772574/Screenshot_2024-06-07_at_11.02.42_AM.png 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/v1717772574/Screenshot_2024-06-07_at_11.02.42_AM.png 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" title=\"Workflow diagram for weekly research curation: gather bookmarks, extract webpage content, generate themes from overlaps, then identify and summarize the most relevant facts connecting to ongoing research.\" width=\"2418\" height=\"1724\" style=\"--splay-rot:-0.69deg;\" data-dimensions=\"2418×1724\" class=\"img-full my-8 rounded-sm img-splay w-full mx-auto py-4\" crossorigin=\"anonymous\">\n<figcaption class=\"\">Workflow diagram for weekly research curation: gather bookmarks, extract webpage content, generate themes from overlaps, then identify and summarize the most relevant facts connecting to ongoing research.</figcaption>\n</figure>\n<figure role=\"figure\" aria-label=\"AppleScript automation for blog publishing workflow that manages drafts, commits changes, and pushes to Git repository with error handling.\" class=\"\">\n<img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1717784053/Screenshot_2024-06-07_at_2.14.00_PM.png\" alt=\"AppleScript automation for blog publishing workflow that manages drafts, commits changes, and pushes to Git repository with error handling.\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/v1717784053/Screenshot_2024-06-07_at_2.14.00_PM.png 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/v1717784053/Screenshot_2024-06-07_at_2.14.00_PM.png 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1717784053/Screenshot_2024-06-07_at_2.14.00_PM.png 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/v1717784053/Screenshot_2024-06-07_at_2.14.00_PM.png 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" title=\"AppleScript automation for blog publishing workflow that manages drafts, commits changes, and pushes to Git repository with error handling.\" width=\"3600\" height=\"2338\" style=\"--splay-rot:-0.6deg;\" data-dimensions=\"3600×2338\" class=\"img-full my-8 rounded-sm img-splay w-full mx-auto py-4\" crossorigin=\"anonymous\">\n<figcaption class=\"\">AppleScript automation for blog publishing workflow that manages drafts, commits changes, and pushes to Git repository with error handling.</figcaption>\n</figure>\n<p class=\"\"><img src=\"https://res.cloudinary.com/ejf/video/upload/c_scale,f_auto,q_auto:good,w_1280/v1717785700/Screen_Recording_2024-06-07_at_2.41.05_PM.mov\" alt=\"Screenshot - - \" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/video/upload/c_scale,f_auto,q_auto:good,w_640/v1717785700/Screen_Recording_2024-06-07_at_2.41.05_PM.mov 640w, https://res.cloudinary.com/ejf/video/upload/c_scale,f_auto,q_auto:good,w_960/v1717785700/Screen_Recording_2024-06-07_at_2.41.05_PM.mov 960w, https://res.cloudinary.com/ejf/video/upload/c_scale,f_auto,q_auto:good,w_1280/v1717785700/Screen_Recording_2024-06-07_at_2.41.05_PM.mov 1280w, https://res.cloudinary.com/ejf/video/upload/c_scale,f_auto,q_auto:good,w_1920/v1717785700/Screen_Recording_2024-06-07_at_2.41.05_PM.mov 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" style=\"--splay-rot:1.91deg;\" class=\"img-full my-8 rounded-sm img-splay w-full mx-auto py-4\" crossorigin=\"anonymous\"></p>","title":"Overview of the Week","metadata":{"tags":["weekly-notes","reflections","progress"],"modified":"2024-10-14T23:50:54.000Z","date":"2024-06-03T16:56:06.000Z","dek":"In which the author explores technology, political analysis, and personal productivity during a busy week of client work before a summer break.","words":492,"images":12,"imageDetails":{"total":12,"cloudinary":12,"withDimensions":0},"links":12,"codeBlocks":1,"headers":{"h2":2},"toc":[{"text":"Overview of the Week","slug":"overview-of-the-week","level":"h2","children":[]},{"text":"Comparing the contents of two folders for duplicated markdown posts","slug":"comparing-the-contents-of-two-folders-for-duplicated-markdown-posts","level":"h2","children":[]}],"type":"post"}},"_links":{"self":"https://ejfox.com/blog/week-notes/2024-23.json","html":"https://ejfox.com/blog/week-notes/2024-23","index":"/blog.json"}}