edit: to be clear, IMO, corporate power is an expression of govt power, which should be minimized.
14,007 karma · joined August 16, 2012
My opinions are my own and do not necessarily reflect those of my employer.
* X: [@tracker1](https://x.com/tracker1) * Email: tracker1 at gmail * Website: [tracker1.dev](https://tracker1.dev/) * Keto Blog: [Keto Playhouse](https://medium.com/keto-playhouse)
-----
``` [ my public key: https://keybase.io/tracker1; my proof: https://keybase.io/tracker1/sigs/DAQeHW19H-HCUr1ZBXVK7v0QEKqyv4J40IU227AiCVg ] ```
edit: to be clear, IMO, corporate power is an expression of govt power, which should be minimized.
The graphics can only carry you so far. There's indy adventure games with SNES level graphics that have millions of daily users.
Now, I think the vast majority of the pain is more than self-inflicted... I think actual business, marketing and focus need to start taking priority over idealistic political PoV. Let the games target their natural audiences and have the broadest appeal... at a certain point, trying to gain 1% of audience means alienating 25% or more.
I'm far more hesitant to throw a more formal MQ in the mix though... mostly from experience in that a lot of mid level ("senior") developers don't really understand queues very well at all. Even if conceptually, using tables for queues is more complex.
That said, I will use PG for workflows similar to K/V, Document (JSONB) and other structures over reaching for say MongoDB, etc.
DateTime logic in general is just difficult in general.. Most systems can translate to/from UTC with ease, it's just when the localized offset of the futre changed like in this case.
Similarly, I've been using zopfli (gzip/unzip compatible) for png compression after quantization for db storage from 2-color (B/W) scans as it's directly compatible to the browser but winds up about 1/6 the original sized tiff. Not the best compression, had a discussion for a better compression, but required a wasm renderer to decompress as it isn't in the browser box.
Hardest part is now feeding them all separate dishes at regular times every day.
And even that isn't as icky as a short project I worked on for a major CC company. Still get the icks thinking about it, and I didn't continue beyond the 6mo contract.
var value = cache.lookup<T>(
keyname,
() => db.query<T>(...),
TimeSpan.FromMinutes(5) // or CacheOptions
);
This way it can fallback/insert on a cache miss directly...That said, it's interesting when you learn in practice that sometimes an N+1 problem is actually faster as N+1 than trying to query across separate DBMS systems.
When Hangouts had integrated Google Voice and SMS in the app, imo, that was peak poweruser useful.
That last part is the real point of integration... then real time chat and messaging status baked in... it's hard to beat. You have services and applications that offer pieces, but none integrate as well.
In the early 2010's I think that both Blackberry and Mozilla had an opportunity to create their own competition in the space and neither did. Google is pretty close, but IMO still a much lesser experience, reinventing a new chat app every other year didn't help their cause at all.
For me, I switched when the start menu started showing internet ads as part of the results... I ran insiders for years, often joking that WSL was my favorite Linux distro... I love the new MS Terminal, and pretty happy with a lot of things. That said, there's far more that annoys me... it's too in your face trying to sell you additional software/services/features that frankly I find offensive from an OS. It's like built in malware ads. They might as well try to sell me an X10 camera in those popups, I'd feel just as irritated about it.
I went from dual booting, to just Linux for my personal use a few years ago and been pretty happy. I'm not a gamer, and was already using Linux as my dev target for server software. It wasn't a big deal for me. Even the growing pains for Cosmic have been less annoying than some of the "features" of Windows.
I'm also don't agree with the assertions that you cannot address performance issues in a web based application. The actual email rendering in Outlook classic is still an embedded browser engine. Now it's just doing more of the application. If anything VS Code and the underlying editor system should show that you really can create pretty responsive applications on a browser surface... no, it's not the fastest, but if you're comparing to a lot of "full" IDE applications, it's a massive improvement... Visual Studio around 2010 was absolutely horrible for building web based applicatons, with common freezes and input lags.
There's plenty of room for improvement in these applications... I think the web shift is more to support cross platform better than it is to avoid optimization. At this point, they really want to be able to support Android, iOS, Windows, Mac and maybe unofficially Linux. The browser is the best bet to make that happen. I think that wasm can bridge a lot of the performance issues where service interactions go beyond the immediate state. With the rust ecosystem as good as it is for wasm target usage, I'm frankly surprised more of the logic isn't already there instead of JS. That said, I don't know how much is effectively asm.js or electronic translations to JS, or relying on server functionality. I haven't dug that deep.
That said, there's plenty of room to optimize web based applications. Even if it comes down to single-channel RDP application shells to a server-running application remotely. I think the point is to share as much as possible and support as broad an audience as they can. I think this is still happening in a context where three are still those that are trying to keep Windows on top and ignore Linux, while others in the org want to fully embrace it.
You can use a revocation list with JWT if necessary, and if your JWTs never last more than 15m you'll be fine.. and if your security window is tighter than that, you probably have bigger issues to deal with.
Oh, I'll just leave this SQL injection path in place.... etc.
Beyond this, you can make shorter lived JWTs just fine in the browser and have the agents self-update. If you use Azure Entra or a number of other providers it works this way in practice... you keep your JWTs relatively short lived (5-15m) and can even check for jti revokation.
JWTs are incredibly useful for separating/reusing an access authority from your applications/api systems. You shift the attack surface and do it in a way that can be trusted. We use PPK for lots of things, including SSH all over the world. No, I wouldn't use shared secrets and I wouldn't use long lived tokens... but short lived, ppk signed tokens from verified/known sources are generally fine.
For that matter, it's often API keys that are really problematic. Just had to implement them... for me, the API key presents as a Bearer token as well, but there's a short "sak." prefix then an identity part (base64url uuid bytes) followed by a secret as base64url bytes... in the database is the uuid and a passphrase level salt+hash from the secret.. so the api key generated should be treated as a secret and is one-way to the database, so a db breach doesn't breach auth.
Even then, an API key leak is far mroe likely than a problem with a well implemented JWT solution.
JWTs are too long lived... Nothing is stopping you from limiting the JWT lifetime and having a refresh model against an authentication authority... I mean, even if you use cookie based sessions, you're storing somewhere... you can have a jwt valid for 5-15min. 15minutes is roughly the cache timing for many authorization systems including Entra... and even a 5min token with a refresh system can be used fine from a browser.
Lastly, I prefer to have identity/auth separated from the application/api services... it externalizes context and JWT per request is easier to deal with than some shared cache/state system that may intermittently fail as opposed to a signed token that you can verify the signature against known authorities.