Gabriele Petronella's Avatar

Gabriele Petronella

@gabro27

Co-founder and CTO @ buildo.com

365
Followers
99
Following
158
Posts
26.08.2023
Joined
Posts Following

Latest posts by Gabriele Petronella @gabro27

Main reason for shipping the MCP server (with docs included) is that nobody RTFM (including agents). >90% could get SO MUCH MORE out of Knip, and the two main reasons for that are 1) "ignore" config is misunderstood & abused (Knip is not a regular file linter!) and 2) ignorance of production mode.

11.01.2026 06:55 πŸ‘ 4 πŸ” 2 πŸ’¬ 1 πŸ“Œ 0

Ah, this resonates a lot! Opus was indeed abusing the ignore array before I told it explicitly to pay attention to it. And I think I actually don’t have production mode turned on πŸ˜… Thanks for the answer, I’ll give this a spin!

11.01.2026 07:04 πŸ‘ 2 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Hi, genuine question as I’m starting to use Claude code in a project with knip. Did you see any significant improvement in using the MCP sever wrt letting the agent use the CLI? Feels like a recurring theme in this space (MCP vs CLI) and I wonder if you have first hand experience with this

09.01.2026 20:12 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Watching the video I think this is as typesafe as useContext. It won’t statically enforce that it is set, it will just enforce what you can set/get from it.

Your example is the same as not setting a Provider, from what I can understand

12.10.2025 12:24 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

I first learned about it in react aria examples, where IIRC it’s used to display the value of the slider knob as it changes

11.10.2025 15:14 πŸ‘ 2 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

I’ve done the first few lessons and I’m finally building an intuition for when to use transitions vs keyframe animations.

27.09.2025 19:21 πŸ‘ 3 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

When I first saw this course announced I thought β€œaw, I don’t need animations almost at all for my job, it’s gonna be the first course from Josh I won’t buy”

But who am I kidding, the early access was announced and here I am tweaking BΓ©zier curves and enjoying the usual top notch content πŸ₯³

26.09.2025 14:11 πŸ‘ 22 πŸ” 1 πŸ’¬ 1 πŸ“Œ 0

If you make that β€œlazy” you can:

const x = () => f()
const y = () => f()

is the same program as

const x = () => f()
const y = x

06.09.2025 04:58 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

It’s required in the sense that eager computations do not follow this property, eg. if f returns a Promise

const x = f()
const y = f()

is not safely replaceable by

const x = f()
const y = x

since Promises are eager and their result is cached

06.09.2025 04:58 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

In PL theory it’s also called referential transparency, and it’s a really cool property to have!

06.09.2025 04:50 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Right, so back to the original example,
the cardinality of Unit -> X is the same as X.
The cardinality of X -> Unit is 1.

05.09.2025 20:16 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

One hand wavy intuition is that types have cardinalities: Unit has a cardinality of 1, so going in that direction you’re β€œshrinking” X and losing information (you’re mapping infinite X to 1).
It’s a bit like hashing (going from a big set to a smaller set), if that makes any sense

05.09.2025 19:59 πŸ‘ 2 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

The fascinating thing is that in languages like Scala this is actually how it works, not just in theory.

def f = 42 // a function without parameters

type checks the same as

val f = 42 // a constant value

(*caveats apply because the JVM, but this is conceptually sound)

05.09.2025 19:48 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Basically:
() => x is the same as x

but

(x) => {} is not the same as x

05.09.2025 19:45 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Unit -> X means you create an X from nothing. The only possible way is having an X already. In js terms: a function returning a constant is isomorphic to that constant

X -> Unit consumes an X, so it’s not the same as having an X.

05.09.2025 19:38 πŸ‘ 5 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

I’ve straight up started seeing nudity/soft porn (not marked as such) in my Discover timeline

05.09.2025 18:12 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Very different, but yeah, you basically play normal chess for 2 mins and then it becomes flag fiesta

