This is a promotional photo from Apple showcasing a young woman wearing the Apple Vision Pro, their mixed-reality headset. The woman is depicted from the shoulders up, with her face centered in the frame. She has dark skin, a natural hairstyle with curls tied up, and is wearing a crisp white shirt. The Apple Vision Pro covers her eyes and upper face. Its sleek design features a dark, reflective, curved visor and a soft inner lining. The headset's front surface displays an augmented projection of the wearer’s eyes, creating a digital effect where her gaze is visible through the visor. The image highlights the futuristic and human-focused aspects of the technology.

Apple spatial computing wishlist

Context While I’m not a VR expert by any means, my first experience was around 1995. I have owned the Meta Quest 2, and currently own the Meta Quest Pro and the Apple Vision Pro. I’ve been an Apple stan since owning my first Apple computer, an Apple IIe. I pre-ordered my Apple Vision Pro within a few minutes of Apple opening up orders online. I received my unit on day 1, and have used it almost every day since (except when traveling). My opinion of the device and the user experience is very complicated. ...

about Now Pages

Premise Most sites have an “about” page that doesn’t change much. It’s usually not very interesting, especially for a personal blog like magnus919.com. A “now” page reminds me a bit of the old .plan file back in the paleo-internet days where finger was everyone’s favorite command-line federated social network platform. The basic premise of the now page is that it’s very fresh, very current, and it’s more about what is going on in your life right now. ...

Embed Mastodon Shortcode

The Problem Embed Mastodon posts (toots) into Hugo content for context. The Solution Bryce Wray provides the code. But this didn’t look right on my PaperMod theme. So I tried something different. Put this into layouts/shortcodes/toot.html: And invoke like this: The Example Magnus Hedemark @[email protected] I haven’t been posting a lot on #Mastodon since diving into #Bluesky. One of the things I’ve been enjoying recently is getting more hands-on with #ESP32 & #ESPhome. I’m learning how to pull data from sensors and use attached displays. Also integrating with #HomeAssistant. This prototype is building up towards hacking a Big Mouth Billy Bass novelty toy. But I’d also like to build a really anachronistic digital instrument display for my vintage Harley-Davidson project motorcycle. #makers ...

Mini Racks

Resources GitHub geerlingguy/mini-rack - Affiliated with Jeff Geerling’s excellent YouTube channel. JaredC01/LabStack Reddit r/minilab YouTube Jeff Geerling Jeff Geerling runs a number of homelab-friendly YouTube channels. On his main channel, he introduced Project MINI RACK. He often does a lot of his earlier play/work/experiments on secondary channels. So 8 months prior, he published this video: Raid Owl

obsidian notes linkup

This site is going to start showing more small “notes” that will usually be without a cover image or heavy composition. I’m working on a workflow for keeping notes in Obsidian while easily exporting my notes in one direction from Obsidian to Hugo. As I work through the book Building a Second Brain: A Proven Method to Organize Your Digital Life and Unlock Your Creative Potential by Tiago Forte, these pages will show referential links back and forth to one another. ...

Watercolor illustration of a WiFi logo with arcs featuring global cultural motifs: cherry blossoms for Japan, Moroccan geometric patterns, African tribal designs, and a Roman column symbolizing Europe. The background includes a faint globe and travel-related icons like an airplane, passport, and suitcase, blending harmoniously in a vibrant, colorful style.

Travel Router

GL.iNet GL-AXT1800 (Slate AX) GL.iNet GL-AXT1800 (Slate AX) The GL.iNet GL-AXT1800 (Slate AX) is the travel router I’m using as of Jan 2025. I’m finding it really useful for having all of my personal devices “just work” when I go to a cafe, or stay in a hotel. Or, while I’m writing this now somewhere over the north Atlantic Ocean, on paid-for airplane wifi. ...

Watercolor painting of a cheerful Viking holding a flagpole with the Swedish flag fluttering in the wind. The Viking, wearing a traditional horned helmet and a tunic adorned with Norse designs, stands on a green hillside under a bright blue sky with soft clouds. A shimmering lake is visible in the distance, adding to the vibrant and uplifting scene.

Trip to Sweden - January 2025

