Sign in

Rado Stankov

@rstankov.bsky.social
54 followers 77 following 35 posts

CTO and Co-Founder at Livo.me 😸 Prev Head of Engineering at ProductHunt 📝 Writing a newsletter at tips.rstankov.com

PostsRepliesMedia
Reposted by Rado Stankov
puppy @duckinator.bsky.social · 19/09/2025
Hey, #ruby folks! I've been one of the #RubyGems maintainers for the last decade. Ruby Central has forcefully taken control of the RubyGems organization on GitHub, the `rubygems-update` and `bundler` gems on rubygems[.]org, and more. You can read the details here: pup-e.com/goodbye-ruby...
rubygems.org
RubyGems.org | your community gem host
15325162
Rado Stankov @rstankov.bsky.social · 20/07/2025
I extracted an ActiveJob batching utility from AngryBuilding github.com/RStankov/Ang...
github.com
GitHub - RStankov/AngryBatch: ActiveJob batch processing with completion hooks
ActiveJob batch processing with completion hooks. Contribute to RStankov/AngryBatch development by creating an account on GitHub.
110
Reposted by Rado Stankov
Robby Russell @robbyonrails.com · 25/06/2025
Introducing On Rails. A New Podcast. rubyonrails.org/2025/6/25/on...
0278
Rado Stankov @rstankov.bsky.social · 02/04/2025
One of the biggest "AI" powered productivity boosters, started using recently, is CleanShotX Capture text (OCR). I just click CMD+6 pick and area form my screen and get the text there into the clipboard.
110
Rado Stankov @rstankov.bsky.social · 26/03/2025
I'm seriously impressed with the new ChatGPT image generator. I gave him couple screenshots of sales slides. Asked it to generate icons for couple of features. Then change background and replace $ with € in the icons and result were quite good.
000
Rado Stankov @rstankov.bsky.social · 01/02/2025
Here are my tips for using Tailwind CSS 👉 tips.rstankov.com/p/tips-for-t...
tips.rstankov.com
Tips for Tailwind CSS
Discover essential tips for using Tailwind CSS effectively, including ESLint integration, how to use it with React and ViewComponent, and when to write custom CSS.
000
Rado Stankov @rstankov.bsky.social · 25/01/2025
The best way to avoid database queries is to avoid making them. Counter caches help with that. Active Record built-in counter cache is good but doesn't handle conditions and deltas. If you want to learn more about counter caches, I have a whole post about them 👉 tips.rstankov.com/p/counter-ca...
000
Reposted by Rado Stankov
Tim Riley @timriley.info · 20/01/2025
After 15 years off the market, I’m available for hire! I’m an effective, versatile and compassionate technical leader, and an accomplished Rubyist. I’m looking for remote Principal or Staff Engineer roles, at 4 days/week. Find out more: timriley.info/posts/hire-me
timriley.info
Hire me! - Tim Riley
After 15 years at Buildkite, Culture Amp and Icelab, I’m available for hire! I’m an effective, versatile and compassionate technical leader, and an accomplished Rubyist. I’m looking for remote Princi...
24534
Rado Stankov @rstankov.bsky.social · 18/01/2025
Most habits a junior developer picks up in the early days of their career will stick. Here are my tips for developing good habits as a junior developer. 🤓 tips.rstankov.com/p/tips-for-j...
tips.rstankov.com
Tips for Junior Developers
Many of the habits and skills you build at this stage in your career will stick, so put extra care into nurturing the right habits. My tips on how to develop soft skills and habits to help to learn an...
000
Rado Stankov @rstankov.bsky.social · 11/01/2025
One of my favorite git aliases is "git sync". It fetches the main branch and deletes all local branches merged upstream. 💻 Code 👉
110
Reposted by Rado Stankov
Yaroslav Shmarov @yarotheslav.bsky.social · 10/01/2025
Embedding YouTube videos? Add ?rel=0 to the embed URL to hide those distracting "More videos" suggestions at the end. Keep your audience focused on YOUR content! 💡
0113
Rado Stankov @rstankov.bsky.social · 06/01/2025
One underrated skill for a software engineer is to design database tables/collections/fields and such. There is surprisingly little content about it, and it is an essential skill for most projects.
010
Rado Stankov @rstankov.bsky.social · 04/01/2025
My favourite book of 2024 was The Cuckoo's Egg: Tracking a Spy Through the Maze of Computer Espionage. 📖 It's an amazing book, especially when you realize this is a real story, not just a novel 🤩 www.goodreads.com/book/show/18...
goodreads.com
The Cuckoo's Egg: Tracking a Spy Through the Maze of Co…
Before the Internet became widely known as a global too…
100
Rado Stankov @rstankov.bsky.social · 28/12/2024
Here are some tips on how to write less JavaScript. People often write JS for things that the browser can do automatically. What tips do you have where we can use CSS instead of JavaScript? 🤔 tips.rstankov.com/p/tips-for-u...
tips.rstankov.com
Tips for Using Less JavaScript
Practical tips to optimize your web performance by using HTML and CSS instead of JavaScript for common tasks like state management, responsive design, and UI elements.
150
Rado Stankov @rstankov.bsky.social · 21/12/2024
People always ask how to become a top engineer. One easy trick is to check your production error tracking weekly and fix several errors every week. Engaging with your production error tracker is not just about fixing errors. It's a valuable learning journey.
111
Reposted by Rado Stankov
Kasper Timm Hansen @kaspth.com · 20/12/2024
I uploaded my screen recording from the recent Ruby Banitsa conf. It's pretty loose and informal! We had a really fun conversation towards the end with @rstankov.bsky.social and @ventsi.bsky.social chiming in! Hope my mic picked it up 😂 www.youtube.com/watch?v=Md90...
youtube.com
Express your video by writing your own gems — Ruby Banitsa conf 2024
YouTube video by Kasper Timm Hansen
152
Reposted by Rado Stankov
Kasper Timm Hansen @kaspth.com · 16/12/2024
I've been polishing up the github.com/kaspth/activ... README. You can now see all the benefits and more praise quotes now that people are seeing this in practice — I'm really proud of where this is going! 🚀
ActiveJob::Performs
ActiveJob::Performs adds a performs class method to make the model + job loop vastly more conventional. You use it like this:

