Forgot your password?
typodupeerror

Comment The UK blocked it (Score 1) 31

Long ago, the UK courts ordered all the major consumer ISPs to block The Pirate Bay along with various other popular services. Ever since, we've had to keep up to date on what the latest proxy address might be.

Of course, thanks to the new censorship laws introduced more recently, we're all on VPNs now, so as to avoid having to hand our ID to the wallet inspector for every last website we ever use. And once that was set up, it was nice to discover that the original is still in play!

Comment Re:Completely wrong and misleading headline (Score 1) 49

Thanks for this, I, in proud slashdot tradition, did not read the article, but it was my layperson's understanding that it'd have been a bit more dramatic if it had reversed... like a pole flip or something.

Also, the amount of energy required to reverse it... it's hard to see where that could possibly have come from.

Comment Re:Recipe for disaster (Score 1) 140

Labeling your item with a generic "BOMB" is such a rookie mistake. Always - always! - use more descriptive bluetooth name so you know exactly which device you are controlling. E.g., "cmdrtaco's BOMB".

The name of the product is "Bomb", and "Bomb" is the default Bluetooth name.

I don't know whether that makes you advice invalid, or all the more salient.

Oops. Did I just make Slashdot do a U-turn?

ROTFL

Comment I knew this would happen eventually (Score 2) 17

Many people incorrectly think of proxies and VPNs (especially VPNs) as a security and privacy enhancement, but unless you're operating the proxy/VPN server yourself they're just as likely to be a massive security and privacy risk. The problem is that they concentrate all of the traffic you'd most like to keep secret in one server, and depending on exactly how the system works, may require installing software on your local machine with ~root permissions. If the operator is malicious, this is a really dangerous combination.

These are useful tools for location shifting and -- in fairly rare cases, and with VPNs only -- from hiding traffic from malicious. But third-party proxy/VPN services should always be viewed with suspicion. Obviously this is even more true when the provider is Russian... though it's pretty likely that wasn't made clear to the people who used the service.

Comment Re:Now we know (Score 1) 127

Just how insane he is.

Not insane at all, just uninterested in the well-being of anyone other than himself.

That's what insane is. Basic principles of morality "Do no harm" and "Take action to prevent harm" mean nothing to someone who is insane.

Sanity and morality are orthogonal.

How so?

A person can be sane and immoral, sane and moral, insane and immoral or insane and moral. "Orthogonal" is perhaps a little too strong, since it implies the absence of any relationship, but certainly all the combinations are possible.

Comment Re: A beautiful resurgence (Score 4, Interesting) 91

The jokes about Darth Jar Jar were everywhere of course, but it could have worked. Star Wars lifted a few ideas from classic SF sources including Asimov's Foundation series - in which, we might recall, the terrifying, unstoppable galactic warlord known as The Mule was hiding in plain sight as a clown, who seemed to be merely a harmless entertainer at court. His military success was chiefly thanks to his psychic ability to manipulate others' minds to his liking - Darth Jar Jar could have done very well that way!

Comment I'm just not interested in more Star Wars (Score 5, Insightful) 91

I saw three Star Wars movies when I was young. They were great. Mainly because I was a child and this stuff was new and fresh and exciting to me. Even the Ewoks.

I saw three more when I was not quite so young. They were... poor.

I saw a couple more when I was older. One was great, the other was okay but a retread of one of the old ones, and I never got round to seeing the rest. Didn't care enough.

Now they've got more, and apparently they're based on a TV series they did, which I didn't watch because I wasn't subscribed to that streaming platform at the time. So I'm not going to see those either. Same reason I've not seen a Marvel superhero film since the first Avengers one - just too much homework required with all the backstory. Every scene is a shout out or reference that I won't get. Every character seems to be getting ever louder and angrier and more and more of them have access to time machines. I just don't have it in me to care anymore.

I like the sound of these horror films, though. They're going to tell a complete story? In one film? With a beginning, middle and end, that don't ask me to be up to date on an entire Cinematic Universe? Sounds great, time to check where they're showing!

Comment Re:I don't currently use Rust (Score 1) 161

heapless is quite useful in many contexts, yes.

As for what my design goals are, it's a pretty typical LRU map. I assumed that the name would tell you what the purpose is, but perhaps not. Please excuse me for belaboring if you are already familiar with these concepts; I don't know what you know, so I figure it's better to be clear. If you do, skip the next paragraph.

An LRU (Least Recently Used) cache is a cache that has a fixed maximum size and when a new item is added that would cause it to exceed that upper bound, it discards the "oldest" entry in the cache, where "oldest" is defined as least-recently used. An LRU map is similar but it is "primary storage" not cache, but still with a fixed capacity so when you try to put more in it than it can hold it has to discard something, and it does that by discarding the least-recently used item.

