HackerTrans
TopNewTrendsCommentsPastAskShowJobs

RodgerTheGreat

7,260 karmajoined 16 лет назад
beyondloom.com

Submissions

Decker Fantasy Camp 2026

itch.io
50 points·by RodgerTheGreat·14 дней назад·9 comments

Vector Graphics in Lil

beyondloom.com
57 points·by RodgerTheGreat·19 дней назад·6 comments

Yet another year with Decker

beyondloom.com
47 points·by RodgerTheGreat·9 месяцев назад·3 comments

comments

RodgerTheGreat
·позавчера·discuss
I'd like to know more about how this is built. A stripped-down mac emulator? Does it leverage any of the existing libraries for decoding the HyperCard stack format, or something novel?
RodgerTheGreat
·16 дней назад·discuss
Lisa and early MacOS are tremendously different in their details than the Alto operating system. While there was clearly a transfer of inspiration, Apple engineers like Bill Atkinson made countless small and large innovations to simplify the Xerox GUI model and improve its usability based on extensive in-house R&D and user testing (and in some cases implement features that the Apple team presumed Xerox had but actually didn't exist on the Alto). It is simply ahistoric to build narratives around Apple stealing Xerox ideas wholesale.

For more details on Apple's early UI evolution, Atkinson kept polaroids of a variety of prototypes and mockups: https://www.youtube.com/watch?v=Qg0mHFcB510
RodgerTheGreat
·17 дней назад·discuss
I think the key thing is that nothing about Decker or Lil was specifically designed or tweaked for this use case; Everything I needed to build the hershey module and make it reasonably efficient was already at my fingertips. I considered bundling up some of the patterns I describe in this article as a library, but I think it's much better to view them as transparent idioms to adapt to wherever they're needed, letting the abstraction live in your head instead of the source file.

As I wrote about two years ago in "The Benefits of Conforming", Lil's approach to handling mismatched dimensions for conforming arose from a need to plug the semantic gap left by K and Q, since Lil doesn't believe in runtime errors. While evaluating my options I made a series of pleasant idiomatic discoveries that ended up also being useful for "hershey". There is perhaps an argument that if I'd "preferred" the length of the right argument instead of the left some expressions would require fewer parentheses, but I suspect it's a wash either way.

The design of heading/mag/unit were influenced by my work with oK and iKe, particularly my annoyance at the clunkiness of writing things like {(cos x;sin x)}' or wrangling with atan2[;]. The Lil primitives help expressions "flow" together nicely, with few intermediate variables and minimal nesting. I think I spent more time agonizing over reasonably intuitive names for them than I did puzzling over semantics. I'm quite pleased with these primitives as some of Lil's hidden pearls, and I hope I can inspire other arraylangs to incorporate something similar.
RodgerTheGreat
·17 дней назад·discuss
Here's another 8-page zine maker, built with Decker: https://micpp.itch.io/hybrid-zine-template-for-decker
RodgerTheGreat
·19 дней назад·discuss
Measuring education in dollars spent is rather consistent with measuring the productivity of LLMs in lines of code excreted.
RodgerTheGreat
·20 дней назад·discuss
The point is that https-everywhere people have successfully pushed the majority of the sites that could previously be served over vanilla http to require https anyway. Now if you're on and old device you need an https proxy or else you're out of luck.
RodgerTheGreat
·24 дня назад·discuss
"Accessibility" is an open-ended set of functionality, not a checkbox; it is never "complete", there is always room for improvement. Colorblind support (which ones)? High-Contrast mode? Adjustable text size? Screenreader integration? Localization? IME support? Keyboard navigation? Keyboard remapping? Functional entirely without a keyboard? Touch support? Pen support? Dyslexia-aiding typefaces? The list goes on and on.
RodgerTheGreat
·в прошлом месяце·discuss
Not especially. Depending on where you set your standards for "holding a conversation" you can satisfy the requirement with a classical markov chatterbot, a well-trained parrot, a copy of Eliza, or a telemarketer flowchart drawn on a sheet of paper. Only the markov bot is made out of "weights" in the sense of a statistical model.

Parrots are intelligent animals, albeit with a limited capacity for vocabulary and syntax compared to a human, and Eliza and the flowchart are made out of explicitly encoded rules and conversational tactics.
RodgerTheGreat
·в прошлом месяце·discuss
If you want to use a REPL as a pleasant calculator you really want an APL-family language or a modern concatenative language like Factor. Sexprs are horrendously verbose in comparison.
RodgerTheGreat
·2 месяца назад·discuss
Indeed. Take a soft approach, or "wait and see", and you'll just allow your community to get infested with slop enthusiast crybullies that loudly protest any pushback against "genai content". The communities that draw a firm line and hold it will be the only ones that endure.
RodgerTheGreat
·2 месяца назад·discuss
You have to make the decision somewhere in your code, unless you're willing to lean on a heuristic; all of the examples in R and Lil make assumptions about the names of columns in the file on-disk just as they make assumptions about the delimiter and the presence of headers.

If I knew the CSV file didn't have built-in headers, I'd write the Lil script like this:

    purchases:readcsv["country,amount,discount\n",read["headerless.csv"] "sii"]
RodgerTheGreat
·2 месяца назад·discuss
Lil's readcsv[] takes three arguments: a data string, an optional typecode-string (which can also skip columns with "_"), and an optional delimiter character. First row is always assumed to be headers; I find it easy enough to concatenate on a header row before calling the function if I'm ever dealing with a headerless CSV file.

The typecode-string approach in Lil is very similar to how Q handles it with dyadic 0:.

In this specific example I could do without the typecode-string since arithmetic operators like sum, -, and * will coerce string columns into numbers, but I think this way is cleaner.
RodgerTheGreat
·2 месяца назад·discuss
In Lil, the readcsv[] function takes an optional string specifying a type for each column to decode:

    purchases:readcsv[read["purchases.csv"] "sii"]
Summing a column:

    sum purchases.amount
To create a summary, we need to reduce each group to a single row:

    select first country sum amount by country from purchases
Discounting:

    select first country sum amount-discount by country from purchases
Lil doesn't have a "median" primitive. Decks can contain multiple modules, but we happen to know this one is alone. Your path will vary:

    stats:first import["stats.deck"]
    select first country sum amount-discount by country where amount<stats.median[amount]*10 from purchases
Calculating the median within each group is merely a matter of reordering clauses:

    select first country sum amount-discount where amount<stats.median[amount]*10 by country from purchases
RodgerTheGreat
·2 месяца назад·discuss
The term "GenAI veganism" is deeply disingenuous, and simonw knew exactly what he was doing when he coined it.

In the broader context of most human societies treating meat consumption as a default, with thousands of years of precedent, it deliberately frames abstaining from the use of "GenAI" as an extreme perspective, suggesting that moderate or extensive usage of LLMs and their ilk is more intrinsically "normal". The "GenAI" tools in question have only existed for a few years- or perhaps months in more specific cases- and the unending marketing blitz around them notwithstanding, using them does not remotely represent an engrained cultural default.

The choice of terminology also casually devalues and denigrates the reasons many people have for being actual vegans. It's meant to sneeringly evoke negative stereotypes of vegans as annoying and irrational.

Attempting to carve out a "softened" version of this language with the "vegetarian" label is not descriptively useful.
RodgerTheGreat
·3 месяца назад·discuss
Amending a slice would amend only the slice:

    l_inner:l[1][1]
    # {"age":3}
    l_inner.age:9
    # {"age":9}
    l_inner
    # {"age":9}
    l
    # (1,(2,{"age":3}),4)
If an amending expression isn't "rooted" in a variable binding, it also returns the entire new structure:

    (1,(list 2,list ().age:5),4)[1][1].age:99
    # (1,(2,{"age":99}),4)
RodgerTheGreat
·3 месяца назад·discuss
In Lil[0], this is how ordinary assignment syntax works. Implicitly defining a dictionary stored in a variable named "cat" with a field "age":

    cat.age:3
    # {"age":3}
Defining "l" as in the example in the article. We need the "list" operator to enlist nested values so that the "," operator doesn't concatenate them into a flat list:

    l:1,(list 2,list cat),4
    # (1,(2,{"age":3}),4)
Updating the "age" field in the nested dictionary. Lil's basic datatypes are immutable, so "l" is rebound to a new list containing a new dictionary, leaving any previous references undisturbed:

    l[1][1].age:9
    # (1,(2,{"age":9}),4)
    cat
    # {"age":3}
There's no special "infix" promotion syntax, so that last example would be:

    l:l,5
    # (1,(2,{"age":9}),4,5)
[0] http://beyondloom.com/tools/trylil.html
RodgerTheGreat
·3 месяца назад·discuss
It's classic ladder-kicking behavior, reveling in the mild conveniences of "genai" while comfortably impervious to the externalities. Shameful that the moderators of so many online communities turn a blind eye to- or even offer explicit support for- their endless shilling for hideously unethical web-destroying for-profit companies simply because they express their native advertising in a superficially polite register.
RodgerTheGreat
·4 месяца назад·discuss
I think everyone who believes that they can personally resist the detrimental psychological effects of exposure to LLMs by "remaining aware" or "being careful", because they have cultivated an understanding of how language models work, is falling into precisely the same fallacy as people who think they can't be conned or that marketing doesn't work on them.

Don't kid yourself. If you use this junk, it's making you dumber and damaging your critical thinking skills, full-stop. This is delegation of core competency. You may feel smarter, or that you're learning faster, of that you're more productive, but to people who aren't addicted to LLMs it sounds exactly like gamblers insisting they have a foolproof system for slots, or alcoholics insisting that a few beers make them a better driver. Nobody outside the bubble is impressed with the results.
RodgerTheGreat
·4 месяца назад·discuss
LLM enthusiasts will always point to whatever scraps of personal value they've extracted from their use of genai as a rationale for their indispensability. Arguing from personal utility rings hollow for anyone who takes the externalities of these "tools" seriously: their erasure of the authorship of their training corpus, their erosion of social contracts, their putrefaction of the commons with endless waves of slop, etc. I'm glad FreeBSD has managed to hold the line against this sort of shortsighted ends-justify-means thinking, and I hope they don't soften their stance against slop in the future.
RodgerTheGreat
·4 месяца назад·discuss
"lemons"