« first day (4415 days earlier)      last day (723 days later) » 
01:00 - 20:0020:00 - 00:00

>:(
01:37
@Ginger this reminds me of this message
in the day TNB became hell, Apr 16, 2021 at 2:42, by Redwolf Programs
I kinda want to upgrade from free trial Lyxal to full Lyxal
me when page not found
@Ginger well find it then
01:57
@NewPosts guys the challenge here says all coordinates are on a rotated hexagonal grid... but what exactly does that mean and how do i convert the given coordinates to regular cartesian coords?
02:13
@AidenChow if the given coord is (u,v), you stand at the origin facing east (slightly rotated in the challenge), walk u units forward, turn left 60 degrees, and walk v units forward
02:26
YOOOOOOOOOOOOOOO
RABBIT PARSED A PROGRAM CORRECTLY
> FunctionDeclaration(FUNCTION Identifier(name=hello, pkg=null)([]) -> community.rto.ginger.rabbit.tree.common.NothingType@6be46e8f, UntypedStatements(UntypedFunctionCall(UntypedVariableAccess(), ""hello world!"")))
I'm so proud :D
Nawww
It's like a baby taking its first steps
@Seggan thanks for all your (mostly inadvertent) help :b
it's time for me to go, but tomorrow will be... very interesting >:)
02:46
yw
@Bubbler so in the context of the challenge i start by facing 15 degrees from the horizontal?
@Ginger you should probably override toString for the Type class
Hello! This is my first time being in any stackexchange chat, and I'm still not quite sure how to easily get here (I just googled "the nineteenth byte" and this happened to be the first result)
@NewPosts WTF is this
@Bbrk24 welcome!
> Saint Alan Turing only envisioned in his wildest wet dreams
@Bbrk24 Hi and welcome to TNB!
03:04
@RydwolfPrograms lmaoooo
@Bbrk24 Hey welcome! You're on the conlangs discord right?
@WheatWizard Yeah I know you from there! You left though right? Look at me, I have an esolang now! (And the github repo is starred by the creator of Befunge?!)
yo also rydwolf did u do the new lang bounty for nekomata that i mentioned in the comments of ur endless bounty?
Oh oops no
They're a pain so I put them off lol
I'll do it ig
@Bbrk24 catseye? neat, what's the language?
03:07
@Bbrk24 Yeah, I should join back again.
@JoKing man that was some weird shit lol
@JoKing Trilangle, A 2-D language that's vaguely inspired by Hexagony. I copied the mirrors and branches but it's pretty distinct otherwise -- the wrapping rules are different, letters and numbers behave differently, and the memory is stack-based. Also I made the basic datatype i24 for some reason
ah right, i've seen your answers on that, very cool. need to give it a go myself
thank god you went with a stack rather than hexagony's convoluted memory structure
New bounty for an interesting new language just went up. If you're interested, check out Nekomata!
@JoKing what kind of memory structure does hexagony even have???
03:11
Right now I am trying to investigate this strange issue with the online interpreter. If you write a program with a long-running loop, run it and then hit the run button a second time before the first one finishes, any further attempts to run or decompile the program after that result in “RuntimeError: Out of bounds memory access (evaluating 'original.apply(null,arguments)')”
@AidenChow a hexagonal one
Ooh that's...a spicy looking error
@JoKing sounds cursed already
It's the last bug that I know about so after I fix that I should in theory be ready for v1.0 (but I'm very hesitant to say that)
@JoKing It only has one stack and no registers, which isn't by itself sufficient for Turing-completeness, but I've added an indexed peek operation which makes it Turing complete modulo the limitations of 24-bit integers.
why 24 bit lol
@RydwolfPrograms ayy nice!
03:15
in hexagony each memory cell is contained on an edge of a hexagon in a hexagonal grid. your memory pointer has the choice of moving forward, either to the left or right branch, or backwards either way, or flipping direction
@AidenChow Well all Unicode characters fit in 21 bits, but if you want to distinguish EOF vs everything else on sign alone (which plays nice with the branching constructs) you need 22 bits, which is too close to a multiple of eight not to round up
and presumably you want negative numbers as well?
@Bbrk24 ayo gg on the star from Pressey!
why not just round up all the way to 64 bit :P
right, they're 24-bit signed integers, so the range is [-2^23, 2^23)
03:17
Why not round up to BigInt :p
It's far easier to implement fixed-width integers in C++, but I chose C++ because it's easier to implement arbitrary-size integers in it (just struct intN { int value : N; };) so that's a bit circular of a reason. The true reason is what I said above about Unicode being 21 bits
Surely Boost has something for arbitrary size integers
Believe it or not I don't think I have boost installed
Here's something even more cursed about that struct intN: you can make it a template. template<unsigned n> struct n_bit_integer { int value : n; };. You'd probably do some std::conditional_t for the base type (here just int) so that way it doesn't take up 32 bits for a 3-bit integer... but if you need that template at all you should probably step back and rethink the choices that got you there
How about this GNU library?
@Bbrk24 What's cursed about it?
@user Given that my installation of bash somehow doesn't even have man, I can say "no" without even clicking on that link.
03:23
oof
^X ^E gives me the error "bash: emacs: command not found" which is multiple levels of wat
Bash has a builtin to do Emacs stuff?
Or do you have $TERMINAL set to Emacs?
Bash has a builtin to open the current command line in $VISUAL or $EDITOR, but it falls back to emacs if neither is defined
*$EDITOR, not $TERMINAL
@Bbrk24 That's interesting, I would've expected vi or nano
But I... don't have emacs. I do have vim, and vi is a symlink to vim apparently
I don't have ed either??
my installation is cursed
03:27
Are you a Gentoo user?
How do you have nothing on your computer? (other than Vim, apparently)
I managed to install bash directly onto Windows
Holy heck
It comes with git so that's nice
Oh, so is this just Git Bash?
yeah
It has... I want to say most of coreutils, but it's missing some pretty common things
03:29
You've probably heard of it, but in case you haven't, WSL is pretty good. You can install a more minimal distro if you don't want the default Ubuntu one
Also it tries to convert Unix-style paths to Windows-style paths to play nice with Win32 executables, but then I get a confusing error when Node sees my regex is prefixed with C:/Program Files/Git/
Yeah I've heard of WSL but my current setup is peak "if it aint broke dont fix it" lol. It has what I need for my workflow and that's what matters to me. (I ended up adding alias man='npx --yes tldr' to my bash_profile)
o.O
i ended up having to send my $PATH to sort | uniq because otherwise it contains so many duplicates that it's 2kB. Which isn't normally a huge deal, but my version of which prints out the entire $PATH on failure, and a 2kB path fills the default terminal size
not to turn this into "bbrk complains about a solvable problem"
03:36
18
Q: Recognize a counting tree

