Max Chernyak
max.engineer
Max Chernyak
@max.engineer
https://max.engineer

Specialize in architecture and DX. Write primarily Ruby. VPE at Helios (FinTech). You know me as @hakunin on Twitter/X.
MacOS >=13 hides accurate AI-based OCR called LiveText. It's very good, it's what lets you select text in images. I was working on a Ruby-Swift bridge for it, to make scanned PDFs searchable, but a few hours ago this project beat me to it. Much recommend! github.com/mkyt/OCRmyPD...
GitHub - mkyt/OCRmyPDF-AppleOCR: Plugin to run OCRmyPDF with Apple Vision Framework OCR engine
Plugin to run OCRmyPDF with Apple Vision Framework OCR engine - mkyt/OCRmyPDF-AppleOCR
github.com
November 3, 2025 at 5:16 PM
Most software has the same relatively simple data transforms, under different names and reasons. Could it be that if we (developers) focused less on business jargon in types and hierarchy, and more on the story of data transformation, we would get code that's easier to follow?
October 31, 2025 at 6:42 PM
Which AI does stock market best. A fun thing to observe. hkuds.github.io/AI-Trader/ (GitHub here: github.com/HKUDS/AI-Tra...)
AI-Trader - AI Trading Agent Benchmark
hkuds.github.io
October 30, 2025 at 3:52 PM
When you ask LLM for sources, and it gives them to you, you better damn well read them. This just happened yesterday in a codex session: news.ycombinator.com/item?id=4575...
Here's my frustrating conversation with Codex just yesterday: Codex: wrap_handle... | Hacker News
news.ycombinator.com
October 30, 2025 at 3:06 AM
A controversial Monday thought for you: ~15 years of experience is when a programmer is the most dangerous for the ecosystem. That's when you beautifully wrap up your subpar experiments with a pretty bow on top for others to use, and they actually gain traction.
August 25, 2025 at 4:29 PM
A thing that bothers me about total AI takeover narrative is the perpetual need to have its back "just in case", and what that actually implies. max.engineer/failover-to-hi
Failover to Human Intelligence - Max Chernyak
Should humans be ready to have AI's back?
max.engineer
August 11, 2025 at 5:51 PM
After considering elaborate ways to make TinyMCP support different return formats, finally arrived at this "genius" 3 line solution, which brings you version 0.2.0. Keep it simple folks. github.com/maxim/tiny_m...
Add support for multiple results and formats · maxim/tiny_mcp@5a1cb8c
github.com
June 7, 2025 at 5:47 PM
UX issue on Github: if you search, there is no way back to where you were before. You must either back-back-back in the browser, or enter the original url again. It's interesting, because it feels super annoying in practice, but actually not obvious from webdev standpoint.
May 29, 2025 at 1:59 PM
Even 1-shot-correct code by Claude 4 is subtly bad. Gotta read it with fine tooth comb when project matters. What's worse, "instructing LLM" brain mode feels mutually exclusive with "writing code" brain mode. It hurts to switch (and I'm an easy context switcher).
May 29, 2025 at 12:32 AM
Published my local tiny_mcp server that I use to create quick simple MCP tools in Ruby. github.com/maxim/tiny_mcp
GitHub - maxim/tiny_mcp: Make local MCP tools in Ruby and easily serve them
Make local MCP tools in Ruby and easily serve them - maxim/tiny_mcp
github.com
May 26, 2025 at 4:14 AM
Impressive how easy it is to write an assistant that reads and answers questions about a >1200 page PDF with RubyLLM. Less than 20 mins of work. max.engineer/giant-pdf-llm
Getting Answers from a Big PDF with RubyLLM - Max Chernyak
How to use LLM to get answers from a big PDF
max.engineer
May 17, 2025 at 8:47 PM
Is it just me, or reading text in a different style/format than it's written causes the "fresh eyes" effect? That's why I like to review code and blog posts in a different viewer than my editor. It's as if I'm reading it a day later, without actually waiting a day.
February 27, 2025 at 9:55 PM
Every "services" gem: do you dislike this code? [Shows a plain ruby procedure in a controller action]. Here's how you could write it instead: [Shows a lambda-heavy mix of actors, executors, policies, contexts, and almost the same procedure in the controller action].
November 4, 2024 at 7:35 PM
Remembering a childhood story in the shower: So it's D'Artagnan and the Three Musketeers: Athos, Protoss, and Zerg.
July 13, 2023 at 12:14 AM
ActiveRecord supports optimistic locking, but it requires the `lock_version` column. It'd be nice to save a record with a WHERE constraint and callbacks, but w/o needing that column. Here's a proposal: https://discuss.rubyonrails.org/t/proposal-optimistic-locking-without-lock-version/83221
[Proposal] Optimistic locking without `lock_version`
There are some use cases where optimistic locking is useful, but doesn’t need the full complexity of a lock_version increment. For example, say a record in the database needs to be “claimed” by ...
discuss.rubyonrails.org
July 11, 2023 at 8:09 PM
This little trick has been keeping rubygem monkeypatches from breaking across a number of my jobs: https://notes.max.engineer/gempatch-monkeypatch-rubygems-responsibly
GemPatch: monkeypatch rubygems responsibly - Max's Notes
If you must extend or change a gem’s functionality, it’s a good idea to make sure that your change won’t break with the next update. There isn’t
notes.max.engineer
July 11, 2023 at 6:48 PM
For some reason I couldn't find any quick/easy examples to create a table and a model inside a Rails test. So I threw one up onto my notes site in case you need it. https://notes.max.engineer/helper-for-creating-table-and-model-in-rails-tests
July 10, 2023 at 1:09 AM