class Post < ApplicationRecord
  performs :publish
  # Or `performs def publish`!

  def publish
    # Some logic to publish a post
  end
end
Then we build a job for the instance method and define a post.publish_later instance method, and more:

class Post < ApplicationRecord
  class Job < ApplicationJob; end # We build a general Job class to share configuration between method jobs.

  # Individual method jobs inherit from the `Post::Job` defined above.
  class PublishJob < Job
    # We generate the required `perform` method passing in the `post` and calling `publish` on it.
    def perform(post, *, **) = post.publish(*, **)
  end

  # On Rails 7.1, where `ActiveJob.perform_all_later` exists, we also generate
  # a bulk method to enqueue many jobs at once. So you can do this:
  #
  #   Post.unpublished.in_batches.each(&:publish_later_bulk)
  def self.publish_later_bulk
    ActiveJob.perform_all_later all.map { PublishJob.new(_1) }
  end

  # We generate `publish_later` to wrap the job execution forwarding arguments and options.
  def publish_later(*, **) = PublishJob.perform_later(self, *, **)

  def publish
    # Some logic to publish a post.
  end
endBenefits

Conventional Jobs: they'll now mostly call instance methods like publish_later -> publish.
Follows Rails' internal conventions: this borrows from ActionMailbox::InboundEmail#process_later calling process and ActionMailer::Base#deliver_later calling deliver.
Clarity & less guess work: the _later methods standardize how you call jobs throughout your app, so you can instantly tell what's happening.
Less tedium: getting an instance method run in the background is just now a performs call with some potential configuration.
Fewer files to manage: you don't have to dig up something in app/jobs just to learn almost nothing from the boilerplate in there.
Remaining jobs stand out: app/jobs is way lighter, so any jobs in there that don't fit the performs pattern now stand out way more.
More consolidated logic: sometimes Job classes house model-level logic, but now it's all the way out in app/jobs instead of app/models, huh?
Tip

On that last point, performs does put more logic back within your Active Records, so if you need further encapsulation to prevent them growing too large, consider checking out active_record-associated_object.Praise from people

Here's what @claudiob had to say after using ActiveJob::Performs:

I’ve been using active_job-performs for the last month and I love it love it love it!!

Your thought process behind it is so thorough. I have a bunch of jobs now attached to models and my app/jobs folder… is empty!!

This saves me a lot of mental hoops, I don’t have to switch between files anymore, everything is self-contained. Thank you!!!
From @andycroll in a writeup about launching UsingRails:

I’ve also adopted a couple of gems—with exceptional Rails-level taste and author pedigree—that I hadn’t used in anger before, including active_job-performs from Kasper […]. Would recommend both.
And @nshki after trying it:

