00:02:11 | PMunch | Man, this binary format parsing macro is coming along quite nicely. Currently it supports reading out various size integers and floats (including custom bit-lengths), arrays of set length (including length read earlier in the format), open arrays with termination character, automatic handling of magic numbers, and custom parser for parts of the format! |
00:03:36 | PMunch | And all you need in your code is something like this: http://ix.io/CPj |
00:05:46 | PMunch | That reads and checks a magic uint of size 8 to be equal to 128. Then reads a uint16 called size, used to read an array of int8 with that size. Then it reads an array of null terminated strings until it encounters the string "9xC" (which is not added to the list). After that it calls the list parser that reads a size and a new sequence of numbers, and finally it checks if the file ends with a uint8 with value 67 |
00:06:04 | PMunch | s/array/seq |
00:07:12 | * | rbrt joined #nim |
00:22:15 | * | yglukhov joined #nim |
00:22:41 | * | SenasOzys quit (Ping timeout: 260 seconds) |
00:22:59 | * | vlad1777d quit (Ping timeout: 268 seconds) |
00:25:29 | * | rbrt quit (Quit: Oíche mhaith) |
00:26:10 | * | rbrt joined #nim |
00:27:18 | * | yglukhov quit (Ping timeout: 268 seconds) |
00:28:10 | * | PMunch quit (Quit: leaving) |
00:37:56 | * | skrylar quit (Remote host closed the connection) |
00:39:00 | FromGitter | <zetashift> @PMunch that example looks concise |
00:39:04 | FromGitter | <zetashift> I like it |
00:39:20 | * | madpat quit (Read error: Connection reset by peer) |
00:40:17 | * | madpat joined #nim |
00:44:42 | FromGitter | <zacharycarter> very cool PMunch! |
01:00:09 | * | d10n-work quit (Quit: Connection closed for inactivity) |
01:03:28 | * | yglukhov joined #nim |
01:04:52 | * | MJCaley quit (Quit: MJCaley) |
01:07:01 | * | redlegion quit (Ping timeout: 260 seconds) |
01:07:43 | * | yglukhov quit (Ping timeout: 248 seconds) |
01:08:04 | * | derlafff quit (Quit: No Ping reply in 180 seconds.) |
01:09:10 | * | derlafff joined #nim |
01:09:35 | * | arecaceae quit (Ping timeout: 240 seconds) |
01:10:48 | * | arecaceae joined #nim |
01:11:18 | * | redlegion joined #nim |
01:11:18 | * | redlegion quit (Changing host) |
01:11:18 | * | redlegion joined #nim |
01:12:06 | * | MJCaley joined #nim |
01:23:35 | * | rbrt quit (Quit: Oíche mhaith) |
01:33:57 | * | rauss quit (Quit: WeeChat 2.0) |
01:35:07 | * | rauss joined #nim |
01:35:40 | * | Miguelngel[m] sent a long message: Miguelngel[m]_2017-12-06_01:35:40.txt <https://matrix.org/_matrix/media/v1/download/matrix.org/mdKybVqDiaodRCzTCxkZIcHq> |
01:45:37 | * | marenz_ quit (Ping timeout: 268 seconds) |
01:49:01 | FromGitter | <zacharycarter> what does generateString look like? |
01:56:56 | * | skrylar joined #nim |
02:01:35 | Miguelngel[m] | proc generateString(): string = |
02:01:36 | Miguelngel[m] | discard |
02:03:25 | Miguelngel[m] | If I change the body to: `result = "something"` it compiles correctly. So I must guess that the compiler error was difficult to understand. |
02:03:53 | * | xet7 quit (Ping timeout: 255 seconds) |
02:03:56 | Miguelngel[m] | What causes the different behaviours? |
02:04:51 | * | xet7 joined #nim |
02:08:18 | * | Miguelngel[m] sent a long message: Miguelngel[m]_2017-12-06_02:08:18.txt <https://matrix.org/_matrix/media/v1/download/matrix.org/epniNsYCAaIhlVcvsLPBgkso> |
02:10:16 | * | vivus quit (Quit: Leaving) |
02:17:44 | skrylar | is there like, a favorite kind of stylesheet for docs |
02:18:05 | skrylar | i know theres that "gravity learn" theme that looks like read the docs |
02:28:53 | FromGitter | <Varriount> skrylar: I've been asking myself the same question lately. |
02:29:30 | skrylar | varriount: well, elementaryOS' stylesheet is ostensibly free to use, and is Apple-y. Gravity Learn is for hugo, and is fine if you like Read The Docs. |
02:29:44 | FromGitter | <Varriount> skrylar: I used this for a recent tool manual: https://gist.github.com/killercup/5917178 |
02:30:06 | skrylar | part of texinfo->docbook->??? is you can derp around with the stylesheets. so |
02:30:11 | skrylar | they have one that makes epubs for instance |
02:30:44 | skrylar | bleh, theres no screenshot of that stylesheet ._. |
02:31:35 | skrylar | docbook is actually kinda of nice, even if XSLT is not |
02:32:10 | FromGitter | <Varriount> skrylar: It's reminiscent of Nim's documentation |
02:32:21 | skrylar | hmm |
02:32:31 | skrylar | well i've been hung up on whether to borrow the stylesheet from nimdoc or from firebird |
02:32:32 | FromGitter | <Varriount> No off-white background though. |
02:35:20 | skrylar | need to get an opinion on some regression code at some point |
02:35:37 | FromGitter | <Varriount> skrylar: Oh? |
02:35:41 | skrylar | i use an object to store accumulators for ex. linear and power regression. there is then an 'add' method, and a final method that crunches the output |
02:36:01 | skrylar | it feels wrong but it prevents mixing the math with extracting from your other data types |
02:37:30 | skrylar | varriount, mratsim: https://gist.github.com/Skrylar/42300800e29f81f2c69bebeba38bbe6d |
02:39:38 | * | chemist69 quit (Ping timeout: 255 seconds) |
02:42:35 | skrylar | minor annoyance: why can i not name anchors in texinfo |
02:43:05 | skrylar | i mean there is @anchor{derp} but i can't seem to do like, @nchor{derp, How to herp the derp} such that later @see{derp} inserts "See: How to herp the derp" |
02:43:10 | skrylar | you have to label it at the site of cross reference |
02:43:13 | skrylar | :| |
02:53:33 | * | chemist69 joined #nim |
03:04:06 | FromGitter | <loongw> Hi, there ⏎ ⏎ ```code paste, see link``` ⏎ ⏎ This code will crash, what's wrong? [https://gitter.im/nim-lang/Nim?at=5a275e26ba39a53f1a25f111] |
03:12:04 | * | MJCaley quit (Quit: MJCaley) |
03:20:39 | * | SenasOzys joined #nim |
03:28:01 | * | endragor joined #nim |
03:28:20 | * | rbrt joined #nim |
03:30:24 | * | rbrt quit (Client Quit) |
03:34:25 | * | madpat quit (Ping timeout: 248 seconds) |
03:36:13 | * | madpat joined #nim |
03:39:32 | * | SenasOzys quit (Remote host closed the connection) |
03:40:47 | * | SenasOzys joined #nim |
03:43:41 | * | madpat quit (Ping timeout: 276 seconds) |
03:44:31 | * | SenasOzys quit (Remote host closed the connection) |
03:45:18 | * | SenasOzys joined #nim |
03:50:10 | * | madpat joined #nim |
03:52:23 | FromGitter | <Varriount> @loongw What do you mean? It works fine for me. |
03:55:41 | * | SenasOzys quit (Ping timeout: 255 seconds) |
03:57:44 | FromGitter | <loongw> It crashes on Windows and hangs on macOS |
03:58:11 | FromGitter | <Varriount> Hm. I'd ask Araq. |
04:04:43 | FromGitter | <Varriount> @loongw What happens if you use a ref Thread instead? |
04:13:24 | FromGitter | <Varriount> @loongw It seems to have something to do with copying the thread structure. |
04:23:43 | FromGitter | <loongw> Yeah, ref works fine. |
04:24:48 | FromGitter | <Varriount> @loongw `let t = testCreateThread()` can create a copy for object types (and Thread is an object type) |
04:27:56 | FromGitter | <loongw> Yes, I know. But does copying of object always has issue in Nim? |
04:31:58 | FromGitter | <Varriount> loongw: Not normally. |
04:32:32 | FromGitter | <Varriount> @loongw Threads are very tricky structures. They have to contain things like os-level thread data, garbage collector data, etc. |
04:33:30 | FromGitter | <Varriount> @loongw You would have to ask Araq what is happening. |
04:37:32 | FromGitter | <loongw> got it. thanks for explaining |
04:42:58 | FromGitter | <loongw> seems like it is caused by a stack variable overflow |
04:43:11 | FromGitter | <loongw> i am debugging with lldb |
04:43:48 | FromGitter | <loongw> ```code paste, see link``` [https://gitter.im/nim-lang/Nim?at=5a277584540c78242d8cdffc] |
04:44:30 | FromGitter | <loongw> pthread_join will override dataFn's value |
04:52:59 | * | skrylar quit (Remote host closed the connection) |
04:58:50 | * | madpat quit (Read error: Connection reset by peer) |
04:58:57 | * | madpat joined #nim |
05:22:37 | FromGitter | <loongw> ``` if pthread_create(t.sys, a, threadProcWrapper[TArg], addr(t)) != 0:``` ⏎ ⏎ Here. createThread use the Thread[T]'s address directly. ⏎ So it has problem if it is a stack variable. [https://gitter.im/nim-lang/Nim?at=5a277e9cc65707ba2b195bc4] |
05:26:31 | * | madpat quit (Ping timeout: 240 seconds) |
05:29:23 | * | madpat joined #nim |
05:29:51 | * | dddddd quit (Remote host closed the connection) |
05:33:08 | * | endragor quit (Remote host closed the connection) |
05:33:47 | * | madpat quit (Ping timeout: 255 seconds) |
05:38:57 | * | madpat joined #nim |
05:41:33 | * | endragor joined #nim |
05:43:01 | * | madpat quit (Ping timeout: 240 seconds) |
05:43:34 | * | madpat joined #nim |
05:59:59 | * | madpat quit (Ping timeout: 248 seconds) |
06:01:50 | * | madpat joined #nim |
06:04:53 | FromGitter | <Varriount> @loongw That should either be fixed, or properly mentioned in the documentation. |
06:21:59 | * | BitPuffin|osx joined #nim |
06:22:38 | * | chemist69 quit (Ping timeout: 255 seconds) |
06:23:00 | * | chemist69 joined #nim |
06:27:37 | * | endragor quit (Remote host closed the connection) |
06:31:55 | FromGitter | <gogolxdong> I'm writing an e-book of Nim in chinese for Turing Publish House. |
06:34:22 | FromGitter | <gogolxdong> gathering news and features |
06:38:41 | * | mwbrown quit (Ping timeout: 240 seconds) |
06:41:29 | FromGitter | <gogolxdong> any news is welcomed. |
06:44:28 | * | nsf joined #nim |
06:48:08 | * | endragor joined #nim |
06:50:39 | * | Sargun joined #nim |
06:50:49 | Sargun | What's gogc, and regions gc? |
06:53:19 | * | endragor quit (Ping timeout: 248 seconds) |
06:55:30 | * | jjido joined #nim |
06:55:42 | * | jjido quit (Remote host closed the connection) |
06:55:59 | * | Guest45571 joined #nim |
06:56:15 | * | endragor joined #nim |
07:04:22 | FromGitter | <Varriount> Sargun: gogc uses the gc that Go uses. |
07:04:45 | FromGitter | <Varriount> The Regions GC isn't so much a GC, as a way of doing manual memory management. It isn't documented for some reason. |
07:08:27 | Sargun | Is there any downside to using the Go gc? |
07:08:59 | Xe | you have to define a special entrypoint iirc unless they fixed that |
07:17:35 | * | madpat quit (Ping timeout: 240 seconds) |
07:22:36 | * | madpat joined #nim |
07:32:05 | * | madpat quit (Ping timeout: 240 seconds) |
07:33:18 | Sargun | I'm writing a Nim libraryish |
07:34:19 | * | mwbrown joined #nim |
07:39:17 | * | gokr joined #nim |
07:39:35 | * | madpat joined #nim |
07:39:39 | Sargun | And stack / region GC? |
07:51:52 | Tanger | Hey folks, anybody know if you can use custom exceptions with the {.raises.} pragma? |
08:01:58 | Araq | Tanger: why wouldn't you? |
08:03:43 | * | madpat quit (Read error: Connection reset by peer) |
08:04:33 | * | madpat joined #nim |
08:06:08 | * | dashed quit (Ping timeout: 240 seconds) |
08:07:00 | * | dashed joined #nim |
08:07:39 | Tanger | @Araq: Haha, that's a good point if I actually think about it. I did not read the limitations section on the asyncdispatch module "The effect system (raises: []) does not work with async procedures." |
08:08:21 | Araq | Sargun: just use the default GC until we have something better. Hint: it won't be Go's GC. |
08:16:08 | * | surma quit (Ping timeout: 240 seconds) |
08:19:11 | FromGitter | <alehander42> PMunch: very nice! I needed such a macro like that before, yours seems very useful |
08:22:28 | * | yglukhov joined #nim |
08:26:15 | * | yglukhov quit (Remote host closed the connection) |
08:26:30 | * | yglukhov joined #nim |
08:27:47 | * | claudiuinberlin joined #nim |
08:32:30 | * | Ven`` joined #nim |
08:32:32 | * | Ven`` quit (Client Quit) |
08:33:45 | FromGitter | <Varriount> Sargun: It's highly unlikely the default GC is going to be the slowest thing in your program. |
08:34:54 | FromGitter | <Varriount> Even when it is, it's usually due to inefficient allocation patterns (let's make copies of a large string in a critical loop) |
08:45:19 | * | Guest45571 quit (Remote host closed the connection) |
08:51:44 | * | gangstacat quit (Quit: Ĝis!) |
09:00:56 | * | jjido joined #nim |
09:02:18 | * | floppydh joined #nim |
09:02:51 | * | madpat quit (Read error: No route to host) |
09:05:41 | * | madpat joined #nim |
09:06:05 | * | jjido quit (Ping timeout: 276 seconds) |
09:09:37 | * | SenasOzys joined #nim |
09:10:01 | * | xkapastel quit (Quit: Connection closed for inactivity) |
09:10:52 | * | JappleAck joined #nim |
09:21:09 | * | PMunch joined #nim |
09:22:43 | * | madpat quit (Quit: Have a good day! :)) |
09:31:03 | * | gangstacat joined #nim |
09:36:26 | Sargun | Araq: I'm trying to compile a library that will eventually link into a Linux kernel module. |
09:36:58 | Sargun | It seems like the standard gc refers to stdio in a couple places |
09:37:27 | Araq | where? |
09:50:08 | Araq | argh... found my bug ... ugh, that was a hard one |
09:50:19 | Araq | now how do I fix this... |
09:53:37 | FromGitter | <mratsim> Crystal lang published there language survey, apparently documentation is not an issue, though people also want Elm-like compiler errors :D https://www.reddit.com/r/programming/comments/7hpw47/crystal_survey_2017_results/ |
10:00:21 | Araq | I wanted an O(1) allocator. I almost got it working. |
10:02:18 | FromGitter | <mratsim> But? |
10:04:20 | Araq | but now I have these lovely random crashes :P |
10:06:54 | FromGitter | <Varriount> Araq: How is that even possible? Isn't an allocator usually O(n) for some small constant of N, due to memory tracking? |
10:07:23 | Araq | what is a "small constant of N"? |
10:07:54 | Araq | O(1) means a bounded number of instructions independent of the heap size |
10:08:31 | Araq | that is a solved problem, see TLSF |
10:19:22 | Araq | note that this only covers traditional allocation with explicit dealloc, a GC with O(1) behaviour is unknown to me |
10:25:18 | * | surma joined #nim |
11:03:52 | * | madpat joined #nim |
11:14:27 | FromGitter | <ephja> how were the first windows api bindings generated? |
11:27:24 | Araq | winlean, written by hand, the others were pas2nim'ed |
11:38:34 | * | madpat quit (Read error: Connection reset by peer) |
11:38:58 | * | madpat joined #nim |
11:47:05 | * | skoude joined #nim |
11:52:46 | * | SenasOzys quit (Ping timeout: 260 seconds) |
11:53:37 | * | skoude quit (Ping timeout: 248 seconds) |
12:03:32 | * | SenasOzys joined #nim |
12:11:09 | * | madpat left #nim ("Leaving") |
12:13:30 | * | skoude joined #nim |
12:18:09 | * | skoude quit (Ping timeout: 248 seconds) |
12:21:05 | * | ftsf quit (Ping timeout: 276 seconds) |
12:26:00 | * | elrood joined #nim |
12:35:08 | * | Vladar joined #nim |
12:46:44 | * | ftsf joined #nim |
12:59:56 | yglukhov | Araq: mind merging? https://github.com/nim-lang/Nim/pull/6876 |
13:02:58 | * | dddddd joined #nim |
13:08:50 | * | marenz_ joined #nim |
13:15:19 | * | jjido joined #nim |
13:46:33 | * | Jesin quit (Quit: Leaving) |
13:55:51 | Vladar | Hm, is it true that there no media library (for video files) wrappers for Nim at the moment? |
14:09:13 | FromGitter | <alehander42> I am working with many variants with several branches, similar to ⏎ ⏎ `````` [https://gitter.im/nim-lang/Nim?at=5a27fa09232e79134d167c87] |
14:09:20 | FromGitter | <alehander42> which sucks a lot |
14:09:48 | FromGitter | <alehander42> I know I can make a template for each of the `of-s`, but I have another solution: we know the fields in each branch, so I can create a macro |
14:09:53 | FromGitter | <alehander42> that works like |
14:10:34 | FromGitter | <alehander42> ```code paste, see link``` [https://gitter.im/nim-lang/Nim?at=5a27fa59232e79134d167edf] |
14:10:52 | FromGitter | <alehander42> does this seem useful for stdlib / nimble package ? |
14:16:59 | FromGitter | <alehander42> maybe for patty |
14:18:29 | FromGitter | <ephja> you can reduce typing by dividing it up into sets |
14:20:18 | FromGitter | <alehander42> yes ofc, but this would require defining additional 3-4 sets for each variant object |
14:20:24 | FromGitter | <alehander42> manually |
14:21:08 | FromGitter | <alehander42> and hasAttr will just create the set based on getType |
14:28:49 | FromGitter | <zetashift> How would I go around getting the key of max(aSeq)? |
14:30:16 | PMunch | Is there a way to get undeclared identifiers in a Nim macro? I want the user to be able to supply names of fields that will be used in the output, but the names are wrapped in a structure and I would like to add the correct "path" to any variable that isn't declared |
14:30:57 | FromGitter | <alehander42> PMunch: untyped macros should work for that? how does an invocation of your macro look? |
14:32:01 | PMunch | http://ix.io/CQz/ |
14:32:07 | PMunch | That's a sample invocation |
14:32:43 | FromGitter | <alehander42> I guess data is undefined? |
14:32:43 | * | madpat joined #nim |
14:32:47 | PMunch | size, data, str, and inner are wrapped up in a type and set as the return type from the created parser. |
14:32:48 | FromGitter | <alehander42> for example |
14:32:58 | PMunch | Well, data is automatically defined |
14:33:26 | PMunch | But simply inputting size in the read statement for data wouldn't work as it is declared as "result.size" in the generated code |
14:34:06 | FromGitter | <alehander42> aaaah, so you want to find out if a variable *is* undeclared |
14:35:08 | PMunch | Yes |
14:35:45 | PMunch | I basically want to go through all that is passed in to the data[] bracket expression and add "result." to any undeclared field |
14:36:40 | FromGitter | <alehander42> so eg `u16: size` defines that consumed u16 will be assigned to size field? |
14:36:51 | FromGitter | <alehander42> (trying to translate example) |
14:37:23 | PMunch | Yea |
14:38:05 | PMunch | That code would generate the return type: tuple[size: uint16, data: seq[int8], str: seq[string], inner: type(:tmp135854.list())] |
14:38:34 | PMunch | So when reading data I want to access the size field of the return type |
14:38:57 | FromGitter | <alehander42> ok, so why can't you make 2 passes |
14:38:58 | PMunch | For efficiency reasons I want to read directly into the result variable, so I can't have a bunch of local variables for each field |
14:39:17 | FromGitter | <alehander42> on the first pass you load all the fields that are inferred from the dsl |
14:39:24 | FromGitter | <alehander42> and on the second you resolve them e.g. in data |
14:40:24 | FromGitter | <alehander42> after first pass: `size, data, str, inner` are fields and on second pass you replace only them with result in [] |
14:43:53 | PMunch | Problem is that some fields might appear after a variable data array |
14:44:10 | PMunch | That would be a complete mess to implement.. |
14:44:45 | FromGitter | <alehander42> but that's the point of two passes |
14:44:53 | FromGitter | <alehander42> in the first pass you only collect field names |
14:45:56 | FromGitter | <alehander42> it seems easy: just run a loop on each `a: b`, check if b is an ident or ident[..] and if yes, add it to field set |
14:46:10 | FromGitter | <alehander42> before your current code |
14:46:26 | PMunch | Hmm, I don't think I follow.. |
14:47:17 | * | jjido quit (Ping timeout: 255 seconds) |
14:47:24 | FromGitter | <alehander42> a field is defined when the user writes ⏎ ⏎ `<size>: <label> | <label>[..]` |
14:47:25 | FromGitter | <alehander42> right ? |
14:47:40 | PMunch | Yeah |
14:48:07 | FromGitter | <alehander42> so, you just run a single loop through the initial ast nodes, and you collect those `labels` in a set |
14:48:38 | FromGitter | <alehander42> and now you have a set with the var names that you need to tweak |
14:49:07 | PMunch | Well, I can do it in a single pass actually. You're only allowed to reference upwards |
14:49:20 | PMunch | So I would have already seen an identifier before needed to convert it |
14:49:43 | FromGitter | <alehander42> well, then you dont have a problem (but a two pass approach will give you the chance to reference stuff in each direction) |
14:50:26 | PMunch | Yeah, but that wouldn't make any sense in the output context of the macro :) |
14:50:45 | * | dexterk_ joined #nim |
14:51:02 | * | dexterk quit (Ping timeout: 260 seconds) |
14:51:43 | FromGitter | <alehander42> well yeah :D |
14:51:45 | * | gokr quit (Ping timeout: 248 seconds) |
14:52:07 | FromGitter | <alehander42> it would be a bizarre protocol to need it |
14:53:19 | FromGitter | <alehander42> will you publish a library with the dsl, I would love to use something like that for some formats of mine |
14:58:11 | PMunch | Yeah, that's the idea |
14:58:30 | PMunch | It works pretty well now, this is one of the final things I need to add before sharing it :) |
14:59:33 | FromGitter | <alehander42> :D but if you just reference previous fields, you already know what is declared, right |
14:59:36 | PMunch | I actually don't have a specific use case for it at the moment. I'm just doing this at work in C++ and wanted to see how much prettier I could do it in Nim :) |
15:00:08 | PMunch | Well yeah, but I was hoping to do it without keeping a list myself |
15:00:21 | PMunch | But come to think of it it's probably better anyways |
15:00:30 | * | Jesin joined #nim |
15:00:37 | PMunch | So a size field in the format would shadow an external size field and not the other way around |
15:01:59 | PMunch | Hmm, can't I .mitems through a NimNode? |
15:03:43 | FromGitter | <alehander42> a list would be very easy to keep up, you don't need to introduce ambiguity : ) |
15:04:04 | FromGitter | <alehander42> btw can I convert A..B to a set :? |
15:05:40 | FromGitter | <alehander42> actually a seq[enum] to a set :? |
15:06:49 | * | jjido joined #nim |
15:09:15 | FromGitter | <Varriount> @alehander42 `var s: set[T]; for e in seq: s.incl(e)` |
15:09:47 | PMunch | well you have this: https://github.com/nim-lang/Nim/blob/master/lib/pure/collections/sets.nim#L377 |
15:09:58 | PMunch | Which does pretty much what Varriount said |
15:10:11 | FromGitter | <Varriount> PMunch: But those are hash sets, not bit sets |
15:10:26 | FromGitter | <Varriount> If you have an enum, you might as well use a bit set |
15:10:27 | FromGitter | <alehander42> yep, I just made a func for it |
15:10:49 | FromGitter | <alehander42> well those are coming from field variant def-s in a macro |
15:10:57 | PMunch | Oh right, they have some confusing nomenclature :P |
15:11:28 | FromGitter | <alehander42> btw can I .. have a recursive iterator :D |
15:11:41 | FromGitter | <alehander42> I just defined one and I got attempting to call undeclared routine: 'tree' |
15:12:14 | * | endragor quit (Remote host closed the connection) |
15:12:33 | FromGitter | <alehander42> and I also get recursive dependency if I change it a bit |
15:12:47 | * | endragor joined #nim |
15:13:09 | FromGitter | <Varriount> @alehander42 Is it a closure iterator, or an inline iterator? |
15:13:17 | FromGitter | <alehander42> inline |
15:13:32 | FromGitter | <Varriount> And have you forwarded the type definition? |
15:13:43 | FromGitter | <Varriount> And could you show you code? |
15:14:18 | FromGitter | <alehander42> of an iterator? |
15:14:26 | FromGitter | <alehander42> ```code paste, see link``` [https://gitter.im/nim-lang/Nim?at=5a280951cc1d527f6bfabc7d] |
15:14:40 | FromGitter | <alehander42> and if I add `tree(node)` in else |
15:14:47 | FromGitter | <alehander42> it fails |
15:16:17 | FromGitter | <alehander42> and ⏎ ⏎ ``` var t = tree ⏎ yield t(node)``` [https://gitter.im/nim-lang/Nim?at=5a2809c13ae2aa6b3f938d82] |
15:16:34 | FromGitter | <alehander42> seems to be working, |
15:18:38 | FromGitter | <alehander42> I actually loop through sons, no `tree(node)`, but the error is the same |
15:19:59 | FromGitter | <Varriount> @alehander42 What you need is a 'yield from', which Nim doesn't have (yet) |
15:21:53 | * | Snircle quit (Quit: Textual IRC Client: www.textualapp.com) |
15:23:42 | FromGitter | <alehander42> yeah, it crashes with no return symbol if I try to use it |
15:24:29 | FromGitter | <alehander42> ok, I can use a closure iterator, it seems to work rec-ly |
15:24:40 | FromGitter | <alehander42> (I guess its slower) |
15:24:55 | FromGitter | <alehander42> but otherwise I'd use rec functions anyway |
15:25:34 | FromGitter | <Varriount> @alehander42 I would recommend just using a stack. That's what a recursive function uses anyway. |
15:25:37 | * | arthurz joined #nim |
15:26:29 | FromGitter | <alehander42> well if I need to optimize this, I will |
15:26:32 | arthurz | Hi @here, anybody has pointers onto how to retrieve and put files off/to AWS S3? |
15:28:11 | PMunch | arthurz, this might be of help: https://github.com/aidansteele/aws_sdk.nim |
15:28:42 | PMunch | Pretty bare-bones, but at least it does the signing which is normally a PITA |
15:29:18 | arthurz | Indeed @pmunch, except I do not like the "very much work in progress" part |
15:29:21 | arthurz | Thank you |
15:29:33 | PMunch | Welcome to Nim :P |
15:30:03 | PMunch | AWS is a huge API, so it will probably take a while until someone has time to implement all of it in Nim |
15:30:53 | arthurz | PMunch++ |
15:33:00 | Sargun | Araq: lib/nim/system/alloc.nim(306, 13) Error: undeclared identifier: 'stdout' |
15:35:10 | Sargun | If you're right about Go gc needing a special entrypoint, or background threads, that's a different problem |
15:39:27 | FromGitter | <Varriount> arthurz: Someone recently made an S3 uploader POC |
15:39:55 | FromGitter | <Varriount> arthurz: The problem is that the documentation for the AWS api is lacking in key areas |
15:40:52 | FromGitter | <Varriount> PMunch, arthurz: I've been debating on what I should do during my holiday break: documentation, aws library, or nimlime |
15:42:32 | PMunch | Hmm, all good additions.. |
15:45:27 | arthurz | FromGitter++ All is good stuff w/ the aws lib being my top choice ;) |
15:48:38 | PMunch | arthurz, FromGitter is a bridge bot to Gitter |
15:48:39 | FromGitter | PMunch, I'm a bot, *bleep, bloop*. I relay messages between here and https://gitter.im/nim-lang/Nim |
15:49:30 | arthurz | Varriount++ All is good stuff w/ the aws lib being my top choice ;) |
15:49:48 | arthurz | Haha PMunch I feel so dumb ;) |
15:51:55 | * | Jesin quit (Quit: Leaving) |
15:57:26 | * | xkapastel joined #nim |
16:01:58 | * | endragor quit (Remote host closed the connection) |
16:02:25 | * | jrgoig joined #nim |
16:05:33 | * | SenasOzys_ joined #nim |
16:06:37 | * | SenasOzys quit (Read error: Connection reset by peer) |
16:13:00 | * | gokr joined #nim |
16:21:29 | Sargun | FWIW "regions" seems to work fine. |
16:24:51 | * | gokr quit (Ping timeout: 250 seconds) |
16:27:31 | * | arthurz quit (Quit: Leaving) |
16:38:54 | * | Jesin joined #nim |
16:39:19 | * | d10n-work joined #nim |
16:41:44 | FromGitter | <alehander42> how do I ignore "you must provide a compile-time value for the discriminator 'kind' in order to prove that it's safe to initialize 'f'" |
16:42:07 | FromGitter | <alehander42> I know I saw in several places in compiler dynamic (kind: stuff) |
16:43:32 | FromGitter | <Varriount> Sargun: You're using regions? |
16:44:05 | FromGitter | <Varriount> @alehander42 Can you post your code? |
16:45:53 | * | arecaceae quit (Remote host closed the connection) |
16:46:35 | * | arecaceae joined #nim |
16:46:41 | FromGitter | <ephja> are you sure the compiler is instantiating variant objects with runtime discriminators? |
16:46:42 | PMunch | Who's Eric O'Leary? |
16:46:45 | Araq | Sargun, that is in a 'when false' section |
16:47:41 | FromGitter | <alehander42> well stuff like ⏎ ⏎ ```result = A( ⏎ kind: B(int(A0) + int(node.kind) - int(B0)))``` [https://gitter.im/nim-lang/Nim?at=5a281f2dc65707ba2b1cdf86] |
16:48:24 | Araq | alehander42: you can't circumvent it :-) |
16:48:51 | Araq | you have to spell out the different cases. Just like Rust's sum types work. |
16:49:49 | Araq | I agree it's annoying but I don't know a good alternative. we could make it a warning instead |
16:50:15 | * | skoude joined #nim |
16:55:12 | * | skoude quit (Ping timeout: 268 seconds) |
16:56:33 | FromGitter | <alehander42> I guess one can write a macro if there are too many cases |
16:57:18 | FromGitter | <alehander42> I am not sure if a warning isn't too lax , but I can't think of universally useful simplifying macro |
16:57:23 | FromGitter | <alehander42> I'll think about it :D |
17:03:23 | * | floppydh quit (Quit: WeeChat 1.9.1) |
17:04:21 | PMunch | How can I make tables in documentation? |
17:04:45 | Araq | check our RST documentation |
17:05:18 | Araq | some ascii art with ============ |
17:05:35 | PMunch | Hmm, but can that span multiple lines? |
17:05:47 | PMunch | I tried a grid table and that didn't work.. |
17:06:25 | Araq | just use multiple lines, the first column could cause problems |
17:06:57 | * | skoude joined #nim |
17:08:00 | PMunch | Ah, yeah that works fine |
17:13:48 | * | JappleAck quit (Quit: Leaving) |
17:15:20 | * | skoude quit (Ping timeout: 255 seconds) |
17:18:06 | * | skoude joined #nim |
17:19:10 | FromGitter | <Varriount> Araq: Should Thread objects become invalid if they are copied? |
17:19:54 | FromGitter | <Varriount> Or rather, even if the original object goes out of scope, shouldn't copies still remain valid? |
17:21:29 | * | natrys joined #nim |
17:23:20 | * | SenasOzys_ quit (Ping timeout: 276 seconds) |
17:23:43 | * | skoude quit (Ping timeout: 248 seconds) |
17:27:45 | * | rbrt joined #nim |
17:28:27 | * | Sentreen quit (Ping timeout: 240 seconds) |
17:29:44 | FromGitter | <alehander42> is there a good way to convert tables with json to ? |
17:30:03 | FromGitter | <alehander42> I've written manual table->to->array then to table again functions to workaround it |
17:30:07 | FromGitter | <alehander42> but it's so much manual labor |
17:31:40 | * | skoude joined #nim |
17:35:39 | * | claudiuinberlin quit (Quit: Textual IRC Client: www.textualapp.com) |
17:37:34 | PMunch | alehander42, just uploaded this: https://github.com/PMunch/binaryparse |
17:37:51 | * | SenasOzys_ joined #nim |
17:38:58 | PMunch | Have to run now so docs are a bit sparse but I think the docstring in binaryparse.nim, the when isMainModule in the same file, and the error messages should be enough to get you up and running if you want to try it :) |
17:40:23 | PMunch | @alehander42 ^ (Just in case FromGitter still isn't doing highlights) |
17:41:31 | * | Sentreen joined #nim |
17:41:56 | * | Trustable joined #nim |
17:42:08 | * | PMunch quit (Quit: Leaving) |
17:44:25 | GitDisc | <treeform> hey Araq, i been looking at parsesql.nim, I added support for the limit clause and select foo AS bar. The file is really old. But it looks like you have made some changes recently. How did file came about? Are you new changes for ornim? Is the way parsing done in this file similar in style to how nim parses? |
17:50:41 | * | Serenitor joined #nim |
17:52:01 | * | skoude quit (Ping timeout: 248 seconds) |
17:59:10 | * | Vladar quit (Quit: Leaving) |
18:02:59 | * | jrgoig quit (Ping timeout: 260 seconds) |
18:04:13 | * | PMunch joined #nim |
18:12:44 | PMunch | @zacharycarter, @zetashift, my binary parser thingy from yesterday is now up on GitHub: https://github.com/PMunch/binaryparse |
18:12:59 | PMunch | Saw you commenting after I had gone to bed yesterday :) |
18:14:26 | GitDisc | <treeform> Oh wow PMunch i was thinking about making a binary parser for nim as well. |
18:14:36 | GitDisc | <treeform> This I want to see how you did it. |
18:14:56 | PMunch | Haha, good luck reading that source code :P |
18:15:02 | GitDisc | <treeform> I just wrote a parser for the truetype format |
18:15:07 | PMunch | https://github.com/PMunch/binaryparse/blob/master/binaryparse.nim#L366 |
18:15:24 | GitDisc | <treeform> I did it pretty much manually, but I feel like there are better ways. |
18:15:51 | PMunch | Yeah, this supports pretty much everything I could think of from having written a couple parsers myself manually |
18:16:01 | GitDisc | <treeform> why use u16 and u8 and not nim native types? |
18:16:53 | PMunch | Because you can do u2 if you wanted, and there's no Nim native type for that |
18:17:34 | GitDisc | <treeform> 2 bits? |
18:17:50 | PMunch | Yup |
18:18:03 | GitDisc | <treeform> thats cool |
18:18:10 | GitDisc | <treeform> i like your size thing in the example |
18:18:12 | PMunch | Plus they look like the type suffixes found here: https://nim-lang.org/docs/manual.html#lexical-analysis-numerical-constants |
18:18:13 | GitDisc | <treeform> read size then read teh rest |
18:19:26 | GitDisc | <treeform> Your parser can read, but it can't output? |
18:19:31 | PMunch | Yeah, unfortunately it doesn't work in nested calls (yet). So you couldn't read the size and then use it in a custom parser. |
18:19:39 | PMunch | Yeah, currently it's only input |
18:19:49 | PMunch | But I hope to do output as well |
18:19:52 | * | vivus joined #nim |
18:20:09 | GitDisc | <treeform> I was going to look into making parser as a like extension to the type definition. |
18:20:42 | GitDisc | <treeform> So you define all the types and maybe put in how to parser in some sort of {} next to the fields. |
18:21:06 | * | skoude joined #nim |
18:21:41 | oprypin | PMunch, FromGitter adds '@' only before /^nickname[,:] / |
18:21:42 | FromGitter | oprypin, I'm a bot, *bleep, bloop*. I relay messages between here and https://gitter.im/nim-lang/Nim |
18:21:47 | oprypin | yep |
18:21:57 | PMunch | oprypin, oh it does now? Nice! |
18:22:10 | oprypin | PMunch, it always did, i'm just specifying the condition |
18:22:30 | oprypin | so you know |
18:22:49 | PMunch | Oh really? I didn't think it did before |
18:23:00 | oprypin | well maybe it didnt match the condition.... |
18:23:02 | * | Trustable quit (Remote host closed the connection) |
18:24:27 | * | Sentreen quit (Ping timeout: 240 seconds) |
18:24:48 | PMunch | Hmm, maybe |
18:25:29 | * | skoude quit (Ping timeout: 258 seconds) |
18:29:58 | * | claudiuinberlin joined #nim |
18:32:37 | * | Serenit0r joined #nim |
18:34:41 | * | vivus quit (Ping timeout: 258 seconds) |
18:35:05 | * | vivus joined #nim |
18:35:53 | * | Serenitor quit (Ping timeout: 255 seconds) |
18:36:03 | * | yglukhov quit (Remote host closed the connection) |
18:37:10 | * | yglukhov joined #nim |
18:37:34 | * | Sentreen joined #nim |
18:41:37 | * | yglukhov quit (Ping timeout: 248 seconds) |
18:42:38 | * | yglukhov joined #nim |
18:47:11 | * | yglukhov quit (Ping timeout: 276 seconds) |
18:51:55 | * | rbrt quit (Quit: Oíche mhaith) |
18:52:26 | * | rbrt joined #nim |
18:55:07 | * | xkapastel quit (Quit: Connection closed for inactivity) |
18:59:47 | * | nsf quit (Quit: WeeChat 1.9.1) |
19:00:41 | * | Serenit0r quit (Ping timeout: 240 seconds) |
19:06:05 | * | Serenit0r joined #nim |
19:11:16 | * | Serenit0r quit (Quit: Leaving) |
19:11:35 | * | Serenit0r joined #nim |
19:12:01 | * | kunev quit (Ping timeout: 248 seconds) |
19:12:08 | * | Serenit0r is now known as Serenitor |
19:14:17 | * | kunev joined #nim |
19:22:19 | * | yglukhov joined #nim |
19:22:38 | * | PMunch quit (Quit: leaving) |
19:23:29 | * | Vladar joined #nim |
19:26:41 | * | JappleAck joined #nim |
19:31:56 | Araq | treeform: my changes are for Ormin, yes. it parses the way all my parser work, more or less |
19:32:28 | Araq | more PRs are welcome, besides being dated it suffers from insufficient tests |
19:33:05 | Araq | but nothing horrible is in there, iirc, we can just clean up the code incrementally |
19:53:57 | * | yglukhov quit (Remote host closed the connection) |
19:56:46 | * | yglukhov joined #nim |
19:57:40 | GitDisc | <treeform> Hey Araq, I have added some more stuff. Right now working on subselects. |
19:58:01 | GitDisc | <treeform> How far should I take it? |
19:58:19 | GitDisc | <treeform> I am trying to parse https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#with_query_name |
19:58:28 | * | xkapastel joined #nim |
19:58:42 | GitDisc | <treeform> which is now compatible with SQL ANSI standard. |
19:58:55 | GitDisc | <treeform> But I am not sure where SQL ANSI standard ends and PostgreSQL syntax starts. |
19:59:10 | GitDisc | <treeform> I feel like some things in the parser are PostgreSQL syntax and not SQL ANSI standard. |
19:59:30 | GitDisc | <treeform> it prepends e'string' for stuff. |
20:00:39 | GitDisc | <treeform> Should this be part of the standard library? |
20:01:24 | GitDisc | <treeform> Also how it prints stuff out is not very nice. I want to try to add indentation and stuff. |
20:02:06 | * | yglukhov quit (Remote host closed the connection) |
20:02:14 | GitDisc | <treeform> Do you care that it prints stuff in lower case 'select * from foo' or upper base that you find in sql everywhere 'SELECT * FROM foo' ? I changed it to print stuff out in UPPER CASE, but you might not like this? |
20:04:13 | Araq | yeah all uppercase sucks, we have syntax highlighting nowadays |
20:05:10 | GitDisc | <treeform> Could I add this as an option? |
20:06:43 | Araq | sure |
20:07:59 | * | yglukhov joined #nim |
20:10:58 | GitDisc | <treeform> At work I work on a custom language to SQL transpiler |
20:11:21 | GitDisc | <treeform> I want to see if I can use nim and parseSql for this. |
20:11:36 | Araq | lol that word, I guess people just love new words |
20:12:22 | Araq | Ormin is a Nim DSL to SQL translator |
20:12:48 | Araq | what does your custom language look like? |
20:14:54 | * | PMunch joined #nim |
20:15:48 | Araq | about your other question ... it should just parse SQL as defined by Ansi, Postgre, Sqlite, Sql Server and Mysql |
20:16:13 | Araq | a superset of these unless ambiguous |
20:21:54 | Araq | we can more parsesql into the ormin project, I think the stdlib is the wrong place |
20:31:11 | * | natrys quit (*.net *.split) |
20:31:12 | * | notdekka[m] quit (*.net *.split) |
20:31:12 | * | shashlick quit (*.net *.split) |
20:31:13 | * | EastByte quit (*.net *.split) |
20:31:13 | * | gsingh93 quit (*.net *.split) |
20:31:13 | * | cyraxjoe quit (*.net *.split) |
20:31:13 | * | FromGitter quit (*.net *.split) |
20:31:13 | * | d10n-work quit (*.net *.split) |
20:31:13 | * | elrood quit (*.net *.split) |
20:31:13 | * | xet7 quit (*.net *.split) |
20:31:14 | * | unclechu quit (*.net *.split) |
20:31:14 | * | subsetpark quit (*.net *.split) |
20:32:05 | * | d10n-work joined #nim |
20:32:29 | * | vivus quit (Ping timeout: 276 seconds) |
20:33:05 | * | huonw quit (Ping timeout: 252 seconds) |
20:33:41 | * | BitPuffin|osx quit (Ping timeout: 260 seconds) |
20:34:44 | * | MrAxilus[m] quit (Ping timeout: 252 seconds) |
20:34:48 | * | Demos[m] quit (Ping timeout: 240 seconds) |
20:34:57 | * | watzon quit (Ping timeout: 255 seconds) |
20:34:57 | * | Miguelngel[m] quit (Ping timeout: 248 seconds) |
20:34:58 | * | TheManiac quit (Ping timeout: 248 seconds) |
20:35:10 | * | jivank[m] quit (Ping timeout: 264 seconds) |
20:35:28 | * | planetis[m] quit (Ping timeout: 240 seconds) |
20:35:28 | * | byteflame quit (Ping timeout: 240 seconds) |
20:35:28 | * | dyce[m] quit (Ping timeout: 240 seconds) |
20:35:33 | * | georgeg[m] quit (Ping timeout: 246 seconds) |
20:35:33 | * | macsek1911[m] quit (Ping timeout: 246 seconds) |
20:35:44 | * | Jipok[m] quit (Ping timeout: 276 seconds) |
20:35:48 | * | huonw joined #nim |
20:35:50 | * | hohlerde quit (Ping timeout: 255 seconds) |
20:35:56 | * | ehmry quit (Ping timeout: 255 seconds) |
20:36:19 | * | yglukhov quit (Read error: Connection reset by peer) |
20:36:52 | * | yglukhov joined #nim |
20:43:19 | * | yglukhov quit (Read error: Connection reset by peer) |
20:43:45 | * | vivus joined #nim |
20:43:54 | * | yglukhov joined #nim |
20:46:01 | * | rbrt quit (Quit: Oíche mhaith) |
20:46:07 | * | noonien joined #nim |
20:47:52 | * | natrys joined #nim |
20:47:52 | * | EastByte joined #nim |
20:47:52 | * | gsingh93 joined #nim |
20:47:52 | * | cyraxjoe joined #nim |
20:47:52 | * | FromGitter joined #nim |
20:47:54 | * | elrood joined #nim |
20:47:54 | * | xet7 joined #nim |
20:47:54 | * | subsetpark joined #nim |
20:49:23 | * | jjido quit (Ping timeout: 276 seconds) |
20:50:37 | GitDisc | <treeform> My custom language looks nothing like SQL here are some examples: |
20:51:35 | GitDisc | <treeform> `post_submit subreddit_name = askreddit` |
20:51:43 | GitDisc | <treeform> `post_submit post_title ~ "?" by subreddit_name` |
20:51:50 | GitDisc | <treeform> `post_submit / post_submit unique` |
20:51:59 | GitDisc | <treeform> `funnel post_submit -> comment_submit -> vote_post` |
20:52:31 | GitDisc | <treeform> `bar comment_events_v1 unique by sr_name from "Jun1 00:00" to "Jun1 01:00" by minute` |
20:53:16 | GitDisc | <treeform> But I am here to mostly get SQL under control. |
20:53:18 | * | skoude joined #nim |
20:53:40 | GitDisc | <treeform> Should each of the Ansi, Postgre, Sqlite, Sql Server and Mysql have slightly different parsers? |
20:54:27 | GitDisc | <treeform> I need it to be able to parse and generate bigquery StandardSQL, should that be part of parsesql.nim or be its own thing? |
20:55:00 | GitDisc | <treeform> StandardSQL tries to be closer to Ansi, unlike their LegacySQL which was crazy different. |
20:56:21 | * | rbrt joined #nim |
21:03:02 | * | jjido joined #nim |
21:09:41 | * | yglukhov quit (Remote host closed the connection) |
21:09:44 | Araq | we can add a 'Dialect' enum but I think most of the stuff can be shared so I would use a single parser |
21:16:03 | * | Vladar quit (Quit: Leaving) |
21:19:03 | * | endragor joined #nim |
21:19:13 | * | claudiuinberlin quit (Quit: Textual IRC Client: www.textualapp.com) |
21:19:48 | * | skoude quit (Remote host closed the connection) |
21:22:24 | FromGitter | <zacharycarter> jesus - https://www.iso.org/standard/68564.html - 1600 pages |
21:23:25 | * | endragor quit (Ping timeout: 250 seconds) |
21:26:47 | * | SenasOzys_ quit (Read error: Connection reset by peer) |
21:27:01 | * | SenasOzys joined #nim |
21:27:14 | * | 7GHABF4P5 joined #nim |
21:27:33 | Araq | Ansi C has 550 pages. |
21:28:03 | * | madpat quit (Ping timeout: 246 seconds) |
21:36:45 | FromGitter | <zacharycarter> Yeah - I mean I get the more complex a language, the longer its specification is going to be |
21:38:43 | * | vlad1777d joined #nim |
21:38:55 | PMunch | Hmm, what's the best way to convert a ExprColonExpr into an IdentDefs for use in a FormalParams? |
21:38:57 | * | ftsf quit (*.net *.split) |
21:38:57 | * | chemist69 quit (*.net *.split) |
21:38:57 | * | kier quit (*.net *.split) |
21:38:57 | * | Araq quit (*.net *.split) |
21:38:57 | * | oprypin quit (*.net *.split) |
21:38:58 | * | Amun_Ra quit (*.net *.split) |
21:38:58 | * | dom96 quit (*.net *.split) |
21:38:58 | * | GaveUp quit (*.net *.split) |
21:38:58 | * | Xe quit (*.net *.split) |
21:38:58 | * | programisto quit (*.net *.split) |
21:38:58 | * | jsn- quit (*.net *.split) |
21:42:53 | * | dom96 joined #nim |
21:42:54 | * | dom96 quit (Changing host) |
21:42:54 | * | dom96 joined #nim |
21:43:37 | * | oprypin joined #nim |
21:43:43 | PMunch | Wait doesn't NimNodes support HSlices? |
21:48:42 | * | Snircle joined #nim |
21:48:57 | * | madpat joined #nim |
21:52:09 | * | natrys quit (Quit: natrys) |
21:57:37 | * | JappleAck quit (Quit: Leaving) |
21:58:42 | * | gokr joined #nim |
22:01:59 | * | ftsf joined #nim |
22:01:59 | * | chemist69 joined #nim |
22:01:59 | * | kier joined #nim |
22:01:59 | * | Araq joined #nim |
22:01:59 | * | Amun_Ra joined #nim |
22:01:59 | * | GaveUp joined #nim |
22:01:59 | * | jsn- joined #nim |
22:01:59 | * | programisto joined #nim |
22:02:52 | FromGitter | <alehander42> awesome @PMunch I ll take a look tomorrow |
22:03:35 | * | Sentreen quit (Ping timeout: 240 seconds) |
22:09:02 | * | Xe joined #nim |
22:16:45 | * | Sentreen joined #nim |
22:43:09 | * | arecaceae quit (Remote host closed the connection) |
22:43:27 | * | arecaceae joined #nim |
22:47:38 | * | nsf joined #nim |
22:51:46 | * | jjido quit (Remote host closed the connection) |
22:55:14 | * | Jesin quit (Quit: Leaving) |
22:58:24 | * | nsf quit (Quit: WeeChat 1.9.1) |
23:02:33 | * | PMunch quit (Quit: leaving) |
23:04:58 | * | jjido joined #nim |
23:07:24 | * | elrood quit (Quit: Leaving) |
23:41:11 | * | gokr quit (Ping timeout: 252 seconds) |
23:47:10 | * | 7GHABF4P5 quit (Read error: Connection reset by peer) |
23:47:42 | * | yglukhov joined #nim |