« first day (1296 days earlier)      last day (1361 days later) » 

12:45 AM
@Marshall um
feels like i should be missing some huge part, but it passes test/tj.js and seems to work on the things i tested; it uses my previous vm, so all that's changed is the environment system (it's now like dzaima/APLs - variable array with parent field) and that the compilation is done beforehand (and includes dynamically generated code for managing arguments)
 
1:30 AM
@dzaima If you haven't already figured this out, you can uncomment the commented section in tj.js, and comment the part before its starting with const, to run the reference tests.
Not sure I understand either part of your explanation. So the environment is now more like a linked list than a flat array?
 
@Marshall yeah, i guess (though the environment in your impl wasn't flat either)
@Marshall heh, i looked at it and assumed it was something i had written :p
 
I have it down to 40s with my current VM using the changes I just pushed.
 
@Marshall passed all in 45s (compared to 3m25s with yours)
 
@dzaima I'd assumed that wouldn't work because all the built-ins are defined at the top level in r.bqn and most execution is inside a block, but it looks like the depth of variable references in the compiled runtime is generally pretty low. No idea why.
 
1:45 AM
appears the code makes the paste JS formatter go in an infinite loop
 
Switching e to a linked list made of arrays cuts the time from 40s to 35s.
 
@dzaima or maybe it didn't, i just forgot it contained 56kb of compiled data..
 
2:02 AM
How come removing "use strict" from your code makes it half as fast but adding it to my code does nothing at all?
 
@TessellatingHeckler {(((5⍴3),4 3 4)/2↓⎕D)[⎕A⍳⍵~⎕D]@(⍸⍵∊⎕A)⊢⍵}
 
@Marshall maybe something with the fact i'm using eval? i did wonder about that, but (proobably due to poor ctrl+s-ing) didn't see that happening 100% of the time
 
@dzaima Yeah, restricting eval seems very likely.
@dzaima Is the arguments[0] = f; at the top of call() doing anything? Removing it cuts another 2s.
 
@Marshall oh that's why there were a random 2s added to the time at a random point. i was testing strict mode behavior, and didn't remove that. ಠ_ಠ
 
@TessellatingHeckler {(' ADGJMPTW'⍸⍵~⎕D)@(⍸⍵∊⎕A)⊢⍵}
 
2:21 AM
@TessellatingHeckler {' ADGJMPTW'∘⍸@(∊∘⎕A)⊢⍵} gives the same result as that one, though you should note that digit chars aren't converted to numbers.
Fun hack: {⍎¨⍵⊣⍎⍕(,¨⎕A)'←',' ADGJMPTW'⍸⎕A}
 
2:54 AM
@Bubbler oh the @ takes a boolean array on the right!
that's cool
 
@TessellatingHeckler That's only when the right operand is a function.
 
@Bubbler I'm sure there's a decent, if obscure, reason why not a literal
 
@TessellatingHeckler If you want to use a boolean filter A, you can write @{A} or @(A⍨) (the second is preferred since 18.0).
 
@Bubbler ahh ok
 
 
4 hours later…
RGS
7:24 AM
Today I had a nightmare about APL. I dreamed that I had misread one of the problems in the competition and that that mistake made me score a flat 0 in that problem, placing me poorly in the overall ranks :'( or otherwise lower than what I could've achieved if I knew how to read :P
 
 
RGS
@Adám please don't tell me it is true
 
Hang on, I'm checking right now…
@RGS Nope, you don't have any 0s at all. You lowest score for any one problem is 4/5, and your lowest score for any particular aspect of a task is 3/5. (These are my judgements, other judges may have other values.)
 
RGS
@Adám can you specify which? and is the 3 in the same task as the 4?
tbh I specifically dreamed about getting 4th place because of those flat 0s. But now I can be placed 4th without having that bad taste in my mouth
 
@RGS I have 4s for you on the two hard problems, because I gave you 3/5 on clarity for those two. The only other 3/5 I gave you was for clarity of problem 2.
@RGS Uh, you're not in 4th place, or any other place, yet, since we've not decided on a result. Only two of the four judges have finished judging, and then we convene and decide on winners guided by our collective scores, not determined by them.
@RGS Meh, scrap what I just said about your scores. I was looking in the wrong place!
@RGS I have 4/5 for you on 1 and 8, with a 3/5 for correctness of 1 and clarity of 8.
Also, these scores are preliminary. I may adjust them if persuaded by other judges.
 
RGS
8:07 AM
@Adám I just dreamed about it, doesn't make it true :P
@Adám ok, thanks!
 
 
2 hours later…
RGS
9:46 AM
If I understand correctly, someone who is to install RIDE on their computer would also need to start by installing Dyalog APL from https://www.dyalog.com/download-zone.htm, right? the RIDE is just an interface?
 
10:07 AM
@RGS On non-macOS, RIDE is just an interface. On macOS, we bundle it all together, so Apple fanbois often think Dyalog and RIDE are one and the same.
 
RGS
@Adám oh boy; the ride-4.3.3463_mac.pkg package available on the RIDE releases contains RIDE & Dyalog APL?
 
@RGS No, but when people initially install Dyalog, they get RIDE included.
 
RGS
@Adám ah I see
 
I've stated this (like a broken record!) -- it's confusing. Please make Mac Dyalog be like its non-Mac cousins :). I'm now running standalone RIDE and (sort of) command-line dyalog via convoluted workarounds on a Mac.
 
