« first day (1232 days earlier)      last day (1423 days later) » 
00:00 - 15:0015:00 - 00:00

12:14 AM
is there a way to force dyalog to leave my keyboard alone?
 
@cannadayr OS?
 
debian
ahh nvm, its because i started w/o -nokbd
2nd question, is there a way to go back a single line of history in the cli?
 
@cannadayr that's an option‽ i always just edited /opt/mdyalog/*/64/unicode/aplkeys.sh :|
 
oh thats good 2 know
hah took me waaay too long to find the nokbd. it was the primary reason i avoided dyalog for a long time
the 2nd being i dont know how to go back to the previous line of history ;)
 
@dzaima (note that that needs to be done with every update, which is extremely annoying)
 
12:19 AM
leave my kbd alone! windows key is used by gnome a lot.
 
@cannadayr very much agreed
 
ngn
@cannadayr <C-x>b
 
@ngn thx
is there a way to make dyalog cli behave more like a traditional repl?
the <C-x>b is very useful tho.
should get me thru messing around w/ dyalog-prime
 
@ngn way too long of a shortcut for something that's about as often used as enter. even 2×up arrow is easier for me for me to type
 
ngn
@cannadayr you could use it with rlwrap dyalog -script (exit with )off) but no prompt and it's buggy
 
12:27 AM
@ngn i did try that but it seems that 18.0 broke it ¯\_(ツ)_/¯
 
ngn
@dzaima i agree
 
@dzaima seems that now dyalog -script x reads the file x and executes it
is there a reason some places support multiline dfns and some don't?
 
ngn
@dzaima in the session you can't have multiline because enter executes the line
 
@ngn so the problem is dyalog interprets things as REPL lines in way too many places?
 
ngn
@dzaima probably. i should stop pretending to be dyalog support :)
 
12:36 AM
@dzaima does seem to be the case. but whyyy
 
ngn
@dzaima wrap it in a tradfn and it'll be fine
 
@ngn ಠ______ಠ
(okay that does make some sense though)
 
ngn
@dzaima i put this at the top of my files, chmod +x them, and run them
 
@ngn right, and 18.0 broke that..
 
