Archive
Feeds Sign In
Archive Feeds Sign In

June 12

On This Day

Travels & Check-ins

Loading location data...
2026
Bookmark
Liss is More An Old, Familiar Feeling — Liss is More I had a not-too-unusual experience with AI yesterday, that had a not-at-all-normal impact.

Indie developer Casey Liss of Accidental Tech Podcast fame recounted his experience using Claude Code on his app, Callsheet. With Claude Code, he was able to fix two bugs that had eluded him for months, and his take on the experience is unique.

I was struck; I was feeling something that was familiar, but distant. I felt like I had just worked together with a coworker to solve a technical problem. It felt like I was part of a team again.

I expect Casey to receive some negative feedback about this, but I totally understand the perspective. It’s okay to perceive a coding agent as an extension of your team. For indie developers, who are often a team of one, having an agent to bounce ideas off of, to experiment with, and to debug/fix code with is incredibly impactful.

Jonathan's location at time of posting
LaCour Stationary 100%
2024
Article

Magic Poster on the Wall

This post originally appeared in my Techish newsletter on LinkedIn.

You’re the Coolest AI of All

From a young age, I’ve always loved the magical experience of going to the movies. Torn ticket stubs, big booming sound, giant screens, and popcorn fill my heart with joy. There is nothing in the world quite like sharing in the community experience of enjoying a blockbuster in a movie theater. I suppose it's no surprise that I’ve loved living in LA so much!

Since 2020, theaters have struggled quite a bit, and for good and obvious reasons. I’ve truly missed taking my family to the theater. I’m a bit of a digital packrat, with a healthy collection of Blu-Rays stored on my home NAS. About a year ago, I finished renovating my home theater, which was a big step toward recapturing the magic of the movies with my family. But, no matter how great the picture and sound are, I still felt something was missing.

If you’ve been following me, you’ll be unsurprised to hear that I decided to scratch my itch with technology. What better way to explore the emerging and promising power of GenAI while honing my skill with HTML, CSS, JavaScript, and WebSockets?

Picture This

Part of visiting a movie theater is walking by a wall of big, colorful movie posters, which are, in my view, an underappreciated art form. A great movie poster creates a sense of excitement, anticipation, and wonder. A few months ago I stumbled on a project called Movie Posters Perfected, which was a huge inspiration for this project. While I could have gone down the path of just showing movie posters from this curated collection using a Fire TV stick, I wanted to create something even more magical. So, armed with inspiration, I set to the task of creating what I call my “Magic Poster.”

The hardware ingredients for the Magic Poster are simple:

Assembly was straightforward, thanks to double sided tape and zip ties. The one piece of hardware I wouldn’t use again is the Samsung monitor, which is a little too “smart” for it's own good. Getting it to be happy in portrait orientation was a nightmare! Still, I soldiered on and was able to mount the TV on the wall and drive the display with my Raspberry Pi 5, with the LED backlight matching the content on screen. Now, it was time to build some software.

Magic Poster’s Software Stack

While Raspberry Pis have become surprisingly powerful, they are still constrained computers with limited performance. I knew that I wanted to do more than just display static posters. I wanted to enhance the magic factor with animations, context awareness, and generative AI. When it comes to rendering performance, modern web browsers have decades of optimization, hardware acceleration, and features. I decided that my best bet was to use Chromium in “kiosk” mode, which displays websites in full screen, free of window decorations, toolbars, and tabs.

For the backend, I chose my programming language of choice, Python, along with libraries like Flask and SocketIO. Magic Poster is a JavaScript-powered frontend that communicates with a Python backend using WebSocket. I deployed modern CSS animations and transitions to create delightful views that can scroll, flip, and fade in and out.

After a few weeks of insomnia-fueled development, I had Magic Poster serving up beautiful posters from a hand-picked set of over 1,200 high-resolution movie posters, with four different styles: single poster, a “marquee” view with dozens of small animated posters, a “scroll” view that shows medium sized posters with a smooth scrolling animation, and a “flip” view that experiments with animation that really make the LED backlight sing.

Magic Poster displaying a poster for the movie Thor Love and Thunder

Magic Poster displaying a poster for the movie Groundhog Day

Magic Poster displaying a animated marquee view of dozens of movie posters

Context Awareness

One of the benefits of powering Magic Poster with a network attached Raspberry Pi is that it can integrate with other systems on my home network. In my theater, I have an Apple TV 4K, a Zidoo Z9X and a gaming PC running ChimeraOS. Thanks to open APIs, I am able to detect when I am watching a movie or show, or when a game is being played. Using these APIs, I was able to have a small overlay appear on Magic Poster that displays information about the current activity.

Magic Poster was really taking shape, with a variety of different modes, context awareness, and even a simple REST API for controlling what is on screen at any given time. Still, I felt that there was something missing: interactivity. With the rapid and accelerating evolution of AI, there was an opportunity to take Magic Poster to the next level.

A Magic Sprinkle of GenAI and ML

