<< 30-12-2013 >>

00:33:40*brson joined #nimrod
00:34:16EXetoCmepp
00:35:43*OrionPK quit (Remote host closed the connection)
00:40:16*OrionPK joined #nimrod
01:02:13*OrionPK quit (Remote host closed the connection)
01:03:03*OrionPK joined #nimrod
01:10:25BitPuffinEXetoC: ppem
01:16:29*brson quit (Ping timeout: 252 seconds)
01:18:43VarriountAraq, where would I place a test program for the stdlib that requires root privleges to run properly?
01:22:55*brson joined #nimrod
02:27:01*zielmicha1 joined #nimrod
02:28:20*zielmicha quit (Ping timeout: 245 seconds)
04:04:53*BitPuffin quit (Ping timeout: 272 seconds)
04:06:16OrionPKwoot
04:06:22OrionPKI just beat string concat
04:06:32OrionPK0.9670 vs 1.116 seconds
04:07:38OrionPK0.9670 vs 1.116 seconds
04:07:43OrionPKoops
04:15:59*ics joined #nimrod
04:21:01*EXetoC quit (Quit: WeeChat 0.4.2)
04:38:22*Demos quit (Remote host closed the connection)
05:29:01*brson quit (Quit: leaving)
05:56:10*xenagi quit (Quit: Leaving)
05:57:35*ics quit (Quit: Textual IRC Client: www.textualapp.com)
07:42:04*OrionPK quit (Remote host closed the connection)
07:46:53*OrionPK joined #nimrod
07:50:01*shodan45 joined #nimrod
08:51:50*jpoirier quit (Quit: Leaving...)
10:19:18*Araq_ joined #nimrod
10:32:19*io2 joined #nimrod
10:40:14*Mordecai joined #nimrod
10:40:58*psquid quit (Ping timeout: 245 seconds)
11:03:35*gradha joined #nimrod
11:03:44*olahol joined #nimrod
11:06:25NimBotAraq/Nimrod master d3a0194 Grzegorz Adam Hankiewicz [+0 ±1 -0]: Adds example to locals() docstring.
11:06:25NimBotAraq/Nimrod master b6cdee4 Grzegorz Adam Hankiewicz [+0 ±1 -0]: Adds docstring to rstgen.defaultConfig.
11:06:25NimBotAraq/Nimrod master 43d12ef Grzegorz Adam Hankiewicz [+0 ±2 -0]: Merge pull request #776 from gradha/pr_docs... 2 more lines
11:30:00*achim joined #nimrod
11:36:25*achim quit (Quit: Computer has gone to sleep.)
11:40:33*Mordecai quit (Ping timeout: 245 seconds)
11:45:34*io2 quit (Ping timeout: 246 seconds)
11:46:33*faassen joined #nimrod
11:48:46*BitPuffin joined #nimrod
11:58:03*BitPuffin quit (Ping timeout: 245 seconds)
12:05:05*gradha_ joined #nimrod
12:06:37*gradha quit (Ping timeout: 272 seconds)
12:06:38*Raynes quit (Ping timeout: 272 seconds)
12:06:38*fowl quit (Ping timeout: 272 seconds)
12:06:40*p0nce is now known as ponce
12:06:59*Raynes joined #nimrod
12:07:02*fowl joined #nimrod
12:07:21*fowl quit (Changing host)
12:07:21*fowl joined #nimrod
12:07:46*Raynes is now known as Guest57142
12:10:51*psquid joined #nimrod
12:11:17*achim joined #nimrod
12:14:58*Mordecai joined #nimrod
12:15:46*psquid quit (Disconnected by services)
12:15:48*Mordecai is now known as psqui
12:15:50*psqui is now known as psquid
12:22:06*BitPuffin joined #nimrod
12:22:36*Araq_ quit (Read error: Connection timed out)
12:22:49*achim quit (Quit: Textual IRC Client: http://www.textualapp.com/)
12:24:58*Araq_ joined #nimrod
12:31:28*BitPuffin quit (Quit: WeeChat 0.4.2)
12:31:45*BitPuffin joined #nimrod
12:41:32*ponce is now known as Guest45223
12:48:49BitPuffinhmm
12:49:04BitPuffincan objects have constants?
12:49:40BitPuffinor bah, I guess I could just create a proc or method that returns a value
12:50:10gradha_why would you attach a constant to a runtime object requiring some kind of runtime indirection access?
12:51:21BitPuffingradha_: because I want to be able to use polymorphism with multiple object types for the same proc, but I want them to have a value for what table they are in that is constant and shared across objects instead of setting one per object
12:53:55gradha_create a 'proc getConstant(type): int = myConstant' for each type, that can be used at compile time
12:54:44gradha_oh, unless you need runtime methods and stuff, then it can't be constant
12:55:32BitPuffingradha_: yes, see what I wrote above
12:55:35BitPuffinor bah, I guess I could just create a proc or method that returns a value
12:57:00*EXetoC joined #nimrod
13:01:31*darkf quit (Quit: Leaving)
13:03:50BitPuffinuh
13:03:56BitPuffinis it legal to just have an empty object?
13:04:06BitPuffintype TFoo = object of TObject
13:04:09BitPuffinand that's it?
13:05:48Kooda`type TFoo = object` seems valid as well
13:05:59BitPuffincool
13:11:36BitPuffinhmm tricky
13:17:35*Araq_ quit (Read error: Connection timed out)
13:18:37*Araq_ joined #nimrod
13:24:05*gradha_ quit (Ping timeout: 245 seconds)
13:47:19*Araq_ quit (Quit: ChatZilla 0.9.90.1 [Firefox 26.0/20131205075310])
14:40:57*Araq_ joined #nimrod
14:44:48*psquid quit (*.net *.split)
14:50:15*psquid joined #nimrod
14:51:05dom96sup
14:59:51*achim joined #nimrod
15:01:47*Araq_ quit (Quit: ChatZilla 0.9.90.1 [Firefox 26.0/20131205075310])
15:02:19*achim quit (Client Quit)
15:21:15*gradha joined #nimrod
15:42:05*Guest45223 is now known as ponce__
15:57:19*gradha quit (Ping timeout: 260 seconds)
16:10:07*gradha joined #nimrod
16:14:18*achim joined #nimrod
16:18:07*achim quit (Client Quit)
16:19:39*Mordecai joined #nimrod
16:21:11*psquid quit (Ping timeout: 246 seconds)
16:21:41*Mordecai is now known as psquid
16:41:39*OrionPK quit (Remote host closed the connection)
16:46:00*OrionPK joined #nimrod
16:59:22NimBotAraq/Nimrod master 5141f3e Grzegorz Adam Hankiewicz [+0 ±1 -1]: Removes generated .dot file uploaded by mistake.
16:59:22NimBotAraq/Nimrod master 84a878f Grzegorz Adam Hankiewicz [+0 ±1 -1]: Merge pull request #791 from gradha/pr_removes_generated_file... 2 more lines
17:13:20NimBotAraq/Nimrod master 43dd889 Michał Zieliński [+0 ±1 -0]: httpclient: strip trailing whitespace from headers.... 3 more lines
17:13:20NimBotAraq/Nimrod master ebab484 Dominik Picheta [+0 ±1 -0]: Merge pull request #788 from zielmicha/httpclient-fix... 2 more lines
17:17:35VarriountGood morning!
17:18:51gradhayoo hooooo
17:19:51VarriountThe hiiiiiillllsss are aliiiiiivveee!!!!
17:20:09VarriountWiiiitth the sooouuunnd of muuuusiiiic!
17:20:34gradharight
17:20:52dom96I've heard that in Friends. What does that reference?
17:21:16Varriountdom96, It's from the musical "The Sound of Music"
17:21:46VarriountStarring Julie Andrews (Actress from Mary Poppins)
17:21:59dom96never heard of it heh
17:22:26dom96I don't really enjoy musicals though
17:22:59VarriountHey dom96, can I get you to test something for me?
17:23:41dom96ehh sure. But i'm not on linux atm (I presume you want me to test it on linux?)
17:23:46VarriountOh, yes.
17:24:26VarriountI need to get these additions to os.nim tested
17:24:39dom96which ones? I can test them later.
17:24:47VarriountI'd like to be sure that I haven't broken something, seeing as os.nim is a core lib
17:25:00Varriountdom96, It's a branch on my fork of nimrod
17:25:14Varriount'os/add-linkprocs'
17:26:02VarriountAnd here's the test script - https://gist.github.com/Varriount/8185073
17:26:33Varriountdom96, just so you know, the test script needs root priveleges, or at least, the ability to create symlinks and hardlinks
17:26:54dom96I don't think symlinks require root privs.
17:26:59dom96not sure about hardlinks
17:27:08VarriountHardlinks do, on Linux
17:27:16VarriountSymlinks, depends on the distro
17:27:40VarriountOn Windows, both symlinks and hardlink creation require admin rights
17:29:12*Demos joined #nimrod
17:30:08VarriountHi Demos . Made progress on that visual studio extension?
17:32:08Demosnot much, been away from a windows computer. And it is going slow besides as it is a side project.
17:41:15*Demos quit (Remote host closed the connection)
17:46:06KoodaHardlinks do not require root privileges under unix-like systems
17:47:36AraqVarriount: just put the test under tests/admin or something like that
17:48:00VarriountKooda, well in that case, if you are running a unix-like system at this time, would you do me the favor of running the test script with the aforementioned branch?
17:50:45KoodaWill do, just let me get into my train
17:54:27gradhaKooda: transport tycoon FTW
17:57:02Araqoh btw I remembered the tester has a plugin system, Varriount :-)
17:57:43VarriountHuh. Odd design choice - walkDirRec only yields files, not files/directories/links
17:58:25gradhabbl
17:58:27*gradha quit (Quit: bbl, need to watch http://www.youtube.com/watch?v=dEf4PJZXBxA again)
17:59:05Araqwell you can splitFile on the file to get the path but if you traverse the directory recursively, why would you ever want the directories?
17:59:28VarriountAraq, to copy the directories?
18:00:19VarriountCreate a list of all the directories, files, links, etc in a target directory?
18:00:24Varriount*To create
18:00:31Araquse walkdir for that
18:00:53VarriountBut walkDir isn't recursive
18:01:13Araqso use recursion lol
18:01:28VarriountAraq, I just find it.. unexpected
18:02:12VarriountI would have thought that a procedure whose name is the same as that of "walkDir", with "Rec" as an addition, would yield the same kind of type.
18:03:10VarriountI mean, seeing the two procedures in name only, I would have thought that the only marked difference between the two would be that one is recursive, while the other is not.
18:05:06*DAddYE joined #nimrod
18:06:33Araqthat's a good point Varriount, however
18:06:50AraqwalkDirRec is only for convenience and as such should handle the common case
18:07:14Araqthe common case as far as I can see it, is that you want to yield over every file
18:07:24*jpoirier joined #nimrod
18:07:54Araqas soon as you have a case statement to distinguish the different kinds you might as well code the recursion explicitly
18:08:13VarriountWait, what? Explain?
18:10:50Araqsorry bbl
18:14:49*igorkot joined #nimrod
18:17:37*OrionPK quit (Remote host closed the connection)
18:18:34Araqhi igorkot welcome
18:19:39AraqVarriount: well if you have:
18:19:51Araqfor k, f in walkDirRec("..."):
18:19:54*igorkot quit (Remote host closed the connection)
18:19:55Araq case k
18:20:02Araq of ...
18:20:25Araqit's a small step to put it into a proc and invoke it recursively for pcDir
18:20:46Araqso it provides nothing over walkDir
18:21:22Araqso I chose to make walkDirRec yield only filenames
18:26:57VarriountAraq: But on the other hand, if walkDirRec were to accept filter arguments, it would be trivial to simply ignore the kind returned by the iterator and still give the same functionality.
18:27:32Araqyeah I guess :P
18:29:25VarriountMy main concern here is with flexability. walkDirRec intentionally witholds information gained from walkDir. From the view of a user of the standard library, that's irritating, as it either means that the user has to write what is, in essence, a copy of walkDirRec with one or two lines changes, or work around the information withheld by walkDirRec by determining the kind of the path returned.
18:29:49Araqwell the thing is
18:31:50Araqlets just deprecate waldDirRec
18:32:19Araqafterwards we can change its interface
18:34:37Araqthere is also walkFiles which can be used for the same anyway
18:35:44Araqand I think the 'rec' part is a bit misguided as it encourages to iterate over files in .git directories for instance, in other words it's common to trim the tree traversal but *Rec doesn't support this
18:37:00VarriountAraq: Maybe I'm just too used to designing a couple of very flexible/powerful 'root' procedures, and then splitting up their functionality via simple 'child' procedures. :/
18:37:47NimBotnimrod-code/babel master 64164e9 Dominik Picheta [+0 ±2 -0]: Version 0.2
18:39:38Araqwell koch.nim uses walkDir and walkFiles but not walkDirRec :P
18:40:15Araqand we all know a sample set of size 1 is representative ;-)
18:40:52*Varriount is glad he took an advanced statistics course in high-school
18:41:30VarriountOr in German terms, in.. Gymnasium, I think?
18:41:50Araqhmm not sure, I think so
18:42:51Araqyeah, high school graduation is comparable to the Abitur according to the internet
18:43:28dom96First official babel release! yay!
18:43:34Varriount:D
18:44:07Araqdom96: congratulations
18:44:47dom96thank you
18:45:52*OrionPK joined #nimrod
18:50:02dom96Damn it.
18:50:23dom96Found a bug that I missed lol
18:50:36Araqreleases are hard
18:50:50dom96yep
18:51:27Araqthat's why we don't have any anymore :-/
18:51:54VarriountHm. Why is it that, when nimbuild runs the tester, it uses the nimrod lib found in the system nimrod installation, instead of nimbuild's version of nimrod?
18:52:27Araqdom96 doesn't know about --lib I guess :P
18:53:44VarriountWell, it's playing havok with my attempts to develop parts of the stdlib.
18:54:36Araqwell so please fix it
18:55:10VarriountYes mother.
18:55:16Araqoh I wanted to tell you a story about a plugin system
18:56:53Araqwhen I wrote the tester I had the problem that I had lots of tests that need to do special things, for instance the symbolFiles tests need to clear the nimcache at startup
18:57:18Araqso I wanted to run scripts from the tester
18:57:51Araqand these scripts should be in nimrod too of course but need to access some internal objects in the tester
18:59:04Araqso I needed a proper scripting layer and some support to inject data types and operations in the scripts' scope
19:00:28Araqhowever I had no such scripting engine. So what should I do? I can't wait for it to arrive, tests are too important
19:00:48AraqI came up with a much simpler solution instead
19:01:32Araqinstead of scripts I made specials.nim an include file
19:01:52Araqand tada all the features I wanted where already there
19:02:52VarriountOk, interesting.
19:02:53Araqthe only downside is that you have to recompile the tester when you change the "scripts"
19:03:19Araqbut I couldn't care less about that, compile times are fast enough
19:05:09dom96http://forum.nimrod-lang.org/t/331
19:07:05*io2 joined #nimrod
19:08:17OrionPKyay
19:12:56VarriountAraq, what's the policy for using assertions?
19:13:13VarriountI mean, when should assertions be used in place of raising exceptions?
19:13:39Araqto tell the programmer that you screwed up API usage asserts should be used, not exceptions
19:13:49*DAddYE_ joined #nimrod
19:14:03VarriountOk. Gotcha.
19:15:14Araqdon't introduce ArgumentException or some stupid stuff, it doesn't play nice with the effect system, assert pretends to not raise any exceptions
19:15:31Araqfor this reason
19:17:31*DAddYE quit (Ping timeout: 260 seconds)
19:19:47*DAddYE_ quit (Remote host closed the connection)
19:20:20*DAddYE joined #nimrod
19:31:50VarriountAraq, does 'koch tests' accept the --lib argument?
19:34:14Araqyup
19:35:04Varriountso 'koch tests --lib:.\lib' should work?
19:36:02Araqsorry I misread koch.nim
19:36:10Araqnah it doesn't work
19:36:25*Varriount goes to open another branch
19:37:38dom96hah. No wonder I don't know about it, when it doesn't exist for koch tests :P
19:37:48VarriountAlso, how do I use the boolean 'and' on a set?
19:39:04Araqif flags * {foo, bar} == {foo, bar}:
19:50:00*faassen quit (Quit: Leaving.)
19:51:10*Guest57142 is now known as Raynes
19:51:11*Raynes quit (Changing host)
19:51:11*Raynes joined #nimrod
19:53:01VarriountAraq, how do you want walkDirRec to be deprecated? Do you want me to modify the behavior now, add a 'when defined(compatAPI)', create a new procedure..?
19:53:12Varriount* or create a
19:53:38Araqjust mark it {.deprecated.}
19:53:49VarriountOk.
19:54:32BitPuffindom96: diddely doddely
19:54:39BitPuffinAraq: wanna play dota later?
19:54:42VarriountYou know, it occurs to me that the new procedure could actually subsume walkDir's implementation
19:54:46BitPuffinWe'll play single draft for ze balance
19:54:53BitPuffindom96 can't join us
19:55:43VarriountAraq, what do you think? -> https://gist.github.com/Varriount/8187182
19:57:19*gradha joined #nimrod
19:57:29BitPuffindom96: just kidding, ofc you can
19:57:38AraqBitPuffin: nope. will never play it again, it's stupid
19:57:51VarriountIf you add pcDir and pcLinkToDir to the yieldFilter args, and take them out of the followFilter args, you get walkDir
19:58:15BitPuffinAraq: well with single draft it is much less stupid
19:58:31BitPuffinAraq: it let's each player select only between three random heroes
19:58:38BitPuffinso people don't pick lame combos as easily
19:59:02BitPuffinAraq: be a good dragon
20:04:37gradhadom96: does it make sense to distribute babel binaries? babel depends on the compiler, so if you install only the babel binary it won't help much
20:05:35dom96gradha: Indeed. The archive for windows which I created rebuilds babel anyway.
20:06:34*Demos joined #nimrod
20:07:14gradhain the future an ouroboros compiler could help with that
20:07:48Demosso I think I will have syntax highlighting working if I can get visual studio to actually recognise that my extension depends on a native DLL
20:08:10AraqVarriount: it's ok ... :P
20:08:32VarriountAraq, only ok?... *goes off and cries*
20:09:04*DAddYE_ joined #nimrod
20:09:11Araqbtw pathPair should be PathPair and constants are in UpperCaseMode too
20:09:46Araqyay for --cs:partial now we need to make people adhere to a naming convention
20:10:25VarriountI'm still not sure if PathPair is a good name for a path and it's kind, but I have yet to think of any beteer name.
20:10:28Varriount*beter
20:10:31Varriount*better
20:10:41OrionPKcool demos
20:10:53Araqnice Demos
20:11:31Demoswell that is a big if, I am not even sure how MS feels about distributing native code with language extensions
20:11:41*DAddYE quit (Ping timeout: 252 seconds)
20:12:21AraqVarriount: since it's a tuple there is no need to name the type
20:12:54VarriountAraq, well yes, but have you seen the length of the entire type description?
20:13:17Araqyes that's why you only got an "ok"
20:13:18Varriount"tuple[kind: TPathComponent, path: string]" is 41 characters long
20:13:57VarriountThe only way I could shorten it is to use the new PathKind enum types
20:15:50VarriountAraq, any possible ways to improve it then?
20:16:21Araqnah, but I still like walkDir better :P
20:16:31Araqwhat's the new PathKind enum type?
20:17:19VarriountTPathComponent with an extra member, pkNone
20:17:30VarriountIt's for the path classification procedure.
20:18:38Araqah yeah
20:19:07*DAddYE_ quit (Remote host closed the connection)
20:19:43*DAddYE joined #nimrod
20:22:03EXetoC"when defined(isMainModule)" works?
20:22:22Araqno it's always defined
20:22:26EXetoCit's a bool. I've only seen "when isMainModule"
20:22:29EXetoCright
20:22:30Araqwhen isMainModule
20:22:36VarriountOh. My bad.
20:23:01Araqoh I see, yeah missed that
20:23:03VarriountAraq, would you prefer that I shorten the argument names to 'follows
20:23:20Varriount* `follows` and `gives`?
20:25:10Araqfine with me
20:25:14EXetoCincludes/yields?
20:25:28Araqfollows/yields
20:28:48EXetoCyeah
20:43:03dom96BitPuffin: sooo, shall we?
20:51:40VarriountAraq, dom96, My computer, including the builders, are going to be offline for a bit - I'm installing a Linux distro onto a secondary hard drive
20:51:53*Varriount quit (Quit: Leaving)
21:16:48dom96BitPuffin: HELLO?!?
21:37:06*Demos_ joined #nimrod
21:41:17*Demos quit (Ping timeout: 272 seconds)
21:46:23OrionPKwoot
21:46:26OrionPKjust got my chemex
21:47:06dom96your what?
21:47:19OrionPKhttp://graphics8.nytimes.com/images/2010/04/22/t-magazine/22strand-chemex/22strand-chemex-custom1.jpg
21:47:50gradhaneeds a nimrod wrapper
21:48:16OrionPKhttps://github.com/onionhammer/onion-nimrod/blob/master/stringbuilder/stringbuilder.nim
21:48:29OrionPKanyone care to suggest any ways I can improve the performance of this
21:50:12Araqdo not use 'nostackframe' for fuck's sake!
21:50:23OrionPKwill that improve the performance?
21:51:14OrionPKaraq this is the noodle phase, where I am just throwing shit at the wall and seeing what sticks :p
21:51:47Araqstringbuilder is offensive, use a string instead
21:51:53dom96Is that string builder significantly faster than a normal string?
21:51:59OrionPKyes
21:52:03dom96By how much?
21:52:04Araqno
21:52:06OrionPKyes
21:52:23Araqpreallocated with 'setlen' or newStringOfCap ?
21:52:25gradhaOrionPK: var result = newStringOfCap(10_000 * 80)
21:52:33gradhaOrionPK: that makes both tests practically the same
21:52:36OrionPKString Concatenation Operation took 4.020s StringBuilder Concatenation Operation took 2.687s
21:53:11gradhaString Concatenation Operation took 1.722s
21:53:12gradhaStringBuilder Concatenation Operation took 1.652s
21:53:43gradhawithout preallocation the normal concatenation takes 3s due to reallocations I presume
21:53:51OrionPKthat improves the performance of string allocation gradha
21:54:01OrionPKnot what Im really aiming to improve
21:54:02OrionPK:p
21:54:30gradhaI think it shows that you only get marginal optimization from then on
21:54:55OrionPKhow do I know the capacity in the first place
21:55:02OrionPKI dont
21:55:16OrionPKif I knew the capacity to make the string before a dynamic operation, all my problems would be solved
21:55:42gradhaso strings are being added while you are looping? can't you loop first and add all the len() calls?
21:56:25OrionPKI want a drop in replacement for use in my template module
21:56:37OrionPKwhere basically it calls result.add("") a bunch
21:56:45OrionPKand then renders to a string at the end of the procedure
21:57:02dom96Doesn't the compiler just optimise the 'discard $result' away?
21:57:31OrionPKdont think so..
21:57:49OrionPKthe results are very different w/o that line dom96
21:58:03OrionPKString Concatenation Operation took 4.043s StringBuilder Concatenation Operation took 1.971s
21:58:13OrionPKthe bulk of the work is the calls to "add"
21:58:21gradhaOrionPK: if the buffer reallocations are the problem you could create a seq of pointers to those strings, and at the end when you concatenate look up first the total len()
21:58:23OrionPKthe tostring is actually pretty cheap by comparison
21:58:46OrionPKso basically what I'm doing?
21:59:38Araqyour template module needs what source code filters already provide: a way to write to some file/socket/whatever directly
21:59:54gradhaOrionPK: maybe instead of concatenating all strings into a buffer there is a way to implement an iterator using yield?
22:00:01OrionPKaraq it just calls "result.add"
22:00:06OrionPK"result" can be anything
22:00:12Araqtrue I guess
22:00:14OrionPKas long as it conforms to that interface
22:00:20Araqok
22:00:34Araqso make it output to a file directly and call it a day
22:00:46OrionPKhuh?
22:00:47dom96hrm, I think Araq may be right. You are constructing a huge string and then sending it all in one big go to the socket.
22:01:15OrionPKin this case
22:01:32OrionPKthat's a good point
22:01:41dom96But I don't Jester allows you to do it any other way.
22:01:42OrionPKbut I wouldnt be able to use jester as it is
22:01:48dom96*don't think
22:01:52OrionPKright
22:02:15OrionPKjester just needs a few more hooks for lower level access I guess
22:02:56OrionPKI'm really just trying to get this faster on my raspberry pi
22:03:16OrionPKon a nice powerful CPU irc familiar is already pretty damn quick
22:03:34AraqOrionPK: that's fine and your stringbuilder has some good ideas in it
22:03:57Araqbut I don't think we should make it part of the stdlib or encourage its use
22:04:09OrionPKI wasnt proposing it for the stdlib by any means
22:04:14Araqyeah ok
22:04:15OrionPKit'll be a babel package
22:04:22gradhaOrionPK: how about paging? can't you subdivide whatever you are scrolling into smaller chunks?
22:04:26Araqbah :P
22:04:28OrionPK:)
22:04:50OrionPKdefinitely a lot faster than ropes
22:05:06Araqyup
22:05:09OrionPKI had a ropes benchmark in there as well, took it out because it wasnt worth waiting for it to end
22:05:24dom96Araq: Can't we somehow abstract this so that the string implementation uses OrionPK's code?
22:05:37OrionPKgradha I had thought of that actually
22:05:46OrionPKgradha but that just makes the "add" call even slower, IMO
22:05:49OrionPKand that's the slow part already
22:06:04Araqdom96: for yester perhaps in general no
22:06:14Araqbbl
22:06:43gradhaOrionPK: I mean, instead of concatenating all 10000 lines, do work incrementally until the visible lines are displayed, and until the user scrolls, don't bother about the rest
22:06:47OrionPKdid he mean jester?
22:07:06OrionPKooohhh
22:07:09jpoirierquestion, is Pointer == pointer?
22:07:15OrionPKyeah I thought of that as well gradha
22:07:24OrionPKI would probably do it a bit differently
22:07:43OrionPKrather than waiting for them to scroll, just load the last x lines, then after the DOM is loaded load the rest asynchronously
22:07:51OrionPKbut I tend to dislike those sorts of shenanigans :)
22:08:03OrionPKjpoirier nimrod isnt really case sensitive atm
22:08:30jpoirierokay, thanks
22:09:12OrionPKgradha actually for requests from mobile browsers I'm limiting it to the last 100 (150?) or so events in the log
22:09:25OrionPKbecause scrolling on my phone is subjectively a bit chunky
22:09:42jpoirier...any plans to make it case-sensitive in the future?
22:10:09gradhaOrionPK: isn't the keyword DOM the problem? why are you using a browser component to render text instead of drawing the string?
22:10:09OrionPKjpoirier I believe so, but there will be a compiler switch to switch back to classic iirc
22:10:30OrionPKgradha what?
22:10:47OrionPKjpoirier there was some discussion on the forum about this
22:11:00gradhaOrionPK: you said "after the DOM is loaded", that suggests you are using a webview or something like that to display the log
22:11:30jpoirieri'll go browse the forum threads, cheers
22:11:46OrionPKgradha it's a web app
22:12:09gradhaOrionPK: oh, ok, I thought you are implementing that android irc thingy
22:12:21OrionPKhttps://dl.dropboxusercontent.com/u/417554/Screenshot_2013-12-29-12-30-58.png
22:12:42OrionPKthat is inside chrome for android, but I have a meta-tag that lets you pop it out into a sort of standalone app
22:13:06OrionPKit's called "Add to Homescreen"
22:13:11OrionPKhttps://developers.google.com/chrome/mobile/docs/installtohomescreen
22:13:21gradhaah, well, that's your performance problem then, it's a web app
22:13:34OrionPKnah
22:13:44OrionPKthat's my issue w/ scrolling performance
22:13:51OrionPKnot my issue w/ request time performance from RBPI
22:14:24OrionPKI might write native wrappers for it at some point... but it would be a lot of work
22:14:34OrionPKthere is a lot of client-side code
22:15:58gradhaaren't both problems related? if your client doesn't request the whole thing, your RBPI doesn't have to add that huge buffer, so basically you are reimplementing SELECT LIMIT on http
22:16:48OrionPKnot really, one issue is client side the other is server side
22:17:21OrionPKthe server side issue is that it takes something like 50 milliseconds to render a full IRC log (like 700 events, capped)
22:17:38OrionPKthe client side issue is that on chrome for android the scrolling isnt completely smooth
22:17:58OrionPKand the server recognizes that the request comes from a mobile device and cuts it down from 700 max to 150 max events
22:18:17OrionPKthe server will only actually RENDER 150, it doesnt render all 700 and cut it down
22:20:58dom96OrionPK: From a quick look at the code I think I can expose the socket for you.
22:21:41OrionPKcool
22:21:55OrionPKall for me :)
22:22:51OrionPKdom96 maybe you should have a kind of 'socketwriter' object,
22:23:02OrionPKavailable upon request
22:23:06dom96OrionPK: Why?
22:23:20dom96Why don't I just give you a TSocket/PAsyncSocket?
22:23:31OrionPKin addition to that, I mean
22:23:59OrionPKi.e. get "/": var result = responswriter(response)
22:24:06OrionPKthen result has ".add"
22:24:15OrionPKand it automatically gets sent out straight away
22:24:26Araqno, just no
22:24:33OrionPKyes, just yes
22:24:37Araqadd "add" to socket instead
22:24:37OrionPKyou're too opinionated
22:24:38dom96Just pass the socket to your template stuff
22:24:53Araqor make your template slightly more flexible
22:24:55dom96I am not adding 'add' to socket.
22:25:02Araqgah
22:25:04dom96He can do that if he wishes.
22:25:10Araqeverybody disagrees with me these days
22:25:10dom96Perhaps that's what you mean heh
22:25:15OrionPKlol
22:25:27OrionPKjust a thin layer so that it all conforms to the same interface
22:25:43OrionPKhell
22:25:51OrionPKeven "add" on a socket as a proc in jester would be enough :P
22:25:55dom96You can write it yourself then.
22:25:59OrionPKlol
22:26:07OrionPKsynergy dom96
22:26:11OrionPKsynnerrrgyyyyy
22:26:19dom96proc add(sock: TSocket | PAsyncSocket, data: string) = sock.send(data)
22:26:20AraqI like "add" for sockets though I wonder if we perhaps should have used an operator instead
22:26:41Araqlike C++'s <<
22:26:45OrionPKyeah
22:26:49OrionPKI agree
22:26:55dom96I can live with an operator.
22:26:57OrionPKthere should be one pattern to follow
22:26:57dom96But not 'add'
22:27:11dom96'add' is strictly for appending or adding items.
22:27:17dom96You don't append to a socket.
22:27:19OrionPKI kind of agree with you there dom
22:27:29OrionPKI dont think you should add it to a socket, I think you should add to a response
22:27:41OrionPKan HTTP response that jester gives you
22:27:43OrionPKnot part of the std lib
22:27:45dom96In fact, an operator is risky.
22:27:49Araq"add" and "len" are very generic in nimrod
22:27:57dom96Because you won't notice the extra exceptions that can be raised when sending to a socket.
22:29:03Araqwell lets add something << and make '<<' an alias for add for strings and seqs
22:29:18dom96I in fact should just follow zahary's advice: https://github.com/dom96/jester/issues/1
22:29:29OrionPKI like this idea
22:30:08Araqso "add" is still append but strings can be considered an output stream easily
22:30:45OrionPK<< is alias for "add" on strings, an alias for "write" on sockets/files
22:31:10Araqyeah exactly
22:31:21OrionPKyeah, im convinced
22:31:40dom96yay, we're turning into C++
22:31:43OrionPK:D
22:31:59Araqwell obviously we need something better than <<
22:32:00OrionPKI dont care for the << syntax personally, but I do like consistency
22:32:22Araq &= :P
22:32:31OrionPK'add" :P
22:32:36dom96lol
22:32:52OrionPK&= isnt terrible
22:32:56Araqlet's use &=
22:32:59Araqit already exists
22:33:07Araqand it already is an alias for string.add iirc
22:33:09dom96I think it's in the spirit of Nimrod to use words...
22:33:09OrionPK& == "and" though
22:33:18dom96inc vs. ++
22:33:28Araqno & == "concat"
22:33:37OrionPKI know, but & means "and" in english
22:33:46OrionPKampersand is an "and" symbol
22:33:52Araqenglish is irrelevant
22:33:54OrionPKlol
22:33:59OrionPKis it irrelephant?
22:34:36OrionPKresult.put("something")
22:34:40Araqdom96: symbols sometimes help to not confuse people
22:35:00EXetoCyes we already have &=. nothing wrong with that
22:35:03dom96Let's just come up with a symbol for everything then.
22:35:04Araq&= is actually a pretty good example for this, it's add, put, send, write
22:35:14dom96put it all in a 'brainfuck' module and call it a day
22:35:20OrionPK:P
22:35:41OrionPKdom96 dont be such a contrarian
22:36:19Araqdom96: user defined operators are a feature that's embraced by nimrod whether you like it or not, $ comes to mind
22:36:57Araqimportant ops deserve an operator symbol
22:37:25dom96They are?
22:37:37dom96Well I disagree with this philosophy! How did I never realise!
22:37:45dom96Time to go back to brainfuck.
22:37:54dom96Certainly less operators there.
22:38:04dom96>>>+++...>>>>!!
22:38:25AraqHaskell has user definable operators so it must be good :P
22:38:35dom96That's true.
22:39:17Araqand you know I wanted # to mean "len" but unfortunately it's already used for comments
22:40:11EXetoCI often define `?` for various C libs, as a concise way to throw on errors. I also have ==? and ~=? for unit testing (the unittest module was broken at the time)
22:40:39OrionPKyou're a monster
22:40:46AraqI like ==? for case insensitive comparisons :-)
22:41:20Araqdidn't make it into strutils because I feared the complaints about it being not unicode aware for performance reasons. lol
22:42:42*darkf joined #nimrod
22:43:20Araqturns out ... it doesn't matter. people blame me for everything that I did include anyway.
22:43:27EXetoCtell them about profiling then
22:44:46Araqit's also not only about performance but also about code size and sanity. for example, the HTTP protocol requires case insensitive comparisons but only uses ascii in its headers
22:45:25EXetoCok
22:45:33Araqso if ==? only cares about ascii that's all that matters
22:45:36gradhaAraq: you wrote libsvm?
22:45:47gradhaAraq: git says so, but just checking
22:45:53AraqI wrapped it with c2nim yeah
22:46:20gradhaAraq: you forgot to add it to http://www.csie.ntu.edu.tw/~cjlin/libsvm/, now it's there
22:47:14Araqyay I guess that means nimrod is alive and kicking
22:51:39Araqso ... the decision has been made. We all love &=
22:52:07dom96I don't but no one cares about me sooooo
22:52:29EXetoC:/
22:52:59Araqwe really need a ministry of love here ...
22:54:39gradhamaybe instead of KILLALLHUMANS I should change my life objective to KILLALLGOOGLE+
22:54:43EXetoCthe operators are common, and we don't have over >9000 of them, so it's fine with me
22:55:20*dom96 gets that reference
22:57:58*Varriount joined #nimrod
22:58:03EXetoCgoogle<3
23:02:45*brson joined #nimrod
23:07:22VarriountI'm currently using virtualbox to install a linux distro onto a non-virtual hard disk. Isn't technology wonderful?
23:08:03*shevy joined #nimrod
23:13:05OrionPKI'll make sure to add &= to string builder just for you araq
23:13:59AraqThat's nothing. I made Nimrod just for you, OrionPK
23:14:26VarriountAww. Such brotherly love. I think I might shed a tear.
23:15:03AraqVarriount: tried SteamOS already?
23:15:44OrionPKobviously araq, since all of you are just figments of my own personality
23:17:01Araqyou're damn right, Mr Anderson
23:17:46VarriountAraq, I'm leery of any super-large software projects headed by Valve
23:18:22OrionPKI'd like to try steam os
23:18:29OrionPK but I
23:18:37OrionPKdon't want to put it on my main box
23:19:17Araqbtw do the twins die in the explosion?
23:21:36OrionPKI don't believe in the sequels
23:22:49*XAMPP-8 joined #nimrod
23:24:18gradhathey all die
23:24:39*Varriount quit (Read error: Connection reset by peer)
23:32:25gradhashould 'echo "foo"[3]' work (it does now) or should it raise EInvalidIndex in debug builds?
23:33:05Araqaccessing the trailing \0 is valid
23:48:00dom96Araq: I think we should create a Nimrod twitter account.
23:48:20Araqperhaps
23:50:12gradhacreate a nimrod google+ account
23:51:17dom96I'll create @nimrodlang
23:51:23*PortableEXetoC joined #nimrod
23:53:22gradhagood night, honey badgers
23:53:27*gradha quit (Quit: bbl, need to watch http://www.youtube.com/watch?v=dEf4PJZXBxA again)
23:56:58*PortableEXetoC quit (Quit: cake)
23:58:37BitPuffindom96: dota?
23:58:44dom96BitPuffin: YEAH!
23:58:46dom96Just sec
23:58:56dom96Setting up the official Nimrod twitter!
23:59:35BitPuffindom96: amagadwit
23:59:42BitPuffinI can has write access?