This. If you use @Authy and the UX is still decent, disable automatic app updates on your phone while you can. You wouldn’t believe how far they managed to screw it up.
Ain't enshittification great? @Authy pushed an update, and not only does it look worse than the previous UI - but in addition to not having icons for key services (and no option to set your own) it has _lost_ icons for key things like AWS. Which one of the "julik"s do I click, dear @AuthyHelp ? Maybe your qualified UI design team lead PM supervisor knows the answer? 😭
@wesbos If prompt injection ever is a problem, I guess you could detect it like so. (Insider tip: an identical prompt reused in multiple conditions will only run once per email, even across multiple rules. We’re frugal with your tokens.)
@RubyCademy That’s hugely interesting. Most crucial question: is it (or will it be easy to make it) transparently multi-core aware like the modern Rails test runner?
Just noticed that @figma is using @missiveapp’s EmojiMart (https://t.co/xZezWDf3Tn) when inserting comments 📨 🫶 🎨
Also noticed we reached 8k+ ⭐ on @github 😱
Made me realize that it was shamefully outdated 😬; we just released an update that includes Emoji v15 🫨 🫎 🪼
New to Missive? Our friends at @ProcessDriven_ are hosting a hands-on workshop on February 1, 2024 that'll guide you through collaborating on email using Missive!
🔗 Register at: https://t.co/Um9xI91mTR
“If there’s anything I see juniors often miss, it’s this. Careful, repeated, even obsessive, study of their own work. For programmers that means poring over the pull request until it’s as aesthetically pleasing as it is functionally correct.” https://t.co/EaiolBziIM
I also wanted to announce that I'm launching a new product to help saxophone players keep their fingers close to the keys!!
I've been working on the R&D for a while and it's finally ready >>>> https://t.co/oPf8UEwhDL to get updates when we launch!
https://t.co/nQtSVJhctr
Lots of conversations with people about Citus lately. Citus is a fascinating and advanced piece of technology, but not a one size fits all. If you're considering Citus here's the things to keep in mind.
Disclaimer-this is assuming a multi-tenant workload.
If you ever think you're going to need Citus, it's a good idea to slightly denormalize and have your tenant/customer id as a column on every table. The key is you don't want to have to join another table to get to the tenant_id/customer_id you want it there denormalized on every table.
Your primary keys will then become composite primary keys, composed of customer id + the id for that table.
For joins you'll want to make sure you also include that tenant_id as part of joins for every coloumn, not just one table, for every single table in your query you want to make sure customer/tenant id is joined.
A good thing to check for before going to production is tweak the log setting for queries that are cross shard to error. Citus has a setting for this: ALTER DATABASE postgres SET citus.multi_task_query_log_level = 'error';
The other piece is determining your node size and cluster size ahead of time, don't prematurely plan for too large of scale.
A fun interesting learning, just doing the above with customer id and joins we saw customers that were planning to migrate to Citus saw a significant performance improvement from that alone.
As for shard sizing don't stress too much on it. Determine your starting number of nodes and then create a shard count that allows you to scale to 4x that. Don't start on the smallest instance size you can find, but don't start on the largst either. With all this a goldilocks zone middle of the road for all is the way you want to go.
Once you're live watch for hot spots on shards on particular tenants, and consider rebalancing or isolating those tenants. Citus expansion of pg_stat_statements (citus_stat_statements) will show you hot spots on tenants, and then you can isolate that tenant: SELECT isolate_tenant_to_new_shard('table_name', tenant_id);
And if you want to move that large tenant to their own dedicated node: SELECT master_move_shard_placement(shard_id, source_node_name, source_node_port, target_node_name, target_node_port)
@Flightcontrolhq How does AWS Global Accelerator fit into the picture? I assume you can deploy the same app as two Flightcontrol services in regions A and B, with B scaled to 0 by default, and if A goes down then GA reroutes to B which autoscales up quickly enough?
@adamlogic So your customers essentially don’t bother with that spike? I assume it often triggers Judoscale to scale up and scale back down shortly after deploy.
@adamlogic Any insights on Heroku Private Spaces which cycle up to 25% of your dynos upon deploy? How to prevent request queue spikes if you carefully autoscale to avoid over-provisioning? Ever seen anyone using the `release` Procfile command to scale up 25% prior to restart?