Sign in

Vitaly Slobodin

@vitallium.bsky.social
130 followers 157 following 175 posts

Staff Random Engineer at GitLab. Creating some magic! buymeacoffee.com/vitallium

PostsRepliesMedia
Vitaly Slobodin @vitallium.bsky.social · 25/09/2026
We removed them in v0.16.21. Sorry!
000
Vitaly Slobodin @vitallium.bsky.social · 25/09/2026
FYI, 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 · 17/09/2026
Oh, hello @euruko.org
040
Vitaly Slobodin @vitallium.bsky.social · 30/07/2026
How 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/2026
I’m not kidding: module Gitlab module HostedPlans class CreateUltimateWithDapTrialForPremiumCustomerService < CreateTrialService end end end
000
Vitaly Slobodin @vitallium.bsky.social · 29/07/2026
Unrelated: 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/2026
Yeah, 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/2026
Ah, 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/2026
Defining 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/2026
Good 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/2026
What’s your opinion on that topic? I’d love to chat about it!
100
Vitaly Slobodin @vitallium.bsky.social · 29/07/2026
I'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.org
The Curse of Service Objects
Service 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/2026
I 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/2026
I 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.org
The Curse of Service Objects
Service 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/2026
Well, 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/2026
I'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/2026
Ziggo 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/2026
I 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/2026
After 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/2026
After 6 months of waiting, my @trmnl.com has finally arrived!
020
Vitaly Slobodin @vitallium.bsky.social · 11/06/2026
I’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/2026
Fantastic! Hope we can enable it back soon! Thank you!
010
Vitaly Slobodin @vitallium.bsky.social · 02/06/2026
As 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/2026
Yeah, 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/2026
Unfortunately, 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 Slobodin
Zed @zed.dev · 20/05/2026
Terminal 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/2026
Meh, 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.com
Darwin spawns commands by resolving executables from Zed's process PATH instead of the worktree PATH · Issue #57170 · zed-industries/zed
Reproduction 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/2026
Codex 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/2026
Yes! My take: fat models will win over service objects in the AI era.
000
Vitaly Slobodin @vitallium.bsky.social · 09/05/2026
Thanks! I'm also hoping it lands in Extensions API v0.8.0.
010
Vitaly Slobodin @vitallium.bsky.social · 08/05/2026
Managed to get Ruby LSP code lenses working in @zed.dev ! :)
181
Vitaly Slobodin @vitallium.bsky.social · 08/05/2026
So 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/2026
Fun 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/2026
Career 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/2026
Extensions 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/2026
Unfortunately, Ruby LSP code lenses won’t work due to technical limitations.
130
Vitaly Slobodin @vitallium.bsky.social · 05/05/2026
Long 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/2026
I’m tempted to just craft my own Ruby gem for the Debug Adapter Protocol…
040
Reposted by Vitaly Slobodin
Mike Perham :sidekiq: @getajobmike.ruby.social.ap.brid.gy · 01/04/2026
Mysterious warning to Ruby app maintainers: “bundle update rack” asap.
3109
Vitaly Slobodin @vitallium.bsky.social · 18/03/2026
Engineers: 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/2026
Hi! There are some options. I will have a look at what we can do here.
030
Vitaly Slobodin @vitallium.bsky.social · 20/02/2026
Whoops, 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/zed
Reproduction 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/2026
Looks 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/2026
DAP support for the `debug` gem could use a couple of bug fixes and improvements.
000
Vitaly Slobodin @vitallium.bsky.social · 25/01/2026
I 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/2026
Ruby 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.com
Release v0.16.4 · zed-extensions/ruby
What'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/2026
Hard to decide. I'm constantly switching between: - Berkeley Mono - MonoLisa - Maple Mono - PragmataPro
000
Vitaly Slobodin @vitallium.bsky.social · 27/12/2025
Hanami is hard but really enjoyable!
030
Vitaly Slobodin @vitallium.bsky.social · 04/12/2025
Power 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/2025
Link to the extension: zed.dev/extensions/t...
zed.dev
Tree Sitter query Extension
A native Zed extension for Tree Sitter query.
000