ngn
hm.. now, should i upgrade or not? :)
@dzaima putting this on the first line works: #!/opt/mdyalog/18.0/64/unicode/dyalog -script
except for multiline dfns :(
 
12:57 AM
dyalog just really doesn't like multiline dfns. not that i plan to use them much anyway, most of what i do is in dzaima/APL and it provides a usable command-line interface :)
 
ngn
#!/bin/bash
dyalog -script <(echo ∇M;tail -n+3 $0;echo -e '∇\nM\n⎕off');exit $?
 
Do you really use Dyalog APL for real-world scripting?
 
ngn
@Bubbler me? no, just golfing
 
Then why bother with such a convoluted bash script ⍨
 
ngn
@Bubbler it's much more convenient to work from vim than from the apl session
 
1:06 AM
(Probably it's me who is too much used to fancy GUIs...)
I just use TIO and RIDE, no Linux terminal, no vim
 
@Bubbler i always use dyalog from RIDE (partially probably because its commandline is borderline unusable), but writing actual multiline reusable code in an external file editor is often nicer
 
@dzaima Sounds legit
though still my favorite APL file editor is RIDE (mainly because it is the only one that supports backtick escapes)
 
ngn
@Bubbler @dzaima whatever works for you. my choice of editor is based on habits that i can't easily get rid of.
 
1:22 AM
@ngn i can luckily switch between many "regular" editors (RIDE, my android app (which is not android exclusive), sublime, atom, IDEA), but i'm trying to use vim for quick modification (even if most of my interaction is open, i, type, <esc>:wq<enter> :p)
 
ngn
@dzaima ride can be configured to start an external editor when you do )ed, by the way
one drawback of editing with vim is the lack of integration with the debugger which dyalog are so proud of
but i'm accustomed to debugging with printf(), ⎕←, etc in any language :)
 
@ngn I'm guessing there are extensions for emacs, though not a debugger. here it is
 
ngn
@Wezl yeah, probably. there are at least a couple of apl programmers who are emacs fans
integration with the debugger is theoretically possible through ride's protocol
(ride, being a separate process from the interpreter, communicates with it through a socket)
 
ngn
1:50 AM
@Wezl there's also harsman/dyalog-mode
 
 
4 hours later…
5:27 AM
@RGS Yes, and yes.
 
 
2 hours later…
7:54 AM
@Adám Is there a canonical way to show that some computed value is very close to zero (i.e. negligible) without printing out the number itself (e.g. ¯8.881784197E¯16)?
 
@Bubbler You could compare its magnitude to ⎕CT.
 
Would it be OK to use it in an example for an APL Wiki article?
 
Yes.
 
Unrelated: Grab this challenge for a win!
 
8:16 AM
(^ Hint: it has been covered in one of Cultivation)
 
RGS
8:29 AM
To formulate it generally, doesn't X⌹Y solve the least squares problem aY = X, for a? And assigning to a the appropriate dimension?
 
Yes.
 
RGS
@Adám in TMN I actually meant Ya = X right?
 
@RGS Oh, because the non-commutativity of +.×?
 
RGS
@Adám yes
 
Then yeah. I didn't take your text as being formal.
 
RGS
8:45 AM
@Adám no problem, I just wanted to write it down correctly in my answer
 
8:58 AM
Yay, the participants of this room excel at staying on-topic.
 
RGS
@Adám I was wondering why APL wiki defines a Boolean function as a function that returns a Boolean when applied to Boolean arguments
My surprise arises from the fact that I expected < (for example) to be a Boolean function, because whatever inputs we give it (in its domain) it returns a boolean
So I expected a Boolean function to be defined as a function that returns 0/1 when applied to its domain. I wonder if restricting the definition to giving 0/1 as input is just to allow functions like ^ to be extended
Or maybe I am just overcomplicating things and it just a definition of Boolean function?
 
 
2 hours later…
11:13 AM
@RGS Notice that GCD and LCM have their own pages. You could potentially include separate pages for the IMPLY/NIMPLY/CIMPLY/CNIMPLY (sub-domains of the comparison) functions too, but I think that's unnecessary. They are all (including the comparison ones) treated in the general article.
 
RGS
@Adám it was by reading that article that I found that definition of boolean function that "surprised me" at first
 
@RGS Wikipedia seems to agree that "Boolean function" means {0,1}→{0,1}:
In mathematics and logic, a Boolean function is a function whose arguments, as well as the function itself, assume values from a two-element set (usually {0,1}). As a result, it is sometimes referred to as a "switching function". A Boolean function takes the form f : { 0 , 1 } k → { 0 , 1 } {\displaystyle f:\{0,1\}^{k}\to \{0,1\}} , where { 0 , 1 }...
 
RGS
@Adám yeah it does make sense
 
Other primitive Boolean APL functions: | ! × *
 
@Adám @RGS If I'm reading things correctly, then what @RGS thought was a boolean function is really an indicator function or a boolean predicate function. But I'd have to admit that I often hear BPFs referred to as BFs, omitting "predicate".
 
RGS
11:21 AM
@Adám +← 1
@JeffZeitlin this might be the source of my confusion :) thanks
 
Announcement: Dyalog APL Version 18.0 is now released!
6
 
RGS
@Adám I thought it would only be made available to the general public after the competition was over
 
@RGS We reverted on that decision, but for fairness, you can only use 17.1 for Phase I.
 
RGS
Alright; you reverted on that decision for any reason in particular?
 
11:43 AM
@RGS The only reason to delay was to avoid unfair advantages. Upon further thought, we decided that we could achieve the same goal by restricting phase I and putting a note on the competition site.
 
12:00 PM
Yay!
Congrats, team Dyalog.
 
12:20 PM
@RGS The contest website now mentions that "When you download Dyalog you will be offered both versions, and you can have both installed on your machine at the same time." .. the default download is now 18.0 but it's easy to grab 17.1 too. We'll leave both versions available for download for a while - I believe that in future we'll make the previous version available for a while after we release the latest version as there are people who still want the previous one
 
RGS
@AndyS I understand, thanks :)
 
Congratulations on the release!
Does anyone know when/if the British APL Association is going to upload recordings of their newer Zoom meetings? I was looking forward to the presentation on CoSy but couldn't make it at the time
 
