« first day (1450 days earlier)      last day (1211 days later) » 
00:00 - 13:0013:00 - 23:00

1:22 PM
@ngn I think there's a lit bomb character in unicode.
 
k? unicode?! never!
 
@rak1507 k7 was all about unicode! kparc.io/kc/#0%201%402
 
oh cool
 
1:42 PM
worth it for πŸ’£
@ngn a cutting reply
 
I think you are forgetting princes, and royals who refuse to gender identify? (ducks and heads back to the next meeting)
 
@rak1507 {⍳⍨⍬⍬}β‰βŠ’
@ngn Should I add βŽ•SAVE'Princess'?
@ngn BQN asks the aliens to abduct the princess.
 
@AdΓ‘m Maybe it's not a good thing that it can be used with my flying saucer
 
2:01 PM
@AdΓ‘m INDEX ERROR: The princess is in another castle.
 
@ngn BQN can't rescue a princess, not even a π•‘π•£π•šπ•Ÿπ•”π•–π•€π•€, only a β„™π•£π•šπ•Ÿπ•”π•–π•€π•€.
 
we need an apl wiki page just for jokes
or is it already there
 
2:26 PM
@Razetime I agree, though maybe "Humour" in general, which includes jokes, puns, anecdotes, memes etc. Feel free to create one. All the APL/apple puns should at least be listed, and dyalog.com/blog/2015/12/apl-puns should be among the external links.
 
@AdΓ‘m Well if you change the princess from a subject role to a function role, it seems your work is already done.
 
@Marshall Can BQN save anonymous princesses, though?
 
@AdΓ‘m Sure, that's what {𝔽} is for.
 
Sounds like a solution then.
 
Although I think saving a princess without even bothering to know her name could be kind of rude.
 
2:32 PM
BQN: You know how to save the princess, but the castle doesn't support the involved characters.
 
@Marshall I'd rather be saved incognito than not saved at all , though I have to admit I am not a princess. dfns feel the same.
 
Arthur Whitney offered to help save the princess but was unavailable due to a sudden breakthrough in kOS
 
nice
J/Sharp APL: You can save the princess, but only if she is in a box.
 
2:54 PM
I hate to disturb this discussion, but can someone kindly improve this code?
it's for novice readers, so simplicity matters more than conciseness.
 
@RomillyCocking 1↑⍴≒
 
shuffle ← {⍡[?⍨1↑⍴⍡;]}
I want to avoid bracket indexing
 
@RomillyCocking {β΅βŒ·β¨βŠ‚?⍨≒⍡}
 
@AdΓ‘m perfect
 
Of course, with selection/permutation function, it'd be neater.
@RomillyCocking Tacit option: βŠ’βŒ·β¨βˆ˜βŠ‚?β¨βˆ˜β‰’
 
2:57 PM
Novice readers might also prefer parentheses (and, gasp, whitespace!) to ⍨
 
@AdΓ‘m Indeed. The Python original uses numpy.random.shuffle
 
@MartinJaniczek True, but if they are anyway learning ⍨ for ?⍨…
 
@MartinJaniczek I'm not going to indulge them with parens, but I might give them some whitespace.
This is for a comparison between published Python/numpy code and an APL equivalent. It's re-implementing some leading-edge ANN research.
 
The tic to replace (A)fB with Bf⍨A develops pretty early even in newbies though, so yeah they'll probably manage :)
 
They won't actually be learning APL, just seeing that there's a fairly simple mapping between the numpy code and the APL. And there is a much better 'signal to noise' ratio in the APL.
(Even when I write it)
 
3:20 PM
β‹„ ⍳2 3
 
@Adám
β”Œ→──────────────────┐
↓ β”Œ→──┐ β”Œ→──┐ β”Œ→──┐ β”‚
β”‚ β”‚1 1β”‚ β”‚1 2β”‚ β”‚1 3β”‚ β”‚
β”‚ β””~β”€β”€β”˜ β””~β”€β”€β”˜ β””~β”€β”€β”˜ β”‚
β”‚ β”Œ→──┐ β”Œ→──┐ β”Œ→──┐ β”‚
β”‚ β”‚2 1β”‚ β”‚2 2β”‚ β”‚2 3β”‚ β”‚
β”‚ β””~β”€β”€β”˜ β””~β”€β”€β”˜ β””~β”€β”€β”˜ β”‚
β””βˆŠβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
 
