Hans Schnedlitz
@hansschnedlitz
Ruby Developer from Vienna and Vienna.rb Ruby Meetup organizer 🇦🇹 Testing, maintainability, and developer experience. Love climbing and hiking 🏔️
Who says you need to use Atuin? Turns out all you need for queryable, directory & host aware shell history is zsh, sqlite and coreutils 👌 Simple, small, and super malleable. Just how I like it. github.com/hschne/zhstdb
Finally, terminal icons for all the editors. Including my beloved Pi! Let the ricing continue ✨
RubyEvents Guides is now live. Over the last few months, I talked to Rubyists who want to help the community keep going. Some want to restart a local meetup. Some are organizing their first small conference. Some already run events and want to make the next one better.
I live in the terminal and I like things pretty. But there's no icon font for AI logos - Nerd Fonts has git and your distro, nothing for OpenAI or Anthropic. So I made one. 300+ AI provider logos as a glyph font for your terminal, statusbar and prompt. Link below 👇️
Claude has really low standards today. Thanks for the compliment, I guess.
My flight to Vienna is delayed because there's some Bangaranga at the airport! 🪩
Balkan Ruby is about to start. I love the venue. This place rocks 💎
@robbyonrails.com Loved the survey, found some typos. In case you want to fix those. Just found em a bit irritating in an otherwise great survey 👍️
Pi is basically Vim for agentic coding. Minimal core, no bells and whistles, but an extension system that lets you shape it exactly the way you want 👌 www.hansschnedlitz.com/writing/2026...
Random find in Pi. Armin says Hi! 🤔 Wonder if there's more easter eggs. I bet there are.
You see this tech stack in a job description. WDYD? #rubyonrails
Huh, would you look at that. I learned a lot writing those two Solid Queue posts, and I'm stoked that people enjoyed them 🤗 #ruby
TIL StimulusJS supports keyboard event filters out of the box. I was so close to writing a bunch of custom JS before thinking to myself "nah, there's got to be a better way" . Of course, there was. #ruby
Already upgraded to Rails 8.1? If you're getting some pesky deprecation warnings, here's a one-liner to find the gems responsible 🕵️ #rubyonrails #ruby
Rails 8.1 will have dark mode for error pages. No more getting blinded when your app throws an error 😅 #rubyonrails #ruby
TIL about Concurrent::Map compute_if_present. This method provides a simple interface to concurrently re-calculate a map value if it's key is present. Found this in the Solid Cable Source 🕵️ #ruby
TIL Minitest has a pride mode, so you can show your *fabulous* testing pride 🌈 Apparently, this has been a thing for forever; I just came across this now, digging through command line options. #rubyonrails #ruby
I waste way too much time binging random crap on Youtube. If I need downtime, I might just as well watch something useful, right? I think I found a hack to help with that. Now I just redirect to RubyEvents and watch some talk 😅 #ruby
Strong Service is Strong. We need more gems like this that push the boundary of what's possible. But I have to say, this much touted DSL looks suspiciously like plain old Ruby 🕵️ #ruby
I've been working on a variety of map-related projects recently and needed some sample images for locations. Wrote this little script to pull a bunch of street view images. Dead simple. Yeah, the resolution isn't great, but it's good enough for seeds 👌 #ruby
I've been obsessed with Browser compatibility lately. Maybe one of my apps broke on an older version of Safari. Whoops. Anyways. I got into Browserlists and Baseline, and wanted a way to integrate this tooling with Rails. Presenting Browserslist Ruby 👇 #rubyonrails
Lightgallery looks terrible out of the box. Luckily, pretty easy to fix with some simple CSS. Here's the before and after. Pretty happy with the result 😊
Devise has this nice 'authorized` helper for conditionally defining routes based on whether the user is logged in or not. Among other things, this allows you to define multiple root routes. If you're not using Devise, here's how to create that helper yourself. #rubyonrails
Tailwind doesn't always work well with Rails form helpers. For example, button_to creates a form, which you mostly don't care about. The `contents` class turns the form into a phantom container, so it's children are treated like direct children of the parent. #rubyonrails
I like that we can block specific browsers with Rails 8.0. However, I'm not the only one who feels that the default is somewhat arbitrary. Sure, I can always set required versions myself. That's still cumbersome. Working on a little something to address this 🔧 #rubyonrails
Some upgrades to Puny Monitor just dropped. - Improved query performance significantly 🚀 - Simplified dependencies 📦 - Better filters & aggregation 📈 I'm using it for pretty much all my side projects now, it works like a charm. Check it out 👇 #ruby #rubonrails
TIL about ignoring references in git blame 👀 When making bulk formatting changes (e.g. RuboCop), you generally don't want those changes to show up in git blame/change sets in PR reviews. A `.git-blame-ignore-revs` tells git to ignore changes from specific revisions. #ruby
The Speculation Rules API seems like a neat idea. Still very much experimental, but could replace other prefetching solutions (looking at you Turbo) once widely available 🤔
We need more fun in software. Remember when Flipper used to show you 'Blank Space' if you had no features configured? That was before the fun policy arrived 👮 What are your favorite examples of little quirks and easter eggs in software? #ruby