@xpqz I think we eventually want to get rid of the TTY interface, but I agree that separating the front-end (RIDE) from the back-end (the interpreter) is a good thing. Still, we have to make it easy to start both together, and connected, with one click/command.
(Secretly, I just wish we could port the Windows IDE to UX.)
 
10:58 AM
If the "TTY interface" is a "read from stdin/write to stdout" interface, I think it should be kept - I'm visualizing being able to insert APL into a PowerShell script, for example: $vector = Evaluate-APL -APLExpression "3+⍳10"; ForEach ($number in $vector) { ...} where Evaluate-APL could be a function that simply feeds the expression to Dyalog via stdin; writing to stdout in PowerShell automatically makes the string the "return value" of the function/cmdlet.
(The stdin/stdout interface should even be an option for Windows, if for no other reason than to support this sort of usage.)
 
@JeffZeitlin That's exactly the problem, the TTY interface isn't a language engine, it is a full window manager using pseudo graphic line drawing characters!
 
@Adám - Oh. No, I'm not in favor of that, given that I'm not aware of any commonly-available OS that doesn't have a "true GUI".
If I had a Dyalog-for-legacy-MSDOS that I'd run in DOSBox, I might find it useful/appropriate there, but...
 
@JeffZeitlin AIX?
@JeffZeitlin I keep being disappointed that the APL*PLUS character-based interface (running under DOS) from 1992 was so much better than Dyalog's graphical IDE in 2020.
 
@Adám - I seem to remember that our old 911 system here in NYC ran on AIX, and seemed to have a "real GUI", but I don't know whether that was implemented entirely in the program or whether X had been implemented.
How was the APL*PLUS UI better?
 
@Adám wow, really?
 
11:08 AM
@JeffZeitlin Just a couple of things off-hand: tracing primitive-by-primitive including inspecting the arguments of the current primitive, editor allowed seamless switching of type (character vector, vector of vectors, matrix, function, native file) and renaming the current item and editing (simple) numeric arrays (up to rank 2), you could record macros for the F-keys, keep things in the editor while switching workspace, run OS commands from the IDE,…
Oh, and it had menu items to create or edit new functions or arrays.
 
Mmmm... yeah, I can see that a lot of that would be useful.
 
RGS
11:55 AM
how does one clear session history on RIDE..? The Edit > Preferences doesn't seem helpful at all
 
@RGS Recallable inputs or the log?
 
RGS
@Adám Not sure; I open the RIDE and I can see random things I typed previously
 
Jul 16 at 17:37, by Adám
@PuercoPop You should be able to find the log file so you can delete it. Probably ~/.dyalog/session_log_180U64.dlf
 
@dzaima Except, @RGS is probably on Windows, so it'd be …\Documents\Dyalog APL-64 18.0 Unicode Files\default.dlf
 
RGS
@Adám I am on Windows but that path has no .dlf files
Uninstalling and installing again didn't delete the file, so that ought to narrow down the possible locations of the session file, no?
 
12:06 PM
@RGS That's odd. Are you sure you're looking in the right place? It should be together with your session file (.dse) and your and UserCommand20.cache
@RGS btw, .dlf is "Dyalog Log File"
 
@RGS Try to open the normal IDE, then go to Log→Open… or alternatively, just use the normal IDE to clear the file with Log→New followed by Log→Save
 
