408 karma · joined June 19, 2017
None of them lasted more than 6 months.
Admittedly, I bike and walk a lot, so probably I put more strain on them than I should have.
But, come on, that’s why I got them, and surely if I can bike 20 miles in $30 pants from target, those fancy lululemon pants should also have worked.
Some pants, shirts, which I could put a jacket over for something more formal. Some shorts and shirts for the gym.
Every single one of those pants ripped, to my surprise, because some of them were $150-$250. Some ripped in the belt loops, others between the legs. The dress shirt is barely holding up, there are little plumes of ripped material on the side.
Each time they ripped, I replaced them with something I found for $15-35 at Target. Not a single rip.
I still keep the dress shirt, because it’s the only one I have, and I’m not at all sure what to replace it with.
I dislike the shirts that Target sells because the frame they use is of a long, skinny man, with small arms, and an extremely wide neck. Not sure how the fuck that happened. But the material is perfectly fine.
If anyone knows where I can find a nice shirt (both collared and others for the gym), that’d be great. I’m set on target pants, though. They are indestructible.
But the biggest reason is that they’re sort of intuitive, plenty examples exist. And then at some point someone tells you that those things are monads, but it’s in the kind of way that social psychologists make up some fancy word for crap we all know about in our gut.
Nobody gives a shit that a list is a monad, people give a shit that it’s a list. Anyone who’s written lisp or node or any nontrivial C program or anything with coroutines or anything with concurrency can and will tell you that, yeah, duh, control flow can be represented by a data structure. A couple more fancy “monad laws” and you have something that looks like other monads, and lists and if expressions and IO meld together. Ok, how unhelpful.
`pledged = (p->p_p->ps_flags & PS_PLEDGE);`
Good catches :)
I need a bit more clarification on your first question. There should be no mutation of the underlying map when it grows — we’re just allocating more room for entries and adjusting the old map’s item “ownership” — moving pointers->items around.
Many of my toy and hobby projects are exactly that. Some make allowances for the sake of performance and generality.
The hash map, though, is up there with sorting algorithms in the breadth of wild implementations. Salmagundi is unlikely to be the fastest, or the smartest. But it’s cute and portable.
I’ve found this more succinct in other contexts than backgrounding tasks, writing pid files, and maintaining them through the process’s lifetime.
Also less prone to error.
If it looks like a package, it’s a package.
If I want to be explicit, I’ll write something in C.
The overheard of observing the time is around 60 nanoseconds.
Light travels about a foot in a nanosecond.
Below ~500 nanoseconds, things get fuzzy.
All I can see are hardcoded ping/pong “meow” messages going over a hardcoded client and server.
But maybe the ping/pong is part of the protocol?
It’s not clear.
Anyway, this redundancy-based protocol doesn’t seem to take into account that too many packets over the network can be a cause of bad, “overloaded” network conditions.
Raptorq is a nice addition, though.
Linus seems reasonable in comparison…
Just seems like a lot of groundwork is still being laid, without much even having been started.
The article makes it seem like things are actually being rewritten in rust.
Are they?
Like top, it doesn’t require much to Just Work and produce meaningful output.
Like other dedicated tracing tools, Flaregun can peek deeply into your application, extracting metrics like TCP packet and file system latency.
On Linux, sure it’s not possible to directly crash another program you’re talking to via a socket alone (ignoring bad data on the socket).
But you can absolutely kill them. Anything running as root can kill anything else. Can even reboot and bring down the whole system.
Maybe a bit harder and a bit more unusual, but at least for containers, root privileges are common. And yeah, sure, there’s a cgroup there are you’re more limited. But you get the idea.
It’s also a bit different from the (conventional?) wisdom about being “liberal in what you accept, conservative in what you emit” though that’s a bit more tied to networked systems.
Though, maybe it’s inevitable that a system has to be liberal in what they accept.
How else can you change the api slightly without breaking existing programs?
It’s these particular systems that I find the most difficult. If there were a collection of nice utilities for working with them uniformly, oh, that would be amazing.
- All software is derivative. Yours included. Putting it out there is like planting a seed for more to grow, even if it’s just an AI ingesting your work.
- The last two points aren’t mutually exclusive.
Put your work out there in the clear for free, as in freedom, but paid, as in you can get paid. Just don’t expect much.
Maybe there will always be camps arguing for one thing or another, but together and over the longest term, do they all pull in one general direction?
I’m not so sure I agree with most of the article. The perspective is valuable.
Is it a safety feature to type-check regular expressions using dependent types? Is Python a security vulnerability because the performance can be unpredictable?
I don’t know.
Rust, for that matter, doesn’t protect you from running out of memory from leaking data on the heap — or from running out of stack space because your infinitely recursive function doesn’t halt. Maybe that’s not part of memory safety — but that’s my point.
There’s a whole safety forest out there. Whenever I read an article about safety in software, it seems like a comfy blanket statement. “This is a nice definition which I will live in.”
I just don’t see how it’s so flat.
I think there’s some nuance, but not in the general case.
Shared memory, lazy statics in async blocks, and asynchronous constructors might have different initialization order mechanics that would require synchronization — but even then, the borrow checker would at least point it out