Wheat WizardLet a counting tree be a rooted tree in which every node is labeled with the number descendants it has. We can represent such trees as ragged lists with each node being represented by a list containing its label followed by its children. For example the following is a counting tree: [5,[2,[0],[0]...

> RuntimeError: Out of bounds memory access (evaluating 'original.apply(null,arguments)')

I discovered that something somewhere somehow calls `unreachable()` and that's causing problems... but also that that's not even the first error logged in the dev console
Ah, a destructor isn't getting called. nice.
Wrapping the wasm call in setTimeout(..., 5) fixed it and that's the slightest bit concerning to me
...did I kill chat
04:00
nah, it just gets quiet sometimes
some of us probably have chat open in the background while we do work and stuff ready to jump in if there's an interesting conversation (interesting here is subjective and means different things to each people)
That's fair. Like I said, this is my first time in chat
@Bbrk24 Maybe being queued as a new task/microtask (and thus having less stuff on the stack already) is the cause?
So the thing is if I set the delay to 0 it doesn't work, but if I set the delay to 5 it does
Oh weird. Might be your browser optimizing something out? Or else something really strange is going on
and that's what worries me. Maybe 5 is a number that just happens to work on my browser, and not a guarantee.
requestIdleCallback might be better if it works
Which it does sometimes, but not as reliably. Weirdly enough, hardcoding a 5ms delay is more reliable
04:08
Maybe something related to GC?
(does wasm have GC?)
Well what's happening is that every time I "print" something, the C++ code waits a moment so that the page has a chance to render the new output. The click of the run button happens during that wait time, so if I start the new run immediately it reuses the same chunk of memory the old one was using. Once I hit the stop button, the destructors race and usually one ends up trying to access memory that's already freed.
If I add a delay in the run button, I'm giving the previous run a chance to run its destructors.
(I say "waits a moment", but the delay ends up being barely noticeable. It's probably on the order of single-digit ms.)
Have you considered learning Rust?
It's pretty C++-like in syntax (as an outsider to C++ they look similar to me, at least), and eliminates so many weird race conditions and memory issues and stuff
I think I have rust installed? But that doesn't fix the problem at hand and I don't particularly feel like rewriting a couple thousand lines of code for one minor wasm/js interaction bug
Fair enough lol
I'll probably just slap a 5ms delay in there and call it good enough. If it really is a problem you can just, reload the page
04:18
sleep(5000); // Decrement to get raise for improving code performance
```
$ rustc --version
rustc 1.60.0 (7737e0b5c 2022-04-04)
```
ah, what do you know, I do have rust installed
04:49
@Bbrk24 Maybe try instantiating a new Wasm instance every time you click "run"?
See that would be the smart thing to do. Right now the run button just activates a Module.ccall basically
 
1 hour later…
06:17
Was pointed here from another room. Meta question: Is there a reliable IRC bridge for SE chat? Or perhaps even just a CLI client?
This is one of the few applications that forces me to context switch out of the CLI, so I'm looking for remedies.
People have made libraries for doing chat stuff. I know there's Discord and Matrix bridges out there
Matrix probably has CLI clients, right?
88
Q: IRC access for the chat?

jszWill there be any way of accessing the chat over IRC? As beautiful ajax interfaces are ... IRC is still #1 for chats.

Kinda tempted to write a TUI for SE chat now. Authentication would be a bit tough. Would you have to store your password in a plaintext file or something?
@dzaima Sorry for the ping, but you had Discord and Matrix bridges going for the APL Orchard, right?
06:50
@user we had one once
Hyper might know something
@user You could probably look at how all the chat bots work
@mousetail Well, Ginger seemed to put the password and email for their chatbot in plaintext. I guess you could encrypt it but not hash it
@lyxal imma steal that Python one
@user Forgot to ask an actual question here. Do you happen to have the code for that in a public repo?
@user Even important bots like smoke detector?
07:08
@user they're both js though
How you gonna steal that python one when there ain't no python one
@user lol what
@lyxal Oh, I somehow read the first one as Python
@B.Wilson There's probably an "API" or two for SE chat out there in case you feel like making a client/IRC bridge yourself
From what I've heard chatbots are a huge pain because SE sus
07:31
@emanresuA SE sus how?
07:50
Midnight hiccups, random disconnects / timeouts, websocket weirdness, and some things people aren't even sure about
 
4 hours later…
12:03
@emanresuA correct
@emanresuA also correct
@lyxal yeah, Vyxal Bot has a file called config.json that contains all of the important bot settings as well as at least 4 secret values
I thought user meant in a file in the repo
a file in an upper directory is what hyper did anyway :p
no ._.
why tf would I put my email and password in the repo, how 🤓 do you think I am
you can never be too sure
given all the times you've leaked things in chat
:p
those were accidents
it requires effort to put a secrets file in a GH repo
58 secs ago, by lyxal
you can never be too sure
12:46
@emanresuA What does "sus" mean here?
in the way of:
5 hours ago, by emanresu A
Midnight hiccups, random disconnects / timeouts, websocket weirdness, and some things people aren't even sure about
Ah, sus(picious). Gotcha.
2020 was a wild time :p
I'm so out of touch with English zeitgeists.
we just call it gen z meme culture :p
12:52
Anyway, so it seems like CLI-ing this chat boils down to DIY-ing it, IIUC.
it does
because SE has a fantastic lack of chat API support
meaning you have to write any chat interaction stuff yourself
A really dumb workaround might be brow.sh
and hope like crazy SE doesn't change something under the hood that breaks everything
13:06
@user I do have an SE APL Orchard←→Matrix bridge that I run locally for myself, but it's not published anywhere and is decently incomplete
Using brow.sh is surprisingly less janky than one might suspect!
Okay. I take that back.
@B.Wilson If you want to make a CLI-based chat client, may I recommend sechat? It's a Python library I made to interface with SEChat and is in my completely unbiased opinion the best one available as of right now :b
The version on PyPI is actually out-of-date; I'm going to be releasing version 2.0.0 soon, which is a complete rewrite using asynchronous programming
@Seggan get this: NothingType and NeverType are special singleton objects that inherit from the Type class :p
and their definitions are just as cursed: object NothingType : Type(FullIdentifier(Identifier("NOTHING", "//rabbit-internals")), listOf<Type>())
Yes, I set the package name to //rabbit-internals. Yes, // is the comment symbol.
13:22
@Ginger I also strongly recommend sechat in a totally 100% unbiased way :p
IF YOU DON'T BELIEVE ME, JUST LISTEN TO [Our Satisfied Customers]!
But actually I would recommend it even without bias
Mostly because it's the only working bot library I know of
I mean, you've never used it, so it could be a pile of garbage for all you know q:
also whatever Smokey is doing seems to be working fine, and I have no clue what's happening over in SOBotics
I have used it
what?
13:25
Yeah I used it to send like 3 messages once
uhh when was this
because I bet you it was before the rewrite d:
Last year in the sandbox chatroom
last year? oh right it's 2023
Around the time of Schroedinger's uno I think
hmmm
13:26
@Ginger And in your completely unbiased opinion, where can this amazing library be found?
@lyxal link or it didn't happen
@B.Wilson well, that depends if you want the latest 2.0.0 version (which uses async and is far better IMHO) or the 1.x version (no async)
1.x is on PyPI, 2.0.0 is on the GH repo
I'm not technically done with 2.0.0 yet, but it's stable enough for use, so if you want it just point Poetry or whatever to github.com/GingerIndustries/sechat/tree/v2 (make sure it's the v2 branch)
in Sandbox, Oct 14, 2022 at 12:41, by ľýxäł
14
A: Reimplementing square root

HiatoJava (163) Implementing a double precision square root calculator by making use of the fast invert square root stuff from quake and a new constant for the 64bit floats. In java. Yay for verbosity. public double i(double a){double b=a/2;long c=0x5fe6ec85e7de30daL-(Double.doubleToRawLongBits(a)>>...

+ the message above and below
oh right, back when we weren't sure why oneboxes were being weird
@Ginger Code on GH, definitely.
@Ginger yee
13:29
(it turned out to be because the links were being sent so fast that SE hadn't had time to make onebox data for them :p)
@B.Wilson cool, that's what I'd do too
advance warning: I haven't added any docs yet, but if you want an example of a functional bot using it take a look at this project that I am also 100% unaffiliated with: github.com/Vyxal/VyxalBot2
@Ginger Hey, that's the funny! I use that bot on a regular basis!
it is very the funny
looky what I did:
FunctionDeclaration(FUNCTION Identifier(name=hello, pkg=null)([]) -> Type(FullIdentifier(identifier=Identifier(name=NOTHING, pkg=//rabbit-internals), child=null), <[]>), UntypedStatements(UntypedFunctionCall(UntypedVariableAccess(FullIdentifier(identifier=Identifier(name=print, pkg=null), child=null)), ""hello world!"")))
0
Q: Largest Binary Area

mousetailTake the sequence of all natural numbers in binary, (1, 10, 11, ..) then write them vertically beside each-other like this: 1 1 1 1 1 1 1 1 1 11 11 11 11 1111 1111 11111111 11 Notice there are areas of connected 1s in the binary representation of the number. Your ...

that's right, I parsed a Rabbit program
and summoned a new post too :p
and that
13:46
Well now that I've done the thing I was elected to do, imma head out for the night
o/
bye
14:46
@Ginger NPSP has that problem too lol
The solution it uses is probing the SE API every hundred milliseconds or so, since that seems to update at the same time oneboxing starts to work
I just added a fixed delay of like 1s
I would do that but for NPSP 2.0 I really wanted to do things right™
lol
Also I wanted to make it as fast as humanly possible
(I could make it a tiny bit faster by having it post immediately, then edit it once the API updates if it doesn't onebox initially)
too much effort for too little payoff
blugh I hate waiting 34s for Rabbit to compile
but at least it works: FunctionDeclaration(function hello() -> Type(NOTHING), UntypedStatements(UntypedFunctionCall(UntypedVariableAccess(print), ""hello world!"")))
LDQ: Alternatives to static (the keyword)?
14:53
In what context?
static function x
Why do you want an alternative
because I don't like static
I'd suggest either static or just make every function where the first parameter is not self static automatically like rust
14:55
or more accurately I feel that there's got to be a better alternative
"Better" how
@mousetail except: self is a keyword in Rabbit, you don't have to add it to the function list
But if you did, then it would fix the issue
@RydwolfPrograms more descriptive; when I look at static I don't think "oh this function is a member of its type, not of an instance"
@Ginger Then I'd use static, it's the common word used everywhere, clear, consise
14:56
@Ginger Skill issue :p
alright, but I'm going to resent it :b
Though I'd recomend having self as the first paramter since you could wrap it in a monad and accept Option<Self>, Result<Self>, Promise<Self> etc. in addition to a plain Self type
mousetail's suggestion is the best option IMO
@mousetail why would I want to do that again?
@mousetail Ooh that's interesting. Does Rust allow that?
14:58
@RydwolfPrograms Rust allows a few speefic types like Box and Cow, but I think it would be great if it was extended to every monad
"Cow"???
Cow = Copy on Write
great name
It's fantastic
Rust also has yeet
It's fantastic
@mousetail Yeah but not as a permanent solution right
I thought it was just an anti-bikeshedding temp name
15:00
Nothing as permanent as a temporary solution
@RydwolfPrograms That's the intention yes
15:10
@Ginger Somebody nuke this user
 
1 hour later…
16:15
0
Q: Euler's identity

d dCreate a program that calculates \$e^{i\pi}\$ and outputs the result. It should output -1 but it can have an error margin of 5%. And it needs to calculate it, it can't just output -1. For example, in APL: *○0j1 That outputs ¯1.

@Ginger whats a FullIdentifier :P
@Ginger lol
@Ginger youve got a very slow computer
rol takes ~10s
on my potato laptop
I'm compiling on gingerdrop, which is a pretty powerful server, but that time also includes shadow jars and such
thats why you dont shadow
just use run instead of runShadow
bold of you to assume I'm using run
im not
im telling you to use run
anyway, i think youve summoned me in another room
16:24
I fixed that problem already q:
misunderstood how string substitution works in Kotlin
"a$b c" == "a" + b + " c" afaik
17:14
so ive got some good (for me) news
theres a mobile game i wanna clone
and the copyright database isnt showing anything for the dev's name
so even though if he did have copyright i couldve cloned it, this means i can have no fear at all of retribution
there's a copyright database? I thought you could copyright anything you can legally copyright by just saying it's copyrighted (maybe jurisdiction dependent I guess but that's what I've heard)
@hyper-neutrino i think thats for licensing, not copyrights
17:34
> In general, registration is voluntary. Copyright exists from the moment the work is created. You will have to register, however, if you wish to bring a lawsuit for infringement of a U.S. work.
so ure somewhat right
oh, I see
It would be really ironic if someone made a super permissive open source license but the text of the license itself was proprietary and fiercely protected by a team of lawyers
lol
18:10
@dzaima Oh ok. Thanks anyway
I think I'll look at SmokeDetector as mousetail suggested and try making a TUI based on that
18:23
just use sechat man :p
it's been endorsed by such trustworthy figures as Lyxal
Oh hey Ginger
@Ginger How do you handle authentication securely with sechat?
@user what do you mean "securely"? there are a lot of ways to define that
@user Like as in not having your credentials in the source code?
Like not having your password in plaintext
Using environment variables is best practice
But worth noting you'll always have to have them somewhere on the machine in what is trivially convertible into plaintext unless a user is always present when the bot starts up
18:26
So I'd still have to put my SE password into my .zshrc, right?
Hmm ok
You can obfuscate them all you want but if it can be automatically decoded by your code it can be automatically decoded by anyone else's who has access to your machine
there's no way to avoid having your credentials in some easily-decodable form somewhere on your machine
I think I'll just prompt for a password while logging in every time
sechat, for its part, doesn't care where the credentials come from; you just give the Bot.login function an email and password
@Ginger I guess so yeah
18:32
One possibility could be a script with 100 permissions
Ooh
It would just print your password, but since it's execute-only there's a pretty low chance some automatic tool manages to leak your password
Just made a simple one with Rust
It's like 4 MB to print a string but it works :p
radvylf@penguin:~/password_guard$ cp target/release/password_guard .
radvylf@penguin:~/password_guard$ chmod 100 password_guard
radvylf@penguin:~/password_guard$ ./password_guard
RydwolfIsCool
radvylf@penguin:~/password_guard$ cat password_guard
cat: password_guard: Permission denied
radvylf@penguin:~/password_guard$ du -sh password_guard
3.8M    password_guard
Okay stripping it drops it to a more reasonable 300 KB
ayo this is a family safe chatroom, put its clothes back on this instant
Whyyy is rust so chonky, I want my C back
Source-code-wise or executable-wise
C would probably be just as big statically linked
18:45
Swift is somewhat infamously unsuitable for wasm because when you statically link it you pull in massive libraries like Foundation, and even so much as a simple print statement requires runtime reflection to determine how to stringify the argument
Literally just print("Hello, World!") produces a 6MB wasm file
0
Q: Custom Games of Life

InfigonCustom Games of Life There's a lot of questions about Conway's Game of Life, but nothing about customization (Related: 2-Player Life). Given an input, determine the result on a 100x100 grid after some iterations. The input is given as a string. For example: Using the character #, follow the follo...

19:07
Random esolang idea: Brain-Flak, but mismatched brackets mean something (e.g. [...] is a different command from [...> is a different command from <...] etc)
Ooh interesting
You could replicate normal brainflak with just two bracket types, while using all four would give you four times more operations to work with
Maybe removing the "adjacent things are added" rule and making the monads into variadic functions would make those additional operations more useful
I kinda want to make a vs code extension for Trilangle syntax highlighting if only so it stops turning my increment instructions red for being mismatched parens
Yeah in vscode 1.76 they started coloring mismatched parens/brackets red even in .txt files
Honestly it's not that big a deal. Since I can't think of any really helpful IDE features I mainly use notepad as my editor for trilangle programs
19:23
@Bbrk24 what
you need reflection just to tell that a string literal is a string?
@Seggan Well the thing is, the unlabeled arguments to print are boxed in Any, and to recognize it's a string you need to unbox it
Any is a 4-word box: the first 3-ish words contain the value if it's small enough or a pointer to heap-allocated memory if not, then there's a bit to indicate which it is, then the fourth word is a pointer to the type metadata
> Exception has occurred: "java.lang.AssertionError: ?!"
oh no
The error message is ?!
I know, because I wrote it :b
> line 4:14 mismatched input 'true' expecting {STRING, NUMBER, 'not', BOOLEAN, '(', IDENTIFIER}
...what do you think a BOOLEAN is again
19:40
Clearly true is a boolean. If it wants a BOOLEAN you have to say TRUE
oh right q:
@Bbrk24 ...I know you were joking, but that actually worked, and now I'm very concerned about my parser
wait what
exactly
@Ginger what did it think "true" was then? If not BOOLEAN my next guess would've been IDENTIFIER but judging by that error message it's not that either
19:53
no clue
I'm trying a fix
I've come up with names for some of Rabbit's tools: rabbundle for the bundler, rabbabel for translation, and rabbodge for the debugger
great, right?
rabbabel is slightly difficult to say/type
01:00 - 20:0020:00 - 00:00

« first day (4415 days earlier)      last day (723 days later) »