RGS
@Adám the normal IDE doesn't show that log; it shows just the regular msg with the version and whatsoever; should I follow your steps regardless?
 
@RGS I suspect the regular IDE does, just scroll up above that banner.
 
RGS
@Adám nope, no scrolling possible
ctrl+shift+backspace gives a "there is no previous line"
Log->Open shows the same directory as the screenshot above (with no .dlf files)
Doing Log->New + Log->Save also doesn't fix it on RIDE's side
 
12:14 PM
@RGS Ah, then it sounds like the interpreter is being directed at a different file by a configuration parameter. Try, from RIDE, to execute ]config Log_File
 
RGS
      ]config Log_File
┌────────┬───┐
│Log_File│nul│
└────────┴───┘
 
Very strange. From RIDE, what is ≢⎕SE.Log ?
 
RGS
I installed RIDE with admin privileges; can it be related?
 
It shouldn't be.
 
RGS
@Adám 39, almost 42
If you want to Zoom I can give you access to my computer
 
12:17 PM
Not yet.
@RGS Try, from within RIDE, to execute 'f'⎕WC'Form'⋄'f.b'⎕WC'Button' 'SaveLogAs'('Event' 'Select' '[savelogas]') then click the button.
 
RGS
I used File Explorer to search "This PC" for a default.dlf file; after a long time it returned 0 results
I clicked the button
what should I do then, with the new window that opens?
 
Look where it wants to save the log file.
 
RGS
I wants to save a nul.dlf file at C:\Users\rodri\Documents\Dyalog\MDAPL
but there is no .dlf at that location
 
@RGS Ah, now I remember. You decided to disable the log file.
 
RGS
@Adám hm I think so, yes. My regular IDE never saves a log file
(as per my choice; I find it annoying)
 
12:30 PM
@RGS Then I'm not sure exactly what RIDE does when it can't get a log from the interpreter. Maybe it saves its own log somewhere.
@RGS How about typing something very unique into the session, then search for that on your PC?
 
RGS
@Adám the search also goes inside files?
@Adám probably; just weird we can't figure out where
 
@RGS You'd have to, but you can probably restrict the search to your documents and maybe appdata
 
RGS
I don't understand the "You'd have to"; is it something I can enable or does it happen by default?
 
@RGS What? How are you searching?
 
RGS
Win+E, on the left menu hit "This PC" (where I can see my drives listed and whatnot) and on the top-right corner type smth into "Search This PC"
 
12:38 PM
Ah, you'd want a better application than that. I personally use Notepad++ so search files.
@RGS Hey, look at C:\Users\rodri\AppData\Roaming\Ride-4.3\Local Storage\leveldb
And look around there in neighbouring folders. Is there a recently changed file?
 
heh, this reminded me about everything search on windows, and turns out there is a good linux alternative - locate
 
<kritixilithos> fwiw, my log seems to be stored in .dyalog/session_log_180U64.dlf taking up 4 bytes per char (so 'K' is stored as '\0\0\0K')
 
@DyalogAPL that is the regular linux location
(how does replying look/work on the IRC side?)
 
<kritixilithos> i see, "<dzaima> @DyalogAPL that is the regular linux location"
 
I find it mildly confusing to have the same bot evaluate APL and be the IRC bridge. Maybe we could have a different bot account for the IRC part.
@kritixilithos then this is a more appropriate way to reply.
 
12:50 PM
<kritixilithos> yes, but my client pings me for any mentions of my username, so the '@' is unneccessary
 
Ah.
But is that common? Also, do you see edits?
 
@Adám it is indeed mildly confusing. would also be nice if it also converted the reply @ to the proper one for it (and i now had the idea of making an SE chat extension making the IRC users look more like proper users, plus maybe better formatting for TIO, and while at it, replying to self)
 
<kritixilithos> @Adám what is? @-pinging or mention-pinging?
 
mention-pinging
@dzaima Ah, you mean that if you SE-reply to the bot, it'd replace that with @whatever-was-in-the-angle-brackets?
 
@Adám something like that. alternatively, that could be done by that userscript
 
12:53 PM
<kritixilithos> i don't know. weechat is, i believe, a popular client, but idk about others
 
@dzaima Would be much better not requiring a userscript.
@kritixilithos Keeping the @ is probably the safe option.
 
<kritixilithos> (also i had to manually type the accent in your name)
 
You don't have to. It'll ping me without it too.
 
@Adám has the side-effect of possibly pinging in SE too
 
