{"$schema":"https://ejfox.com/schema/page-twin@1.json","kind":"blog_post","url":"https://ejfox.com/blog/week-notes/2024-38","json_url":"https://ejfox.com/blog/week-notes/2024-38.json","generator":"ejfox.com/json-twin@1","data":{"cacheVersion":"2026-05-13-gear-cards","html":"<h2 class=\"\" id=\"daily-check-in--reflections\">Daily Check-In &#x26; Reflections</h2>\n<ul class=\"list-disc\">\n<li class=\"\">Monday: drove my motorcycle up to Gardiner to meet up with H, see his new house, and chat about some potential work, received blue bottle shipment</li>\n<li class=\"\">Tuesday: worked in my new watercolor sketchbook, got a few things done for the AP</li>\n<li class=\"\">Wednesday: Made some more progress getting up to speed with the AP’s elections systems, had a meeting with S from val.town about potential collaboration, worked on some bugs with <a href=\"/blog/project-notes/connectology\" class=\"internal-link text-blue-600 dark:text-blue-400\">connectology</a></li>\n<li class=\"\">Thursday: Finished 2.5 PRs for the AP, worked on getting scrapbook-core running in the cloud, created script to update Cloudinary photos with computer vision descriptions</li>\n<li class=\"\">Friday: went to Warwick to work from Ben’s studio, did an AP election test call, recorded some VOs for potential videos</li>\n<li class=\"\">Saturday: worked on cutting together a youtube video on scrapworld, worked on rewriting a markdown parsing system for my blog</li>\n<li class=\"\"></li>\n</ul>\n<h2 class=\"\" id=\"code--creations\">Code &#x26; Creations</h2>\n<h3 class=\"\" id=\"connectology\">Connectology</h3>\n<p class=\"\">Slowly and steadily pushing Connectology to a place where I can demo it and share with other people, and most importantly be proud of it.</p>\n<p class=\"\">Worked a bit on fixing the login flow, tweaking and simplifying styles across the board</p>\n<h4 class=\"\" id=\"dbpedia-integration\">DBPedia Integration</h4>\n<h3 class=\"\" id=\"cloudinary-annotation\"><a href=\"https://github.com/ejfox/cloudinary-annotation\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external-link group inline-flex items-center text-blue-600 dark:text-blue-400\" data-preview-url=\"https://github.com/ejfox/cloudinary-annotation\">Cloudinary Annotation<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></h3>\n<p class=\"\">Created a basic repo / script that requests the last week of Cloudinary photos and sends them to gpt-4o to generate descriptions. Went with this vision prompt:</p>\n<blockquote class=\"md-blockquote\">\n<p class=\"text-zinc-600 dark:text-zinc-400\">Describe this image in detail, breaking it down into the following aspects: 1) Main subject matter, 2) Visual elements like composition and setting, 3) Any visible technical content (such as code or devices) with a focus on the general purpose or functionality rather than specifics, and 4) Inferred context, such as time of day, season, or mood. Finally, generate 5-20 relevant tags based on the description, aiming to include tags like 'code,' 'photography,' 'art,' 'nature,' '3d,' or other relevant terms from a wide range of topics. Try to keep your description under 400 words. Avoid lists. At the end, make some inferences/guesses as to what the user is doing, if applicable. Keep your answer as information-dense and succinct as possible. Try to capture the overall gist of the image as well as the specifics. Never respond in the negative.</p>\n</blockquote>\n<h3 class=\"\" id=\"scrapbook-core\">Scrapbook-core</h3>\n<p class=\"\">Working on getting this deployed to fly.io on a cronjob so I don't have to run it by hand, which means my bookmarks are almost always out of sync lately.</p>\n<h3 class=\"\" id=\"updated-blog\">Updated blog</h3>\n<p class=\"\">I worked on creating <a href=\"https://gist.github.com/ejfox/333fa5fa676160b2e5757160a62f555c\" 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/333fa5fa676160b2e5757160a62f555c\">a custom markdown->json parser<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> I could use to power my blog, since the bug that's preventing me from running my blog with <code class=\"md-inline-code\">@nuxt/content</code> hasn't been fixed yet and I am extremely impatient.</p>\n<figure role=\"figure\" aria-label=\"Twitter posts joking about welcoming someone to a cult with absurd rules, then immediately clarifying the word choice.\" class=\"\">\n<img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1726593376/Screenshot_2024-09-17_at_1.16.03_PM.png\" alt=\"Twitter posts joking about welcoming someone to a cult with absurd rules, then immediately clarifying the word choice.\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/v1726593376/Screenshot_2024-09-17_at_1.16.03_PM.png 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/v1726593376/Screenshot_2024-09-17_at_1.16.03_PM.png 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1726593376/Screenshot_2024-09-17_at_1.16.03_PM.png 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/v1726593376/Screenshot_2024-09-17_at_1.16.03_PM.png 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" title=\"Twitter posts joking about welcoming someone to a cult with absurd rules, then immediately clarifying the word choice.\" width=\"1182\" height=\"516\" style=\"--splay-rot:2.98deg;\" data-dimensions=\"1182×516\" class=\"img-full my-8 rounded-sm img-splay w-full mx-auto py-4\" crossorigin=\"anonymous\">\n<figcaption class=\"\">Twitter posts joking about welcoming someone to a cult with absurd rules, then immediately clarifying the word choice.</figcaption>\n</figure>\n<figure role=\"figure\" aria-label=\"README documentation for markdown-tag-updater CLI tool that automatically adds relevant tags to markdown files using OpenRouter API.\" class=\"\">\n<img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1726780671/Screenshot_2024-09-19_at_5.17.38_PM.png\" alt=\"README documentation for markdown-tag-updater CLI tool that automatically adds relevant tags to markdown files using OpenRouter API.\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/v1726780671/Screenshot_2024-09-19_at_5.17.38_PM.png 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/v1726780671/Screenshot_2024-09-19_at_5.17.38_PM.png 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1726780671/Screenshot_2024-09-19_at_5.17.38_PM.png 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/v1726780671/Screenshot_2024-09-19_at_5.17.38_PM.png 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" title=\"README documentation for markdown-tag-updater CLI tool that automatically adds relevant tags to markdown files using OpenRouter API.\" width=\"1684\" height=\"2474\" style=\"--splay-rot:1.05deg;\" data-dimensions=\"1684×2474\" class=\"img-full my-8 rounded-sm img-splay aspect-[3/4] w-full mx-auto py-4\" crossorigin=\"anonymous\">\n<figcaption class=\"\">README documentation for markdown-tag-updater CLI tool that automatically adds relevant tags to markdown files using OpenRouter API.</figcaption>\n</figure>\n<figure role=\"figure\" aria-label=\"Terminal showing Fly.io machine updates for scrapbook-core app with DNS validation error due to invalid hostname characters.\" class=\"\">\n<img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1726785675/Screenshot_2024-09-19_at_6.41.01_PM.png\" alt=\"Terminal showing Fly.io machine updates for scrapbook-core app with DNS validation error due to invalid hostname characters.\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/v1726785675/Screenshot_2024-09-19_at_6.41.01_PM.png 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/v1726785675/Screenshot_2024-09-19_at_6.41.01_PM.png 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1726785675/Screenshot_2024-09-19_at_6.41.01_PM.png 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/v1726785675/Screenshot_2024-09-19_at_6.41.01_PM.png 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" title=\"Terminal showing Fly.io machine updates for scrapbook-core app with DNS validation error due to invalid hostname characters.\" width=\"2004\" height=\"2474\" style=\"--splay-rot:-1.59deg;\" data-dimensions=\"2004×2474\" class=\"img-full my-8 rounded-sm img-splay aspect-[3/4] w-full mx-auto py-4\" crossorigin=\"anonymous\">\n<figcaption class=\"\">Terminal showing Fly.io machine updates for scrapbook-core app with DNS validation error due to invalid hostname characters.</figcaption>\n</figure>\n<figure role=\"figure\" aria-label=\"Developer comparing prompt engineering techniques for image description tasks in ChatGPT, with structured prompts and tag-generation methods displayed side-by-side.\" class=\"\">\n<img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1726791978/Screenshot_2024-09-19_at_8.26.03_PM.png\" alt=\"Developer comparing prompt engineering techniques for image description tasks in ChatGPT, with structured prompts and tag-generation methods displayed side-by-side.\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/v1726791978/Screenshot_2024-09-19_at_8.26.03_PM.png 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/v1726791978/Screenshot_2024-09-19_at_8.26.03_PM.png 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1726791978/Screenshot_2024-09-19_at_8.26.03_PM.png 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/v1726791978/Screenshot_2024-09-19_at_8.26.03_PM.png 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" title=\"Developer comparing prompt engineering techniques for image description tasks in ChatGPT, with structured prompts and tag-generation methods displayed side-by-side.\" width=\"3600\" height=\"2338\" style=\"--splay-rot:-2.54deg;\" 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 comparing prompt engineering techniques for image description tasks in ChatGPT, with structured prompts and tag-generation methods displayed side-by-side.</figcaption>\n</figure>\n<p class=\"\"><img src=\"https://res.cloudinary.com/ejf/video/upload/c_scale,f_auto,q_auto:good,w_1280/v1726927925/Screen_Recording_2024-09-21_at_10.10.50_AM.mov\" alt=\"Screenshot - - \" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/video/upload/c_scale,f_auto,q_auto:good,w_640/v1726927925/Screen_Recording_2024-09-21_at_10.10.50_AM.mov 640w, https://res.cloudinary.com/ejf/video/upload/c_scale,f_auto,q_auto:good,w_960/v1726927925/Screen_Recording_2024-09-21_at_10.10.50_AM.mov 960w, https://res.cloudinary.com/ejf/video/upload/c_scale,f_auto,q_auto:good,w_1280/v1726927925/Screen_Recording_2024-09-21_at_10.10.50_AM.mov 1280w, https://res.cloudinary.com/ejf/video/upload/c_scale,f_auto,q_auto:good,w_1920/v1726927925/Screen_Recording_2024-09-21_at_10.10.50_AM.mov 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" style=\"--splay-rot:-1.68deg;\" class=\"img-full my-8 rounded-sm img-splay w-full mx-auto py-4\" crossorigin=\"anonymous\"></p>\n<p class=\"\"><img src=\"https://res.cloudinary.com/ejf/video/upload/c_scale,f_auto,q_auto:good,w_1280/v1726928052/Screen_Recording_2024-09-21_at_10.13.07_AM.mov\" alt=\"Screenshot - - \" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/video/upload/c_scale,f_auto,q_auto:good,w_640/v1726928052/Screen_Recording_2024-09-21_at_10.13.07_AM.mov 640w, https://res.cloudinary.com/ejf/video/upload/c_scale,f_auto,q_auto:good,w_960/v1726928052/Screen_Recording_2024-09-21_at_10.13.07_AM.mov 960w, https://res.cloudinary.com/ejf/video/upload/c_scale,f_auto,q_auto:good,w_1280/v1726928052/Screen_Recording_2024-09-21_at_10.13.07_AM.mov 1280w, https://res.cloudinary.com/ejf/video/upload/c_scale,f_auto,q_auto:good,w_1920/v1726928052/Screen_Recording_2024-09-21_at_10.13.07_AM.mov 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" style=\"--splay-rot:-1.2deg;\" class=\"img-full my-8 rounded-sm img-splay w-full mx-auto py-4\" crossorigin=\"anonymous\"></p>\n<p class=\"\"><img src=\"https://res.cloudinary.com/ejf/video/upload/c_scale,f_auto,q_auto:good,w_1280/v1726929283/Screen_Recording_2024-09-21_at_10.34.19_AM.mov\" alt=\"Screenshot - - \" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/video/upload/c_scale,f_auto,q_auto:good,w_640/v1726929283/Screen_Recording_2024-09-21_at_10.34.19_AM.mov 640w, https://res.cloudinary.com/ejf/video/upload/c_scale,f_auto,q_auto:good,w_960/v1726929283/Screen_Recording_2024-09-21_at_10.34.19_AM.mov 960w, https://res.cloudinary.com/ejf/video/upload/c_scale,f_auto,q_auto:good,w_1280/v1726929283/Screen_Recording_2024-09-21_at_10.34.19_AM.mov 1280w, https://res.cloudinary.com/ejf/video/upload/c_scale,f_auto,q_auto:good,w_1920/v1726929283/Screen_Recording_2024-09-21_at_10.34.19_AM.mov 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" style=\"--splay-rot:2.22deg;\" class=\"img-full my-8 rounded-sm img-splay w-full mx-auto py-4\" crossorigin=\"anonymous\"></p>\n<figure role=\"figure\" aria-label=\"Multiple GitHub repository pages and code editor windows showing the Obsidian Media DB Plugin project files and documentation.\" class=\"\">\n<img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1726930224/Screenshot_2024-09-21_at_10.50.01_AM.png\" alt=\"Multiple GitHub repository pages and code editor windows showing the Obsidian Media DB Plugin project files and documentation.\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/v1726930224/Screenshot_2024-09-21_at_10.50.01_AM.png 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/v1726930224/Screenshot_2024-09-21_at_10.50.01_AM.png 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1726930224/Screenshot_2024-09-21_at_10.50.01_AM.png 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/v1726930224/Screenshot_2024-09-21_at_10.50.01_AM.png 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" title=\"Multiple GitHub repository pages and code editor windows showing the Obsidian Media DB Plugin project files and documentation.\" width=\"2564\" height=\"1788\" style=\"--splay-rot:-2.77deg;\" data-dimensions=\"2564×1788\" class=\"img-full my-8 rounded-sm img-splay w-full mx-auto py-4\" crossorigin=\"anonymous\">\n<figcaption class=\"\">Multiple GitHub repository pages and code editor windows showing the Obsidian Media DB Plugin project files and documentation.</figcaption>\n</figure>\n<figure role=\"figure\" aria-label=\"A/B test results comparing two video thumbnails about converting bookmarks into knowledge graphs using local LLMs, with thumbnail 2 preferred at 52.9% watch time share.\" class=\"\">\n<img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1726930804/Screenshot_2024-09-21_at_10.59.52_AM.png\" alt=\"A/B test results comparing two video thumbnails about converting bookmarks into knowledge graphs using local LLMs, with thumbnail 2 preferred at 52.9% watch time share.\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/v1726930804/Screenshot_2024-09-21_at_10.59.52_AM.png 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/v1726930804/Screenshot_2024-09-21_at_10.59.52_AM.png 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1726930804/Screenshot_2024-09-21_at_10.59.52_AM.png 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/v1726930804/Screenshot_2024-09-21_at_10.59.52_AM.png 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" title=\"A/B test results comparing two video thumbnails about converting bookmarks into knowledge graphs using local LLMs, with thumbnail 2 preferred at 52.9% watch time share.\" width=\"1062\" height=\"808\" style=\"--splay-rot:-0.6deg;\" data-dimensions=\"1062×808\" class=\"img-full my-8 rounded-sm img-splay w-full mx-auto py-4\" crossorigin=\"anonymous\">\n<figcaption class=\"\">A/B test results comparing two video thumbnails about converting bookmarks into knowledge graphs using local LLMs, with thumbnail 2 preferred at 52.9% watch time share.</figcaption>\n</figure>","title":"Daily Check-In & Reflections","metadata":{"tags":["weekly-notes","reflections","progress","motorcycle","coding","health","inspiration"],"modified":"2025-08-28T19:08:25.000Z","date":"2024-09-16T12:51:03.000Z","dek":"In which the protagonist embarked on a week of creative endeavors, coding projects, and collaborations, culminating in a flurry of digital creations and video recordings.","words":565,"images":9,"imageDetails":{"total":9,"cloudinary":9,"withDimensions":0},"links":11,"codeBlocks":0,"headers":{"h2":2},"toc":[{"text":"Daily Check-In & Reflections","slug":"daily-check-in--reflections","level":"h2","children":[]},{"text":"Code & Creations","slug":"code--creations","level":"h2","children":[{"text":"Connectology","slug":"connectology","level":"h3","children":[]},{"text":"Cloudinary Annotation","slug":"cloudinary-annotation","level":"h3","children":[]},{"text":"Scrapbook-core","slug":"scrapbook-core","level":"h3","children":[]},{"text":"Updated blog","slug":"updated-blog","level":"h3","children":[]}]}],"type":"post"}},"_links":{"self":"https://ejfox.com/blog/week-notes/2024-38.json","html":"https://ejfox.com/blog/week-notes/2024-38","index":"/blog.json"}}