@DyalogAPL Thanks!
 
@Adam Like this?
 
@Brian That's right!
 
Is there any way to modify Excel workbooks from APL, or do you have to use CSVs? I found a few products online, but I'd like to avoid those.
 
3:33 PM
@user AFAIK Dyalog does have some integrations for MS Excel, yeah!
 
Nice!
 
@RikedyP did a webinar on excel interop, as I recall.
@user ^^
 
@user There is regular office automation via COM/OLE which require MS Windows, and there are a couple of new tools that are cross-platform but still relatively untested, such as github.com/the-carlisle-group/APL2XL
 
Thanks, I'll check those out!
 
If you are under Windows, take a look at the LoadXL and SaveXL functions in the loaddata workspace (which also contains functions for XML, CSV and SQL).
 
3:41 PM
@Dincio Welcome. Interested in APL?
 
@MortenKromberg LoadXL and SaveXL seem like the simplest alternatives here.
 
@user Hope they work for you, the comments suggest I wrote the code in 2008 :)
 
@MortenKromberg Seems to be working, I tested it on a dummy file. Thanks again!
 
RGS
@AdΓ‘m Thanks!
 
@all Please welcome @user921694 and @user87247 ― they are Dyalog's CEO and Development Manager, respectively.
 
3:51 PM
Welcome!
I am about to scamper off to the BAA (virtual) meeting
 
forgot about that, thanks for the reminder
 
Oh right, open session in 6 minutes Passcode ← ×/1920 12 17
 
RGS
On Windows, going to Options → Configure → Windows gives me the possibility to alter some widths and heights.
I thought the width of the "Edit Windows" referred to the window that pops open on the right of the interpreter when I type )ed name, but turns out I was wrong.
How can I make that )ed window wider by default?
@AdΓ‘m Where does the .reg file go..?
 
@RGS It is a registry file :-) just run/merge it.
 
RGS
Turns out the obvious thing doesn't work: Open Options → Colors and look for a "load/import" button.
@AdΓ‘m ah ok, turns out I don't work with .reg files often.
 
4:00 PM
@RGS No, we don't officially support sharing schemes. Maybe I should create a tool to make sharing schemes more seamless. ]copyreg already allows you to export any particular thing you want, but it is a bit complex for sucha task, and doesn't handle import.
 
RGS
@AdΓ‘m I only assumed you did because of the "Save As" button.
 
@AdΓ‘m Any context? Is this what @RomillyCocking and @rak1507 are talking about? (I don't know what BAA is.)
 
british APL association
 
@AdΓ‘m So, should it just be titled "Humour"?
 
@rak1507 From the reference to Zoom call I assume it holds something like a meetup right now then?
 
4:04 PM
Yeah
 
@Razetime Sure, with a Humor→Humour redirect .
 
cool
 
@MartinJaniczek Yup, 21 APLers there right now.
 
@AdΓ‘m Cool, I've just finished a marathon of meetings at my work, so I'll take a look :)
 
@MartinJaniczek Btw, for info about anything APL related, APL Wiki is your friend: apl.wiki/BAA
 
4:08 PM
@RGS The "Edit Windows" only affects windows which aren't "docked" into the session. The "docked" width is saved as part of the session's GUI configuration. This can be saved with "Session->Save" from the session menu. This will also save (amongst other things) the position and size of the session window.
 
RGS
@JohnDaintree Ah perfect, thanks!
 
@Adám wow you've really got everyone from Dyalog to join this chat!
 
RGS
@rak1507 I suspect Adám just messaged John and asked him to come answer my question :P
 
Ah well lots of other people joined earlier as well
 
I literally just finished a show'n'tell where I introduced a few of them to to the Orchard, teaching them the ins and outs, and various tricks.
 
RGS
4:11 PM
That explains it.
 
Though I did message John. Feel free to ping me to get a hold of a colleague that isn't around.
 
I was thinking, how does one send a HTTPS request with APL?
 
@KamilaSzewczyk In Dyalog APL, the HttpCommand tool can be used for this. Do you have a client-side certificate or just want to access a server which uses HTTPS.
 