@ab5tract They are — just slow processing.
 
OK, I remain patient
 
I also need need to find a way to publish the recordings from APL Orchard Live.
 
12:29 PM
 
Maybe via Richard's YouTube channel? YouTube also makes it easy to create new channel identities under a single Google account.
 
@dzaima Yeah, that's a typo. I'll see if I can get that fixed.
 
Maybe an APL Orchard youtube channel that would allow for a large array of community input..
 
haha
 
:)
 
12:43 PM
@Adám But in that case, there are only 16 (2*4) unique boolean functions, so it seems silly to include things like ⌈ & ⌊ since ⌈ ←→ ∨ & ⌊ ←→ ∧.
        0 1 0 1 {∧⌊} 0 0 1 1
0 0 0 1
        0 1 0 1 {∨⌈} 0 0 1 1
0 1 1 1
 
@AviF.S. Is there any particular reason to prefer LCM over multiplication or minimum, when dealing with Boolean data?
 
@Adám Good point, I did forget addition/multiplication
Wish it wasn't too late to add those!
I would've thought it was a non-question though, since ∨/∧ look like their corresponding logical symbols! And in the dyadic bar, they're even called Logical And/Or.
While I do agree that +/× are more mathematically elegant, I would've thought everyone would agree that ∨/∧ are far more logically clear
 
Sure, and I'd say use the proper symbols too. Still, with the literal definition of "Boolean function", the others are too.
@AviF.S. +≢∨
 
@Adám Yes, so is ⊢/⊣, just not interesting if you ask me, because they're not unique and can all be made up of simpler ones...
 
@AviF.S. I don't understand what you're getting at here. Monadic and ?
 
12:53 PM
@Adám Well it's not a scalar function, so maybe it doesn't count? But no, I meant dyadic
 
@AviF.S. Please backtrack. You've lost me.
 
@Adám Just: 0 ⊢ 1 → 1, it couldn't have been more mundane :)
 
@AviF.S. Ah, but right, they are not scalar. You'd want ⊢⍥0 and ⊣⍥0 where ⍥k is the depth operator.
 
@Adám Yes, I just didn't realize that was a requirement. Is it?
 
Otherwise the function is a {0,1,array}→{0,1,array} where array:[{0,1,array},{0,1,array},…]
 
12:59 PM
@Adám But all the functions we've mentioned have larger domains than just 0/1?
Most of them have {0,1, all other c∊\mathbb{C}} → {0,1, all other c∊\mathbb{C}}
 
True. Hm, maybe it is the change in structure that is the issue. Is {⍬} a Boolean function?
 
I get that they're still scalar, but I would've thought all that mattered was whether given {0,1} → Out, Out ⊆ {0,1}. Not whether they can implicitly map.
Most languages can't implicitly map, in fact, in TMN 0 1 0 1 ∨ 0 0 1 1 makes no sense...
 
@AviF.S. What is TMN?
 
@ab5tract Traditional mathematical notation!
 
@AviF.S. My brain was landing somewhere near there as soon as I tapped "send" :)
 
1:04 PM
Good question! I doubt it's a convention anywhere else but in the APL world, but I've seen it used in this room and in Dyalog slides to compare APL to TMN, especially to brag about how similar they are!
 
/me has a very, very rough background in mathematics, unfortunately
 
Eg, they introduce a new feature like trains, and then they have a table with APL on one end and TMN on the other to show how closely this new representation maps the traditional, eg:
 
Right, I've seen examples of what you mean.
 
       APL             TMN
    (f+g) n         (f+g)(n)

    For f(n) + g(n)
When they introduced trains (fork here)
 
1:07 PM
But IIUC, APL represents an executable version of Iverson's attempt to upgrade/expand TMN?
 
@ab5tract Correct, but they still like to show off, when something new is similar to what you're used to. In addition to showing off when something new is better than what you're used to :)
 
So in that case any differences might be considered reasoned and deliberate improvements over the old representation. Though of course once it became executable I'm sure there were compromises/wandering paths through dark and uncharted woods WRT syntax and semantics specific to its new computational medium.
 
@ab5tract Exactly!
 