@dzaima Not really an issue, imo.
 
12:56 PM
@Adám my phone gets chat ping notifications, and if i used IRC, they'd constantly get spammed in (i want them, but not when i'm actively replying)
(i guess if i used IRC i'd also have it be the notification generator actually)
 
<kritixilithos> @Adám: typically, users are mentioned by 'user_name: blah', i've rarely seen @-pinging, but i still consider myself an irc noob
 
@dzaima I assume I have permission to use your compiler-VM in BQN?
 
@Marshall go ahead :)
 
kritixilithos: Ah, then the bot should translate to that, if anything.
And similarly, it should maybe translate user_name: to @user_name in the other direction.
 
@dzaima It's up. 6.5s self-compile! I changed it from using eval() to Function() to avoid having to worry about whether all the outside variables are mutable or not.
 
1:08 PM
@Marshall :o that's another 2x improvement
 
@dzaima Mostly from passing into the runtime instead of defining it with a crazy - workaround.
 
RGS
1:25 PM
@Adám The folder Ride-4.3 doesn't have a "Local storage" subfolder, only "blob_storage".
There is a hist.txt file in there with some of the things I have typed, but not all of them
 
When you start RIDE, do you also see output from those things you've typed, or just input?
 
RGS
@Adám In RIDE I see in and out
the hist.txt file only has what I typed; I understand it is the history of things I can access with ctrl+shift+backspace
 
Right.
You can log an issue against RIDE, and I'll mark it as a question.
 
RGS
@Adám you mean on GitHub?
 
Yeah.
 
RGS
1:28 PM
ok
meanwhile, can you please take a screenshot of a clean RIDE session and send it to me, pls?
 
 
RGS
@Adám Thanks; I submitted an issue.
 
@JeffZeitlin This is what I'm playing with building; do you have any opinion about what exactly "Evaluate-APLExpression "3+i10" should output or how? A single [System.Int16[]] or individual Ints which gather up into a [System.Object[]]? Would you mind having to do "⊂3+⍳10" or "⊂⊂3+⍳10" all the time to keep the structure from unrolling?
 
RGS
@Adám might be somewhat related; my title bar says {WSID} instead of formatting it with the name of the WS loaded
or is it a completely different issue?
 
Sounds like the entire configuration is messed up.
 
RGS
1:35 PM
@Adám but was it my fault or is RIDE somehow messed up?
 
Nothing you do should cause RIDE to misbehave
 
@TessellatingHeckler - That's a tough question. Ideally, it would return whatever the context requires - the specific example would be [system.int16[]] or [system.int32[]]. But there might well be contexts where you would want to return a [system.object] or [system.object[]], and I don't see how Evaluate-APL can know that.
As far as disclosing or double-disclosing, the ideal is to not need it except if I would need it in an interactive APL session.
 
2:05 PM
@JeffZeitlin Ideally "Do what I mean" is a tough one. As far as data type, Dyalog chooses to make 0 and 1 into System.Bool, small numbers into System.SByte or System.Int16, and I don't have much choice of that.
The choice I have is if you want to pipeline it and do Eval-Apl "3+i10" | foreach-object {"-$_-"} and have each number come out, the APL side has to unroll it once instead of sending out a vector. That seems bad for numeric vectors. If you want to gci | eval-apl "⌽" | select -first 3 and be able to passthrough (I kinda do) then unrolling the output seems good and sending out a vector.
My test tries to do "if it's .Net references unroll it, if it isn't then sometimes unroll" but it's unpredictable
 
2:19 PM
@Adám is there scoring for phase 1?
 
@rak1507 Yes.
 
Does it get published or is it top secret
 
We certainly won't publish people's scores with their names, but statistics are fine.
 
What about getting told your own scores?
 
@rak1507 Your score is your number of silver trophies plus twice the number of gold trophies.
 
2:22 PM
Ahh makes sense
If you get a gold one does that count as silver as well?
Like is a gold worth 3 or 2
 
No. gold is worth 2.
 
Makes sense
 
2:46 PM
Announcement: BAA Webinar combo "BAA websites: New features"/"An APL recreation" begins in 15 minutes. Click here to join.
 
I found out why obj.Prop1 doesn't work on the APL side of the bridge. C# expects that name to exist in a way it can verify at compile time. PowerShell is very late-bound, dynamic lookup, and flexible in the way it can add new properties. That means it secretly wraps everything in PSObject and pretends it's the class underneath.
The PowerShell dot lookup really looks through a hashtable of extra properties and then falls back to .BaseObject.Prop1 behind the scenes
and APL dot operator doesn't know how to do that.
 