Interactivity requires two-way communication. Attaching a keyboard or physical buttons to Magic Poster would be an easy path to providing input, but buttons are decidedly un-magical. I wanted Magic Poster to have a personality – to feel alive. Technology has an opportunity to become increasingly personal and interactive thanks to AI, and I concluded that the most magical way to interact with Magic Poster would be through conversation. Could I simply speak to Magic Poster, and more importantly, have Magic Poster respond?

Voice assistants have been “a thing” for quite some time. My experience with the three major players (Apple’s Siri, Google, and Amazon’s Alexa) have been mixed at best. All three assistants require “wake words” to begin an interaction, which feels forced. In the years since these assistants were developed, technology has evolved and advanced significantly. If possible, my goal was to have conversations with Magic Poster feel more natural.

As a longtime member of the Python community and a Fellow in the Python Software Foundation, I follow a number of prominent community members. Simon Willison is a Python developer that has become deeply interested in AI and LLMs, producing some great tools including Datasette, and more recently, Python LLM, which makes using both local and hosted LLMs from Python fun and easy. Through Simon, I discovered Vosk, which is an open source ML powered speech recognition toolkit with impressive accuracy and a very small footprint. I was quickly able to leverage Vosk to have Magic Poster passively listening to me in the background, ready to respond or take action based upon my feedback, including changing views, requesting specific posters, and more.

Now that Magic Poster could listen and take action, I wanted to give it the power to respond in its own voice. One of my favorite sites on the web is The Movie Database (TMDb), which is a free platform chock full of features, including an API with excellent Python client libraries. TMDb contains a lot of user-generated content, including a large number of reviews, with useful insights from a broad range of people. I decided to give Magic Poster the power to take hundreds of user reviews to generate a short summary of audience sentiment. When requested, Magic Poster reached out to The Movie Database, quickly pulls down all of the reviews for a movie, and then generates a summary using Ollama and the Llama 3 LLM. Finally, I feed the generated content to a text-to-speech system, and Magic Poster finally has a voice.

What’s Next?

It's been a lot of fun working on Magic Poster, and I am really happy with where it stands today. Of course, I have so many ideas about where to go from here, with additional voice features, display styles, and more. What do you think about Magic Poster? Do you have any suggestions for how to make it even more magical? Talk soon!

Jonathan's location at time of posting
LaCour stationary -3.6 km/h 55%
2023
2022
Watching
The Boys
S03E04 "Glorious Five Year Plan"

Tonight, streaming live exclusively for Supeporn.com Super-Subscribers, it’s the ! Which of The Seven-inspired dildos will crush the competition in this tip-to-tip challenge? Will it be the reigning champion Homelander Star-Spangled Banger or Starlight’s electrified Star-Brator? Join us as we put these pleasure-pounding penetrators through their paces! Only on Supeporn.com!

Watched on Trakt

View on Trakt
Jonathan's location at time of posting
DesertSun Stationary 82%
2021
Watching
Top Chef
S18E11 "Blind Ambitions"

This week’s Quickfire Challenge takes inspiration from "Top Chef" France’s infamous Black Box challenge. In teams of two, the chefs each take a turn entering the box where they blindly taste a dish created by guest judge Gabriel Rucker and then must try to recreate it. During a night off, the chefs are surprised by guest judges Kristen Kish and Brooke Williamson arrive with care packages from their families. However, in true “Top Chef” fashion, there’s a twist and they must use the ingredients from their care packages to make their dish for the Elimination Challenge.

Watched on Trakt

View on Trakt
Jonathan's location at time of posting
LaCour stationary 48%
2020
Watching
Queer Eye
S05E09 "Paging Dr. Yi"

A working mom yearns to balance her home life and career as a pediatrician, but her look screams "medical student." Time for some style tips stat.

Watched on Trakt

View on Trakt
Jonathan's location at time of posting
LaCour Stationary 85%
2019
Note
Taxis are officially superior to ride sharing services again. They are often faster, the drivers are more professional, and they usually know where they are going.
Jonathan's location at time of posting
driving 97.2 km/h 79%
Note
@aaronpk years ago, I wrote a little script that automatically converted a Keynote deck into individual PDF files (one per slide, vector, scalable) and then created a PPTX file out of the result. Not editable, obviously, but a nice shortcut. Sadly, I can’t find the script anymore!
Jonathan's location at time of posting
driving, stationary -3.6 km/h 75%
2018
Note
Why in the world is @Delta partnered with WestJet!? Not impressed. Airplane is cramped, with no in flight entertainment. No first class at all. No upgrades for Diamond medallions to “Plus” seats. Oh, and gate agent skipped Zone 1, leaving me trapped behind Zone 2.
2017
Note
I've owned several iPads over the years, but now they're mostly used by the kids. iOS and the iPad form factor never clicked for me for every day work. However, the 10.5 inch iPad Pro has my interest piqued, especially with iOS 11's enhancements for productivity.
Note
Cursed travel day:

* Scheduled Lyft driver bailed on me.
* Check in line is swamped with only two agents working.
* Hotel canceled my reservation by mistake.
* My luggage broke.
* My flight is delayed by over an hour, making me late to my event.

Yikes!
2016
2015
2011