Did Iverson ever return to the project of a "pen and paper" mathematical notation?
 
@ab5tract As far as I know, APL was always the pen and paper one. And then I think J was the one he designed with the intention that it should be used for computers
 
RGS
1:20 PM
@Adám from your discussion with Avi F. S. did I understand that for the boolean functions notebook we only want scalar boolean functions..?
 
@RGS Haha, whoops! Please just call me Avi :) The initials were unnecessary!
And I don't believe we reached a conclusion... But that was his proposition
I was saying that most languages, including TMN, don't implicitly map so I don't see why APL should require it. Eg. I'm pretty sure 0 1 0 1 ∧ 0 0 1 1 would confuse most logicians/mathematicians
@Adám Good point! I should've added the constraint that Out≠⍬ to the prior Out⊆{0,1}
Aka, for each output of a given operation, out∊{0,1}, is likely a better way to put it
 
ngn
@AviF.S. only adam uses that abbreviation, not the apl world
 
@ngn I also saw it in the Webinar given by Richard Parks, I believe, on the introduction of trains! And RGS has used it in the room, as well, if I remember correctly
@ngn But perhaps it's not completely widespread
But maybe @Adám made the slides!
 
ngn
@AviF.S. where do you think they got that from :)
 
@ngn Agreed! But everything started somewhere :)
 
ngn
1:30 PM
i rest my case
 
RGS
@AviF.S. I used it when talking to Adam iirc ;)
 
@RGS That's my recollection too! Did you get it from him?
 
RGS
@AviF.S. Yup, Adam's the only person I ever saw using "TMN" to mean "traditional maths notation" and whenever I see Adam use it, I often see someone asking what it means afterwards :P me included, the first time I encountered that abbreviation
 
@RGS Oh well! I first learned it from you though :)
 
@AviF.S. Indeed, from my slides for the SP2 workshop of Dyalog '19.
 
1:34 PM
It is also in that webinar...
That's much too funny! That's the exact image I sent earlier:
https://ibb.co/M7Twf2K
.... Uhhhh.... I give up...
:54619237 Haha, thanks a bunch @ngn :)
 
@AviF.S. Nothing strange here. Even when there's a main "author" of a webinar or workshop or presentation, we often cooperate when creating the materials.
 
@Adám Of course! Didn't mean to to say it was funny-odd (nor funny-haha), just funny-coincidence!
 
Right, but no coincidence at all. Since my workshop slides had only ever been shown to a limited audience, we went with reusing the material in the webinar. RichardP and I sometimes even prepare a webinar, and only last minute decide who is actually going to present it. E.g. this one had Richard's name on it for a while after I did it. Then it was corrected by someone who can't spell my name.
 
To be fair, that doesn't narrow the list of suspects much...
 
@Marshall That one is funny-haha :p
@Adám I see; I hadn't realized!
@TeamDyalog Congrats on Dyalog חי!
 
1:47 PM
But yes, I'll confess:
in The Nineteenth Byte, Dec 6 '18 at 21:23, by Adám
@dzaima Yes, but that is then more removed from TMN, and the symmetry breaks at the partial inequality.
Seems I began using the term long before the abbreviation:
Apr 25 '18 at 9:12, by Adám
@z3r0 OK. APL is a bit different than most programming languages. In fact, it descends from traditional mathematical notation rather than from some older programming languages. The main ideas of mathematics (especially linear algebra) were taken, linearised (i.e. to fit on a single line without formatting), and generalised, until a programming language emerged. Hence the name APL
 
@Adám So I haven't lost all my marbles yet
@RGS Were you guys discussing anything interesting? It looks like I missed a back and forth!
 
RGS
@AviF.S. Not really, I wrote a comment that became outdated when Adam edited his own quote
 
@RGS Ah!!
 
But hey, I'm not alone: Wolfram and Wikipedia use the term too, and search engines seem to understand it too.
 
2:10 PM
> Possible Issues TraditionalForm is ambiguous (…)
 
font update - (current) letters finished, and because i didn't copy the center line from already existing symbols, realigned everything :| (yes the 𝕊 is done extremely lazily)
 
@dzaima Can you add double-struck [ ] ( ), i.e. ?
 
