I published my first npm package! It’s called cat-knip . It detects unused exports in NestJS applications by parsing the dependency graph. To use it: 
 import { 
 expectNoUnusedExports , 
 getModuleRefWithSnapshot , 
 } from 'cat-knip/testing' ; 
 import { AppModule } from '../src/app.module' ; 
 
 it ( 'has no unused module exports' , async () => { 
 await…
The title is a riff on “At The Gates Of Sleep”, a banger Melodic Death Metal song by Insomnium. I was listening to it as the idea for this post came to my mind, and the pun was too good to give up. Give it a listen: 
 
			 
		 

 My position is simple: LLMs are excellent when they amplify your own work, tolerable when they automate short-lived…

 This blogpost is mostly a rant. 
 In a perfect opening note to this blog, as I was sitting down to write it, I was faced with this message in my terminal, right after typing the hugo new command: 
 ❯ hugo new posts/software-will-get-more-fragile-over-time.md
 WARN deprecated: module.mounts.excludeFiles was deprecated in Hugo v0.153.0 and will be removed in a future release.…
First blogpost about stuff I’ve learned since I (Shay Nehmad) started working at
 Opsin Security ! 
 
 Check out this post for more
details . 
 NestJS lifecycle issues 
 Recently at work I filed a new ticket on Linear related to NestJS lifecycle. It
was a followup on a ramble on a Slack thread: 
 
 When a certain shared module provider started (vagueness…
Thank You, Lunar Team 
 Before diving into all the AI insights: thanks Eyal Solomon (aka Luli , CEO)
and Roy Gabbay (aka Gabbay , CTO), and Rotem (VP R&D),
from lunar.dev for arranging these meetups and letting
me be a part of what y’all are building. Leading the charge on AI thought
leadership is hard with so much BS in the air. 
 I definitely learned a ton, met cool…
No time, let’s just go. This is zsh on MacOS. 
 Copy current dir name 
 
 Useful for when you copy a pyproject from another directory and want to rename the project to the current directory 
 
 basename $( pwd ) | pbcopy
 Pomodoro 🍅 
 added two new functions to my .zshrc file: work and rest , which give me a
built-in #pomodoro in the terminal. From Simple CLI…
GopherCon Israel 2024! What a fun day. 
 
 Started by seeing lots of familiar faces!
 Miki Tebeka ,
 Yarden Laifenfeld ,
 Liri Sokol ,
 Guy Brandwine ,
 Itamar Knafo ,
 Ran Bar-Zik and more. It’s a lot of fun
knowing people and saying hi to everyone, and meeting new people, too. 
 
 I arrived there and met some people from Orca Security (where I…
Context 
 This is a presentation I gave at Angular Ventures in 2024. It’s about the new-ish
and emerging concept of Developer Experience, and what I’ve learned about it
over the last year of doing it. 
 It’s a Reveal.js presentation, so you can view it in your browser on Desktop
only. Use the arrow keys and Esc to navigate, and press s to see the…
/now . 
 
 What’s a now page? 
 Well, the person behind it, Derek Sivers, explains it best on his blog
 . 
 How to add a now page for Hugo 
 Derek’s explanation doesn’t include how to do it with
Hugo! Since some people might be interested in that, and it’s not 100% the
same formula as adding a new post, here’s how: 
 hugo new…
I tend to go back to old, unpublished posts every now and restart my work on
them. They’re just resting, hiding behind the -D flag of hugo server . 
 But when I want to publish said post, I want the date to be the current date,
not the creation date. So I wrote a script to update the date of a post to the
current date. 
 Here’s the script in action:
So, I’m sick. Strep. Missed the Seder, as well. 
 
 Taking a few days off to recover, time to play around with the blog. 
 Why add shorts if you already have posts? 
 Shorts are more than a tweet, less than a post. 
 
 Stream of consciousness notes that don’t merit a more dedicated write-up. 
 
 Inspired by Brandur Leach’s fragments 
in his…
So, one early morning, and I’m just getting my coffee. For fun, let’s automate
connecting to bluetooth AirPods without touching the mouse. Quick Google
brings up blueutil , and a tiny bit of jq 
was all the glue needed: 
 brew install blueutil
 blueutil --connect $( blueutil --paired --format json-pretty | jq -r '.[] | select(.name | contains(\'Shay’s AirPods Pro\')) |…
How did we get here 
 Back when I left Reco , my parting gift to everyone at
the company was books 📚. At the time, these were books I haven’t read, but were
recommended by
 the interwebz .
The idea was to stay in touch with the team by gifting them good books and
loaning them from time to time. That’s how I wrote a book report about
“Turn the Ship…
To keep this spoiler-free, I’ll be redacting the flag. Whenever you see
 {{ .flag }} in the text, it means that I’ve redacted the flag. 
 
 Yes, this is go’s text/template syntax. It’s the best templating language on
the planet. 
 
 Getting started 
 The signup/login UX leaves something to be desired. You start off on the advent
page, then…
Shortest guide possible, let’s go ⚡️ 
 Setting up a status page 
 I recommend onlineornot.com . 
 
 Take your blog’s URL. For me, that’s
 https://mrnice.dev . 
 Create a new check on that URL. Pick
“Monitor a website”. 
 
 
 
 Create a status page , and choose
your subdomain. I went with mrnicedev ~> you’ll end up…