00:00:08 | FromDiscord | <sOkam!> ic |
00:00:32 | FromDiscord | <Elegantbeef> You also could've made a proc that returns a string without |
00:00:36 | FromDiscord | <Elegantbeef> `\n` btw ๐ |
00:01:21 | FromDiscord | <sOkam!> how? |
00:02:04 | FromDiscord | <Elegantbeef> sent a code paste, see https://play.nim-lang.org/#ix=4r1R |
00:02:25 | FromDiscord | <Elegantbeef> I think that should work |
00:02:32 | FromDiscord | <sOkam!> strutils has cstring stuff? didn't know that |
00:02:51 | FromDiscord | <Elegantbeef> sent a code paste, see https://play.nim-lang.org/#ix=4r1S |
00:02:51 | FromDiscord | <Elegantbeef> It doesnt have cstring stuff |
00:02:57 | FromDiscord | <Elegantbeef> It has string stuff, but you're doing it at compile time |
00:03:11 | FromDiscord | <Elegantbeef> So it does not need to be cstring since a compile time string can be converted to cstring without any issue |
00:03:11 | FromDiscord | <sOkam!> ah i see |
00:10:11 | * | ltriant_ joined #nim |
00:10:26 | arkanoid | I'm comparing nim vs rust helloworld binary size. Wow, Nim is so much smaller by default. Basically by default rust statically links its stdlib as binary blob, while nim basically skips that step completely relying only on libc |
00:10:49 | FromDiscord | <Elegantbeef> Even smaller with static musl! |
00:11:29 | arkanoid | I don't understand, why using static musl would be even smaller that default dynamic link to libc? |
00:11:45 | FromDiscord | <Elegantbeef> Dynamic linking is a lot of code |
00:12:05 | FromDiscord | <Elegantbeef> You can remove a lot of the linked code you do not actually need |
00:12:19 | * | ltriant quit (Ping timeout: 265 seconds) |
00:12:31 | arkanoid | really? Didn't know that. Is musl so small that it can compare to the overhead introduced by dynamic linking? |
00:12:50 | FromDiscord | <Elegantbeef> Well static linking only includes used symbols |
00:13:02 | FromDiscord | <Elegantbeef> Whereas dynamic linking has the mechanisms for loading in those symbols |
00:13:15 | * | Lord_Nightmare quit (Quit: ZNC - http://znc.in) |
00:14:01 | arkanoid | ok, so it depends on the amount of symbols (and their size) I'm actually using from musl |
00:14:36 | FromDiscord | <Elegantbeef> Also whether your dependencies depend on libc |
00:16:01 | * | Lord_Nightmare joined #nim |
00:16:50 | NimEventer | New thread by tmsa04: /usr/lib/nim/lib/system.nim, see https://forum.nim-lang.org/t/10012 |
00:17:38 | arkanoid | btw, if statically linking actually imports only the used symbols and not the whole blob, I can't understand why rust is creating such large binaries. With this cargo.toml https://termbin.com/zhzx the resulting rust hello world binary is ~277KB, the helloword in Nim with hopefully equivalent options (https://termbin.com/jk2c) is ~15KB |
00:17:48 | FromDiscord | <Elegantbeef> To be clear though rust also has musl support |
00:18:14 | FromDiscord | <Elegantbeef> Rust has it's own 'runtime' it brings around Nim uses C's |
00:20:44 | arkanoid | surprisingly, statically linking musl creates a larger binary than dynamic linking |
00:21:03 | FromDiscord | <Elegantbeef> I might have been misremembering ๐ |
00:21:04 | arkanoid | using https://termbin.com/q2kk |
00:21:24 | arkanoid | 26KB vs 15KB |
00:21:32 | FromDiscord | <Elegantbeef> Not using a config.nims that's a paddlin ๐ |
00:22:13 | arkanoid | yeah it started as a command line, then echoed into a sh, just being lazy |
00:24:34 | FromDiscord | <Elegantbeef> https://hookrace.net/blog/nim-binary-size/ yea following this gets a very small hello world ๐ |
00:24:37 | FromDiscord | <Elegantbeef> But it's all inane |
00:25:20 | arkanoid | Elegantbeef, yeah I'm reading that, but I'm interested in how to make it small without hacking too much |
00:26:02 | arkanoid | it's a subjective test |
00:27:28 | arkanoid | but the subjective result is that rust helloword is 10 to 15 times bigger than nim |
00:28:47 | FromDiscord | <Elegantbeef> Though how big is nim if you include libc ๐ |
00:29:32 | arkanoid | Elegantbeef, no, rust helloword binary loads libc dynamically (according to ldd) |
00:29:44 | arkanoid | as nim does |
00:30:28 | arkanoid | (when not statically linking musl) |
00:31:18 | FromDiscord | <Elegantbeef> Anywho i'll take Twains advice and stop making myself look like a fool |
00:31:34 | arkanoid | ? |
00:32:38 | FromDiscord | <Elegantbeef> Shit that's not twain |
00:33:06 | FromDiscord | <sOkam!> sent a code paste, see https://play.nim-lang.org/#ix=4r1V |
00:33:21 | * | derpydoo joined #nim |
00:33:34 | FromDiscord | <Elegantbeef> It's the "Better to be though a fool, than open your mouth and prove it" quote i was referencing |
00:33:34 | FromDiscord | <Elegantbeef> `static int` |
00:33:51 | FromDiscord | <sOkam!> but im passing a uint |
00:34:01 | FromDiscord | <Elegantbeef> Cool, now use an int |
00:34:20 | FromDiscord | <sOkam!> `types.nim(16, 16) Error: cannot generate code for: N` |
00:34:25 | arkanoid | Elegantbeef, ah! That Twains! |
00:34:37 | FromDiscord | <Elegantbeef> Why doth though hurt me |
00:34:46 | FromDiscord | <Elegantbeef> thou... |
00:35:04 | FromDiscord | <sOkam!> are you sure that is the issue? because i have tried 5 different combinations so far and i got some int/uint errors, but they don't show up anymore. and this new one does |
00:35:13 | FromDiscord | <Elegantbeef> Yes i'm sure |
00:35:18 | FromDiscord | <Elegantbeef> How are you instantiating this type? |
00:35:28 | FromDiscord | <sOkam!> wdym instantiating? |
00:35:35 | FromDiscord | <Elegantbeef> It's a generic |
00:35:43 | FromDiscord | <Elegantbeef> How are you using it |
00:35:58 | FromDiscord | <mprakhov> As I understood, NIM has something like shared_ptr for objects. Is it possible to understand if someone pointing to my object? (or get counter info) |
00:36:19 | FromDiscord | <sOkam!> sent a code paste, see https://play.nim-lang.org/#ix=4r1W |
00:36:54 | FromDiscord | <sOkam!> i was trying without the instancing, because all I need is the size to be calculated when its initialized, but i couldn't manage to work it out, so im passing this instead |
00:37:01 | FromDiscord | <Elegantbeef> Stop using it as a static typeclass |
00:37:12 | FromDiscord | <sOkam!> W and H are uints, so having to pass int is gonna be a big pain |
00:37:20 | FromDiscord | <sOkam!> wdym static typeclass? |
00:37:28 | FromDiscord | <Elegantbeef> `var scr = Screen[W H](255'u32)` |
00:37:28 | FromDiscord | <Elegantbeef> I mean you can use a uint |
00:37:41 | FromDiscord | <sOkam!> I just want a fixed-sized array inside an object, that's all |
00:37:45 | FromDiscord | <Elegantbeef> A generic without a parameter is a generic typeclass |
00:37:53 | FromDiscord | <sOkam!> W and H need to be stored inside |
00:37:56 | FromDiscord | <Elegantbeef> `Screen` is a generic typeclass |
00:38:42 | * | deadmarshal_ joined #nim |
00:38:50 | FromDiscord | <sOkam!> how do you initialize it then, and how do you declare the size of the array? |
00:40:46 | FromDiscord | <Elegantbeef> sent a code paste, see https://play.nim-lang.org/#ix=4r1X |
00:40:52 | FromDiscord | <Elegantbeef> Or if you want to be even cooler |
00:41:15 | FromDiscord | <Elegantbeef> sent a code paste, see https://play.nim-lang.org/#ix=4r1Y |
00:41:18 | arkanoid | Elegantbeef, statically linking musl makes helloworld larger that dynamically linking libc on rust, too |
00:41:31 | FromDiscord | <sOkam!> i was trying the WH at first, but it was crashing, so i stopped |
00:41:51 | FromDiscord | <Elegantbeef> Then you could do `proc init[W, H](_: typedesc[Screen[W, H]], val: uint32): Screen[W, H] = ...` |
00:42:18 | FromDiscord | <sOkam!> how do you store the w and h inside if you dont pass them? |
00:42:29 | FromDiscord | <sOkam!> they are meant to be passed for other contents |
00:42:34 | FromDiscord | <Elegantbeef> They're generic parameters that are bound ot the type |
00:42:38 | FromDiscord | <Elegantbeef> So you store them on the type |
00:42:48 | FromDiscord | <sOkam!> there is a subtype that needs them |
00:42:58 | FromDiscord | <sOkam!> how do i pass them from the generic bounds? |
00:43:04 | FromDiscord | <Elegantbeef> `.W` |
00:43:11 | FromDiscord | <sOkam!> oh, its a field? |
00:43:17 | FromDiscord | <sOkam!> didn't know that |
00:43:22 | FromDiscord | <Elegantbeef> Generic parameters can be accessed as a field |
00:43:28 | FromDiscord | <sOkam!> i had no clue |
00:44:19 | FromDiscord | <Elegantbeef> Works just fine |
00:44:21 | FromDiscord | <Elegantbeef> sent a code paste, see https://play.nim-lang.org/#ix=4r1Z |
00:46:13 | FromDiscord | <Elegantbeef> It's also much nicer cause it shows the type you're instantiating without `: MyType` and a sane init name |
00:46:24 | FromDiscord | <Elegantbeef> Fuck do i hate the `newSeq` and friends |
00:47:12 | FromDiscord | <Elegantbeef> `seq[int].new(len)` or `seq[int].newOfCap(len)` is just better minus the minor issue that they're generic procedures, but that could be changed easily |
00:52:09 | FromDiscord | <sOkam!> sent a code paste, see https://play.nim-lang.org/#ix=4r21 |
00:52:54 | FromDiscord | <Elegantbeef> You really do not listen do you |
00:52:54 | FromDiscord | <Elegantbeef> The parameter of an array needs to be an integer or a small ordinal |
00:53:21 | FromDiscord | <Elegantbeef> Wait nevermind i'm dumb |
00:53:26 | FromDiscord | <Elegantbeef> I'm thinking of when it's a type |
00:53:38 | FromDiscord | <sOkam!> i had them before with uint working |
00:53:42 | FromDiscord | <Elegantbeef> Stop doing `: Screen` on top of it |
00:53:51 | FromDiscord | <sOkam!> oh |
00:53:52 | FromDiscord | <sOkam!> tru |
00:54:08 | FromDiscord | <Elegantbeef> `Screen` is a generic typeclass and it does not work properly without a fix(hopefully coming soon to devel near you) |
00:54:08 | FromDiscord | <sOkam!> nvm, same err |
00:54:35 | FromDiscord | <Elegantbeef> You do not need `result = ....` |
00:55:05 | FromDiscord | <Elegantbeef> What other error does the compiler say |
00:55:11 | FromDiscord | <sOkam!> ok. but it crashes in the same spot |
00:55:19 | FromDiscord | <sOkam!> that only. its stuck in that |
00:55:28 | FromDiscord | <Elegantbeef> `4 other mismatching symbols have been suppressed; compile with --showAllMismatches:on to see them` |
00:56:15 | FromDiscord | <Elegantbeef> Also i swear you use `new` like this just to drive a metaphorical spike into my brain |
00:56:51 | FromDiscord | <sOkam!> sent a code paste, see https://play.nim-lang.org/#ix=4r25 |
00:57:07 | FromDiscord | <Elegantbeef> `512u64, 512u64` |
00:57:41 | FromDiscord | <sOkam!> In reply to @Elegantbeef "*Also i swear you": oh sry, i just use "init" to mean other things, and initializing types doesn't make sense compared to those |
00:58:25 | * | rmnmjw quit (Read error: Connection reset by peer) |
01:00:21 | FromDiscord | <Elegantbeef> Sorry `uint 512, uint 512` |
01:00:24 | FromDiscord | <Elegantbeef> That'll solve that |
01:00:29 | FromDiscord | <sOkam!> i think that was it |
01:00:30 | FromDiscord | <Elegantbeef> But this is why we do not use `uint` there |
01:00:55 | FromDiscord | <Elegantbeef> Think ringabout has a PR to resolve this somewhere |
01:02:07 | FromDiscord | <sOkam!> yey, that was it. it passed the errors ๐ฅณ |
01:09:51 | arkanoid | compiling helloword with statically linked musl with both nim and rust+build-std (that makes rust compile std) results in Rust 51.3KB vs Nim 26K, not bad |
01:11:58 | arkanoid | I'm quite surprised by this result. Nim approach seems so much better for generating small binaries than rust |
01:15:07 | FromDiscord | <etra> are both in release mode? otherwise the comparison is kinda useless bc iirc rust includes a lot of debug info |
01:18:18 | arkanoid | etra, sure, check the build conf for both. Rust: https://termbin.com/v5cla + https://termbin.com/w7kf . Nim: https://termbin.com/pgvw |
01:24:46 | arkanoid | nim devel produces binaries 72 bytes larger than stable |
01:27:09 | FromDiscord | <Elegantbeef> Marty we have to go back! |
01:40:54 | arkanoid | haha |
01:41:20 | arkanoid | btw, I've summarized my experiment bringing back a 3 years old thread on the forum https://forum.nim-lang.org/t/5914#65993 |
01:43:26 | FromDiscord | <etra> In reply to @arkanoid "<@329819426000076801>, sure, check the": oh nice! |
01:43:53 | FromDiscord | <etra> yesterday I did some experimentation with rust + zig cc for cross compilation using musl, it went pretty nice. |
01:44:11 | FromDiscord | <etra> I compiled from Aarch64 to armv6 |
01:44:18 | FromDiscord | <etra> I'm yet to try that in Nim (and Crystal) |
01:48:19 | FromDiscord | <Elegantbeef> Now now just compiling to windows is hard enough on crystal |
01:52:44 | arkanoid | what is crystal? |
01:53:08 | FromDiscord | <Elegantbeef> A system language not too dissimilar to Ruby |
01:53:28 | FromDiscord | <Elegantbeef> It's to Ruby what Nim is to Python afaik |
01:54:07 | arkanoid | never heard of. Most impressive feature? |
01:54:32 | arkanoid | ag: Rust=no gc, Nim=metaprogramming, ... |
01:54:34 | FromDiscord | <Elegantbeef> It doesnt run on windows even though has had a 1.0 release iirc |
01:54:39 | arkanoid | ahahaha |
01:55:08 | FromDiscord | <Elegantbeef> It's got a lot of language design flaws imo |
01:55:24 | FromDiscord | <Elegantbeef> Uses `new` for initialising structs and objects |
01:56:42 | arkanoid | I'm reading some crystal code right now ... pretty ugly |
01:56:54 | FromDiscord | <Elegantbeef> Just like ruby |
01:57:28 | arkanoid | exactly, exacly |
01:57:43 | FromDiscord | <Elegantbeef> It also pushes for OOP |
01:57:54 | FromDiscord | <Elegantbeef> Not nearly as bad as julia with it's multiple dispatch but nothing is that bad |
01:58:34 | arkanoid | every time I heard the world "ruby", this old classic pops into my mind. Always fun https://www.destroyallsoftware.com/talks/wat |
02:08:58 | arkanoid | never tried julia, but I do lots of python for science, and julia seemed like the natural evolution. Then I've found nimpy and Nim, and I've skipped julia completely |
02:13:53 | arkanoid | I recently did python > nim > gpgpu (webgl compute shader) > nim > python and it worked nice |
02:16:16 | FromDiscord | <etra> In reply to @Elegantbeef "It also pushes for": the only thing I cannot be totally convinced about nim is that I don't like how the style of 'encapsulation', I don't know the proper terms (language barriers are fun!) but ugh, there's something about how library works that I'm just not that happy |
02:16:31 | FromDiscord | <etra> (edit) removed "how" |
02:17:13 | FromDiscord | <etra> I believe Rust's traits are better than oop, but I'm yet to be comfortable with nim in that when it comes to design. It may be just because of my inexperience too |
02:17:18 | arkanoid | etra, you mean information hiding? how import/export work? |
02:17:30 | FromDiscord | <Elegantbeef> Generics + concepts + modules = eternal bliss |
02:17:50 | FromDiscord | <Elegantbeef> Rust traits and Nim generics are practically the same if you use concepts |
02:18:04 | FromDiscord | <etra> yeah I honestly liked what I saw with concepts when you mentioned it |
02:18:09 | FromDiscord | <etra> In reply to @arkanoid "<@329819426000076801>, you mean information": yes |
02:19:12 | arkanoid | etra, I kinda feel what you mean, but I blame nim tooling for that |
02:19:16 | FromDiscord | <Elegantbeef> I use concepts whenever I can, cause i'm weird like that ๐ |
02:20:02 | arkanoid | modules are nice, but the current state of nim tooling is not helping making them as comfortable as they should |
02:20:54 | FromDiscord | <etra> In reply to @Elegantbeef "I use concepts whenever": I mean, if you're mostly designing the stuff, Nim is nice, you can do pretty looking code, but the few times I had to use some third party, it's when I felt nim's library design doesn't fit with my head |
02:21:04 | FromDiscord | <etra> (edit) "do" => "write" |
02:22:12 | arkanoid | things I don't like in nim: tooling, lack of circular dependencies support, lack of c++ wrapping tools |
02:25:54 | arkanoid | what stress me the most about tooling, is that is extra difficult to find out why it is not working as intended, and I always fail to isolate the problem. I go from computer freezing from excessive ram use from nimsuggest, to nim check hanging, to ide services hanging from time to time or randomly not working. |
02:37:09 | onetwo3 | how do i convert an int64 to an int and vice versa |
02:54:06 | NimEventer | New thread by xioren: I asked chat-gpt to write a fft function in Nim, see https://forum.nim-lang.org/t/10013 |
03:09:57 | FromDiscord | <Iliketwertles> the (tri?)ality of mankind https://media.discordapp.net/attachments/371759389889003532/1086124234071355442/screenshot_2023-03-16-230522.png |
04:42:42 | NimEventer | New thread by Naterlarsen: How to Save Directory Listing into Variable., see https://forum.nim-lang.org/t/10014 |
04:49:21 | FromDiscord | <Yardanico> @onetwo3 if you still need help - you just "call" types to do type conversions, e.g. `int64(a)` if a is `int` will give you a 64-bit int version of a |
04:49:28 | onetwo3 | oh |
04:49:29 | onetwo3 | thanks |
04:49:42 | FromDiscord | <Yardanico> but be careful when converting to smaller types, it can lead to errors, so you should check the range if you're converting to a smaller type |
04:50:00 | FromDiscord | <Yardanico> !eval let a = 1235912912'i64; echo int16(a) |
04:50:07 | NimBot | /usercode/in.nim(1) inโต/playground/nim/lib/system/fatal.nim(54) sysFatalโตError: unhandled exception: value out of range: 1235912912 notin -32768 .. 32767 [RangeDefect] |
04:50:39 | FromDiscord | <Yardanico> and yeah, 'i64 is just shorthand suffix syntax to specify the type for number types |
04:51:01 | FromDiscord | <Yardanico> it's in https://nim-lang.org/docs/manual.html#lexical-analysis-numeric-literals (scroll it a bit or search for "The pre-defined type suffixes are") |
04:59:43 | * | xet7 quit (Remote host closed the connection) |
05:00:43 | * | xet7 joined #nim |
05:15:22 | * | rockcavera quit (Remote host closed the connection) |
05:21:04 | FromDiscord | <Gumbercules> In reply to @etra "I mean, if you're": is the objective really to write pretty looking code? |
05:21:52 | FromDiscord | <Gumbercules> and I'm curious what library design you're referring to, like nimble packages? |
05:23:45 | * | ltriant joined #nim |
05:24:06 | FromDiscord | <Gumbercules> ah I see the conversation above - nevermind |
05:25:06 | FromDiscord | <Gumbercules> I still don't understand the pretty looking code comment - that in my experience is never the goal of the code I write - to make it look pretty |
05:26:31 | * | ltriant_ quit (Ping timeout: 276 seconds) |
05:37:32 | * | arkurious quit (Quit: Leaving) |
06:00:18 | FromDiscord | <etra> In reply to @Gumbercules "I still don't understand": To me the fun factor is also relevant, otherwise I'd just stick with the classics since they kinda already do the job. And that includes pretty looking code |
06:01:47 | FromDiscord | <Gumbercules> Well of course, but that fun doesn't have much to do with pretty looking code. People have fun writing brainfuck |
06:06:11 | FromDiscord | <Gumbercules> I'm also not trying to convince you to use Nim ๐ I was just curious. It sounds like you like Rust and are enjoying it, so it sounds like you've found a decent fit. |
06:11:19 | NimEventer | New thread by Naterlarsen: Sending Directory Listing over Sockets Help., see https://forum.nim-lang.org/t/10015 |
06:13:21 | * | jerm joined #nim |
06:13:53 | * | jerm left #nim (#nim) |
06:26:28 | FromDiscord | <Yardanico> is that person writing a remote shell :P |
06:28:41 | FromDiscord | <ShalokShalom> In reply to @arkanoid "I recently did python": Python has Codon, that also works performant and on GPUs |
06:55:26 | FromDiscord | <qb> https://media.discordapp.net/attachments/371759389889003532/1086180978801782834/image.png |
06:55:29 | FromDiscord | <qb> chatgpt. Is that true? ๐ |
06:55:45 | FromDiscord | <Elegantbeef> Of course not |
06:56:02 | FromDiscord | <qb> Damnit KI! |
06:56:15 | FromDiscord | <Elegantbeef> `uint` is a `uintptr` |
06:56:16 | FromDiscord | <qb> (edit) "KI!" => "AI!" |
06:56:34 | FromDiscord | <Elegantbeef> Or atleast equivlent to it |
06:56:49 | FromDiscord | <Yardanico> In reply to @qb "Damnit AI!": https://forum.nim-lang.org/t/10013#65998 about nim in gpt |
06:57:10 | FromDiscord | <Yardanico> tldr: don't really try to use it for anything more complex than a hello world with nim, only bing chat might somewhat work because it has access to the web search results |
06:57:34 | FromDiscord | <Yardanico> or you can use it with chatgpt api if you make code that would fetch search results and feed it into the context |
06:59:02 | FromDiscord | <Elegantbeef> Maybe one day i'll actually use a AI service |
07:00:58 | FromDiscord | <Elegantbeef> I toyed with the supposed AI of neeva, but all it does it seems is copy and paste text from news articles then inaccurately attribute them |
07:01:15 | FromDiscord | <qb> Im a slave of technology. Even if the provided code is not usable. The direction it gives are very helpful |
07:03:29 | FromDiscord | <Elegantbeef> I'm obviously biased, but it does seem many people are using it as a tool to not have to walk through problems |
07:03:50 | FromDiscord | <Elegantbeef> Using it as a learning aid is an awful idea imo, ymmv |
07:17:53 | * | junaid_ joined #nim |
07:19:28 | * | Nick62 joined #nim |
07:23:51 | * | junaid_ quit (Quit: leaving) |
07:29:54 | * | PMunch joined #nim |
07:37:48 | * | Nick62 quit (Quit: Client closed) |
07:38:14 | * | nanxiao32 joined #nim |
07:41:22 | * | nanxiao32 quit (Client Quit) |
07:41:52 | * | nanxiao96 joined #nim |
07:43:41 | * | nanxiao96 quit (Client Quit) |
07:57:03 | FromDiscord | <Gumbercules> In reply to @ShalokShalom "Python has Codon, that": it also doesn't support all of Python's mdules |
07:57:06 | FromDiscord | <Gumbercules> (edit) "mdules" => "modules" |
07:57:54 | * | junaid_ joined #nim |
07:59:28 | * | rmt joined #nim |
08:03:05 | FromDiscord | <planetis> how do you fix cross compiling for windows on linux and all paths are replaced with back slashes, like: \home\ which errors? |
08:07:03 | * | junaid_ quit (Remote host closed the connection) |
08:09:11 | FromDiscord | <ShalokShalom> In reply to @Gumbercules "it also doesn't support": You cant have everything ๐คท๐ผโโ๏ธ ๐ |
08:09:18 | FromDiscord | <ShalokShalom> It supports a wide subset |
08:09:41 | FromDiscord | <ShalokShalom> You can at least refer to it from regular Python code |
08:12:32 | FromDiscord | <sOkam!> lets say I have `start = 0.0, incr = 0.1, limit = 1.0`โตhow is a float for loop made with them? Do I need to use a `while` instead? |
08:13:38 | FromDiscord | <Hourglass [She/Her]> In reply to @Elegantbeef "Maybe one day i'll": Llama is interesting if you want to check it out and can get its datasets |
08:13:48 | FromDiscord | <Hourglass [She/Her]> In reply to @Elegantbeef "Using it as a": Yeah agreed there |
08:14:53 | FromDiscord | <ieltan> It seems like using anonymous procs inside async procs result in hard-to-debug "yield only allowed inside iterators" compile error |
08:15:05 | FromDiscord | <ieltan> Or maybe it's the library I'm using? |
08:15:31 | FromDiscord | <sOkam!> In reply to @Elegantbeef "Using it as a": early ai tech, early level of teaching (aka introductory and beginner stuff)โตfor beginner level is stupid good, because you cannot spam a person with that many questions to fill your knowledge gaps |
08:16:04 | FromDiscord | <sOkam!> i say wait until the models are better, they will be able to teach more advanced stuff more accurately |
08:16:26 | FromDiscord | <ieltan> I have a ton of them, I may need to annotate with the async pragma, yield the result and test for failure? |
08:16:29 | FromDiscord | <ieltan> Sheesh |
08:19:49 | FromDiscord | <Gumbercules> It's interesting how everyone is conflating AI for LLMs |
08:20:01 | FromDiscord | <Gumbercules> remember several years ago when deepmind came out an CNNs were AI? |
08:20:03 | FromDiscord | <Yardanico> In reply to @sOkam! "lets say I have": to be safe you probably should check with some epsilon |
08:20:16 | FromDiscord | <Yardanico> In reply to @Gumbercules "remember several years ago": I mean, most people refer to what you refer as AI as AGI |
08:20:22 | FromDiscord | <Gumbercules> and before that when some other advent in deep / machine learning was referred to as AI |
08:20:26 | FromDiscord | <Yardanico> I agree that it's a buzzwordy way of defining it, but it's accepted by most |
08:20:36 | FromDiscord | <ieltan> In reply to @Elegantbeef "I'm obviously biased, but": Atm using AI to automatise problem solving isn't the best, you still need a human because ai isn't as thorough as you would be |
08:20:42 | FromDiscord | <Gumbercules> Yeah but it can mean literally anything related to ML / DL |
08:20:45 | FromDiscord | <Yardanico> yes |
08:20:51 | FromDiscord | <Yardanico> ML = AI nowdays basically |
08:20:56 | FromDiscord | <Yardanico> (edit) "nowdays" => "nowadays" |
08:21:07 | FromDiscord | <Yardanico> even the professionals call it that to keep up with the trends :P |
08:21:17 | FromDiscord | <Gumbercules> it's slightly annoying because when I think of AI I don't think of a large language model or a markov chain |
08:21:23 | FromDiscord | <Yardanico> although that's more for #offtopic |
08:21:23 | FromDiscord | <Gumbercules> or some other generative algorithm |
08:21:25 | FromDiscord | <sOkam!> In reply to @Yardanico "to be safe you": sure, lets add the 4th value. now.. how do you do that? |
08:21:26 | FromDiscord | <ieltan> In reply to @Elegantbeef "Using it as a": It's kind of exciting. Have you read about SCP-5094? |
08:22:33 | FromDiscord | <Gumbercules> Not excited to have my kid taught by AI |
08:22:35 | FromDiscord | <Gumbercules> thanks though |
08:23:12 | FromDiscord | <Elegantbeef> Who cares if their kid is taught by AI, it's not going to be interested in learning from AI |
08:23:16 | FromDiscord | <ieltan> It's probably never gonna be a reality that AI will manage to make kids love learning but y |
08:23:26 | FromDiscord | <Elegantbeef> Maybe i'm just too much of a humanist |
08:23:41 | FromDiscord | <Yardanico> In reply to @sOkam! "sure, lets add the": mm, actually I'm not sure |
08:23:53 | FromDiscord | <Gumbercules> I would care if someone tried to have AI teach my kid |
08:23:55 | FromDiscord | <ieltan> I try to see the good and the useful in everything |
08:23:55 | FromDiscord | <Yardanico> with floating point inaccuracy start < limit might not give you the desired amount of iterations |
08:24:03 | FromDiscord | <Yardanico> maybe beef knows |
08:24:06 | FromDiscord | <Yardanico> he's smart |
08:24:08 | FromDiscord | <Gumbercules> just like I would have issue with just any teacher teaching my kid |
08:24:35 | FromDiscord | <ieltan> In reply to @Gumbercules "just like I would": :p |
08:24:49 | * | Notxor joined #nim |
08:25:37 | FromDiscord | <ieltan> A few years ago I would hear things like "I would be very concerned if my computer was running AI generated code, just a disaster waiting to happen" |
08:25:47 | FromDiscord | <ieltan> Look where we are now |
08:26:01 | FromDiscord | <Elegantbeef> sent a code paste, see https://play.nim-lang.org/#ix=4r3A |
08:26:03 | FromDiscord | <Elegantbeef> That's the most sane variation imo |
08:26:04 | FromDiscord | <Gumbercules> My computer still isn't running AI generated code - but that's not the issue |
08:26:20 | FromDiscord | <Yardanico> beef, would that always ensure that the iteration count is the same? i fear the rounding issues |
08:26:29 | FromDiscord | <Yardanico> actually, maybe just use decimal for this |
08:26:40 | FromDiscord | <Elegantbeef> I mean if you want 10 iterations use an it |
08:26:45 | FromDiscord | <Gumbercules> anywho - as yard said, #offtopic would be a better place for this convo |
08:27:02 | FromDiscord | <Elegantbeef> an int\ |
08:27:07 | FromDiscord | <Yardanico> :) |
08:27:13 | FromDiscord | <ieltan> Yeah my point was that perspective is bound to change after a while, AI will probably be as disruptive as the Internet was so I try to be a little optimistic about it |
08:27:22 | FromDiscord | <ieltan> But it's not all roses and flowers for sure |
08:27:37 | FromDiscord | <Elegantbeef> Also speaking of floats, yardanico you have defects in aciigraph! ๐ |
08:27:55 | FromDiscord | <Yardanico> i know but how come everyone talks about it but no one fixes it |
08:28:05 | FromDiscord | <Yardanico> ~open-source~ |
08:28:17 | FromDiscord | <Yardanico> anyway lets see if I can fix it, should be easy |
08:28:30 | FromDiscord | <Elegantbeef> Well i'd fix it if I didnt feel like someone that spent quite some time on a forum post should |
08:28:35 | FromDiscord | <Yardanico> lol |
08:29:04 | FromDiscord | <planetis> to fix other's libs is not an option of course ๐ "" |
08:29:13 | FromDiscord | <planetis> (edit) removed """" |
08:29:44 | FromDiscord | <planetis> can't make a quote in discord it seems |
08:29:45 | FromDiscord | <Elegantbeef> Yea that got me |
08:29:59 | FromDiscord | <Yardanico> you can |
08:29:59 | FromDiscord | <Elegantbeef> Excuse me whilst i remove any contribution to any project I dont own |
08:30:01 | FromDiscord | <Yardanico> > hello |
08:30:02 | FromDiscord | <Elegantbeef> It's a `> your message here` |
08:30:06 | FromDiscord | <Elegantbeef> > Planetis is a dork |
08:30:47 | FromDiscord | <Yardanico> ah its `inc precision, int(abs(logMaximum) - 1.0)` |
08:31:20 | FromDiscord | <Yardanico> should i just special-case and return early ๐ค |
08:32:04 | FromDiscord | <Elegantbeef> Is this the collection of 0s or something else? |
08:32:21 | FromDiscord | <planetis> In reply to @Elegantbeef "It's a `> your": oh I confused it with rst |
08:32:24 | FromDiscord | <planetis> thanks |
08:32:25 | FromDiscord | <Yardanico> yeah I think it only happens if all values are 0s |
08:32:29 | FromDiscord | <Yardanico> niche usecase |
08:32:45 | FromDiscord | <Elegantbeef> Pointless use case |
08:33:03 | FromDiscord | <Elegantbeef> What's the point if all values are the same anyway "Oh nice it's a straight line" ๐ |
08:33:24 | FromDiscord | <Yardanico> yeah inv just said it's either all 0s or if you pass an empty seq |
08:33:49 | FromDiscord | <Elegantbeef> I wonder if there are other defects they didnt report |
08:34:02 | FromDiscord | <Yardanico> I just asked him in the telegram chat |
08:34:07 | FromDiscord | <Yardanico> only those two |
08:34:26 | FromDiscord | <Elegantbeef> Oh they're one of them |
08:34:50 | FromDiscord | <Yardanico> ๐ฑ who?! |
08:35:26 | FromDiscord | <Elegantbeef> Those telegram users |
08:35:55 | FromDiscord | <Elegantbeef> Somewhat related, but i'm glad i'm not the only one that didnt have tags for my repos |
08:36:16 | FromDiscord | <Yardanico> i do have tags for some of my repos |
08:36:38 | FromDiscord | <Elegantbeef> Yea i had none for any cause i thought that was the point of the version file in Nimble |
08:36:44 | FromDiscord | <Yardanico> ahh you mean nimble |
08:36:44 | FromDiscord | <Elegantbeef> Lo and behold i was mistaken |
08:36:48 | FromDiscord | <Yardanico> i thought you meant github tags |
08:36:57 | FromDiscord | <Elegantbeef> I mean git tags yea |
08:38:20 | FromDiscord | <Hourglass [She/Her]> In reply to @ieltan "It's probably never gonna": Honestly the issue is more that education isn't fun and that makes kids not want to learn it |
08:39:00 | arkanoid | ShalokShalom: sure I know python has everything you can think of. The point here is moving tasks to Nim |
08:39:38 | FromDiscord | <Elegantbeef> Don't worry yardanico, elcritch also doesnt have tagged releases of his libraries |
08:40:05 | FromDiscord | <Yardanico> tagged releases are for the weak |
08:40:48 | FromDiscord | <Elegantbeef> I mean it's usable semver with nimble so I really wanted them when I learned they were needed ๐ |
08:41:06 | FromDiscord | <Elegantbeef> So now I have a have look at some libraries to see who's missing them |
08:41:55 | * | junaid_ joined #nim |
08:43:08 | FromDiscord | <ShalokShalom> In reply to @arkanoid "<@208199869301522432>: sure I know": Ah, I see. |
08:51:33 | FromDiscord | <ieltan> sent a code paste, see https://play.nim-lang.org/#ix=4r3F |
08:51:40 | FromDiscord | <ieltan> i'd like it if it could also be async |
08:52:35 | FromDiscord | <ieltan> since `someRole` is inside an async proc i suspect it is what prevents me from compiling because it's not async |
08:52:43 | * | PMunch hides under a rock so ElegantBeef won't see my repos missing tags |
08:52:56 | FromDiscord | <Elegantbeef> Lol |
08:52:59 | PMunch | Wait, do you see those on Discord? |
08:53:03 | PMunch | Ah I guess you do :P |
08:53:14 | FromDiscord | <Elegantbeef> `graffiti ./myRepo.nimble` it's only a command away! |
08:53:49 | PMunch | Aww, they just come through as normal messages |
08:53:50 | PMunch | Boring |
08:54:02 | PMunch | They should at least append your name.. |
08:54:06 | FromDiscord | <Elegantbeef> Though i made that specifically for my own religious ticking of the nimble file after every change |
08:54:15 | FromDiscord | <Elegantbeef> Matrix supports those, but i do not recall the syntax |
08:54:39 | FromDiscord | <Yardanico> In reply to @ieltan "Is there syntax sugar": you don't need a proc here though, do you |
08:54:51 | FromDiscord | <Yardanico> you can just use toSeq + filterIt |
08:55:16 | FromDiscord | <Yardanico> let someRole = toSeq(s.cache.guilds[guildId].roles).filterIt(it.name == someRoleName)[0] |
08:55:19 | FromDiscord | <Yardanico> something like this should work |
08:55:26 | FromDiscord | <Yardanico> `import std/sequtils` of course |
08:56:32 | FromDiscord | <ieltan> In reply to @Yardanico "you don't need a": Really ? |
08:56:34 | FromDiscord | <Yardanico> yes? |
08:56:39 | FromDiscord | <ieltan> In reply to @Yardanico "let someRole = toSeq(s.cache.guilds[guildId].roles)": oh lol |
08:56:49 | FromDiscord | <ieltan> I always forget i can just do this |
08:56:49 | FromDiscord | <Yardanico> actually what type is .roles |
08:56:53 | FromDiscord | <Yardanico> if it's a seq you don't even need toSeq |
08:56:54 | FromDiscord | <Elegantbeef> The only case you'd need a proc is if you wanted to thunk it |
08:57:00 | FromDiscord | <Yardanico> let someRole = s.cache.guilds[guildId].roles.filterIt(it.name == someRoleName)[0] |
08:57:26 | FromDiscord | <ieltan> `roles` is of type `Table[string, Role]` |
08:57:39 | FromDiscord | <Yardanico> oh |
08:57:50 | FromDiscord | <Yardanico> wait but you don't need the key anyway |
08:57:52 | FromDiscord | <ieltan> yeah i forgot for a sec |
08:57:59 | FromDiscord | <Yardanico> let someRole = toSeq(s.cache.guilds[guildId].roles.keys).filterIt(it.name == someRoleName)[0] |
08:58:01 | FromDiscord | <ieltan> In reply to @Yardanico "wait but you don't": nope |
08:58:05 | FromDiscord | <Yardanico> sorry values |
08:58:08 | FromDiscord | <ieltan> just the role object |
08:58:20 | FromDiscord | <Yardanico> let someRole = toSeq(s.cache.guilds[guildId].roles.values).filterIt(it.name == someRoleName)[0] |
08:58:22 | FromDiscord | <ieltan> In reply to @Yardanico "sorry values": the value is the role object that i need to use somewhere |
08:58:25 | FromDiscord | <Yardanico> should be final and work |
08:58:42 | FromDiscord | <ieltan> In reply to @Yardanico "let someRole = toSeq(s.cache.guilds[guildId].roles.": alright lemme try this |
08:58:43 | FromDiscord | <ieltan> thanks |
08:58:59 | FromDiscord | <Elegantbeef> Yardanico is trying to kill me with the most amount of allocations on a single line ๐ |
08:59:16 | FromDiscord | <Yardanico> shhh |
08:59:34 | FromDiscord | <Yardanico> you think collect is better here? |
08:59:38 | FromDiscord | <Yardanico> i mean from allocations it will be |
09:00:39 | FromDiscord | <Elegantbeef> Yea it'd remove the one sequence |
09:01:39 | * | junaid_ quit (Remote host closed the connection) |
09:01:45 | FromDiscord | <ieltan> seems like that does the trick |
09:02:02 | FromDiscord | <ieltan> but i'll need to do that across my messe pile of steaming code |
09:02:02 | FromDiscord | <Elegantbeef> need a `findIt` |
09:02:05 | FromDiscord | <Yardanico> yeah |
09:02:06 | FromDiscord | <Yardanico> sent a code paste, see https://play.nim-lang.org/#ix=4r3L |
09:02:07 | FromDiscord | <ieltan> (edit) "messe" => "messy" |
09:02:26 | FromDiscord | <Yardanico> In reply to @ieltan "but i'll need to": abstract it away into a proc/template? |
09:02:37 | FromDiscord | <ieltan> In reply to @Elegantbeef "Yardanico is trying to": is the anonymous proc better in this aspect ? |
09:02:38 | FromDiscord | <Yardanico> also maybe the discord api has a better way of doing what you need it to do |
09:02:47 | FromDiscord | <Elegantbeef> No the anonymous proc is just a thunk |
09:02:53 | FromDiscord | <Yardanico> the code I sent should be good beef? |
09:02:54 | FromDiscord | <Elegantbeef> It only delays the allocations |
09:03:01 | FromDiscord | <ieltan> alright then |
09:03:09 | FromDiscord | <Yardanico> well of course the best would be |
09:03:14 | FromDiscord | <Elegantbeef> Since when was i the arbiter of good code |
09:04:20 | FromDiscord | <Yardanico> only tables |
09:04:26 | FromDiscord | <Yardanico> sent a code paste, see https://play.nim-lang.org/#ix=4r3M |
09:04:31 | FromDiscord | <Yardanico> can you replace x.B with something that doesn't depend on the impl? |
09:05:13 | FromDiscord | <Elegantbeef> `x.items` |
09:05:18 | FromDiscord | <Yardanico> ahh right |
09:05:22 | FromDiscord | <Yardanico> iterators have the type of a single value |
09:05:29 | FromDiscord | <Yardanico> that nim language is interesting i must say |
09:05:45 | FromDiscord | <Yardanico> sent a code paste, see https://paste.rs/lWg |
09:05:56 | FromDiscord | <Elegantbeef> That's still tables specific ๐ |
09:06:08 | FromDiscord | <ieltan> In reply to @Yardanico "also maybe the discord": Not to my knowledge, since i want to get a specific Role without having its ID ahead of time, i need to get a list of Role and find the one i want, no way around that. dimscord has a `getGuildRoles` the "find the relevant" role part is still up to the programmer |
09:06:51 | FromDiscord | <ieltan> (edit) "In reply to @Yardanico "also maybe the discord": Not to my knowledge, since i want to get a specific Role without having its ID ahead of time, i need to get a list of Role and find the one i want, no way around that. dimscord has a `getGuildRoles` ... the" added "but" |
09:07:48 | FromDiscord | <ieltan> In reply to @Yardanico "abstract it away into": I can do that later when my code works :p |
09:08:22 | FromDiscord | <Elegantbeef> sent a code paste, see https://play.nim-lang.org/#ix=4r3N |
09:08:32 | FromDiscord | <ieltan> I have already done a tonne of dedup/code reuse, it's about time the damn thing compiles already |
09:08:47 | FromDiscord | <Yardanico> damn beef with 1 space indent |
09:08:56 | FromDiscord | <Elegantbeef> Whoopsie |
09:09:13 | FromDiscord | <Elegantbeef> It's 3am i couldnt tell i was 1 spaced in on the playground |
09:09:25 | FromDiscord | <Yardanico> does that code work for tables though |
09:09:36 | FromDiscord | <ieltan> I have 4 space indent, it was configured like that when i started nim and i regret not setting it to 2 |
09:09:39 | FromDiscord | <Elegantbeef> No it doesnt have items so write an items iterator aswell |
09:09:44 | FromDiscord | <Yardanico> lol |
09:09:50 | FromDiscord | <Elegantbeef> Actually it does work for tables |
09:09:53 | FromDiscord | <Yardanico> In reply to @ieltan "I have 4 space": yeah ever since I started using Nim i've been using 2 space indent everywher |
09:09:56 | FromDiscord | <Yardanico> (edit) "everywher" => "everywhere" |
09:10:09 | FromDiscord | <Elegantbeef> you do `table.values.findIt(it.name == "jinglestuff")` |
09:10:35 | FromDiscord | <Elegantbeef> We could do `iter: iterable[T]` but that means you have to do `[10, 20, 30].items` |
09:10:47 | FromDiscord | <Yardanico> Error: invalid type: 'typedesc[int]' for var hmm |
09:10:51 | FromDiscord | <Elegantbeef> Not that any one would use findit on a literal, but i just mean on array/seq but i didnt type it cause why not |
09:11:24 | FromDiscord | <Elegantbeef> Some numpty wrote ` = type` |
09:11:39 | FromDiscord | <Yardanico> yeah it works |
09:11:46 | FromDiscord | <Yardanico> now PR it to sequtils lol |
09:13:31 | FromDiscord | <Elegantbeef> Feel free to it's public domain code! |
09:15:34 | FromDiscord | <ieltan> sent a code paste, see https://play.nim-lang.org/#ix=4r3Q |
09:15:54 | FromDiscord | <Yardanico> uh, collect isn't exactly a cod block, so I don't think the let one will compile, but I might be wrong |
09:18:03 | * | jmdaemon quit (Ping timeout: 255 seconds) |
09:19:05 | FromDiscord | <ieltan> In reply to @Yardanico "uh, collect isn't exactly": https://nim-lang.org/docs/sugar.html#collect.m%2Cuntyped |
09:19:15 | FromDiscord | <Yardanico> not what i meant, lemme check |
09:19:45 | FromDiscord | <Yardanico> yeah you're right it works |
09:21:31 | FromDiscord | <ieltan> It does works but it yields a sequence |
09:22:01 | FromDiscord | <Yardanico> In reply to @ieltan "It does works but": yes I showed you to use [0] |
09:22:21 | FromDiscord | <ieltan> I know and i did |
09:22:27 | FromDiscord | <ieltan> thansk though |
09:22:31 | FromDiscord | <ieltan> (edit) "thansk" => "thanks" |
09:28:25 | PMunch | Hmm, I'd like to convert a list like the first one here to the tree structure seen below. Any clever ideas? http://ix.io/4r3T/ |
09:33:57 | PMunch | Is it just me or has Google search for Github stuff gotten worse? |
09:34:10 | PMunch | I Googled "Nim fungus elegantbeef" and nothing turns up.. |
09:34:14 | FromDiscord | <Yardanico> it wasn't perfect to begin with, and now github search itself is getting worse :( |
09:39:03 | PMunch | @Elegantbeef, why isn't fungus is Nimble? |
09:39:41 | PMunch | And by the way, why do I have to specify `tuple` for each branch? Can I do anything else? |
09:39:52 | FromDiscord | <Yardanico> well uh @PMunch bing chat did your task |
09:39:59 | FromDiscord | <Yardanico> with output like this https://media.discordapp.net/attachments/371759389889003532/1086222390922588251/image.png |
09:40:16 | FromDiscord | <Yardanico> sent a code paste, see https://play.nim-lang.org/#ix=4r3Z |
09:41:05 | PMunch | Well that is exactly what I don't want.. |
09:41:06 | FromDiscord | <Yardanico> doesn't look to be too efficient of course, but it does make an actual hierarchical tree |
09:41:24 | FromDiscord | <Yardanico> you mean you want to make it without refs? |
09:41:27 | PMunch | I only want the longest common paths |
09:41:48 | PMunch | I'm just going to write my own |
09:42:17 | PMunch | My usecase is consuming a JSON file with a certain format and generating a GtkTreeModel anyways, so good luck with that Bing.. |
09:42:46 | FromDiscord | <Yardanico> haha |
09:44:38 | PMunch | Oh and @Elegantbeef why does it require Nim >= 1.9.1? |
09:45:08 | FromDiscord | <Yardanico> maybe he just nimble init'd and it filled his nim version |
09:45:16 | PMunch | That's what I'm suspecting |
09:46:43 | FromDiscord | <Yardanico> haha https://media.discordapp.net/attachments/371759389889003532/1086224082674131034/image.png |
09:46:51 | FromDiscord | <Yardanico> certainly nimble init'd :) |
09:47:34 | PMunch | Haha :P |
09:52:42 | FromDiscord | <planetis> a bit weird beef didn't just go with `Rectangle(x, y, w, h: int)` syntax but maybe there was a good reason? |
09:53:47 | PMunch | Yeah that's what I'm curious about |
09:54:08 | PMunch | Maybe he was just being lazy and didn't care to parse the Nim syntax tree |
09:56:32 | FromDiscord | <planetis> sent a code paste, see https://play.nim-lang.org/#ix=4r43 |
09:56:54 | PMunch | Ooh, that would indeed be nice |
09:58:52 | PMunch | It general it would be nice to have more flexibility with macros in type sections |
10:26:42 | * | Notxor quit (Quit: Leaving) |
11:06:59 | FromDiscord | <jmgomez> In reply to @planetis "it would have been": That and proper working PM is all I would ask for Nim 2.5 lol |
11:50:11 | PMunch | PM? |
11:54:29 | PMunch | @Yardanico, ended up with something like this: http://ix.io/4r4u/nim |
11:54:40 | FromDiscord | <Yardanico> nice |
11:55:14 | FromDiscord | <jmgomez> pattern matching |
12:04:46 | FromDiscord | <planetis> Absolutely, that `of Value(let x, var y)` synatx would look sweet imo. |
12:11:01 | FromDiscord | <planetis> sent a code paste, see https://play.nim-lang.org/#ix=4r4w |
12:12:04 | FromDiscord | <planetis> beef please |
12:14:58 | FromDiscord | <planetis> but I can't get a macro in an enum typedef... |
12:31:04 | PMunch | Problem is you can't return two typedefs.. |
12:32:46 | PMunch | Would be great if we could return a seq[NimNode] to have them injected into the parent container |
13:27:06 | PMunch | Hmm, I'm unable to write a dollar procedure for an adtEnum.. |
13:30:40 | * | azimut quit (Remote host closed the connection) |
13:31:04 | * | azimut joined #nim |
13:49:57 | FromDiscord | <MartinSkou> does pythons "class variables" exist in Nim? |
13:51:44 | PMunch | Nice algorithm is working well: http://ix.io/4r4O/ |
13:51:47 | PMunch | @MartinSkou, yes |
13:52:05 | PMunch | At least I believe that is what we concluded with last time someone asked |
13:52:13 | * | jmdaemon joined #nim |
13:53:48 | FromDiscord | <MartinSkou> hint to how? |
13:55:22 | PMunch | Well, don't remember of the top of my head |
13:55:28 | PMunch | Why do you think you need them? |
13:56:11 | PMunch | ie what are you trying to achieve? Many people try to bend Nim into the shape of a language they're familiar with and don't end up very happy with the result |
13:58:16 | * | jmdaemon quit (Ping timeout: 250 seconds) |
13:59:43 | FromDiscord | <MartinSkou> i have a type, fx page, and need some meta dato on the type like requiredfields, title, description. in python/django i used class variables to something like this, so you are right, took it from what i knew. |
14:01:39 | PMunch | Hmm, not sure if I understand what you're trying to do. fxPage is a type, and you need it to have metadata? And somehow constants don't suffice? |
14:01:39 | * | rockcavera joined #nim |
14:04:04 | FromDiscord | <MartinSkou> fx you have different type: page, domain, language, etc. and you want to pass one of these type to a function which buildes an editor for the type, based on the field in the type and some extra metadata (like description and required fields). |
14:04:15 | * | junaid_ joined #nim |
14:07:32 | PMunch | Okay, so you have some types, Page, Domain, and Language. And each of these have a buildEditor procedure defined for them. So why isn't buildEditor just using different values for each of them? Or do you have a buildEditor which takes either of these three? |
14:10:42 | FromDiscord | <MartinSkou> yes, somehow buildEditor should be able to handle any of the types. |
14:12:09 | PMunch | Well there are a couple ways of doing that, variance objects or methods and inheritance |
14:12:22 | PMunch | Not quite sure which problem a class variable solves though |
14:12:51 | PMunch | Is it just a syntactic thing? Performance thing? |
14:13:29 | FromDiscord | <MartinSkou> it probertly just syntactic, will find another way. thanks. |
14:20:54 | * | junaid_ quit (Remote host closed the connection) |
14:20:58 | FromDiscord | <firasuke> is there a better way to write this?โต`(stringOne & stringTwo & stringThree).strip()`? |
14:21:03 | FromDiscord | <firasuke> (edit) "stringThree).strip()`?" => "stringThree).strip()`" |
14:21:30 | FromDiscord | <firasuke> (edit) "this?โต`(stringOne" => "this? (concatenate a bunch of strings and trim whitespace from the resulting string)โต`(stringOne" |
14:21:53 | FromDiscord | <firasuke> (edit) "is there a better way to write this? (concatenate a bunch of strings and trim whitespace ... from" added "in the end" |
14:22:50 | FromDiscord | <enthus1ast> sent a long message, see http://ix.io/4r4X |
14:23:22 | PMunch | You could also use an array with join and strip |
14:24:38 | FromDiscord | <firasuke> oh ok thanks, but are these alternative solutions better as in faster / require less resource usage? |
14:25:37 | FromDiscord | <enthus1ast> you could benchmark (for example with benchy) what is faster for you'r usecase |
14:26:34 | FromDiscord | <enthus1ast> if i have more complex string interpolation, i also use nimja |
14:26:51 | FromDiscord | <firasuke> I see |
14:27:09 | FromDiscord | <firasuke> also for downloading multiple files using async/threads, what is the standard way to do it in nim? |
14:27:09 | FromDiscord | <enthus1ast> or if you need to specify the format string on runtime, i build formatja (which is based on the nimja lexer) |
14:28:19 | FromDiscord | <enthus1ast> idk what to consider standard, but i would use the usual suspects\: httpclient or puppy |
14:28:22 | FromDiscord | <firasuke> and is there such a thing as default values for proc parameters? |
14:28:26 | FromDiscord | <firasuke> In reply to @enthus1ast "idk what to consider": ok thanks |
14:29:03 | FromDiscord | <enthus1ast> the benefit of puppy is that it can do ssl without the need to ship it with your application, since it used the os for this |
14:29:39 | FromDiscord | <firasuke> In reply to @enthus1ast "the benefit of puppy": oh cool |
14:29:59 | FromDiscord | <enthus1ast> but its sync not asnc |
14:30:00 | FromDiscord | <enthus1ast> async |
14:30:36 | FromDiscord | <enthus1ast> ship it should be link it i guess |
14:43:46 | * | PMunch quit (Quit: Leaving) |
14:49:46 | * | jmdaemon joined #nim |
15:06:19 | * | jmdaemon quit (Ping timeout: 248 seconds) |
15:29:08 | FromDiscord | <Phil> sent a code paste, see https://play.nim-lang.org/#ix=4r5k |
15:29:18 | FromDiscord | <firasuke> cool thanks |
15:48:29 | * | jmdaemon joined #nim |
16:02:26 | FromDiscord | <Ayy Lmao> How do I go about debugging a dll that is hosted in another program? I am making an audio plugin and currently when something goes wrong it just silently crashes the program. |
16:05:17 | * | arkurious joined #nim |
16:05:57 | FromDiscord | <Gumbercules> Make sure it's compiled with debug symbols and use a debugger. |
16:06:41 | FromDiscord | <Gumbercules> It should be as simple as that. |
16:08:29 | FromDiscord | <Ayy Lmao> Unfortunately I am a pleb who has no experience with using a debugger. Do you have any advice on that? |
16:08:51 | FromDiscord | <Ayy Lmao> Is there a specific one I should look into for nim? |
16:11:03 | FromDiscord | <Gumbercules> It depends what compiler you're using. For mingw or gcc you'd use GDB. For clang you'd use LLDB and for msvc you'd use windbg or one of the other plethora of windows debuggers out there. |
16:13:04 | FromDiscord | <Gumbercules> GDB and LLDB don't have a graphical frontend so you'd need to install one. You can also configure them to integrate with certain editors, like VS Code for instance. |
16:13:28 | FromDiscord | <Gumbercules> I believe there is some blog post about debugging Nim with gdb |
16:13:48 | FromDiscord | <Gumbercules> https://nim-lang.org/blog/2017/10/02/documenting-profiling-and-debugging-nim-code.html#debugging-nim-code |
16:14:19 | FromDiscord | <Ayy Lmao> I am using gcc at the moment so I guess I'll look into GDB. Ideally I would be able to run a build script that builds the .dll, moves it to the proper location, and then debugs it inside VS Code. |
16:14:33 | FromDiscord | <Ayy Lmao> I'll check out that link, thanks |
16:32:36 | NimEventer | New thread by sramsay: Negative number as program argument, see https://forum.nim-lang.org/t/10017 |
16:34:16 | FromDiscord | <caravaggio> If a template doesn't have an untyped argument or return |
16:34:24 | FromDiscord | <caravaggio> It just acts like a Proc right? |
16:34:38 | FromDiscord | <Gumbercules> No |
16:34:48 | FromDiscord | <Gumbercules> It is code substitution |
16:35:52 | FromDiscord | <Gumbercules> Similar to a macro in C |
16:36:39 | FromDiscord | <caravaggio> In reply to @Gumbercules "Similar to a macro": Hmmm I thought the code substitution only works when there's an untyped argument |
16:36:42 | FromDiscord | <caravaggio> No? |
16:37:26 | FromDiscord | <Gumbercules> No... It would be similar to a C macro with no arguments. |
16:37:47 | FromDiscord | <Gumbercules> If you want to find out you could write a program and inspect the generated C code |
16:38:09 | FromDiscord | <Gumbercules> But I guess the better question is why do you want to use a template? |
16:39:22 | * | sagax joined #nim |
16:39:40 | FromDiscord | <caravaggio> In reply to @Gumbercules "But I guess the": I don't, just reading some code bases and am confused why template was being used without untyped |
16:39:52 | FromDiscord | <caravaggio> Trying to get better at nin |
16:40:36 | FromDiscord | <Gumbercules> https://nim-lang.org/docs/tut2.html#templates |
16:40:49 | FromDiscord | <Gumbercules> Probably the best place to start |
16:41:01 | FromDiscord | <caravaggio> Read that section, doesn't give an example without untyped |
16:41:32 | FromDiscord | <Gumbercules> Yes it does, look at the lifting proca example |
16:41:38 | FromDiscord | <Gumbercules> (edit) "proca" => "procs" |
16:42:17 | FromDiscord | <caravaggio> Oh wow ur right, thanks |
16:43:55 | * | jmdaemon quit (Ping timeout: 248 seconds) |
16:46:01 | FromDiscord | <Gumbercules> Untyped simply means the temple is not going to know or care about the type of the argument passed to it - so at compile time, which is when the template executes, this information will not be available in the scope of the template |
16:46:19 | * | jmdaemon joined #nim |
16:46:19 | FromDiscord | <Gumbercules> The omission of typed / untyped automatically infera untyped |
16:46:27 | FromDiscord | <Gumbercules> (edit) "infera" => "infers" |
16:47:35 | FromDiscord | <Gumbercules> But the reason it's not like a proc is because templates are simply code substitution, not an invocation of a procedure, not to mention they are executed at compile time and not runtime |
16:48:44 | FromDiscord | <Gumbercules> If you want a procedure to be executed at compile time you can use the compiletime pragma or invoke it from within a static block |
16:49:33 | FromDiscord | <Gumbercules> (edit) "If you want a procedure to be executed at compile time you can use the compiletime pragma ... or" added "when declaring its signature" |
16:52:59 | * | jmdaemon quit (Ping timeout: 248 seconds) |
16:56:01 | FromDiscord | <BobBBob> sent a code paste, see https://play.nim-lang.org/#ix=4r5J |
16:56:02 | FromDiscord | <BobBBob> chatgpt is useless for nim haha |
17:01:14 | FromDiscord | <mk-fg> Something like `const v = ObjectName(name: astToStr(v), val: 0.01)` maybe |
17:02:06 | FromDiscord | <mk-fg> (edit) "v" => "v1" | "astToStr(v)," => "astToStr(v1)," | "0.01)`" => "v2)`" |
17:05:57 | FromDiscord | <Phil> I don't quite understand why that isn't simply a proc |
17:06:09 | FromDiscord | <Rika> because it creates a const? |
17:06:15 | FromDiscord | <firasuke> how do you download multiple files? using async httpclient and downloadFile? |
17:06:19 | FromDiscord | <BobBBob> In reply to @mk-fg "Something like `const v1": that works thanks, but is that the way you're "supposed" to do it? it's not mentioned in the tutorial |
17:06:27 | FromDiscord | <firasuke> I also found `downit` should I use it? |
17:06:28 | FromDiscord | <Rika> In reply to @BobBBob "that works thanks, but": kinda? |
17:06:42 | FromDiscord | <Phil> In reply to @Rika "because it creates a": Ohhhh it's not just building the value it's also doing the assignment |
17:06:47 | FromDiscord | <Rika> what do you mean by "supposed"? |
17:07:28 | FromDiscord | <BobBBob> idk is that the recommended way? |
17:08:54 | NimEventer | New post on r/nim by momoPFL01: List of languages that can be used from inside Nim, see https://reddit.com/r/nim/comments/11tx477/list_of_languages_that_can_be_used_from_inside_nim/ |
17:13:12 | FromDiscord | <Rika> In reply to @BobBBob "idk is that the": i cant think of any possible issues with it other than unintended inputs like maybe passing `createConst(lol(thisworks), 0.01)`, just check what kind of names you allo |
17:13:13 | FromDiscord | <Rika> (edit) "allo" => "allow" |
17:13:30 | FromDiscord | <Rika> oh |
17:13:40 | FromDiscord | <Rika> didnt notice the const name is also part |
17:14:19 | FromDiscord | <Hourglass [She/Her]> Does Polymorph not have any publicly hosted docs? |
17:14:33 | FromDiscord | <Hourglass [She/Her]> I can't find a link to them, if they do exist |
17:19:22 | FromDiscord | <0ffh> sent a code paste, see https://play.nim-lang.org/#ix=4r5O |
17:22:31 | FromDiscord | <Phil> In reply to @0ffh "I have this snipped": Is there a specific reason why you have a void field? |
17:23:20 | FromDiscord | <Phil> Like, what information or ability does it provide you that makes it useful here? |
17:23:25 | FromDiscord | <0ffh> In reply to @Isofruit "Is there a specific": Well, IIRC I had to put something to please the syntax gods. Maybe could have used discard, don't know. |
17:23:31 | FromDiscord | <Phil> Ahhhhh check |
17:23:35 | FromDiscord | <Phil> Yeah discard is the way to go here |
17:24:14 | FromDiscord | <Phil> I don't know exactly why this code breaks, however I'd imagine void is something that was removed or changed to not work there anymore as it was likely an unintended side-effect for it to ever work |
17:24:38 | FromDiscord | <Phil> sent a code paste, see https://play.nim-lang.org/#ix=4r5P |
17:24:46 | FromDiscord | <0ffh> In reply to @Isofruit "Yeah discard is the": Okay, yeah that works in devel/1.9.1! |
17:25:10 | FromDiscord | <Phil> Generally, if there is a line where you have to provide something but actually want to do nothing: Use discard |
17:25:25 | FromDiscord | <Phil> It's for disregarding proc results as well as skipping lines explicitly essentially |
17:25:34 | FromDiscord | <Phil> It's the explicit "I don't care" statement |
17:28:31 | FromDiscord | <0ffh> Well, thanks!โตIn general I know of discard, just didn't occur to me when I wrote that code - also that was a while ago when I was a real greenhorn with Nim. Didn't see any reason to change it yet, as it used to be fine. |
17:29:40 | FromDiscord | <0ffh> In reply to @Isofruit "It's the explicit "I": BTW I used triple backticks for the code, what did you use to get the syntax coloring? |
17:30:05 | FromDiscord | <Phil> In reply to @0ffh "BTW I used triple": \`\`\`nimโต\`\`\` |
17:30:17 | FromDiscord | <Phil> works identical for js, html, C or whatever else you might want to use |
17:30:23 | FromDiscord | <0ffh> In reply to @Isofruit "\`\`\`nim \`\`\`": Ah, thanks! |
17:30:50 | FromDiscord | <Phil> Happy to help! |
17:38:29 | * | PMunch joined #nim |
17:48:30 | * | jmdaemon joined #nim |
18:05:31 | FromDiscord | <Livid> I'm trying to compile my tests with Testament and Chronicles, but I get an error `/.choosenim/toolchains/nim-1.6.10/lib/pure/terminal.nim(80, 5) Error: cannot evaluate at compile time: gTerm`. Is this a common problem? |
18:25:20 | FromDiscord | <Livid> Ok I've found a part of the problem. it was because I had `switch("import", "chronicles")` in the top level `config.nims` file. But I would like `chronicles` imported automatically to all of my source files. Is that possible? |
18:40:08 | PMunch | You can use the `--import` to import a module everywhere |
18:40:38 | PMunch | For a package I think you'd need to point it to the main file in the package i.e. chronicles.nim |
18:40:55 | PMunch | This is what I do in my echooveride test: https://github.com/PMunch/echooverride |
18:44:56 | FromDiscord | <Dale> Apologies if this isn't the right channel, but I have some feedback for the docs site. When I ctrl+click a link to open something in a new tab, the tab is created as a window and is subsequently blocked as a pop-up. This doesn't happen on any other websites. |
18:46:26 | FromDiscord | <Dale> R-click > open in new tab works. Not sure what's happening, is there some JS shenanigans? |
18:48:46 | FromDiscord | <caravaggio> In reply to @Gumbercules "But the reason it's": Hey man, thanks for the explanation I think this part makes me understand then better |
18:49:01 | FromDiscord | <Gumbercules> Anytime |
18:49:03 | FromDiscord | <caravaggio> Since their doing no execution only substitution like u stated |
18:49:22 | FromDiscord | <Elegantbeef> Noโต(@planetis) |
18:49:23 | FromDiscord | <caravaggio> Last question in the template example |
18:49:34 | FromDiscord | <caravaggio> It's calling fname without the curly braces |
18:49:36 | PMunch | @Dale, not the wrong channel at all |
18:49:48 | FromDiscord | <caravaggio> That just means it automatically passes any argument, right? |
18:49:52 | FromDiscord | <Elegantbeef> Pmunch i do think it actually requires 1.9.1 |
18:49:59 | PMunch | But I'm not able to reproduce this behaviour in Firefox, seems to work like you would expect here |
18:50:09 | PMunch | @Elegantbeef, oh really? |
18:50:17 | PMunch | Not even 1.6.12? |
18:50:55 | FromDiscord | <Elegantbeef> I use cache table `contains` |
18:50:56 | FromDiscord | <Dale> I'm using chromium (ungoogled) on Linux if that's any help. I know it's a small issue but it's quite annoying since ctrl+click is hugely convenient |
18:51:13 | FromDiscord | <Gumbercules> In reply to @caravaggio "It's calling fname without": I'm holding a baby arm but will reply in a bit if no one answers your question first |
18:51:38 | FromDiscord | <Gumbercules> Atm |
18:51:45 | FromDiscord | <Gumbercules> Even |
18:51:59 | FromDiscord | <Livid> In reply to @PMunch "For a package I": hrmm... that is what I did, but it causes terminal.nim, in the standard library, to fail to compile with there error I mentioned earlier |
18:52:08 | FromDiscord | <Elegantbeef> Pmunch can you also give me a min repro for your other issue? |
18:52:34 | PMunch | @Dale, strange I just tried with Chromium here on my Linux machine and it works just fine as well |
18:53:02 | PMunch | What was that issue again? |
18:53:21 | FromDiscord | <Dale> Could be a bug with my install then. I haven't done an -Syu for a long time |
18:53:32 | FromDiscord | <Elegantbeef> The tree algorithm |
18:53:35 | PMunch | Good point, I should probably do one of those |
18:54:04 | PMunch | @Elegantbeef, oh right |
18:54:07 | PMunch | Just a sec |
18:54:11 | FromDiscord | <Elegantbeef> You gave a nice wordy description, but it's quite opaque on how i should replicate your problem ๐ |
18:54:42 | FromDiscord | <Dale> Man, I haven't done any nim for a few months, time to get back into this. Have there been any major updates recently? I remember reading that the standard library was going to be scaled back |
18:54:59 | PMunch | @Elegantbeef, words are cheap, code is what I get paid to write :P |
18:54:59 | FromDiscord | <Elegantbeef> 2.0 is still soon |
18:55:23 | PMunch | @Dale, well some database stuff got taken out, that was probably the biggest stdlib change |
18:55:45 | PMunch | Apart from that ARC/ORC is better than ever, and 2.0 looms ever closer |
18:56:40 | FromDiscord | <Dale> Ah, now I remember, one of the reasons I shelved it was waiting for 2.0. Got the itch though so here I am. Been looking at a lot of the modern new wave languages, and Nim still feels best to me |
18:58:28 | FromDiscord | <Dale> Well that's good to hear! The ref counting is one of my biggest concerns (still not sure whether to go manual really), so any improvements to that are welcome |
18:58:52 | FromDiscord | <Elegantbeef> I do not get paid to write either pmunch so show some respect! ๐ |
18:59:29 | FromDiscord | <Dale> Has there been any work on threading as well? I recall learning how to use some feature but found out it was deprecated |
19:00:15 | FromDiscord | <Elegantbeef> https://github.com/nim-lang/threading |
19:01:37 | FromDiscord | <Dale> \o/ |
19:01:38 | FromDiscord | <Dale> Thanks |
19:05:07 | PMunch | @Dale, you definitely don't want to go manual unless you absolutely have to. The memory management algorithms in Nim are really solid |
19:07:06 | FromDiscord | <Dale> Alright. May as well give it a shot and not make any premature decisions :) |
19:07:22 | PMunch | @Elegantbeef, there, a minimal repro pro bono :P |
19:07:41 | PMunch | @Dale, always a good idea ;) |
19:08:03 | PMunch | @Elegantbeef, did you see my question about why it has to use tuple by the way? |
19:15:11 | * | azimut quit (Ping timeout: 255 seconds) |
19:17:19 | FromDiscord | <jmgomez> Can you somehow override the `echo` on `dumpTree` or whatever it uses so it uses your func? |
19:17:51 | PMunch | Well you can write your own with treeRepr |
19:20:04 | FromDiscord | <jmgomez> right, but just wanted to check something real quick and it will be handy while inside the vm to have `echo` overwritten (just checked it does uses it) |
19:20:40 | PMunch | I mean you could use my echooverride thing I guess.. |
19:21:17 | PMunch | But it would probably be quicker to just implement your own dumpTree, it's literally like two lines of code :P |
19:22:28 | FromDiscord | <jmgomez> for this one sure, but I will check it out. Does it work fine in the vm? |
19:24:41 | FromDiscord | <caravaggio> In reply to @Gumbercules "I'm holding a baby": Np man, anytime ur ready |
19:29:26 | * | derpydoo quit (Read error: Connection reset by peer) |
19:32:17 | PMunch | @jmgomez, no idea |
19:32:29 | FromDiscord | <firasuke> I need some help in writing an async files downloader in nim, with a progress bar. |
19:33:01 | FromDiscord | <firasuke> I've looked into `httpclient` and `terminal` but I am a bit lost on how I should start implementing such a thing. |
19:49:07 | FromDiscord | <Gumbercules> In reply to @caravaggio "It's calling fname without": Why would you expect curly braces? |
19:50:36 | FromDiscord | <firasuke> I found `downit`: https://github.com/Patitotective/downit |
19:51:41 | FromDiscord | <Elegantbeef> Pmunch what's wrong with https://play.nim-lang.org/#ix=4r6t |
19:52:12 | FromDiscord | <Elegantbeef> I guess that should be a var capture |
19:53:00 | FromDiscord | <Elegantbeef> Though oddly the non var capture actually worked ๐ |
19:53:11 | FromDiscord | <Elegantbeef> https://play.nim-lang.org/#ix=4r6u but yea this seems fine to me |
19:57:29 | PMunch | Hmm true, those if statements looks weird though :P |
19:57:41 | PMunch | Like init immediately followed by an if |
19:58:06 | FromDiscord | <Elegantbeef> I mean you want to alias the result variable to another type |
19:58:20 | FromDiscord | <Elegantbeef> That requires emitting a new variable and a check |
19:59:27 | FromDiscord | <Elegantbeef> sent a code paste, see https://play.nim-lang.org/#ix=4r6w |
19:59:35 | FromDiscord | <Elegantbeef> That's all my macro really does anywho for var captures |
19:59:58 | FromDiscord | <Elegantbeef> you do not technically need the if |
20:00:11 | FromDiscord | <Elegantbeef> you can do `discard (var result: Leaf) from result` |
20:00:43 | FromDiscord | <Elegantbeef> Ponders if a macro is capable of being discardable |
20:03:10 | FromDiscord | <firasuke> how do you clone a git repo from within nim? is there such a library? |
20:07:35 | FromDiscord | <Elegantbeef> Macros are not discardable, so yea you need the `discard` ๐ |
20:13:56 | PMunch | Man, Gtk tree views are maddeningly complex.. |
20:14:55 | FromDiscord | <firasuke> In reply to @firasuke "how do you clone": is there a better alternative to gittyup?โตhttps://github.com/disruptek/gittyup |
20:15:13 | FromDiscord | <huantian> You can try looking up โNim libgitโ |
20:15:26 | FromDiscord | <firasuke> In reply to @huantian "You can try looking": oh ok |
20:15:44 | FromDiscord | <huantian> In reply to @firasuke "is there a better": Seems like a good option tho |
20:16:18 | FromDiscord | <firasuke> In reply to @huantian "Seems like a good": yeah I checked other packages and this seemed good |
20:16:22 | FromDiscord | <firasuke> dunno if there's a better option tho |
20:16:59 | FromDiscord | <Elegantbeef> Hopefully my reasoning was sufficient on ways to work that problem pmunch |
20:17:29 | FromDiscord | <Elegantbeef> I cannot think of any macro i could add that would make that problem disappear ๐ |
20:17:48 | PMunch | Hmm, not sure really |
20:18:08 | PMunch | It's just a bit annoying having to spend two lines to set result |
20:18:16 | PMunch | Super minor gripe though :P |
20:18:47 | FromDiscord | <Elegantbeef> Maybe a `x.aliasAs (result: Leaf)` |
20:18:48 | FromDiscord | <Elegantbeef> But that's just sugar for by addr |
20:18:52 | PMunch | Oh by the way, how do you export stuff? |
20:19:00 | FromDiscord | <Elegantbeef> Hey your gripe did make me realise i missed a massive bug |
20:19:08 | PMunch | Oh really? |
20:19:11 | FromDiscord | <huantian> In reply to @firasuke "I need some help": You might also wanna check out my downloader, rd-downloader for another example |
20:19:20 | FromDiscord | <Elegantbeef> Manually export presently |
20:19:30 | PMunch | I mean `result as Leaf` would be awesome |
20:19:31 | FromDiscord | <firasuke> In reply to @huantian "You might also wanna": alright |
20:19:40 | PMunch | So just `export Tree`? |
20:19:45 | PMunch | Would that make the fields accessible? |
20:19:46 | FromDiscord | <Elegantbeef> I can implement that pmunch |
20:19:56 | FromDiscord | <Elegantbeef> Nope, hence the problem |
20:20:40 | PMunch | Wait, so how do you currently export? |
20:20:44 | FromDiscord | <Elegantbeef> There is no easy way presently to export specific fields |
20:20:58 | PMunch | I just want to export my tree structure.. |
20:21:03 | FromDiscord | <Elegantbeef> `export Circle, Shape, init, r, x, y` |
20:21:11 | PMunch | Right.. |
20:21:20 | FromDiscord | <Elegantbeef> It's 100% manual export, since I need to find a way to handle it |
20:21:35 | FromDiscord | <Elegantbeef> I could go full bore and export everything, but that seems wrong |
20:22:37 | FromDiscord | <Elegantbeef> I guess i might aswell |
20:22:54 | FromDiscord | <Elegantbeef> If you want to have private fields you make a second module that imports this one and exports only selective fields |
20:23:35 | PMunch | Yeah, I think that's a more rare usecase |
20:23:36 | PMunch | Oh, did you look at the dollar bug by the way? |
20:23:51 | FromDiscord | <Elegantbeef> What dollar bug? |
20:24:10 | PMunch | I couldn't define a `$` procedure for the types |
20:24:39 | FromDiscord | <Elegantbeef> I do define one by default |
20:24:49 | FromDiscord | <Elegantbeef> Since it's a distinct |
20:24:51 | FromDiscord | <caravaggio> In reply to @Gumbercules "Why would you expect": Sorry I meant () |
20:24:59 | FromDiscord | <caravaggio> Not curly braces |
20:25:05 | FromDiscord | <caravaggio> Can't think of the name for this () |
20:25:09 | FromDiscord | <caravaggio> In the template example |
20:25:13 | PMunch | @caravaggio, parenthesis? |
20:25:15 | FromDiscord | <Elegantbeef> Parenthesis |
20:25:20 | FromDiscord | <caravaggio> Yes |
20:25:25 | FromDiscord | <caravaggio> Thanks my bad |
20:25:53 | FromDiscord | <Elegantbeef> Are you after a custom `$` for the base type or the subtypes pmunch? |
20:26:13 | PMunch | @Elegantbeef, well I wanted one for an alias originally |
20:26:14 | PMunch | http://ix.io/4r6G |
20:26:30 | PMunch | Tried to have `toStr` be a dollar proc for only FileTree, but it didn't work |
20:26:52 | PMunch | Oh, that was before I added the arguments |
20:26:58 | FromDiscord | <caravaggio> sent a code paste, see https://play.nim-lang.org/#ix=4r6I |
20:27:01 | FromDiscord | <Elegantbeef> Right, that's cause I emit one already |
20:27:15 | PMunch | Hmm |
20:27:30 | FromDiscord | <caravaggio> On the template liftscalarproc has fname without the parenthesis, what is that trying to signify? |
20:27:31 | PMunch | I see |
20:27:35 | FromDiscord | <Elegantbeef> I suppose i shouldnt emit one of those |
20:27:45 | PMunch | Well it was handy during debugging.. |
20:27:57 | FromDiscord | <caravaggio> I am trying to recreate that with a simple hello world and the compile keeps telling me I need to call arguments |
20:27:57 | PMunch | But very annoying that I couldn't define one of my own |
20:28:17 | FromDiscord | <Elegantbeef> I have an idea |
20:32:01 | FromDiscord | <huantian> In reply to @caravaggio "On the template liftscalarproc": Where is that? |
20:32:07 | FromDiscord | <huantian> I may be blind |
20:35:04 | FromDiscord | <Gumbercules> I'm not seeing it either |
20:35:39 | FromDiscord | <Gumbercules> when this template is invoked, it simply replaces the invocation of it with the code under the template's scope |
20:36:05 | FromDiscord | <Gumbercules> so it is essentially declaring a new procedure named `fname` that accepts a single argument which is an `openArray` of type `T` |
20:36:22 | FromDiscord | <Gumbercules> and then it invokes itself recursively |
20:37:00 | FromDiscord | <Gumbercules> however I don't see `fname` being invoked anywhere without parens |
20:37:03 | FromDiscord | <Gumbercules> although you can do that in Nim |
20:37:11 | FromDiscord | <Gumbercules> this is why you can do `echo "foo"` instead of `echo("foo")` |
20:37:35 | FromDiscord | <caravaggio> sent a code paste, see https://play.nim-lang.org/#ix=4r6L |
20:37:37 | FromDiscord | <caravaggio> Is what I was referring to |
20:37:40 | FromDiscord | <caravaggio> But I see |
20:38:00 | FromDiscord | <caravaggio> I still can't get my mini example to work, am not understanding the fname as an argument with no type |
20:38:38 | FromDiscord | <huantian> iirc writing a template argument without a type is the same thing as (fname: untyped) |
20:39:02 | FromDiscord | <huantian> Which is saying that you can put anything in place of fname, even blocks of code, and Nim wonโt care |
20:39:09 | FromDiscord | <huantian> Itโll copy paste it into the template anyway |
20:39:34 | FromDiscord | <caravaggio> Oh I see, it's just semantics |
20:39:36 | FromDiscord | <caravaggio> Thanks |
20:39:54 | FromDiscord | <Gumbercules> Yeah, that's what I was trying to point out earlier when I mentioned |
20:40:31 | FromDiscord | <Gumbercules> In reply to @Gumbercules "The omission of typed": this |
20:40:54 | FromDiscord | <caravaggio> Oh makes sense |
20:41:07 | FromDiscord | <caravaggio> I thought it was passing sqrt directly to the proc |
20:43:46 | PMunch | By the way @Elegantbeef any specific reason why I need tuple in the definition? |
20:43:53 | PMunch | Isn't that the only option? |
20:44:38 | FromDiscord | <Elegantbeef> It's the only option i like |
20:45:12 | * | rmt quit (Ping timeout: 264 seconds) |
20:50:58 | PMunch | Damn it.. |
20:51:14 | PMunch | parsetoml doesn't work on devel, and fungus requires devel.. |
20:52:41 | PMunch | Ah, never mind, I just had an ancient version of parsetoml installed :P |
20:52:57 | PMunch | This pkg/pkg2 stuff is really annoying |
20:53:21 | PMunch | Now I just ran nimble install parsetoml, it installed 0.7.0, but nim c still tried to use 0.5.0 |
20:56:33 | FromDiscord | <Elegantbeef> https://github.com/beef331/fungus#implementing-custom--1 |
20:56:50 | FromDiscord | <Elegantbeef> There you go now pmunch the default `$` is the same as it was, but now you can overload it |
20:57:22 | FromDiscord | <Elegantbeef> And I implemented a macro to generate the `==` for a ADT so you do not have to manually do it |
20:59:11 | FromDiscord | <Elegantbeef> Well you still need to manually implement the `==` proc for the root type, but I mean you do not need to manually match and check everything |
20:59:37 | PMunch | Neat |
21:00:11 | FromDiscord | <Elegantbeef> Also procedures are now exported |
21:02:18 | FromDiscord | <Elegantbeef> `0.1.4` also exports init procedures, i forgot to do that prior ๐ |
21:02:36 | FromDiscord | <Elegantbeef> Anyway hopefully that's enough house cleaning of this |
21:02:44 | FromDiscord | <Elegantbeef> It should be sufficient now |
21:39:07 | PMunch | Gotta love that hitting Ctrl+Z too quickly in Vim will send the `nim check` command to the background so that it never completes and just hangs Vim indefinitely (or at least until you manually kill the nim check command) |
21:39:27 | * | rockcavera quit (Remote host closed the connection) |
21:45:18 | PMunch | @Elegantbeef, I also have to add `else: discard` to my match block, is that normal? |
21:47:28 | PMunch | Hmm, I also get undeclared field: 'kind' for type filetree.Path |
21:47:37 | PMunch | filetree is the module I imported where Path is defined |
21:47:47 | PMunch | I already have `export kind` in there.. |
21:50:17 | FromDiscord | <etra> In reply to @PMunch "Gotta love that hitting": lol, that also happens to me when I use vim + rust-analyzer, the old habit of ctrl+z to build stuff |
21:50:54 | FromDiscord | <etra> in Windows doesn't happen because nvim completely freezes when ctrl+z so that's even more painful :crypalm: |
21:51:57 | PMunch | Wait, you use Ctrl+z to build? |
21:52:12 | PMunch | I just use it to background Vim, and then I can run commands in the same terminal |
21:52:20 | FromDiscord | <etra> yeah I meant that |
21:52:25 | PMunch | Ah right |
21:52:27 | FromDiscord | <etra> ctrl + z > cargo build > fg |
21:52:38 | FromDiscord | <etra> but cargo build is locked because of rust analyzer |
21:52:40 | PMunch | Yup |
21:52:43 | PMunch | Aah :P |
21:52:47 | FromDiscord | <etra> I'm trying to get the habit of spawning a terminal inside vim instead |
21:52:49 | PMunch | Haha, that's silly |
21:52:53 | FromDiscord | <etra> doing `:tabe +term` |
21:53:14 | FromDiscord | <etra> ~~because having a proper multiplexer in windows is hell~~ |
21:53:26 | PMunch | I could probably just disable nim check and just use nimlsp |
21:53:36 | PMunch | But then I'd have to dig into how to disable that :P |
21:56:20 | FromDiscord | <Elegantbeef> upgrade to 0.1.5 for me |
21:56:21 | FromDiscord | <Elegantbeef> Yes it should be exhaustive by design |
21:56:32 | FromDiscord | <Elegantbeef> Remove all the `export` statements |
21:56:33 | FromDiscord | <Elegantbeef> Oh actually i see the issue |
21:56:34 | FromDiscord | <Elegantbeef> `kind` isnt exported ๐ |
21:57:33 | FromDiscord | <Elegantbeef> Ok pmunch 0.1.6 should make you happy |
21:58:05 | FromDiscord | <firasuke> how do you install a custom library using nimble? such as `gittyup` as it is not shown when doing `nimble list`? |
21:58:46 | FromDiscord | <ElegantBeef> Matrix be slow right now nice |
21:58:52 | FromDiscord | <Elegantbeef> \`nimble install git.domain/path/here |
21:59:09 | FromDiscord | <firasuke> In reply to @Elegantbeef "\`nimble install git.domain/path/here": ok |
22:00:29 | PMunch | Anything in particular I need to do in order to get it to export= |
22:00:44 | FromDiscord | <Elegantbeef> Export what? |
22:00:52 | PMunch | Anything |
22:00:59 | FromDiscord | <Elegantbeef> Not anymore |
22:01:28 | PMunch | I have this module: http://ix.io/4r72 |
22:01:32 | PMunch | Imported into my main project |
22:01:46 | PMunch | And it says Error: undeclared identifier: 'Path' |
22:01:59 | FromDiscord | <ElegantBeef> Jesus I forgot the types |
22:02:15 | PMunch | Haha :P |
22:02:55 | FromDiscord | <Elegantbeef> There 0.1.7 ๐ |
22:03:04 | FromDiscord | <Elegantbeef> Really putting graffiti through it's paces! |
22:03:22 | FromDiscord | <Elegantbeef> I know no one has used any versions inbetween these, but good practices and all! |
22:04:15 | PMunch | Hmm, still undefined identifier |
22:05:05 | FromDiscord | <Elegantbeef> Still the type? |
22:05:13 | PMunch | Yup |
22:05:59 | PMunch | Used --expandMacro:adtEnum |
22:06:07 | PMunch | And it doesn't show a single export marker.. |
22:06:48 | FromDiscord | <Elegantbeef> Ok so now i know that it works on `0.1.8` |
22:07:11 | FromDiscord | <Elegantbeef> sent a code paste, see https://play.nim-lang.org/#ix=4r75 |
22:07:12 | FromDiscord | <firasuke> since I can't find libraries, should I stick to using system calls to executables? |
22:07:39 | FromDiscord | <Elegantbeef> Using libgit is generally best, but you can always just use the shell |
22:07:47 | FromDiscord | <Elegantbeef> I personally do since it's quicker to setup for my graffiti program |
22:07:53 | FromDiscord | <Nilts> sent a code paste, see https://play.nim-lang.org/#ix=4r76 |
22:08:11 | FromDiscord | <firasuke> In reply to @Elegantbeef "Using libgit is generally": I couldn't find neat implementations for async downloads and for git clone |
22:08:33 | FromDiscord | <firasuke> at this point I'm questioning my design decision, do I really need async |
22:09:01 | PMunch | Undeclared identifier FolderKind |
22:09:13 | FromDiscord | <firasuke> I probably only need to download multiple files concurrently, other than that I am good |
22:09:21 | FromDiscord | <firasuke> but still, I can't do that properly |
22:10:06 | FromDiscord | <Elegantbeef> I didnt export the enum |
22:10:06 | FromDiscord | <Elegantbeef> One day i'll think this through |
22:10:07 | FromDiscord | <Elegantbeef> Sorry for putting you through this though |
22:15:43 | FromDiscord | <Elegantbeef> So fingers crossed pmunch this is the last back and forward exchange |
22:16:28 | PMunch | Haha, no worries |
22:16:35 | PMunch | In between versions I just include the file |
22:16:45 | PMunch | What version are we up to now? |
22:16:53 | FromDiscord | <Elegantbeef> 0.1.9 |
22:17:47 | PMunch | Nice, it seems to work |
22:18:01 | PMunch | Although I've got an ambiguous identifier |
22:18:01 | FromDiscord | <Elegantbeef> I also did submit a PR to the package repository |
22:18:15 | FromDiscord | <Elegantbeef> Ruh roh |
22:18:29 | PMunch | Hmm, another name for File.. |
22:18:38 | FromDiscord | <Elegantbeef> That's right |
22:18:43 | FromDiscord | <Elegantbeef> FIle is a builtin Nim Type |
22:18:48 | FromDiscord | <Elegantbeef> Well "built in" |
22:18:50 | PMunch | I know |
22:18:50 | FromDiscord | <Elegantbeef> It's imported in io |
22:19:09 | FromDiscord | <Elegantbeef> Well why did you mention it! |
22:19:23 | PMunch | I was trying to get suggestions for another name |
22:19:33 | FromDiscord | <Elegantbeef> Oh that makes more sense |
22:20:27 | FromDiscord | <Elegantbeef> Entry? |
22:20:37 | PMunch | Entry is good |
22:20:51 | PMunch | Can confirm, everything works now |
22:21:33 | FromDiscord | <Nilts> In reply to @not logged in "I get this error:": Any ideas? |
22:21:37 | FromDiscord | <Elegantbeef> `Path or Folder or File or FileTree` A concept does this better |
22:21:47 | FromDiscord | <Elegantbeef> templates do no have `results` |
22:21:54 | PMunch | Yeah that was just me desperately trying to get dollar to work :P |
22:22:27 | FromDiscord | <Elegantbeef> Here's hoping this is better than using object variants |
22:26:02 | arkanoid | how to cite/quote in forum post? |
22:26:39 | FromDiscord | <Elegantbeef> `> bleh` iirc |
22:26:54 | FromDiscord | <Elegantbeef> Or it might be ` message here` |
22:27:31 | FromDiscord | <Elegantbeef> https://forum.nim-lang.org/about/rst |
22:27:36 | PMunch | arkanoid, hit the RST is supported link and it should tell you |
22:28:16 | FromDiscord | <Nilts> Are my messages even getting trough or am i doing something wrong |
22:28:31 | PMunch | Anyways, I'm off for the night. Tomorrows project is a runtime templating engine I guess.. |
22:28:50 | arkanoid | PMunch: I've tried many options, but all the one requiring "indented" block can't be used in linux+firefox, as "tab" is not adding tab char, but moving cursor on screen outside text area |
22:28:55 | PMunch | @Nilts, yes, beef already answered you.. |
22:29:44 | FromDiscord | <Nilts> Well, since things are not linked through the link, it is kind of hard to find. |
22:29:55 | PMunch | arkanoid, but you don't need an indented block.. |
22:30:22 | PMunch | You just need a `> something like this`, and you need an empty line after that and then whatever you wanted to type |
22:30:31 | arkanoid | PMunch: if you mean the "Quoting other users can be done by prefixing their message with >:" it's not working to me, at least in preview |
22:30:37 | FromDiscord | <Elegantbeef> And pmunch when you're done with that adt code, do share it with me, want to stare at it intently to see if anything needs fixed |
22:30:38 | PMunch | @Nilts, linked through the link? |
22:30:58 | PMunch | arkanoid, you need an empty line and some more text for it to do the quote thing |
22:31:14 | FromDiscord | <Nilts> In reply to @Elegantbeef "templates do no have": Sorry for not seeing your message, but it was conjoined with a response to another person from my side. Ik templates do not have results, it is referencing the result var of a proc that you call the template from. |
22:31:20 | arkanoid | wait, I got it, the example is wrong. ">Foo" works, but "> Foo" doesn't |
22:31:51 | PMunch | @Elegantbeef, haven't really started using all the features yet, but this is what it looks like so far: http://ix.io/4r7c |
22:32:02 | PMunch | And usage through a simple match block in my main module |
22:32:29 | PMunch | "> Foo" works for me.. |
22:32:44 | PMunch | Anyways, I'm off |
22:32:45 | * | PMunch quit (Quit: leaving) |
22:34:16 | FromDiscord | <ElegantBeef> Well matrix is clearly being a pain |
22:34:27 | FromDiscord | <ElegantBeef> The bridge needs to be updated ๐ |
22:34:44 | FromDiscord | <ElegantBeef> Anyway are you sure you're calling that inside a proc that has a result |
22:34:52 | FromDiscord | <ElegantBeef> also does adding `{.dirty.}` to the template change anything |
22:34:55 | FromDiscord | <ElegantBeef> Why is it even a template |
22:37:36 | * | rockcavera joined #nim |
22:40:01 | FromDiscord | <Nilts> In reply to @ElegantBeef "Why is it even": jester being designed around templates |
22:40:05 | FromDiscord | <Nilts> i will try dirty |
22:40:10 | FromDiscord | <Nilts> pragma |
22:41:39 | FromDiscord | <Nilts> It seems to be type checking the untyped template. (Dirty did not work) |
22:41:52 | FromDiscord | <ElegantBeef> Of course it's typechecking it |
22:42:01 | FromDiscord | <ElegantBeef> templates are checked after expansion |
22:43:48 | FromDiscord | <Nilts> it is checking before expansion, or else is should be fine |
22:44:02 | FromDiscord | <ElegantBeef> Templates are unchecked until subsitution |
22:44:35 | FromDiscord | <Nilts> anyways, here is the tree of my problem:โตFunction -> My Template -> Jester template -> ErrorโตSo i think it is an issue with nested templates |
22:44:53 | FromDiscord | <ElegantBeef> sent a code paste, see https://play.nim-lang.org/#ix=4r7f |
22:45:54 | FromDiscord | <ElegantBeef> `import std/macros` and put `expandMacros:` around your macro call |
22:46:23 | FromDiscord | <inv> @treeform https://github.com/treeform/jsony/pull/67 |
22:46:53 | FromDiscord | <ElegantBeef> I thought you couldnt fix other's libraries ๐ |
22:47:25 | FromDiscord | <inv> I do not want to fix the libs I do not want to fix ๐ |
22:47:30 | FromDiscord | <inv> (edit) "๐" => "๐" |
22:47:52 | * | rockcavera quit (Remote host closed the connection) |
22:49:31 | FromDiscord | <inv> @ElegantBeef about expect: your templates is good, but I think it is more workaround to check flags you want. The problem at the moment is nothing more than message |
22:49:38 | FromDiscord | <inv> (edit) "@ElegantBeef about expect: your templates is good, but I think it is more workaround to check flags you want. The problem at the moment is nothing more than ... message" added "just warning" |
22:49:47 | FromDiscord | <inv> (edit) "is" => "are" |
22:49:51 | FromDiscord | <ElegantBeef> My template? |
22:50:24 | FromDiscord | <ElegantBeef> Oh do not get me wrong i think the present state of defects is abysmal |
22:50:28 | FromDiscord | <inv> oh, I am sorry, it wasn't message from you |
22:50:38 | FromDiscord | <inv> the one: https://forum.nim-lang.org/t/9994#66013 |
22:50:49 | FromDiscord | <ElegantBeef> There is no defect tracking, so there is no way of preventing a program from crashing |
22:50:53 | FromDiscord | <Nilts> In reply to @ElegantBeef "`import std/macros` and put": Where? I never even added it yet. I just imported it |
22:51:50 | * | rockcavera joined #nim |
22:51:57 | FromDiscord | <ElegantBeef> Nilts you have to be invoking the template somewhere |
22:52:00 | FromDiscord | <ElegantBeef> You just have to be |
22:52:33 | FromDiscord | <inv> @ElegantBeef I do not want to mix the problems from the topic. defects can be uncatchable - it is ok, but what is the reason to write except CE, Defect if panics:off ? |
22:52:39 | FromDiscord | <inv> (edit) "except" => "`except" | "Defect" => "Defect`" |
22:52:52 | FromDiscord | <inv> (edit) "@ElegantBeef I do not want to mix the problems from the topic. defects can be uncatchable - it is ok, but what is the reason to write `except CE, Defect` if panics:off ? ... " added "- what does it show to me ?" |
22:53:09 | FromDiscord | <ElegantBeef> No clue I do not catch defects |
22:53:44 | FromDiscord | <inv> But why bare except is bad ? |
22:53:54 | FromDiscord | <inv> (edit) "?" => "in the case" |
22:53:59 | FromDiscord | <ElegantBeef> Bare except is bad cause it silently catches defects in --panics:off |
22:54:05 | FromDiscord | <ElegantBeef> Code is not meant to be shipped with --panics:off |
22:54:12 | FromDiscord | <ElegantBeef> It's only meant for testing |
22:54:16 | FromDiscord | <inv> bare except == except CE, Defect, isn't it ? |
22:54:29 | FromDiscord | <ElegantBeef> bare exceept is all types that derive from `Exception` |
22:54:39 | FromDiscord | <ElegantBeef> And i believe even FFI exceptions |
22:55:03 | FromDiscord | <ElegantBeef> Bare except is just bad practise imo anyway |
22:56:19 | FromDiscord | <inv> "Code is not meant to be shipped with --panics:off" it is not very clear, because someone said that code meant to be shipped with --d:danger |
22:56:32 | FromDiscord | <ElegantBeef> Nope |
22:56:40 | FromDiscord | <ElegantBeef> Code is meant to be shipped with release and defects are meant to be panics |
22:56:53 | FromDiscord | <inv> panics are off in the release |
22:56:55 | FromDiscord | <Nilts> In reply to @ElegantBeef "Nilts you have to": I am not XD |
22:57:12 | FromDiscord | <ElegantBeef> In reply to @inv "panics are off in": Panics are off by default cause that was the behaviour of Nim |
22:57:29 | FromDiscord | <ElegantBeef> The modern age is always an opt in with Nim until a major change |
22:57:31 | FromDiscord | <Gumbercules> I think it entirely depends on the scenario |
22:57:48 | FromDiscord | <Gumbercules> in certain circumstances, `-d:danger` is probably preferable to `-d:release` for shipping a binary |
22:58:17 | FromDiscord | <Gumbercules> if your more concerned with performance than runtime safety |
22:58:22 | FromDiscord | <ElegantBeef> I mean `-d:danger` is explicitly danger and only meant to be shipped if you know what it's doing and program defensively |
22:58:23 | FromDiscord | <inv> I still did not get why to show the warn before someone tries to compile with p:on. Because, I think that 80% is not going to do it |
22:58:53 | FromDiscord | <ElegantBeef> The reason it's bad practise is if you make a library and never use panics off and you rely on catching a defect, i cannot use your code cause i use panics:on |
22:58:57 | FromDiscord | <inv> (edit) "is" => "are" |
22:59:06 | FromDiscord | <Gumbercules> yeah but that's assuming you're shipping libraries |
22:59:21 | FromDiscord | <ElegantBeef> If you're not put `--warning[BareExcept]: off` |
23:00:42 | FromDiscord | <inv> @ElegantBeef the warning does not mean that library is broken, it is just mean that, like me: someone put except SE, Defect in code |
23:00:53 | FromDiscord | <inv> and it is expected behavior for me |
23:00:57 | FromDiscord | <ElegantBeef> What do you mean it does not mean it's broken? |
23:01:11 | FromDiscord | <ElegantBeef> If you use a bare exception you are possibly hiding a defect error |
23:01:16 | FromDiscord | <ElegantBeef> That's broken code |
23:01:43 | FromDiscord | <ElegantBeef> The point of a defect is to tell the programmer "Woah there buddy you're doing something wrong" |
23:02:22 | FromDiscord | <ElegantBeef> If you have panics on and see a `defect` in exception handler it should error on top of this change |
23:03:05 | FromDiscord | <inv> if I replace except with except CatchableError in all my libs - for me no changes except more verbose line |
23:03:08 | FromDiscord | <inv> (edit) "line" => "code" |
23:03:19 | FromDiscord | <ElegantBeef> Except now you also no longer accidently catch defects |
23:03:25 | FromDiscord | <Gumbercules> At this point Nim's error handling has become so convoluted that I feel like we should just go back to booleans / error codes |
23:03:30 | FromDiscord | <ElegantBeef> So now your code is more reliable |
23:03:35 | FromDiscord | <ElegantBeef> Fuck no, exceptions are grand |
23:03:37 | FromDiscord | <inv> ok, lets apply - never catch Defects like you want for now - not a problem |
23:03:49 | FromDiscord | <Gumbercules> To each their own |
23:03:59 | FromDiscord | <ElegantBeef> The thing is panics off is only really existent for testing |
23:04:15 | FromDiscord | <Gumbercules> it's not just about panics off though - what if I don't want bounds checking? |
23:04:17 | FromDiscord | <ElegantBeef> If you want to ensure `[0][2]` raises a defect you need to have a mechnism to allow this |
23:04:26 | FromDiscord | <ElegantBeef> You disable checks? |
23:05:05 | FromDiscord | <Gumbercules> Sure but then we have to have the cognative overhead of whether this happens with `-d:danger` or -`d:release` or -d:whateverthefuckisnext` |
23:05:07 | FromDiscord | <inv> let it is just for testing, in the case I still do not want to write except CatchableError if I can just write except which will do the same with p:on |
23:05:17 | FromDiscord | <ElegantBeef> I do not know how checks come into play when talking about bare excepts though |
23:05:19 | FromDiscord | <Gumbercules> (edit) "-d:whateverthefuckisnext`" => "`-d:whateverthefuckisnext`" |
23:05:27 | FromDiscord | <Gumbercules> I don't even know what a bare except is |
23:05:34 | FromDiscord | <ElegantBeef> `try: ... except: ...` |
23:05:35 | FromDiscord | <Gumbercules> and I don't know why I should know just based on the name `bare except` |
23:05:48 | FromDiscord | <ElegantBeef> An exception with no specific type associated with it |
23:05:56 | FromDiscord | <ElegantBeef> well an except |
23:06:02 | FromDiscord | <inv> @Gumbercules it is except Exception: |
23:06:17 | FromDiscord | <inv> (edit) "except Exception:" => "`except Exception:`" |
23:06:30 | FromDiscord | <ElegantBeef> In reply to @inv "let it is just": Again there is so much code before, so the warning > massive breaking changes |
23:06:30 | FromDiscord | <Gumbercules> I get it now, I'm just pointing out none of this is obvious |
23:07:13 | FromDiscord | <ElegantBeef> In reply to @Gumbercules "Sure but then we": All checks are on with release |
23:07:18 | FromDiscord | <ElegantBeef> That's the point of danger |
23:07:23 | FromDiscord | <ElegantBeef> You can also disable checks explicitly |
23:07:32 | FromDiscord | <ElegantBeef> Either globally or for a specific procedure |
23:08:19 | FromDiscord | <Gumbercules> yeah the latter two features are nice |
23:08:30 | FromDiscord | <Nilts> In reply to @not logged in "I am not XD": I think i missed smth again. |
23:08:35 | FromDiscord | <ElegantBeef> Yea rust comically disables overflow checks for performance |
23:08:48 | FromDiscord | <inv> @ElegantBeef I think it is very long way: 10 years to spam everyone with the bare-except message, then 10 years to spam everyone about next change that except is `except CA` |
23:08:48 | FromDiscord | <ElegantBeef> So you can have overflows on release and it just works silently |
23:09:01 | FromDiscord | <ElegantBeef> Do not look at me i'm not a core developer |
23:09:04 | FromDiscord | <firasuke> can you use `harpoon` to download files async? |
23:09:05 | FromDiscord | <ElegantBeef> I'm barely a developer ๐ |
23:09:19 | FromDiscord | <Gumbercules> what is `harpoon`? |
23:09:26 | FromDiscord | <Gumbercules> is your file a whale? |
23:09:26 | FromDiscord | <inv> Because from the user's point of view, to write `except:` is ok without any overhear |
23:09:33 | FromDiscord | <firasuke> In reply to @Gumbercules "what is `harpoon`?": https://juancarlospaco.github.io/harpoon/ |
23:10:08 | FromDiscord | <Gumbercules> given the example code I'd ventureyes |
23:10:10 | FromDiscord | <Gumbercules> (edit) "ventureyes" => "venture yes" |
23:10:30 | FromDiscord | <ElegantBeef> Anyway inv i'm just annoyed by people that write code that except defects to be catchable |
23:10:43 | FromDiscord | <ElegantBeef> the `elvis` package relies on this in multiple places for instance |
23:10:58 | FromDiscord | <firasuke> sent a code paste, see https://play.nim-lang.org/#ix=4r7q |
23:11:13 | FromDiscord | <firasuke> In reply to @Gumbercules "given the example code": oh please do, I've wasted hours trying to get an async downloader working |
23:11:18 | FromDiscord | <ElegantBeef> (edit) "except" => "expect" |
23:11:33 | FromDiscord | <inv> I suppose that if languages needs that someone writes `except CatchableError` everywhere - it means that the language puts some internal problems on it's user |
23:11:36 | FromDiscord | <Gumbercules> I was just saying, given the example on that page my guess would be yes |
23:11:46 | FromDiscord | <Gumbercules> I wasn't suggesting I knew for sure / had tried it out |
23:11:57 | FromDiscord | <Gumbercules> I didn't even know what harpoon was several moments ago |
23:12:04 | FromDiscord | <firasuke> oh ok |
23:12:07 | FromDiscord | <ElegantBeef> It's an issue of time i'd say inv, it's legacy. Not as bad as other languages legacy |
23:12:09 | FromDiscord | <Gumbercules> sorry for the confusion |
23:12:13 | FromDiscord | <firasuke> np |
23:12:16 | FromDiscord | <Nilts> In reply to @ElegantBeef "You just have to": And if i am not? What do i do, i am quite lost. I am using jester #head |
23:12:27 | FromDiscord | <ElegantBeef> No clue i do not have a reproducable example |
23:12:35 | FromDiscord | <ElegantBeef> If you want help you always provide a reproducable example |
23:12:43 | FromDiscord | <ElegantBeef> No one wants to pull teeth, unless they're being paid for it |
23:12:48 | FromDiscord | <Gumbercules> minimal reproduceable example |
23:13:01 | FromDiscord | <Nilts> In reply to @Gumbercules "minimal reproduceable example*": Yeah, i am terrible at making thoe |
23:13:06 | FromDiscord | <Nilts> (edit) "thoe" => "those" |
23:13:20 | * | azimut joined #nim |
23:13:22 | FromDiscord | <inv> @ElegantBeef until there is a strict decision for default panics:on - I think it is too early to spam with the message |
23:13:29 | FromDiscord | <Gumbercules> everyone is, but generally when you ask someone to do that they figure out what they're doing wrong in the processing of trying |
23:13:44 | FromDiscord | <Gumbercules> no one wants to have to install all the dependencies of your project and try to figure out your build complexities to help |
23:13:48 | FromDiscord | <Gumbercules> then it becomes a job |
23:13:58 | FromDiscord | <ElegantBeef> I personally do not use bare excepts so I couldnt care less ๐ |
23:14:21 | FromDiscord | <Gumbercules> (edit) "processing" => "process" |
23:14:30 | FromDiscord | <inv> Why don't you use them ? |
23:14:32 | FromDiscord | <amadan> sent a code paste, see https://play.nim-lang.org/#ix=4r7r |
23:14:43 | FromDiscord | <Gumbercules> I don't even use exceptions in my code |
23:14:51 | FromDiscord | <Gumbercules> because, what is the point |
23:14:53 | FromDiscord | <inv> except if you have very precise exceptions |
23:14:59 | FromDiscord | <inv> (edit) "except if you have very precise exceptions ... " added "everywhere" |
23:15:01 | FromDiscord | <firasuke> In reply to @amadan "Does this give an": it downloads sequentially |
23:15:25 | FromDiscord | <Gumbercules> most of the time errors aren't even recoverable - as I always opine, exceptions should be reserved for exceptional circumstances |
23:15:27 | FromDiscord | <Gumbercules> not errors |
23:15:38 | FromDiscord | <Gumbercules> most errors are predictable |
23:15:44 | FromDiscord | <ElegantBeef> Cause if i write code that doesnt care about exceptions i do not care about them. If i do care about them i handle them |
23:15:51 | FromDiscord | <ElegantBeef> Meh any other error mechanism is more of a pain imo |
23:15:51 | FromDiscord | <amadan> sent a code paste, see https://play.nim-lang.org/#ix=4r7t |
23:15:59 | FromDiscord | <Gumbercules> I disagree - exceptions are a giant pain in the ass |
23:16:03 | FromDiscord | <ElegantBeef> Lol |
23:16:18 | FromDiscord | <Gumbercules> it's so much easier to know that this unit of code may return a value or may not |
23:16:20 | FromDiscord | <amadan> (edit) "https://play.nim-lang.org/#ix=4r7t" => "https://play.nim-lang.org/#ix=4r7u" |
23:16:24 | FromDiscord | <Gumbercules> and if it doesn't it will return some sort of error |
23:16:25 | FromDiscord | <inv> I think it is another discussion if someone prefers rust's way of error handling |
23:16:43 | FromDiscord | <Gumbercules> I'm not talking about Rust - this applies to programming in general |
23:16:58 | FromDiscord | <Gumbercules> having to wrap sections of code in `try / except` blocks is a giant PITA |
23:17:10 | * | derpydoo joined #nim |
23:17:20 | FromDiscord | <Gumbercules> and then having the cognitive overhead of having to think about what might be thrown and handling those cases individually when often times I just want to say - this thing failed, let's move on and log something |
23:17:34 | FromDiscord | <Gumbercules> or - this thing failed and we need to log and clean up some resources and exit |
23:17:47 | FromDiscord | <inv> @Gumbercules yep, it is very funny to define 100500 `From` in rust code |
23:17:53 | FromDiscord | <inv> (edit) "@Gumbercules yep, it is very funny to define 100500 `From` ... in" added "for errors" |
23:17:53 | FromDiscord | <firasuke> sent a code paste, see https://play.nim-lang.org/#ix=4r7w |
23:18:01 | FromDiscord | <Gumbercules> now, if I'm making a HTTP request and I don't control the other and and I have no idea wtf might happen, then an exception makes a lot of sense |
23:18:12 | FromDiscord | <ElegantBeef> My issue is the exact opposite, every other error method leaks into user code |
23:18:12 | FromDiscord | <Gumbercules> because I can't predict what will occur, so I need to be able to explicitly handle scenarios I care about |
23:18:26 | FromDiscord | <amadan> In reply to @firasuke "hmmm not working, await": hm weirdโตwhat do you mean by isn't picking up? |
23:18:31 | FromDiscord | <ElegantBeef> You now do not have a `: string` you have a proc that returns a bool and you need to check it to validate |
23:18:38 | FromDiscord | <ElegantBeef> Or you have a proc that returns a tuple, or ... |
23:19:02 | FromDiscord | <ElegantBeef> It pollutes user code imo |
23:19:03 | FromDiscord | <Gumbercules> having to check a sum type or option type or whatever you want to package an error in, is just as much work as handling an exception, if not more |
23:19:03 | FromDiscord | <firasuke> In reply to @amadan "hm weird what do": ` template/generic instantiation of async from here` |
23:19:14 | FromDiscord | <inv> @Gumbercules I always has the question about it: do you use / or wrap everything into try_div ? |
23:19:15 | FromDiscord | <Gumbercules> sorry I meant that the handling of various exceptions is generally more work |
23:19:47 | FromDiscord | <Gumbercules> In reply to @inv "<@204328759715692544> I always has": no, I don't use exceptions unless I cannot predict what the outcome of a certain invocation might be, like if I'm making a call to a database or web server etc |
23:19:50 | FromDiscord | <ElegantBeef> I find handling sentinels, results, or options the worst as it obfuscate the actual value |
23:19:57 | FromDiscord | <Gumbercules> generally if I'm making a system call like opening a file or something, I know exactly what is ggoing to happen |
23:20:12 | FromDiscord | <Gumbercules> either it's going to work, or it's not - and I can check several reasons why it might not work ahead of time |
23:20:21 | FromDiscord | <firasuke> In reply to @amadan "hm weird what do": I' am also receiving that expression `downloadFile` has no type or is ambiguous |
23:20:32 | FromDiscord | <ElegantBeef> Opening a file is one of the many operations you cannot check ahead of time |
23:20:39 | FromDiscord | <Gumbercules> I can check if the file exists |
23:20:44 | FromDiscord | <amadan> In reply to @firasuke "` template/generic instantiation of": Try and compile and see what the error isโตI'm running it locally and looks like it might be a problem with harpoon |
23:20:47 | FromDiscord | <Gumbercules> I can check if its size is > 0 |
23:20:49 | FromDiscord | <ElegantBeef> No you cannot |
23:20:54 | FromDiscord | <Gumbercules> all I need is the filepath.... |
23:21:00 | FromDiscord | <ElegantBeef> Except that's a race condition ๐ |
23:21:04 | FromDiscord | <firasuke> In reply to @amadan "Try and compile and": is it working for you? |
23:21:14 | FromDiscord | <Gumbercules> well, exceptions aren't going to help you sort that one out either |
23:21:16 | FromDiscord | <ElegantBeef> TOCTOU! |
23:21:20 | FromDiscord | <ElegantBeef> Yea it is |
23:21:33 | FromDiscord | <ElegantBeef> The entire point is the file exists so the error bubbles up |
23:21:42 | FromDiscord | <amadan> no, it doesn't compile `harpoon.nim(116, 166) Error: undeclared identifier: 'SslError'`โตWhich is causing me to get the same things you are getting |
23:22:04 | FromDiscord | <Gumbercules> why do I want an error to bubble up through my program when I can just handle the damn thing there? |
23:22:08 | FromDiscord | <ElegantBeef> In your way if the file exists then you attempt to open it and it was deleted your do not error you make a new file |
23:22:10 | FromDiscord | <Gumbercules> file doesn't exist? okay - do something else |
23:22:27 | FromDiscord | <Gumbercules> I mean, I'm not trying to solve dumb user behavior here |
23:22:37 | FromDiscord | <inv> I still think that everyone like Result just does not handle enough error |
23:22:40 | FromDiscord | <Gumbercules> I'm trying to make a game - if someone is deleting files they plan on opening while using my software, that's on them |
23:22:40 | FromDiscord | <firasuke> In reply to @amadan "no, it doesn't compile": try `-d:ssl` |
23:22:53 | FromDiscord | <ElegantBeef> In reply to @inv "I still think that": What do you mean? |
23:23:01 | FromDiscord | <amadan> oh god can't believe I forgot to do that ๐
|
23:23:02 | FromDiscord | <inv> Becase it will make _every_ function with try_ prefix |
23:23:15 | FromDiscord | <Gumbercules> I wouldn't go down that path |
23:23:23 | FromDiscord | <ElegantBeef> A lot of rust functions that return results do not prefix with try |
23:23:29 | FromDiscord | <Gumbercules> ^ |
23:23:37 | FromDiscord | <Gumbercules> All you need is a tuple |
23:23:48 | FromDiscord | <ElegantBeef> Gumber is on the Go train |
23:23:48 | FromDiscord | <amadan> sent a code paste, see https://play.nim-lang.org/#ix=1lw6 |
23:23:49 | FromDiscord | <Gumbercules> or sum type or anonymous union or optional type or whatever |
23:23:52 | FromDiscord | <Gumbercules> man fuck go |
23:23:54 | FromDiscord | <Gumbercules> I'm on the C train |
23:23:57 | FromDiscord | <inv> @ElegantBeef in most of the languages where is compromise between what results Result what is not. If you want to catch everything very accurate - you should not use + - / at all |
23:24:05 | FromDiscord | <Gumbercules> all aboard! |
23:24:08 | FromDiscord | <ElegantBeef> Go's error handling is literally just "Return whatever you need" |
23:24:25 | FromDiscord | <firasuke> sent a code paste, see https://play.nim-lang.org/#ix=4dFL |
23:24:25 | FromDiscord | <Gumbercules> The only thing Go gets even close to correct is its concurrency model |
23:24:27 | FromDiscord | <firasuke> the non async version takes a uri |
23:24:32 | FromDiscord | <firasuke> thanks for explaining that |
23:24:46 | FromDiscord | <ElegantBeef> I'm still lost at what you mean inv |
23:24:48 | FromDiscord | <firasuke> just reached the same conclusion as well |
23:25:33 | FromDiscord | <inv> @ElegantBeef I mean that it is elways balance what to wrap in Result and what is not to wrap |
23:25:42 | FromDiscord | <ElegantBeef> Ah right |
23:26:10 | FromDiscord | <ElegantBeef> That's the issue with Results though it requires explictly stating the resultant values |
23:26:21 | FromDiscord | <firasuke> what's a good way to draw progress bars in nim? |
23:26:25 | FromDiscord | <Gumbercules> most of the time you don't even care about them though |
23:26:32 | FromDiscord | <Gumbercules> you care whether it succeeded or didn't |
23:27:07 | FromDiscord | <ElegantBeef> Exception messages beg to differ |
23:27:15 | FromDiscord | <Gumbercules> it's very rare that you're going to handle application logic differently if you failed to open a file because it didn't exist or because you opened it and it was the wrong format |
23:27:22 | FromDiscord | <inv> and if someone says "I like to wrap everything", I still that he just ignores a lot of error, because if you want 100% sure - you have to wrap about everything and the Result wrapping becomes hell => that if why I still prefer exceptions after few years of prod rust dev |
23:27:23 | FromDiscord | <Gumbercules> I mean, you as a developer might care, but your end user won't |
23:27:30 | FromDiscord | <inv> (edit) "dev" => "development" |
23:27:30 | FromDiscord | <Gumbercules> and your application won't most of the time |
23:27:44 | FromDiscord | <Gumbercules> there's two errors - recoverable errors and errors that are not recoverable |
23:27:50 | FromDiscord | <Gumbercules> it should be framed in this way |
23:28:01 | FromDiscord | <ElegantBeef> I really like exceptions cause it never enters user code unless they care |
23:28:11 | FromDiscord | <Gumbercules> and then you distinguish those by ones you consider exceptional and ones you don't |
23:28:17 | FromDiscord | <ElegantBeef> I do not care if a procedure can fail, just let me right code |
23:28:25 | FromDiscord | <ElegantBeef> (edit) "right" => "write" |
23:28:29 | FromDiscord | <Gumbercules> except once you know something raises you need to care |
23:28:45 | FromDiscord | <ElegantBeef> Except you're wrong |
23:28:52 | FromDiscord | <Gumbercules> I mean you don't need to explicitly handle the failure |
23:29:01 | FromDiscord | <Gumbercules> but you're going to know it could fail in this way which you might not really care about |
23:29:04 | FromDiscord | <inv> / 0 is pretty recoverable, but it panics if I remember correct |
23:29:04 | FromDiscord | <Gumbercules> you probably just care if it will fail or not |
23:29:13 | FromDiscord | <ElegantBeef> If you do not care it does not matter |
23:29:26 | FromDiscord | <Gumbercules> well it might matter, just not in the way it fials |
23:29:26 | FromDiscord | <ElegantBeef> <https://github.com/beef331/graffiti/blob/master/src/graffiti.nim> Is peak IDGAF Nim |
23:29:29 | FromDiscord | <Gumbercules> (edit) "fials" => "fails" |
23:29:47 | FromDiscord | <Gumbercules> generally if I need to parse a file I'm going to check if it exists |
23:29:49 | FromDiscord | <Gumbercules> I'm going to open it |
23:29:53 | FromDiscord | <Gumbercules> I'm going to try and parse it |
23:29:55 | FromDiscord | <ElegantBeef> I never check if a file exists |
23:29:58 | FromDiscord | <ElegantBeef> I just open it ๐ |
23:30:11 | FromDiscord | <Gumbercules> and then you have to handle the exception and wrap the attempt in a try / catch |
23:30:18 | FromDiscord | <Gumbercules> and know that it needs to be wrapped in a try / catch |
23:30:30 | FromDiscord | <inv> In reply to @ElegantBeef "I really like exceptions": Apply the same for `exeption:` string - to not litter in the string with exception-types if not necessary ๐ |
23:30:32 | FromDiscord | <ElegantBeef> If i care i annotate `{.raises: [].}` |
23:30:33 | FromDiscord | <Gumbercules> vs just examining some result and telling your user, shit, I couldn't open this |
23:30:40 | FromDiscord | <Gumbercules> yeah I mean for librarry authors I get it |
23:30:50 | FromDiscord | <Gumbercules> for application developers, exceptions seem very silly most of the time |
23:31:13 | FromDiscord | <ElegantBeef> In reply to @inv "Apply the same for": Except it is necessary due to the choice of `except` catching defects |
23:31:25 | FromDiscord | <ElegantBeef> As long as `except` catches defect that's needed |
23:31:30 | FromDiscord | <Gumbercules> (edit) "librarry" => "library" |
23:32:14 | FromDiscord | <ElegantBeef> And changing the behaviour of a bare except would have been a massive silent breaking change |
23:33:36 | FromDiscord | <inv> @ElegantBeef loot at the PR: https://github.com/treeform/jsony/pull/58/files |
23:33:42 | FromDiscord | <inv> (edit) "loot" => "lool" |
23:33:47 | FromDiscord | <inv> (edit) "lool" => "look" |
23:33:53 | FromDiscord | <ElegantBeef> What about it? |
23:34:06 | FromDiscord | <inv> jsony: Fix BareExcept warnings on Nim |
23:34:23 | FromDiscord | <ElegantBeef> What am i supposed to be looking at i mean |
23:34:48 | FromDiscord | <inv> that the PR just looks stupid how the code looks |
23:34:56 | FromDiscord | <ElegantBeef> It doesnt look stupid |
23:35:04 | FromDiscord | <ElegantBeef> Like i said i do not do bare excepts |
23:35:15 | FromDiscord | <Gumbercules> Some good grammatical fixes in that PR |
23:35:18 | FromDiscord | <Gumbercules> I approve |
23:35:38 | FromDiscord | <inv> it is very stupid: you just write "default" meaning of `except` with more words |
23:35:48 | FromDiscord | <ElegantBeef> You're not going to win me over here |
23:35:59 | FromDiscord | <ElegantBeef> I already said i'd prefer bare except not accepting defects |
23:36:09 | FromDiscord | <ElegantBeef> It did and still does, so this is the best thing |
23:37:32 | FromDiscord | <ElegantBeef> If you really want to type less you can do `type Error = CatchableError` ๐ |
23:38:39 | FromDiscord | <inv> why not: `except CatchableError:` => `except:`โตand `except Defect` => `except Defect` , but there is long discussion behind it is it necessary or smth else is necessary |
23:38:54 | FromDiscord | <ElegantBeef> I said why |
23:38:59 | FromDiscord | <ElegantBeef> It'd be a silent breaking change |
23:39:09 | FromDiscord | <inv> In reply to @ElegantBeef "If you really want": Yep, I spent 10+ years programming APL-like language |
23:39:37 | FromDiscord | <inv> I do not want to type even "type Error = CatchableError" |
23:39:42 | FromDiscord | <inv> (edit) ""type" => "`type" | "CatchableError"" => "CatchableError`" |
23:40:21 | FromDiscord | <inv> (edit) "CatchableError`" => "CatchableError`, what is the reason is shold be default `except:`" |
23:40:27 | * | rockcavera quit (Read error: Connection reset by peer) |
23:41:26 | FromDiscord | <inv> and the next problem:โตI still except that a lot of people will write `except CA, Defect` and, you will find it only in your prod after fail |
23:41:36 | FromDiscord | <inv> (edit) "fail" => "it fails" |
23:41:46 | * | rockcavera joined #nim |
23:41:54 | FromDiscord | <inv> (edit) "except" => "expect" |
23:43:33 | FromDiscord | <ElegantBeef> Look at this bold claim that i make prod code |
23:44:03 | FromDiscord | <ElegantBeef> What i write is barely counted as "code" |
23:46:56 | FromDiscord | <ElegantBeef> @Yepoleb damn a 1 hour turn around ๐ |
23:47:27 | NimEventer | New Nimble package! fungus - Rust-like tuple enums, see https://github.com/beef331/fungus |
23:47:58 | FromDiscord | <ElegantBeef> Hey inv you said you write Rust, know of any good simple ADT samples i can copy from ๐ |
23:51:12 | FromDiscord | <Yepoleb> Wth why is beef on discord |
23:51:20 | FromDiscord | <Elegantbeef> Matrix bridge was being sloooow |
23:51:28 | FromDiscord | <Elegantbeef> Seems fine now |
23:52:14 | FromDiscord | <Yepoleb> Are you impressed by my speed at pressing a button? |
23:52:20 | FromDiscord | <Elegantbeef> Indeed, some of my packages took days iirc |
23:55:18 | FromDiscord | <Yepoleb> I actually even gave it a quick review |
23:56:17 | FromDiscord | <Elegantbeef> Damn you must make .2c/hr |
23:57:21 | FromDiscord | <Yepoleb> We greatly improved package acceptance time through the magic of finding someone who feels responsible |
23:58:38 | FromDiscord | <Elegantbeef> Do not lie there's a big man with a bat standing behind you |
23:58:38 | FromDiscord | <Yepoleb> Well, the first step was realizing everyone assumed someone else was doing the job |