HNHacker News
TopNewBestAskShowJobs

ashton314

5,617 karma · joined August 30, 2017

Programming languages researcher

Codeberg: https://codeberg.org/ashton314

GitHub: https://github.com/ashton314

Blog: https://lambdaland.org

submissionscomments
ashton314··on Choral: Choreographic Programming for Java
Hey Dan, nice to run into you on the internet. How are you? :)

For those curious, there are a lot of neat ways to implement choreographic programming! Choral uses a custom compiler which gives it very powerful analysis techniques. Some are libraries and have to rely more strongly on host language features to work. My library uses macros to embed the language directly into Elixir which gets you a bit of the advantages of both: https://github.com/utahplt/chorex

ashton314··on I made tinnitus my friend, then it disappeared [video]
If you do not already use MyNoise to help you focus at work, then, like, what are you even doing? Sometimes I'll listen to music of various kinds if my work isn't too deep, but whenever I need to concentrate deeply on a problem, MyNoise will have the perfect noise blocker. Go explore the site. It's a lovely little corner of the "classic" internet: no ads, no shenanigans, just this one dude making a technical masterpiece that you can enjoy.
ashton314··on Writing with AI Is Stupid
You'll like Brandon Sanderson's keynote talk: https://www.brandonsanderson.com/blogs/blog/ai-art-brandon-s...

Quote:

You might say, “Well, if AI gets good enough and the product is the same, what’s the difference?” The difference is that the books aren’t the product. They aren’t the art--not completely. And this is the point. The most important thing to understand is that the process of creating art makes art of you.

My friends, let me repeat that. The book, the painting, the film script is not the only art. It’s important, but in a way it’s a receipt. It’s a diploma. The book you write, the painting you create, the music you compose is important and artistic, but it’s also a mark of proof that you have done the work to learn.

Because in the end of it all, you are the art.

ashton314··on 99% of My Website Traffic Is Bots
I'm on a $4/mo droplet on Digital Ocean and my static site has been just fine. I'm using Caddy and it seems to handle the load like a champ. My site is very lightweight though, so ymmv.
ashton314··on Towards Bottom-Up Enumeration in miniKanren via Pruning and Memoization
Ooo I love anything miniKanren related.

I did a close reading of the implementation in the original miniKanren paper; you can see my write-up and implementation here: https://codeberg.org/ashton314/microKanren

miniKanren paper: http://webyrd.net/scheme-2013/papers/HemannMuKanren2013.pdf

Also relevant—a practical use-case for miniKanren: https://aphyr.com/posts/354-unifying-the-technical-interview

ashton314··on Branchless Rust: Making a Filter 4x Faster by Removing an If
Nice! I saw the code and thought, I bet there’s a way to do some SIMD here… never touched intrinsics in Rust before so I really appreciate you writing it up!
ashton314··on Codeberg Bans Cryptocurrency Projects
I have an account and I donate regularly. I was not made aware a vote was happening.
ashton314··on Everyone should know SIMD
In the article, Mitchel mentions how this doesn’t always work. In fact, as someone who’s worked in compiler development, I can say it’s a small miracle when it does work.
ashton314··on How an AI Anime Is Created
More tasteless business bros completely missing the point of art. Fitting that they centered the text on this page.
ashton314··on Elixir-lang.org has a new design
A few years ago, I was working on an interpreter implemented in elixir for a domain specific language. It was a pretty basic metacircular interpreter. It relied heavily on function signature dispatch. When I tried breaking up the massive “interpret” function across modules, performance tanked. I got it all back by using some macro shenanigans, but understandably the team did not like this.

Knowing what I know now, I would’ve tried to push for a threaded interpreter to get rid of the runtime overhead of dispatching altogether. I don’t know if they’ve changed the architecture of that module much since I left :-)

ashton314··on Superoptimizer – A Look at the Smallest Program (1987) [pdf]
A (relatively) new way to create a super optimizer is to use an egraph: https://egraphs-good.github.io/