@dzaima yay
 
@TessellatingHeckler syntax, not operator, despite appearances.
@dzaima Neat. Userscript, I presume?
 
@Adám not yet, just a custom local override of the whole chat script + a change to the userstyle
 
OK, but that is an adequate proof-of-concept for a user-script, no?
 
2:50 PM
(also each of Dyalog APLs messages is prepended by a bunch of exclamation marks :p)
@Adám converting to a userscript will probably be non-trivial (but i will definitely try)
 
@Adám dot syntax. (dot magic).
 
@Moonchild What do you say to using a separate account for the IRC bridge? And how about "correcting" replies on the fly?
 
PS C:\> ⍎ "{⍵.BaseObject.Name}¨" (gci) can work, and PS C:\> ⍎ "{⍵.Properties[⊂'Length'].Value}¨" (gci -File) can work Both are clunky and only seem to work on homogenous arrays, if there's a directory in there with no length it gives a value error.
so maybe I could add a function to do a more dynamic lookup
@Adám Is it syntax because it has to be able to lookup ⍵.Thing where Thing is an unbound name, not a string?
 
@TessellatingHeckler Not only that: ⍵.(2+2) makes no sense if . is a dyadic operator.
 
3:08 PM
@Adám why not? would it not become {⍺⍺.⍵} inside and do ⍵.4 eventually? (Is that what it's supposed to do?)
 
@TessellatingHeckler If . is a dyadic operator, then a.b must be a function, but ⍵.(2+2) is an array.
 
@TessellatingHeckler it doesn't do ⍵.4, it evaluates 2+2 inside
 
@dzaima Well, eventually it becomes ⍵.(4) (the parenthesis is necessary for syntactic reasons)
 
@dzaima what does "inside" mean here? is this a namespace thing rather than an object property/method lookup thing?
 
@TessellatingHeckler example
 
3:14 PM
@TessellatingHeckler In Dyalog APL, there's no difference.
 
@dzaima interesting and ... unconventional. Wouldn't have guessed what that might do.
 
Cool thing is that Dyalog allows you to do this with others' objects, e.g. .NET objects.
So I can execute expressions inside a .NET object.
 
@Adám but why? What sort of usecase prompted this to become a thing?
is it a shorter way to write obj.Prop1 + obj.Prop2 + obj.Prop3 and instead write obj.(Prop1 + Prop2 + Prop3), is that the main desire?
 
@TessellatingHeckler That's just one use case. You can even do (obj1 obj2 obj3).Fn Y instead of (obj1.Fn Y)(obj1.Fn Y)(obj2.Fn Y)(obj3.Fn Y)
@TessellatingHeckler E.g.:
      System.Environment.(∊⍕¨OSVersion' '(32×1+Is64BitOperatingSystem)'-bit with 'ProcessorCount' cores')
Microsoft Windows NT 10.0.18363.0 64-bit with 8 cores
 
3:46 PM
@TessellatingHeckler Using a .NET method inside a train inside a .NET namespace:
      System.DateTime.((⍕,' is ','a leap year',⍨'not '/⍨~⍤IsLeapYear)Now.Year)
2020 is a leap year
 
RGS
@Adám while I don't know exactly what was happening, I think I know why everything was weird. The default RIDE option is to "Connect", and I pressed it
it worked, but now I think it only worked because I also had Jupyter notebooks going on
closing everything and ending all tasks, and then trying to "Connect" on RIDE no longer works
 
@Adám That is an example I can follow; what a neat way of doing it
 
RGS
if I instead "Start" on RIDE everything looks good
 
bit line a narrow scope / inline way of doing :Using System.Environment
 
@TessellatingHeckler "bit line"?
 
3:54 PM
*a bit like
 
RGS
4:26 PM
@Adám did I join one hour late thinking I was in there from the beginning...?
 
@TessellatingHeckler Sure, but you can dot in and out of namespaces everywhere.
@RGS I think so.
 
that was fun
 
<kritixilithos> is this the video meeting that you are referring to?
 
@Adám sometimes I think your keyboard stops working, and Win+Space cycling through them doesn't help; is there a way to reset it / reboot it?
 
RGS
@TessellatingHeckler what type of trouble do you run into? the only issue I ever had with adam's keyboard was it stopping to work out of the blue, only for me to realize I had unintentionally switched keyboards.
 
4:36 PM
@RGS it's currently my selected keyboard, and pressing AltGr+r gives me r instead of rho, and Alt+shift+r gives me r instead of rho
I do find that some programs seem to swap keyboard on me unexpectedly, so I've got used to win+space cycling through if APL chars aren't working, but this seems different
 
RGS
@TessellatingHeckler does this begin when you start/change to a specific program?
 
@TessellatingHeckler iirc windows had some option for the current layout to be a separate setting per application
 
@RGS It hasn't been reliable/repeatable, it's just happening now and I don't wanna reboot to get it back. The only things I've opened recently other than FireFox tabs are KeePass and Python IDLE but closing those hasn't changed it.
@dzaima I believe that, that doesn't feel like it's happening now
I always fall into the trap of thinking "reduce puts the function between every element of the array" to mean =/'AAAA' becomes 'A'='A'='A'='A' and evals to 1. Instead it becomes ('A'=('A'=('A'='A'))) and evals to ('A'=('A'=1)) and evals to false. A common and misleading way to describe reduce as if it's ∧/2=/
 
@TessellatingHeckler but it does become 'A'='A'='A'='A' (well, ⊂'A'='A'='A'='A'), it's just that that doesn't do what e.g. python does
 
@dzaima annoyingly, 'A'=='A'=='A' seems to work in Python, but functools.reduce(operator.__eq__, 'AAA') in Python doesn't become that, so doesn't work in my wrong-intuition way either.
 
4:48 PM
I guess the way to check in python would be len(set(string))==1
which also translates to APL
 
@rak1507 that is the way I tried first and it works out very slow, and I was hoping to try equals-reduce as an alternative to have less state, less dictionary inside, and see if it's faster :D
 
@TessellatingHeckler yeah, in Python a==b==c isn't equal to a==(b==c), but the equivalents in APL are equal
 
Ahh yeah fair enough
eval('=='.join(string)) lol
 
not sure how to do a 2-window reduce in Python. Probably needs Pandas, NumPy, TensorFlow, JuPyter, two environment versioning systems, and a web framework 😒
 
lol
 
4:53 PM
@TessellatingHeckler [x==y for (x,y) in zip(a, a[1:])] seems to work
 
@rak1507 lol, fun idea, worth a try ... but not fast. eval('"'+'"=="'.join(string)+'"')
 
oh yeah true
 
@dzaima guess you'd need to wrap that in all()
 
well you can do eval('=='.join(map(repr,string)))
 
this is why I can't get away from APL, lol
 
4:57 PM
 
@dzaima pick = right, neat. How does ∧/2=/ compare for speed?
oh i guess it makes sense, all can trip out very early
at the first 0
 
@TessellatingHeckler not that good
@TessellatingHeckler huh, i expected ∧/ to add a tiny fraction of time, but i guess the comparison is still relatively pretty fast
 
@TessellatingHeckler I have not experienced that. Since it is a "normal" Windows keyboard layout, I can't think of a way to reboot it without either re-installing it or rebooting Windows.
 
5:22 PM
@Adám ok; have you seen it where AltGr+r doesn't produce an APL glyph, but AltGr+Ctrl+r does?
 
@TessellatingHeckler No, but some applications handle keyboard entry in non-standard ways, and that can interfere with my keyboard. E.g. the Zoom application has some keyboard shortcuts defined using Ctrl and Shift, but the code evidently neglects to check if Alt is also depressed, so it ends up treating AltGr (which is equivalent to Ctrl+Alt) as just Alt. So AltGr+i (⍳) is understood as Ctrl+i and turns on italics, while AltGr+Shift+X (⊇) is interpreted as Ctrl+Shift+X and turns on strike-through.
 
5:53 PM
Anyone know if 'A programming language' is in print anywhere? only copy I found being sold online was like 200 quid!
 
RGS
@rak1507 who is the author?
 
Kenneth iverson
 
@rak1507 Not print, but you can read both editions online here.
 
Oh great thanks
 
@rak1507 Btw, you may find this article useful.
 
RGS
5:57 PM
@rak1507 lol
 
Alright thanks
 
6:14 PM
@rak1507 there's a lot of classic books relating to older programming environments online here, APL section: softwarepreservation.org/projects/apl/Books
 
Thanks!
 
 
1 hour later…
7:41 PM
@matt Hi. Long time no see.
 
RGS
FontAwesome is where I get icons to use on my site and I could barely find any icons for programming languages. BUT there is a Dyalog icon :P
 
RGS
8:20 PM
@Adám I am no expert in any particular subject but when it comes to maths/computer science I'm pretty sure I have the skill to learn something well enough to create a nice little workshop about that thing in question, as I have done several times before. I was thinking it could be interesting to marry APL to something else, possibly one of my active interests (scroll slightly down from there), and make a workshop out of it.
I just don't know who I could target
 
@RGS Any one (or more!) such marriages would be spot-on for presenting at our user meetings.
 
RGS
@Adám Which ones are the user meetings?
 
These. I hear one near you is coming up next…
 
RGS
@Adám ah ok, but those happen once a year and I hear the next one, the one close to me, is going to happen in more than 1 year from now; while I can definitely present there, I was trying to come up with something that would happen in a nearer future
I just really like talking about maths and programming, you know? I have never refused an invitation to do so. And sometimes I actively look for opportunities to do that
 
@RGS Well, we're supposed to do a scaled-back online one, and BAA are looking for speakers for their webinars too.
@RGS Maybe you can do a Dyalog webinar? Some previous interns did.
 
RGS
8:27 PM
@Adám the format of a webinar is not that interactive, is it? it is more of an (insert correct English word here; "exposition"?) where one person does all the talking/coding
 
@RGS The Dyalog ones aren't, true, but the BAA ones can be. And at the user meetings we have both presentations (one or a couple of people speak for 20-45 min) and workshops (two or more people interact with a group of 5-25 for half a day, sometimes split into two half-days).
 
RGS
@Adám I see. What is half a day, in hours? 3? 4?
 
@RGS Dyalog '19 had 09:30–13:00, 14:00–17:30, 13:30–17:00.
 
RGS
9:05 PM
@Adám 3h30 is a really nice amount of time; a lot can be done in that time!
 
I've run some super popular code golf workshops :-D
 
RGS
Maybe I'll just throw a little zoom APL workshop together with a couple of ppl from my degree
@Adám that is one thing I can't run a workshop on, for sure
 
Right, but I couldn't run a workshop on higher mathematics.
 
RGS
@Adám That's funny, because that I could
and APL is just perfect for numerical methods
I think I just picked the topic for my next workshop
 
@RGS A concept that has proven popular is comparative programming. Since you know Python well, why not?
 
RGS
9:09 PM
@Adám what is comparative programming? a quick google search wasn't elucidative
is it comparing how two programming languages solve a given task?
 
RGS
@Adám as in literally calling the other language, like with Py'n'apl? or try and write array-oriented code in Python and imperative code in APL?
 
The latter. Watch the video!
 
RGS
@Adám Ok! but it is a 43 min video, to watch it I need to make a proper time investment.
 
@RGS I often watch videos sped-up…
 
RGS
9:18 PM
@Adám I took this course with the videos playing at 2x the speed... but only because I knew most of the stuff
if I want to properly understand what the code jugalbandi is, I'm sure I have to watch it at 1x, 1.25x if I am feeling very smart and attentive. Especially because they are doing/using the code jugalbandi with a topic I am not very familiar with
so there's just too much I have to pay attention to... :/
But that is fine, I will watch it soon. Just not right now
 
I also like to watch videos while washing dishes and chopping vegetables. (Ouch.)
 
RGS
@Adám recreational stuff or things you have to pay attention to? If the latter and you manage to pay attention, wash the dishes and not chop your fingers, hats off to you, I couldn't do it
(@Marshall just to let you know I really like your page about your GH repos, excellent idea to organize everything like that.)
 
APL does not confuse spirituality with thinking about programming while peeling potatoes, but it does help peel them all in one go. ( goodreads.com/quotes/… )
 
@RGS Both, really. I've worked in a professional kitchen.
 
RGS
@Adám so those tasks are kind of automated, is that the point?
 
9:27 PM
Yeah.
 
ngn
me paying close attention now, because i'm starving :)
 
RGS
That makes it easier to believe a man can do 2 things at the same time :P I am ashamed of it, but usually I can't unless one of them is well automated
 
I love washing huge stacks of identical plates.
 
RGS
@Adám Because they just stack on top of each other?
 
Yeah, and combined with them being identical, I can completely automate hand and arm motions.
 
RGS
9:31 PM
Yup, makes sense.
 
@RGS Here's a 10 min comparative programming video by Conor whom you might have notice by the BAA webinar today:
 
That was really cool seeing Conor in the webinar today, I am a big fan of his videos
That very video was one of the first times I'd seen APL as well
 
Nice. He hangs out here sometimes.
 
RGS
@Adám yeah I saw him there; nice video
 
ngn
9:46 PM
@ngn haha, not anymore, after frying some eggs
 
@ngn What a waste.
 
ngn
@Adám eggs? waste?
 
@ngn Yeah, you were hungry, then you fried eggs, and then suddenly you were not hungry anymore. What will you do with the eggs now?
 
ngn
@Adám that's only between me and my toilet :)
 
@ngn Wait, you ate them?
4 mins ago, by ngn
@ngn haha, not anymore, after frying some eggs
 
ngn
9:50 PM
@Adám you blinked :)
what else could a hungry man do with a few hot, crunchy-fried, creamy-yolk eggs with salt and pepper and savory on top? :)
 