There are a couple ways. One is called HttpCommand that you can access using
`]load HttpCommand
z←HttpCommand.Get someURL
⍝ z.Data will contain the payload of the response
HttpCommand.Documentation ⍝ will display the documentation`
 
@MortenKromberg the second one
thanks a lot
 
4:26 PM
@KamilaSzewczyk The expert has arrived, I will leave you in Brian's hands.
 
@KamilaSzewczyk The second is to just call curl (assuming it's available) via βŽ•SH
@KamilaSzewczyk If you're using HTTPS (but using an anonymous certificate), then HttpCommand will handle it for you (just make sure your URL begins with https://). If you need to pass a specific certificate, that can be done as well. Let me know and I can walk you through it if it's not clear in the documentation.
 
    z←HttpCommand.Get 'http://www.hasthelargehadroncolliderdestroyedtheworldyet.com/atom.xml'
    3βŠƒ,{(⍡[;2]βˆŠβŠ‚'content')⌿⍡}βŽ•XML z.Data
NOPE.
Apologies for βŽ•IO=1
 
@MortenKromberg βŠƒ2⌽,{((⊣/1⌽⍡)βˆŠβŠ‚'content')⌿⍡}βŽ•XML z.Data :-)
 
Secure example:
      z←HttpCommand.Get 'https://dyalog.com'
      ∨/'APL'⍷z.Data
1
 
well there's a surprise
 
4:35 PM
@rak1507 ?
 
that 'APL' appears on the dyalog website
 
:-)
 
@Brian this doesn't seem like an elegant solution
thanks a lot, I'm currently trying to write a client for a thing in APL
 
@KamilaSzewczyk What do you feel would make it more elegant?
 
@KamilaSzewczyk The additional context helps. We use HttpCommand all the time in client applications. And in that case you'll want to use other elements in the result of HttpCommand.
:56747193
 
4:45 PM
@MortenKromberg no solution which shells out to curl is elegant
 
just like writing haskell imperatively
 
Ah, OK: completely agree. Shelling out is not nice if you can avoid it, so we would definitely recommend using HttpCommand. But some people are already experienced with curl, so it is worth mentioning.
 
@Wezl that's what do notation is for ;)
 
@KamilaSzewczyk I would only shell out using curl for very simple things. HttpCommand gives you the response in a form that's much easier to manipulate in APL.
 
@rak1507 exactly: you're not supposed to write a whole haskell program in dos
 
