@RGS The definition of Unpack is super hacky, but once defined, the functionality is neat:
Unpack←'⎕THIS'{this←⍵ ⋄ 'this'⎕NS⍺}∘⍎⍨⊢⊣⎕SHADOW⍤{⍵.⎕NL-⍳10}
options←⎕NS⍬
options.Activation←{2×⍵}
options.Loss←{⍵<0.1}
∇ NN o
Unpack o
Activation 10
Loss 1 ¯3 0
∇
NN options
20
0 1 1
@dzaima the BQN case is a bit stranger because ⇐ is actually an assignment character, and you don't even make namespaces with ⟨⟩ (so a full example of destructuring would be ⟨newA⇐a⟩ ← {a⇐5} is newA←5)
Any ideas on how to pad an array with a number different than the prototype 0? Can I somehow do that easily nicely with/after ↑ rather than something along the lines of A,pad⍴number?
@dzaima (i keep thinking about a version of under only applying ⍵⍵ to the right arg. Same issue as ¨ᑈᐵ, just that there's no tacit solution without the only-left-right variants)
@MartinJaniczek shouldn't be much slower than copying the array. But if possible (and the array is only stored in one place), it might be worth trying to do arr,←(n-≢arr)⍴1 for in-place appending
@RomillyCocking that seems awfully complicated. my setup is running a single script (on a hotkey) to set xkb to my preferred APL setup, and clear /opt/mdyalog/*/64/unicode/aplkeys.sh on Dyalog updates
@dzaima It is. It's a pain. Today is the first day anyone has shown any inclination to help me solve the problem, and I had long ago stopped seeking a solution.
@Adám until this afaik there was no published way to start RIDE without it eating the super key, and that's imo unreasonable
@dzaima (apart from of course manually launching RIDE and RIDE_INIT=… dyalog -nokbd separately, but that's just stupid and makes the default RIDE+dyalog shortcut useless)
The solutions on the wiki or given by @dzaima do not work for me. I still have to run aplkeys.sh in a terminal and then open a text editor and type an APL key :(
OK, this is embarassing... but somehow I have managed to avoid becoming aware of this Linux "super key" keyboarding problem until about 30 minutes ago. I actually use Linux quite a bit, but only via RIDE or PuTTY - almost never with a graphical IDE. But I see the problem and it will be fixed in the next release cycle.
@dzaima I should have pointed out that I am running RIDE on my Windows machine, of course... So it is the Windows IME that is providing me with my Windows keyboard.
This is a problem for people who use a Linux desktop.
and in 1993 linux users didn't use X much. Linux took 3 days to download at 9600 baud onto 5 floppy disks and X took another 5. And it took 40 bins to boiot on my 4 Mb 386SX.
@RomillyCocking how about just invoking setxkbmap -layout au,apl -variant '' -option -option 'grp:win_switch,more:options' (with "more options" coming from setxkbmap -query that you use and whatever you use in place of au)?
@Adám Yes. Given V, divide the range of V into N equal divisions and for each element of V return the index of the division (bucket) it should go into.
(Erm, when writing (Dyalog) APL code with the intent that the most people can use it as-is, what other things other than ⎕IO and ⎕ML are worth setting?)
along those 3 dirs I want to have a namespace that references objects inside those dirs
(I'm using link)
So I created a new namespace with )ed ⍟ ANN and edited its contents. In particular, I added the line loss ← LossFns.MSELoss. When I try to fix the Dyalog interpreter kind of complains with a Value ERROR.
So what is the way to develop a set of namespaces that may or may not reference each other?
@RGS You can :Require to specify order, but really, it is the mixture of scripted and unscripted namespaces that is messing you up. Consider adding an init function that sets those parameters.
@MartinJaniczek That seems pretty good BUT has the issue that the length will correspond to the last index given and may not be the same as the total length you wanted.
@Adám Each activation function is needed in the forward pass and in the backward pass of a network. The idea is that a user can select the act. function used in each layer, but when you pick an act function, you need the function and its derivative to match, of course.
@RGS OK, found it. It is issue 18768 which was logged 2016-03-24. For some mysterious reason, it was reassigned to me (though this is not my dept at all) on 2017-12-11. I'll kick it back.
@MortenKromberg I've finally done the padding experiment. Padding 8 makes it somewhat faster, padding 64 has more pronounced change. I'll upload some measurements just for fun...
(I'm missing units, whoops. It's [ms] per request. 5000 requests, 15 concurrent clients, no rate limiting. 8 Dyalog Jarvis servers under nginx load balancer.)
@MartinJaniczek So up to a third of the time saved by padding to 64. That's pretty good. And I presume the code for padding and dealing with the unnecessary data isn't too bad?
Nothing yet, it's 10PM here. I try to not tease them much, but I uploaded the comparison chart on company Slack too of course :) I expect another "I am obviously not going to sleep well until Go version is the best…" (verbatim quote!)
@moon-child but what is it with the co-dfns? They can speed up APL code? Maybe I can have a look and explore it a bit. Thing is, even though neural networks are based heavily on matrix operations, in order for me to create a flexible "framework" I have plenty of namespaces flying around...
<moon-child> it compiles apl code onto the gpu. Haven't actually used it, but I believe you can interop co-dfns with dyalog, so you can write the core kernels with co-dfns and call them from dyalog