--- Log opened Sat Nov 26 00:00:32 2016 | ||
@HeikoS | wiking: jo | 00:34 |
---|---|---|
@HeikoS | lisitsyn: | 00:34 |
@wiking | ho | 00:34 |
@HeikoS | I just realised | 00:34 |
@HeikoS | if we separate out SWIG interface from the base shogun C++ code more | 00:35 |
@HeikoS | then we can do multiple inheritance | 00:35 |
@HeikoS | AKA interfaces | 00:35 |
@HeikoS | wiking: so about SWIG and plugins | 00:35 |
@HeikoS | we need a way to fix the SWIG interface and just exchange underlying .so libs | 00:36 |
@HeikoS | wiking: btw about the multiple inheritance thing, this is quite cool as we can do proper OOP inside | 00:36 |
@HeikoS | and then we just offer very simple things via SWIG | 00:36 |
@HeikoS | no need to re-create the class structure in SWIG | 00:37 |
@HeikoS | that is actually really cool | 00:37 |
@HeikoS | this solves many problems we have with the uglyness of the class structures | 00:37 |
@wiking | :> | 00:43 |
@sukey | New Commit "Avoid false sharing in EuclideanDistance OpenMP loops" to shogun-toolbox/shogun by vigsterkr: https://github.com/shogun-toolbox/shogun/commit/7347baf36c19c4a79a0f41a34a05b7ad4de67b4a | 00:43 |
@wiking | i'm working on fixing our fucking openmp shits | 00:43 |
@wiking | HeikoS, are you ready on the weekend for a 5.0.1? :) | 00:44 |
@wiking | the only remaining stuff | 00:45 |
@wiking | is the stupid GaussianARDKernel | 00:45 |
-!- HeikoS [~heiko@host-92-0-178-129.as43234.net] has quit [Ping timeout: 256 seconds] | 00:52 | |
-!- travis-ci [~travis-ci@ec2-54-205-110-146.compute-1.amazonaws.com] has joined #shogun | 01:31 | |
travis-ci | it's Viktor Gal's turn to pay the next round of drinks for the massacre he caused in shogun-toolbox/shogun: https://travis-ci.org/shogun-toolbox/shogun/builds/178965349 | 01:31 |
-!- travis-ci [~travis-ci@ec2-54-205-110-146.compute-1.amazonaws.com] has left #shogun [] | 01:31 | |
@wiking | CaBa, one thing | 03:08 |
@wiking | i've just realised | 03:08 |
@wiking | if you want some speedup | 03:08 |
@wiking | add this to your CFLAGS and CXXFLAGS | 03:08 |
@wiking | "-march=native" | 03:08 |
@wiking | fuck CExponentialARDKernel is not thread safe | 03:37 |
@sukey | New Commit "Make ExponentialARDKernel::get_weighted_vector thread-safe" to shogun-toolbox/shogun by vigsterkr: https://github.com/shogun-toolbox/shogun/commit/8bb226ef0dc319f331f87fbed3c1766927b215df | 03:57 |
@sukey | New Commit "Make ExponentialARDKernel::get_weighted_vector thread-safe" to shogun-toolbox/shogun by vigsterkr: https://github.com/shogun-toolbox/shogun/commit/4c1dc333f66b01520810975b322d47bcfe51066c | 03:58 |
shogun-buildbot | build #9 of clang - undefined behaviour analysis is complete: Success [build successful] Build details are at http://buildbot.shogun-toolbox.org/builders/clang%20-%20undefined%20behaviour%20analysis/builds/9 | 03:59 |
-!- lambday [31cf36a1@gateway/web/freenode/ip.49.207.54.161] has joined #shogun | 04:48 | |
-!- mode/#shogun [+o lambday] by ChanServ | 04:48 | |
-!- travis-ci [~travis-ci@ec2-54-166-157-46.compute-1.amazonaws.com] has joined #shogun | 04:49 | |
travis-ci | it's Viktor Gal's turn to pay the next round of drinks for the massacre he caused in shogun-toolbox/shogun: https://travis-ci.org/shogun-toolbox/shogun/builds/178983447 | 04:49 |
-!- travis-ci [~travis-ci@ec2-54-166-157-46.compute-1.amazonaws.com] has left #shogun [] | 04:49 | |
-!- mizari [~mizari@95-174-213-100.nts.su] has joined #shogun | 04:56 | |
@sukey | New Commit "some more doxygen for bigtesting" to shogun-toolbox/shogun by lambday: https://github.com/shogun-toolbox/shogun/commit/218aee4a30b1da08d536b79962e03574a34e52d5 | 06:45 |
-!- lambday [31cf36a1@gateway/web/freenode/ip.49.207.54.161] has quit [Ping timeout: 260 seconds] | 10:17 | |
-!- HeikoS [~heiko@host-92-0-178-129.as43234.net] has joined #shogun | 13:07 | |
-!- mode/#shogun [+o HeikoS] by ChanServ | 13:07 | |
@sukey | Wiki page: Home edited on shogun-toolbox/shogun by karlnapf | 13:24 |
@HeikoS | wiking: jo | 13:28 |
@HeikoS | yes up for it | 13:28 |
@wiking | ? | 13:29 |
@wiking | up for what? | 13:29 |
@HeikoS | wiking: 5.0.1 on weekend | 13:34 |
@HeikoS | sorry you wrote that yesterday | 13:34 |
@HeikoS | I mean +++ for the reactiveX | 13:35 |
@wiking | ah ok | 13:35 |
@HeikoS | wiking: really cool | 13:35 |
@HeikoS | wiking: thing is | 13:35 |
@HeikoS | how to embed in shogun? | 13:35 |
@HeikoS | like concretely | 13:35 |
@HeikoS | algos have intermediate results | 13:35 |
@HeikoS | from the algorihtm perspective, how is this achieved | 13:35 |
@wiking | well | 13:35 |
@HeikoS | we need yet another internal interface for such things no? | 13:35 |
@wiking | just the concept | 13:35 |
@wiking | of observables | 13:35 |
@wiking | and observers | 13:35 |
@wiking | noup | 13:35 |
@wiking | no need for internal interface | 13:35 |
@wiking | http://reactivex.io/documentation/observable.html | 13:36 |
@HeikoS | so the developer marks some things in algo as observable | 13:36 |
@HeikoS | and the user then choose which of them to observe | 13:36 |
@wiking | ytes | 13:36 |
@wiking | but read the docs | 13:36 |
@wiking | worth to spend | 13:36 |
@HeikoS | yeah doing | 13:36 |
@wiking | like 20 mins on it | 13:36 |
@wiking | and then you can do many crazy stuff | 13:37 |
@wiking | with observables | 13:37 |
-!- lambday [31cf36a1@gateway/web/freenode/ip.49.207.54.161] has joined #shogun | 13:37 | |
-!- mode/#shogun [+o lambday] by ChanServ | 13:37 | |
@lambday | HeikoS: yo | 13:37 |
@wiking | trasnform it | 13:37 |
@HeikoS | lambday: jojo | 13:37 |
@wiking | etc | 13:37 |
@lambday | wiking: yo | 13:37 |
@HeikoS | http://reactivex.io/documentation/observable.html | 13:37 |
@HeikoS | lambday: ^ | 13:37 |
@wiking | join | 13:37 |
@wiking | merge | 13:37 |
@lambday | HeikoS: yeah checking that one | 13:37 |
@wiking | whatever u want | 13:37 |
@HeikoS | wiking: key here is that inside the shogun algos, things are very simple | 13:37 |
@HeikoS | and how the users select things they want | 13:37 |
@wiking | i mean the super crazy stuff would be | 13:38 |
@wiking | to make | 13:38 |
@wiking | sgobject observable | 13:38 |
@wiking | :) | 13:38 |
@HeikoS | so that a) it is easy to set up the algos when writing them | 13:38 |
@wiking | and then you can do almost whatever the fuck | 13:38 |
@HeikoS | b) easy for users to query | 13:38 |
@HeikoS | wiking: yeah true | 13:38 |
@lambday | HeikoS: user need to get somehow a list of intermediates that they can choose to save... and then sends a config to save a select set of stuffs | 13:38 |
@lambday | out framework saves only those | 13:38 |
@HeikoS | wiking: though in practice, we need to keep it simple as well | 13:38 |
@HeikoS | dont want to store all objects | 13:38 |
@HeikoS | just some few numbers | 13:38 |
@wiking | you observer | 13:38 |
@wiking | filter | 13:38 |
@wiking | whatever you want | 13:38 |
@wiking | http://reactivex.io/documentation/operators.html#filtering | 13:39 |
@HeikoS | yes I know | 13:39 |
@HeikoS | I am talking about concrete interfaces for users to do that | 13:39 |
@wiking | just go with the reactive interface | 13:39 |
@HeikoS | definitely not | 13:39 |
@wiking | why do u want to define yet another interface | 13:39 |
@HeikoS | because a user just wants to store the xvalidation indices | 13:39 |
@wiking | yeah ok | 13:39 |
@wiking | he subscribes to that | 13:39 |
@HeikoS | and that should be simpler than reactivex api | 13:39 |
@wiking | and that's it | 13:40 |
@wiking | i mean what's the big deal | 13:40 |
@HeikoS | SWIG interface | 13:40 |
@wiking | you make those indices observable | 13:40 |
@wiking | and? | 13:40 |
@HeikoS | != reactiveX interface | 13:40 |
@HeikoS | yes | 13:40 |
@HeikoS | okok | 13:40 |
@HeikoS | let's prototype it | 13:40 |
@HeikoS | better way to discuss | 13:40 |
@HeikoS | I want to see how it looks a) inside algorithm, b) for user | 13:41 |
@wiking | what do yo umean | 13:41 |
@lambday | I can take a dig | 13:41 |
@wiking | a) b)? | 13:41 |
@HeikoS | a) somebody implements a new algo and needs to do this in a way that things can be observed, how much effort is that | 13:42 |
@HeikoS | b) a user just wants a single line call to get whatever he wants | 13:42 |
@HeikoS | so for that prototype is good | 13:42 |
@HeikoS | but let me read the docs first then :) | 13:42 |
@HeikoS | wiking, lambday I mean it would be cool to solve this generally in Shogun and apply it to all the algos where we currently have hacks in place | 13:43 |
@HeikoS | xvalidation, mmd, optimization, etc etc | 13:43 |
@wiking | yeah but that's all | 13:43 |
@wiking | i mean say you have a Future | 13:43 |
@lambday | HeikoS: yeah that was the general idea.. doing it shogun-wise | 13:43 |
@wiking | that generates values | 13:43 |
@wiking | like the | 13:43 |
@wiking | indicies for xval | 13:43 |
@wiking | you just wrap that to be observable | 13:44 |
@HeikoS | lambday: so lets come back to this once bigtest is merged | 13:44 |
@HeikoS | wiking: yep ++ | 13:44 |
@lambday | HeikoS: almost there.. this morning I added another bunch of doxygen docs | 13:44 |
@wiking | https://github.com/Reactive-Extensions/RxCpp/blob/master/Rx/v2/examples/println/main.cpp#L48-L51 | 13:45 |
@wiking | HeikoS, | 13:45 |
@wiking | that's almost the simplest way | 13:45 |
@wiking | to create an observable | 13:45 |
@wiking | and then you can map/flatmap/filter whatever you want | 13:45 |
@wiking | merge transform | 13:45 |
@wiking | subscribe | 13:45 |
@HeikoS | yes | 13:45 |
@HeikoS | keep in mind thats all internal API | 13:45 |
@wiking | ? | 13:46 |
@HeikoS | for users, it has to be different | 13:46 |
@HeikoS | SWIG interface needs to be like | 13:46 |
@HeikoS | xvlidation.store_intermediate('param_name', schedule) | 13:46 |
@HeikoS | as an example | 13:46 |
@wiking | no | 13:46 |
@wiking | you dont want to store | 13:46 |
@wiking | :) | 13:46 |
@wiking | i mean it should be | 13:46 |
@wiking | up to the user | 13:47 |
@wiking | to store it somewhere | 13:47 |
@wiking | you just want to stream it | 13:47 |
@wiking | you dont want to take care of actually storing it somewhere | 13:47 |
@HeikoS | I understand | 13:47 |
@HeikoS | but there are standard use cases right? | 13:47 |
@wiking | mmm | 13:47 |
@wiking | i think you are mixing here stuff | 13:47 |
@wiking | that's what i meant already | 13:47 |
@HeikoS | maybe | 13:47 |
@wiking | in the email | 13:47 |
@wiking | if you wanna have a k/v store | 13:48 |
@HeikoS | I asked for clarification :) | 13:48 |
@wiking | then yeah | 13:48 |
@wiking | but for things | 13:48 |
@HeikoS | this reactive stuff is more for asynchronous implementations | 13:48 |
@wiking | i mean th ething is that it should 'stream' the updates of any variables | 13:48 |
@wiking | that is sane | 13:48 |
@HeikoS | there is no user ever instacting with them | 13:48 |
@wiking | to be streamed | 13:48 |
@HeikoS | just the framework | 13:48 |
@wiking | to the user | 13:48 |
@HeikoS | yeah | 13:48 |
@wiking | but storage | 13:48 |
@wiking | is a total different story | 13:48 |
@wiking | either you let the user | 13:49 |
@wiking | to deal with the storage of these streamed values | 13:49 |
@wiking | and so you dont care how it's handled | 13:49 |
@wiking | or | 13:49 |
@wiking | you actually provide | 13:49 |
@wiking | a k/v store | 13:49 |
@HeikoS | yes | 13:49 |
@wiking | and some extra helper functions | 13:49 |
@wiking | so that you have | 13:49 |
@HeikoS | the motivation for the discussion came for the second case | 13:50 |
@wiking | reactivex -> k/v store | 13:50 |
@HeikoS | yyes exactly | 13:50 |
@wiking | but those things should be separate | 13:50 |
@HeikoS | I agrere | 13:50 |
@wiking | first have one and the other | 13:50 |
@wiking | and then think about maaaaaaaaaybe providing | 13:50 |
@wiking | some 'usual suspects' | 13:50 |
@wiking | for the interaction between the two | 13:50 |
@wiking | but i would avoid if possible | 13:51 |
@wiking | to mix these 2 features | 13:51 |
@HeikoS | well we want the intermediate results popping out of algos in a nice way, that is the whole motivation | 13:51 |
@HeikoS | (optionally) | 13:51 |
@wiking | could you be more scientific | 13:51 |
@HeikoS | so user says (from SWIG) | 13:52 |
@wiking | because poping up is que? | 13:52 |
@wiking | i dont care from where | 13:52 |
@HeikoS | I want to run algrothm X | 13:52 |
@wiking | that should be language agnostic | 13:52 |
@HeikoS | and I want the following object's values in every iterations (indices) | 13:52 |
@wiking | ok but this is a clear cut observable, right? | 13:53 |
@wiking | subscribe to an observable | 13:53 |
@HeikoS | and in fact, the user should be able to ask the algorithm (what intermediate results can you generate) | 13:53 |
@wiking | that provides the idicies | 13:53 |
@wiking | heheh we are getting on corba level now :) (selfdescribing api | 13:53 |
@HeikoS | I am thinking use case here | 13:54 |
@HeikoS | not technology | 13:54 |
@wiking | i'm just saying | 13:54 |
@HeikoS | sure | 13:54 |
@wiking | tha this conceptually | 13:54 |
@HeikoS | but do you get my point? | 13:54 |
@wiking | that you've descirbed | 13:54 |
@wiking | is a simple | 13:54 |
@wiking | observable | 13:54 |
@HeikoS | ok sure | 13:54 |
@HeikoS | just a bit unsure how SWIG interface conretely looks like you know | 13:55 |
@wiking | https://en.wikipedia.org/wiki/Reactive_programming | 13:55 |
@HeikoS | the main example on that page | 13:56 |
@HeikoS | is not what I have in mind | 13:57 |
@HeikoS | but we are talking apples pears here | 13:57 |
@wiking | no | 13:57 |
@wiking | but ok | 13:57 |
@HeikoS | I agree with you how to do things internally | 13:57 |
@wiking | main example on the page ) | 13:57 |
@wiking | anyhow | 13:57 |
@wiking | please try to understand conceptually | 13:57 |
@wiking | what is this | 13:57 |
@HeikoS | but I am missing the 2 lines that cause things to happen for users who want indeices | 13:57 |
@wiking | model.subscribe("whicheverparam) | 13:58 |
@wiking | model.subscribe("whicheverparam", self) | 13:58 |
@wiking | and then from that moment on | 13:58 |
@wiking | or better yet | 13:58 |
@wiking | say self is an observer | 13:58 |
@wiking | (conceptually) | 13:58 |
@HeikoS | can we have some python code? | 13:59 |
@wiking | me.subscribe(model.getobservable("the param i want")) | 13:59 |
@HeikoS | that is slightly more complete? | 13:59 |
@wiking | and from that moment on | 13:59 |
@wiking | me will receive | 13:59 |
@wiking | onNext() | 13:59 |
@wiking | onError | 13:59 |
@wiking | onComplete | 13:59 |
@wiking | functions | 14:00 |
@wiking | i mean function calls | 14:00 |
@wiking | based on the state of the chosen observable | 14:00 |
@wiking | please no python | 14:00 |
@wiking | anyhow this is just an example | 14:00 |
@wiking | how it could look like | 14:01 |
@HeikoS | SWIG any SWIG | 14:01 |
@HeikoS | octave | 14:01 |
@HeikoS | R | 14:01 |
@HeikoS | pick any ;) | 14:01 |
@lambday | haha | 14:01 |
@wiking | js | 14:01 |
@wiking | :) | 14:01 |
@HeikoS | wiking: haha, well any SWIG | 14:01 |
@wiking | anyhow | 14:01 |
@wiking | if you wanna serialize these in any format | 14:02 |
@wiking | then of course that needs extra work | 14:02 |
@HeikoS | can we please have a code listing? | 14:02 |
@HeikoS | because I am not following you at the moment, I dont understand what you have in mind | 14:02 |
@HeikoS | for now just the xval indices, just wanna see that | 14:03 |
@lambday | http://collabedit.com/vmbgu | 14:03 |
@HeikoS | http://collabedit.com/rnf8b | 14:03 |
@HeikoS | ha! | 14:03 |
@wiking | hahah | 14:03 |
@wiking | no fucking way | 14:03 |
@HeikoS | lets pick first | 14:03 |
@wiking | i'm gonna code now | 14:03 |
@wiking | it's 9pm | 14:03 |
@wiking | i have slept 4 hours | 14:03 |
@wiking | :) | 14:03 |
@HeikoS | man just give me the 4 lines | 14:03 |
@wiking | and still fucking fixing | 14:03 |
@wiking | multithreading fuckups | 14:03 |
@wiking | in shogun | 14:03 |
@wiking | :) | 14:03 |
@wiking | please please | 14:03 |
@wiking | read the doc first | 14:04 |
@HeikoS | I have just read most of it | 14:04 |
@HeikoS | we are talking about different things thats the problem | 14:04 |
@wiking | no | 14:04 |
@wiking | we are not | 14:04 |
@HeikoS | so lets have code | 14:04 |
@wiking | just that th einformation | 14:04 |
@wiking | doesnt go throw | 14:04 |
@HeikoS | I want to see how it looks | 14:04 |
@wiking | through | 14:04 |
@wiking | ok so it's saturday night | 14:04 |
@wiking | and now | 14:04 |
@wiking | we have to solve this | 14:04 |
@wiking | NOW | 14:04 |
@HeikoS | nono | 14:04 |
@HeikoS | no solve | 14:04 |
@wiking | ok | 14:04 |
@HeikoS | I just want to make the last 30 mins not waster | 14:04 |
@wiking | so this was an idea | 14:04 |
@HeikoS | wasted | 14:04 |
@wiking | there's the fw | 14:04 |
@HeikoS | I want to understand what you mean | 14:05 |
@wiking | use it :) | 14:05 |
@wiking | ok | 14:05 |
@wiking | once again | 14:05 |
@wiking | say you have model | 14:05 |
@wiking | or algo | 14:05 |
@lambday | just 4 lines of SWIG calls | 14:05 |
@wiking | i dont care | 14:05 |
@wiking | algo.getObservable(id) | 14:05 |
@wiking | id = the stuff u want to observer | 14:05 |
@wiking | you can advertise it | 14:05 |
@wiking | via | 14:05 |
@wiking | algo.getObservables(): Observable[] | 14:06 |
@wiking | (this actually scala now) | 14:06 |
@wiking | so | 14:06 |
@wiking | and then you have your own observer | 14:06 |
@wiking | which can even be a storage (k/s store) | 14:06 |
@wiking | and you just do | 14:06 |
@wiking | observer.subscribe(algo.getObservable(id)) | 14:07 |
@wiking | right? | 14:07 |
@wiking | and then each fucking time | 14:07 |
@wiking | there's a new value | 14:07 |
@wiking | or update | 14:07 |
@wiking | observer.onNext(...) will be called | 14:07 |
@wiking | until the moment when there's | 14:08 |
@HeikoS | onNext is SWIG interface language code | 14:08 |
@wiking | a) error -> onError() | 14:08 |
@wiking | b) observable finished | 14:08 |
@HeikoS | form where is it called? | 14:08 |
@wiking | fuck man | 14:08 |
@wiking | can you read the fucking do | 14:08 |
@wiking | c? | 14:08 |
@HeikoS | nope man | 14:08 |
@wiking | http://reactivex.io/RxJava/javadoc/rx/Observer.html | 14:08 |
@HeikoS | sorry doest make sense | 14:08 |
@wiking | this is the fucking basic | 14:08 |
@wiking | of observable | 14:08 |
@HeikoS | Thats why I asked for code | 14:08 |
@HeikoS | but anyway | 14:08 |
@wiking | and observer | 14:08 |
@wiking | i asked you | 14:08 |
@lambday | it will be called automatically.. but somehow the user needs to override it | 14:08 |
@wiking | 3 times | 14:09 |
@lambday | is it? | 14:09 |
@wiking | to read it | 14:09 |
@wiking | to be clear with the concept | 14:09 |
@HeikoS | ask another time | 14:09 |
@HeikoS | I got the concept | 14:09 |
@wiking | if you got it | 14:09 |
@wiking | then you know | 14:09 |
@wiking | that those are the basic | 14:09 |
@wiking | 3 functions | 14:09 |
@wiking | that ever | 14:09 |
@wiking | every | 14:09 |
@wiking | observer | 14:09 |
@wiking | has | 14:09 |
@wiking | so if you have | 14:09 |
@wiking | LalalalStorage : Observer | 14:09 |
@wiking | then LalalalStorage has | 14:10 |
@wiking | .onNext | 14:10 |
@wiking | .onError | 14:10 |
@HeikoS | there we go | 14:10 |
@wiking | .onComplete | 14:10 |
@HeikoS | that is implemented in shogun | 14:10 |
@wiking | i mean fucking hell | 14:10 |
@HeikoS | C++ | 14:10 |
@wiking | no | 14:10 |
@wiking | it's not | 14:10 |
@HeikoS | not in SWIG | 14:10 |
@wiking | jesus | 14:10 |
@HeikoS | ok I am leaving | 14:10 |
@wiking | why would it be | 14:10 |
@HeikoS | not good discussion | 14:10 |
@wiking | on c++/ | 14:10 |
@HeikoS | bye | 14:10 |
@wiking | ta | 14:11 |
@wiking | for the record i believe i asked you 2 times very nicely to RTFM | 14:11 |
-!- HeikoS [~heiko@host-92-0-178-129.as43234.net] has quit [Ping timeout: 265 seconds] | 14:15 | |
-!- lambday [31cf36a1@gateway/web/freenode/ip.49.207.54.161] has quit [Quit: Page closed] | 14:33 | |
CaBa | wiking: heya | 15:12 |
CaBa | wiking: the '-march=native' - is that already set in shoguns cmake config and i shall set it for my own application or were you referring to building shogun? | 15:13 |
-!- mizari [~mizari@95-174-213-100.nts.su] has quit [Quit: Leaving] | 15:42 | |
-!- lambday [31cf36a1@gateway/web/freenode/ip.49.207.54.161] has joined #shogun | 16:08 | |
-!- mode/#shogun [+o lambday] by ChanServ | 16:08 | |
-!- lambday [31cf36a1@gateway/web/freenode/ip.49.207.54.161] has quit [Ping timeout: 260 seconds] | 16:52 | |
-!- HeikoS [~heiko@host-92-0-178-129.as43234.net] has joined #shogun | 16:52 | |
-!- mode/#shogun [+o HeikoS] by ChanServ | 16:52 | |
-!- HeikoS [~heiko@host-92-0-178-129.as43234.net] has quit [Remote host closed the connection] | 16:52 | |
@sukey | Pull Request #3566 "change doc to disambiguate." opened by hongguangguo - https://github.com/shogun-toolbox/shogun/pull/3566 | 20:11 |
CaBa | how comes not only the combined kernel but already the very basic kernel class has subkernels? | 21:30 |
--- Log closed Sun Nov 27 00:00:33 2016 |
Generated by irclog2html.py 2.10.0 by Marius Gedminas - find it at mg.pov.lt!