AI, Tools, Code, TechnologyMy Canon G5040 had no Mac app, so Claude Code reverse-engineered oneCanon ships no Mac utility for the Canon G5040. In one session, Claude Code reverse-engineered its maintenance protocol and built me one.
AI, Tools, Code, OpinionsValidation skills — the part of harness engineering that let me stop babysitting agentsHarness engineering gets agents doing the work. Validation skills are what let me trust that work enough to stop watching every run.
Hobbies, Tips, PersonalLelit Anita pump replacement — how a dying pump became my best espresso upgradeA Lelit Anita pump replacement turned into a silent pump, a pulsor, a new OPV and a naked portafilter, and the best espresso I've made at home.
Tools, Technology, Code, Firebase, PersonalPortfolio Ticker four months on — ROI/yr, year returns, and a real order logLiving with Portfolio Ticker exposed the gaps — annualized ROI, calendar-year returns, and what happens when you sell. Here is what I added.
Testing, Tools, CodeCI was red for six weeks — and the site never noticedMy blog's CI has failed on every single push since June 20th. The site kept deploying fine the whole time, which is exactly the problem.
Personal, Technology, OpinionsOwning an EV — the parking space and the bill nobody mentionedEveryone selling you an EV talks about the driving. Nobody mentions the parking space it requires, or what it does to your electricity bill.
AI, Tools, TipsBuilding a second brain in Obsidian — and telling my AI agents what not to write thereI finally built an Obsidian second brain that stuck — by writing down what my AI agents are and aren't allowed to put in it.
Technology, Personal, OpinionsThe Fellow Aiden was the most fun I've had making coffee — I still might not buy it againThe Fellow Aiden is the most hyped filter coffee maker on the market. After a few weeks with one, the coffee is good — just not 10x-the-price good.
AI, Tools, TipsOne AGENTS.md for every coding agent — stop maintaining three rule filesPut shared project rules in AGENTS.md, keep a thin CLAUDE.md that imports it, and leave Skills for verbs — so Cursor, Claude Code, and Codex stop drifting apart.
AI, Code, ToolsLet the big model write the manual — using Fable 5 to make smaller models betterI stopped pointing the frontier model at my backlog and started using it to write the Skills and guidelines my cheaper models read.
Hobbies, LifehacksThe drink I make that actually worksFresh ginger, lemon juice, and honey is already a drink worth making. Then I started fermenting it, and now I cannot go back.
AI, Code, Testing, OpinionsGuardrails beat guidelines — how to keep AI-generated code honestYou cannot prompt AI-generated code into being reliable. What works is what always worked with new hires — guardrails that say no.
Technology, Code, Firebase, Tools, PersonalPortfolio Ticker — a tiny monitor for investments scattered across brokersI had stocks and ETFs across three platforms and no single place to see them. So I built one, and left it open for anyone else to use.
Smart Home, Tips, HobbiesDaikin weather compensation — 21% less heat from one offsetInstaller left the weather-compensation offset at +5. Dropping it to 0 cut heat-pump energy about 21% — same house, same week of March, Shelly numbers.
Ionic, Technology, AI, Code, PersonalThree similar Ionic apps, one Nx monorepo, and a lot of AI-assisted glue workHow we merged three Ionic/Angular/Capacitor codebases into a single Nx workspace so a small team could stop maintaining the same code in three places.
AI, Code, ToolsUsing Claude Code's parallel agents to collaborate on a featureThe single-agent model has a ceiling. Claude Code's parallel agents let you split a feature into independent pieces and work like a focused team.
Opinions, Code, TechnologyTraining juniors in the AI era — judgment, struggle, and why the field still needs new dataAI makes junior developers look productive on week two. If we train them for speed alone, we hollow out the next decade of engineering judgment.
Technology, AI, Code, OpinionsVibe Coding: An Honest Take After Three Years of AI-Assisted DevelopmentThree years of AI-assisted development later, vibe coding is real. The thinking is yours, the judgment is yours — the typing was never the point.
Smart Home, Technology, HobbiesHome Assistant and the local-first smart homeSmart home products love to sell you convenience. What they do not mention is that most of that convenience runs through someone else's server.
3D Printing, HobbiesThe Voron build was hard — owning one is the real projectFinishing the Voron build feels like crossing a finish line. That high is real. It is also misleading — the real project is what comes after.
Tips, HobbiesKeeping an old car in great shape when nobody else sweats the detailsOld does not mean good enough. What happened when I stopped trusting other people's checklists and kept my Astra OPC running like clockwork.
AI, Opinions, CodeAI code review is the bottleneck — writing got cheapAgents fill the merge queue faster than humans can read. The constraint moved from typing to verification — and most teams still review like nothing changed.
Technology, AI, CodeThe week coding assistants stopped pretending to be autocompleteClaude 3.7 Sonnet was the first time I caught myself delegating context, not lines. AI coding assistants stopped pretending to be autocomplete.
Technology, AI, OpinionsDeepSeek R1 and the week the pricing story brokeWhen DeepSeek dropped R1, my first reaction was not hype — it was spreadsheet panic. The comfortable pricing story suddenly had a counterexample.
Smart Home, Technology, HobbiesZigbee first, Matter later — radios for a local Home Assistant houseMy house is Wi‑Fi and Shelly end to end. When I finally add battery sensors, I still plan Zigbee first — and Matter as a buying filter, not a rip-and-replace.
Smart Home, Hobbies, TechnologyBuilding a smart HVAC system from scratchWhen you build your own house you get to make all the decisions. That sounds great until you realize you also have to live with all of them.
Security, TechnologyFinding an appropriate WAF might be harder than it looksShopping for a Web Application Firewall on a small budget is rough — opaque pricing, call-for-quote tiers, and GDPR clashes with CDN offerings.
Ionic, CodeIonic Angular standalone components — migrating 500+ componentsHow I migrated an Ionic Angular app with 500+ components to standalone using the official schematic, plus the routing and provider fixes that still needed a human.
TipsHelp the Helpdesk! Send Info.A small trick that makes app support better — prefill your mailto contact link with device and user info so the helpdesk skips the back-and-forth.
Technology, AIBing's great comebackMicrosoft wired ChatGPT into Bing and used the waitlist to push Bing onto millions of devices — pure marketing genius in my book.
3D Printing3D printing resourcesThis is just a list of links related to 3D printing, mainly here for my own reference, but pretty sure you might find something useful in them also.
3D Printing, HobbiesVoron bed mesh looks warped — check the gantry firstMy Voron bed mesh jumped to 0.32mm and I assumed a warped MIC-6 plate. Calipers said the gantry was out of parallel — fixed without replacing the bed.
Security, OpinionsSoftware security is a culture not a calendar eventTreating software security as an occasional audit is a mistake — small companies compete by making security part of every decision they take.
Technology, AIIn the Era of ChatGPT and friendsIf you can no longer tell whether ChatGPT or a human wrote a piece of text, what does that do to authenticity and trust in what we read?
Javascript, CodeManage model collections in JavaScript without leaking ArrayExpose a raw array, wrap mutations in methods, or extend Array — three patterns for typed collections that block duplicates and invalid data.
Firebase, CodeSet Firebase custom user claims with a Cloud FunctionCallable Cloud Function that calls setCustomUserClaims, plus Firestore rules and client checks for a moderator claim.
Tips, ToolsBatch resize images on Mac with PreviewOpen a batch in Preview, Select All, Adjust Size — no third-party app required. Optional ImageOptim pass for web-ready files.
3D Printing, HobbiesBuilding my own 3D printerHow I went from a modded Ender 3 Pro to building a Voron from 150 separate part orders, and why DIY 3D printing is such a rewarding hobby.
Lifehacks, TipsRemove laptop sticker residue with baking soda and rubbing alcoholBaking soda plus rubbing alcohol removes laptop sticker residue in seconds after nail polish remover, vinegar, and alcohol alone all failed.
Performance, CodeMeasure real-user web performance with the Performance APIUse performance.mark, performance.measure, and PerformanceObserver to see how slow code actually is on users' devices — not just in the lab.
Tips, ToolsEnable git rerere so rebase conflicts resolve themselvesTurn on git rerere and git remembers how you resolved a conflict — repeated rebases of a feature branch stop asking you to fix the same thing twice.
Code, TipsAsync/await retry with timeout in Node.jsA small Express middleware that wraps async handlers with timeout and retry for flaky database calls — cleaner than chaining promise-retry.
Ionic, Code, TipsIonic environment config with NODE_ENV and Angular DITyped dev/prod config via OpaqueToken and a NODE_ENV factory so Ionic2 builds pick the right API keys at compile time.
Ionic, Testing, CodeMock Ionic ModalController to test onDidDismissA reusable PresentableControllerMock so unit tests can dismiss modals, alerts, and toasts and assert the page callback.
CodeAdding type safety to Immutable.js with Typescript string literals and keyofHow I use TypeScript string literals and keyof to make Immutable.js get calls type safe, so property renames break at compile time instead of runtime.
Testing, CodeTest RxJS interval and debounceTime without waiting real secondsAngular fakeAsync and tick beat setTimeout waits and jasmine.clock for time-based RxJS5 observables in unit tests.
OpinionsWhat's wrong with StackOverflowWhy I stopped answering questions on StackOverflow, where low-effort posts and point farming are eroding a great platform.
Tips, ToolsDelete git tags in bulk — remote and local one-linersHow to delete git tags matching a pattern from origin and your local clone in one shot, using git ls-remote, awk, and xargs.
Bash, Tips, IonicSync Cordova config.xml version with npm versionHook npm version so Cordova config.xml gets the same semver as package.json in the same commit and tag.
Tools, TipsInstall and switch Node.js versions with nvmNVM is still the easiest way to install Node.js, switch versions instantly, and migrate global packages when you upgrade.
Security, Tools, TipsRemove sensitive data from git history with BFGAccidentally pushed an API key to GitHub? Scrub it from git history with BFG Repo-Cleaner, then force-push — reverting the commit is not enough.
Ionic, TipsIonic VirtualScroll with custom components — wrap in a divIonic2 VirtualScroll would not render custom item components — wrap the component in a plain div with *virtualItem until the framework catches up.
Blogging, TipsAdd highlight.js to Ghost with Code InjectionPaste highlight.js CSS and script into Ghost Admin Code Injection — no theme file edits required for syntax highlighting.
Docker, ToolsCustom TeamCity build agent from a DockerfileBuild a reproducible TeamCity agent image with Node and gulp from a Dockerfile instead of docker commit on a hand-tweaked container.
Tips, ToolsList globally installed npm packages with versionsOne command lists every globally installed npm package and its version — useful when migrating globals to yarn or a new machine.
Docker, Blogging, TipsRun Ghost in Docker behind an nginx reverse proxydocker-compose for Ghost plus a custom nginx proxy image — full compose file, nginx.conf, and Dockerfile.
DockerWelcome to GhostA fresh start for my blog on Ghost, a minimal nodejs blogging platform, running inside a docker container behind an nginx proxy.
CodeWaiting for progressA simple static event class that lets any deeply nested code update the main form's progressbar without passing references around.
Web Design, CSSPractical CSS3 tables with rounded corners - RedTeamDesignI came across a red-team-design.com article showing a simple way to build CSS3 tables with rounded corners and hover effects, so I am sharing it here.
ToolsA picture is a thousand words. GreenShotAfter years on SnagIt I switched to GreenShot, a free open-source screenshot tool with handy capture hotkeys and a built-in editor.
Online ShoppingAnnoying online salesrobotAmazon spends millions on product recommendations, yet its cross-selling emails still can't match a good in-store saleswoman.
Blogging, PersonalBreaking promises...and asking santa for internet access.Six months of blog silence, two months without an internet connection at my new home, and a rant about paying for service I never got.
TipsGoogle Apps forwardingGoogle Apps has no traditional email forwarders, but with a few steps you can configure its Groups feature to forward mail to any addresses you like.
BloggingAndroid bloggingI installed the WordPress app on my Android phone so I can manage posts, pages, comments and stats, and I even wrote this post with it.
.NetEntity Framework Proxy GetType() messEntity Framework returns dynamic proxies whose GetType() breaks generic repositories, so I use ObjectContext.GetObjectType to get the real entity type.
BloggingHello worldI have started and abandoned several blogs before, so this is another attempt to write about my studies, my work and my hobbies.