@Adám i guess, those should be rather simple
 
Is there anything preventing the use of BQN386 for APL?
 
@Adám with my chars i went with a wrong stroke width, probably making APL chars a little unbalanced-looking (though i did try to remake the things in the 1st line of that picture), and BQN does use the diacritics as actual chars, but otherwise no
 
2:19 PM
@dzaima Are you going to publish it?
 
@Adám the old version is already here, i'll push the updates once i finish the brackets/parens (don't want to push binary blobs to git too often)
 
@dzaima APL implementor AND font designer...?
 
Doesn't dzaima merit a page on APL Wiki by now? Cf. ngn.
 
@xpqz eh, it's not that hard to make fonts when you have a usable vector graphics editor and found out that fontforge allows exporting/importing svgs
 
@Adám - Seeds will be here, like Cultivation?
 
2:28 PM
@Adám Probably, but I'd also advise waiting a little while or you might find yourself spending a lot of time updating it.
@JeffZeitlin Yes.
 
@Adám +←1
 
Welcome everyone to the first APL Seeds session!
 
I would've simply done the parenthesis with a stack; curious what other way we'll learn!
Whoops, it's already started!
 
will APL seeds held in the chat room or over video?
 
@cannadayr Chat room! Like Cultivation
 
2:31 PM
@cannadayr - Right here, right now! :)
 
The idea of this series is that we'll learn how to grow your own APL (or not-APL). At the beginning I think it will be something like a study group for Aaron Hsu's new array-based compiler ideas.
 
RGS
@Marshall reference(s)?
 
So to get us started I will explain some of the first steps I took on my BQN compiler (which is nowhere near a full compiler). We'll be trying to parse a simple APL sentence, essentially.
 
Will the concepts also be appropriate for an interpreter?
 
RGS
@Marshall (thanks)
 
2:34 PM
@JeffZeitlin They wouldn't apply to a very pure interpreter like is typically used for APL, but there's a continuum from interpreters to compilers and this is one of the first things you'd do to be more compiler-like.
We will probably look at interpreter techniques in other APL Seeds sessions.
 
/me nods
 
So here you can see the cases my compiler currently handles. No operators, and only values (not functions) can be assigned.
However, that simple syntax is actually very close to the compiler's parsing code, which has no control flow or function assignments.
 
@Marshall Not entirely clear on what/how those cases are demonstrating
I don't really see the pattern...
 
@AviF.S. That's the kind of code the compiler can currently compile.
 
@Marshall I got that, I just thought maybe there was more to what it was demonstrating than simple functions + inline assignment
 
2:38 PM
I don't think we'll get all the way though today, but we'll focus on a smaller subset without assignments or statement separators.
 
RGS
@Marshall is the compiler itself written in bqn..?
 
@RGS looks like it.
 
@RGS Yes, and currently executed with BQN2NGN. Speaking of which, we'll be using BQN in this lesson.
 
@Marshall ⍤ ⍥ ⍤
 
Oooh.
 
RGS
2:39 PM
Maybe that is a discussion for another time but it is completely beyond me what it means to write a compiler for a language in its own language... especially when the language is still being developed...
 
You can use BQN2NGN here, and dzaima's paste has nice syntax highlighting for it.
 
@Marshall Too bad I didn't study it well, but that can help me learn it.
 
@Marshall Have you make a keyboard for it yet?
 
Yes, I'm definitely not assuming people know BQN already.
 
@AviF.S. BQN2NGN has a language bar, backtick keybindings, and some tab-combinations.
 
2:41 PM
@AviF.S. The interface I just linked to has a backtick keyboard. Unfortunately that makes it impossible to type a backtick, which we will be using, so you have to copy-paste that character.
 
@Adám Oh neat! I knew the language bar; forgot the backpacks backticks, haha!
 
(the correct interface it turns out is a backSLASH keyboard.)
So to get us started we're going to look at the classic parenthesis nesting level calculation.
 
@AviF.S. surround with triple-dashes
 
@dzaima Thanks!!
 
(after i finish the font (double-struck parens are ugly) i do plan on making a linux xkb layout for BQN)
 
2:43 PM
@dzaima Yes, please
 