17.08.2025 09:10 πŸ‘ 3 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Capturing Types | ACM Transactions on Programming Languages and Systems Type systems usually characterize the shape of values but not their free variables. However, many desirable safety properties could be guaranteed if one knew the free variables captured by values. We ...

Finally, Scala 3 is quite advanced in this regard, and there’s is active research to build an effect system into the language using β€œcapabilities”, which again is another angle to β€œproofs” (e.g. prove this function does not throw).
Here’s a cool paper (a bit hard to digest, but you might like it)

16.08.2025 22:27 πŸ‘ 3 πŸ” 0 πŸ’¬ 2 πŸ“Œ 0

They’re similar in the sense that you need to β€œprove” you have a db instance before you can use, or β€œprove” you know how to add two things, etc. Often you can materialize those proofs by importing a library, similarly to the Mathlib examples in your post

16.08.2025 22:27 πŸ‘ 2 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Not sure how much you know about it already, but you may like the concept of β€œtypeclasses” which are widely used in those languages and sort of resemble proofs in Lean.

16.08.2025 22:27 πŸ‘ 2 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Pleasant read, thanks for the intro!
Many concepts you talk about are alien in TypeScript, but quite familiar in functional languages like Haskell and Scala (Lean syntax looks a bit like Haskell and I doubt it’s coincidental).

16.08.2025 22:27 πŸ‘ 3 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Bullet is the worse, I play 3-0 and that’s barely considerable chess at my level

16.08.2025 17:26 πŸ‘ 2 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
Chess.com Blitz 1500 award badge

Chess.com Blitz 1500 award badge

Small personal achievement πŸ₯Ί
#chess

15.08.2025 19:54 πŸ‘ 6 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Uninteresting is one thing, but I can definitely when it goes off tracks completely. Usually it’s like 20-30 relevant posts and then it shows popular network posts (aka crap).
Now it’s just crap , so it’s broken like it was a while back when they found and fixed a bug after @danabra.mov reported it

03.08.2025 20:48 πŸ‘ 2 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

JFC Discover is completely broken again πŸ™ƒ We’re back to American politics, random artists’ drawings and AI stuff.

@support.bsky.team how can this break every few weeks? πŸ₯²

Today I’ve opened X after months of inactivity, and the content is very noise but far more relevant :/

03.08.2025 18:43 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

AI generated PRs like this deserve random AI generated reviews. Kinda like Cloudflare AI labyrinth, but for PRs. Let the bots fight each other!

24.07.2025 19:44 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
Preview
A Friendly Introduction to SVG β€’ Josh W. Comeau SVGs are one of the most remarkable technologies we have access to on the web. They’re first-class citizens, fully addressable with CSS and JavaScript. In this tutorial, I’ll cover all of the most imp...

One of the most powerful tools in my toolbox is SVG. When combined with CSS and JavaScript, we can do some truly remarkable things. ✨

πŸ“ I’ve just published a brand-new blog post that covers the most critical fundamentals. It’s chock full of interactive demos. πŸ˜„

Check it out:

21.07.2025 15:11 πŸ‘ 372 πŸ” 88 πŸ’¬ 16 πŸ“Œ 13
Preview
React Router and React Server Components: The Path Forward React Router's RSC support is more than just a new feature. It's a major architectural shift that makes it a much more powerful library while also making Framework Mode less coupled to any particular ...

RR + unstable RSC support has shipped. Please give it a go and let me know about any pain points.

remix.run/blog/react-r...

16.07.2025 20:07 πŸ‘ 79 πŸ” 13 πŸ’¬ 6 πŸ“Œ 1

Congrats! I wonder how many are still on the react-query package also

14.07.2025 08:01 πŸ‘ 2 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
Preview
new Date("wtf") How well do you know JavaScript's Date class?

I scored 8/28 on jsdate.wtf and all I got was this lousy text to share on social media.

11.07.2025 20:24 πŸ‘ 1 πŸ” 0 πŸ’¬ 2 πŸ“Œ 0