What? That makes no sense as an exponential process. It'd be at least unfathomably larger than the universe by now, not just solar system sized. Or were they assuming it'd expand constantly only from the surface in all directions?
849 karma · joined March 4, 2017
What? That makes no sense as an exponential process. It'd be at least unfathomably larger than the universe by now, not just solar system sized. Or were they assuming it'd expand constantly only from the surface in all directions?
[1] https://blog.erratasec.com/2016/10/yes-we-can-validate-wikil...
They're somewhat obscure though.
I'm not familiar with Dovecot's code or very good at reading C, but I think part of how they handle it is here: https://github.com/dovecot/core/blob/81b5b188c478ec36bea8bda...
Basically, building a mail index for UID<->MSN translation that can serialize to disk, which would explain how it doesn't necessarily need absurd amounts of RAM and can select fast, probably at heavy cost when EXPUNGeing old messages. I'm sure there were worse implementations that did just maintain it all in RAM way back in the day, and still some that do (like the one I ran into).
Basically, all messages in a mailbox are numbered from 1 to N, and you can reference a message by number, and when a message is deleted all message numbers above it shift down by one. But since this could confuse clients that are sending inflight requests, you can't start translating from the new shifted-down-by-one numbers until you've told your clients about it, which could take a theoretically unbounded amount of time.
One implementation of this I've seen is to get a list of every UID in a mailbox at time of selection, and then update that as clients are informed of new or deleted mail. Needless to say, that's a bit problematic with short-lived or multiple connections.
So if your mailbox gets too big, too bad. This ends up complicating the client: probably influencing rules 1, 3, part of 5, and 8 listed here. (1) You can't have concurrent mailbox access because it might mess up MSNs reified to disk, (3) you can't have connections live too long because they passively eat up RAM with queued updates and a stored MSN list, (5) there are perfectly good UIDs to reference messages with that you have to learn alongside message sequence numbers, and (8) because opening a new session can be heavy.
The really effective means of mass murder I think would be subtle, though, and mass murderers don't seem to do subtle. E.g. leaving some radioactive material in an innocuous public place, worsening visibility at crash prone intersections, subtle and slow poisons mixed into food and drink…
One extremely annoying thing about this is that if your internet is slow, it can take a minute to load the title of the video you're watching. So if e.g. you get linked something without context and you may not actually want to watch it but do want to know what it is, too bad.
Assuming whatever ElasticSearch implementation you're using is backed by SSDs there'd likely be more latency with S3, but I'd expect it to scale pretty well. Internally, a Lucene index is an array of immutable self-contained segment files that store all indices for particular documents. Searching in multiple indices is pretty much just searching through all their segments- which can be as parallel as you want it to be.
To be honest, I'm actually surprised the Elasticsearch company doesn't offer this as an option. Maybe because they sell hardware at markup?
It's likely been helpful because it's a stack I'm good with, and it has very mature tooling and libraries (via JVM). The alternative was basically C, which has higher quality mailserver libraries but seemed a lot harder to work with from my point of view.
https://www.goodreads.com/quotes/65213-briefly-stated-the-ge...
This is more effective than trying to remember to always check the head function in every single place you ever try to get the first element of a list.
Yes, you can still write a compiling but wrong program. But it will likely be pretty close to what you actually want it to do, and it's easier to notice the behavior is not what you expected in one place, enforce that behavior via types, and see where you went wrong through compiler errors.
You can see how the accumulation of these little warts starts warping the rest of the devflow. E.g. since git can't do great diffs, it can't do great automatic merges. So we start using dev styles that minimize the pain of merging, and we start emphasizing continuous integration partly to prevent large merge buildups.
It irritates me to no end that the most important part of any code is the symbol names, but we've solidified and ossified those as the literal unchanging way you reference code. Want to fix a typo in a method name? Too bad, that's a breaking change.
Try entering "public static int main() {" into https://talktotransformer.com/
Of course we might not be able to smoothly convert the entire world GDP to carbon capture plants for a fortnight, and there'd be deleterious global warming effects in the meanwhile, but overall napkin math paints a pretty optimistic picture for geoengineering.
[1] https://en.wikipedia.org/wiki/Gross_world_product [2] https://e360.yale.edu/assets/site/_600xAUTO_stretch_center-c... from https://e360.yale.edu/features/how-the-world-passed-a-carbon...
A cynical part of me notes that adding more complexity to browsers just makes Chrome monoculture easier: I have no doubt that Google can win any war of "throw developers at it". But it feels like they're building a complexity debt nightmare that we'll all suffer from.
Edit: I guess the other and more direct angle for why Google would push this is that they can give "fast" sites a ranking boost in search, i.e. dictate what web pages do via soft power to make their job easier.
Like I can see where I'd make that tradeoff, but it'd have to be a small function in a really niche use case, which isn't really that common. (I work on the JVM though and don't know how good/bad Python libraries would be in general.)
Have you considered supplementing Mongo with block storage like S3, though? I've found it to be a pretty much perfect match for storing immutable mail messages.