# tteoh > Veterinary epidemiologist; research, data, also other things ## Posts - [Repurposing a USB display, one byte at a time](https://tteoh.com/posts/repurposing-a-usb-display/): Turning a surplus 3.5" USB display into a general-purpose sensor dashboard on a Raspberry Pi, by reverse-engineering its protocol and rebuilding the driver in C. With LLM assistance, this was the difference between a working tool and a discarded one. ([markdown](https://tteoh.com/content/posts/repurposing-a-usb-display.md)) - [Building for reading](https://tteoh.com/posts/building-for-reading/): A plain site serves human readers well, while making content accessible to screen readers, text browsers, feed readers, and AI agents with minimal overhead. ([markdown](https://tteoh.com/content/posts/building-for-reading.md)) - [Getting cheap AliExpress LoRa modules working on Linux](https://tteoh.com/posts/dx-lr02-lora-modules/): Notes on configuring DX-Smart LR01/LR02 LoRa modules for AU915 on Linux, where the documentation assumes Windows and not much else exists online. ([markdown](https://tteoh.com/content/posts/dx-lr02-lora-modules.md)) - [Optimising the build pipeline](https://tteoh.com/posts/optimising-the-build/): Looking at how the static site build scales as more content gets added, and making two small changes before they become necessary. ([markdown](https://tteoh.com/content/posts/optimising-the-build.md)) - [Reading the PageSpeed report](https://tteoh.com/posts/reading-the-pagespeed-report/): Running PageSpeed Insights on a site built to be simple, as a check that it actually behaves that way. ([markdown](https://tteoh.com/content/posts/reading-the-pagespeed-report.md)) - [A router for my local models](https://tteoh.com/posts/llmesh/): Building a personal LLM router to share local model capacity, route requests from anywhere, and actually understand how model serving works. ([markdown](https://tteoh.com/content/posts/llmesh.md)) - [What free does that cheap doesn't](https://tteoh.com/posts/what-free-does/): Two months of free public transport in Victoria changed how the city felt to move around in. Half price didn't. ([markdown](https://tteoh.com/content/posts/what-free-does.md)) - [Replacing Hugo with a custom Go static site generator](https://tteoh.com/posts/replacing-hugo-with-go/): Why the old Hugo site got replaced with a custom Go static site generator, and what the new architecture looks like. ([markdown](https://tteoh.com/content/posts/replacing-hugo-with-go.md)) - [Setting a Cloudflare Page Rule to redirect users](https://tteoh.com/posts/cloudflare-page-rules/): Using Cloudflare page rules and wildcards to permanently redirect old URL patterns to a new site structure. ([markdown](https://tteoh.com/content/posts/cloudflare-page-rules.md)) - [Migrating to GitLab](https://tteoh.com/posts/migrating-to-gitlab/): Moving a personal site from GitHub Pages to GitLab Pages, switching from Jekyll to Hugo in the process. ([markdown](https://tteoh.com/content/posts/migrating-to-gitlab.md)) - [Sharing to social media using simple links](https://tteoh.com/posts/social-sharing-links/): Adding social sharing links for Facebook, Twitter and Google+ to a Jekyll site using plain HTML links instead of embedded scripts. ([markdown](https://tteoh.com/content/posts/social-sharing-links.md)) - [Running R and RStudio from an Android mobile phone or tablet](https://tteoh.com/posts/r-rstudio-on-android/): Compiling and running RStudio Server on a rooted Android device inside a Debian Linux container via Linux Deploy. ([markdown](https://tteoh.com/content/posts/r-rstudio-on-android.md)) - [Create a grid or fenestrated surface in OpenSCAD](https://tteoh.com/posts/openscad-fenestrated-surface/): Two methods for creating a parametric grid or fenestrated surface in OpenSCAD using the difference() operation. ([markdown](https://tteoh.com/content/posts/openscad-fenestrated-surface.md)) - [Cloudflare DNS not working with Tumblr](https://tteoh.com/posts/cloudflare-dns-tumblr/): Why proxied mode breaks a custom Tumblr domain on Cloudflare DNS, and the fix. ([markdown](https://tteoh.com/content/posts/cloudflare-dns-tumblr.md)) - [Namecheap's free .me student promotion with about.me premium](https://tteoh.com/posts/namecheap-free-me-domain/): Using Namecheap's free student .me domain promotion to set up a custom domain on about.me. ([markdown](https://tteoh.com/content/posts/namecheap-free-me-domain.md)) - [Creating a simple archive for posts in Jekyll](https://tteoh.com/posts/jekyll-post-archive/): A minimal Liquid snippet for generating a chronological post archive in Jekyll. ([markdown](https://tteoh.com/content/posts/jekyll-post-archive.md)) - [Eduroam and UniWireless configuration for Linux](https://tteoh.com/posts/eduroam-linux/): Network settings for eduroam and UniWireless on Linux at the University of Melbourne, plus VPN access via openconnect. ([markdown](https://tteoh.com/content/posts/eduroam-linux.md)) - [Configuring Zotero to use WebDAV for file syncing](https://tteoh.com/posts/zotero-webdav-sync/): Configuring Zotero to sync attachments via WebDAV using Box.com, bypassing the limited free storage quota. ([markdown](https://tteoh.com/content/posts/zotero-webdav-sync.md)) - [Switching from Endnote to Zotero](https://tteoh.com/posts/endnote-to-zotero/): Switching from Endnote to Zotero for citation management. Reasons for the change, standout features, and word processor integration. ([markdown](https://tteoh.com/content/posts/endnote-to-zotero.md)) - [Transitioning the website to GitHub Pages and Jekyll](https://tteoh.com/posts/migrating-to-jekyll/): Setting up a personal site on GitHub Pages with Jekyll. Covers DNS via Namecheap, the git workflow, and static site basics. ([markdown](https://tteoh.com/content/posts/migrating-to-jekyll.md)) ## Pages - [About](https://tteoh.com/about/) ([markdown](https://tteoh.com/content/about.md))