In my case, I'm writing code that services client code running on other CPUs in the same SoC. The client transactions are moderately long-running, each involving a sequence of requests delivered over the course of a few seconds, though some sessions legitimately go much, much, longer, and each such session requires me to track a non-trivial amount of state, not so much for efficiency as for security; I can't hand the internal state back to the caller because that might allow an attacker to mutate it or roll it back (if rollback weren't a concern, I could outsource a MACed copy of the state). I keep the operation state in a map structure, keyed by an operation ID. But clients can die and clients can misbehave, so I can't safely rely on the clients to always send me the termination message that allows me to clear the operation state.

So, I need some way to ensure that my map doesn't fill up with stale operation data, preventing new operations from being started. LRU eviction is a cheap and effective method. But this means that sometimes clients are going to send a request for an operation that I have evicted, so I have to return an error message. I could just always say "Operation ID not found", but then clients have no way to distinguish between cases where they just waited too long and cases where I suffered a failure or was reset. The clients often respond to these different failure modes in different ways.

For that reason, I keep a "recently-evicted" list -- but that also has to have a fixed size limit. In practice, my recently-evicted list consists of two lists, an "old generation" list and a "new generation" list, both with fixed size limits. Every time an operation is evicted, it's added to the "new generation" list. When the new-gen list is full, I move it to the old-gen list (in practice, I really just change which list is considered new and which old; no need to copy it). This is a cheap way to "age" the eviction records, without actually having to track their age in an LRU fashion (which would ~double the per-entry storage required, halving the number of evictions I can track). When a request for an unknown operation ID comes in, I search both lists to see if the ID has been recently evicted. If so, I remove the ID from the list and report the error to the caller. The reason for removing is to make space for a new eviction record, to maximize the scenarios in which I can notify clients.

Regarding your comment about encapsulation being overused... this is not such a case. The purpose of encapsulation, properly applied, is invariant maintenance, and there are some important invariants that have to be maintained for the LRU map to work. One of those is that insertion must execute the eviction logic, so even if I could move the map out temporarily, that would create an opportunity for bugs if the calling code does not correctly handle eviction and maintenance of the recently-evicted list. Another (less crucial, but still important) is that the recently-evicted list should only contain entries for clients that haven't yet been notified.

That said, there actually a good argument that the `recently_evicted` method is conceptually non-mutating and I should use interior mutability. Either that or I should rename it to "remove_eviction_record", so it's clear that it is inherently a mutating operation. I will do one of those two things on Monday -- thanks for helping to improve my code. I would prefer the rename for clearer semantics, but interior mutability will allow me to avoid the extra map lookup, so I'm leaning that way.

One other comment about something you said, which you might find interesting: You said that in Rust, moves are cheap. This isn't really true. More precisely, it isn't any more or less true in Rust than in any other language. Regardless of language, when you move data, you must copy it, and you're paying the cost of that copy. What makes moves so useful in Rust is not that they're cheaper in time or space but because of the marvelous move invariant that is enforced by the compiler. Namely, that moved-from values cannot be referenced.

To see how important that is, compare with C++, which also allegedly supports move semantics. The modern C++ style makes heavy use of move semantics. But C++'s move semantics are broken in a way that makes them less efficient and more difficult to use safely, and that's because C++, like C, always allows code to reference any value that has a name. That means that moved-from values can be referenced, which means it's critical that moved-from memory not be left in an invalid state when interpreted under the invariants of its type. So the rule is that moved-from C++ objects must be left in a "valid but unspecified state". In practice, this translates into the move ctor/optor having to do work in the moved-from memory, zeroing pointers and whatnot, in order to ensure that what's left behind upholds the invariants of the type, and it means that C++ structs that support move-from must have some valid but not semantically-significant state they can be in.

What makes Rust's move semantics easier to work with, more efficient and safe is that there's no need to ensure that the moved-from memory is in any kind of valid state, because the compiler will not allow the moved-from memory to be accessed. Another way to think about it is that the moved-from memory no longer has any type, so no longer has to maintain any type invariants. It's fine to leave behind bit patterns that used to be pointers or whatever, because those bit patterns will never be used.

Coming from 35 years of C++ programming, this was something of a revelation to me when it hit me a few months ago. And it's the real meaning of "moves are cheap", which isn't a comment about time or space, but a comment about invariant maintenance.

Comment It always puzzled me... (Score 1) 28

... why unions aren't much more common among technology workers. Especially given what you hear about the videogame industry in particular, with that mad 'crunch time' culture in which workers are ruthlessly, well, crunched. I'd always ask, well, what does your union say about it? And what do you know, there isn't one, how about that.

Nice to hear of some progress being made, then. I suppose the risk with this for the rest of us is that GTA 6 might be late to release, but, uh, at this point I think we're over that

Comment Re:What about Wine? (Score 2) 54

Without a real ABI-32 Wine will have to use an emulation layer if the processor can't run natively as a 32 bit process.

Now that Linux is getting a growing game player quota, there are gonna destroy a functionality that make that works?

Since Windows never supported this unusual 32/64-bit hybrid, it will have no impact on WINE.

It's actually kind of a cool idea, though. To someone like me who grew up on 8-bit and 16-bit architectures and is regularly taken aback at the size of data structures on 64-bit platforms -- 16 bytes just for a pointer and a length? -- being able to cut those down while still being able to run at full speed [*] on modern hardware sounds really useful.

[*] Assuming it's really full speed. I suspect there's some overhead.

Slashdot Top Deals

Loan-department manager: "There isn't any fine print. At these interest rates, we don't need it."

Working...