Preferences

noelwelsh
Joined 9,402 karma
I'm interested in machine learning, distributed systems, programming languages, and entrepreneurship. I have a personal site at https://noelwelsh.com/

I'm a partner at Inner Product (http://inner-product.com) and Underscore (http://underscore.io), where I teach, mentor, and develop Scala.

I'm previously was a co-founder of a startup called Myna which applied multi-armed bandit algorithms to the problem of content optimisation -- where A/B testing is traditionally used.


  1. Please learn to use paragraphs. These single sentence "paragraphs" are tedious, and make your writing read like influencer slop.
  2. Geometric proofs are really accessible. You don't need any algebra to prove Pythagoras' theorem, or that the sum of the inner angles of a triangle is 180 degrees, for example. Compass and straight-edge construction of simple figures is also fun.
  3. Everything is up to date with the new syntax as far as I'm aware. Also, the compiler and scalafmt can rewrite one to the other. A project can pick whatever style it wants and have CI reformat code to that style.
  4. jmh is what I've always used for small benchmarks.
  5. OP is not being very precise (and in a way that I don't think is helpful). There is nothing imperative in an if expression. Declarative languages can be Turing complete. Declarative languages are a subset of programming languages.
  6. As you observe, the original comment is wrong and as such it contributes nothing useful to the discussion.
  7. The trick is to say "codata" instead of "object-oriented programming", and then you can use OOP and still be a programming hipster. (I am a programming hipster.)

    I'm only somewhat joking. I actually find this view very useful. Codata is basically programming to interfaces, which we can think of as OO without confusing implementation approaches like inheritance. Codata is the dual to (algebraic) data, meaning we can convert one to the other. We can think of working with an abstract API, which we realise as codata or data depending on what best suits the project. More in the book I'm writing [1].

    In general I agree with the author. There are a lot of concepts tangled up in OOP and discussion around the benefits of OOP are rarely productive.

    [1]: https://scalawithcats.com/

  8. The article does touch on that (monopsony) but it is largely irrelevant to the main point of the article.
  9. You quoted one of the key sentences from the piece, and yet missed the point. It's the "you've licensed it to a kind of absentee landlord who owns the rights but refuses to exercise them." part that is important. In the case of Roger Rabbit, the problem is the Disney has not made any new Roger Rabbit movies or other media in 35 years, despite the first movie being very successful. No doubt other concept, that could be successful, never even get to that point. See stories of "stuck in develompent hell".
  10. The quote:

    1. Indicates this a human interest story

    2. Is by definition of an accurate representation of the words of the person they are quoting

    3. Is a reasonable overview of a complex story, given we understand that "free-spirited" is subjective and that, again, this is a human interest story and conveying the feelings of the people involved is part of the point.

  11. Do you think "My mum was a 17-year-old free spirit - so she was locked up and put in a coma" could perhaps be the words of the person they interviewed? Could this perhaps by why it is written in the first-person? Where in the article does the BBC claim she was an "ordinary free-spirited girl"?

    What do you believe the purpose of this article is? Do you think it is advancing a policy agenda, in which case which policies is it advocating for? Or is it perhaps just documenting what happened and the impressions of those effected by what happened?

  12. This won't take me away from Doom Emacs---I prefer the keyboard centric approach of Doom---but I'm really happy to see this. I feel that Emacs has some really innovative UI plugins (things like Vertico) but the out-of-the-box experience is pretty bad. If this makes Emacs more accessible to a different group of people I think it's great.
  13. Didn't Transmeta's technology end up in Apple's PowerPC emulator Rosetta, following the switch to Intel?

    IIRC Transmeta's technology came out of HP (?) research into dynamic inlining of compiled code, giving performance comparable to profile-guided optimization without the upfront work. It worked similarly to an inlining JIT compiler, except it was working with already compiled code. Very interesting approach and one I think could be generally useful. Imagine if, say, your machine's bootup process was optimized for the hardware you actually have. I'm going off decades old memories here, so the details might be incorrect.

  14. This is one reason I find local-first software so appealing. You sell it as improving UX and backdoor in user freedom.
  15. Doom Emacs is, I think, the answer here:

    1. Install Emacs

    2. git clone --depth 1 https://github.com/doomemacs/doomemacs ~/.config/emacs

    3. ~/.config/emacs/bin/doom install

    Now open Emacs and stuff just works. You can customize it later if you want.

    I agree with your general point. People mostly want stuff that just works. Very few want to become experts (and nobody can be an expert in everything.)

  16. From the name you'd expect a simple sound card, but look deeper and there is more than meets the eye [1]

    [1]: https://en.wikipedia.org/wiki/Soundwave_(Transformers)

  17. I think you're asking if SSA is still a functional language in the presence of mutation of memory. Both Scheme and ML (of Standard ML and OCaml fame, not machine learning) allow mutation, so mutation doesn't seem to disqualify a language from being functional.

    This naturally leads to the question "what is a functional language?" I've written my thoughts on what FP is at [1]. I argue that FP is about local reasoning and composition. The former is most relevant here: local reasoning means it's easy to reason about code. This is exactly why SSA is used in compiler: it makes it easy for the compiler to reason about code and therefore which optimizations are valid. This is the same argument given in these comments: https://www.hackerneue.com/item?id=45674568 and https://www.hackerneue.com/item?id=45678483

    [1]: https://noelwelsh.com/posts/what-and-why-fp/

  18. The shocking truth is that SSA is functional! That's right, the compiler for your favourite imperative language actually optimizes functional programs. See, for example, https://www.jantar.org/papers/chakravarty03perspective.pdf. In fact, SSA, continuation passing style, and ANF are basically the same thing.
  19. The idea that people are affected by their experiences is hardly novel. You don't need to dress it up as "mind viruses" and claim it is an "infection".

This user hasn’t submitted anything.