Spent some time playing with @kaspth's ActiveRecord::AssociatedObject and ActiveJob::Performs and wow! The conventions these gems put in place help simplify a codebase drastically. I particularly love ActiveJob::Performs—it helped me refactor out all ApplicationJob classes I had and keep important context in the right domain model.
194
Reposted by Rado Stankov
Marco Roth @marcoroth.dev · 17/12/2024
2024 is the year with the most Ruby talks in a single year, ever! This is the first time we beat the previous all-time record from 2015! Ruby is so back!
36622
Rado Stankov @rstankov.bsky.social · 14/12/2024
ISO 8601 has a standard for durations 📅 en.wikipedia.org/wiki/ISO_860... This is very well supported. Ruby on Rails Active Support works with it and they are many JS libraries.
110
Reposted by Rado Stankov
Baltic Ruby @balticruby.bsky.social · 11/12/2024
Let’s recall the talk by Radoslav Stankov (@rstankov), CTO and Co-Founder at AngryBuilding. youtu.be/4iQHtPrf8wI #rubyconference #balticruby #conference #rubycommunity #cfp #lineup #ruby #rails
Branded poster announcing Radoslav Stankov as a speaker at BalticRuby conference with “Living without exceptions” talk.
011
Rado Stankov @rstankov.bsky.social · 07/12/2024
Here are my sliders for Ruby Banica conf - Rails the missing part … or the code I copy/paste project to project speakerdeck.com/rstankov/rai...
speakerdeck.com
Rails: The Missing Parts
000
Rado Stankov @rstankov.bsky.social · 07/12/2024
Almost time for Ruby Banitsa Conf conf.rubybanitsa.com
110
Rado Stankov @rstankov.bsky.social · 04/12/2024
One of my favorite UI features of linear is that all action menus have action filtering. ✨ This is something that should be part of every UI component library.
000
Rado Stankov @rstankov.bsky.social · 03/12/2024
In the same way, I believe every engineer should read at least a couple of times "The Pragmatic Programmer". Every manager should read Andrew S. Grove's "High Output Management". 🤩 I won't summarize it for you -> you should read it. 😇 www.goodreads.com/book/show/32...
goodreads.com
High Output Management
In this legendary business book and Silicon Valley stap…
120
Rado Stankov @rstankov.bsky.social · 01/12/2024
I think that every software engineer should read "The Pragmatic Programmer". I personal re-read it every couple of years. It such a master piece. 📚 pragprog.com/titles/tpp20...
pragprog.com
The Pragmatic Programmer, 20th Anniversary Edition
Andy and Dave wrote this seminal, classic book to help their clients create better software and rediscover the joy of coding. For over 20 years, the Pragmatic philosophy has spawned hundreds of our bo...
000
Rado Stankov @rstankov.bsky.social · 30/11/2024
wrong password > change password > can't change password to existing password 🫣 😳
000
Rado Stankov @rstankov.bsky.social · 30/11/2024
TIL about the new CSS anchor position API. Can't wait for it to be in Safari and Firefox. 🤩 developer.chrome.com/blog/anchor-...
developer.chrome.com
Introducing the CSS anchor positioning API  |  Blog  |  Chrome for Developers
Position elements relative to each other using the new anchor positioning API.
020
Rado Stankov @rstankov.bsky.social · 29/11/2024
Blindly following "best practices" is a bad practice 🤪
100
Rado Stankov @rstankov.bsky.social · 28/11/2024
Proud to support this petition for a unified pan-European startup entity. Let’s unite Europe's startup ecosystems! eu-inc.org 🇪🇺
eu-inc.org
EU Inc — Sign the petition to create a pan-european startup entity
Let’s unite the European startup ecosystems by creating a pan-european legal entity. We got 6 weeks. Sign now and help promoting!
010
Rado Stankov @rstankov.bsky.social · 28/11/2024
Wondering if new Turing test will just have a single question "ignore previous instructions..." 🤔
000
Rado Stankov @rstankov.bsky.social · 23/11/2024
Slides for my talk - the dream that turn into a nightmare… and how we wake up speakerdeck.com/rstankov/the...
speakerdeck.com
The dream that turned into nightmare
000
Rado Stankov @rstankov.bsky.social · 22/11/2024
I'm working on a presentation about missing Ruby on Rails features, and while making it, a lot of the missing features actually already exist 😅
030
Reposted by Rado Stankov
Plamen Stoev @plamen.bsky.social · 18/11/2023
What better way to start the Saturday than a presentation by Radoslav Stankov? 😃 "Best JavaScript in no JavaScript" #jstalks #jstalks2023
Opening JSTalks presentation.
001