Kyle Husmann's Avatar

Kyle Husmann

@kylehusmann.bsky.social

Data Engineer, Open Science Advocate | kylehusmann.com

73 Followers  |  35 Following  |  15 Posts  |  Joined: 05.07.2025  |  1.4652

Latest posts by kylehusmann.bsky.social on Bluesky


A Perfectly Aligned AI Is A Copy of You | Kyle Husmann The better AI gets at predicting what you want, the less it looks like a tool and the more it looks like you. Maybe that's not something we want.

LLMs need constant prompting because they're trained on everyone's data, not yours. The gap between what you want and what you get can't be closed by more "big data"--it requires training on you. But maybe that gap is protecting us. www.kylehusmann.com/posts/2026/p...

03.02.2026 16:27 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Preview
AI-Coding a Mobile App and Firmware for My Stationary Bike | Kyle Husmann I built ESP32 firmware and an Android app for my stationary bike with Claude Code. My honest take on what worked, what didn't, and the agentic-coding skills I picked up along the way.

I was skeptical of AI coding agents until a friend introduced me to spec-driven development: co-write detailed specs and plans with AI first, then let AI execute while you verify at checkpoints.

So I tried it on my stationary bike project. Here's how it went:
www.kylehusmann.com/posts/2025/a...

16.12.2025 17:43 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Thanks! I actually automatically get heart rate for rides via my Fitbit-because my mobile app stores data in Google Health Connect, apps like Google Fit are able to combine all the sensor data and show heart rate for all my stationary bike activities. I plan to post more about the app part soon!

01.12.2025 20:05 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Preview
I Put an ESP32 in My Stationary Bike | Kyle Husmann How I turned a "dumb" stationary bike into a smart bike by wiring in an ESP32 and patching into the reed switch sensor.

I recently got a "dumb" stationary bike to avoid bloated apps. Then wanted analytics. Solution? Put an ESP32 on it! 🐦

Patched into the reed switch, 3D-printed an enclosure, wrote firmware in MicroPython. Now I have a smart bike I actually control!

www.kylehusmann.com/posts/2025/e...

01.12.2025 17:40 β€” πŸ‘ 4    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Preview
PSA: R Graphics Devices Can Break Snapshot Tests | Kyle Husmann The state of your graphics device can be a surprising source of inconsistent results across test runs inβ€―R.

Lessons learned: R's graphics device state (e.g. your RStudio Plots pane size) can cause the same code to produce different results. If you use ggplotly() in Shiny, always specify width= and height=!

www.kylehusmann.com/posts/2025/r...

15.11.2025 20:45 β€” πŸ‘ 3    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Preview
A More Customizable Golem: Nested Development Packages in R | Kyle Husmann Unify your development scripts and helpers with this little trick.

Building production Shiny apps or R APIs? Here’s a neat way I've found to keep your project-local dev scripts tidy and well-scoped:

Instead of sourcing scripts, create a nested dev package in your repo and autoload it during interactive sessions.

Read more here: www.kylehusmann.com/posts/2025/r...

07.10.2025 19:49 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

So I may rework cfactors so data are kept as codes, but labels are displayed when printing the tibble, and then could be accessed by as_factor()... (similar to what haven does, I think). what do you think?

11.08.2025 05:08 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

One thing I'm not sure I like about the cfactor approach -- I convert codes to textual factor levels because they are much nicer to work with. The downside is that if you have a codelist table with more metadata about the levels indexed by code, you have to convert back to codes before joining.

11.08.2025 04:58 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

It should retain unused levels! If it doesn't, let me know... It's designed to work just like a regular factor, just with codes added to the levels.

That said, be sure to use codes() to get the codes for the levels, not as.numeric() which uses the index of levels for compatibility with factor()

11.08.2025 04:54 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Coded Data

Awesome! If you're working with SPSS / SAS users, be sure to check out the novel ways it handles coded data as well: interlacer.kylehusmann.com/articles/cod...

11.08.2025 01:36 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Preview
Read Tabular Data With Interlaced Values And Missing Reasons interlacer provides functions for handling tabular data with interlaced missing reasons (e.g., N/A, REFUSED, -99). It introduces a special "interlaced" vector type that enables you to keep the values ...

Hey, nice to meet more folks passionate about tagged missingness... There's dozens of us!

I briefly mentioned this in the blog post, but I've come up with my own system for improved tagged missingness in R: interlacer.kylehusmann.com

I'd be really curious to get your feedback!

10.08.2025 19:41 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Preview
User home directory and settings wiped out Β· Issue #8658 Β· posit-dev/positron System details: Macbook pro Apple M4 Pro Positron and OS details: Positron Version: 2025.07.0 build 204 Code - OSS Version: 1.100.3 Commit: 03ae7a5 Date: 2025-06-30T16:29:03.492Z Electron: 34.5.1 C...

When vibe coding goes very wrong: github.com/posit-dev/po...

TLDR: Positron Assistant wrote code that literally ran `rm -rf /`...

Stay safe out there y'all!

25.07.2025 19:38 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Preview
Three Reasons Education And Social Scientists Prefer Proprietary Software And Data Formats | Kyle Husmann (And The Features Open Software And Data Formats Need In Order To Compete)

I'm so excited that @kylehusmann.bsky.social has joined BlueSky! Kyle is such a whiz when it comes to all things coding, metadata, data management, data engineering, etc.! Kyle wrote one of the articles I featured in Issue 1 of the RDM Weekly Newsletter! ICYMI!
www.kylehusmann.com/posts/2024/w...

05.07.2025 18:49 β€” πŸ‘ 10    πŸ” 2    πŸ’¬ 1    πŸ“Œ 0

Awesome, glad to hear from other folks who have run into this! Did you still have to $destroy() the inner observers, or were you changing the ids / namespaces each time to avoid duplicate close events? (If the latter, you still get a build-up of zombie observers, right?)

05.07.2025 22:37 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 2    πŸ“Œ 0
Preview
A Shiny Puzzle: Dynamic Observers | Kyle Husmann What starts as a simple Shiny UI turns into a deep dive into reactivity, lifecycle bugs, and surprising state quirks.

Ever tried attaching observers to dynamic UI in Shiny and ended up with weird interactivity bugs and memory leaks?

I wrote this post to spare others the pain I went through… and in the hope that someone out there will tell me there's better approach! www.kylehusmann.com/posts/2025/s...

05.07.2025 19:43 β€” πŸ‘ 5    πŸ” 4    πŸ’¬ 1    πŸ“Œ 0

Wow, thanks for the shout-out, Crystal! I'm over here as a total Bluesky newb just trying to figure out how to follow people β€” and you’ve gone and made me a whole intro post? You rock!

05.07.2025 19:01 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

@kylehusmann is following 20 prominent accounts