HNHacker News
TopNewBestAskShowJobs

joatmon-snoo

2,385 karma · joined December 1, 2015

hackernews[at]sxlijin[dot]com
submissionscomments
joatmon-snoo··on IBM's Asshole Test
2006 was... early. I don't remember when HCs were formed, but there's no way the internal ATS had any level of sophistication, if it even existed then.

(Admittedly this is all years before my time.)

joatmon-snoo··on What Flips Your Bit: Cosmic Ray Errors at Mozilla
The last time I did research into this, this was the most concrete real world example I could find, which works out to ~41 bitflips/GiB-month:

> Jaguar had 360 terabytes of main memory [and] was logging ECC errors at a rate of 350 per minute

Source: https://spectrum.ieee.org/how-to-kill-a-supercomputer-dirty-...

joatmon-snoo··on Eden
Open sourcing an internal repository with extensive, ongoing work on it is always a difficult affair, because you're creating a second source of truth. (It isn't just how you manage external contributions, but also workflows like releases and CI.)

I wouldn't consider this to be a problem.

joatmon-snoo··on Atlassian products have been down for 4 days
+1: we use them too and they have a reasonably flexible product in terms of labelling and project definitions. The only notable complaint I have is that the search doesn't support negative filters.
joatmon-snoo··on A Bitcoin bust that took down the web’s biggest child abuse site
Extradition is generally thought of as when a person from country A who is convicted of a crime in A flees to country B, and country B then extradites said person to country A to serve out their sentence.

It's not meant to be a system to convict people incapable of defending themselves in a foreign court.

Plus, there are extradition treaties: countries A and B have to _agree_ to the conditions under which A will extradite to B and under which B will extradite to A.

> The proper process should be like this: if country A thinks that someone from country B has committed a crime against them then they should come to that country and prove it in a court without being able to add additional charges.

