<< 16-03-2016 >>

00:10:20*Matthias247 quit (Read error: Connection reset by peer)
00:12:36PMunchUhm, I have a super weird issue. Wanted to cache some hashes(ints) and initially I had them as seq[int] which worked fine. To speed things up I tried to change to an IntSet but now the program adds about 34470 elements before exiting without any errors..
00:12:53PMunchAll those elements are added to the IntSet as hashes
00:13:54PMunchAll hashes for objects from 0 to 34474 is added
00:14:01PMunchThen suddenly it stops
00:15:06def-PMunch: source code on gist/pastebin?
00:15:07*francisl joined #nim
00:15:17PMunchWell, the source for the entire thing is pretty long..
00:15:28PMunchHold on, I'll see if I can create a minimal working example
00:19:03PMunchhttp://pastebin.com/Jy5wiNJr
00:19:04PMunchThere
00:19:22PMunchDone is never printed and the last integer to print is 35112
00:20:28*Jesin joined #nim
00:20:32*Trustable quit (Remote host closed the connection)
00:20:41PMunchIf line 8 is commented out it works
00:21:06PMunchOr, it runs, not very useful..
00:21:11PMunchdef-^
00:23:10def-it doesn't just "suddenly stop", it segfaults
00:23:17PMunchNot for me
00:23:56PMunchJust exists clean
00:24:40def-segfaults in the GC, --gc:boehm as a workaround works
00:25:17PMunchWhen I run the compiled program it segfaults. When I run it with nim c -r intsetbug.nim it doesn't
00:25:21def-v2 works as well, refc fails.
00:25:45def-it still segfaults, but nim doesn't print it, your shell does
00:26:10def-so this should be reported on github as an issue, do you want to do it or should I?
00:26:26PMunchYou can do it, I'm still not entirely sure what is wrong
00:26:31*jaco60 quit (Ping timeout: 268 seconds)
00:28:16PMunchHmm v2 appears to be printing debug information
00:28:33PMunchI'm getting a whole bunch of in loop and loop end when I run with it
00:29:26def-yeah, v2 is not ready yet, but it's supposed to replace the default gc and works in this example
00:29:44PMunchThat's a good thing I guess, for future Nim :)
00:30:22PMunchmarkAndSweep also appears to work
00:31:57PMunchIs there an explanation anywhere for the different GCs?
00:33:39def-There's some genral info here, but not about the different ones: http://nim-lang.org/docs/gc.html
00:34:05def-there aren't that many anyway: refc|v2|markAndSweep|boehm|go|none
00:34:14PMunchBut what are the differences?
00:34:17def-refc is the default and what's described in the gc.html page
00:34:34PMunchAka how should I decide which one to use
00:34:52def-v2 is supposed to have better realtime guarantees and should replace refc
00:37:07def-go uses go's GC, probably experimental
00:37:21def-boehm uses the well known Boehm GC, an external library
00:37:49def-Usually you should just go with the default GC, but you can benchmark and see if others pay off if you really need performance
00:38:07def-boehm for example has better throughput, but higher latencies
00:38:26nsfI must add, Go GC is not gc (go compiler) GC, but gccgo GC
00:38:31PMunchAnd in my case it works..
00:38:33nsfthey are different
00:38:37def-nsf: ah, haven't used that, thanks
00:38:42PMunchboehm that is
00:39:58PMunchAnd markAndSweep?
00:40:32def-PMunch: well known GC algorithm
00:41:29*yglukhov quit (Remote host closed the connection)
00:41:52def-I think if you have few GC objects markAndSweep can perform better, but it's bad for large amounts of data as it has to scan everything
00:42:30nsfalso last time I looked at ni
00:42:32nsfnim*
00:42:44nsfit doesn't use precise scan capabilities of boehm
00:42:50PMunchHmm, okay. I think I'll just go for boehm
00:43:02fredrik92A general overview of how GC works in general and what challenges you face when doing can actually be on MSDN: https://msdn.microsoft.com/en-us/library/0xy59wtx(v=vs.110).aspx and https://msdn.microsoft.com/en-us/library/ee851764(v=vs.110).aspx
00:43:05nsfof course precise scanning doesn't actually do much when it comes to perf
00:43:12nsfbut it's nice to have imho
00:43:14PMunchdef-, did you create a bug report?
00:45:22*desophos quit (Remote host closed the connection)
00:50:02def-PMunch: yep: https://github.com/nim-lang/Nim/issues/3969
00:50:58PMunchThanks, I like to keep subscribed to the issues I'm involved with :)
00:53:18*brson quit (Ping timeout: 248 seconds)
00:59:52*Demon_Fox joined #nim
01:00:51*gokr quit (Ping timeout: 248 seconds)
01:03:58*[CBR]Unspoken quit (Ping timeout: 248 seconds)
01:08:15*desophos joined #nim
01:18:59*[CBR]Unspoken joined #nim
01:32:45*vonh quit (Ping timeout: 276 seconds)
01:35:44*francisl quit (Quit: francisl)
01:39:52*francisl joined #nim
01:41:59*yglukhov joined #nim
01:46:13*yglukhov quit (Ping timeout: 244 seconds)
01:50:23*PMunch quit (Ping timeout: 244 seconds)
02:01:43*vonh joined #nim
02:19:15*exebook joined #nim
02:21:52*kulelu88 joined #nim
02:38:53*vendethiel joined #nim
02:43:24*yglukhov joined #nim
02:48:55*yglukhov quit (Ping timeout: 250 seconds)
02:56:07*Kingsquee joined #nim
02:57:13*desophos_ joined #nim
03:00:02*kulelu88 quit (Quit: Leaving)
03:01:43*desophos_ quit (Ping timeout: 244 seconds)
03:02:47*vendethiel quit (Ping timeout: 250 seconds)
03:07:22*brson joined #nim
03:13:45*endragor joined #nim
03:33:43*OnwardEuler joined #nim
03:39:07OnwardEulerHey guys, does nim have something similar to emplace_back on a vector?
03:40:04*brson quit (Quit: leaving)
03:45:16def-OnwardEuler: add?
03:49:27*Jesin quit (Quit: Leaving)
03:50:28OnwardEuleradd works more like push_back, where you pass an instance of the object and it's added to the sequence
03:51:05def-but what's the problem with that in Nim?
03:51:06OnwardEuleremplace back lets you provide a reference to the parameters of the constructor
03:51:31OnwardEulerand you avoid having to make a copy, instantiate the object and then pass it on
03:51:51def-when you have primitive types or regular objects, copying is cheap. when you have ref objects, only the reference is copied
03:52:26OnwardEulerit's a small optimization in c++, I just have some tight loops in my engine that benefit from the reduced copying
03:54:52def-you could simply resize the seq and set the fields of the last element
03:59:10OnwardEulerthat's the next best thing =)
03:59:37OnwardEulerstreamline it with a template
03:59:58def-sure, if it's actually faster. I'd benchmark first
04:03:26OnwardEuleryeah... I'll report back, it helped in c++
04:04:07OnwardEulerwon't hurt to try XD
04:04:42*mnemonikk quit (Ping timeout: 246 seconds)
04:05:02*heinrich5991 quit (Ping timeout: 260 seconds)
04:06:48*mnemonikk joined #nim
04:06:48*mnemonikk quit (Changing host)
04:06:48*mnemonikk joined #nim
04:12:54*heinrich5991 joined #nim
04:28:52*fredrik92 quit (Ping timeout: 268 seconds)
04:29:57*francisl quit (Quit: francisl)
04:37:05*OnwardEuler quit (Quit: Leaving)
04:37:26endragorhttp://irclogs.nim-lang.org/ - "An error has occured in one of your routes." :(
04:45:46*yglukhov joined #nim
04:50:11*yglukhov quit (Ping timeout: 244 seconds)
04:59:36*keyle joined #nim
05:15:57*keyle quit (Quit: http://twitter.com/keyle/)
06:02:52*exebook quit (Ping timeout: 264 seconds)
06:11:00*krux02 quit (Quit: Verlassend)
06:15:22*exebook joined #nim
06:17:39*yglukhov joined #nim
06:18:44*Varriount_ joined #nim
06:18:44*Varriount quit (Disconnected by services)
06:19:47*gunn joined #nim
06:22:27*endragor_ joined #nim
06:26:06*endragor quit (Ping timeout: 248 seconds)
06:37:27*bjz joined #nim
06:42:43*bjz quit (Ping timeout: 248 seconds)
06:44:55*yglukhov quit (Remote host closed the connection)
06:45:51*endragor_ quit (Remote host closed the connection)
06:46:20*endragor joined #nim
06:56:36*endragor quit (Remote host closed the connection)
06:59:13*desophos quit (Read error: Connection reset by peer)
07:07:09*endragor joined #nim
07:07:48*bjz joined #nim
07:12:40*arnetheduck joined #nim
07:19:31*gokr joined #nim
07:24:01*endragor quit (Remote host closed the connection)
07:30:23*bjz_ joined #nim
07:31:54*bjz quit (Ping timeout: 260 seconds)
07:45:14*darkf quit (Quit: Leaving)
07:55:15*endragor joined #nim
07:57:40*rok joined #nim
08:00:38*jaco60 joined #nim
08:05:50*jaco60 quit (Ping timeout: 248 seconds)
08:16:12*yglukhov joined #nim
08:17:29*endragor quit (Remote host closed the connection)
08:21:27*endragor joined #nim
08:24:16*desophos joined #nim
08:28:42*desophos quit (Ping timeout: 244 seconds)
08:30:49*exebook quit (Read error: Connection reset by peer)
08:54:37*exebook joined #nim
09:06:44*Demon_Fox quit (Quit: Leaving)
10:06:56*dorei joined #nim
10:15:53*Trustable joined #nim
10:34:15*BitPuffin|osx joined #nim
10:51:16*desophos joined #nim
10:56:18*desophos quit (Ping timeout: 276 seconds)
11:33:41kierhow can I parse an int into a string in Nim?
11:34:30*rok quit (Quit: rok)
11:35:27kiernevermind, found it in strutils
12:18:59*PMunch joined #nim
12:43:30PMunchcheatfate, https://github.com/nim-lang/Nim/issues/3969#issuecomment-197104081
12:43:39PMunchTurns out it isn't the JSON module after all
12:50:20cheatfatePMunch, i think problem in constructions you made :) now you are using crazy big numbers... i think problem is because you overflowing stack
12:50:41cheatfatetry to compile nim c -d:release and error is gone
12:50:51*francisl joined #nim
12:51:34cheatfateeverytime i running your code and it breaks to my debugger, my call stack is overflowed...
12:51:40PMunchThose numbers are copied from hash though, which returns an int (which again depends on the size of pointers IIUC).
12:52:36cheatfatei think increasing stack like 10x times for debug compilation resolve your problem
12:53:42PMunchHmm, it also works if I use the boehm GC as pointed out by def- when I discovered this yesterday
13:12:16*francisl quit (Quit: francisl)
13:28:27*rok joined #nim
13:40:11AraqPMunch: could be a leak in the GC in combination with the huge memory pressure your code causes
13:40:34PMunchSeems likely
13:40:51Araqnote that OOM often fails with a segfault thanks to Linux' "memory overcommitment 'feature'"
13:42:58PMunchHmm is the pressure really that large?
13:43:51PMunchIt only really inserts about 0.8MB into the intset structure
13:52:30*arnetheduck quit (Ping timeout: 248 seconds)
13:52:53*francisl joined #nim
13:54:47*arnetheduck joined #nim
14:28:03PMunchHmm, when I'm running my code with -d:release I get a SIGSEGV: Illegal storage access. (Attempt to read from nil?) error
14:31:27*BitPuffin|osx quit (Ping timeout: 276 seconds)
14:42:46def-PMunch: yeah, still a segfault
14:43:15PMunchThis was some other code
14:43:27PMunchUsing a HashSet[int] instead
14:44:30PMunchBut doing pretty much the same thing. It works with the normal GC (although faster with boehm), but I can't get it to create a release build (even with boehm).
14:50:01PMunchOh def-, in the newest version does two hashes for the same JSON object with reordered keys evaluate to the same hash?
14:57:19*Kingsquee quit (Quit: https://i.imgur.com/qicT3GK.gif)
15:12:59*Senketsu quit (Quit: Leaving)
15:18:21PMunchOtherwise I'll file an issue for it since they are technically the same object
15:19:04AraqPMunch: excellent point, I doubt it. :-)
15:19:33Araqunordered keys are harder than you would expect ...
15:20:59PMunchWell, all keys in JSON are strings. What I've done in the application I'm writing at the moment is just to order them alphabetically
15:23:58PMunchThat way they at least stay equal
15:26:43*jaco60 joined #nim
15:27:41*brson joined #nim
15:30:30*rok quit (Quit: rok)
15:45:13cheatfateAraq, have you seen http://irclogs.nim-lang.org/
15:45:44Araqno, nor can I fix it.
15:51:36cheatfatemaybe you can block it until dom96 take a look
15:55:28dom96fixed
15:56:16*exebook quit (Ping timeout: 264 seconds)
15:57:56PMunchhttps://github.com/nim-lang/Nim/issues/3972
15:58:23cheatfatedom96, does your book will cover this macro magic, because its only thing i can't comprehend
16:01:56dom96cheatfate: yeah, it will.
16:02:21*Demon_Fox joined #nim
16:08:51*exebook joined #nim
16:10:14*fredrik92 joined #nim
16:11:15*dorei quit (Quit: Page closed)
16:12:49*irrequietus joined #nim
16:14:40*samdoran joined #nim
16:16:02*krux02 joined #nim
16:20:34*PMunch quit (Ping timeout: 240 seconds)
16:22:21*couven92 joined #nim
16:22:25*endragor_ joined #nim
16:22:40*arnetheduck quit (Ping timeout: 264 seconds)
16:24:12*fredrik92 quit (Ping timeout: 268 seconds)
16:25:37*endragor quit (Ping timeout: 240 seconds)
16:26:42*endragor_ quit (Ping timeout: 246 seconds)
16:34:06*shodan45 joined #nim
16:39:58*exebook quit (Ping timeout: 248 seconds)
16:42:13*bozaloshtsh quit (Ping timeout: 250 seconds)
16:44:48*freddy92 joined #nim
16:47:22cnclif i define a type that has a bunch of the same numeric field (like say, 5 float fields), is there a way to automatically get definitions of add, subtract etc. for the type? of course i could make a macro for it, but i'm wondering if an existing facility exists
16:48:52*couven92 quit (Ping timeout: 268 seconds)
17:02:35reactormonkcncl, hey, you just described a monoid ;-)
17:02:53*desophos joined #nim
17:03:50*boopsiesisaway is now known as boopsies
17:10:40cnclwell the feature i'm actually looking for is generic newtype deriving :P
17:12:18*irrequietus quit (Ping timeout: 268 seconds)
17:12:46*vendethiel joined #nim
17:17:29*irrequietus joined #nim
17:17:46*francisl quit (Quit: francisl)
17:19:32*yglukhov quit (Ping timeout: 260 seconds)
17:21:57*francisl joined #nim
17:25:57*boopsies is now known as boopsiesisaway
17:27:06*freddy92 quit (Ping timeout: 268 seconds)
17:27:53*pregressive joined #nim
17:28:35*pregressive quit (Read error: Connection reset by peer)
17:28:39*pregress_ joined #nim
17:31:14*boopsiesisaway is now known as boopsies
17:35:47Varriount_cncl: A generic that does compile-time type inspection would work.
17:38:21cncli'm trying to figure out how to iterate the fields of a type from a macro
17:42:07*mahasamoot joined #nim
17:47:29Varriount_cncl: 'fields' works in normal code.
17:47:56Varriount_cncl: Of course, you can also use macros.getType
17:48:34Varriount_I just tried a fields-based solution and ran into a 'cannot evaluate at compile-time' error.
17:51:19cncl'fields' would be runtime, right?
17:53:05*adnan left #nim (#nim)
17:53:30*krux02 quit (Remote host closed the connection)
17:54:35Varriount_cncl: There's a runtime version in the typeinfo module, yes. The default one works at runtime
17:54:42Varriount_*default one works at compile tiem
17:58:30cnclah. so by 'normal' code, you mean the runtime version of typeinfo?
18:04:15Varriount_cncl: The typeinfo module does runtime type inspection/manipulation.
18:04:46Varriount_Unfortunately, I've run into a VM limitation trying to use the compile-time version of 'fields'
18:05:32cncli'm going MyType.getType[n] on my type and it mostly works but something is breaking in a weird way
18:05:39cnclin a macro, i mean
18:05:50*yglukhov joined #nim
18:07:10*vendethiel quit (Quit: q+)
18:07:13cnclhttps://gist.github.com/randrew/8725b41f1815c2a3a390
18:10:11*yglukhov quit (Ping timeout: 250 seconds)
18:10:40cncli'm not sure how it's ending up with an uninterpolated 'fld' in the macro output?
18:12:49Varriount_cnd: I'll take a look, but I came up with a working version.
18:13:47*shodan45 quit (Quit: Konversation terminated!)
18:14:02Varriount_cncl: https://gist.github.com/Varriount/d4c621076ec1de13090d
18:15:34cncli need this to be done at compile-time, though, because these operations will be done in a loop over large data sets (millions of records)
18:18:14*irrequietus quit ()
18:18:20Varriount_cncl: That is done at compile time
18:18:36Varriount_cncl: There are two field procs, one in system.nim, one in typeinfo.nim
18:19:10Varriount_The one in system.nim does it at compile time (hence is a bit finicky), the one in typeinfo does it at runtime.
18:20:03cncloh uh i know why mine isn't work
18:20:07cnclname is being shadowed
18:20:18cnclVarriount_: ah
18:20:24cnclinteresting
18:20:30*Varriount_ is now known as Varriount
18:21:04cnclwait no. hmm
18:27:03Varriountcncl: And here's your version, fixed: https://gist.github.com/Varriount/e37e91fbb32d53b77243
18:27:23Varriountcncl: Having trouble?
18:28:42cnclah
18:28:47cncli misunderstood how name resolution was occuring
18:29:00cncli forgot about {.immediate.}
18:29:28Varriountcncl: Hm?
18:29:36cnclpassing 'result' is a much better idea
18:29:52cnclthanks
18:30:01Varriountcncl: Aside from that, 'result' will always be the innermost symbol.
18:30:30Varriountcncl: Try to avoid nesting macros and templates if you can. The different contexts can get confusing.
18:31:03cnclyeah i shouldn't have had a macro in the template (i had started with a template a few minutes ago and hadn't just gotten rid of it, though i had before you also gave me your solution)
18:32:48cnclhere's an old bug i filed from a while back when i first tried nim: https://github.com/nim-lang/Nim/issues/3424
18:33:21cnclif you like being confused about symbol scoping :)
18:34:07Varriountcncl: By the way, you are aware that objects are always allocated on the stack, right?
18:34:15cnclyes
18:34:23cnclwhy?
18:34:45Varriountcncl: Some people get confused about the whole object vs ref object distinction.
18:35:10*Ven joined #nim
18:35:20cncli see
18:35:29cncli don't think that would have had any effect in this case?
18:36:30Varriountcncl: In this case, it would just change allocation methods.
18:37:41Varriountcncl: Is this for an entity system or something?
18:38:27cnclno, i'm just going to be doing some theoretical crunching on some numbers from an existing game
18:38:37cncljust doing a simplistic modeling of its stats system
18:38:38Varriountcncl: Ah ok.
18:39:31cnclif it was for a game with a different access pattern, i probably wouldn't put it all in a single monolithic structure
18:39:35cnclbad cache performance
18:40:13Varriountcncl: That, and it would be better to have a single 'template' structure that all instances of an entity shared.
18:44:13cnclthe game works by stacking modifiers on top of a base record to obtain final version that's used for the rest of the game logic
18:45:19cnclso you would start with a shared master copy for each instance of the same entity but you will end up with multiple copies of it on the heap in the end (unless you want to perform the modifiers calculation on the call stack each time you need it, but it's easier to just do all of the modifier calculations up front before running the rest of the game logic)
18:51:25*Ven_ joined #nim
18:52:18*Ven quit (Ping timeout: 246 seconds)
18:55:14*Ven_ quit (Client Quit)
18:59:00*Jesin joined #nim
19:01:15*toaoMgeorge joined #nim
19:01:29*francisl quit (Quit: francisl)
19:01:41*yglukhov joined #nim
19:02:13cnclVarriount: thanks again
19:02:34cnclhere's a question for you, though: how would you generalize it for procs that have N number of arguments?
19:02:48cncllike if i wanted to use it to apply a function with 3 arguments instead of 2
19:03:48*krux02 joined #nim
19:04:21*Ven joined #nim
19:05:04*Ven quit (Client Quit)
19:09:07*Matthias247 joined #nim
19:09:29cncli see how to do it by assembling the ast from nim code in the macro (would not use quote for it) but i'm not sure how to pass the arguments. some list structure? or varargs?
19:11:58*francisl joined #nim
19:12:00*PMunch joined #nim
19:14:06*francisl quit (Client Quit)
19:15:44*francisl joined #nim
19:18:15*francisl quit (Client Quit)
19:20:53cncli guess a tuple makes sense
19:22:05*francisl joined #nim
19:23:09*darkf joined #nim
19:27:00*GangstaCat quit (Quit: Leaving)
19:30:13*GangstaCat joined #nim
19:33:44*alexsystemf_ quit (Quit: Connection closed for inactivity)
19:40:33*yglukhov_ joined #nim
19:40:33*yglukhov quit (Read error: Connection reset by peer)
19:41:28*toaoMgeorge quit (Ping timeout: 252 seconds)
19:44:02*yglukhov joined #nim
19:44:02*yglukhov_ quit (Read error: Connection reset by peer)
19:45:27*krux02 quit (Remote host closed the connection)
19:46:45*krux02 joined #nim
19:49:31*francisl quit (Quit: francisl)
19:49:35*yglukhov quit (Read error: Connection reset by peer)
19:50:08*yglukhov joined #nim
19:50:48*francisl joined #nim
19:53:21*yglukhov quit (Read error: Connection reset by peer)
19:53:40*yglukhov joined #nim
19:54:10*rok joined #nim
19:56:52*yglukhov quit (Read error: Connection reset by peer)
19:57:18*francisl quit (Quit: francisl)
19:58:02*francisl joined #nim
20:00:24*yglukhov joined #nim
20:04:57*francisl quit (Quit: francisl)
20:12:34*samdoran quit (Read error: Connection reset by peer)
20:15:23*yglukhov_ joined #nim
20:15:24*yglukhov quit (Read error: Connection reset by peer)
20:18:25*francisl joined #nim
20:24:41*Ven joined #nim
20:30:02*Ven quit (Quit: My MacBook has gone to sleep. ZZZzzz…)
20:35:20Varriountcncl: Hm?
20:39:21VarriountAraq: Ping
20:45:23*alexsystemf_ joined #nim
20:55:33*Demon_Fox quit (Quit: Leaving)
20:59:55*tdc joined #nim
21:00:43*drewkett joined #nim
21:02:53*yglukhov_ quit (Remote host closed the connection)
21:04:55AraqVarriount: pong
21:05:50VarriountAraq: What's the 'dus' command in nimsuggest? Dot Usages?
21:06:07Araq'def + use'
21:06:36Araqit's what I prefer since I am too dumb to distinguish between those
21:06:59*drewkett quit (Ping timeout: 250 seconds)
21:38:43*francisl quit (Quit: francisl)
21:49:27gmpreussner_do i have to put a nim.cfg into each of my sub-directories if i want all my modules to remain compilable individually, i.e. for unit tests?
21:49:54gmpreussner_also, how do i correctly specify imports in such cases, so the compiler finds the modules that are in other sub-directories?
21:51:13gmpreussner_in the nim stdlib this all seems to work fine, because the compiler knows that the nim.cfg is in /config, but i don't know if this behavior is possible for user packages as well.
21:56:18*tdc quit (Quit: Bye bye)
22:06:53*francisl joined #nim
22:11:47*krux02 quit (Ping timeout: 248 seconds)
22:14:24*rok quit (Quit: leaving)
22:14:54*SianaGearz quit (Ping timeout: 276 seconds)
22:15:00*SianaGearz joined #nim
22:16:00*delian66 joined #nim
22:16:50*delian66_ quit (Ping timeout: 260 seconds)
22:17:20*mog quit (Excess Flood)
22:17:31*mog joined #nim
22:19:47*Trustable quit (Quit: Leaving)
22:20:05*pregress_ quit (Remote host closed the connection)
22:24:18*toaoMgeorge joined #nim
22:24:42*toaoMgeorge quit (Client Quit)
22:32:12*PMunch quit (Quit: leaving)
22:32:20*PMunch joined #nim
22:43:43*francisl quit (Quit: francisl)
23:07:22*boopsies is now known as boopsiesisaway
23:08:12*Kingsquee joined #nim
23:34:11*ics quit (Quit: Connection closed for inactivity)
23:54:38*beatmox quit (Remote host closed the connection)
23:54:50*beatmox joined #nim