Vitaly Slobodin @vitallium.bsky.social · 25/09/2026FYI, in v0.16.20 of the Ruby extension for @zed.dev, we removed the Ruby snippets since they weren’t being actively used. The snippets are still available in the `ruby-snippets` extension. 120
Vitaly Slobodin @vitallium.bsky.social · 30/07/2026How do you keep things consistent across large teams of 15+ engineers? Or do you not? Like, as long as an operation does what it’s supposed to do, you consider it fine. 110
Vitaly Slobodin @vitallium.bsky.social · 29/07/2026I’m not kidding: module Gitlab module HostedPlans class CreateUltimateWithDapTrialForPremiumCustomerService < CreateTrialService end end end 000
Vitaly Slobodin @vitallium.bsky.social · 29/07/2026Unrelated: I remember an incident at GitLab involving the `CreateUser` service, which contained logic for similar tasks (post-create user flow) from more than 20 teams: a waterfall of operations, deadlocks, cascading deletes... 010
Vitaly Slobodin @vitallium.bsky.social · 29/07/2026Yeah, I agree here. I think I was unclear initially when I said to use AR callbacks over services no matter what. That’s not what I meant. Rather, don’t be afraid to use AR callbacks instead of services when they make sense. 000
Vitaly Slobodin @vitallium.bsky.social · 29/07/2026Ah, that makes sense then :-) I probably wouldn’t put them in `app/services` to avoid confusion. My rant is about the `DoSomething.call` approach. I’d love to find a good way to organize that, but no luck so far. Like, we enforce bounded contexts via RuboCop, but that doesn’t help. 100
Vitaly Slobodin @vitallium.bsky.social · 29/07/2026Defining an operation as a single-use-case function is a good approach: scoped, small, and interchangeable (this is one of the main advantages). keeping it scoped and small is hard across large teams. Each team owns its domain+services, and sooner or later, those services do more than they should. 100
Vitaly Slobodin @vitallium.bsky.social · 29/07/2026Good point. I’d say that even a large AR model can be organized using concerns, POROs, and so on. The `app/services` can become a mess more quickly than a model. Thousands of services are extremely difficult to support and maintain. But services do have valid use cases tho. 100
Vitaly Slobodin @vitallium.bsky.social · 29/07/2026What’s your opinion on that topic? I’d love to chat about it! 100
Vitaly Slobodin @vitallium.bsky.social · 29/07/2026I'd start from this talk www.rubyevents.org/talks/the-cu... Tho, I am not a fan of Code Topology Notation proposed there. I’d add that in small or medium-sized teams, you can keep services under control, and the situation will be more or less fine. In large teams services become a minefield.rubyevents.orgThe Curse of Service ObjectsService Objects were a mistake. It has nothing to do with OOP. It has little to do with ideas of Fowler, Evans and Martin. I analyzed a plenty of open repositories, videos and articles, and in this ta... 100
Vitaly Slobodin @vitallium.bsky.social · 29/07/2026I call it a trash bin. Anything you don’t know how to express or organize within your domain, you save as a service. 120
Vitaly Slobodin @vitallium.bsky.social · 29/07/2026I think there are plenty of such articles and talks :) For example, www.rubyevents.org/talks/the-cu... GitLab's service-centered approach is a great example of how services can quickly lead to a mess.rubyevents.orgThe Curse of Service ObjectsService Objects were a mistake. It has nothing to do with OOP. It has little to do with ideas of Fowler, Evans and Martin. I analyzed a plenty of open repositories, videos and articles, and in this ta... 110
Vitaly Slobodin @vitallium.bsky.social · 29/07/2026Well, yeah. I should probably clarify that I'm complaining about the paradigm in which the mantra is to keep models thin and put everything else into services. 100
Vitaly Slobodin @vitallium.bsky.social · 29/07/2026I'm still amazed that Ruby on Rails engineers keep suggesting the ServiceObject pattern to avoid AR callback hell. I will die on this hill: services are worse and bring even more problems than callbacks. 610
Vitaly Slobodin @vitallium.bsky.social · 11/07/2026Ziggo offers 2Gbps access now. I guess it's time to renovate my UniFi network, and the first thing I need to do is get a replacement for my USG 3P. 000
Vitaly Slobodin @vitallium.bsky.social · 01/07/2026I use them for AI-assisted tasks: triaging, thinking, debugging, etc. Mistral's models aren't particularly good or bad, just OK for cost and efficiency. Most of the time, their results are fine, no further tweaks required. They're decent models you can use without hitting rate limits too often. 020
Vitaly Slobodin @vitallium.bsky.social · 01/07/2026After using many models, I've noticed that I'm using Mistral models more and more. I'm not exactly sure why, but I can really feel that they (`mistral-*-3.5`) work exactly as I need them to. too bad that their CLI does not support plugins... 220
Vitaly Slobodin @vitallium.bsky.social · 29/06/2026After 6 months of waiting, my @trmnl.com has finally arrived! 020
Vitaly Slobodin @vitallium.bsky.social · 11/06/2026I’ve been busy lately with Act 2 in @gitlab.com, so there have been almost zero fixes or improvements to the Ruby ext for Zed. I’ll be back soon. Sorry. 020
Vitaly Slobodin @vitallium.bsky.social · 11/06/2026Fantastic! Hope we can enable it back soon! Thank you! 010
Vitaly Slobodin @vitallium.bsky.social · 02/06/2026As a Community Champion (thanks @zed.dev), I can say that the Zed team is one of the best I've ever worked with! ❤️ 030
Vitaly Slobodin @vitallium.bsky.social · 25/05/2026Yeah, I've been trying to find a workaround that I can apply to the Ruby extension, but all the options I found are quite limited or just do not work. So, I think I'll restore the previous behavior: use `bundle exec` for all Ruby language servers, but leave it configurable via the `useBundler` opt. 020
Vitaly Slobodin @vitallium.bsky.social · 25/05/2026Unfortunately, this issue broke the Ruby extension, which relies on the correct Ruby version. Probably the best approach here is to remove the automatic installation of Ruby servers and rely entirely on the project gemset. The downside is that Ruby LSP is usually not part of it. 110
Reposted by Vitaly SlobodinZed @zed.dev · 20/05/2026Terminal Threads are live in Zed v1.3.5! You can now run claude, amp, pi, or any terminal-based workflow as a managed thread in the Threads Sidebar, right next to your other agent threads. 312113
Vitaly Slobodin @vitallium.bsky.social · 19/05/2026Meh, found a nasty macOS PATH issue in @zed.dev Zed can correctly capture a project env, but extension cmds like `ruby` may still launch the wrong binary. Why: macOS posix_spawnp("ruby") resolves ruby using Zed’s own process PATH, not the PATH passed to the child. github.com/zed-industri...github.comDarwin spawns commands by resolving executables from Zed's process PATH instead of the worktree PATH · Issue #57170 · zed-industries/zedReproduction steps Install mise Configure Zed to use ruby-lsp. Use a simple Ruby project with the version that differs from your global Ruby version. For example, set your global Ruby version to 4.... 010
Vitaly Slobodin @vitallium.bsky.social · 10/05/2026Codex should be renamed to Ex-Code. Because you only come back to it after Claude Code says “monthly usage limit reached” 010
Vitaly Slobodin @vitallium.bsky.social · 09/05/2026Yes! My take: fat models will win over service objects in the AI era. 000
Vitaly Slobodin @vitallium.bsky.social · 09/05/2026Thanks! I'm also hoping it lands in Extensions API v0.8.0. 010
Vitaly Slobodin @vitallium.bsky.social · 08/05/2026Managed to get Ruby LSP code lenses working in @zed.dev ! :) 181
Vitaly Slobodin @vitallium.bsky.social · 08/05/2026So if you work on a Ruby/Ruby on Rails project, be aware that an LLM might output legacy code based on those old patterns. 100
Vitaly Slobodin @vitallium.bsky.social · 08/05/2026Fun fact I discovered recently: most public LLMs (especially from OpenAI and Anthropic) were likely trained on our GitLab repo, so they sometimes generate code that follows patterns we stopped using a long time ago. 😄 230
Vitaly Slobodin @vitallium.bsky.social · 07/05/2026Career update: I'm now a Senior Staff (Random) Engineer at @gitlab.com. Still solving random problems - just more strategically. 😀 290
Vitaly Slobodin @vitallium.bsky.social · 06/05/2026Extensions API does not have a way to execute client commands, only server commands. Ruby LSP lenses like “Run in terminal” are client commands. 020
Vitaly Slobodin @vitallium.bsky.social · 05/05/2026Unfortunately, Ruby LSP code lenses won’t work due to technical limitations. 130
Vitaly Slobodin @vitallium.bsky.social · 05/05/2026Long story short, I loved the whole "if GitHub was made by…" meme so much that I made ifgithubwasmadeby.xyz - a place where you can browse almost all of them. Updates daily. 152
Vitaly Slobodin @vitallium.bsky.social · 13/04/2026I’m tempted to just craft my own Ruby gem for the Debug Adapter Protocol… 040
Reposted by Vitaly SlobodinMike Perham :sidekiq: @getajobmike.ruby.social.ap.brid.gy · 01/04/2026Mysterious warning to Ruby app maintainers: “bundle update rack” asap. 3109
Vitaly Slobodin @vitallium.bsky.social · 18/03/2026Engineers: Let's tweak MAX_THREADS and WEB_CONCURRENCY to improve our Sidekiq queue times! Narrator (me): they were about to awaken something ancient and hungry. 010
Vitaly Slobodin @vitallium.bsky.social · 07/03/2026Hi! There are some options. I will have a look at what we can do here. 030
Vitaly Slobodin @vitallium.bsky.social · 20/02/2026Whoops, native tabs do not work in @zed.dev :( github.com/zed-industri...github.com`Merge All Windows` only shows one tab instead of merging both windows · Issue #49724 · zed-industries/zedReproduction steps Open Zed Open a second window (File > New Window) With both windows visible, go to Window > Merge All Windows Observe the tab bar on the active window CleanShot.2026-02-20.at.16.... 000
Vitaly Slobodin @vitallium.bsky.social · 18/02/2026Looks nice! I was working in the same field some time ago, and I created the gem why command: bsky.app/profile/vita... 010
Vitaly Slobodin @vitallium.bsky.social · 11/02/2026DAP support for the `debug` gem could use a couple of bug fixes and improvements. 000
Vitaly Slobodin @vitallium.bsky.social · 25/01/2026I kept getting bitten by regressions in tree-sitter queries for the Ruby extension in @zed.dev. So I added snapshot-based tests (hello Jest!) that capture query matches and make changes obvious in dev&review. hehe. github.com/zed-extensio... 020
Vitaly Slobodin @vitallium.bsky.social · 12/01/2026Ruby extension for @zed.dev updated to 0.16.4: better Ruby test name extraction and per-Ruby-version gem installs to avoid compatibility issues. NOTE: clean up your Ruby ext work directory so old gems don't cause trouble. See the release note for instructions: github.com/zed-extensio... Thanks!github.comRelease v0.16.4 · zed-extensions/rubyWhat's Changed fix(ruby): Use string_content capture for Ruby test name extraction by @vitallium in #229 feat(gemset): Install gems per Ruby version to avoid compat issues by @vitallium in #231... 041
Vitaly Slobodin @vitallium.bsky.social · 06/01/2026Hard to decide. I'm constantly switching between: - Berkeley Mono - MonoLisa - Maple Mono - PragmataPro 000
Vitaly Slobodin @vitallium.bsky.social · 04/12/2025Power of Tree-sitter in @zed.dev! Tagged template literals in your JS/TS with just 5 lines of code. 030
Vitaly Slobodin @vitallium.bsky.social · 03/12/2025Link to the extension: zed.dev/extensions/t...zed.devTree Sitter query ExtensionA native Zed extension for Tree Sitter query. 000