(answer: not expensive)
I recently implemented fancier around callbacks for ruby-clock. To do this sort of thing, you need to generate a Proc or lambda on the fly, so that each subsequent callback has something to
.call. Procs and lambdas can't accept a block, so that's the only way to do it. Which is also a bit educational because you sort of end up . . .
I recently benchmarked a few ways to accumulate a set in ruby. Here are my findings and methodology - apologies for messiness, I'm just sharing what I came up.
This is with ruby 3.1. I also ran under 2.7, I believe the set case was actually faster, but I may be misremembering.
user system total . . .
In Rails ActiveRecord, I just discovered that if you do this:
# bad code! after_update_commit :thing after_create_commit :thing
Using both after_create_commit and after_update_commit . . .
Action Cable (aka ActionCable or action_cable) is a mature, useful stack of tech that allows easily integrating two-way communication in a Rails app via websockets.
There seems to be a complete lack of discussion on the web about instrumenting or scaling it. Here are my findings and experiments to that end so far.
The one . . .
I'm a longtime macports fan and occasional evangelist. It Just Works, installs in /opt/local with sudo, and very frequently installs binaries instead of needing to build. Homebrew is widely used and supported and pretty great, but I always feel just a little better about using macports instead and haven't had a reason to switch.. . .
The ActiveRecord query cache can defeat effective garbage collection when working on big batches of data. Disabling it entirely in background jobs can be a solid memory consumption win. Here's how to do it:
class SidekiqArCache def call(worker, msg, queue) ActiveRecord:: . . .
If you have various projects which used either "main" or "master" as the main branch, and also have a remote which uses the other naming (e.g. heroku or another PaaS), you might find yourself accidentally switching to the wrong branch name and working on it. Here's how to inhibit that.
Put this in . . .