@Kaliah Same!
@jalcine I remember they were using it back in the dotcom boom. Don't recall exactly how they got it, wouldn't surprise me if it were an early acquisition.
I believe such domain names back then went for thousands rather than millions of dollars :)
AI bubble bursting?
@sofia@chaos.social Ah, that was a *different* batch of GPUs than the one I was thinking of. The one I was thinking of was when Bitcoin started being ASIC-mined and everyone was trying to get rid of their cards, it was all regular cards back then.
The second batch (when other cryptocurrencies started tanking) were indeed different, though they weren't exactly locked down, rather they didn't have display outputs and not all of them could be rerouted through another port in the system. Could still be used for general-purpose OpenCL compute though, not just cryptocurrency, just not for games.
I do know that even of these, a fair subset could be rerouted so that eg. the display ports of the on-board GPU on the mobo could be used with the silicon in the no-display-output cards, but this depended on both the card and the motherboard IIRC.
The others probably ended up getting reused for LLM stuff...
Quick ask: GitHub + the Linux Foundation + Harvard University are partnering to research how open source is funded. We NEED more data in order to find ways to improve funding in the ecosystem
If your org/company funds OSS, could you take it please? and if you could pass it along to others: https://www.linuxfoundation.org/research/surveys/open-source-software-funding-survey-2024
A shout out @SocialGaff for the use of his ingenious DIY drying rack.
re: offer of software/help
@amy (Response to your usecase at the bottom of this post, beyond the line separator, feel free to skip all the stuff above it if you're not in the mood for discussion about types/validation!)
To clarify on the inference point: I meant when not using TS yourself :) tsc has some very limited inference abilities on "just" JS, when it doesn't have explicit type annotations to go off anywhere, but it gets very easily confused, and doesn't infer anywhere near as well in that case as eg. Tern does.
I've found that it usually only takes 3 steps of indirection or so before it loses track of what types are produced by what, and it doesn't understand conditional cases at all (whereas eg. Tern would consider the union of possible types in its inference), and you end up with it just not knowing the types of anything. I've heard complaints that some JS libraries without explicit type definitions can cause this kind of 'type loss' even in TS codebases.
None of this happens if you're writing code in TS yourself AFAIK; as long as it regularly gets explicit type specifications, and everything inbetween also has type definitions, it seems to do fine.
On the validation: yep, it's runtime validation, the motivations are explained a bit more here, albeit in slightly more fiery language due to a number of unpleasant past discussions with other folks: https://www.npmjs.com/package/@validatem/core (though that's not required reading for using Promistreams). I just personally haven't found much value in static typing beyond that, and strong typing (ie. no type coercion) unfortunately isn't a thing in JS either way.
The specific example I linked makes use of `@validatem/wrap-value-as-option` to accept either a single value or an options object, and if it gets a single value, it turns it into an options object with that value as the `onRequest` property. That's because often you don't need to specify any custom teardown code for a source stream, so then you can just pass the "value-producing" callback directly to it and you're done.
--
Onto your actual usecase, if you just need to wrap a single socket at a time, then yeah, the experimental stuff is not needed; just a fromNodeStream.fromReadable(socket) and fromNodeStream.fromWritable(socket) should provide what you need, I think? And then the resulting streams can be used in a normal Promistreams pipeline, and it *should* now correctly handle the socket being closed on either end (by happy-aborting the other side). Please let me know if it doesn't.
The resulting sink stream should take Buffers, and the resulting source stream should produce Buffers, so then you could use a stream/pipeline-generating function like the third example in the introductory post to generate the same 'transform' (logger?) and use that on both ends. And then do whatever else needs to happen in the pipeline, basically. And perhaps pass them around bundled in an object if needed.
I'm not sure what the rest of your usecase looks like - if you're okay with sharing more detail (basically an end-to-end description of where the data comes from and where it ultimately goes to in what form), then I can probably provide a more concrete example of how that might be done in a Promistreams pipeline.
Every pipeline needs to be actively 'driven', so unless you're feeding all the received data immediately back into the sending side (after logging), some kind of other destination will need to be specified as a Promistream, using a Node stream wrapper or otherwise :)
HEY FUN FACT: this was used as part of an Alexa/google home type thing! this is the "cloud" half, as in the part sitting in a warehouse somewhere.
It turns out every time the customer asked for something from the smart assistant, the WAV file was sent to the cloud box
where it is still stored. and I now have eleven thousand wave files
hello internet. my name is nora. i run a jewelry shop specializing in fused glass pride jewelry but i also am trying to make glass weird. a new product (the first picture) is a grab bag of strange glass bits and bobs called a kobold hoard, named for a favorite fantasy creature that loves shinies.
i'm a one artist operation, though my husband helps pack orders and helps talk me through ideas. shares help me out.
re: food (vegan), bread recipe
@bananas Same for me with normal bread, but with this flatbread it ended up working great :)
Also just had pizzas, and that worked great as well! Not soggy at all.
re: offer of software/help
@amy So the duplex streams, and specifically sockets, are a bit of a weird case - it *does* support these, but you need to explicitly specify in from-node-stream whether you want to wrap the readable or writable side (and so just have wrap the same duplex stream twice, once on either end, and it'll work fine).
I did look into duplex streams for Promistreams originally but concluded that they break almost every streams mechanic (or make it unreliable), and ultimately don't actually offer anything extra beyond what "an object containing a sink and a source stream as its properties" would, so that's the intended way to do duplex-like streams in Promistreams.
Also, I've actually been experimenting a lot lately with more ergonomic representation of network sockets in Promistreams, the idea being that a 'server' is just represented as a stream of clients, and a 'client' has a .receive and a .send property which are Promistreams representing the respective sides of the underlying stream.
Many of my recent changes to the low-level abstractions and the spec have actually been exactly to make this sort of thing work reliably! I'm not entirely happy with where it is yet (needs more testing), but a rough example of what that looks like is here: https://gist.github.com/joepie91/b583ce10f9dd63e3ad746c9a2a1f37e0?ts=4
(But you can just use from-node-stream today on a regular duplex socket and it'll just work fine, the example above is just experimentation beyond that!)
On the types point; I don't use TS, but I do generally use very strict argument validation on library surfaces (stricter than what TS can check in places), and with understandable error messages, so it'll tell you if anything invalid is passed in. Quite a few of the stream packages probably don't have this set up yet, but will in the future.
Here's an example of a stream package with relatively complex validation rules: https://git.cryto.net/promistream/simple-source/src/branch/master/index.js#L17-L23 (though most packages are single-argument).
This won't help type propagation in TS of course, at least until tsc improves its inference. I'd be open to someone contributing (maintenance for) TS definitions, but that's not really something I'd want to commit to myself, as I don't use it. I can understand if that's a reason not to use it!
Does that answer your points, or did I miss or misunderstand anything?
(As an aside, I wasn't sure if your problem description implied needing to insert streams inside of an existing unmodifiable Node.js streams pipeline - but if that is the case, that *will* be possible, I just have not gotten around to writing the to-node-stream module yet. Once I do, it will also support creating Duplex Node streams from two Promistreams.)
food (vegan), bread recipe
New delicious salt-free flatbread recipe unlocked!
500gr flour, approximately 300ml water, something like 30g (vegan) butter, a generous dash of italian spice mix (lots of oregano!), plus rosemary and chervil. Add 1 bag of baking powder (ie. the prescribed amount for 500gr flour).
Knead until nice and stretchy, and no longer gets stuck to hands. Add flour if needed until this is true. Divide into 9-10 roughly equally sized balls or thereabouts (exact division is not super important).
Heat frying pan, add little bit of neutral oil (eg. sunflower), less than a tablespoon. Don't add more, or you'll get crackers! Use rolling pin to roll a dough ball into a flat slab, turn down heat to medium, immediately add dough slab to pan.
Wait until it's solid and not bendy anymore, and flip with spatula. Leave for a few more seconds. Ready when small brown spots have appeared (this is true for both sides). Push down flat if it bubbles in the process.
Done! Eat hot or cold. If you're well-coordinated, you can flatten the next dough ball in the time that the previous one is frying, and you can just stack the ready ones on a plate.
We're going to try to use these as pizza bottoms too, tonight. If you make them thinner (divide into more, smaller balls), you get delicious wraps! In that case they will remain bendy though.
The promised writeup of how I discovered that the Feeld dating app was protecting private data by doing client-side filtering: https://mjg59.dreamwidth.org/70061.html
@rail_ i am always sure to not assume stuff like this, but im still always pleasantly surprised in the rare case when someone is in neither seattle nor germany lmao
Should you use CRA? Not even once.
This has always been true, but only in the last couple of years have its creators acknowledged as much. And yet, they're pulling the same shit Facebook pulled when they failed to signpost to the community the scale of infrastructure necessary to keep their baroque JS in check.
Lies by omission are still material.
In the process of moving to @joepie91. This account will stay active for the foreseeable future! But please also follow the other one.
Technical debt collector and general hype-hater. Early 30s, non-binary, ND, poly, relationship anarchist, generally queer.
- No alt text (request) = no boost.
- Boosts OK for all boostable posts.
- DMs are open.
- Flirting welcome, but be explicit if you want something out of it!
- The devil doesn't need an advocate; no combative arguing in my mentions.
Sometimes horny on main (behind CW), very much into kink (bondage, freeuse, CNC, and other stuff), and believe it or not, very much a submissive bottom :p
My spoons are limited, so I may not always have the energy to respond to messages.
Strong views about abolishing oppression, hierarchy, agency, and self-governance - but I also trust people by default and give them room to grow, unless they give me reason not to. That all also applies to technology and how it's built.