> Correct: ... Is it performant enough for this use case?
I completely agree with that definition of correct. Code should be performant _enough_ for the use case. It shouldn't strive for the unachievable "infinite performance" or "endless scalability". It should do well now and in the next performance / growth cycle (usually measured in months to a low number of years unless you're in hyper growth).
However I disagree with "Secure" being on a different level than "Correct". Or rather, the "release" line passes over the secure. I may not be happy with the structure of the code, but I will never knowingly release insecure code or allow such code to be released if I can help it. The impact of security issues to the bottom line is usually far greater (in both immediate and future terms) than the impact of any non-data-loss inducing functional issue.
-- addendum ---
Also I miss "being evolution ready" (future proofing). Sometimes you give up on some of the other aspects to make sure your code (and the data it governs) can be evolved should the need arise.
Wow - nearly unreadable with the giant cookie prompt. The web is practically broken in so many respects nowadays, yet it's at the center of so much of what we do.
www.irs.gov shows conflicting info - on the main page there's a link to "Coronavirus Tax Relief" page that has the new deadline on it. However, also on the main page there's a link to "File Your Tax Return" page that still says April 15th. Left hand and right hand?
Note that at the news release link, they have bolded payment. So, you still have to file by April 15, but if you owe, the payment is not due until July 15.
Edit: and now I see that the tweet re: filing was just this morning, so website change may be later today. But, do they want to do a production deploy on Friday? :)
> on the main page there's a link to "Coronavirus Tax Relief" page that has the new deadline on it.
No, it has the PAYMENT deadline extension on it, not the FILING deadline extension. As of writing this, it says, "Payment Deadline Extended to July 15, 2020".
Today's announcement is, as the HN title says, an extension of the filing deadline to match the already-extended payment deadline.
Interesting. I built something somewhat similar about 2 years ago (not big on blogging so it’s not published - probably end up hurting my career :( )
The gist is using pubsub to send invalidation messages consisting of item ID and time stamp, but also store the latest invalidation message into a set that is polled on every longer time period (10 seconds in my case). Listening to pubsub and polling are done per server that hosts the in memory cache for all items in the cache.
One interesting complication was how to make sure I don’t end up with the wrong (stale) cached item due to race condition between the read and the message passing. Imagine 2 thread, thread A reading and populating the cache, thread B listening to invalidation events. If thread A get held up (context switching, slow network, etc) it can actually populate into the cache after thread B has received and processed the invalidation message. To avoid that I ended up holding the invalidation messages and their receive time in the receiving server for a short duration (20 seconds - twice poll time). I required and in memory cache population to tell me the time from before the read command was sent to the cache. At the time of cache population, if I saw in had any invalidation message marked after the time the read command started I discarded that item instead of caching it. In highly concurrent, highly distributed application this turned to be a must-have.
Also, mainly to placate my fears, I had “panic mode”. If I didn’t see any message (I sent periodic maintenance messages) or if I couldn’t execute multiple polling attempts I dumped the whole cache and wouldn’t let any new item be ca he’d until communication was restored.
Forgot to mention - writes also invalidated the cache locally so maintain “read your own writes” for multi step algorithms. That was crucial for us and I suspect for a lot of other use cases.
I used
export LC_COLLATE=C
export LANG=C
to gain several orders of magnitude sorting through 6TB of data by 2 GUID-sized fields. Default collation is terribly slow compared to ascii only.
Wow. You can always count on the internets to provide cheap philosophy.
You can predict a crime, just like you can't predict where a drop of rain will fall. But when the weatherman says "80% chance of rain in the north", I'll be sure to take an umbrella.
"Shhh, child. Mother knows best."
That's why a massvie amount of apple mobile devices jailbreak them, why their competitor has aimed enormous traction, right?
At least be honest about the it - it's your aesthetic taste that interests you, that'll be offended, not someone else's.
If your going to pull a Steve Jobs, just say so. It's a valid (and successful) point of view, but it's not a universal truth.
I completely agree with that definition of correct. Code should be performant _enough_ for the use case. It shouldn't strive for the unachievable "infinite performance" or "endless scalability". It should do well now and in the next performance / growth cycle (usually measured in months to a low number of years unless you're in hyper growth).
However I disagree with "Secure" being on a different level than "Correct". Or rather, the "release" line passes over the secure. I may not be happy with the structure of the code, but I will never knowingly release insecure code or allow such code to be released if I can help it. The impact of security issues to the bottom line is usually far greater (in both immediate and future terms) than the impact of any non-data-loss inducing functional issue.
-- addendum ---
Also I miss "being evolution ready" (future proofing). Sometimes you give up on some of the other aspects to make sure your code (and the data it governs) can be evolved should the need arise.