You are viewing archived messages.
Go here to search the history.

Eli Mellen 2023-11-13 14:56:22

I’m excited to see where this 3rd party screen-reader for macOS goes. On windows there are 2 first-in-class options available outside of the OS, JAWS and NVDA. On macOS there is only the system provided VoiceOver.

I think VoiceOver is a pretty solid competitor to NVDA, but, it is very very very opinionated, and makes some unusual choices. I think this has a knock on effect where, since VoiceOver is the easiest screen-reader for most web devs to reach for, a lot of implementations end up being hyper-focused on supporting VoiceOver’s specific flavor of handling the accessibility tree. Having more diversity in the space, I think could hopefully mitigate this. While this isn’t directly related to the future of coding as we normally talk about it here, I think projects like this are just the sort of thing that can help to shape things for years to come.

Jack Rusher 2023-11-13 16:34:26

Inferring SVG animations from motion graphics videos, then providing various tools to edit the inferred material:

Dany 2023-11-14 05:25:05

This may interest you. It talks about combining programming by example (ML) and traditional means.

Eli Mellen 2023-11-14 19:47:54

📝 Designing a Programming Language to Speedrun Advent of Code

“shouldn’t this have been published a few months ago?” yeah, probably. I even considered submitting it to the AoC contest. time is a real beast. The title is clickbait. I did not design and implement a programming language for the sole or even primary purpose of leaderboarding on Advent of Code. It just turned out that the programming language I was working on fit the task remarkably well. I can’t name just a single reason I started work on my language, Noulith, back in July 2022, but I think the biggest one was even more absurdly niche: I solve and write a lot of puzzlehunts, and I wanted a better programming language to use to search word lists for words satisfying unusual constraints, such as, “Find all ten-letter words that contain each of the letters A, B, and C exactly once and that have the ninth letter K.”1 I have a folder of ten-line scripts of this kind, mostly Python, and I thought there was surely a better way to do this. Not necessarily faster — there is obviously no way I could save time on net by optimizing this process. But, for example, I wanted to be able to easily share these programs such that others could run them. I had a positive experience in this with my slightly older golflang Paradoc, which I had compiled into a WASM blob and put online and, just once, experienced the convenience of sharing a short text processing program through a link. (Puzzle: what does this program do?) I also wanted to write and run these programs while booted into a different operating system, using a different computer, or just on my phone. As I worked on it, I kept accumulating reasons to keep going. There were other contexts where I wanted to quickly code a combinatorial brute force that was annoying to write in other languages; a glib phrasing is that I wanted access to Haskell’s list monad in a sloppier language. I also wanted an excuse to read Crafting Interpreters more thoroughly. But sometimes I think the best characterization for what developing the language “felt like” was that I had been possessed by a supernatural creature — say, the dragon from the Dragon Book. I spent every spare minute thinking about language features and next implementation steps, because I had to. The first “real program” I wrote in Noulith was to brute force constructions for The Cube, for last year’s Galactic Puzzle Hunt in early August, and it worked unexpectedly well. I wrote a for loop with a 53-clause iteratee and the interpreter executed it smoothly. Eventually I realized that the language could expand into other niches in my life where I wanted a scripting language. For example, I did a few Cryptopals challenges in them. It would take a month or two before it dawned on me that the same compulsion that drove me to create this language would drive me to do Advent of Code in it. That’s just how it has to be. This post details my thought process behind the design of this language. Some preliminary notes:

Eli Mellen 2023-11-14 20:09:55

and while not the point of the article, Noulith, the language in question, sort of reminds me of John Ernest’s lil, which may be one of the most lovely little languages without heaps of parenthesis that I’ve ever used.

smt 2023-11-14 20:31:41

i LOVE noulith hahahaha. i’ve programmed in it a lot and really love the expressivity of this language. the kitchen sink of ways to call functions

Mike Austin 2023-11-14 22:19:45

Nice. I like the topics, the in depth reasoning and choices, and the "fun facts". I also had the idea to write a "implementing a language" article, but am trying to be very "incremental" and target a not-so-developer audience.

It's tough not being able to just say random techie stuff when writing about techie stuff 🙂

Tom Lieber 2023-11-14 22:46:34

@Mike Austin That’s why I’m here. When I posted programming stuff on Facebook, I’d just get family members saying, “I don’t know what you’re talking about, but you seem to be having fun!”

smt 2023-11-15 05:37:56

@Eli Mellen do you know if it’s possible to use the lil language? i’m interested in playing around with it

Eli Mellen 2023-11-15 12:38:38

It is! I use it all the time. It’s embedded into decker where you can use it as a scripting language, and you can grab a standalone interpreter to run locally from GitHub. It is in the repo as a cosmopolitan libc, I find that works well. Hit me up with any questions @smt

📝 Decker by Internet Janitor

A multimedia sketchbook

Eli Mellen 2023-11-15 15:10:51

This is one of my favorite programs I’ve written with lil. It isn’t useful, but I think it shows off the language features really well.

cons: "|" split "b|c|d|f|g|h|j|k|l|m|n|p|r|s|t|v|w|z|ch|sh|zh|th"

 vow: "|" split "a|e|i|o|u|y|ee|ai|ae|au"

on syl do random[vow],random[cons] end

on word do syl @ range random[1,2,3,4] end

on words x do " " fuse word @ range x end



That generates mostly pronounceable gibberish, like ushapaiw aih eez enasil auk aeshowychees ehilehuk and ainaec eeneewaig ainimimum auvaichaef ojushychaen upenizash ac

Same program in JavaScript,

const cons = ["b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "r", "s", "t", "v", "w", "z", "ch", "sh", "zh", "th"];

const vow = ["a", "e", "i", "o", "u", "y", "ee", "ai", "ae", "au"];

const rpick = t => t[Math.floor(Math.random() * t.length)];

const syl = () => rpick(cons) + rpick(vow);

const word = () => {

  const syllables = Array(Math.floor(Math.random() * 3) + 1).fill(null).map(() => syl()).join('');

  return Math.random() > 0.2 ? syllables + rpick(cons) : syllables;


const speak = numberOfWords => Array(numberOfWords).fill(null).map(() => word()).join(' ');

Guyren Howe 2023-11-15 05:57:13

I don’t suppose any of y’all are in San Diego? Would love to meet like-minded folks.

Timothy Johnson 2023-11-16 13:49:39

I suggest posting this in the in-southern-california channel.

Guyren Howe 2023-11-16 17:49:49

I see no such chanel?

Daniel Garcia 2023-11-17 22:16:56

#in-southern-california try clicking this link to get to the channel

Paul Tarvydas 2023-11-17 14:23:43

practical Diagrams as Syntax for program development at

Joshua Horowitz 2023-11-17 21:00:11

your youtube link seems to go to a long playlist; did you mean to link to

Paul Tarvydas 2023-11-17 21:15:32

Yes, thank you - that is what I meant. I think that I just edited the original post to use the link you provided.