Show newer

And then suddenly I found the magic combination of references and dereferences - phew!

Show thread

Aaaaargh, that borrow checker is killing me!

Rust has been great so far, but the day has finally arrived: I'm struggling with the borrow checker.

Someone I know wants to share a video with their friends, and this video is really only of interest to their friends. I was thinking this would be a good opportunity for them to try @peertube, but... Which instance, if any?

And no, I'm not going to run an instance myself.

Today, Pornhub took down all videos from unverified accounts after a New York Times report documented instances of nonconsensual pornography can child sexual abuse material on the service.

But the Times editorial isn't what spurred the shutdown: rather, it was the decision by Visa and Mastercard to withdrawn Pornhub's payment processing that prompted Pornhub to take action.

1/

I've been writing some Rust recently, and it's just been so much... Fun!

I can't quite put my finger on the why, but so far it seems to strike all the right chords for me.

As part of the #NextGenerationInternet initiative, the NLnet foundation is happy to announce a brand new grant making programme. NGI Assure is looking for technological building blocks that provide strong assurances to internet users. A non-exhaustive list of technologies that could be of interest: quantum-proof cryptography, public key trust chains, ratchet mechanisms, distributed hash tables and directed acyclic graphs for secure peer-to-peer connections -> nlnet.nl/news/2020/20201201-NG

1.4 billion phones are sold globally each year, and only 20% are properly recycled. What if we could turn Black Friday GREEN? Help us reach our goal of recycling 20,000 phones in 2020 by sending us your old phones. ♻️

Apply for your free shipping label: bit.ly/2Vajy7W

To be clear, this project happens to lend itself particularly well for test-driven development. That's not a luxury that I always have. And I'll probably still have to fix some incorrect tests anyway.

(I'd get Impostor Syndrome from reading my own toot, hence the clarification.)

Show thread

Yesterday I gifted myself a whole bunch of unit tests, so all I have to do now is write the implementation and see them flip to green. Thanks, Yesterday Vincent!

I've started seeing words like "modularity" and "generic" as red flags. They're not good in and of themselves: they have to serve a purpose.

Are we going to use these modules? Is this generic over likely future use cases? Are other likely future changes not made more complex?

Show thread

"Don't repeat yourself" is just a means to an end. The goal is to make it easier to apply future changes that should affect different parts of your code base.

But if they evolve independently, then you're only making things more complex to make them even harder in the future.

Show thread

I don't mind having (software-)architectural discussions, but I do feel they're most valuable when people discuss concrete challenges and use cases, rather than vague intuitions about what's "cleanest". For example:

One advantage of Tailwind's removal of a layer of indirection: it obviates the need to come up with names for CSS classes that are neither too specific nor too generic. A serious advantage: the costs of having to name things are often underappreciated.

But how about we turn this around: when an abstraction is particularly hard to name, could that be a sign that it might not actually be a useful one?

mastodon.social/@vinnl/1052479

Anyway, that's my current analysis. If you know of anything I've missed, do let me know!

Show thread

So to recap, the advantages:

- Constraints keep your design consistent.
- Simple tooling, with just few kBs shipped to your users.
- Styles defined in the context of the component to which they apply.

And to address the elephant in the room: yes, this addresses problems that inline styles do not. Specifically, it is not trivial to apply constraints using inline styles, and media queries and focus and hover states are not supported at all.

Show thread

Tailwind does away with that indirection: you apply your design constraints directly in the component, using plain CSS. It provides "utility classes" like p-0 to p-9, to apply a little to a lot of padding, respectively, to an element. Whatever you choose, it'll be consistent.

Show thread

This layer of indirection was intended to allow you to re-use your classes in different HTML elements.

But in the age of component-based architecture, is that still useful? We write our HTML once for our components, and then re-use those components across our codebase.

Show thread

So how about we just define the constraints in, say, CSS variables?

Well, you could do that, but consider how you would use those.

You'd keep switching between your components and your styles, defining new classes in your CSS that rely on the constraints, and then applying these classes in your components. It adds a layer of indirection between the styles and the components to apply them to.

Show thread

This idea isn't unique to Tailwind. Component libraries like Chakra UI and Material-UI apply it already.

However, to enable the sharing of constraints across your app, these libraries define their styles in JavaScript, using tooling to prevent them from interfering with yours.

This leads to inflated bundle sizes and complex tooling.

Show thread
Show older
Mastodon

Server run by the main developers of the project 🐘 It is not focused on any particular niche interest - everyone is welcome as long as you follow our code of conduct!