« first day (2231 days earlier)      last day (641 days later) » 

01:38
@Adám Yep
 
1 hour later…
03:04
Sometimes you can used the Classic Dyalog version
 
3 hours later…
05:35
@LdBeth Is that a question or a random statement? Also, why would you?
05:47
What's a good little APL phrase that might be fun for a quote/logo/whatever?
06:02
@B.Wilson ⊢>+⌿÷≢
Heh. Cute.
06:34
)wsid test
)save
Running on empty workspaces, the dws bytes are different each run.
Does the workspace embed a timestamps anywhere? Or is the diff coming from some non-deterministic process?
 
1 hour later…
08:03
Yay. Breaking the interpreter in weird ways. Running with a clock set before the Unix Epoch beginning causes SECreate to throw a limit error.
Sounds like time stamps are indeed important.
Bothered Vince. Mondays!
You really want us to document that time travel isn't supported beyond 1970?
@Adám It sounds ridiculous, right? P: I actually stumbled across this trying relatively reasonable things, though.
I was wanting to build byte-for-byte identical workspaces from a script, and it's pretty standard to set the clocks to some relatively early time for that sort of thing.
In this case, I tried setting 1970-01-01 00:00:00, but forgot about TZ, which effectively threw the Unix timestamp into the neverbefore times.
Anyway, plan was foiled by other non-determinicity issues in the ⎕SAVE process, so blah.
08:20
@B.Wilson Why build workspaces?
08:31
@Adám Because Link doesn't have search path akin to WSPATH, as far as I'm aware.
True, but what are you actually trying to achieve?
Sorry. Taking some time to construct a parsimonious reply.

Short answer, https://github.com/arcfide/ALE/. Basically, it's a bag-of-functions/operators that you want to be able to copy into your namespace when doing Task XYZ.
@B.Wilson Ah and ]import doesn't work for you because it only looks at the current dir?
@Adám Exactly.
How about building the workspace from text sources?
We have various tools for that.
08:40
In fact, I made a PR in the above repo to do just that!
You shouldn't have s in dfns definitions in shells scripts.
I believe the current PR conforms with that. It's only defining a few dfns, dops, and tradfns.
@Adám Any of these various approaches preferable to my dumb dyalogscript+⎕SAVE approach?
afaict, m is a dfn with s around it. Anyway, I've left a couple of comments.
@B.Wilson For sucha bag of functions, it is probably fine, but for a large system, you'd want one function per file, and directories as namespaces. Then either use ]import and save, or use the full-fledged ]dyalogbuild system.
@Adám Ah! Nicely spotted. That's a holdover from the original code. Fixed.
@Adám Honestly, the one-function-per-file organization adds enough editor friction that I work around it most of the time. Am much more inclined to use apln files.
What's this dyalogbuild user command? It doesn't seem installed on my system.
08:56
Sorry, it is just called ]dbuild
Cheers.
Anyway, so re-winding the discussion stack, my package-maintainer mind immediately wants to make ALE easily distributable just like any other library/application. In this case, we'd want to distribute the dws instead of source files.
And for Nix/Guix package repositories, build reproducibility is really important, hence my time travel schenanegins.
I see. Well, yes, workspaces are the right way to distribute, but I understand your reproducibility concern. Then again. You can't ever recreate the world state, so having the time stamp influence the build, does make sense. The built artefacts will be functionally identical, though.
09:30
@Adám Are workspaces basically a kind of memory dump or something? IIUC, there's nothing about them that a priori requires saving non-deterministic data.
Yes, they are exactly memory dumps.
 
2 hours later…
SJT
SJT
11:55
I’m working on migrating an APL(+Win) application to a cloud platform. This isn’t simply a case of running the app on a cloud platform – easy enough – but of incrementally refactoring it into microprocesses, so that some computations can be run in parallel and scaled.

I’ve done this off-cloud as a proof of concept, writing a simple ‘request broker’ to orchestrate processing. But in a cloud environment I need industrial tools for this, such Kubernetes and Docker Compose. Anyone have any experience in this area I could consult?
12:05
@SJT Just to clarify: Are you looking to run APL+Win in the cloud, or are you also migrating APL implementation?
 
2 hours later…
SJT
SJT
13:38
@adam Sadly, the former
@Adám Though refactoring the app into microservices would be the best opportunity for using a better interpreter.
14:07
Announcement: 2023 APL Problem Solving Competition is now live! Cash and referral awards offered.
2
@SJT My day job in knee deep in k8s, docker, and all that jazz. Not exactly sure what kind of consulting you're looking for, but feel free to ping me at xoongeethe at wilsonb.com if you want.
14:50
@Adám BTW, calling ⎕SAVE with a 0 left argument removed the source of non-determinism from the dump. Vince pointed me in the right direction.
Apparently the State Indicator is introducing randomness somewhere, even when ASLR is turned off.
@B.Wilson Vince's the best.
 
1 hour later…
15:57
@Adám Registered! BTW, I believe first example of 1:5 has the attacker and defender roll sets reversed.
16:26
NVM. I can't the counting.
 
1 hour later…
17:45
so i remember being explained this a while ago, but i forgot how to use scan in a train
i know its smth related to it being an operator
but i cant seem to make (<smth>/<smth>) equal {⍵/<smth>}
oops not scan, replicate
Try ⊢⍤/
yes, just found that, thanks
thats annoying
18:21
oh wow
problem 2 has such a simple and elegant solution
18:44
@Seggan Wish we had Under!
19:44
im wishing for reverse compose right now
20:19
also, ive been having this problem too much: is there any idiomatic way to, given a vector, compute a mask from that vector and then reapply that mask on that vector?
ok, actually, its a matrix
i found f{⍵/⍨⍺⍺ ⍵}Yv but it doesnt seem to work with either matrices or nested vectors
20:40
@Seggan /⍥,
20:56
how does that work
f⍥g means "f but first pre-process both arguments using g"
yes i know that
i dont see how that can be applied to my use case tho (basically the equivalent of filter from lisp et al)
the reverse compose form extended dyalog would be really useful here
@Seggan Just replace / with /⍥,
ah
so it ravels the args first?
yes
21:03
mhm ty

« first day (2231 days earlier)      last day (641 days later) »