#apl — Public Fediverse posts
Live and recent posts from across the Fediverse tagged #apl, aggregated by home.social.
-
Saying Goodbye to one line of APL https://lobste.rs/s/e7jqsb #apl
https://homewithinnowhere.com/posts/2026-05-10-one-line.html -
A principled rethinking of array languages like APL https://lobste.rs/s/zpuqvx #apl
https://dercuano.github.io/notes/principled-apl.html -
Relational modeling and APL https://lobste.rs/s/deceli #apl
https://dercuano.github.io/notes/relational-modeling-and-apl.html -
The APL Vade Mecum
"These cards were kind of a novelty item, something Iverson could hand out at conferences. He created these woodblocks that had the entire #APL language specification on it. You could, in theory, refer to these unique business cards to understand how APL works."
https://www.uvic.ca/library/about-us/news-stories/news/voices-uvic-libraries/durno-historic-computing-lab.php
Thanks @jdd -
jlearn: Machine Learning Library in J https://lobste.rs/s/r8v2bx #ai #apl
https://github.com/jonghough/jlearn -
In the Year 2000:
APL sees a resurgence in popularity due to LLMs preferring it for token density.
-
Oh, CF Montreal scored just before 1st half ended.
Crisis averted.
CF Montreal 2-0 Calgary Blizzard
#MLS #APL #soccer
RE: https://atomicpoet.org/objects/73c2d4a1-62bd-4870-8fe8-463a5b9c2c8e -
Peeking over at the preliminary Canadian Championships between CF Montréal and Calgary Blizzard.
Everyone is afraid CF Montréal will do one worse by losing the an Alberta Premier League team, which is the 3rd tier in the Canadian #soccer pyramid.
Last night, Toronto FC lost to Atlético Ottawa, and that was humiliating enough.
https://en.cfmontreal.com/competitions/canadian-championship-x9569/2026/matches/mtlvsbli-05-06-2026/
-
A little comparison between R and Kap https://lobste.rs/s/pxb7yu #apl #plt
https://blog.dhsdevelopments.com/a-little-comparison-between-r-and-kap -
I had a bit of fun, and wrote a blog post where I comment on another blog post that compares R and pandas for some common calculations. I do the same in Kap, to show the differences.
Obviously Kap is less easy to understand without any prior knowledge. But once you know it, it's quite efficient.
https://blog.dhsdevelopments.com/a-little-comparison-between-r-and-kap
-
A Personal History of APL (1982) - Michael S. Montalbano https://lobste.rs/s/ygusar #apl #historical
https://ed-thelen.org/comp-hist/APL-hist.html -
A Letter from Dijkstra on APL(1982) https://lobste.rs/s/3gnkeu #apl #programming
https://www.jsoftware.com/papers/Dijkstra_Letter.htm -
Oh, gasp! Yet another fawning #tribute to #Dijkstra, this time for his whimsical musings on the enigma that is #APL. ✉️🌐 Because nothing screams cutting-edge computer science like an old letter from 1982 unearthed with the help of an entire committee. 🤦♂️📜
https://www.jsoftware.com/papers/Dijkstra_Letter.htm #ComputerScience #Nostalgia #1982Letter #HackerNews #ngated -
Oh, the irony! A plea to enable #JavaScript and cookies for a 1990s tribute to APL—because nothing screams cutting-edge like debugging web settings to reminisce about a language nobody uses. 😂📜👾
https://dl.acm.org/doi/epdf/10.1145/97811.97845 #APL #nostalgia #webdevelopment #irony #HackerNews #ngated -
Gold rush for APL member gardens at Harrogate Spring Flower Show https://www.allforgardening.com/1736328/gold-rush-for-apl-member-gardens-at-harrogate-spring-flower-show/ #APL #garden #HarrogateSpringFlowerFestival #HTA
-
I implemented support for the graphics API in the web-based implementation.
Getting the html components laid out correctly was the thing that took 90% of the time. UI layout was a solved problem in the 90''s. Why is this still such a struggle?
Anyway, it kinda-sorta works now, so here's an example
Go ahead and follow the link and click on 'Send' to try it. Everything is client side. No tracking or anything like that.
-
Christian Lawson-Perfect created this absolutely hilarious thing that you have to see. I found it such an incredibly silly idea, in the best possible way. Check it out:
https://mathstodon.xyz/@christianp/116419088653495835
Anyway, the dataset was fun, so I decided to use it to test scatter plots in Kap. It worked pretty well. I decided to use this data to show how one can work with JSON in Kap. For well-structured JSON, it's actually rather simple.
-
I wrote another blog post. This time providing some details as to why Kap was kinda bad in the recent video by @code_report.
Not saying any future tests won't be equally bad, but it's sometimes interesting to know why something happens. At least in one specific case.
-
Allocation de solidarité unifiée ( #ASU ) https://mastodon.social/@la_voix/116306904851255157 : #Macron ne restera pas seulement dans les mémoires comme le président des riches. Il sera aussi celui qui s’en est pris aux pauvres. Après la baisse des aides personnelles au logement ( #APL ), la réduction des indemnités chômage et le conditionnement du #RSA, son 1er ministre, #Lecornu, s’apprête à présenter un texte qui risque de se transformer en nouvelle arme contre les plus précaires. https://www.msn.com/fr-fr/politique/gouvernement/allocation-de-solidarit%C3%A9-unifi%C3%A9e-comment-le-gouvernement-fusionne-les-prestations-sociales-pour-mieux-les-attaquer/ar-AA201bWP
-
I wrote a blog post announcing the new GUI for Kap.
-
Often when using Kap and I'm working with data coming from REST endpoints, I was getting annoyed that it was difficult to get a nice overview of JSON data in particular, since it doesn't have a nice array-based representation.
Of course, once you have a grasp of the data, it's easy to transform it, so how do you get that grasp? Well, a tree-based display is useful, so I implemented one. Here's a video showing what it looks like.
This is the first draft, and I do intend to improve it once it becomes obvious what's needed.
-
I spent some time improving the Kap UI. Error reporting is a lot better, and I created a short video showing what it looks like.
-
What if your synthesizer was powered by APL (or a dumb K clone)?
https://octetta.github.io/k-synth/
#HackerNews #synthesizer #APL #Kclone #musictechnology #programming #creativity
-
What if your synthesizer was powered by APL (or a dumb K clone)?
https://octetta.github.io/k-synth/
#HackerNews #synthesizer #APL #Kclone #musictechnology #programming #creativity
-
What if your synthesizer was powered by APL (or a dumb K clone)?
https://octetta.github.io/k-synth/
#HackerNews #synthesizer #APL #Kclone #musictechnology #programming #creativity
-
What if your synthesizer was powered by APL (or a dumb K clone)?
https://octetta.github.io/k-synth/
#HackerNews #synthesizer #APL #Kclone #musictechnology #programming #creativity
-
#Glasfaser von #Keller bis #Fritzbox in Mehr-Familien-Häusern: #APL, #Splitter, #Kabelkanal, #Dose, #ONT:
Nach der Hauseinführung durch die Kellerwand enden die Glasfasern des Fiber-Providers meist in einem APL-Kasten (Abschlusspunkt Linientechnik). Dieser wird auch oft als HÜP (Hausübergabepunkt) bezeichnet.
Danach folgt (in MEHR-Familien-Häusern) meist ein Verteiler-Kasten mit einer Splitterkaskade. Das ist eine Hintereinanderschaltung mehrerer optischer Splitter...
-
#Glasfaser von #Keller bis #Fritzbox in Mehr-Familien-Häusern: #APL, #Splitter, #Kabelkanal, #Dose, #ONT:
Nach der Hauseinführung durch die Kellerwand enden die Glasfasern des Fiber-Providers meist in einem APL-Kasten (Abschlusspunkt Linientechnik). Dieser wird auch oft als HÜP (Hausübergabepunkt) bezeichnet.
Danach folgt (in MEHR-Familien-Häusern) meist ein Verteiler-Kasten mit einer Splitterkaskade. Das ist eine Hintereinanderschaltung mehrerer optischer Splitter...
-
#Glasfaser von #Keller bis #Fritzbox in Mehr-Familien-Häusern: #APL, #Splitter, #Kabelkanal, #Dose, #ONT:
Nach der Hauseinführung durch die Kellerwand enden die Glasfasern des Fiber-Providers meist in einem APL-Kasten (Abschlusspunkt Linientechnik). Dieser wird auch oft als HÜP (Hausübergabepunkt) bezeichnet.
Danach folgt (in MEHR-Familien-Häusern) meist ein Verteiler-Kasten mit einer Splitterkaskade. Das ist eine Hintereinanderschaltung mehrerer optischer Splitter...
-
#Glasfaser von #Keller bis #Fritzbox in Mehr-Familien-Häusern: #APL, #Splitter, #Kabelkanal, #Dose, #ONT:
Nach der Hauseinführung durch die Kellerwand enden die Glasfasern des Fiber-Providers meist in einem APL-Kasten (Abschlusspunkt Linientechnik). Dieser wird auch oft als HÜP (Hausübergabepunkt) bezeichnet.
Danach folgt (in MEHR-Familien-Häusern) meist ein Verteiler-Kasten mit einer Splitterkaskade. Das ist eine Hintereinanderschaltung mehrerer optischer Splitter...
-
#Glasfaser von #Keller bis #Fritzbox in Mehr-Familien-Häusern: #APL, #Splitter, #Kabelkanal, #Dose, #ONT:
Nach der Hauseinführung durch die Kellerwand enden die Glasfasern des Fiber-Providers meist in einem APL-Kasten (Abschlusspunkt Linientechnik). Dieser wird auch oft als HÜP (Hausübergabepunkt) bezeichnet.
Danach folgt (in MEHR-Familien-Häusern) meist ein Verteiler-Kasten mit einer Splitterkaskade. Das ist eine Hintereinanderschaltung mehrerer optischer Splitter...
-
@jannem @Edent Interestingly enough, these languages originates from Ken Iverson's work on a notation for expression algorithms. This language (called APL) was not initially intended to be used on a computer, but for communication. This made it naturally terse, using symbols rather than words, because it was optimised for a blackboard rather than a terminal.
He invented some new notation that is used in maths today, including the symbols for floor and ceiling.
These days, I believe APL and its descendants (including Kap and BQN and others) are the only languages that actually use some variation of these symbols for the floor and ceil operations (in these languages, the symbols
⌊and⌈are used.So, to divide
aby 2 and round down looks like this:⌊a÷2One thing Kap does which the other array languages do not is to allow the user to define functions, operators and even new syntax using glyphs that are not used by the language. Some functions in the language are defined in the standard library, and uses this technique.
-
The Origins of APL (1974) [video]
https://www.youtube.com/watch?v=8kUQWuK1L4w
#HackerNews #APL #Origins #APL1974 #Video #Programming #History
-
So, today I implemented indexed assignment in Kap. I have for the longest time avoided doing so, because the semantics of the language is immutable, but the syntax itself looks like it mutates an array. After all, that's what pretty much every other language does when faced with this kind of code.
To illustrate, what do you think the following code will return?
foo ← 10 20 30
bar ← foo
foo[1] ← 50
bar[1] + foo[1] ⍝ In Kap, the last expression is the return valueIf you guessed 70, you'd be right.
If you guessed this is because the assignment on the second line makes a copy, you'd be wrong.
fooandbarindeed shares a reference to the same object.What actually happens is the when you assign to a bracket expression, a new array is created with the updated content, and the value of
foois replaced.In other words, it's equivalent to the following expression (which is what you had to write before):
foo ← {50}⍢(1⊇) fooI.e. take element at index 1, replace it with 50 and put it back in the original array, finally assigning that result back to
foo.It turns out that in practice, you don't have to replace elements at specific locations very often, so explicit syntax for it wasn't really necessary.
But, as I was typing the new tutorial for the language, I realised that trying to explain structural under (i.e.
⍢) to a beginner is not something I want to do, so I just decided to implement the standard APL notation for this operation.Now, to answer the obvious question why I was hesitating to do it earlier: The reason is that this is actually a very costly operation. The entire array is copied every time you replace a single element. It also prevents lazy evaluation, which is pretty bad, since that's what allows Kap to be fast.
Finally, a beginner user may use this in a loop to initialise an array, which would be a terribly slow.
I do have some ideas how to make the last case faster though. The idea is to allow an array to be mutable until any of its content is read. We'll see if it becomes necessary to implement this.
-
I've started a new effort to write a tutorial for Kap.
Do note it's not finished yet
But if anyone is willing to browse it to see if it's understandable, and even more importantly, interesting, please tell me if I'm on the right track.
-
CW: Spoilers for Advent of Code day 7
Up until now it feels like the advent of code problems were designed for array languages.
There are certainly problems that takes multiple lines of code to solve (some of the early problems last year had that property). We'll see what happens in the next few days, but this one was remarkably concise when solved in Kap.
Here are two separate functions that solve the two parts:
∇ solveDay7part1 {
f ← @.≠ io:read "part07.txt"
+/ ∊ (1↓f) ∧ ¯1↓ { (⍺>⍵) ∨ ∨/ ¯1 1 ⌽¨ ⊂⍺∧⍵ }\ f
}
∇ solveDay7part2 {
+/ { (⍺×~⍵) + +/ ¯1 1 ⌽¨ ⊂⍺×⍵ }/ @.≠ io:read "part07.txt"
}Part 2 was even shorter than part 1.
In both problems, the general approach is the same: Iterate over the rows, and update the correct state based on the locations of the splitters.
The second problem keeps track of the number of ways in which a certain cell can be reached, which means that the location of a beam is no longer just a boolean value, but a number indicating the number of ways in which this position can be reached. The result is then simply the sum of all beam values in the last row.
I also note that so far, most of the problems have not had weird edge cases. For example, in today's problem there were no cases of two splitters next to each other, or were there any splitters at the beginning or end of a line. If that had been the case, the solutions would be a bit more complicated.
-
CW: Spoilers for Advent of Code day 6
Day 6 was interesting. In part 2, you have to parse text vertically, in a way where array languages really shines (transposition of 2-dimensional data is just a single character).
The solution I came up with is... ok... I guess? It feels it should be possible to do it much more concisely than I did it, and I've seen solutions in other languages that are on the same order of magnitude in size compared to the Kap solution, which is not something you see very often.
In particular, I saw an amazing Ruby solution that puts mine to shame, and I say that even though I don't even know much Ruby and never really liked it that much.
I am kind of happy with the way I implemented the operation selection. I take advantage of the case function (docs). It computes both the sums and the multiplications, and then uses case to pick the correct set of results.
Kap can do this without computing the double computing results, since the results of the sums are lazy, and the individual results will only be computed when the result is read.
https://codeberg.org/loke/advent-of-code-kap/src/branch/master/advent-of-code-2025/part06.kap
-
CW: Spoiler for Advent of Code day 3
We're still in the easy part of advent of code. I have still been able to solve them in a single line of code per problem.
For part 2, I used the reduction operator for iteration. A more classic APL solution would probably use
⍣in order to conserve memory (even though in this case, you only iterate 12 times anyway, so it doesn't matter).In general, using
/for iteration in Kap is less ugly than in APL, since Kap has lazy evaluation, so in most cases you wouldn't materialise the array you're reducing over anyway, so it's often a simpler solution than to try to bend the power operator to do what you want, which is not always obvious. At least that's my preference.https://codeberg.org/loke/advent-of-code-kap/src/branch/master/advent-of-code-2025/part03.kap
-
CW: Spolers for Advent of Code day 2
I was at work when I first read the problem. I also misread the problem such that I thought it was actually the problem as described in part 2.
So, I spent some time thinking about a way to solve it efficiently, since I assumed there were going to be huge ranges of numbers, and I needed a way to quickly filter out values.
When I finally took a look at the actual data, I realised that it was possible to brute-force, and the solution turned out to be much simpler.
∇ loadData {
,/ {…/⍎¨⍵}¨ (@-≠)⍛⊂¨ (@,≠)⍛⊂ ↑ io:read "part02.txt"
}
∇ solveDay2Part1 {
+/ { a←10⊤⍵ ⋄ ⍵ × ∧/=⌿ 2 ¯1 ⍴ a,(2|≢a)⍴100 }¨ loadData 0
}
∇ solveDay2Part2 {
+/ { a←10⊤⍵ ⋄ d←1,math:divisors ≢a ⋄ ⍵ × 1∊{ 1=≢∪ ¯1 ⍵ ⍴ a }¨ d }¨ (10≤)⍛/ loadData 0
} -
CW: Spoilers for Advent of Code day 1
These are my solutions for day 1. I always enjoy it when I can write the entire solution in a single line of code.
For part 1, the majority of the code is in the conversion of the input data. In part 2, the conversion code is exactly the same, but the solution is a bit longer.
The input conversion converts a string
"L10"to -10, and"R10"to 10. Part 1 in then simply a matter of performing a sum scan over the values, take the results mod 100 and count how many zeroes there are.Part 2 was a bit more annoying. I solved it by creating a sequence of all numbers that is processed, meaning that
L5 R2becomes50 49 48 47 46 45 46 47. I then take the values mod 100 and count the number of zeroes, exactly like the previous solution.∇ solveDay1part1 {
+/0=100|+\50 , (¯1+2×@L=↑)«×»(⍎↓)¨ io:read "part01.txt"
}
∇ solveDay1part2 {
+/0=100| {⍺,(↑⌽⍺)+(×⍵)×1+⍳|⍵}/ 50 , (¯1+2×@L=↑)«×»(⍎↓)¨ io:read "part01.txt"
} -
Episódio 169 – Criptografia – Parte B
https://retropolis.com.br/2025/11/12/episodio-169-parte-b/
#Podcast #ACM #AES #AKS #algoritmo #APL #AssinaturaDigital #ATM #Bitcoin #blockchain #Blowfish #BruceSchneier #BugDoMilnio #CertificadoDigital #ChavePrivada #ChavePblica #ClaudeShannon #ComputaoHomomrfica #ComputaoQuntica #Criptografia #CriptografiaReticulada #CurvasElpticas #DEMON #DES #Dilbert #dinheiro #DVDCSS #ECC #fatorao #GCHQ #hash #HorstFeistel #IBM #ICPBrasil #IFF #IPAA #LloydsBank #LU
-
Episódio 169 – Criptografia – Parte B
https://retropolis.com.br/2025/11/12/episodio-169-parte-b/
#Podcast #ACM #AES #AKS #algoritmo #APL #AssinaturaDigital #ATM #Bitcoin #blockchain #Blowfish #BruceSchneier #BugDoMilnio #CertificadoDigital #ChavePrivada #ChavePblica #ClaudeShannon #ComputaoHomomrfica #ComputaoQuntica #Criptografia #CriptografiaReticulada #CurvasElpticas #DEMON #DES #Dilbert #dinheiro #DVDCSS #ECC #fatorao #GCHQ #hash #HorstFeistel #IBM #ICPBrasil #IFF #IPAA #LloydsBank #LU
-
Episódio 169 – Criptografia – Parte B
https://retropolis.com.br/2025/11/12/episodio-169-parte-b/
#Podcast #ACM #AES #AKS #algoritmo #APL #AssinaturaDigital #ATM #Bitcoin #blockchain #Blowfish #BruceSchneier #BugDoMilnio #CertificadoDigital #ChavePrivada #ChavePblica #ClaudeShannon #ComputaoHomomrfica #ComputaoQuntica #Criptografia #CriptografiaReticulada #CurvasElpticas #DEMON #DES #Dilbert #dinheiro #DVDCSS #ECC #fatorao #GCHQ #hash #HorstFeistel #IBM #ICPBrasil #IFF #IPAA #LloydsBank #LU
-
Episódio 169 – Criptografia – Parte B
https://retropolis.com.br/2025/11/12/episodio-169-parte-b/
#Podcast #ACM #AES #AKS #algoritmo #APL #AssinaturaDigital #ATM #Bitcoin #blockchain #Blowfish #BruceSchneier #BugDoMilnio #CertificadoDigital #ChavePrivada #ChavePblica #ClaudeShannon #ComputaoHomomrfica #ComputaoQuntica #Criptografia #CriptografiaReticulada #CurvasElpticas #DEMON #DES #Dilbert #dinheiro #DVDCSS #ECC #fatorao #GCHQ #hash #HorstFeistel #IBM #ICPBrasil #IFF #IPAA #LloydsBank #LU
-
Aujourd'hui dans les trucs que j'apprends avec la #CAF : si vous êtes bénéficiaire de l' #AAH alors il n'y a pas de prise en compte du patrimoine du ménage pour le calcul des #APL
https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000038814936
-
For a while I've had this idea that often you want to create a simple form for displaying and inputting values. You want to do that without having to design a full on application, and you also don't really care about what it looks like.
Back in the day, there were tools like forms designers in databases like dbase, or people used visual basic to whip together a quick UI.
I've also seen some creations in excel that are both terrying and wildly impressive at the same time.
I'm not sure what people use these days (other than excel, which is still going strong), but I like to use Kap when working with data in different forms.
Array languages are really convenient when manipulating large datasets, but sometimes I just want to bring up a quick form, to simplify various common operations.
I was inspired by the
SCREEN SECTIONin COBOL, which allows you to declare input and output fields in a grid, and then read/write the data in it. So that was my thinking when I started working on the forms module for Kap.It's nowhere near usable yet, but I can at least bring up a window and read the data, which is enough to start experimenting with how things like this can be used. I created a short screen recording showing how it works.
https://www.youtube.com/watch?v=rAMtwDvPrvo
The implementation is platform-agnostic, and I intend to add both HTML-based renderer and a text-based one when used on a terminal.
-
A link to the following code was shared on my feed. The actual post was about something else, but the anagrams program was interesting. It prints the longest anagrams that was found in the dict file.
Obviously I wanted to write a version in Kap (and yes, I'm posting this to my feed, because unless I try to only annoy people who has previously indicated that they want to be annoyed by me (possibly by following me) 🙂 ).
Here's the implementation in factor: https://github.com/factor/factor/blob/master/extra/anagrams/anagrams.factor
And here is my version in Kap, that prints all different forms of the 10 largest words (i.e. the words with the most anagrams, the biggest having 15 of them.
I just found it a fun exercise to write it in a single line of code.
10 ↑ (⍒≢¨)⍛⊇ (=∧¨)⍛⫇ ∪ unicode:toLower¨ io:read "/usr/share/dict/words"This tells us that the winner is:
"acers" "acres" "arces" "cares" "carse" "caser" "ceras" "cesar" "cresa" "escar" "races" "sacre" "scare" "scrae" "serac"I have no idea what most of those words mean.