Skip to main content
JUL 30, 2024·5min read·904 words ·

Overview of the Week

In which the author reflects on building a Scrapbook system, experiments with a modular synth, and efficiently uploads videos to their blog posts via Cloudinary.

Overview of the Week

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.

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![Screenshot - $current_date_time - $filename]($url)" >> "$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

Modular synthesizer patch in Cardinal software with oscillators, filters, envelopes, and effects connected by colorful signal cables.
Modular synthesizer patch in Cardinal software with oscillators, filters, envelopes, and effects connected by colorful signal cables.

Search results for 'scrap clig' showing Command Line Interface Guidelines, Google search option, local scraps, and Pinboard.
Search results for 'scrap clig' showing Command Line Interface Guidelines, Google search option, local scraps, and Pinboard.

Are.na workspace by hacker-journalist EJ Fox organized into sections of personal projects, coding tutorials, and discussions on politics and technology.
Are.na workspace by hacker-journalist EJ Fox organized into sections of personal projects, coding tutorials, and discussions on politics and technology.

Are.na profile page for EJ Fox, a hacker-journalist, displaying two creative blocks: a 2024 meme about computers and capitalism being mistakes, and information graphics about permanent, temporary, and situational forms of touch and perception.
Are.na profile page for EJ Fox, a hacker-journalist, displaying two creative blocks: a 2024 meme about computers and capitalism being mistakes, and information graphics about permanent, temporary, and situational forms of touch and perception.

Channel of literary readings and philosophical excerpts exploring masculinity, grief, consumer culture, and beauty through quotes from writers like Karah Wale Al-Hussain.
Channel of literary readings and philosophical excerpts exploring masculinity, grief, consumer culture, and beauty through quotes from writers like Karah Wale Al-Hussain.

Folder containing numerous screenshot files showing code editors, terminal windows, UI designs, and maps in macOS icon view.
Folder containing numerous screenshot files showing code editors, terminal windows, UI designs, and maps in macOS icon view.

Pinboard bookmarking feed showing recent saved links about technology, politics, and data journalism from user ejfox.
Pinboard bookmarking feed showing recent saved links about technology, politics, and data journalism from user ejfox.

Flowchart showing weekly bookmark curation process: gather bookmarks, generate theme, read webpages, extract facts, and write AI summaries back into bookmark metadata.
Flowchart showing weekly bookmark curation process: gather bookmarks, generate theme, read webpages, extract facts, and write AI summaries back into bookmark metadata.

Screenshot - -

Verbose scrapbook log tracking pinboard and mastodon posts from July-August 2024, capturing news articles, technical documentation, and commentary on politics, crime, and technology.
Verbose scrapbook log tracking pinboard and mastodon posts from July-August 2024, capturing news articles, technical documentation, and commentary on politics, crime, and technology.

Network diagram connecting bookmarks about marijuana laws, domestic violence ruling, Instagram API library, food vending trailers, and David Kleinman, dated July-August 2024.
Network diagram connecting bookmarks about marijuana laws, domestic violence ruling, Instagram API library, food vending trailers, and David Kleinman, dated July-August 2024.

News summary showing 56% of Phoenix police officers considering quitting over DOJ oversight concerns, with relationship diagram connecting city council, police department, DOJ, officers, and union.
News summary showing 56% of Phoenix police officers considering quitting over DOJ oversight concerns, with relationship diagram connecting city council, police department, DOJ, officers, and union.

Search results showing four instances of 'model: "gpt-4"' being replaced with 'gpt-4o-mini' across three JavaScript configuration files.
Search results showing four instances of 'model: "gpt-4"' being replaced with 'gpt-4o-mini' across three JavaScript configuration files.

Web scraping tool extracting NJ Transit rider complaint data and organizing bookmarked articles by date, source, and content topics.
Web scraping tool extracting NJ Transit rider complaint data and organizing bookmarked articles by date, source, and content topics.

Database deletion confirmation dialog warning user that 2,076 rows will be permanently deleted with no undo option.
Database deletion confirmation dialog warning user that 2,076 rows will be permanently deleted with no undo option.

Screenshot - -

Six handmade ceramic mugs by EJ Fox with natural glazes in earth tones and white, priced $30-$40 plus shipping.
Six handmade ceramic mugs by EJ Fox with natural glazes in earth tones and white, priced $30-$40 plus shipping.

Handmade ceramic mugs collection for sale priced $30-40, with artist note about winter experiments and encouraging purchase to support their work.
Handmade ceramic mugs collection for sale priced $30-40, with artist note about winter experiments and encouraging purchase to support their work.

The world is editable. I ship fast, bend computers toward good problems, and help teams who have a hunch something could be better — napkin sketch to working prototype, usually before the week is out. Let's build something →

If you found value in this, consider supporting my work

github ·