code logs -> 2016 -> Fri, 02 Dec 2016< code.20161201.log - code.20161203.log >
--- Log opened Fri Dec 02 00:00:33 2016
00:08
<~Vornicus>
https://gist.github.com/DUznanski/f4a47fc84237efbd70a6a7154a83e0b1 celticminstrel: that should do
00:10 Vash [Vash@Nightstar-uhn82m.ct.comcast.net] has joined #code
00:11
<~Vornicus>
good thing I tested it, I had some goofy shit in there
00:16
<~Vornicus>
the aStar compare depends on cost (the cost of getting all the way to that point) and heuristic (the estimated cost of getting from there to the target point)
00:38 catadroid [catalyst@Nightstar-1dg0qu.dab.02.net] has joined #code
01:33 * celticminstrel is curious why Vornicus included aStar_compare in the paste.
01:34
<~Vornicus>
aStar_compare is a comparison function designed for A*.
01:34
<@celticminstrel>
Hmm, so I can't just substitute this in for my priority queue... need to rearrange some stuff...
01:35
<@celticminstrel>
Or maybe I could wrap the priority queue around this...
01:36
<@celticminstrel>
Probably better to rearrange some stuff though.
01:37
<~Vornicus>
Yeah. I'd say abstract a* all the way out, personally
01:38
<@celticminstrel>
Definitely a good idea since I can then use it for AI pathfinding too.
01:42
<@celticminstrel>
When I switch between Mac and Windows I keep getting confused over whether to use Cmd or Ctrl.
01:54
<@celticminstrel>
The only things I need to fix to make it general are the cost function and the effect on path reconstruction (so, a callback).
02:13 Kindamoody|afk is now known as Kindamoody
02:17
<~Vornicus>
Fully abstracted, A* takes a function that, given a node, finds other nodes you can get to from there and their corresponding costs, and another function that, given a node, gives the heuristic, and then handles the rest itself
02:17
<@celticminstrel>
Sounds like I need three functions then...
02:18
<@celticminstrel>
The default callback is "push to an array".
02:18
<@celticminstrel>
Okay so by this...
02:18
<@celticminstrel>
"a function that, given a node, finds other nodes you can get to from there and their corresponding costs"
02:18
<@celticminstrel>
You mean a function that returns the cost from a tile to its neighbour?
02:18
<~Vornicus>
Correct.
02:18
<@celticminstrel>
Oh, but I guess it could go a bit further huh.
02:19
<@celticminstrel>
And return the costs from that tile to all its neighbours.
02:19
<@celticminstrel>
So then my for i < 4 loop instead loops over the result of that callback...
02:20
<~Vornicus>
Right
02:21
<@celticminstrel>
It would be nice if I could create a "class" which serves as a proxy to an arbitrary area of the map.
02:21
<@celticminstrel>
But JavaScript does not support overloading operators... not that that makes it impossible...
02:22
<@celticminstrel>
I mean my map is already using .get() and .set() anyway...
02:22
<@celticminstrel>
...but first, A*.
02:22
<@celticminstrel>
And then something else that I want to try out that's totally unrelated.
02:28 * celticminstrel contemplates using yield in the neighbours callback.
02:30
<@celticminstrel>
Then again, I probably shouldn't be worrying about iterating twice over the neighbours (once to find them in the callback, and once to consider them in the A*).
02:37
<@celticminstrel>
So in your comparison function, .cost is "the already-calculated cost to reach this tile from the starting point" and .estimate is "the estimated cost from this tile to the end point"...
02:39
<~Vornicus>
Correct
02:49
<@celticminstrel>
"estimateCost = estimateCost || Function.prototype.call.bind(Loc.prototype.dist);"
02:51
<&[R]>
FYI: Function.bind is slow
02:52
<&[R]>
Or more correctly, the function it returns is slower than a native function that does the same.
02:53
<@celticminstrel>
I guess I can always pass function(a,b) {return a.dist(b);} if that seems to be a problem (overriding the default with a native function that does the exact same).
02:54
<&[R]>
Both of those codeblocks do something quite different...
02:55
<@Alek>
if there's anyone here who's interested and doesn't own a copy yet: NeverWinter Nights, Diamond Edition, is currently free on GoG. GO GET IT BEFORE IT'S TOO LATE.
02:56
<@celticminstrel>
How so?
02:56
<@celticminstrel>
Under the assumption of (a instanceof Loc && b instanceof Loc), they're equivalent, right?
02:56
<&[R]>
Function.prototype.call.bind(Loc.prototype.dist) returns something that's effectively Loc.prototype.dist.call
02:57
<@celticminstrel>
Yes.
02:57
<&[R]>
OH OH
02:57
<&[R]>
Both cases you have a function that takes (a, b)
02:57
<&[R]>
Right, derp
02:58 * celticminstrel actually got the idea from MDN, though it used apply rather than call in its example.
03:03 Kindamoody is now known as Kindamoody[zZz]
03:06 * celticminstrel adds length getter to the heap class.
03:10
<&ToxicFrog>
Alek: counterpoint: NWN is a dull, tedious slow of a game; if you're jonesing for a D&D-based RPG, get PS:T or NWN2:MotB instead.
03:10 * celticminstrel trying to decide how to specify the coordinate patch in the pathfind function.
03:11
<@celticminstrel>
Not necessary for the current use, but if I want it to be able to cross patch boundaries...
03:19
<@celticminstrel>
...I wonder if I should just make this function take an object instead of a bunch of positional params.
03:19
<@Alek>
TF: I own NWN and BG on CD, packed away somewhere. fond memories and all that. but this has expansions I don't, and it's free. and digital libraries are awesome.
03:20
<&[R]>
Do what ExtJS does!
03:20
<@celticminstrel>
???
03:20
<&[R]>
(which is have pretty much 90% of all functions take a single configuration-object as the parameter)
03:22
<@celticminstrel>
opts = Object.assign(Object.create(default_opts), opts);
03:23
<@celticminstrel>
Whee.
03:33 * celticminstrel has been writing "throw Error(...)"... should there have been a new in there? It seems to work though.
03:45
<&ToxicFrog>
Alek: fair
03:46
<@celticminstrel>
o.o
03:46
<@celticminstrel>
Okay what.
03:46
<@celticminstrel>
Why is there a * on the function keyword.
03:46
<&[R]>
?
03:46 * celticminstrel reading about iterators and generators.
03:47
<&[R]>
JS has iterators now? Yay!
03:47
<@celticminstrel>
Apparently since 2015.
03:48
<@celticminstrel>
Unsupported in Safari.
03:48
<&[R]>
That's because Webkit's development is slow
03:49
<@celticminstrel>
So then. what if yield is used in a regular function...
03:49
<&[R]>
I like how Safari is basically the new IE6, except it has the userbase it deserves
03:50
<@celticminstrel>
?
03:51
<&[R]>
> var a = function() { for (var i = 0; i < 10; ++i) { yield i } return 10 }
03:51
<&[R]>
SyntaxError: Unexpected identifier
03:51 * celticminstrel assumes that's not Firefox.
03:52
<&[R]>
node.js
03:52
<@celticminstrel>
Ah.
04:01
<&[R]>
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/Leg acy_generator_function
04:04
<@celticminstrel>
So just to clarify, there should be no need to check if a tile is already queued, right?
04:05
<@celticminstrel>
I feel like it'd be possible to queue one twice maybe...
04:05
<~Vornicus>
right. in fact -- and this is something that may not show up in this exact thing -- it may be easier to enter a tile from one direction than another
04:06
<~Vornicus>
So the ultimate cost to get to a tile depends on where you came from
04:07
<@celticminstrel>
Well, if I make it consider stairs, I think that could happen, since the cost for climbing stairs (currently) is 2, but the cost of entering a stair tile from an adjacent tile is 1.
04:07
<@celticminstrel>
(Adjacent meaning the four cardinal directions.)
04:08
<~Vornicus>
I don't know how to pick a stairs estimate that makes sense
04:08
<@celticminstrel>
That would be hard, yeah.
04:09
<@celticminstrel>
Though I think the basic taxi-cab distance probably still wouldn't overestimate...
04:09
<@celticminstrel>
Rather, it'd tend to vastly underestimate when pathfinding across levels.
04:10
<~Vornicus>
that's true
04:24
<~Vornicus>
I keep forgetting that it's supposed to be an underestimate and going "what, a million? Idunno..."
04:30
<@celticminstrel>
Okay so this looks done, though I feel there's still something subtly wrong... but that can wait until after food.
04:33 Vornicus [Vorn@ServerAdministrator.Nightstar.Net] has quit [Connection reset by peer]
04:48 Vornicus [Vorn@ServerAdministrator.Nightstar.Net] has joined #code
04:48 mode/#code [+qo Vornicus Vornicus] by ChanServ
04:50
<@celticminstrel>
So the difference between this and the previous iteration is that now the cost is stored for each node in the heap rather than as a tile->cost map, which feels like it's subtly semantically different.
04:51 * celticminstrel checks ROT's implementation for clues...
04:56
<@celticminstrel>
ROT stores it in the visited map, so yeah, I need to do something like that too.
05:31 catadroid` [catalyst@Nightstar-q5ltkr.dab.02.net] has joined #code
05:34 catadroid [catalyst@Nightstar-1dg0qu.dab.02.net] has quit [Ping timeout: 121 seconds]
05:38
<~Vornicus>
I will be so happy when IE is fully consigned to history
05:38
<~Vornicus>
But even now I have to wait for, like, Safari
05:49
<&[R]>
AIUI, Edge isn't horrible
05:49
<&[R]>
But yeah, Safari's definately the new lagger
05:49
<&McMartin>
Edge replacing IE would be what consigns IE to history
05:50
<&McMartin>
Safari is infuriating in all sorts of ways as and *end user*, much less as a developer :(
05:51
< catadroid`>
Like having to interact with Apple products
05:53
<&[R]>
Aye, it has JScript's inflexibility with syntax (trailing commas in array/object literals, and use of keywords as keys) which spidermonkey and V8 don't have (which means you can't just test on FF/Chrome)
05:54
<~Vornicus>
Edge is *so much better*
05:59
<@celticminstrel>
Now, if they allowed trailing commas in function argument lists, everything would be just perfect... >_>
06:05
< catadroid`>
I prefer clojure's approach with commas
06:05
< catadroid`>
They're just treated as whitespace
06:06
<&[R]>
Hmm, JS iterators don't work in for...in loops?
06:06
<@celticminstrel>
for...of apparently
06:07
<@celticminstrel>
But that requires an iterable, not an iterator.
06:07
< catadroid`>
Are iterators not iterable?
06:07 catadroid` is now known as catadroid
06:08
<&[R]>
Seems like they are
06:08
<&[R]>
for...of works.
06:09
<@celticminstrel>
I don't know.
06:09
<@celticminstrel>
A generator is both an iterable and an iterator.
06:09 Vorntastic [Vorn@Nightstar-ufe3lt.sub-174-199-9.myvzw.com] has joined #code
06:10
<@celticminstrel>
I'm just kind of wondering why all this Symbol business hasn't yet lead to the introduction of operator overloading.
06:10
<@celticminstrel>
I mean, technically it has slightly, because there's one called by the instanceof operator, but I mean for normal operators.
06:10 Vash [Vash@Nightstar-uhn82m.ct.comcast.net] has quit [Ping timeout: 121 seconds]
06:11 Vornicus [Vorn@ServerAdministrator.Nightstar.Net] has quit [Ping timeout: 121 seconds]
06:44
<@celticminstrel>
I like ROT in a lot of ways, but both its pathfinding and its FoV are annoyingly.
06:45
<@celticminstrel>
Admittedly the FoV I used before also didn't support variable vision costs...
07:09
<@celticminstrel>
Whyyy does JS have an "in" operator but no "not in" operator. :|
07:11
<&[R]>
For some reason I thought it did
07:11 catadroid [catalyst@Nightstar-q5ltkr.dab.02.net] has quit [[NS] Quit: Bye]
07:18
<&[R]>
Hmm, not isn't a keyword at all
07:19
< Vorntastic>
It'd be !(x in arr)
07:19
<@celticminstrel>
Yeah
07:19
<&[R]>
That's not as nice looking as `x not in obj` though
07:19
<@celticminstrel>
Though generally not an array
07:24
<@celticminstrel>
Okay, I think this is done finally.
07:25 * celticminstrel kept getting distracted by other stuff too.
07:29 Kindamoody[zZz] is now known as Kindamoody
07:30
<@celticminstrel>
Nice, it warns of unreachable code after the return statement.
07:30
<@celticminstrel>
Oh right, I wrote it but didn't yet wire it into the generator.
07:41
<@celticminstrel>
Looks like the first path was found super-fast, but then I used the wrong variable name.
07:42
<@celticminstrel>
Less than a minute total. \o/
07:42
<@celticminstrel>
Firefox didn't even show the timeout dialog.
07:43
< Vorntastic>
Nice.
07:43 Alek [Alek@Nightstar-cltq0r.il.comcast.net] has quit [Ping timeout: 121 seconds]
07:45
<@celticminstrel>
On the other hand I'm not seeing actual connections...
07:47 Alek [Alek@Nightstar-cltq0r.il.comcast.net] has joined #code
07:47 mode/#code [+o Alek] by ChanServ
07:49 Vornicus [Vorn@ServerAdministrator.Nightstar.Net] has joined #code
07:49 mode/#code [+qo Vornicus Vornicus] by ChanServ
07:50 Vorntastic [Vorn@Nightstar-ufe3lt.sub-174-199-9.myvzw.com] has quit [[NS] Quit: Bye]
07:52
<@celticminstrel>
Not finding a path at all is the worst-case runtime, right?
07:52
<~Vornicus>
Yes. You traverse every single cell.
07:52
<@celticminstrel>
Something is clearly wrong.
07:54
<~Vornicus>
What's it doing?
07:54
<@celticminstrel>
Ah, I see what's wrong.
07:56
<@celticminstrel>
For some reason the toString() to translate a node into a key isn't getting called, so Object.prototype.toString is called instead, resulting in all tiles being considered visited from the beginning.
07:59
<@celticminstrel>
I defined a local constructor function and set its prototype from a global variable... no idea why this doesn't work...
08:00
<@celticminstrel>
Well, I guess I'll just use a global function to build the key instead.
08:07
<@celticminstrel>
...seems like it falls back to Object.prototype.toString in the event of an exception, instead of propagating the exception. Fun!
08:08
<@celticminstrel>
Okay now it takes quite a bit longer overall.
08:09
<@celticminstrel>
Might still be something wrong...
08:10
<@celticminstrel>
I'll debug more in the morning.
08:10
<~Vornicus>
longer than 1 minute or longer than 11 minutes
08:10
<@celticminstrel>
It was at ~3 minutes when I terminated it, and the console showed it was still on the first path.
08:11
<~Vornicus>
Oy :(
08:12
<@celticminstrel>
The binary search took around 5 minutes when I reversed the comparison so that elements were removed from the end instead of the beginning.
08:13
<@celticminstrel>
So I assume that if this version takes more than 5 minutes that there's something wrong with my A*.
08:14
<~Vornicus>
That it takes a minute *when everything counts as visited* should suggest that something's wrong with A*
08:14
<@celticminstrel>
No, it was less than a minute then.
08:14
<@celticminstrel>
For like 60-70 paths.
08:14
<~Vornicus>
Sure but that should technically be instafail
08:15
<@celticminstrel>
It was pretty fast.
08:17
<@celticminstrel>
Running to ~3 minutes before I terminated it is after I fixed the issue of everything counting as visited.
08:17 celticminstrel is now known as celmin|sleep
08:36 Kindamoody is now known as Kindamoody|afk
08:53 Emmy-werk [NSkiwiirc@Nightstar-41pbej.static.chello.nl] has joined #code
08:53 mode/#code [+o Emmy-werk] by ChanServ
08:54
<@Emmy-werk>
Huh. That was a stupid bug.
08:55
<@Emmy-werk>
I was wondering why field 2 and 3 weren't appearing on my list when i added a row.
08:56
<@Emmy-werk>
Turns out i'm adding 0 and 1, but forgot about the rest. >.<
08:58
<@Emmy-werk>
I must be a computer, only able to count till 1. :P
09:54 ion [Owner@Nightstar-6grqph.vs.shawcable.net] has quit [Ping timeout: 121 seconds]
09:57 ion [Owner@Nightstar-6grqph.vs.shawcable.net] has joined #code
09:57 mode/#code [+o ion] by ChanServ
10:09 * TheWatcher arghs
10:10
<@TheWatcher>
I keep trying to type $userpin but completely unconsciously keep typing $userping for some reason
10:12
<~Vornicus>
:P
10:18
<@TheWatcher>
That said, I just typed `my $fhtagn = <query to deactivate some rows>` without having to look up how to spell fhtagn. I wonder just what that says...
10:21
<~Vornicus>
You've known me too long
10:22
<~Vornicus>
but why the fuck would you name something that, you know better
10:24
<@TheWatcher>
Yeah, yeah, going to fix it to something better in the next commit, gotta mess around a bit sometimes
10:25
<@TheWatcher>
Also, damn. I just realised, I must've known you for almost 13 years, possibly more.
10:29
<~Vornicus>
heh
10:34
<@abudhabi>
Ugh, mobile telephone telemarketers.
10:35
<@TheWatcher>
Eegh. Haet.
10:35
<@abudhabi>
They ring me up and try to offer me a "deal" on a phone plan.
10:36
<@abudhabi>
And even when I tell them that a) this is a dumbphone, so I don't use or need any data, b) this is not even a plan, this is a prepaid card, c) I communicate so little that I spend less than half of what they offer me with their deal - they seem constitutionally incapable of understanding that I'd have to be an idiot to take them up on their offer.
10:43
<@abudhabi>
Speaking of, my Nokia 1616 is beginning to get frayed after five years continuous use. I should get a replacement. I wonder if they still sell that model.
10:46
<@Emmy-werk>
ohnoes
10:46
<@Emmy-werk>
also, wooh 1600 series :D
10:50
<@abudhabi>
Or I could just get a new front and back plate, which are the elements that are going.
11:00 * Azash eyes dist-upgrade, clears calendar
11:02
<@abudhabi>
It's going to be a wild two days, eh? :V
11:38 Emmy-werk [NSkiwiirc@Nightstar-41pbej.static.chello.nl] has quit [[NS] Quit: http://www.kiwiirc.com/ - A hand crafted IRC client]
11:56
<@abudhabi>
How does one write an adblock filter to replace an image instead of removing it?
11:59
<@abudhabi>
Is it even possible?
12:37 Vornicus [Vorn@ServerAdministrator.Nightstar.Net] has quit [Ping timeout: 121 seconds]
12:38 gnolam [quassel@Nightstar-lhk.n94.131.88.IP] has joined #code
12:38 mode/#code [+o gnolam] by ChanServ
12:40 Vornicus [Vorn@ServerAdministrator.Nightstar.Net] has joined #code
12:40 mode/#code [+qo Vornicus Vornicus] by ChanServ
12:42 gnolam_ [quassel@Nightstar-lhk.n94.131.88.IP] has joined #code
12:45 gnolam [quassel@Nightstar-lhk.n94.131.88.IP] has quit [Ping timeout: 121 seconds]
12:46
<@Attilla>
it seems plausible at least
12:47
<@Attilla>
i mean people make other scripts that replace stuff, maybe you can make a script that taps into the adblock filter list and then replaces something before adblock intercedes
12:57 * abudhabi figures out how to do it with a CSS styler.
13:10 gnolam [quassel@Nightstar-lhk.n94.131.88.IP] has joined #code
13:10 mode/#code [+o gnolam] by ChanServ
13:13 gnolam_ [quassel@Nightstar-lhk.n94.131.88.IP] has quit [Ping timeout: 121 seconds]
13:18
<@gnolam>
Customer is running a machine with a disabled sensor. Needed to replicate the setup. Solution: http://www.lysator.liu.se/~gnolam/temp/there_fixed_it.jpg
13:20
<@abudhabi>
absolutelyhalal.jpg
13:20
<@Tamber>
Surely that should be "there_fuxed_it.jpg"? :p
13:22
<@TheWatcher>
I believe the technical term is "Teabagging the sensor"
13:22
<@Tamber>
hee
13:23
<@TheWatcher>
(Although I can't make out which varity of lipton that is...)
13:28
<@gnolam>
TheWatcher: English breakfast.
13:33
<@Emmy>
hehehe
13:34
<@Emmy>
well tahrs yer prerblem
13:59 gnolam_ [quassel@Nightstar-lhk.n94.131.88.IP] has joined #code
13:59 gnolam [quassel@Nightstar-lhk.n94.131.88.IP] has quit [Connection closed]
14:05 catadroid [catalyst@Nightstar-p0b.tcr.132.82.IP] has joined #code
14:25 abudhabi [abudhabi@Nightstar-7nkq9k.de] has quit [Operation timed out]
14:26
< gnolam_>
Glargh. I don't suppose anyone knows how to set up Visual Studio 2015 to use the Android SDK emulator instead of its own Android emulator?
14:33
< gnolam_>
I _know_ it's supposed to be possible, but Google is being extremely unhelpful.
14:36
<@TheWatcher>
Which is ironic, really.
14:40
< gnolam_>
NGhgghgh
14:56 abudhabi [abudhabi@Nightstar-7nkq9k.de] has joined #code
14:56 mode/#code [+o abudhabi] by ChanServ
15:23 gnolam [quassel@Nightstar-lhk.n94.131.88.IP] has joined #code
15:23 mode/#code [+o gnolam] by ChanServ
15:26 gnolam_ [quassel@Nightstar-lhk.n94.131.88.IP] has quit [Ping timeout: 121 seconds]
15:37 abudhabi [abudhabi@Nightstar-7nkq9k.de] has quit [Ping timeout: 121 seconds]
15:39
<&VirusJTG>
I seem to remember a registry hack
15:40
<&VirusJTG>
gnolam, have you seen this yet? https://msdn.microsoft.com/en-us/library/dn771552.aspx
15:40
<&VirusJTG>
missed
15:42 gnolam_ [quassel@Nightstar-lhk.n94.131.88.IP] has joined #code
15:46 gnolam [quassel@Nightstar-lhk.n94.131.88.IP] has quit [Ping timeout: 121 seconds]
16:01 catadroid [catalyst@Nightstar-p0b.tcr.132.82.IP] has quit [[NS] Quit: Bye]
16:03 JustBob [justbob@Nightstar.Customer.Dissatisfaction.Administrator] has quit [Ping timeout: 121 seconds]
16:06 abudhabi [abudhabi@Nightstar-7nkq9k.de] has joined #code
16:06 mode/#code [+o abudhabi] by ChanServ
16:08 gnolam_ [quassel@Nightstar-lhk.n94.131.88.IP] has quit [Ping timeout: 121 seconds]
16:14 JustBob [justbob@ServerAdministrator.Nightstar.Net] has joined #code
16:14 mode/#code [+o JustBob] by ChanServ
16:18 JustBob [justbob@Nightstar.Customer.Dissatisfaction.Administrator] has quit [Ping timeout: 121 seconds]
16:42 catalyst [catalyst@Nightstar-bt5k4h.81.in-addr.arpa] has joined #code
16:52 JustBob [justbob@ServerAdministrator.Nightstar.Net] has joined #code
16:52 mode/#code [+o JustBob] by ChanServ
16:54 celmin|sleep is now known as celticminstrel
16:56 JustBob [justbob@Nightstar.Customer.Dissatisfaction.Administrator] has quit [Ping timeout: 121 seconds]
17:01 JustBob [justbob@ServerAdministrator.Nightstar.Net] has joined #code
17:01 mode/#code [+o JustBob] by ChanServ
17:09 JustBob [justbob@Nightstar.Customer.Dissatisfaction.Administrator] has quit [Ping timeout: 121 seconds]
17:13 gnolam [lenin@Nightstar-t1tbf0.cust.bahnhof.se] has joined #code
17:13 mode/#code [+o gnolam] by ChanServ
19:51 JustBob [justbob@ServerAdministrator.Nightstar.Net] has joined #code
19:51 mode/#code [+o JustBob] by ChanServ
20:06
<@abudhabi>
TheWatcher: Hey, do you know if deathcookie.starforge.co.uk is resurrectable or not?
20:27 Alek [Alek@Nightstar-cltq0r.il.comcast.net] has quit [Ping timeout: 121 seconds]
20:30 Alek [Alek@Nightstar-cltq0r.il.comcast.net] has joined #code
20:30 mode/#code [+o Alek] by ChanServ
21:19 Kindamoody|afk is now known as Kindamoody
22:03 Emmy [Emmy@Nightstar-9p7hb1.direct-adsl.nl] has quit [Connection closed]
23:46 Alek [Alek@Nightstar-cltq0r.il.comcast.net] has quit [Operation timed out]
23:50 Alek [Alek@Nightstar-cltq0r.il.comcast.net] has joined #code
23:50 mode/#code [+o Alek] by ChanServ
--- Log closed Sat Dec 03 00:00:34 2016
code logs -> 2016 -> Fri, 02 Dec 2016< code.20161201.log - code.20161203.log >

[ Latest log file ]