HNHacker News
TopNewBestAskShowJobs

amirkdv

741 karma · joined August 9, 2013

amirkdv.ca
submissionscomments
amirkdv··on Assange case: Key witness admits he lied
The proof is in the pudding. Where is Assange right now?
amirkdv··on Poisson's Equation
> you can show [...] every linear differential operator [that commutes with translations and rotations] is a polynomial in the Laplacian.

I may be tripping over something here but this doesn't sound right. If you mean polynomial in the real number sense, i.e.

Lu = a0 + a1 Delta(u) + a2 Delta(u)^2 + ...

(where Delta = Laplacian, and a0, a1, ... real numbers), then is this true? The famous wave operator doesn't have this form.

And if you mean "polynomial" as in a series over function space, i.e.

Lu ~ a0 + a1 Du + a2 D^2u + ... (infinite terms, not equality but convergence)

where D is the usual differential operator and a0 is a number, a1 is a 1-d vector, a2 is a 2d matrix, so on, then this is standard calculus of variations on any reasonable function space. Taylor series for function spaces if you want. I don't think that's limited to nice Galilean operators.

amirkdv··on Focus vs Coordination
This is a really good description of a natural tension any engineering team has to deal with. I specially liked the framing of pair programming as a powerful hybrid.

A challenge the OP doesn't touch on is the need for individual focus _during_ coordination events. For example, someone is presenting their design ideas to an audience who's seeing them for the first time. In order for the coordination to be productive, the audience needs to be good at focusing in realtime to grok the ideas presented to them. It'd be unfortunate to rely on your team's ability to pull off a burst of focus on demand. Some can do this well, some can't, and you only water down your coordination if you rely on it too much.

I've read about and quite like writing-heavy workflows, e.g. presenter writes and shares a 4-6 pager, or meeting starts with people silently reading a memo. The async-ness and the reliance on written word pulls a lot of weight when there's too much depth/breadth involved; the kind of thing that happens a handful of times a quarter.

But this is hard to pull off consistently every week for small iterations that nonetheless need coordination on cognitively demanding topics.

How do folks deal with this?

amirkdv··on Setup AWS Cloudwatch Monitoring and Alerts Using Bash Scripts
We've been looking at making CloudWatch (CW) alarms an automated part of our infra. Here are some findings that may help:

- The semantics of CW seem convoluted. But once you stare at API docs for long enough, the core concepts are easy to grok: Metrics (regularly submitted from machine to CW), Alarms (abstractions for defining the logic of an alarm based on behavior of Metrics), and SNS Topics (could be just an email address, for what to do when an Alarm goes off).

- Once you get the data model right, all implementations (click ops, terraform, bash via awscli, boto3, etc) are all visibly identical.

- Some Metrics come for free, e.g. CPU usage is reported by any EC2 instance to CW. For some other Metrics, notably disk and memory usage, you need to configure your instance to report them to CW. This is where the OP's monitoring scripts come in.

- The monitoring scripts and the cron config the OP refers to are deprecated [0]. Instead there's a new CloudWatch Agent [1]: you install the package on your EC2 instances, provide a configuration file to it, and you're set.

[0] https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/mon-scri...

[1] https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitori...

amirkdv··on Engineering Management
I suppose link compilations like this have some value some times. But if you clicked on it because you're new to EM and keen, here are a few books that are much more helpful IMO:

- The Manager's Path, by Camille Fournier

- An Elegant Puzzle, by Will Larson

- Team Topologies, by Matthew Skelton and Manuel Pais

- Thinking in Systems, by Donella Meadows

- Also see: references cited in the above and other works by same authors

Disclaimer: Not a seasoned EM and definitely not the first to recommend these on HN.

amirkdv··on Today we’re eating the winners of the 1948 Chicken of Tomorrow contest
I get that this is probably mostly sarcastic humour, and I'm not trying to dispute the kernel of truth. No serious person loses sleep over our mass murder of malaria-carrying mosquitoes.