These are nifty data structures that can quickly search the space of equivalent programs.

ashton314··on Under federal rule, colleges must leave grads better off or lose financial aid
> "You can't complain about being require to take a 100-level history course because our job is to turn out renaissance scholars who can debate philosophy at cocktail parties before going to work doing something that has absolutely nothing to do with that."

> All the while, those additional credit hours cost students a shitload of money and debt and take focus away from their actual fields of study.

This is a straw-man. The purpose is not to turn people into renaissance scholars. It's to inculcate appreciation for what makes life worth living. An educated populace is also a requirement for a healthy democracy. Everyone ought to know some history at a minimum.

ashton314··on Under federal rule, colleges must leave grads better off or lose financial aid
This is not great. The purpose of higher education is not to get you a job. That's certainly a nice side-effect and I hope that all my students will be able to support themselves through good employment. The university is there to educate you, not train you. It's to turn you into a better thinker, a better person, and someone more capable of living well.

Making art and humanities programs demonstrate some kind of pecuniary benefit is disgusting and myopic. My wife pursued English because she loves writing. She's earned about 0 dollars from that degree because she's home with our kids. And that's OK! Our lives are so much richer because of her degree—as well as the classes I took from the English department. So we should penalize the humanities because it merely makes people better thinkers and doesn't have as high of an ROI as an MBA? Yuck!

(EDIT: the article does mention that this bar is low—so not too bad—but the fact that this is a metric and criteria in the first place opens this up to abuse in the near future.)

I get that it's intended to cut down on ballooning tuition and fees, but *this is not the right way to do that.* (Actually, if we eliminated half the administration, I wonder how much we could cut costs…)

ashton314··on Interview with Mitchell Hashimoto about Ghostty and Zig
I’m rather partial to Plankalkül actually
ashton314··on My favorite keyboards
I'm in Emacs 99% of my day, and I don't think I've ever used the function keys inside Emacs.

All my volume/brightness/etc functions are handled on a separate layer. I've got function keys on another layer as well, but I don't ever use them.

If you use function keys a lot, then you could do something like putting the function keys on one layer all on the right hand like it's a num pad and then adding a key on the left hand to switch to that layer. You could add combo-taps on your main layer to trigger the function key (e.g. press `q` and `1` at the same time to hit `f1`, `w` and `2` at the same time to send `f2`, etc.), etc. etc.

QMK gives you a lot of options to do what you want. There's also 3 keys towards the center of the keyboard on each side that I rarely hit (in fact, they're used for some layer switching some times!) that you could easy bind to function keys directly.

Note that a key can do like 4 different things depending if you tap, hold, double tap, or tap and hold if you want to get really fancy.

ashton314··on My favorite keyboards
Typing this on a Moonlander right now. Love it to pieces. The tenting kit is pricey but incredibly stable and, to me, is worth every penny. I've gotten used to the ortholinear so much so that I hate other layouts now.

I've looked at some other more minimal boards and, while they look nice, I actually make good use of pretty much all my keys and I would not like going down to a smaller layout.

In my mind, the most important pieces of a good keyboard are, in this order:

1. QMK/ZMK firmware so you can add stuff like mod-taps and whatnot

2. Split & tented to avoid bad wrist angles

3. Lots of buttons for your thumb to press: it's your strongest finger so you should put it to work

4. Ortholinear layout for more natural finger movement

ZSA (the maker of the Ergodox, Moonlander, and Voyager) is a great company—I've had incredibly positive experiences with their support team whenever I've needed help. One time I was having trouble using their online configuration tool (https://layout.new) and so I emailed support. I got an email back within the hour from a developer asking for more details. After I supplied this, it was just another hour until I heard back saying that they had found a bug and that the fix was live. So awesome!!

ashton314··on RRB-Trees: Efficient Immutable Vectors (2012) [pdf]
This is Rhombus’ native data type! Such a nice data structure.
ashton314··on Rhombus Language 1.0
More like the Knights who say Nil
ashton314··on Rhombus Language 1.0
)

