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

13:22
@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
13:42
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
14:01
@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
14:26
@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.
14:32
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.
14:54
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: βŠ’βŒ·β¨βˆ˜βŠ‚?β¨βˆ˜β‰’
14:57
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)
15:20
β‹„ ⍳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.
15:33
@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).
15:41
@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
RGS
@AdΓ‘m Thanks!
@all Please welcome @user921694 and @user87247 ― they are Dyalog's CEO and Development Manager, respectively.
15:51
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
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
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.
16:00
@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
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?
16:04
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
16:08
@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
RGS
@JohnDaintree Ah perfect, thanks!
@Adám wow you've really got everyone from Dyalog to join this chat!
RGS
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
RGS
16:11
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
16:26
@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
16:35
@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
16:45
@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
16:48
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:
16:59
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
17:06
* 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
17:23
@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
RGS
17:47
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
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
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
RGS
17:58
Nice
but that 2nd part is waaaay down the line.
RGS
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
18:14
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 ,
18:30
@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
ngn
19:07
@AdΓ‘m if you feel like adding an easter egg. i meant the question only as a joke, of course
19:31
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
20:00
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…
21:38
@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
ngn
@rak1507 but there a is a global variable, not an argument
@rak1507 No, it just returns the first one, alphabetically.
21:44
which is the wrong one, and constitutes as failing
ngn
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
ngn
21:45
@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 ¯\_(ツ)_/¯
21:46
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?
21:49
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.
21:52
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
21:56
@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
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
ngn
22:05
@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
ngn
@AdΓ‘m dynamic scoping?
22:16
@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 (1501 days later) »