HN user

clarkdave

164 karma

https://clarkdave.net/about

contact@clarkdave.net

co-founder of LoyaltyLion (https://loyaltylion.com)

[ my public key: https://keybase.io/clarkdave; my proof: https://keybase.io/clarkdave/sigs/88m6iucm3wCPGSzi7ZwJNBlrIImo9rhh-6hKs7B0Kj0 ]

Posts0
Comments66
View on HN
No posts found.

It's not like there is a mirror datacenter just two blocks away

Isn't that exactly what Availability Zones are for? They're physically separate[0] datacenters and each one contains a copy of each S3 object (unless using the explicit single-zone options)

It's also straightforward (although not necessarily that cheap) to replicate S3 objects to another region

[0] https://aws.amazon.com/ec2/faqs/?nc1=h_ls#Platform

Not sure about heat pumps, but in the UK at least there are a couple of companies that specialise in residential water cooled AC, e.g [0]. They use the cold water intake to cool down the compressor which sits inside the property

From a marketing perspective it’s not (as far as I’ve seen) driven by eco credentials, but by not needing planning permission - external AC compressors are not automatically permitted in the UK.

[0] https://www.urbancooling.com/water-cooled-air-conditioning

Not sure if this is what you're getting at, but RabbitMQ is indeed pretty great at having thousands of queues, even on modest hardware, and can be used for per-tenant queues in this way.

It does have some drawbacks though: if you have thousands of mirrored or quorum queues, managing the cluster becomes more cumbersome - it can take a while to replace nodes (rebalancing thousands of queues around). Also, the management tools (the web UI especially) don't perform that well if you have 10,000s of queues and 100,000s of consumers

I think the typescript-eslint plugin in particular has some high value eslint rules that complement TypeScript.

For example, the no-floating-promise[0] rule catches some easily-made mistakes involving promises in a way that TypeScript doesn't on its own.

Other rules can be used to increase type safety further. There are various rules relating to `any`, like no-unsafe-argument[1], which can be helpful to prevent such types sneaking into your code without realising it; TS has `noImplicitAny`, but it'll still let you run something like `JSON.parse()` and pass the resulting any-typed value around without checking it.

[0] https://typescript-eslint.io/rules/no-floating-promises [1] https://typescript-eslint.io/rules/no-unsafe-argument

JSONB has landed 3 years ago

Indeed! There is at least one other difference, which is that the presence of null characters will cause an error in `jsonb`, but not `json`:

# select '{ "id": "\u0000" }'::json;

-> { "id": "\u0000" }

# select '{ "id": "\u0000" }'::jsonb;

-> ERROR: unsupported Unicode escape sequence

Indeed, the interchanges can be quite arduous, as it tends to be very deep, and usually quite a trek from the other lines in that station. This also means it can take a good chunk of time to even get to or from the platform.

For example, if you wanted to go from Farringdon to Liverpool St, Google Maps would suggest using the Elizabeth line, but, in practice, it's usually better to use the sub-surface lines (Metropolitan etc). The time taken for the extra stops will be cancelled out because the Elizabeth line takes significantly longer to get into/out of of as it's so much deeper. Add another couple of minutes if you happen to get on the wrong end of the train, because those platforms are long!

That being said, it's a joy to ride and is the only air-conditioned train that runs through the central section of London.

PostgreSQL 16 3 years ago

They just changed the versioning scheme; it used to be that e.g. 9.3 -> 9.4 was a major version (i.e. can't be upgraded in-place). Starting with PG 10 major versions are now 10 -> 11, etc. I don't believe the major release cadence itself changed that much

From the interview (it's way down the page):

The most challenging thing is the absence of the specification. I had to infer everything just from test cases.

The second thing is the velocity of tsc. It's way too fast, and I was unsure if I could follow it up. So I decided to use semi-automated translation and selected Golang.

But it was too boring, and more importantly, my programming ability has improved enough to follow tsc only by myself.

I've tried a lot of different monitor setups for productivity - ranging from three 24" 4k displays to a single 49" ultrawide, and ultimately have found the best setup for me is dual 27" 4ks, each running at a "scaled" 2560x1440.

MacOS in particular does an excellent job of rendering 2560x1440 to a 4K screen, and the increased DPI over a regular 1440p 27" screen is very noticeable.

Another option if you're not a fan of 27" displays is a pair of 24/25" 4k screens which can be run at a scaled 2304x1296 resolution. This still provides a decent amount of space without text being too tiny. Alas, 4k monitors <27" are increasingly rare these days.

The killer feature of containers for me is keeping Google isolated. I've degoogled my personal life but still have to use it for work (i.e. G-Suite SSO). I can force all those sites to open in my work container which leaves my other containers Google-free.

Before Firefox I used Brave with multiple profiles and it was very painful to use in practice; two sets of extensions, two unlocks of 1Password X, no ability to force certain websites to open in Profile X or Y, etc.

But yes, Firefox feels like it's getting progressively slower and I'm finding more and more things that don't support it. In particular, many of the recent spatial audio tools just flat out refuse to run in Firefox, and tools like Apple Business Manager don't run even though they typically work fine if you spoof the User Agent.

If a Chromium-based browser like Vivaldi or Brave added containers it'd be a very compelling alternative.

Seconded! I started using this a few weeks ago after finding out about it on HN and it has been excellent. There's a small 1-2s delay while it loads and sanitizes the results but I got used to that pretty quickly.

The one downside for me is that iOS Safari doesn't support custom search providers, so I can't use it on my phone unless I switch to an alternate browser. That said, once iOS 14 lands I can set Firefox as my default browser and use it that way.

We used to use alpine because it was smaller (ferrying images in and out of AWS adds up) and the package management UX often felt better (the community and testing repos tend to make many things easily available, which led to simpler and easier to follow Dockerfiles).

Eventually we switched to Debian-based images because of intermittent DNS-related woes that plagued our alpine containers. We struggled to isolate the cause but it seemed to be a combination of Node + Consul DNS. Suddenly those saved gigabytes and smaller Dockerfiles didn’t seem worth the hassle; after jumping to Debian we never saw that issue, nor anything similar.

Datadog S-1 7 years ago

The Synthetics pricing does seem unreasonably high.

We were using Synthetics during beta alongside Pingdom - doing pretty much the same on both. Beta period ended and sales rep said our Synthetics bill would be something crazy, like 10x our Pingdom bill, and it’d start next month (they later said that was a mistake and it would actually start in 2 months, when I pushed back).

We immediately suspended all our Synthetics tests. It’s nice having them with the rest of our Datadog stuff, but it’s not 10x better than Pingdom.

Datadog is still a great tool overall, but experiences like that make me wary of putting all our eggs in the DD basket and getting locked in.

This looks great! I notice you mentioned Prettier in the post — do you have any plans to integrate sqlfmt with that?

Prettier actually has a beta Postgres plugin, but progress on it seems to have stalled. Hooking it up with sqlfmt would be neat - then prettier could format SQL inside other languages too, like code fences in Markdown or template literals in JS.

Shopify app dev here -- it seems to be incredibly widespread; we haven't received a single webhook from Shopify in over 10 minutes and all our inbound traffic from Shopify dropped like a stone.

That's some outage! Looking forward to a post mortem.

(edit) Everything seems to be back now - lasted around ~10 minutes.

We’ve been running Postgres on i3 instances with their attached SSDs. Performance is solid and it’s cheaper too. Having up to date replicas becomes crucial, along with incremental backups (we use wal-e for that).

As you mentioned, it is limited by instance size, but for a DB that fits it works great and has fewer moving parts. Knowing that your entire database is essentially ephemeral raises the stakes too and forces you to take replication, backups and restore testing seriously.

We’ve been using Patroni in production and it has been great. We use it with consul & pgbouncer and it can failover in under a minute with a small number of dropped requests (mostly bound by how many clients your pgbouncer can hold at once while the new master gets going). Controlled failover for upgrades or maintenance can be as quick as 10 seconds.

I'd say even small room scale benefits from the Vive tracking. My VR space at home (aka living room) is just barely 2x2m, but setting up the Rift in there was an exercise in frustration and a mess of USB cables.

I first tried the experimental 2 camera 360 tracking which sort of worked but had plenty of dead zones. The official line on that is to add a third sensor, which I did. It came with a 5m USB extension cable which wasn't long enough to reach the back of the room so I had to hunt around for a 10m extension instead; that in itself is a gamble as everyone's mileage seems to vary as to what will work for them.

After setting up all the cameras I still had to ignore lots of "low quality tracking" errors reported by the setup - apparently that's because my motherboard couldn't provide enough juice for all the cameras and the headset.

The lighthouses in comparison are just great. I just screwed them into the wall, plugged them in to an outlet and that was it.

I do prefer the touch controllers. The capacitive buttons are superb and well used in many Rift games. The headset itself is more comfortable than a vanilla Vive, although the Vive's deluxe audio strap make them equally as comfortable for me (at significant additional expense!)

We do this for our CI and it works well; we use I3 (spot) instances, introduced earlier this year, which have large amounts of NVMe instance storage. It is essential to push everything you want to keep to S3, ECR, etc so it won't work for every case, but I'd recommend it if possible. And of course, if the instance does go down, your Docker cache goes with it so you'll suffer slow builds while it warms up.

The I3 instances are pricey, but if you can suffer possible CI outages and everything is self-healing, they're extremely cheap as spot instances.

Happy to answer any questions about it. We've been using Buildkite for a while - it has been a pleasant experience and has let us craft a CI setup whose cost would be prohibitive to us otherwise.

Another similar option we tried is AWS CodeBuild which has per-minute billing and provisions the build machines for you. However, it's very bare-bones and because you always get a from-scratch instance for each build you have to distribute your docker cache which is not ideal.