There matched your paren for you.

ashton314··on Rhombus Language 1.0
Matthew Flatt picked “shrubbery” because it’s tree-like but not fully expanded, so it tends to be more broad/flat than deep like a tree. Hence also the term “enforrestation” when you fully expanded it.

I think the Monty Python reference is just a happy coincidence.

ashton314··on Rhombus Language 1.0
Here's the paper I wrote: https://lambdaland.org/files/2024_ecoop_type_tailoring.pdf

Lots and lots of documentation, some experimentation, and asking people. :)

ashton314··on Rhombus Language 1.0
I’ve written a little library Rhombus.

I think my favorite thing is the `…` operator. Go check it out. It’s not like the splat operator in other languages, though it does give that feel initially. It’s much more general: it works with nested data structures and can take the place of a `map` operation.

The best part of `…` is that it is not a built-in thing—it’s just a macro! The magic is that Rhombus lets you define different macros depending on whether or not the macro identifier appears in binding context (left side of `=`), expression context, or some other contexts. IIRC you can even define your own contexts too.

Rhombus takes the best-in-class macro system of Racket and somehow finds a way to improve upon it. I say this after researching and comparing detailed metaprogramming features across a dozen different languages. Rhombus is a very neat little language.

Last thing: Rhombus’ main data type, the list, is implemented with an RRB tree. RRB trees support structural sharing, functional updates, and have O(log n) iterate, insert, delete, append, and arbitrary read operations. The constant factor on that is tiny: I think it’s like log_16 or log_32. They’re designed to be very cache friendly. Super cool data structure.

ashton314··on Show HN: Make PDFs look scanned (CLI or in the browser via WASM)
This needs a flag to insert random blank pages
ashton314··on How many of the 170k English words do you know?
I think that this needs an application of Bayes Rule against the ¼ chance I guessed and got it right by luck.
ashton314··on Emacs, how it all started for me
If you find yourself wanting to try out Emacs but are (understandably) turned off by some of its archaic defaults, I encourage you to check out my Emacs Bedrock [1] project. It is not a framework like Doom Emacs or Spacemacs. Instead, it's just a bunch of better defaults, plus some example configuration for some of the most popular packages. It's meant to just be a starting point, and not a framework to keep up-to-date in the long run.

Emacs has come a long way in terms of in-built features. The only problem is that, in the name of not breaking backwards-compatibility (or something like that), the archaic defaults have remained. Just a little bit of simple config (either from Bedrock or, heck, even an LLM) will get you very far.

I'm working on a new version of Bedrock for Emacs 31. If you're using the release candidate (which, because it's Emacs, is more stable than most other operating systems) then check out the `emacs31` branch.

[1]: https://codeberg.org/ashton314/emacs-bedrock

ashton314··on Typst 0.15.0
I spoke to the couple (it’s like a single married couple + a bunch of scripts they’ve wrote) who handle the formatting for a bunch of the programming language-related conferences around the world (and others too maybe) and they are interested in Typst and are looking into it! (They’re also super nice folks.)
ashton314··on Lisp's Influence on Ruby
100% Elixir is much more a Lisp than Ruby is.
ashton314··on A jacket that harvests drinking water from the air
But are you wearing it slip-shod, like the natives do?
ashton314··on Racket v9.2
No, it’s actually the right word. I’m saying you see past syntax and get to the underlying semantics of PLs after learning Racket. (And modulo is a perfectly acceptable word to express this.)
ashton314··on Racket v9.2
Racket gets in your head like nothing else. Once you learn it, (Scheme does this too) you get x-ray vision to see every other language modulo syntax.

I have been writing Elixir professionally for the bulk of my career. (It’s been pretty awesome!) Despite this, I consider Racket to be my native language because it’s so easy for me to think in Racket. It’s the perfect bridge between my brain and the problem domain.

← PreviousPage 2 of 34Next →