HN user

ashton314

5,446 karma

Programming languages researcher

Codeberg: https://codeberg.org/ashton314

GitHub: https://github.com/ashton314

Blog: https://lambdaland.org

Posts80
Comments1,005
View on HN
github.com 5mo ago

Doom on Emacs

ashton314
3pts0
lambdaland.org 6mo ago

Tree-sitter vs. Language Servers

ashton314
266pts69
lambdaland.org 9mo ago

My system for organizing papers and notes as a PhD student

ashton314
2pts0
www.lux.camera 9mo ago

iPhone 17 Pro Camera Review: Rule of Three

ashton314
3pts0
lambdaland.org 11mo ago

Lack of intent is what makes reading LLM-generated text exhausting

ashton314
189pts116
lambdaland.org 1y ago

How I use Emacs + Denote to take notes as a researcher

ashton314
3pts0
lambdaland.org 1y ago

Programmers and Their Monospace Blogs

ashton314
2pts1
aphyr.com 1y ago

Unifying the Technical Interview (2020)

ashton314
23pts6
lambdaland.org 1y ago

What's new in Emacs: last decade edition

ashton314
3pts0
lambdaland.org 1y ago

Should programming languages be safe or powerful?

ashton314
8pts0
arstechnica.com 1y ago

The Engineering Behind a Snickers Bar

ashton314
1pts0
signal.org 1y ago

Signal investigating vulnerabilities in Cellebrite hardware

ashton314
2pts1
lambdaland.org 1y ago

How to Make Racket Go Almost as Fast as C

ashton314
5pts0
con.racket-lang.org 1y ago

RacketCon Livestream

ashton314
5pts1
lambdaland.org 1y ago

Resist Surveillance

ashton314
2pts0
arstechnica.com 1y ago

NIST proposes barring some of the most nonsensical password rules

ashton314
44pts3
github.com 1y ago

Chrome and FF extension to edit any browser text field in an Emacs buffer

ashton314
14pts1
lambdaland.org 1y ago

Notes on Zero-Knowledge Proofs and the Secure Remote Password (SRP) Protocol

ashton314
3pts0
lambdaland.org 1y ago

How, Where, and Why I Take Notes

ashton314
3pts0
lambdaland.org 1y ago

Evolving languages faster with type tailoring

ashton314
5pts1
lambdaland.org 2y ago

Evolving languages faster with type tailoring

ashton314
11pts0
lambdaland.org 2y ago

Lessons from Writing My First Academic Paper

ashton314
2pts0
lambdaland.org 2y ago

Chorex: Guaranteeing Deadlock Freedom in Elixir

ashton314
3pts0
matt.might.net 2y ago

The CRAPL: An academic-strength open-source license

ashton314
3pts1
en.wikipedia.org 2y ago

The Dirichlet Function

ashton314
1pts0
lambdaland.org 2y ago

My Top Emacs Packages

ashton314
14pts0
lambdaland.org 2y ago

Boilerplate busting in functional languages

ashton314
27pts28
lambdaland.org 2y ago

Boilerplate busting in functional languages

ashton314
1pts0
www.theverge.com 2y ago

Microsoft starts testing ads in the Windows 11 Start menu

ashton314
199pts192
www.alta.com 2y ago

Avalanche Porcupines

ashton314
2pts1

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.

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 :-)

"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.

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…)

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.

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!!

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.

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.

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

Typst 0.15.0 1 month ago

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.)

Racket v9.2 1 month ago

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.)

Racket v9.2 2 months ago

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.

All power to you!

As an aside, have you seen Typst? It’s got LaTeX-level typesetting quality but the markup syntax is a lot friendlier (close to Markdown) and the scripting language is a Real Language™ with sensible error messages and sub-second compilation times even for big documents.

I have a Kindle with KOReader on it and it’s awesome. I recently bought a book directly from the author (Isles of the Emberdark, Brandon Sanderson) and the author, being excellent, provided it without DRM so I had no trouble reading it.

But for less-excellent authors, where’s a good place besides Amazon to get ebooks?

reasoning about program correctness is not possible

Not possible for all problems. We cannot decide correctness (ie adherence to a specification) for all programs, but we can definitely recognize a good chunk of cases (both positive and negative) that are useful.

The Halting Problem itself is recognizable. The surprising result of Turing’s work was that we can’t decide it.

Lunar Flyby 4 months ago

Amaze, amaze, amaze!

Loved the Project Hail Mary quote from one of the mission controllers. :)

This bright spot in world news has been good for my mental health and general motivation. Thank you NASA!