Sign in

Alexis King

@lexi-lambda.bsky.social
1.7K followers 8 following 70 posts

computers can be understood • she/her, ⚢ • Chicago

PostsRepliesMedia
Alexis King @lexi-lambda.bsky.social · 27/07/2026
The recording of my talk from Software Should Work is now up. :) www.youtube.com/watch?v=0BXu...
youtube.com
The Unreasonable Effectiveness of Constructive Data Modeling - Alexis King | SSW 2026
YouTube video by Software Should Work
912435
Reposted by Alexis King
Impure Pics @impurepics.bsky.social · 22/06/2026
@lexi-lambda.bsky.social talks Racket, nonogram/picross puzzles, puzzle solvers, a functional picture combinator library on top of OpenGL, and programming for fun. Enjoy. youtu.be/LwpnwQGNC9Q
youtu.be
Having fun with Racket Nonograms (w/ Alexis King)
YouTube video by Impure Pics
0124
Alexis King @lexi-lambda.bsky.social · 05/06/2026
I am pleased to announce that I will be presenting at Software Should Work next month. I hope to see some of you there! :) softwareshould.work
softwareshould.work
Software Should Work
An independent conference on software reliability in Columbia, MO on July 16-17, 2026
1262
Alexis King @lexi-lambda.bsky.social · 02/04/2026
racket-nonogram can now show you any mistakes you’ve made, in case you can’t figure out what the issue was and don’t want to have to completely start over
0101
Alexis King @lexi-lambda.bsky.social · 15/03/2026
racket-nonogram now supports automatically generating “mega nonogram” puzzles from standard puzzles
0152
Alexis King @lexi-lambda.bsky.social · 13/03/2026
while working on this I have begun to understand why there are no mega picross implementations on the internet
;; fill-forced-tiles-in-mega-span!
;;   : mega-tiles/c mega-placement-bound? mega-placement-bound?
;;     #:set-full! (-> mega-index? any)
;;  -> (values natural? line-affinity? line-affinity?)
;;
;; Given two mega placement bounds, fills any tiles forced by crosses along the
;; path bridging the two bounds. For example, suppose we have the following row:
;;   ☒☐☐☐☐☐☐☒☐■
;;   ■☐☐☒☐☐☐☐☐☐
;; This function will fill any tiles that must be filled to connect the two
;; filled boxes:
;;   ☒☐■■■☐☐☒☐■
;;   ■■☐☒☐☐■■■☐
;;
;; Along the way, it also calculates and returns the minimum number of tiles
;; that must be filled within the span, taking existing filled tiles into
;; account. It also returns two line affinities that can be used to calculate
;; the minimum cost of extending a placement with the given bounds backwards or
;; forwards, respectively. For example, given the row
;;   ☐☐■☐☒☐☐☐
;;   ☐☐☐☐☐■☐☐
;; then the results of this function applied with bounds (mega-placement-bound 0 2)
;; and (mega-placement-bound 1 5) will be as follows:
;;
;;   1. The returned minimum size will be 5, as at least 5 tiles must be filled
;;      to bridge the two bounds.
;;
;;   2. The first line affinity will be #f, as one possible way to bridge the
;;      two bounds is
;;        ☐☐■☐☒☐☐☐
;;        ☐☐■■■■☐☐
;;      which fills both tiles in the first column. Therefore, it is possible to
;;      extend the filled region backwards to either line at equal cost.
;;
;;   3. The second line affinity will be 1, as filling the tile in the first
;;      line above the end bound would require filling 6 tiles, not five.
;;      Therefore, extending the filled region forwards is biased towards the
;;      second line.
;;
;; Note that the way this function interprets bounds with line 'both or 'either
;; can be somewhat counterintuitive; see Note [Filling forced tiles between
;; placement bounds] for an explanation.This function is used in two different ways:

  1. It is used to bridge the first and last filled tiles in a mega clue.
     When used in this way, the bounds always refer to a specific line,
     never 'both or 'either. This is the mode in which the return values
     are utilized.

  2. It is used to fill tiles forced by the intersection of the earliest
     and latest tightest placements for a clue (or the intersection of one
     such placement and a filled-in tile). This mode is called purely for
     its side effects.

The interpretation of bounds supplied in the second case can be somewhat
counterintuitive, as they represent the greatest lower bound and least
upper bound for a clue’s placement, not tiles that must necessarily be
filled by the placement. For example, suppose we have the following empty
row for a mega 6 clue:
  ☐☐☐☐
  ☐☐☐☐
