{"$schema":"https://ejfox.com/schema/page-twin@1.json","kind":"blog_post","url":"https://ejfox.com/blog/week-notes/2024-01","json_url":"https://ejfox.com/blog/week-notes/2024-01.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=\"\">Wrote 2,400 words on goals for the new year and it all sorta boils down to:</p>\n<ul class=\"list-disc\">\n<li class=\"\">Implementing a daily morning routine.</li>\n<li class=\"\">Regularly attending art events and social gatherings.</li>\n<li class=\"\">Achieving fitness goals and maintaining health routines, especially meditation.</li>\n<li class=\"\">Growing the studio's client base and community engagement.</li>\n<li class=\"\">Seeking award recognition for studio work and launching impactful projects.</li>\n<li class=\"\">Making more process / how-to / explanatory videos and do a better job of documenting achievements.</li>\n<li class=\"\">Engaging in outdoor activities and travel preparations.</li>\n<li class=\"\">Moderating and optimizing substance use for wellness.</li>\n<li class=\"\">Executing projects with a global and societal impact.</li>\n</ul>\n<h2 class=\"\" id=\"projects-worked-on\">Projects Worked On</h2>\n<h3 class=\"\" id=\"made-website-for-photos\">Made website for photos</h3>\n<p class=\"\">I finally finished a project I have been working on for a few months, which is a public place to host all of my photography <a href=\"https://ejfox.photos\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external-link group inline-flex items-center text-blue-600 dark:text-blue-400\" data-preview-url=\"https://ejfox.photos\">https://ejfox.photos</a>.</p>\n<p class=\"\">Over 10 years ago I would post almost every photo I liked on Flickr, and then Instagram, but in the past few years even that wanes completely.</p>\n<p class=\"\">So I put together a super simple Nuxt site that hits the Cloudinary API and shows the latest 100 photos that aren’t screenshots, or marked private.</p>\n<h3 class=\"\" id=\"screenshot-to-cloudinary-script\">Screenshot to Cloudinary script</h3>\n<figure data-rehype-pretty-code-figure=\"\" class=\"\"><pre class=\"md-pre\" style=\"background-color:#09090b;color:#cccac2\" tabindex=\"0\" data-language=\"bash\" data-theme=\"\"><code data-language=\"bash\" data-theme=\"\" style=\"display: grid;\" class=\"md-codeblock\"><span class=\"\" data-line=\"\"><span style=\"color:#B8CFE680;font-style:italic\" class=\"\">#!/bin/bash</span></span>\n<span class=\"\" data-line=\"\"> </span>\n<span class=\"\" data-line=\"\"><span style=\"color:#B8CFE680;font-style:italic\" class=\"\"># API keys for Cloudinary</span></span>\n<span class=\"\" data-line=\"\"><span style=\"color:#FFAD66\" class=\"\">export</span><span style=\"color:#CCCAC2\" class=\"\"> CLOUDINARY_URL</span><span style=\"color:#F29E74\" class=\"\">=</span><span style=\"color:#CCCAC2\" class=\"\">cloudinary://APIKEY@NAME</span></span>\n<span class=\"\" data-line=\"\"> </span>\n<span class=\"\" data-line=\"\"><span style=\"color:#B8CFE680;font-style:italic\" class=\"\"># Iterate over each passed argument</span></span>\n<span class=\"\" data-line=\"\"><span style=\"color:#FFAD66\" class=\"\">for</span><span style=\"color:#CCCAC2\" class=\"\"> file </span><span style=\"color:#FFAD66\" class=\"\">in</span><span style=\"color:#D5FF80\" class=\"\"> \"</span><span style=\"color:#DFBFFF\" class=\"\">$@</span><span style=\"color:#D5FF80\" class=\"\">\"</span></span>\n<span class=\"\" data-line=\"\"><span style=\"color:#FFAD66\" class=\"\">do</span></span>\n<span class=\"\" data-line=\"\"><span style=\"color:#B8CFE680;font-style:italic\" class=\"\">  # Check if the file exists</span></span>\n<span class=\"\" data-line=\"\"><span style=\"color:#FFAD66\" class=\"\">  if</span><span style=\"color:#CCCAC2\" class=\"\"> [ </span><span style=\"color:#F29E74\" class=\"\">-f</span><span style=\"color:#D5FF80\" class=\"\"> \"</span><span style=\"color:#CCCAC2\" class=\"\">$file</span><span style=\"color:#D5FF80\" class=\"\">\"</span><span style=\"color:#CCCAC2\" class=\"\"> ]</span><span style=\"color:#CCCAC2B3\" class=\"\">;</span><span style=\"color:#FFAD66\" class=\"\"> then</span></span>\n<span class=\"\" data-line=\"\"><span style=\"color:#B8CFE680;font-style:italic\" class=\"\">    # Upload to Cloudinary and capture output</span></span>\n<span class=\"\" data-line=\"\"><span style=\"color:#CCCAC2\" class=\"\">    upload_output</span><span style=\"color:#F29E74\" class=\"\">=</span><span style=\"color:#CCCAC2\" class=\"\">$(</span><span style=\"color:#73D0FF\" class=\"\">/usr/local/bin/cld</span><span style=\"color:#D5FF80\" class=\"\"> uploader</span><span style=\"color:#D5FF80\" class=\"\"> upload</span><span style=\"color:#D5FF80\" class=\"\"> \"</span><span style=\"color:#CCCAC2\" class=\"\">$file</span><span style=\"color:#D5FF80\" class=\"\">\"</span><span style=\"color:#D5FF80\" class=\"\"> use_filename=</span><span style=\"color:#DFBFFF\" class=\"\">true</span><span style=\"color:#D5FF80\" class=\"\"> unique_filename=</span><span style=\"color:#DFBFFF\" class=\"\">false</span><span style=\"color:#F29E74\" class=\"\"> 2>&#x26;1</span><span style=\"color:#CCCAC2\" class=\"\">)</span></span>\n<span class=\"\" data-line=\"\"><span style=\"color:#CCCAC2\" class=\"\">    upload_exit_status</span><span style=\"color:#F29E74\" class=\"\">=</span><span style=\"color:#5CCFE6;font-style:italic\" class=\"\">$?</span></span>\n<span class=\"\" data-line=\"\"> </span>\n<span class=\"\" data-line=\"\"><span style=\"color:#B8CFE680;font-style:italic\" class=\"\">    # Check if the upload was successful</span></span>\n<span class=\"\" data-line=\"\"><span style=\"color:#FFAD66\" class=\"\">    if</span><span style=\"color:#CCCAC2\" class=\"\"> [ $upload_exit_status </span><span style=\"color:#F29E74\" class=\"\">-eq</span><span style=\"color:#DFBFFF\" class=\"\"> 0</span><span style=\"color:#CCCAC2\" class=\"\"> ]</span><span style=\"color:#CCCAC2B3\" class=\"\">;</span><span style=\"color:#FFAD66\" class=\"\"> then</span></span>\n<span class=\"\" data-line=\"\"><span style=\"color:#B8CFE680;font-style:italic\" class=\"\">      # Attempt to extract the URL using the absolute path for jq</span></span>\n<span class=\"\" data-line=\"\"><span style=\"color:#CCCAC2\" class=\"\">      url</span><span style=\"color:#F29E74\" class=\"\">=</span><span style=\"color:#CCCAC2\" class=\"\">$(</span><span style=\"color:#F28779\" class=\"\">echo</span><span style=\"color:#D5FF80\" class=\"\"> \"</span><span style=\"color:#CCCAC2\" class=\"\">$upload_output</span><span style=\"color:#D5FF80\" class=\"\">\"</span><span style=\"color:#F29E74\" class=\"\"> |</span><span style=\"color:#73D0FF\" class=\"\"> /usr/local/bin/jq</span><span style=\"color:#95E6CB\" class=\"\"> -r</span><span style=\"color:#D5FF80\" class=\"\"> '.url'</span><span style=\"color:#F29E74\" class=\"\"> 2></span><span style=\"color:#D5FF80\" class=\"\">/dev/null</span><span style=\"color:#CCCAC2\" class=\"\">)</span></span>\n<span class=\"\" data-line=\"\"> </span>\n<span class=\"\" data-line=\"\"><span style=\"color:#B8CFE680;font-style:italic\" class=\"\">      # Check if the URL is non-empty</span></span>\n<span class=\"\" data-line=\"\"><span style=\"color:#FFAD66\" class=\"\">      if</span><span style=\"color:#CCCAC2\" class=\"\"> [ </span><span style=\"color:#F29E74\" class=\"\">-n</span><span style=\"color:#D5FF80\" class=\"\"> \"</span><span style=\"color:#CCCAC2\" class=\"\">$url</span><span style=\"color:#D5FF80\" class=\"\">\"</span><span style=\"color:#CCCAC2\" class=\"\"> ]</span><span style=\"color:#CCCAC2B3\" class=\"\">;</span><span style=\"color:#FFAD66\" class=\"\"> then</span></span>\n<span class=\"\" data-line=\"\"><span style=\"color:#F28779\" class=\"\">        echo</span><span style=\"color:#D5FF80\" class=\"\"> \"</span><span style=\"color:#CCCAC2\" class=\"\">$url</span><span style=\"color:#D5FF80\" class=\"\">\"</span><span style=\"color:#F29E74\" class=\"\"> |</span><span style=\"color:#73D0FF\" class=\"\"> pbcopy</span></span>\n<span class=\"\" data-line=\"\"><span style=\"color:#B8CFE680;font-style:italic\" class=\"\">        # Display success notification with the URL</span></span>\n<span class=\"\" data-line=\"\"><span style=\"color:#73D0FF\" class=\"\">        osascript</span><span style=\"color:#95E6CB\" class=\"\"> -e</span><span style=\"color:#D5FF80\" class=\"\"> \"display notification </span><span style=\"color:#95E6CB\" class=\"\">\\\"</span><span style=\"color:#D5FF80\" class=\"\">Uploaded </span><span style=\"color:#CCCAC2\" class=\"\">$file</span><span style=\"color:#D5FF80\" class=\"\"> to Cloudinary and URL copied to clipboard: </span><span style=\"color:#CCCAC2\" class=\"\">$url</span><span style=\"color:#95E6CB\" class=\"\">\\\"</span><span style=\"color:#D5FF80\" class=\"\"> with title </span><span style=\"color:#95E6CB\" class=\"\">\\\"</span><span style=\"color:#D5FF80\" class=\"\">Screenshot Upload</span><span style=\"color:#95E6CB\" class=\"\">\\\"</span><span style=\"color:#D5FF80\" class=\"\">\"</span></span>\n<span class=\"\" data-line=\"\"><span style=\"color:#FFAD66\" class=\"\">      else</span></span>\n<span class=\"\" data-line=\"\"><span style=\"color:#B8CFE680;font-style:italic\" class=\"\">        # Display notification for empty URL</span></span>\n<span class=\"\" data-line=\"\"><span style=\"color:#73D0FF\" class=\"\">        osascript</span><span style=\"color:#95E6CB\" class=\"\"> -e</span><span style=\"color:#D5FF80\" class=\"\"> \"display notification </span><span style=\"color:#95E6CB\" class=\"\">\\\"</span><span style=\"color:#D5FF80\" class=\"\">Failed to extract URL from output</span><span style=\"color:#95E6CB\" class=\"\">\\\"</span><span style=\"color:#D5FF80\" class=\"\"> with title </span><span style=\"color:#95E6CB\" class=\"\">\\\"</span><span style=\"color:#D5FF80\" class=\"\">Debug</span><span style=\"color:#95E6CB\" class=\"\">\\\"</span><span style=\"color:#D5FF80\" class=\"\">\"</span></span>\n<span class=\"\" data-line=\"\"><span style=\"color:#FFAD66\" class=\"\">      fi</span></span>\n<span class=\"\" data-line=\"\"><span style=\"color:#FFAD66\" class=\"\">    else</span></span>\n<span class=\"\" data-line=\"\"><span style=\"color:#B8CFE680;font-style:italic\" class=\"\">      # Display notification for upload failure</span></span>\n<span class=\"\" data-line=\"\"><span style=\"color:#73D0FF\" class=\"\">      osascript</span><span style=\"color:#95E6CB\" class=\"\"> -e</span><span style=\"color:#D5FF80\" class=\"\"> \"display notification </span><span style=\"color:#95E6CB\" class=\"\">\\\"</span><span style=\"color:#D5FF80\" class=\"\">Failed to upload </span><span style=\"color:#CCCAC2\" class=\"\">$file</span><span style=\"color:#D5FF80\" class=\"\"> to Cloudinary. Error: </span><span style=\"color:#CCCAC2\" class=\"\">$upload_output</span><span style=\"color:#95E6CB\" class=\"\">\\\"</span><span style=\"color:#D5FF80\" class=\"\"> with title </span><span style=\"color:#95E6CB\" class=\"\">\\\"</span><span style=\"color:#D5FF80\" class=\"\">Screenshot Upload</span><span style=\"color:#95E6CB\" class=\"\">\\\"</span><span style=\"color:#D5FF80\" class=\"\">\"</span></span>\n<span class=\"\" data-line=\"\"><span style=\"color:#FFAD66\" class=\"\">    fi</span></span>\n<span class=\"\" data-line=\"\"><span style=\"color:#FFAD66\" class=\"\">  else</span></span>\n<span class=\"\" data-line=\"\"><span style=\"color:#B8CFE680;font-style:italic\" class=\"\">    # Display notification for file not found</span></span>\n<span class=\"\" data-line=\"\"><span style=\"color:#73D0FF\" class=\"\">    osascript</span><span style=\"color:#95E6CB\" class=\"\"> -e</span><span style=\"color:#D5FF80\" class=\"\"> \"display notification </span><span style=\"color:#95E6CB\" class=\"\">\\\"</span><span style=\"color:#D5FF80\" class=\"\">File does not exist: </span><span style=\"color:#CCCAC2\" class=\"\">$file</span><span style=\"color:#95E6CB\" class=\"\">\\\"</span><span style=\"color:#D5FF80\" class=\"\"> with title </span><span style=\"color:#95E6CB\" class=\"\">\\\"</span><span style=\"color:#D5FF80\" class=\"\">Debug</span><span style=\"color:#95E6CB\" class=\"\">\\\"</span><span style=\"color:#D5FF80\" class=\"\">\"</span></span>\n<span class=\"\" data-line=\"\"><span style=\"color:#FFAD66\" class=\"\">  fi</span></span>\n<span class=\"\" data-line=\"\"><span style=\"color:#FFAD66\" class=\"\">done</span></span><button type=\"button\" title=\"Copy code\" aria-label=\"Copy code\" data=\"#!/bin/bash\n\n# API keys for Cloudinary\nexport CLOUDINARY_URL=cloudinary://APIKEY@NAME\n\n# Iterate over each passed argument\nfor file in &#x22;$@&#x22;\ndo\n  # Check if the file exists\n  if [ -f &#x22;$file&#x22; ]; then\n    # Upload to Cloudinary and capture output\n    upload_output=$(/usr/local/bin/cld uploader upload &#x22;$file&#x22; use_filename=true unique_filename=false 2>&#x26;1)\n    upload_exit_status=$?\n\n    # Check if the upload was successful\n    if [ $upload_exit_status -eq 0 ]; then\n      # Attempt to extract the URL using the absolute path for jq\n      url=$(echo &#x22;$upload_output&#x22; | /usr/local/bin/jq -r &#x27;.url&#x27; 2>/dev/null)\n\n      # Check if the URL is non-empty\n      if [ -n &#x22;$url&#x22; ]; then\n        echo &#x22;$url&#x22; | pbcopy\n        # Display success notification with the URL\n        osascript -e &#x22;display notification \\&#x22;Uploaded $file to Cloudinary and URL copied to clipboard: $url\\&#x22; with title \\&#x22;Screenshot Upload\\&#x22;&#x22;\n      else\n        # Display notification for empty URL\n        osascript -e &#x22;display notification \\&#x22;Failed to extract URL from output\\&#x22; with title \\&#x22;Debug\\&#x22;&#x22;\n      fi\n    else\n      # Display notification for upload failure\n      osascript -e &#x22;display notification \\&#x22;Failed to upload $file to Cloudinary. Error: $upload_output\\&#x22; with title \\&#x22;Screenshot Upload\\&#x22;&#x22;\n    fi\n  else\n    # Display notification for file not found\n    osascript -e &#x22;display notification \\&#x22;File does not exist: $file\\&#x22; with title \\&#x22;Debug\\&#x22;&#x22;\n  fi\ndone\" 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<p class=\"\">This is fun and exciting to me because I can now easily take screenshots and add them to blog posts! Really innovating over here!</p>\n<p class=\"\"><img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1704827588/Screenshot_2024-01-09_at_2.11.42_PM.png\" alt=\"https://res.cloudinary.com/ejf/image/upload/v1704827588/Screenshot_2024-01-09_at_2.11.42_PM.png\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/v1704827588/Screenshot_2024-01-09_at_2.11.42_PM.png 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/v1704827588/Screenshot_2024-01-09_at_2.11.42_PM.png 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1704827588/Screenshot_2024-01-09_at_2.11.42_PM.png 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/v1704827588/Screenshot_2024-01-09_at_2.11.42_PM.png 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" width=\"5120\" height=\"2880\" style=\"--splay-rot:-2.47deg;\" data-dimensions=\"5120×2880\" class=\"img-full my-8 rounded-sm img-splay aspect-video w-full mx-auto py-4\" crossorigin=\"anonymous\"></p>\n<h2 class=\"\" id=\"creative-endeavors\">Creative Endeavors</h2>\n<p class=\"\">Working more in my Black, White, and Red notebook. I don't know what I am doing, but at least it's different from the stuff I have been doing in the past, and it's been doing a good job of unlocking some flow state and a focus on flowy lines and motion</p>\n<p class=\"\"><a href=\"https://www.are.na/block/25485394\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external-link group inline-flex items-center text-blue-600 dark:text-blue-400\" data-preview-url=\"https://www.are.na/block/25485394\">https://www.are.na/block/25485394</a></p>\n<p class=\"\"><a href=\"https://www.are.na/block/25485236\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external-link group inline-flex items-center text-blue-600 dark:text-blue-400\" data-preview-url=\"https://www.are.na/block/25485236\">https://www.are.na/block/25485236</a></p>\n<h3 class=\"\" id=\"struggling-making-videos\">Struggling making videos</h3>\n<p class=\"\">One of my goals for last year was to make more videos explaining things, to practice the muscle of expressing myself through video. Well, in the end I made a grand total of one (1) video. This year I would like to make 100.</p>\n<p class=\"\">I started this morning, setting up my workspace, preparing my microphone, setting up the cameras and checking the light, only to end up losing the audio and quickly filling up the hard drive on my iMac with 15 minutes of 4k video to the point Final Cut simply gave up. But I will try to learn my lessons and get back to it tomorrow.</p>\n<h2 class=\"\" id=\"technical-accomplishments\">Technical Accomplishments</h2>\n<ul class=\"list-disc\">\n<li class=\"\">Made a simple gist to set the screenshot folder on macs to something sensible, out of reach from iCloud Drive, <a href=\"https://gist.github.com/ejfox/afd94b193a00645e34fc5030a125758a\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external-link group inline-flex items-center text-blue-600 dark:text-blue-400\" data-preview-url=\"https://gist.github.com/ejfox/afd94b193a00645e34fc5030a125758a\">https://gist.github.com/ejfox/afd94b193a00645e34fc5030a125758a<svg class=\"inline-block w-4 h-4 ml-1 opacity-50 dark:opacity-75 group-hover:opacity-100 transition-opacity align-text-bottom\" xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\" class=\"\"></path></svg></a></li>\n</ul>\n<h2 class=\"\" id=\"-learning--development\">📘 Learning &#x26; Development</h2>\n<ul class=\"list-disc\">\n<li class=\"\">Watched <a href=\"https://en.wikipedia.org/wiki/The_Upsetter_(film)\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external-link group inline-flex items-center text-blue-600 dark:text-blue-400\" data-preview-url=\"https://en.wikipedia.org/wiki/The_Upsetter_(film)\">The Upsetter<svg class=\"inline-block w-4 h-4 ml-1 opacity-50 dark:opacity-75 group-hover:opacity-100 transition-opacity align-text-bottom\" xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M12.09 13.119c-.936 1.932-2.217 4.548-2.853 5.728c-.616 1.074-1.127.931-1.532.029c-1.406-3.321-4.293-9.144-5.651-12.409c-.251-.601-.441-.987-.619-1.139q-.27-.225-1.122-.271q-.314-.034-.313-.159v-.455l.052-.045c.924-.005 5.401 0 5.401 0l.051.045v.434q0 .177-.225.176l-.564.031c-.485.029-.727.164-.727.436c0 .135.053.33.166.601c1.082 2.646 4.818 10.521 4.818 10.521l.136.046l2.411-4.81l-.482-1.067l-1.658-3.264s-.318-.654-.428-.872c-.728-1.443-.712-1.518-1.447-1.617c-.207-.023-.313-.05-.313-.149v-.468l.06-.045h4.292l.113.037v.451c0 .105-.076.15-.227.15l-.308.047c-.792.061-.661.381-.136 1.422l1.582 3.252l1.758-3.504c.293-.64.233-.801.111-.947c-.07-.084-.305-.22-.812-.24l-.201-.021a.23.23 0 0 1-.145-.051a.15.15 0 0 1-.067-.129v-.427l.061-.045c1.247-.008 4.043 0 4.043 0l.059.045v.436c0 .121-.059.178-.193.178c-.646.03-.782.095-1.023.439c-.12.186-.375.589-.646 1.039l-2.301 4.273l-.065.135l2.792 5.712l.17.048l4.396-10.438c.154-.422.129-.722-.064-.895c-.197-.172-.346-.273-.857-.295l-.42-.016a.26.26 0 0 1-.152-.045c-.043-.029-.072-.075-.072-.119v-.436l.059-.045h4.961l.041.045v.437c0 .119-.074.18-.209.18c-.648.03-1.127.18-1.443.421c-.314.255-.557.616-.736 1.067c0 0-4.043 9.258-5.426 12.339c-.525 1.007-1.053.917-1.503-.031c-.571-1.171-1.773-3.786-2.646-5.71z\" class=\"\"></path></svg></a> on Criterion</li>\n</ul>\n<h3 class=\"\" id=\"getting-back-into-rss\">Getting back into RSS</h3>\n<p class=\"\">I remembered that I had set up a Feedly account in like 2010 and I logged back in and was able to export my subscriptions as an OPML file, a little snapshot in time from a prior chapter of my life.</p>\n<h2 class=\"\" id=\"personal-growth--health\">Personal Growth &#x26; Health</h2>\n<p class=\"\">Struggling with daily meditation. I know I need to do it, but every morning I rationalize reasons why I can get away with procrastinating and never doing it.</p>\n<h2 class=\"\" id=\"-social--community-engagement\">🤝 Social &#x26; Community Engagement</h2>\n<h3 class=\"\" id=\"for-the-many\">For The Many</h3>\n<p class=\"\">Had an interview with For The Many who recently helped secure tenant protections in <a href=\"https://spectrumlocalnews.com/nys/hudson-valley/housing/2023/12/20/newburgh-passes-emergency-tenant-protection-act\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external-link group inline-flex items-center text-blue-600 dark:text-blue-400\" data-preview-url=\"https://spectrumlocalnews.com/nys/hudson-valley/housing/2023/12/20/newburgh-passes-emergency-tenant-protection-act\">Newburgh</a> and have been working to help communities around the Hudson Valley. I am hoping that I can contribute some data analysis or mapping, but I need to understand their needs a little better. I am excited to plant a seed in that direction.</p>\n<figure role=\"figure\" aria-label=\"Workflow automation diagram showing email summarization pipeline: scheduled Gmail trigger feeds 50 items through loop processing, splits to LLM chains and chat models, aggregates results, and sends summary via Gmail.\" class=\"\">\n<img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1735660599/.Screenshot_2024-12-31_at_10.56.17_AM.png\" alt=\"Workflow automation diagram showing email summarization pipeline: scheduled Gmail trigger feeds 50 items through loop processing, splits to LLM chains and chat models, aggregates results, and sends summary via Gmail.\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/v1735660599/.Screenshot_2024-12-31_at_10.56.17_AM.png 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/v1735660599/.Screenshot_2024-12-31_at_10.56.17_AM.png 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1735660599/.Screenshot_2024-12-31_at_10.56.17_AM.png 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/v1735660599/.Screenshot_2024-12-31_at_10.56.17_AM.png 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" title=\"Workflow automation diagram showing email summarization pipeline: scheduled Gmail trigger feeds 50 items through loop processing, splits to LLM chains and chat models, aggregates results, and sends summary via Gmail.\" width=\"3656\" height=\"2474\" style=\"--splay-rot:0.6deg;\" data-dimensions=\"3656×2474\" class=\"img-full my-8 rounded-sm img-splay w-full mx-auto py-4\" crossorigin=\"anonymous\">\n<figcaption class=\"\">Workflow automation diagram showing email summarization pipeline: scheduled Gmail trigger feeds 50 items through loop processing, splits to LLM chains and chat models, aggregates results, and sends summary via Gmail.</figcaption>\n</figure>\n<figure role=\"figure\" aria-label=\"Developer&#x27;s personal statistics dashboard showing 130 best WPM, 1,189 contributions, 389 photographs, and 45,923 words written, with responsive design format notes in sidebar.\" class=\"\">\n<img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1735665786/Screenshot_2024-12-31_at_12.22.47_PM.png\" alt=\"Developer&#x27;s personal statistics dashboard showing 130 best WPM, 1,189 contributions, 389 photographs, and 45,923 words written, with responsive design format notes in sidebar.\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/v1735665786/Screenshot_2024-12-31_at_12.22.47_PM.png 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/v1735665786/Screenshot_2024-12-31_at_12.22.47_PM.png 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1735665786/Screenshot_2024-12-31_at_12.22.47_PM.png 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/v1735665786/Screenshot_2024-12-31_at_12.22.47_PM.png 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" title=\"Developer&#x27;s personal statistics dashboard showing 130 best WPM, 1,189 contributions, 389 photographs, and 45,923 words written, with responsive design format notes in sidebar.\" width=\"3600\" height=\"2338\" style=\"--splay-rot:0.96deg;\" data-dimensions=\"3600×2338\" class=\"img-full my-8 rounded-sm img-splay w-full mx-auto py-4\" crossorigin=\"anonymous\">\n<figcaption class=\"\">Developer's personal statistics dashboard showing 130 best WPM, 1,189 contributions, 389 photographs, and 45,923 words written, with responsive design format notes in sidebar.</figcaption>\n</figure>\n<figure role=\"figure\" aria-label=\"SQL query retrieving distinct metric types from health_data table, displaying 22 rows of health metrics like exercise time, step count, and heart rate measurements.\" class=\"\">\n<img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1735671307/Screenshot_2024-12-31_at_1.54.53_PM.png\" alt=\"SQL query retrieving distinct metric types from health_data table, displaying 22 rows of health metrics like exercise time, step count, and heart rate measurements.\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/v1735671307/Screenshot_2024-12-31_at_1.54.53_PM.png 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/v1735671307/Screenshot_2024-12-31_at_1.54.53_PM.png 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1735671307/Screenshot_2024-12-31_at_1.54.53_PM.png 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/v1735671307/Screenshot_2024-12-31_at_1.54.53_PM.png 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" title=\"SQL query retrieving distinct metric types from health_data table, displaying 22 rows of health metrics like exercise time, step count, and heart rate measurements.\" width=\"3034\" height=\"2474\" style=\"--splay-rot:-0.6deg;\" data-dimensions=\"3034×2474\" class=\"img-full my-8 rounded-sm img-splay w-full mx-auto py-4\" crossorigin=\"anonymous\">\n<figcaption class=\"\">SQL query retrieving distinct metric types from health_data table, displaying 22 rows of health metrics like exercise time, step count, and heart rate measurements.</figcaption>\n</figure>","title":"Overview of the Week","metadata":{"tags":["weekly-notes","reflections","progress","art","meditation","photography","video","health"],"date":"2024-01-01T05:00:00.000Z","modified":"2024-12-31T21:07:10.000Z","dek":"In which the author undertakes various personal and professional pursuits, from creating a photography website and scripting screenshot uploads to exploring new creative outlets and engaging in community initiatives.","words":845,"images":4,"imageDetails":{"total":4,"cloudinary":4,"withDimensions":0},"links":6,"codeBlocks":1,"headers":{"h2":7},"toc":[{"text":"Overview of the Week","slug":"overview-of-the-week","level":"h2","children":[]},{"text":"Projects Worked On","slug":"projects-worked-on","level":"h2","children":[{"text":"Made website for photos","slug":"made-website-for-photos","level":"h3","children":[]},{"text":"Screenshot to Cloudinary script","slug":"screenshot-to-cloudinary-script","level":"h3","children":[]}]},{"text":"Creative Endeavors","slug":"creative-endeavors","level":"h2","children":[{"text":"Struggling making videos","slug":"struggling-making-videos","level":"h3","children":[]}]},{"text":"Technical Accomplishments","slug":"technical-accomplishments","level":"h2","children":[]},{"text":"📘 Learning & Development","slug":"-learning--development","level":"h2","children":[{"text":"Getting back into RSS","slug":"getting-back-into-rss","level":"h3","children":[]}]},{"text":"Personal Growth & Health","slug":"personal-growth--health","level":"h2","children":[]},{"text":"🤝 Social & Community Engagement","slug":"-social--community-engagement","level":"h2","children":[{"text":"For The Many","slug":"for-the-many","level":"h3","children":[]}]}],"type":"post"}},"_links":{"self":"https://ejfox.com/blog/week-notes/2024-01.json","html":"https://ejfox.com/blog/week-notes/2024-01","index":"/blog.json"}}