Intro I went to Sweden for a week in January, 2025 for a visit. I was based out of Lund with occasional trips into Malmö. These are in the southern region known as Skåne. Getting There IcelandAir Two words: Necessary evil. Getting Around Buses & Trains The Experience Everything is safe and clean. Bus drivers can be a little aggressive, especially with pedestrians trying to cross. Trains were often late and switching tracks, so give yourself some buffer. ...

An illustration of Pete the octopus, a friendly purple octopus mascot, sitting on top of a computer monitor. The monitor displays a chat interface with colorful text bubbles, representing a tech-themed concept. Surrounding Pete are floating elements like HTML and CSS code snippets, chat bubbles, and subtle digital design patterns. The background features a vibrant gradient with soft tech-inspired geometric shapes, creating a creative and engaging atmosphere.

renderchat shortcode - Open WebUI chats in Hugo sites

Introduction Since I’m using AI to help me more quickly brain dump my non-linear thoughts into a more readable format, I thought it would sometimes be handy to display Open WebUI chats in Hugo sites. This is where the renderchat shortcode comes in. Installation To use the renderchat shortcode, you can do this by creating a file in your site, layouts/shortcodes/renderchat.html, and adding the following code: {{/* renderchat.html */}} {{ $file := .Get "file" }} {{ if eq $file "" }} <p>No chat log file specified.</p> {{ return }} {{ end }} {{ $jsonResource := .Page.Resources.GetMatch $file }} {{ if not $jsonResource }} <p>Could not find the chat log file: {{ $file }}</p> {{ return }} {{ end }} {{ $json := $jsonResource | transform.Unmarshal }} {{ if not $json }} <p>Failed to parse the chat log JSON file.</p> {{ return }} {{ end }} {{ range $json }} <div class="chat-log"> <h2 class="chat-title">{{ .title }}</h2> <div class="chat-messages"> {{ $messages := slice }} {{ range .chat.history.messages }} {{ $messages = $messages | append . }} {{ end }} <!-- Create a map of messages by ID --> {{ $messageMap := dict }} {{ range $messages }} {{ $messageMap = merge $messageMap (dict (printf "%s" .id) .) }} {{ end }} <!-- Render root messages --> {{ range (where $messages "parentId" "==" nil) }} {{ template "renderMessageWithChildren" dict "message" . "map" $messageMap }} {{ end }} </div> </div> {{ end }} {{/* Recursive template to render messages */}} {{ define "renderMessageWithChildren" }} {{ $message := .message }} {{ $map := .map }} <!-- Render current message --> <div class="chat-message {{ $message.role }}"> <strong>{{ if eq $message.role "user" }}User{{ else }}{{ $message.model }}{{ end }}:</strong> <div style="white-space: pre-wrap;">{{ $message.content }}</div> </div> <!-- Render children recursively --> {{ range $message.childrenIds }} {{ $child := index $map . }} {{ template "renderMessageWithChildren" dict "message" $child "map" $map }} {{ end }} {{ end }} Now we’ll need CSS code. My theme will load any CSS that I put in assets/css/extended/ so I added a file in there called renderchat.css. Here’s the CSS code for the chat log: ...

Product image of a MacBook Air M1, circa 2020

My MacBook Setup

2020 MacBook Air M1 I’ve got this old MacBook Air M1 that’s getting on in years, but I’m not quite yet feeling the need to upgrade it. Partly because I’ve got so many other Apple products to stay on top of, I really like to space my Mac purchases apart more. But the M1 was such a huge leap in performance. I was coming from a MacBook Pro 16" Core i7 and I’m not kidding when I say this lowly Air that came out not much later is a better computer, and certainly more convenient to travel with. In fact, I’m literally writing this now from inside of Terminal 2 at RDU airport, and I’m looking forward to getting some writing done during my long flight. ...

Watercolor-style digital painting of a modern Mac laptop on a sleek desk surrounded by abstract AI-themed elements, with subtle travel-related items like a passport and an airplane toy in a minimalist pastel background.

Local AI Assistant on Mac

Introduction I’m writing this just before hopping on a long trans-atlantic flight. I’m not betting on the in-flight WiFi being very good, so I’m taking the time to get a local AI assistant running on my laptop. I think many travelers will be interested in setting something like this up, so I’d like to take the time to document a lot of how I’m doing this… and hopefully make it easier for others to get it going. ...