When we calculate the earliest and latest placements for this clue, we will
get the following two results:
  ▧▧▧☐  ☐▧▧▧
  ▧▧▧☐  ☐▧▧▧
The earliest placement has an end bound of (mega-placement-bound 'both 2)
and the latest placement has a start bound of (mega-placement-bound 'both 1).
The intersection of these bounds yields the following span:
  ☐▧▧☐
  ☐▧▧☐
This function will be called to fill any tiles forced within that span.
Given the fact that the bounds specify 'both lines, it would be easy to
mistakenly believe that all four tiles should be filled. However, that
would be completely wrong in this case, as the bounds do not specify which
tiles are (or should be) filled, they simply define the region inside which
forced tiles *may* be filled. In this example, there are no forced tiles,
so the proper behavior is to do nothing at all.

A natural followup question is to ask what the difference is between a
bound using 'both and a bound using 'either, or indeed what the difference
is between such a bound and one using a specific line. The answer lies in
what we consider to be “forced” at the span endpoints.  ;; Note [Forced mega span endpoints]
  ;; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ;; Endpoints of the span must be handled specially. Normally, we fill tiles
  ;; in one of the following shapes:
  ;;   ■■■  ☐☒☐
  ;;   ☐☒☐  ■■■
  ;; This corresponds to the span having to snake around a cross. However, at
  ;; consider the following row:
  ;;   ☒☐☒☐☐☐☒
  ;;   ☒☐☐☐☒☐☒
  ;; Suppose the span starts at the top left empty tile and ends at the bottom
  ;; right empty tile. If we only fill tiles in the above patterns, we’ll end up
  ;; with the following:
  ;;   ☒☐☒■■■☒
  ;;   ☒■■■☒☐☒
  ;; But this is missing the tiles at the ends! However, we don’t want to fill
  ;; the bounds unconditionally. Suppose instead we have the following row:
  ;;   ☐☐☒☐☐☐☐
  ;;   ☐☐☐☐☒☐☐
  ;; If the start and end locations are still the same, the tiles at the ends
  ;; are no longer forced. On the other hand, if we have the row
  ;;   ☐☐☒☐☐☐☒
  ;;   ☒☐☐☐☒☐☐
  ;; they *are* forced. Programmatically, the necessary conditions are:
  ;;
  ;;   1. The bound must cover 'both lines.
  ;;   2. The opposite tile must be bounded behind or afront.
  ;;
  ;; Somewhat counterintuitively, the second condition is all that matters, and
  ;; it holds regardless of whether the bound is the start bound or the end
  ;; bound. To illustrate, consider the following examples:
  ;;   ☐☐▧☐☐  ☐☐▧☐☐
  ;;   ☐☒☐☐☐  ☐☐☐☒☐
  ;; In both examples, ▧ represents a tile in one of the bound columns.
  ;; Regardless of whether we are filling from the left or the right, if the
  ;; bound’s line is 'both, the ▧ tile must be filled.;; It is time to try to fill in boxes using the usual left/right
;; solve strategy. However, for mega clues, this is substantially
;; more complicated. We have to consider two cases separately:
;;
;;   1. If the earliest/latest placement overlaps with an existing
;;      filled-in tile, we want to “extend” the filled region to the
;;      placement’s bound. For example, suppose we have a mega 5
;;      clue in the following row:
;;        ☒☒☒☐☐
;;        ☐■☐☐☐
;;      Since the earliest placement’s end bound is larger than the
;;      filled tile, we want to fill any tiles forced by crosses
;;      from the tile to the bound:
;;        ☒☒☒☐☐
;;        ☐■■■☐
;;
;;   2. If the earliest/latest bounds overlap, we want to fill any
;;      tiles forced by crosses between them. For example, suppose we
;;      have a mega 5 clue in the following row:
;;        ☒☐☐☐☐ ⇒ ☒■■■☐
;;        ☐☐☒☒☐ ⇒ ☐☐☒☒☐
;;
;; It might seem as though tiles filled by the second rule would
;; always include those filled by the first, as long as we’ve placed
;; crosses appropriately to limit the size of the hole. Unfortunately,
;; this is not always true, at least with our current algorithm for
;; selecting an earliest/latest placement. For example, suppose we
;; modify the first example slightly:
;;   ☒☒☐☐☐
;;   ☐■☐☐☐
;; Here, there is no overlap guaranteed by the bounds alone, so if
;; we didn’t have any filled-in tiles, we wouldn’t be able to gain
;; any information.
192
Alexis King @lexi-lambda.bsky.social · 13/03/2026
not all puzzles can be solved purely with line-by-line logic alone! in fact, a few of the included example puzzles cannot be solved that way :)
010
Alexis King @lexi-lambda.bsky.social · 12/03/2026
racket-nonogram now supports networked co-op multiplayer (and has a README) github.com/lexi-lambda/...
1122
Alexis King @lexi-lambda.bsky.social · 08/03/2026
it also supports mega picross-style puzzles now (I have not seen any other implementation of this in existence outside of the switch picross games)
0110
Alexis King @lexi-lambda.bsky.social · 25/02/2026
wrote a few paragraphs today about why early Stack Overflow was such a special and rewarding community to contribute to and why so many of us who were there have never really stopped mourning its slow but steady decay meta.stackoverflow.com/a/438314/465...
meta.stackoverflow.com
Tell me about the good old days, papa
I like this site. As both a scientist and an educator, it has allowed me to do the two things I love the most: continue learning, and teach where I can. I joined Stack Overflow late and didn't really
1204
Alexis King @lexi-lambda.bsky.social · 22/02/2026
working on a nonograms implementation in racket based on the switch picross games github.com/lexi-lambda/...
0275
Alexis King @lexi-lambda.bsky.social · 20/02/2026
mflatt: let’s ditch s-exps to make our language more accessible :) also mflatt: rhombus defines eight different ways an identifier can have a binding in the core language and the standard library adds several more. here is the documentation for how to define a basic datatype. do you like this
BNF from https://docs.racket-lang.org/rhombus-reference/class.html#%28def._%28%28submod._%28lib._rhombus%2Fprivate%2Famalgam..rkt%29._core%29._class._rhombus%2Fdefn%29%29Body text from https://docs.racket-lang.org/rhombus-reference/class.html#%28def._%28%28submod._%28lib._rhombus%2Fprivate%2Famalgam..rkt%29._core%29._class._rhombus%2Fdefn%29%29
0131
Alexis King @lexi-lambda.bsky.social · 19/02/2026
really cool that stackoverflow-the-company is making such terrible choices that it’s gotten a wine mom with a radio and film degree to start fedposting in their moderator-only chatroom
181
Alexis King @lexi-lambda.bsky.social · 06/02/2026
who else up experiencing some sort of "new-year" mind vacancy
Screenshot from langdev stack exchange chat that reads: “DannyNiu: Hi all, apologies for 2 poorly-received Q in a row. I'm experiencing some sort of "new-year" mind vacancy, and couldn't think straight.”
0160
Alexis King @lexi-lambda.bsky.social · 21/12/2025
it turns out to be a pretty big problem for internet “communities” how many people absolutely love feeling righteous anger and like to find as many opportunities as possible to be as mean and uncharitable as they want without feeling guilty
0171
Alexis King @lexi-lambda.bsky.social · 25/08/2025
I agree! I think the default HTML renderer is not very helpful. I think it would be reasonable to ship a stripped-down HTML renderer (similar to (blog-render-mixin base-render%) in my blog code) in Scribble itself. It would also be nice to make a custom renderer easier to actually render with.
130
Alexis King @lexi-lambda.bsky.social · 25/08/2025
In my blog, I don’t just render posts to xexprs. Rather, I render posts to a data structure that includes the post date, tags, and the top part for index pages and RSS feeds. Links to both other posts and external Scribbled docs are stable. Footnotes are automatically collected out of the main flow.
140
Alexis King @lexi-lambda.bsky.social · 25/08/2025
In practice, it does seem like “@-expressions as a templating language for xexprs” is really what plenty of people want, which is fine. But Scribble is much more than that, and I find a lot of what Scribble provides to be tremendously useful.
120
Alexis King @lexi-lambda.bsky.social · 25/08/2025
I do not think Pollen is “all the good bits with minimal hoops”. Pollen is essentially just @-expressions as a templating language for xexprs. Scribble is an extensible document model with a multi-pass rendering process that supports cross-references and other cross-document information flow.
130
Alexis King @lexi-lambda.bsky.social · 25/08/2025
You can make Scribble output almost anything, but it requires a decent amount of code, and it’s not well documented. My blog is generated with Scribble, and it doesn’t look anything like default Scribble output. My renderer is here: github.com/lexi-lambda/...
github.com
lexi-lambda.github.io/blog/build/render/scribble.rkt at source · lexi-lambda/lexi-lambda.github.io
Contribute to lexi-lambda/lexi-lambda.github.io development by creating an account on GitHub.
140
Alexis King @lexi-lambda.bsky.social · 27/07/2025
love this completely insane guy who makes incredibly thorough, four hour long strategy videos for twenty year old mario party games for no discernible reason www.youtube.com/watch?v=Sndv...
youtube.com
Identifying Luck: Mario Party DS
YouTube video by ZoomZike
150
Alexis King @lexi-lambda.bsky.social · 13/07/2025
“soundtrack is way better than the soundtrack to an extremely mid video game ought to be” is a shockingly common phenomenon
160
Alexis King @lexi-lambda.bsky.social · 02/06/2025
he’s not even really anonymous; his bio references his other account which contains his full name and links to his personal website
190
Alexis King @lexi-lambda.bsky.social · 02/06/2025
jesus christ
Threads of tweets by @Ngnghm.

