3,239 karma · joined October 20, 2010
Always happy to meet a stranger, please reach out any time: hn @ peterdowns.com
[ my public key: https://keybase.io/peterldowns; my proof: https://keybase.io/peterldowns/sigs/9N-85LOZH1eJMXHLR70WroivxJB1is_s3ye5IT5xzxs ]
I don't think I've ever seen a website respect my phone's text size, and frankly I didn't know it was posisble, this Airbnb blog post is cool and makes me want to update my own sites.
Visible $25/mo:
> Typical 4G LTE & 5G download speeds are 9-149 Mbps. Video streams in SD. In times of traffic, your data may be temporarily slower than other traffic.
> Visible includes mobile hotspot with unlimited data at speeds up to 5 Mbps. Video streams in SD. While more than 1 device may be connected to your Hotspot at one time, a single connected device will experience optimal speeds. Performance will be reduced if multiple devices access data through the Hotspot simultaneously. Actual data speed, availability and coverage will vary based on device capabilities, usage, your location and network availability. Service is not available while roaming.
Visible $45/mo:
> Visible+ gives you unlimited premium data on Verizon’s 5G Ultra Wideband network, the fastest 5G network access we offer — up to 10X faster than median 4G LTE speeds. Premium data means no data slowdowns due to prioritization. Download apps, games, entire playlists and TV series in seconds.
> Visible+ also gives you 50 GB/mo of premium data on Verizon's award-winning 5G & 4G LTE networks when 5G Ultra Wideband is unavailable. Premium data means no data slowdowns due to prioritization.
> Typical 4G LTE & 5G download speeds are 9-149Mbps. Video streams in SD. After 50 GB, in times of traffic, your data may be temporarily slower than other traffic.
Second:
> allow me to assist in your understanding of the bigger picture: large funds use VCs as money mules to increase Nvidia GPU sales through investments in AI startups and this is not sustainable.
You have to be trolling (or I'm misunderstanding?) if you're arguing that a large proportion of VC investments are at the direction of LPs who are long NVIDIA, for the sole purpose of furthering that long.
> if large funds are unloading their shares, if executives are cashing out their stock options, who is left to buy the bags?
Literally the buyers purchasing the shares that the large funds and executives are selling.
[0]: https://github.com/peterldowns/localias/blob/main/Justfile#L...
[1] https://flink.apache.org/what-is-flink/flink-applications/#b...
EDIT: degenerate example, but still a good explanation.
By the way, there's a demo running here for the linux kernel, you can try it out and see what you think: https://livegrep.com/search/linux
EDIT: by the way, "code search" is deeply underspecified. Before trying to compare all these different options, you really would benefit from writing down all the different types of queries you think your users will want to ask, including why they want to run that query and what results they'd expect. Building/tuning search is almost as difficult a product problem as it is an engineering problem.
Spend the first 10m of the meeting silently reading these updates. Then have each lead verbally give a condensed summary of their update (DONT ALLOW them to read verbatim) with a focus on the information that everyone on the team really needs to know, especially problems and blockers. Make sure they do verbally say what their next incremental unit of progress will accomplish and when they expect to have it done.
You can do “people” instead of “projects” for smaller team.
Oh, and keep all the notes and updates in a single shared doc that you add to the top of each week.
> Given it's not user facing prod code, I'm assuming high-performance isn't critical, and the nature of what it's doing means using `once.*` is worth the trade-off with concurrency.
I'm impressed you noticed this. I don't do a good job of explaining this in code comments or docstrings, but the linearization / contention is necessary for correctness. Basically, each time someone asks for a new testdb, the code needs to make sure the relevant user exists, and the relevant template exists, and has the migrations run on it. If these things don't exist, the test will need to create them. With many tests running in parallel, they need some way to contend and make sure that the user/template is only created once.
Because golang runs the tests of separate packages as totally separate processes, the code does the contention with "advisory locks" inside the Postgres server. When two tests are contending on these advisory locks, they have to hold a connection open to the server. As a result, server speed and max simultaneous connections are the primary limiters of how many tests can be operating in parallel and how fast your test suite runs.
I added the `once.*` helpers to move the contention "left" where possible, to the memory of the packages that are being tested. Within a package, tests can (and should) also run in parallel. The `once.*` helpers force the different tests to contend in the shared process memory, the theory being that it's faster and that it reduces the number of server queries/connections held open just waiting around on a server-side lock.
I haven't actually tested the code with and without this, and thanks to your comment I will try to do this at some point!
If this is actually just Postgres running in an x86 emulator (*edit: originally this said "compiled to wasm"), then how could this be faster than Postgres in any given environment? I don't understand — if it were faster, wouldn't you just want to deploy this in prod in your weird environment rather than Postgres? Why limit this to mocking?
- https://wiki.postgresql.org/wiki/Lock_Monitoring
- https://wiki.postgresql.org/wiki/Lock_dependency_information
The "Recursive view of blocking" on the second page has been extremely helpful to me. You don't ever want to need this query but if you do, it's great. You should follow the page's recommendation and set it up as a view you can use if shit ever hits the fan.
...although you may want to show all the locks each pid has acquired, instead of the summary the query gives as written, by modifying it to use
array_to_string(locks_acquired, E'\n')
instead of array_to_string(locks_acquired[1:5] ||
CASE WHEN array_upper(locks_acquired,1) > 5
THEN '... '||(array_upper(locks_acquired,1) - 5)::text||' more ...'
END,
E'\n ')