Good point.
 
@Adám it does feel slightly inefficient to call a function for every item in a collection like most of those solutions do.
do they actually do that internally, or can they optimise it
 
Yeah his solutions aren't efficient, because the matrix is sorted, but the point is more to show off how various languages do things, I think
 
@rak1507 not sure what pattern to expect from a sorted 2D matrix; which way is "greater than" in 2D?
 
'sorted in non-increasing order both row-wise and column-wise' according to the problem
 
10:01 PM
@TessellatingHeckler You mean the other languages? I don't think they can. Conor does mention that because the input is small, it doesn't matter. Btw, for the APL solution, it should be faster to do {+/,0>⍵} than his {+/0>,⍵}.
 
@Adám throwing a guess at it, because it's faster to ravel a boolean matrix than another type?
 
@TessellatingHeckler No. Ravelling an array is basically O(1) since the data is kept and only the shape header is changed. However, since must keep its value , has to copy the array (while ravelling). 0>⍵ only has to write 1/8 as many bits as , and the subsequent , can then be done in-place.
      a←¯101+?100 100⍴201
      ]runtime -compare {+/0>,⍵}a {+/,0>⍵}a

  {+/0>,⍵}a → 1.9E¯6 |   0% ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕
  {+/,0>⍵}a → 1.2E¯6 | -36% ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕
 
