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. ...

Comic book-style illustration of Podman as a superhero wearing a futuristic suit with glowing blue accents and container-themed designs. Podman is in a dynamic pose, holding glowing, container-shaped constructs in their hands, symbolizing their power to create and control containers. The background features a tech-inspired cityscape with digital effects, emphasizing themes of innovation and technology. The image is vibrant and colorful, capturing the energy and drama of classic superhero comics.

Setting Up Podman on MacOS: A Docker Alternative for Local Container Development

Why Run Containers Locally? Running containers on your development machine has become an essential practice for modern software development. Local containers provide: Consistent development environments across team members Quick testing of containerized applications without remote dependencies Easy experimentation with different software stacks Simplified microservices development and testing Efficient resource usage compared to traditional virtual machines Why Podman Instead of Docker Desktop? While Docker Desktop has been the de facto standard for local container development, Podman offers several compelling advantages: ...