Courts in country B generally have close to zero understanding of the legal minutiae of country A. Ignoring jurisdiction questions, what you're suggesting is that courts in country B have to:

  * understand the hierarchy of the legal system in A (what precedent is binding, what precedent is advisory),
  * understand what is and isn't a law (e.g. if A is a common law jurisdiction and B is not),
  * somehow reconcile legal procedures in A with legal procedures in B (e.g. when are you allowed to ask the judge to dismiss a case? what's an acceptable situation to ask for N more weeks for discovery? how much time is considered reasonable? who do you file paperwork with?)
  * somehow decide what constitutes a qualified attorney (e.g. in the U.S., every state has its own qualification process for attorneys to practice in that state, so being admitted to the bar in Colorado doesn't mean you can practice in Florida, and this also extends to the federal govt)
and goodness knows what else.

In general it's good to assume that if there are millions of people in a given system, there are _reasons_ (not necessarily good ones, just plausible ones) the system works that way, particularly when it's a system you have zero understanding of.

joatmon-snoo··on Spotify and Google Announce User Choice Billing
s/shopify/spotify/

https://cloud.google.com/customers/featured/spotify

joatmon-snoo··on So you want to study mathematics
Education is a Hard Problem TM because the knowledge of those links isn't useful without sufficient existing knowledge, and you need to introduce things in a way such that the things you hand-wave away are tolerable knowledge gaps. Knowing that a CDF is an integrated PDF isn't useful for someone who doesn't even have a notion of what a PDF is. Describing a state machine that satisfies conditions X Y Z as an Abelian group is similarly not useful for someone who doesn't have an intuition for groups or fields.

My claim is that, given the finite amount of time allotted to mathematics in a secondary school curriculum, it's better to spend that time learning about medians/means, regressions, statistical tests, and so forth, instead of memorizing power laws and derivatives of trigonometric functions.

joatmon-snoo··on So you want to study mathematics
My strong opinion as someone who majored in math is that, at least within the US, the standard calculus requirement should be replaced with statistics. So much more useful and so much more important as an adult.

The analytical type of thinking that proof-writing is certainly useful, but you can make much the same argument of many other curricula, and besides, it's not like most intro calc courses even do any proofs. The vast majority of them, I would assert, are simply pre-med weed-out courses.

I still remember freshman year, showing up to the standard intro calc course, and dropping it as quickly as I could in favor of my uni's equivalent of Math 55 (i.e. the hardest u/g intro math course) because of how asinine I found the content...

joatmon-snoo··on Please, delete all new places since the start of war 23th of February
> doesn't clearly explain that Google eventually established SK data centers and started supporting vector maps anyway

Google data centers != Google cloud data centers

The two are logistically very different and consequently that means the types of workloads they host are also different. The latter is really for GCP usage only (both customers and Google-internal cloud infra necessary to host GCP). Compare https://www.google.com/about/datacenters/locations/ with https://cloud.google.com/about/locations.

joatmon-snoo··on What is the purpose of check-in before flying? (2014)
The problem is that you're not dealing with one vendor though: you're actually dealing with N+1, where the +1 is just an opaque intermediary to the N services it's brokering/reselling.

When there are no issues, this works fine.

If there are issues? Be prepared to do the customer service tango, and hope that the person at check-in understands how $intermediary actually resells their stuff and knows the right knobs to twiddle, because otherwise you're shit outta luck.

joatmon-snoo··on Postman Now Supports gRPC
That's called a competing product :)
joatmon-snoo··on Why our team cancelled our move to microservices
It definitely depends on the shortcuts you take! e.g. if you run #1 and #2 with the same identity, you don't have to figure out how to make your ACLs work... but you're also breaking principle of least access :)
joatmon-snoo··on Nature Neuroscience offers open access publishing for $11k per article
Find their email address, write them, and ask. They're more likely than most people realize to respond.
joatmon-snoo··on Why our team cancelled our move to microservices
Monolith vs microservice is not a dichotomy, it's a spectrum (as it is with so many other things). Individual microservices can still become monolith-y and become responsible for doing a Lot of Things (TM).

That being said, the biggest hurdle in a re-architecture project like this is usually in the "n=1 -> n=2" stage, and "n=2 -> n=5" is a lot easier: once you add service #2, you learn how to set up telemetry, permissions, billing/chargeback, alerting, etc. The next few are just repeating the same process.

joatmon-snoo··on Dear sir, you have built a compiler
> you can know enough about isomorphic decisions you've made in other domains to drive design in a new domain, without necessarily understanding implementation.

That's certainly true!

I'm not at 5 years yet in the industry myself, but I've definitely started to notice these patterns - the strategy vs tactics is a nice way to describe it :)

> Perhaps you haven't dealt with machines of sufficient scale—the abstractions really do come back together! The IBM z/OS kernel knows about draining+evicting hotplug NUMA nodes as schedulable resources (and doing health-checks to automatically enable that), in exactly the same way that Mosix or TORQUE or kube-scheduler knows about draining+evicting machines as schedulable resources (and doing health-checks to automatically enable that.)

Oh, this is interesting. My experience has been as a Google-internal user of Borg, where although the fleet is large, most of the machines are individually small enough that it's easier for us to simply evict a machine from the fleet rather than block a core. (The whole "commodity" server strategy, whereas z/OS follows a very different architecture, but I see exactly what you mean there.)

joatmon-snoo··on 5% of 666 Python repos had comma typo bugs (inc V8, TensorFlow and PyTorch)
If a linter provides autofix suggestions, we will propagate it all the way back to the user!
joatmon-snoo··on Grep one-liners as CI tasks
> But linting and config validation are very different use cases. At a previous company I had test that loaded a set of configs from repo and made sure all of them were valid with app level logic.

Understandably so, especially when you might need, say, an AWS permission to actually validate a config (or are there other distinctions between the two that I'm not thinking of?)

I wasn't previously aware of treesitter, but it definitely looks like the type of thing we eventually want to do!

One of the things we currently do is run our own daemon and LSP proxy, so that we can share functionality between the CLI version of our tool and the VSCode extension. Right now we treat most linters as CLI black boxes, but we're looking at moving to treat more of them as LSP servers (we currently do this with eslint, but don't yet with ones like clangd or tflint).

And there is indeed more that we're building out! The other product that we're actively prototyping (and dogfooding) is our merge queue: https://trunk.io/products/merge.

Long-term, the vision for Trunk is to make development overall a more seamless experience, by actually tying together the various disparate tools that solve individual problems that we run into.

joatmon-snoo··on Grep one-liners as CI tasks
Thanks for the feedback! All of those are very real problems and we've spent a lot of time thinking about how to handle them:

> Either you just fail and ask the user to resubmit or you fix up the formatting on their behalf.

We only apply autofixes when running on the user's machine; when running on CI, as you point out, we only show them because of Git's decentralized nature here.

> The secondary problem is that the lint tool chain running locally sometimes doesn’t version match what’s in CI which poses a set of problems too, although in practice I think that’s raised as a concern only by teams that don’t establish good hygiene of checking in the set of tools (maintenance of multiple platforms is real there though).

We've built out our own system for managing (mostly) hermetic toolchain installs, and require users to version their linters in their trunk.yaml configuration right now. (There are some open questions here around how we handle version skew between our toolchain version and the system-installed toolchain version.)

We're also well aware of the problems that emerge as you scale to a larger team; hierarchical configs are one of the things that we've discussed but are waiting until we have more traction to flesh out. (All of us working on the linter side have experience setting tech direction for orgs of 100+ engineers).

joatmon-snoo··on Grep one-liners as CI tasks
Tests are a good way to assert an invariant that you expect of your codebase, but as with all things, resolving the error can get a bit tricky/frustrating.

The canonical example in my mind is any kind of autofix-able linter, where there's some kind of patch (or more nuanced autofix) that the linter can generate on-the-spot for you. With a sh_test construct (or any other test), you generally find yourself printing out some command that the user can run to fix things, which in a sufficiently large codebase can get really frustrating. (The worst offenders of this that I remember dealing with at Google were when generated code/artifacts had to be checked into the repo instead of getting being wired into the build system because <insert hermeticity problem> and a large-scale change you were doing looked at one of them the wrong way...)

(My company - https://trunk.io - is actually building a universal linter as part of our product offering, and we already have a system to write custom linters with varying levels of sophistication that can plug into both your IDE and CI system!)

joatmon-snoo··on Grep one-liners as CI tasks
Shameless plug: if you find yourself wanting more advamced custom painting, you can try http://trunk.io, which provides you with three different ways to write your own linters (pass/fail based on your script's exit code, spit out a patch that should be applied to your code, or LSP diagnostics) that can get propagated to VSCode and CI (as well as just as a CLI tool, if that's your preference).

Disclaimer: I work on trunk :)

joatmon-snoo··on We used C++20 to eliminate a class of runtime bugs
I recently bumped my company's fmtlib version to the one that has compile-time format strings, and it's been such a load off our minds to not have to worry about this anymore. We're reasonably early stage (12 people right now) and even with all of us being reasonably senior, I still found a few callsites where the compile-time format string caught bugs.

(FYI: for anyone holding off on this because of issues with spdlog, enough has been fixed in the latest versions of both that you can upgrade them together now.)

Also worth noting: the UX of fmtlib's compile-time format strings is actually quite interesting. There are error callbacks in the consteval calls that take advantage of the context that compilers show in compilation failures that detail the mistake being made.

(Aside: I'd also like to note that `absl::StrFormat` has supported compile-time format strings for quite a long time. https://abseil.io/docs/cpp/guides/format)

joatmon-snoo··on Dear sir, you have built a compiler
Yes, but also no- I see what you're saying from a high level, but my point is that the devil's in the details and that you can't know all the details of each domain, the best you can do is be aware that those details are there. Just being exposed to even a subset of the high-level is pushing the limits of a 4-year undergrad curriculum.

> What is a SQL query planner but a compiler?

Kind of? Lexing, sure, and to some extent IR, but an execution plan is not built from an instruction set, especially when you start talking distributed. Even if you ignore the distributed scenario, there's still a huge difference between understanding indices/columnar-storage/row-storage and implementing PGO or LTO.

Plus, there's also a lot of domain complexity here- are you aiming for just ANSI compat, or are you going deeper and trying to be compatible with specific SQL Server / Oracle / Postgres features?

> Is an OS scheduler really that different from an HPC workload manager, or your GPU's computer-shader arbitrator?

Knowing little about HPC or GPUs, all I can say is that yes, there's absolutely a difference between the kinds of issues a kernel, hypervisor, and distributed scheduler have to deal with. Hypervisors need to integrate with higher-level RBACs, for one; distributed schedulers also need to be able to evict bad machines from the same system.

Telemetry also changes massively: if you're dealing with a kernel/hypervisor, stats from things like strace etc are useful. If you're distributed? You now have multiple cardinality problems (hostname, network devices, microservice release ID).

> Is RDMA against an NVMe storage pool fundamentally new to you if you've already written hierarchical chunk persistence+caching for a distributed key-value store?

Again, yes (at least I assume so, I'm not super sure exactly what "NVMe storage pool" is, I assume you're talking about the protocol that SSDs speak) - e.g. what's your resilience story against a network failure (someone cutting a fiber line, or losing a subgraph of a clos fabric)?

joatmon-snoo··on Dear sir, you have built a compiler
The problem, of course, is that it's impossible to know everything :)

IME the best compromise I've found is to learn enough to recognize the problems, so that when I implement a bastardized compiler, I'm aware that that's what I'm doing and that at some point in the future I'll need to decide how deep the implementation should go or switch to actually using some library.

joatmon-snoo··on 5% of 666 Python repos had comma typo bugs (inc V8, TensorFlow and PyTorch)
I actually recently joined a startup working on this problem!

One of our products is a universal linter, which wraps the standard open-source tools available for different ecosystems, simplifies the setup/installation process for all of them, and a bunch of other usability things (suppressing existing issues so that you can introduce new linters with minimal pain, CI integration, and more): you can read more about it at http://trunk.io/products/check or try out the VSCode extension[0] :)

[0] https://marketplace.visualstudio.com/items?itemName=Trunk.io

joatmon-snoo··on 5% of 666 Python repos had comma typo bugs (inc V8, TensorFlow and PyTorch)
Admittedly, the difference here is that codereview.doctor spent time tuning a custom lint on a variety of repos. In an org with a sufficiently large monorepo (or enough repos, but I don't really know how the tooling scales there) it's possible to justify spending time doing that, but for most companies it's one of those "one day we'll get around to it" issues.
joatmon-snoo··on How to design a house to last 1000 years
Yes, the research came out a few years ago: https://pubs.geoscienceworld.org/msa/ammin/article/102/7/143...

tl;dr: we took a long time to realize that the Romans didn't use potable water, they used saltwater; the volcanic ash they had access to was also very important

joatmon-snoo··on I bought those AR cycling glasses that were on HN last month
Recent H1 here- how responsive are paraglider controls? I feel like for hanggliding I want to see those numbers while I'm airborne, but have no idea if they'd be useful because of how sluggish the response can be.
joatmon-snoo··on Comp.lang.c Frequently Asked Questions
cache alignment also gets stupid complicated when you add in what kind of malloc you use, c.f. google's tcmalloc: https://github.com/google/tcmalloc
joatmon-snoo··on Atomic Gardening (2017)
Fun fact: mutagenized crops are generally not considered to be GMOs.

From https://geneticliteracyproject.org/gmo-faq/glp-tackles-one-o... :

> [...] chemical/physical mutagenesis and a lot of other techniques are “unnaturally” performed “in the lab” but are not classified as GMOs.

joatmon-snoo··on New Ways to Be Told That Your Python Code Is Bad
I've actually found that there are a number of situations where I really want:

  while True:
    ...
    if condition:
      break
    ...
and kinda wish there was a nicer syntax for this.
← PreviousPage 4 of 18Next →