But there is a line _somewhere_ on the natural spectrum of life forms, from microorganisms, to plants, to bugs and vermin, to dogs, pigs, primates, and humans, where our attitude about loss of life and/or a miserable life changes. Where are you suggesting we put that line?

EDIT: wording

amirkdv··on Today we’re eating the winners of the 1948 Chicken of Tomorrow contest
> They're "meant" to make food, either via eggs or meat, not to have a specific lifespan.

By this standard, there is no such thing as abusing a domesticated species. They're "meant to" satisfy human need X, and everything else is irrelevant.

amirkdv··on Humans Could Live up to 150 Years, New Research Suggests
Because all other scenarios are uninteresting to the deceased?
amirkdv··on In praise of --dry-run
I'm adamantly pro dry-run and like OP I've found that you really need to design for it. From my experience, OP's two main ideas are spot on: librarification and pushing dry-run logic deeper into library code.

Here are two other things I've found:

1. Regardless of where you push your run/dry-run dispatch to, the underlying "do it" logic really needs to be factored properly for individual side effects (think functional). Otherwise, you inevitably end up with loads of "if dry-run / else" soup or worse, bugs _caused_ by your dry-run support.

2. You still need safety nets for when someone is doing dangerous operations without dry-run. Pointing and calling [0] is a great trick for this. For example, say your tool is about to delete X, Y, and Z. Instead of a simple "Yes" confirmation which the user would quickly end up doing on auto-pilot, you could have a more involved confirmation like "Enter the number of resources listed above to proceed" and then only proceed to delete if the user enters "3".

Very curious to hear about design idioms folks have come up with!

[0] https://en.wikipedia.org/wiki/Pointing_and_calling

amirkdv··on Nonnative English speakers share their gripes about speaking English
The dual origin story of the English language is quite fascinating!

There's a Wikipedia page dedicated to a list of just what you described, synonymous words with Romance vs Germanic origins.

https://en.m.wikipedia.org/wiki/List_of_English_words_with_d...

amirkdv··on Yoga and Breathing Exercises Aid Children with ADHD to Focus
The power of breathing over mind/body regulation seems highly underrated, in the West at least.

I certainly knew nothing about it until I read this feature article [0][1] and the resources it pointed to.

[0] https://www.theguardian.com/lifeandstyle/2020/jul/26/every-b...

[1] HN thread: https://news.ycombinator.com/item?id=23962638

amirkdv··on How to use RabbitMQ in service integration
Curious: what kind of load are you throwing at RabbitMQ?
amirkdv··on Half a million lines of Go
> if you're trying to argue that the testing problem in Python is the same as that of Go or Rust

Wasn't trying to make that case, but I can see how my comment could be read that way.

