Got back from Hanging with Ben & Kevin at Kevin's cabin. On Monday family helped me move out a lot of the big remaining stuff from my apartment in to storage: bookshelves, desk, bedframe. Everyone helped and left exhausted.
2024/my-modern-scrapbook|my-modern-scrapbook]]: wrote a blog post about the Scrapbook system I have been building, which is good, because I realized how much sprawling work I have put into it without a clear understanding of my motivations. Sitting down to write 2000+ words on it made me really think about that side of things, which is good.
I also figured out it's super easy to get little videos into my blog posts since I already have an Automator action to automatically via a shell script run through an Automator folder action that triggers anytime a new file is added to screenshots
- it automatically uploads videos, too, like the ones recorded if I hit CMD+shift+5 and record a little segment of my screen. Once it's uploaded its URL is copied to my clipboard, and I just swap out mp4
for gif
. It's also nice to set some extra Cloudinary processing params like /q_auto/w_768/e_loop/
to make the quality automatic, resize to a width of 768, and loop the gif
Here's the script that auto-uploads to Cloudinary and appends the screenshot to my weekly note with cld
#!/bin/bash
# API keys for Cloudinary
export CLOUDINARY_URL=cloudinary://foo@bar
# Function to get the current year and week number
get_weekly_note_path() {
local year_week=$(date +%Y-%V)
local note_path="/Users/ejfox/Library/Mobile Documents/iCloud~md~obsidian/Documents/ejfox/Week Notes/${year_week}.md"
echo "$note_path"
}
# Iterate over each passed argument
for file in "$@"
do
# Check if the file exists
if [ -f "$file" ]; then
# Upload to Cloudinary and capture output
upload_output=$(/opt/homebrew/bin/cld uploader upload "$file" use_filename=true unique_filename=false 2>&1)
upload_exit_status=$?
# Check if the upload was successful
if [ $upload_exit_status -eq 0 ]; then
# Attempt to extract the URL using the absolute path for jq
url=$(echo "$upload_output" | /opt/homebrew/bin/jq -r '.url' 2>/dev/null)
# Check if the URL is non-empty
if [ -n "$url" ]; then
echo "$url" | pbcopy
# Display success notification with the URL
osascript -e "display notification \"Uploaded $file to Cloudinary and URL copied to clipboard: $url\" with title \"Screenshot Upload\""
# Get the weekly note file path
weekly_note_path=$(get_weekly_note_path)
# Append the markdown image format to the weekly note file
echo -e "\n" >> "$weekly_note_path"
# Display notification for appending to the weekly note
# osascript -e "display notification \"Appended screenshot URL to weekly note: $weekly_note_path\" with title \"Weekly Note Update\""
else
# Display notification for empty URL
osascript -e "display notification \"Failed to extract URL from output\" with title \"Debug\""
fi
else
# Display notification for upload failure
osascript -e "display notification \"Failed to upload $file to Cloudinary. Error: $upload_output\" with title \"Screenshot Upload\""
fi
else
# Display notification for file not found
osascript -e "display notification \"File does not exist: $file\" with title \"Debug\""
fi
done
Projects Worked On
Spliff & Espresso
- Bought <spliffandespresso.com> and got @spliffandespresso on IG
- Did some experimentation with colors and typefaces for the logo
Creative Endeavors
I've been playing a lot with Cardinal the free and open-source modular synth, and it's a great way to lose hours of your life to tweaking knobs and dragging cables. It absorbs time almost as well as Crusader Kings 3















