<< 05-04-2024 >>

00:17:07*Mister_Magister joined #nim
00:53:44*redj joined #nim
01:03:28NimEventerNew Nimble package! cdp - Low-level Nim wrapper for Chrome DevTools Protocol (CDP) v1.3 stable. Bend Chrome to your will with complete control over your browser. Scrape dynamic webpages, create browser automations, and beyond., see https://github.com/Niminem/ChromeDevToolsProtocol
01:03:58NimEventerNew thread by Niminem: Chrome DevTools Protocol Library For Nim (control your browser), see https://forum.nim-lang.org/t/11363
02:04:37*lucasta joined #nim
02:16:17FromDiscord<4zv4l> sent a code paste, see https://play.nim-lang.org/#pasty=pFBrPpfjVAGe
02:16:38FromDiscord<4zv4l> (dont mind the distro, I am at work)
02:17:03FromDiscord<4zv4l> and in the `error: execution of external program... gcc ...`↵there isnt the `-nostartfiles`
02:17:14FromDiscord<4zv4l> I tried the stable and devel release of Nim
02:19:27FromDiscord<Elegantbeef> should be `{.exportc: "_start", cdecl, dynlib.}`
02:20:07FromDiscord<ringabout> Isn't it a Linking option? https://gcc.gnu.org/onlinedocs/gcc/Link-Options.html#index-nostartfiles I suppose `--passC:-nostartfiles --passL:-nostartfiles`
02:20:26FromDiscord<4zv4l> In reply to @Elegantbeef "should be `{.exportc: "_start",": doesnt `exportc` imply `cdecl` ?
02:20:46FromDiscord<recycledloveletter> i'm curious, how would one go about silencing ETW logging by patching EtwEventWrite and making every return code result successful for callstacks containing rubbish data in nim? any windows API's that arent winim? Not that I can't use it, I'm just curious if theres any other nimble packages with support for ETW functions
02:21:36FromDiscord<recycledloveletter> no need to access first question if second can be answered, just any recommendations of the top of the head
02:21:54FromDiscord<Elegantbeef> No it does not 4
02:21:59FromDiscord<recycledloveletter> (edit) "of" => "off"
02:22:06FromDiscord<4zv4l> In reply to @ringabout "Isn't it a Linking": indeed, `--passL:-nostartfiles` did the trick, thanks !
02:22:44FromDiscord<recycledloveletter> (edit) removed "code"
02:23:02*SchweinDeBurg quit (Quit: WeeChat 4.3.0-dev)
02:27:21*SchweinDeBurg joined #nim
03:47:32*termer quit (Quit: ZNC 1.8.2+deb2build5 - https://znc.in)
03:56:00*lucasta quit (Remote host closed the connection)
04:08:36FromDiscord<yoyojambo> Is there a known issue with `setControlCHook` and threads or async? I have a jester server that only quits the main thread when there is a line with `setControlCHook` somewhere. So the server keeps running somehow.
04:08:57FromDiscord<yoyojambo> I remove the line with `setControlCHook` and it works as intended
04:10:29*termer joined #nim
04:11:47FromDiscord<.bobbbob> I made a server side nginx statistics app↵https://codeberg.org/bobbbob/nim-nginxstats↵and a bot detection library to go along with it↵https://codeberg.org/bobbbob/nim-isbot
04:13:49FromDiscord<Elegantbeef> @yoyojambo if the process quits the threads should also come with it, are you by anychance using `startProcess`?
04:14:54FromDiscord<yoyojambo> I am letting Jester handle everything, I'm not sure how it does so
04:15:12FromDiscord<yoyojambo> Should I raise an issue in Jester?
04:15:34FromDiscord<Elegantbeef> Normally I'd say yea but I know it's no longer maintained
04:15:48*def- quit (Quit: -)
04:16:05*def- joined #nim
04:16:21FromDiscord<yoyojambo> In reply to @Elegantbeef "Normally I'd say yea": I didn't know it that :(
04:16:28FromDiscord<yoyojambo> rip
04:17:36FromDiscord<Elegantbeef> https://github.com/ThomasTJdev/jester_fork does exist and does seem to be getting some development
04:19:23FromDiscord<yoyojambo> thanks, I'll check it out
04:27:49FromDiscord<bung8954> probably cuz by httpbeast doesn't free resource properly. and it shows obviously when runs among nim new memory management.
04:28:21FromDiscord<Elegantbeef> Well it shouldn't run code if the process is killed unless the process spawned children
04:28:55FromDiscord<Elegantbeef> I say children but I mean detached processes
04:31:34FromDiscord<bung8954> what am saying is mostly related the code in thread
04:36:18FromDiscord<yoyojambo> I think I observed the same bug using asyncHttpServer, but let me check real quick
04:37:45FromDiscord<yoyojambo> yep, using -d:useStdLib to use asynchttpserver instead of httpbeast does create the same result
04:38:12FromDiscord<Robyn [She/Her]> Does jester use async or threads?
04:38:25FromDiscord<Robyn [She/Her]> And same question for httpbeast
04:39:21FromDiscord<Robyn [She/Her]> Mummy is a multi threaded server if anyone wants to look into it, though it's more meant for APIs
04:44:52FromDiscord<yoyojambo> In reply to @chronos.vitaqua "Mummy is a multi": it does seem nice
04:45:20FromDiscord<yoyojambo> In reply to @chronos.vitaqua "Does jester use async": Idk about httpbeast, but with stdlib it is async I think
04:46:02FromDiscord<Robyn [She/Her]> Fair
04:48:26FromDiscord<bung8954> curious about what inside ur `setControlCHook` now
04:50:48FromDiscord<yoyojambo> It had an echo and it closed a DB connection, but I also removed either, both, and even ran an empty proc and it is the same result
04:51:22FromDiscord<Robyn [She/Her]> Maybe Jester sets a ctrl c hook?
04:52:20FromDiscord<bung8954> no idea now.
04:53:37FromDiscord<yoyojambo> In reply to @chronos.vitaqua "Maybe Jester sets a": That totally just solved it, I ran the proc at the end and now it works no problem
04:53:52FromDiscord<yoyojambo> I did not think jester could override it with the macro
04:54:11FromDiscord<Robyn [She/Her]> In reply to @yoyojambo "That totally just solved": Rad!
04:54:16*advesperacit joined #nim
04:54:31FromDiscord<yoyojambo> I had it before the router macro before but now it works fine
04:54:35FromDiscord<yoyojambo> thanks so much
04:56:11FromDiscord<Robyn [She/Her]> No worries about it!
04:56:52*def- quit (Quit: -)
04:57:10*def- joined #nim
06:40:21*PMunch joined #nim
07:59:22NimEventerNew thread by ingo: Fake a file?, see https://forum.nim-lang.org/t/11364
08:02:16*PMunch_ joined #nim
08:02:47*redj quit (Ping timeout: 272 seconds)
08:02:51*redj_ joined #nim
08:05:06*PMunch quit (Ping timeout: 255 seconds)
08:24:15*PMunch_ is now known as PMunch
08:55:55*PMunch_ joined #nim
08:58:44*PMunch quit (Ping timeout: 260 seconds)
09:40:34*PMunch_ quit (Quit: Leaving)
10:16:23*PMunch joined #nim
10:16:44*Onionhammer quit (Quit: Ping timeout (120 seconds))
10:17:03*Onionhammer joined #nim
10:34:49FromDiscord<zadi> sent a code paste, see https://play.nim-lang.org/#pasty=GMUYXFaEKkBX
10:35:14FromDiscord<zadi> (edit) "https://play.nim-lang.org/#pasty=SagzDmMZIKsw" => "https://play.nim-lang.org/#pasty=biClEibLSAVq"
10:39:57FromDiscord<that_dude.> In reply to @zadi "Hi, so trying to": Does `var tableType: T` work for you?
10:43:40FromDiscord<that_dude.> sent a code paste, see https://play.nim-lang.org/#pasty=oirDCIkuSaDA
10:44:14FromDiscord<zadi> I think that could do it yeah, next issue is how would i go about iterating through the fields of said type?
10:44:42FromDiscord<zadi> so for example, i want to read userId and string from the User type
10:45:48FromDiscord<zadi> would something like this work?↵`for field in fields(tableType):`
10:47:59FromDiscord<that_dude.> You could either make a manual iterator or there may be a macro somewhere in the std for it. I would probably just make my own though
11:07:04FromDiscord<xtrayambak> sent a code paste, see https://play.nim-lang.org/#pasty=DLKpUfmIlsCK
11:07:08FromDiscord<xtrayambak> do you mean something like this?
11:54:00FromDiscord<odexine> In reply to @zadi "would something like this": it would work, yes
12:00:04*advesperacit quit (Ping timeout: 268 seconds)
12:06:23*advesperacit joined #nim
13:24:21*ntat joined #nim
13:54:21*rockcavera quit (Remote host closed the connection)
13:58:03*rockcavera joined #nim
13:58:38*ntat quit (Quit: Leaving)
14:07:46*junaid_ joined #nim
14:08:01*advesperacit quit (Ping timeout: 268 seconds)
14:11:04*PMunch quit (Quit: Leaving)
14:22:55*lucasta joined #nim
14:36:11*lucasta quit (Quit: Leaving)
14:36:54FromDiscord<4zv4l> how can I check if stdin is waiting for data↵like if I do popen how do I check if the process is waiting to read from stdin ?
14:37:00*lucasta joined #nim
14:47:09*lucasta quit (Remote host closed the connection)
15:12:12*lumidify quit (Quit: leaving)
15:12:50*lumidify joined #nim
15:13:32*ntat joined #nim
15:29:41*lumidify quit (Quit: leaving)
15:31:38*lumidify joined #nim
15:40:19*lumidify quit (Quit: leaving)
15:42:16FromDiscord<norax.2> so if windows is made in c++,and the nim compiler compiles in to microsoft c++(atleast for windows) that means windows is a virus based on microsoft https://media.discordapp.net/attachments/371759389889003532/1225832889380372621/image.png?ex=662290d7&is=66101bd7&hm=f5c488f1038e909c3ee873477868aae2bbc4acb9b2050fba626dce2be1c417d6&
15:42:40FromDiscord<norax.2> (edit) "microsoft" => "windows"
15:42:49*lumidify joined #nim
15:43:05FromDiscord<norax.2> (edit) "so if windows is made in ... c++,and" added "microsoft"
15:43:18FromDiscord<norax.2> (edit) "so if windows is made in microsoft c++,and the nim compiler compiles in to microsoft c++(atleast for windows) ... that" added "then the antivirus detects it"
15:43:54FromDiscord<norax.2> (edit) "it that" => "it,that"
15:45:41FromDiscord<Robyn [She/Her]> In reply to @norax.2 "so if windows is": Have you checked to see if a compiled Nim binary for Windows via Clang got flagged?
15:46:04FromDiscord<norax.2> nope
15:46:24FromDiscord<norax.2> but i think the problem is not how is compiled but how it is signed
15:46:35FromDiscord<norax.2> cause it is signed by nim & autor
15:46:55FromDiscord<norax.2> so if whe remove the nim sign it would be detected as unknow author
15:47:03FromDiscord<norax.2> and not a virus
15:47:08FromDiscord<Robyn [She/Her]> The issue is the binary, not the signee
15:47:18FromDiscord<Robyn [She/Her]> You're welcome to try though
15:47:38FromDiscord<norax.2> nim compiles to js
15:47:42FromDiscord<norax.2> lemme try whit that
15:48:11FromDiscord<Robyn [She/Her]> Nim itself won't compile to JS afaik
16:25:21FromDiscord<venkataregalla05> hello
16:27:18*junaid_ quit (Remote host closed the connection)
16:31:57FromDiscord<jviega> @4zv4l select() on the file descriptor will tell you if there's anything to read.
16:37:22FromDiscord<Phil> In reply to @venkataregalla05 "hello": Cheers
16:44:28FromDiscord<venkataregalla05> I am new programmer who has some knowledge over C language. I wanted to learn another programming language and i came across nim. I want to make a compiler and an OS but not with C (I wanted to challenge myself to not copy past the code from some wikis which use C language). Does Nim support manual memory management??
16:45:03Amun-Rayes
16:45:05FromDiscord<venkataregalla05> (edit) "I am ... newuse" added "a" | "anew programmer who has some knowledge over C language. I wanted to learn another programming language and i came across nim. I want to make a compiler and an OS but not with C (I wanted to challenge myself to ... not" added "use another language and"
16:45:14FromDiscord<Phil> It does.↵You can have pointers (like in C) and turn of the memory management entirely
16:47:12FromDiscord<Phil> memory management is turned off via compiler flag (see https://nim-lang.org/docs/nimc.html, you're looking for the --mm flag).↵Ref types (which will be kinda like pointers since they won't be GC'd) are allocated as you would usually.↵↵Though typically nim tries to lead you more towards value types
16:50:25FromDiscord<venkataregalla05> Ok
16:50:56FromDiscord<venkataregalla05> and also i got to know that nim also compiles to js
16:51:25FromDiscord<venkataregalla05> So thats why i was curious about nim.
16:51:33FromDiscord<venkataregalla05> Well, i think i will go with it
16:53:50FromDiscord<MDuardo> It's an alternative backend↵(@venkataregalla05)
16:55:22FromDiscord<zumi.dxy> In reply to @venkataregalla05 "I am a new": would this help? https://github.com/dom96/nimkernel
16:55:28FromDiscord<jaar23> can i parse int to static int?
16:56:03FromDiscord<MDuardo> The main backend is C, but you can also uso C++
16:56:03FromDiscord<MDuardo> The main backend is C, but you can also use C++
16:56:37FromDiscord<4zv4l> In reply to @jviega "<@329196212282458112> select() on the": Select also work to detect when a fd is trying to read ? I thought it’s only to detect when there is already data to take from a fd
16:57:21FromDiscord<jviega> Yes
16:58:38FromDiscord<jviega> You can test w/ select if the FD is ready for either a read or a write. Don't write more than PIPE_BUF bytes at a time though, as depending on what you're doing and how you could end up blocking unexpectedly
17:04:46*krux02 joined #nim
17:08:31FromDiscord<venkataregalla05> In reply to @zumi.dxy "would this help? https://github.com/dom96/nimkernel": Yes thank you
17:11:19*krux02 quit (Remote host closed the connection)
17:12:23*advesperacit joined #nim
17:15:49*xet7 quit (Remote host closed the connection)
17:19:05*xet7 joined #nim
17:26:00*tiorock joined #nim
17:26:00*rockcavera is now known as Guest260
17:26:00*Guest260 quit (Killed (copper.libera.chat (Nickname regained by services)))
17:26:00*tiorock is now known as rockcavera
17:41:49*def- quit (Quit: -)
17:42:02*def- joined #nim
18:06:34FromDiscord<.lisuwu_> In reply to @venkataregalla05 "I am a new": heres nimkernel_ext on top of dom96's nimkernel: https://github.com/mikra01/nimkernel_ext, this has more stuff that you might find useful
18:08:29FromDiscord<.lisuwu_> also since you are doing kernel, here is my personal tip: be prepared for everything
18:09:08FromDiscord<.lisuwu_> (edit) "everything" => "everything, especially some weirdness that might come out of there"
18:10:08FromDiscord<.lisuwu_> i remember reading data from RTC, i was bashing my head on keyboard trying to figure out if it was my issue with my number to string function or something else was happening, turns out RTC was giving data in different format than directly giving the data, lmao
18:16:55*MacDefender joined #nim
18:18:32FromDiscord<TӨMΛ ☠> Is there any non-verbose way to create array of `[32, char]` from sequential proc without putting it like madman `[proc(1), proc(2), proc(3), ...]`?
18:19:08FromDiscord<TӨMΛ ☠> Or if you could split string of size 32 to array of [32, char], since this could also work
18:20:21FromDiscord<TӨMΛ ☠> sent a code paste, see https://play.nim-lang.org/#pasty=cGoerIKSsNbw
18:20:28FromDiscord<TӨMΛ ☠> (edit) "proc(2), proc(3)," => "proc(1), proc(1),"
18:20:40FromDiscord<TӨMΛ ☠> (edit) "https://play.nim-lang.org/#pasty=dvZUyRxNgYIW" => "https://play.nim-lang.org/#pasty=HHBSTmmzIwIm"
18:38:42FromDiscord<Elegantbeef> You mean fortunately 😛
18:39:12FromDiscord<Elegantbeef> Make a proc that takes `static int` and `T` then you can do `makeArray(32, proc(1))`
18:41:38FromDiscord<TӨMΛ ☠> What module `makeArray` is? :o
18:44:04FromDiscord<TӨMΛ ☠> In reply to @Elegantbeef "You mean fortunately 😛": I like some sugary syntax, not saying sugar is healthy tho 😅
18:44:30FromDiscord<TӨMΛ ☠> In reply to @Elegantbeef "Make a proc that": I can't imagine that somehow, sorry, could you give me a bit more hints on how this could look?
18:44:42FromDiscord<TӨMΛ ☠> And what `static` in this context means?
18:45:15FromDiscord<Elegantbeef> sent a code paste, see https://play.nim-lang.org/#pasty=xumGMJxIUivd
18:45:24FromDiscord<Elegantbeef> Static means compile time constant value
18:47:48FromDiscord<TӨMΛ ☠> In reply to @Elegantbeef "Static means compile time": Ah, in different situation compiler would complain about unknown size of an array?
18:47:56FromDiscord<TӨMΛ ☠> (edit) "in different situation" => "without it"
18:55:41FromDiscord<TӨMΛ ☠> Thank you so much for this code, it makes much more sense now in my head, and what's also important, it works after slight edits for my specific case 🔥
19:15:24FromDiscord<847298523328> Teen Porn and Onlyfan Leaks here 🍑🍒 : https://discord.gg/NSRpYWCM @everyone
19:17:48FromDiscord<demotomohiro> <@&371760044473319454>
19:17:54FromDiscord<tixonochek> The first time I catch a scam going on after watching the video from NTTS.
19:25:09FromDiscord<TӨMΛ ☠> We had raid literally half an hour ago on Tamriel Rebuilt server... ;-;
19:25:29FromDiscord<TӨMΛ ☠> Discord became second Twitter at this point
19:33:28*ntat quit (Quit: Leaving)
20:14:10FromDiscord<Robyn [She/Her]> In reply to @toma400 "We had raid literally": Tamriel Rebuilt?
20:14:26FromDiscord<Elegantbeef> A mod discord server ostensibly
20:15:13FromDiscord<Robyn [She/Her]> Ah? Seems unlikely but possible ig
20:15:39FromDiscord<Elegantbeef> What?
20:15:56FromDiscord<Elegantbeef> https://www.tamriel-rebuilt.org/
20:16:51FromDiscord<TӨMΛ ☠> Yeah, one of the biggest mod projects, and it was about Discord server
20:16:58FromDiscord<TӨMΛ ☠> (edit) "Yeah, one of the biggest mod projects, and it was about ... Discord" added "its"
20:17:02FromDiscord<Elegantbeef> Unlikely
20:17:11FromDiscord<Elegantbeef> Sorry, not sorry Robyn
20:20:58FromDiscord<Robyn [She/Her]> Lol
20:25:02FromDiscord<raycatwhodat> sent a long message, see https://pasty.ee/uUmGuiHlTDut
20:25:30FromDiscord<Elegantbeef> You then have verbatim bindings for you to build high level APIs on
20:25:44FromDiscord<Elegantbeef> But if you need you can write the low level code in a type safe environment
20:27:13FromDiscord<raycatwhodat> In reply to @Elegantbeef "But if you need": Ah. Fair point.
20:28:01FromDiscord<nervecenter> I tend to wrap the stuff I need as I need it, and put a nice-to-use Nim proc over top of the C interfacing logic.
20:28:27FromDiscord<nervecenter> All the conversion happens in the interfacing proc so I never having to use any compatible types or pointer logic in my wider application.
20:28:30FromDiscord<Elegantbeef> Plus you can add destructors to the high level wrapping
20:28:39FromDiscord<Elegantbeef> Which you cannot do with Odin(no clue about nelua)
20:30:07FromDiscord<raycatwhodat> In reply to @Elegantbeef "Which you cannot do": There's a `:destroy` metamethod but I haven't tested that
20:31:23FromDiscord<raycatwhodat> Thanks for the reply.
20:31:24FromDiscord<Elegantbeef> Though there is one issue with autogenerated Nim bindings and that's C does not have "This is an array" and "This is a pointer" types
20:31:36FromDiscord<Elegantbeef> So you get to cast inbetween `ptr UncheckedArray[T]` to `ptr T`
20:32:52FromDiscord<raycatwhodat> Mm. Okay. I'll keep that in mind.
20:33:10FromDiscord<raycatwhodat> Hopefully, I don't have to do anything too hairy for this
21:39:00FromDiscord<TӨMΛ ☠> In reply to @raycatwhodat "Okay. This is going": Nelua? 👀 ↵Always a joy to see new programming languages I never heard of
21:40:44*def- quit (Quit: -)
21:41:30*def- joined #nim
21:46:50*def- quit (Quit: -)
21:47:03*def- joined #nim
22:00:54*redj_ quit (Ping timeout: 256 seconds)
22:30:43*advesperacit quit ()
22:35:59FromDiscord<sOkam! 🫐> sent a long message, see https://pasty.ee/lAqcePMhTGcv
22:37:15FromDiscord<sOkam! 🫐> That said, you don't need gc:none for doing what you want. In fact I would recommend against it↵What you want, if you want to do MM, is `--mm:arc` instead, and manage the allocation/deallocation hooks manually
22:39:52FromDiscord<sOkam! 🫐> Nim with gcnone is my absolute ideal lang, and I gave it a serious effort for an entire year. But you really spend some serious time trying to not shoot yourself in the head with features that should be completely disabled altogether when gcnone is asked 🤷‍♂️
22:43:18FromDiscord<polylokh_39446> although if Nim did disable a bunch of features wit gc:none, you'd get the D @nogc result of libraries having to decide which sublanguage they support. It's not a pleasant outcome either. Nelua avoids that somewhat by having a configurable general allocator, so when the GC is on all code uses the GC to allocate by default, and when the GC is off it uses the general allocator and you can take more care to ensure cleanup. But IME the
22:43:27FromDiscord<polylokh_39446> (edit) "wit" => "with"
22:47:21FromDiscord<polylokh_39446> and, you can use arc while still writing code like you're under gc:none.
22:47:55FromDiscord<sOkam! 🫐> In reply to @polylokh_39446 "although if Nim did": it would be perfectly fine if gc:none was a feature, and it wouldn't weight on the libraries like you mention, as the moment you need strings/seq you are out of the door entirely↵the problem comes from gcnone not being supported, but being called "supported" officially... when the language core is not even tested for leaks at all
22:48:33FromDiscord<sOkam! 🫐> like object variants. they should be out of the door instantly when you asked for gc:none... because they use exceptions and exceptions leak
22:48:57FromDiscord<polylokh_39446> really? catchable exceptions?
22:49:02FromDiscord<sOkam! 🫐> same with exceptions. they should throw give a compile-time error
22:49:12FromDiscord<sOkam! 🫐> In reply to @polylokh_39446 "really? catchable exceptions?": exceptions use the gc
22:49:30FromDiscord<sOkam! 🫐> (edit) "same with exceptions. they should throw give a compile-time error ... " added "when used in gc:none, or using a function that raises exceptions"
22:49:57FromDiscord<Elegantbeef> None makes very little sense in Nim 2.0 really
22:50:47FromDiscord<sOkam! 🫐> that's why I reluctantly recommend --mm:arc. because --mm:none is literally broken without some serious effort on the user side to stop it from breaking
22:52:27FromDiscord<Elegantbeef> I'd say none never really made sense and was just there to reduce startup time of refc programs
22:52:48FromDiscord<Elegantbeef> But it also did allow Nim to compile to obscure targets without a heavy runtime
22:52:54FromDiscord<sOkam! 🫐> it does make sense when coming from C-land
22:53:01FromDiscord<Elegantbeef> I disagree
22:53:08FromDiscord<sOkam! 🫐> even if only for philosophical reasons
22:56:28FromDiscord<polylokh_39446> sent a code paste, see https://play.nim-lang.org/#pasty=DcFKTHVUWtXT
22:56:45FromDiscord<Elegantbeef> Cause it raises a defect
22:56:55FromDiscord<Elegantbeef> Defects are gc'd
22:57:03FromDiscord<Elegantbeef> Not that it matters since the program is to terminate after a defect
22:58:45FromDiscord<polylokh_39446> I get that, I don't see the problem. When isn't this a good outcome?
22:59:03FromDiscord<Elegantbeef> I assume sokam doesn't like the warning
22:59:20FromDiscord<polylokh_39446> ah, yeah there are a ton of warnings
23:04:15FromDiscord<sOkam! 🫐> I don't remember what happened, but there were severe problems when running code, that only ended up finding by accident
23:04:33FromDiscord<sOkam! 🫐> I just have a 🐠 brain and can't remember. but it wasn't just one or two things
23:21:47*MacDefender quit (Ping timeout: 268 seconds)
23:22:20*MacDefender joined #nim
23:57:59FromDiscord<Elegantbeef> Fish don't even have bad memories, you're worse than even a fish!