I was genuinely trying to understand what the parent comment meant. Specifically whether they were saying error control code is _the_ critical but hard to test part of a code base (which I don't think is typically true), or rather error control code is just an example among many of less frequently executed paths in code, which categorically is easier with a static type checker. I think they meant the latter and I don't disagree with that.

amirkdv··on Half a million lines of Go
> these dynamic languages doing contortions to deal with basic things like concurrency

I get the concurrency gains, esp with older versions of dynamic languages without native support for coroutines.

But the test coverage argument seems quite contorted. If you're accepting 92% coverage because the "return an error" lines are not worth testing (fair) then why is that harder to achieve in, say, Ruby or Python? Is the argument that your 92% coverage in Go is _effectively_ 100% because compiler?

amirkdv··on Why psychology isn’t science (2012)
> The problem there is that subject well-being is time-variant.

> If I ask you 3 seconds apart, though [...] would you not expect consistent results?

I completely agree with your original comments about lazy writing by the OP. But these all seem besides the point.

Our bodies and minds go through all sorts of states, some cognitively introspectable, some not.

"Happiness", whatever it may be, is what it is and need not conform to your presumptions. That's the point of studying it. Nothing about its fluctuations or the way these are felt by an individual are a problem per se with the research. It just means it's hard to do, and we may not know a whole bunch about it.

amirkdv··on Why psychology isn’t science (2012)
You may be assigning more intent than is necessary to explain the (very real) reproducibility problem in psych.

Not to belabor this but to note the irony here: there is probably a similar psychological (ehem) phenomenon that happens to a psyc grad student who lets their presumptions bleed into their interpretation of a measurement.

> The first principle is that you must not fool yourself — and you are the easiest person to fool.

R. Feynman

amirkdv··on Be in a field where tech is the limit
Sure!

Our domain is precision oncology. In brief, this is about matching cancer patients with available targeted therapies by examining the genome of their cancer. This is different from how the majority of cancer patients are treated today: surgery and {chemo,radio}therapy.

Here is a problem in our domain where tech is one of the limiting factors.

If you look at the DNA of any cell and compare it against the reference genome, you'll find a lot of differences, aka variants. Typically even more so if you're looking at a sequenced tumour (~1e6 variants). This is your hay stack. And a variant that can be medically targeted to treat the cancer is the needle. The definition of what variant is "clinically relevant" is layered, context-dependent, and (partially) regulated. Software is responsible for automating away the majority of variants, say down to 10-100, in a justifiable, traceable way. It's also responsible for giving tools to the clinician to deal with the remaining ones. This manual step typically involves an informed line of questioning about each variant backed by 100s of supporting data points about it.

Without these two tech pieces, interpreting a single molecular pathology report can and does take many hours of (expensive) expert time, instead of minutes. For a rough sense of scale: human genome has ~3e9 nucleotides (ACTG), has ~3e4 known genes, ~1e6 known gene interactions, and ~1e8 known variants. Typical whole genome sequencing produces > 30GB of raw data (compressed).

This is probably the first problem everyone runs into. There are plenty of other ones, some more challenging and interesting than others. Feel free to send me an e-mail if you'd like to discuss this more! amir[at]streamlinegenomics.com

amirkdv··on Be in a field where tech is the limit
The grievances shared in this thread re biotech salaries are certainly valid, no doubt. But the field is slowly going through a generational change. There are more and more companies that organize themselves around engineering (software or not) as their main mission. These workplaces then have to grapple with the fact that in order to attract engineering talent, the historical wage suppression of biotech needs to go.

Shameless plug: I'm CTO at Streamline Genomics, a Canadian biotech startup, and tech is our limit. We're remote-first and we're hiring for a bunch of positions: https://www.streamlinegenomics.com/careers

amirkdv··on Timeline of Mathematics
Taking the countries of origin of the mathematicians chosen here as a proxy for the amount of "mathematics done" in each region shows a few patterns.

Notably the explosion of math in Europe from the 1500s.

I wonder if the printing revolution had something to do with this.

Gutenberg died in ~ 1470

amirkdv··on When Feynman met Dirac (2020)
Nitpick worth exploring on your valid point about our times: while stress can definitely be disruptive to deep cognitive work, it's a very different neuro/physiological processes than attention/focus (as you say: "attention grabbing world")

One can be quite relaxed but not at all focused and vice versa.

amirkdv··on Human use of high-bandwidth wireless brain-computer interface
This is reminiscent of the novel Manna [0]

[0]: https://marshallbrain.com/manna1

FWIW I think this is probably many, many decades away from being even possible.

amirkdv··on Write Simply
It feels like this particular essay has much shorter sentences and much shorter paragraphs. And it does stick out uncomfortably to me a bit to me as well.

On the general point of shorter sentences, I've found it to be an excellent first approximation rule. Follow it religiously if you're new to making your writing reader-friendly. Later on ... keep following it. But allow your discretion to override it sometimes.

amirkdv··on Ask HN: Who is hiring? (March 2021)
Streamline Genomics | Multiple positions | Remote | https://streamlinegenomics.com

Do you want to build modern software systems at the cutting edge of cancer medicine?

We're creating the precision oncologist's computational toolbox: from data pipelines that sift through tumor genomes and filter and visualize mutations, to collaborative knowledge curation (think wikipedia, but for cancer genomics). It’s still the early days for us and there are plenty of high-impact challenges to solve!

Prior knowledge of biology is not required, but keenness to learn is.

We're a remote-first team with a timezone preference for the Americas. We're hiring for multiple senior positions (Backend, Frontend, Data/ML, Infrastructure/Security): https://angel.co/company/streamline-genomics/

--------

About you: You can comfortably debug across the stack and through system boundaries. You've been around the block and have your ideas about designing for security and performance, leading software projects, and evolving team processes.

About us: We have backgrounds in CS, medicine, and bioinformatics but we're primarily a software team and pride ourselves in our craft: We move fast and iterate, but write tests and have a QA protocol. We enable engineers to run with good ideas and ship, but we write design docs for risky projects and run retros after the fact. All our systems have CI/CD and our release cadence is as fast as we can build.

Current stack: Python 3 (Django, Flask, numpy, asyncio, pytorch), JS (node, d3, React/Vue), relational DBMSs (MySQL, Postgres, SQLite), docker, AWS, terraform, GitLab CI/CD.

Write to us: work [at] streamlinegenomics.com

amirkdv··on YouTube blocked chess channel after mistaken detection of racial slurs
> Why do we need laws around this? We need to hold the people accountable [...] [T]he people that okay'd its use need to take responsibility.

Genuinely asking: what do you think profitable companies would do to their ML engineers over a product issue like this if there was no law under which they would be sued?

I think accountability without an enforcement mechanism is just a wishful suggestion.

amirkdv··on Mistakes I've Made as an Engineering Manager
> Mistake 1: Thinking people give feedback the way they want to receive it

Yes, deciding how to deliver feedback could be a nuanced, delicate challenge.

But a non-obvious related problem I've found is whether to deliver it at all. The mistake there being that people want or can benefit from the feedback you think you would've wanted, were you in their position.

amirkdv··on Artificial Neural Nets Finally Yield Clues to How Brains Learn
You're describing the deep dissonance I was feeling a decade ago when I first stepped into AI research. I just kind of always assumed that studying AI would necessarily have a strong focus on how biological intelligence works. And boy was I wrong.

Knowing a bit more now, this gap makes some sense:

1. Neuroscience is really, really hard. Even with the unbelievable recent advances, we're still years away from having a clear understanding of the mechanics of learning and memory.

2. The drift between AI and the broader cognitive sciences started in the 70s, seemingly borne out of pragmatism and the difference in goals between engineer types and scientist types.

amirkdv··on Why “Trusting the Science” Is Complicated
> It feels to me like "science" has become something of a religion unto itself

I think this is true but I doubt it's anything new. I think the fundamental similarity between religious belief and "trusting the science" is the psychological simplicity of delegation to authority, and probably a deep seated property of the human mind.

Not knowing the right answer to questions we deem important, or worse the mental state of doubting what we've been raised to consider foundational and "obvious", is just too uncomfortable for the majority of people (I would've said all people, but I can't be sure).

amirkdv··on Differentiation Under Integral Sign (2015) [pdf]
Terrence Tao's measure theory text is one of the best undergraduate math textbooks I've ever read. It teaches you not just about the subject, but about how to approach it the way a mathematician does.
amirkdv··on Pattern matching accepted for Python
This part is truly strange. This example from the tutorial drove it home for me:

    match event.get():
        case Click(position=(x, y)):
            handle_click_at(x, y)
        case KeyPress(key_name="Q") | Quit():
            game.quit()
where `Click(position=(x, y))` is not at all what one would expect.

What I still don't understand is: does the new syntax magically do this to a user-defined class? i.e. if I say

    foo = Click(position=(x, y))
vs

    ...
    case Click(position=(x, y))
those identical expressions, for the same value of Click, have widely different semantics?

edit: typo fix

amirkdv··on Pattern matching accepted for Python
Worth noting that this was _fixed_ in Python 3.

In Python 2.7 you get this:

    >>> my_list = [x for x in 'hello']
    >>> x
    'o'
← PreviousPage 2 of 4Next →