@Adám that makes sense. It does imply that ravel mutates the state of a variable being ravelled if it's not ⍵, but that doesn't seem right
 
@TessellatingHeckler No , mutates an array that has a ref-count of 1 (i.e. isn't used anywhere else).
 
but it does make sense that it can be done to the intermediate 0>⍵ array
@Adám ah and it can't do that to ⍵
 
10:11 PM
@TessellatingHeckler Right. Here, the arrays have a ref-count of 1:
      ]runtime -compare "+/0>,¯101+?100 100⍴201" "+/,0>¯101+?100 100⍴201"

  +/0>,¯101+?100 100⍴201 → 1.2E¯4 |  0% ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕
* +/,0>¯101+?100 100⍴201 → 1.1E¯4 | -3% ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕
 
10:30 PM
@Adám there are so many nuanced performance details in languages
 
@TessellatingHeckler True, but in a way, APL is quite hardware sympathetic, making it possible to reason about things like this.
 
this might be something a lazy-evaluation model could identify and swap round at execution time?
(thinking of Marshall's talk about thunked lazy evaluation)
 
@Adám note that the expected time save is ~100x smaller than the runtime of the array generation, so that doesn't say much about which is better
 
@TessellatingHeckler Yes, Marshall's proposed thunks might avoid ravelling altogether, and instead compute 0>⍵ and then count the ones directly. Or maybe it'd even be clever enough to not even do 0> but rather remember that we're looking at strictly negatives, letting +/ inspect and count the negative sign bits in
@dzaima Ah, well spotted.
 
It seems mad that there's still potentially large speedups in execution of short combinations of functions and operators, so many years after APL appeared.
 
10:36 PM
@dzaima but yeah, not much of a difference
 
I was surprised too, when Marshall sped up various fairly commonplace primitives.
Anyway, gotta sleep. Getting up soon…
 
@Adám the latter seems like quite the big jump. even with that only jumping in on big arguments, i'd think at that point it'd be much better for that level optimizations to happen at 400⌶-time
 
@Adám ok, Goodnight
 

« first day (1296 days earlier)      last day (1361 days later) »