One fine day a tiny laddie came and asked his dad: "Could you tell me, Daddy, what is good and what is bad?" V.V. Mayakovsky "What Is Good And What Is Bad" (1925), trans. Dorian Rottenberg From testing The word isn’t new. Test harness 1 is a thirty-year-old term: the rig that runs the code under test, feeds it inputs, collects outputs, and says “pass / fail”. Swap “code…
If intro sounds like an existential crisis to you, then yes – it should! In the times before AI, there was a reason. You could add this to your CV and it would be valuable, someone could admire your work, find your PR, and even debate the decisions you made during an interview. Some other resources, like the old Stack Overflow Jobs, allowed you to add your open-source contributions as widgets…
I like interview questions that come from real incidents instead of a puzzle book. You can’t google your way out of them, and the candidate’s reasoning maps directly onto the job. This one came from a payment service. It looks trivial. It is not. I’ve stripped the production code and rebuilt the same shape around a fake payment router. The bug is identical; the names are not. The…
AI strikes back, but not the way we wanted. Recently I had an interview with a recruiter — a very interesting and unexpected interview for me. It’s a funny story that can teach you something and make you vigilant. The interview started in a very cliché way: asking me about my experience, why I left my previous company, what I’m looking for, and what my goals are for a new workplace.
Brevity is the Sister of Talent A.P. Chekhov Why?! I don’t want to read invented machinery poems from an LLM about why it chose BigDecimal(0.5) instead of a literal 0.5 and writes 3 paragraphs defending a choice I didn’t ask about. I don’t want to read invented nonsense that I have no time for. If I don’t like something, I’ll ask to reimplement/refactor, or in rare…
The Problem You have a personal GitHub and a work GitLab (or multiple work accounts). Your global ~/.gitconfig has your personal email. You clone a work repo, make a commit, push — and now your personal email is in the company git history. haha-haha classic.. You could run git config user.email in every new repo you clone. But you’ll forget. You always forget. But this is a boring routine,…
These are commands I use often and see a lot of value from. I advise you at least to consider using them in case you haven’t tried them yet. Commands claude --worktree or claude -w In case you want multiple agents to run simultaneously, this option was designed for it. Each Claude agent gets its own version of the repo so they won’t interfere with each other. Where can you use it?…
Solution Open ~/.claude/settings.json with your favorite editor and add this to your json config. This is taken from Claude docs 1 { // ... "attribution": { "commit": "", "pr": "" } } Why This actually makes no sense and I agree with Rob Pike’s take on that 2 . It just adds non-readable boilerplate that does not add any value to the git commit. If it was committed by some guy I expect him to…
The Chameleon With Claws clawdbot/moltbot/ OpenClaw — this chameleon flew through our tight-knit tech world and generated a spectacular amount of hype. 184k GitHub stars in the last month alone. For context, Rails has 56k stars after nearly 20 years. So what awaits this clawed chameleon — a rapid rise followed by an equally rapid fall? What It Actually Is If you boil down what this tool does:…
How to set up MCP for browser Create .mcp.json in your project directory with the following content: { "mcpServers": { "chrome-devtools": { "command": "npx", "args": ["-y", "chrome-devtools-mcp@latest"] } } } Then run the following command in your terminal: claude mcp add chrome-devtools --scope user npx chrome-devtools-mcp@latest Then in Claude Code, run /mcp to verify the connection: # start…
Your Kibana/Cloudwatch/Grafana have different timestamps, you don’t see recent logs from your application. Why is that? You may ask. Some QA reports that your application is not working/was not deployed, asking you to review the deploy process. Or even worse: asking your devops colleagues to “something went wrong” with last deployment could you check? You login into your shell…
TL;DR Match interview complexity to job complexity. Interview for what the job actually requires System design interviews test interview prep, not engineering ability Copying FAANG processes for non-FAANG problems is cargo cult Knowledge you don’t use, you lose An Exaggerated Hiring Story HR contacts an engineer and asks them: Hi, %username% We are fast-growing, extra efficient, super…
The Sweetest Cookies I recently found that people fall into the illusion that all these dancing popups that block your sight from reading articles, news, and other sites, with some bullshit title stating “We value your privacy, please set your choice,” and that pressing reject will stop them from tracking you. But there’s always a tiny asterisk saying (we will store only…
Previous post on original release is available at copy_with_context.nvim plugin released . What’s New in v3 Automatic Repository URL Generation The headline feature: when you copy code, the plugin now automatically includes a direct permalink to the code in your repository. No manual URL construction, no hunting for the right commit SHA—it just works. -- When you copy this code, you get:…
This blog (“Site”) is operated by zhisme (“I”, “me”, “my”). Your privacy matters, and this policy explains what data is collected, how it’s used, and your rights as a visitor. 1. Information I Collect a. Analytics This site uses GoatCounter for privacy-friendly web analytics: No cookies - GoatCounter doesn’t use cookies or any browser…
There was a lively discussion on Hacker News here about Sorbet and static typing in Ruby that inspired this post. It’s fascinating how people try to make Ruby look like a statically typed language. But this isn’t the first attempt — and every time, it ends up fighting against what Ruby fundamentally is. Turning Ruby into Java isn’t progress. It’s a step backward. Let me explain why. How Ruby Deals…
As software engineers, we’re used to writing tests — but we don’t always know how to write them well. We aim to cover the most significant lines of code, often guided by intuition. This book is a practical guide to writing better tests, and I found it to be a valuable resource for anyone involved in software testing — whether you’re a developer or a tester. You can find the book, purchase…
I’m excited to announce the release of my new Neovim plugin, copy_with_context.nvim When sharing code snippets, it’s often useful to include the file path and line number for context. This plugin makes it easy to copy lines with this metadata. It is easier to understand the context of the code snippet when the file path and line number are included. Otherwise you have to do it…
I’m happy to share the lazy_names gem! This gem allows you to define a config file that maps long, namespaced constants to something simpler and more intuitive: 'Models::Users::CreditCard': 'UserCard' I spend a lot of time in the console, which is why I originally wrote this gem. Here’s a quick look at my most frequently run commands from my Zsh history: $: history | awk '{$1=""; print $0}'…