Lexi also complains about lack of female Haskellers. But Haskell recruits at the higher end of the IQ spectrum, and especially the math part of it. Between extra variance and skew towards shape rotators vs wordcels, males vastly dominate this population.

Extra variance means that males dominate both ends of the Bell curve for a lot of traits, from intelligent vs stupid to heroes vs criminals.

Unsurprisingly, a lot of the few women we find in these circles have obviously been exposed to a lot of testosterone during their development.

The human sexual dimorphism in cognitive abilities, behavior and preferences is obvious and ubiquitous despite the egalitarian religion destroying the West currently making its mention taboo.

Expecting equality or making it a goal is absurd, self-defeating, and, frankly, evil.

Instead, outliers should enjoy their status as such.

“One good Husband is worth two good Wives; for the scarcer things are, the more they're valued.” — Benjamin Franklin

Moreover, as a programmer, you're already an outlier in abilities and interests. And if you read this post, you're an outlier among these outliers. If you're female, even more so.
1710512
Alexis King @lexi-lambda.bsky.social · 31/05/2025
Yeah, that’s sort of what I meant by “the UI has value”; it’s useful to have an interactive dialogue of some kind. But there are lots of other ways we have tools provide interactive dialogues (one of them being literally called dialog boxes) and I would like to see more exploration there.
000
Alexis King @lexi-lambda.bsky.social · 31/05/2025
The UI is like that, but a lot of that is set dressing doing everything possible to create the illusion of working that way, which is why I’m not super fond of the framing. I do think that obviously the UI has value, but I’m not at all convinced there aren’t other UIs that would be more helpful.
120
Alexis King @lexi-lambda.bsky.social · 31/05/2025
Right, that’s what I mean by “synthesize examples from knowledge in the corpus”. I guess you could say it’s more like asking a question on Stack Overflow and then copying the code in the answer you get, but I actually like that framing less. I find “generative search” more illustrative.
100
Alexis King @lexi-lambda.bsky.social · 31/05/2025
I think AI coding tools are obviously a major innovation in that category because they use a much more sophisticated notion of “search” that can synthesize examples from knowledge contained in the corpus rather than only being able to return examples from the corpus. But it’s the same type of tool.
140
Alexis King @lexi-lambda.bsky.social · 31/05/2025
I think you’re correct, and I think the quoted post is making a category error. AI coding tools aren’t in quite the same category as PL innovations. They’re in the same category as “copying code off Stack Overflow”. This is not really a disparagement; that category is obviously extremely useful.
150
Alexis King @lexi-lambda.bsky.social · 29/05/2025
honestly I have no idea what joke you’re making here but I’m scared
030
Alexis King @lexi-lambda.bsky.social · 29/05/2025
didn’t I fire you from your position as my pr manager like four years ago
160
Alexis King @lexi-lambda.bsky.social · 29/05/2025
I have published my first new blog post in four years lexi-lambda.github.io/blog/2025/05...
lexi-lambda.github.io
A break from programming languages
2012022
Alexis King @lexi-lambda.bsky.social · 04/05/2025
lol okay dude
020
Alexis King @lexi-lambda.bsky.social · 02/05/2025
This sounds an awful lot like an admission that you don’t actually know of any concrete examples yourself. Believe me, I don’t have any problems reading papers, but I’m not the one making the claim here! I don’t feel the need to go scrounging for evidence for someone else’s assertion.
140
Alexis King @lexi-lambda.bsky.social · 02/05/2025
That glyphosate is harmful to human health in quantities that commonly appear in US food.
100
Alexis King @lexi-lambda.bsky.social · 01/05/2025
Do you have any evidence to offer for that claim, seeing as the person I was replying to did not provide any?
130
Alexis King @lexi-lambda.bsky.social · 01/05/2025
I do not really expect this will convince you. I find most people who buy into this stuff have already made up their minds. Either way, I’m afraid to say you’ve been had. Which is a pity, really: it would be lovely if the cause of so many stubborn health problems turned out to be so simple!
3130
Alexis King @lexi-lambda.bsky.social · 01/05/2025
It was only at this point that I bothered to look at the authors’ credentials. The rebuttal was written by members of the Department of Medical and Molecular Genetics at King’s College. Meanwhile, Samsel and Seneff are an “independent scientist and consultant” and a COMPUTER SCIENTIST, respectively!
1100
Alexis King @lexi-lambda.bsky.social · 01/05/2025
That said, I am not in the business of trusting my hunches on matters I lack expertise in, so I went looking for the opinions of those more informed than me. I quickly discovered a very extensive expert rebuttal that I find quite convincing. www.frontiersin.org/journals/pub...
frontiersin.org
Frontiers | Facts and Fallacies in the Debate on Glyphosate Toxicity
The safety profile of the herbicide glyphosate and its commercial formulations is controversial. Reviews have been published by individuals who are consultan...
1100
Alexis King @lexi-lambda.bsky.social · 01/05/2025
I am not a biologist, but I do have a hobby fascination with crank researchers. This paper ticks a lot of the usual boxes: a grandiose theory that explains many ills, plus some loose connections that suggest at a mechanism while nevertheless lacking the specificity to derive a testable hypothesis.
180
Alexis King @lexi-lambda.bsky.social · 01/05/2025
I did not begin reading expecting to feel this way. I figured its flaws, if any, would be mundane: perhaps it was cherry-picked, or maybe its claims were exaggerated by others for clicks. Sadly, its authors clearly feel unburdened by the need to make measured claims or present empirical evidence.
180
Alexis King @lexi-lambda.bsky.social · 01/05/2025
I don’t know anything about this subject, but I was interested, so I clicked your link. As far as I can tell, the body text of that article only cites a single paper from 2013 by Samsel and Seneff. I read it, and I am quite sincerely sorry to tell you that it is extremely transparently junk.
1240
Alexis King @lexi-lambda.bsky.social · 06/03/2025
DFB7-2278 is a SNES Game Genie code to make it so that enemy HP always shows up in Chrono Trigger regardless of whether you have the Sight Scope equipped. just in case anyone was wondering
2130
Alexis King @lexi-lambda.bsky.social · 14/02/2025
I think the ones we have do alright, all things considered, though of course programming languages are always improving :)
120
Alexis King @lexi-lambda.bsky.social · 14/02/2025
The right way to think about a program from a hardware POV is not what it *is* but what it *does*, including all of the processes involved in loading more of the program itself into processor caches. The CPU does not care about “programs”, it cares about keeping as much silicon hot as possible.
180
Alexis King @lexi-lambda.bsky.social · 14/02/2025
I think it is an error to believe that a “computer program” is a fixed sequence of instructions executed in order by a processor. Rather, a modern computer program is a live system running on top of a machine that tries to adaptively saturate a managed collection of compute units in real time.
1142
Alexis King @lexi-lambda.bsky.social · 14/02/2025
Control commands for most other hardware devices are usually generated on the fly, even for coprocessors like GPUs, but for CPUs, we have AOT/JIT compilers that precompute long sequences of the control commands and cache them for performance reasons. That is what a modern compiler is doing.
130
Alexis King @lexi-lambda.bsky.social · 14/02/2025
What makes microprocessors so complicated is that they are real time devices operating at incomprehensible speeds, keeping them saturated is almost impossible given memory bandwidth limitations, and the programs feeding them the instruction stream are the very programs they are running.
130
Alexis King @lexi-lambda.bsky.social · 14/02/2025
The purpose of machine code has shifted from a sequence of instructions that directly drive a processor’s various units to a control protocol analogous to control protocols used to direct other hardware devices. The control protocol specifies work to be done, and the hardware schedules it.
120
Alexis King @lexi-lambda.bsky.social · 14/02/2025
The idea that a simple, imperative language usefully represents a “portable assembler” has been outdated for a long time. C was close to assembly in the 80s and even into the 90s, but though much about ISAs has in principle remained constant for backwards compatibility, their semantics have changed.
120