@Marshall Wait! I swear it didn't give you the backtick secrets when you hovered over the language bar yesterday, did it?!
 
The BQN translation is +`-´"()"=⌜x, which I hope has a fairly obvious correspondence to the APL.
 
Uh, oh, backticks in markdown are bad.
 
(It's backslash to escape if anyone's wondering)
 
@Adám they're fine if enclosed in multi-backticks, but those need to not be surrounded with spaces
 
2:45 PM
Ah yes, +\-/'()'∘.=x
 
The only difference in the primitives other than some stuff being superscripted is that BQN turns Outer Product into a conventional operator .
 
@Marshall @languagebarpeople I've been wondering also if there's a shortcut to execute!
 
@Marshall ..somehow i didn't realize the ticks were superscripted slashes :P
 
The test string I used for this is a quadratic formula x←"((-3)+√(3×3)-4×2×1)÷2×2". You can use your own if you'd like, of course.
 
@AviF.S. ctrl+enter?
 
2:47 PM
I'll make sure everyone has that running before proceeding.
 
@dzaima .... Never occurred to me :( Thanks!
 
The other note is that BQN differentiates between characters, which are not arrays, and strings, which are rank-1 arrays. Strings use double quotes and characters use single ones, like in C.
 
method b in gnu apl:
+\(1 ¯1 0)['()'⍳'plus(square(a),plus(square(b),times(2,plus(a,b)))']
 
Okay, are people able to get that BQN code working?
 
(im following along w/ gnu apl as its my comfort zone but yes)
 
2:49 PM
I guess I should also say a little about how it works.
@cannadayr Translating to another language is probably also a good way to internalize it better.
 
@Marshall Noticed that! Curious as the pros/cons of having 'scalar strings'
 
so how do I pronounce "x" and how do I pronounce "𝕩"?
 
@RichardPark Well, one's double struck.
So do that with your tongue.
 
@Marshall okay but if I want to dictate to someone writing it down
oh okay
 
In other words, I have no idea.
 
2:51 PM
a bit like spanish rolling r's
so it's "eks" and "ek(rolled)s"
 
Love it!
 
@Marshall 𝕨 - double-double-u? quadruple-u? :p
 
Anyway, the idea for the nesting code is that the nesting level is the number of open parentheses before a character minus the number of closed ones. If those numbers are equal then every parenthetical has been closed and we're back at the bottom level.
 
A lot of people have trouble with the rolling tongue trick though.
 
If there are more closed parentheses then you should get a syntax error (but I haven't yet added validation).
 
2:54 PM
@Marshall Doesn't that become problematic with multiple types of parentheses? ({)}
 
@RichardPark Maybe x-bar? Like the x̄ in physics.
 
@ab5tract how do you even roll a k?
 
@Adám Is this really the pont of this example?
 
@Adám Yes, validating on nesting level only fails to detect that case.
 
(i think were getting off track)
 
2:55 PM
@Wezl ʞ
 
RGS
(is it me or is the language bar missing ` ?)
 
ngn
e(click)s, like in xhosa :)
 
But we can also compute the way parentheses are paired, which will allow us to catch it.
@RGS It is. I thought Prefixes was a good replacement for Scan, but changed my mind.
 
@Marshall what do you mean "compute the way they are paired", like matching them?
 
this is definitely reminding me of Aaron Hsu's thesis. I went thru it a couple months ago and pulled out the tree manipulation equations and translated it to gnu apl. Am keeping notes in a repo that will likely include the relevant ones.
 
2:57 PM
@RichardPark Yes, figure out which closed parenthesis closes which open one.
 
@Marshall cool
 
(fwiw, I think I'll call 𝕩 and 𝕨 arg and param)
 
To pair parentheses, the thing we need to notice is that at a particular nesting level, open and closed parentheses must alternate, so that the open-close pairs are all right next to each other.
 
@Adám Sorry for the tangent - my last thought on the matter is that any serious version of this should be hand-writable and speakable (dictatable) and that "arg"→"𝕩" and "param"→"𝕨" is intolerable
 
@Adám +\-⌿'()'∘.='x
 
00:00 - 15:0015:00 - 00:00

« first day (1232 days earlier)      last day (1423 days later) »