4:48 PM
better than writing a whole program using
>>= (\x -> ...
 
the point is that you write functional code in haskell and only use imperative features when necessary
you can write FORTRAN in haskell, but it's not elegant ... you can write sh in APL
 
I would say using βŽ•SH in APL is far less elegant than using
main = do
(argh, I can't type tabs, oops!) you get the idea
 
off-topic: tabs shouldn't mean anything
 
to me
main = do
  line <- getLine
  putStrLn $ "you entered " ++ line

is either the same or better than
main = getLine >>= (\line -> putStrLn $ "you entered " ++ line)
 
but that's basically a difference of syntax:
 
4:59 PM
do notation is purely syntactical
 
main = do
  system "read line; echo \"you entered $line\""
 
yeah, that's obviously worse
 
@Wezl I don't know, do notation for Maybes etc. seems pretty commonplace and not fitting into the same rhetoric as "functional core, imperative shell" - "minimize effectful code". But perhaps I'm conflating imperative and effectful here.
 
(IMO )SH is better than e.g. having internet access built-in to the language)
@MartinJaniczek maybe not. I have no actual haskell experience
 
@Wezl you need internet access for curl as well though
 
5:06 PM
* internet accessing facilities as a language feature
 
How would you make web requests etc without that?
 
libraries (not necessarily in the same language) and system
 
That's just shifting the requirement for internet using functionality from whatever language you're working in to bash/something else
 
right, because it's the operating system's responsibility to connect to the interwebs
 
5:23 PM
@RGS what sortve performance are you seeing outve ANNAPL?
I wrote a neural net proof-of-concept in gnu apl a while back and the reason i dropped it was because of math performance and the numbers seemed... off.
 
<moon-child> gnu apl is not known for its performance
 
definitely not. i know dyalog has much more optimization
id be interested if it could run something like mnist with reasonable performance
 
<moon-child> probably. I think some people were doing nn in q and had some success. Dyalog probably not as fast, but close enough where it counts. (Though q has single-precision floats and dyalog doesn't, which works against you)
 
interesting, good to know its possible.
 
RGS
5:47 PM
I did mnist with Dyalog APL and it trained in two or three minutes I think.
@cannadayr Haven't been down that road yet, if by "performance" you mean timing.
 
@RGS nice thats not terrible. esp if memory use didn't explode.
 
RGS
Yeah, it did not. My workspace size is 256M and it worked well with that.
But that net was not built with ANNAPL, still have to see the time it takes with ANNAPL.
 
@RGS good 2 know. i have a few prj ideas that maybe one day ill get around to hah
 
RGS
I know the feeling. Are you talking about projects that involve neural nets?
 
@RGS well, currently ive been working on the erlang-bqn vm, (mostly figuring out perf issues so i can get a working prototype). and i want to use that to do some "control plane" application development/experiments. other ideas would be writing a low level bqn vm that could run compute or memory intensive workloads that could communicate w/ erlang-bqn as an erlang dist most likely.
 
RGS
5:58 PM
Nice
 
but that 2nd part is waaaay down the line.
 
RGS
That doesn't mean you can't think about it!
 
specific ANN applications ... i havent thought about it in a while.
maybe something you could embed in the ctrl plane to guess network heuristics. like a path finding algorithm or something to assist in network splits
but i dont have any specific ideas on that end. the first set of 'stuff' i want to implement are all non-backpropagation based algos
 
6:14 PM
tbh if i get to that point id probably just use dzaima/bqn as a dataplane runtime.
not made of time or $$
 
I just realized dyalog is supposed to be βŠƒβˆ¨βˆ§βŒŠβ—‹βŠ‚ :P
 
I was thinking about what conor hoekstra mentioned in the BAA meeting and realised that monadic , is the same as βŠƒ,/⍣≑ I think, so that is a connection between the monadic and dyadic purposes of ,
 
6:30 PM
@rak1507 Are you sure you're not talking about monadic ∊?
 
ah yeah I should've clarified when it's not nested (depth 1)
 
Okay, I see. I guess you can use otherwise. In J it's ,/^:_ which is clearer. And none of that works on scalar arguments.
Strange that the J version uses first-axis reduction (insert, really) while the APL version only works with last-axis reduction.
 
ngn
7:07 PM
@AdΓ‘m if you feel like adding an easter egg. i meant the question only as a joke, of course
 
7:31 PM
is there a way to get the name of an argument (or a reference to it) from a dfn?
so a←1 β‹„ {something} a would return 'a' maybe
 
@rak1507 No, as the dfn only receives the value as an argument. It doesn't know it was stored in a name.
 
that's what I thought, makes sense
 
8:00 PM
why there is a windows/microsoft sign on the dyalog keyboard? it could be a dyalog ~~cube~~ "white D and two brown irregular shapes on a three-tone orange hexagonal background."↑
 
 
2 hours later…
9:38 PM
@rak1507 β‹„ (a b c d)←4⍴⍳3 β‹„ {(βŠ’βŠƒβ¨βŽ¨β³βˆ˜βŠ‚⍡⍨)βŽ•NL-2 9} a
 
@AdΓ‘m VALUE ERROR
 
Oh well, it works locally.
 
ah cool, although if two things have the same value, it fails
 
ngn
@rak1507 but there a is a global variable, not an argument
 
@rak1507 No, it just returns the first one, alphabetically.
 
9:44 PM
which is the wrong one, and constitutes as failing
 
ngn
isn't there some trick with namespaces that can make this work? namespaces know their first names
 
@rak1507 APL is pass-by-value. They are all the same.
@ngn They don't really know their name, only their identity.
 
β‹„ n ← βŽ•NS⍬ β‹„ {⍡.foo←'bar'} n β‹„ n.foo
 
@rak1507
Illegal code
VALUE ERROR
VALUE ERROR
 
oh well that's no fun
 
ngn
9:45 PM
@AdΓ‘m dyalog is not pass-by-value because of namespaces
 
That's just bot restrictions.
 
@ngn it's pass-by-value, but a pointer can be a value :)
 
@ngn I know. Trust me. I literally gave a long workshop on this today.
 
@dzaima C is pass by value then
as is every language ever
 
@rak1507 ¯\_(ツ)_/¯
 
9:46 PM
how do you pass by reference without passing a pointer?
 
In a pure pass-by-reference language, 42β‰ 42
 
not necessarily surely
 
<moon-child> not if you intern (which is fine if objects are immutable)
<moon-child> e.g. 5 is 5 in python
 
not equals in the sense of don't refer to the same object, but they could be equal in that doing 'a == b' in that language would return true
 
@rak1507 You mean in general or in APL?
 
9:49 PM
in general, I was referring to dzaima's message
 
Dare I ask why you need this?
 
well, isn't it impossible? I could be wrong but I thought passing a pointer was how passing by reference works
 
@AdΓ‘m it's approximately a rhetorical question
 
@rak1507 Yes, and Dyalog will allow you to pass a ref value, but you still can't determine which (if any) variable it came from.
 
Pass by reference is a property of function arguments and was abandoned in the 70s. Now languages might have references, but they are passed by value.
 
9:52 PM
What you can do (as I did above) is find a variable with the same value as the argument.
 
@rak1507 while pointers (or equivalent) are necessary to pass-by-reference, pointers being involved doesn't immediately imply that the object's pass-by-reference
 
<moon-child> @Marshall raku effectively lets you do pass-by-reference or pass-by-value on a parameter-to-parameter basis. (Of course, raku also has every other feature, so perhaps that's unsurprising)
 
@dzaima right, but if pointers count as values, then isn't there no distinction between passing by reference and passing by value?
 
The term "pass by reference" has somehow become entrenched; people assume it must mean something useful so they use it to mean "pass a reference". This tends to prevent people from actually figuring out what's going on.
 
@rak1507 yeah, but I never said all pointers are values
 
9:56 PM
@rak1507 No, if you pass a pointer by reference, you could change the reference, which changes the pointer that the caller is using, or change the pointer's referent, which changes the underlying value without changing the caller's pointer. So there are two levels of indirection.
 
@Marshall I mentioned today that the term is not really very good for what's going on, but that is what people call it.
 
but if the only distinction between passing by value and by reference is if you mutate/access what the passed in argument refers to, isn't passing a namespace passing it by reference rather than by a pointer value like dzaima said?
 
@dzaima though it might be better to cheat and say that Dyalog arrays are pass-by-value. Doesn't say anything about the leaf elements
 
ngn
@Marshall strictly speaking you're right, pass-by-reference β‰  reference semantics, but wasn't there some trick with which a namespace (or a property thereof?) can turn into an arbitrary object later?
 
@ngn I don't know what you mean.
 
ngn
10:05 PM
@Marshall only into a string apparently - βŽ•df
oh, and there's βŽ•or which i never fully understood
 
@rak1507 Pass by reference is a mechanism for argument passing. With pass by value, the arguments are copied from the caller's variable slots (or the stack) to the callee's argument variable slots. With pass by reference, the caller gets access to the callee's variable slots, and doesn't have its own slots for those variables. Pass by reference allows mutability, but many things that allow mutability aren't pass by reference.
 
@ngn That only changes what is displayed (and returned by ⍕). It doesn't actually change anything inherent. You can change a namespace into a "GUI" object using βŽ•WC, though…
 
@Marshall thanks
 
@Marshall Heh, maybe GNU APL has a bit of pass-by-reference then, as a dfn callee's ⍡⍡ refers to the caller's ⍡!
Or at least I thought it did. try-GNU-APL doesn't seem to exhibit this behaviour.
 
ngn
@AdΓ‘m dynamic scoping?
 
10:16 PM
@ngn Yeah, I guess that is kind of a form of pass-by-reference. I was about to ask Marshall how APL could have abandoned it before it '70s, but maybe indeed APL didn't really.
Did original APL\360 allow localising names in the header?
 
00:00 - 13:0013:00 - 23:00

« first day (1450 days earlier)      last day (1211 days later) »