--- Log opened Thu May 10 00:00:00 2018 | ||
-!- witness_ [uid10044@gateway/web/irccloud.com/x-rxuhfdcuqgtjhdrq] has quit [Quit: Connection closed for inactivity] | 04:30 | |
-!- wuwei [wuweilinma@gateway/shell/matrix.org/x-phahltxqjopfeymw] has quit [Ping timeout: 255 seconds] | 10:36 | |
-!- HeikoS [~heiko@host81-153-166-104.range81-153.btcentralplus.com] has joined #shogun | 11:09 | |
-!- mode/#shogun [+o HeikoS] by ChanServ | 11:09 | |
-!- wuwei [wuweilinma@gateway/shell/matrix.org/x-jvnuupozouyhoava] has joined #shogun | 11:35 | |
@HeikoS | lisitsyn: jo | 11:59 |
---|---|---|
@HeikoS | more thoughts on the const? | 12:00 |
lisitsyn | HeikoS: hey | 12:00 |
lisitsyn | HeikoS: I don't like it :D | 12:00 |
@HeikoS | so what I made work is | 12:00 |
@HeikoS | static Some<const T> from_raw(const T* raw); | 12:00 |
@HeikoS | template<class T> const T* as() const | 12:00 |
lisitsyn | that's multiplying things | 12:00 |
@HeikoS | and with that | 12:00 |
@HeikoS | Some<const CMulticlassLabels> multiclass_labels(const CLabels* orig); | 12:00 |
@HeikoS | yes, all duplicate code | 12:00 |
@HeikoS | everything that conversts things (raw pointers to some, labels into mc labels, etc) will need to have two | 12:01 |
@HeikoS | lisitsyn: empty as well | 12:02 |
@HeikoS | lisitsyn: so what to do? | 12:02 |
@HeikoS | lisitsyn: I think if one used shared_ptr, the same problem woudl arise, no? | 12:03 |
lisitsyn | HeikoS: exactly | 12:04 |
lisitsyn | HeikoS: shared ptr on something const is seldom to see in the code | 12:04 |
@HeikoS | lisitsyn: but we have const | 12:06 |
@HeikoS | and we want it | 12:06 |
lisitsyn | HeikoS: are you sure? :) | 12:06 |
@HeikoS | how do we ensure thread safety for when using shared memory? | 12:07 |
@HeikoS | like features | 12:07 |
@HeikoS | indirectly via only calling const methods? | 12:07 |
lisitsyn | HeikoS: we might hack it actually | 12:07 |
lisitsyn | HeikoS: Some<T> might become locking on non-const | 12:08 |
lisitsyn | and plain when const | 12:08 |
lisitsyn | so if you call something non-const you wait | 12:08 |
@HeikoS | mmmmh | 12:09 |
@HeikoS | i dont know about that | 12:09 |
@HeikoS | seems to be asking for trouble | 12:11 |
lisitsyn | HeikoS: well, we can also throw an exception | 12:15 |
lisitsyn | so the constness might be in the Some | 12:15 |
lisitsyn | some attribute might tell if this is read-only | 12:15 |
lisitsyn | if it is operator const T*() works but not operator T*() etc | 12:16 |
@HeikoS | lisitsyn: that sounds better | 12:16 |
lisitsyn | because otherwise you will get an explosion of types | 12:16 |
@HeikoS | yes I see that | 12:16 |
@HeikoS | so you wanna add a boolean to Some | 12:16 |
lisitsyn | it is quadratic at least | 12:16 |
lisitsyn | yeah readonly | 12:16 |
@HeikoS | that tells you read only | 12:16 |
@HeikoS | and then you would have get and get_const? | 12:17 |
lisitsyn | https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Copy-on-write | 12:17 |
lisitsyn | HeikoS: ^ check | 12:17 |
lisitsyn | const T* operator->() const | 12:17 |
lisitsyn | T* operator->() | 12:17 |
lisitsyn | that's two methods we need to implement | 12:17 |
lisitsyn | first one works always | 12:17 |
lisitsyn | second one works if not readonly | 12:18 |
lisitsyn | quite easy to implement actually | 12:18 |
@HeikoS | and then a from_raw that takes const pointer | 12:18 |
@HeikoS | and sets the boolean | 12:18 |
lisitsyn | HeikoS: I'd make it readonly=fallse by default | 12:19 |
lisitsyn | but add a method | 12:19 |
lisitsyn | readonly() that returns itself with readonly=True | 12:19 |
lisitsyn | that's the most non-intrusive change I guess | 12:19 |
@HeikoS | ok | 12:19 |
@HeikoS | now back to the label conversion | 12:19 |
lisitsyn | oh no | 12:19 |
lisitsyn | :D | 12:19 |
lisitsyn | ok what about that? | 12:20 |
@HeikoS | Some<CMulticlassLabels> multiclass_labels(CLabels* orig); | 12:20 |
@HeikoS | Some<CMulticlassLabels> multiclass_labels(const CLabels* orig); | 12:20 |
@HeikoS | so I still would have those two | 12:20 |
lisitsyn | yes | 12:20 |
@HeikoS | for now | 12:20 |
@HeikoS | but later | 12:20 |
@HeikoS | once we only have some | 12:20 |
@HeikoS | it will just be one | 12:20 |
lisitsyn | well.. | 12:20 |
lisitsyn | :D | 12:20 |
@HeikoS | that accepts Some<CLabels> | 12:20 |
@HeikoS | as parameter | 12:20 |
lisitsyn | HeikoS: you can implement a wrapper class actually | 12:20 |
lisitsyn | that has two ctors | 12:20 |
lisitsyn | T* and const T* | 12:21 |
lisitsyn | and sets readonly appropriately | 12:21 |
lisitsyn | you just inherit the readonly when do the conversion then | 12:21 |
lisitsyn | MaybeConst<T> | 12:21 |
@HeikoS | wrapper class for what? | 12:21 |
lisitsyn | HeikoS: to avoid implementing two methods | 12:21 |
@HeikoS | well the idea was that these two functions are global | 12:22 |
@HeikoS | remember the discussion we had? | 12:22 |
lisitsyn | yes but still you can add one parameter with implicit ctor | 12:22 |
lisitsyn | that captures the const | 12:22 |
lisitsyn | and makes it 'bool readonly' based on that | 12:22 |
@HeikoS | can you be more explicit? | 12:22 |
lisitsyn | this way you implement it once | 12:22 |
lisitsyn | Some<CMulticlassLabels> multiclass_labels(MaybeConst<CLabels> orig); | 12:23 |
lisitsyn | like that | 12:23 |
lisitsyn | MaybeConst<T>(T* ptr) : m_ptr(ptr) | 12:23 |
lisitsyn | MaybeConst<T>(const T* ptr) : m_ptr(const_cast<T*>(ptr)) | 12:23 |
lisitsyn | ah first one is also m_readonly(false) | 12:24 |
@HeikoS | quite a contraption | 12:25 |
@HeikoS | ok and this would always appear when we convert raw pointers to some | 12:25 |
@HeikoS | lisitsyn: you wanna send a PR for the some and the MaybeConst? | 12:26 |
lisitsyn | and second one is m_readonly(true) | 12:26 |
lisitsyn | see what I mean? | 12:26 |
@HeikoS | yes I get it | 12:26 |
lisitsyn | HeikoS: yes I do want but can't promise I get enough time :P | 12:33 |
@HeikoS | ok ok | 12:33 |
@HeikoS | let me do it then | 12:33 |
sukey1 | [https://github.com/shogun-toolbox/shogun] Pull Request https://github.com/shogun-toolbox/shogun/pull/4279 merged by karlnapf | 12:34 |
sukey1 | [https://github.com/shogun-toolbox/shogun] karlnapf pushed 2 commits: | 12:34 |
sukey1 | https://github.com/shogun-toolbox/shogun/commit/fbaa510f84cb6c911f00e04f93679e2576bfb0e0 | 12:34 |
sukey1 | https://github.com/shogun-toolbox/shogun/commit/507a7049435a4866cf8bb9a193bb6a21e0252e5a | 12:34 |
@HeikoS | lisitsyn: actually, I'll leave this to you, ok? | 12:40 |
@HeikoS | since then I can work on other things at the same time | 12:40 |
@HeikoS | when shall i start pestering you? :D | 12:41 |
lisitsyn | HeikoS: this saturday I will try to implement that | 12:44 |
@HeikoS | cool! | 13:07 |
-!- travis-ci [~travis-ci@ec2-23-20-242-232.compute-1.amazonaws.com] has joined #shogun | 13:24 | |
travis-ci | it's Heiko Strathmann'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/377218941 | 13:24 |
-!- travis-ci [~travis-ci@ec2-23-20-242-232.compute-1.amazonaws.com] has left #shogun [] | 13:24 | |
shogitter | (shubham808) HeikoS: around ? | 13:31 |
@HeikoS | yes | 13:31 |
@HeikoS | shogitter: whats up? | 13:31 |
shogitter | (shubham808) How do I write obj->as<CBinaryLabels>() in python | 13:32 |
shogitter | (shubham808) I need to remove LabelsFactory from legacy examples | 13:32 |
-!- travis-ci [~travis-ci@ec2-54-91-238-210.compute-1.amazonaws.com] has joined #shogun | 13:35 | |
travis-ci | it's Heiko Strathmann'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/377218941 | 13:35 |
-!- travis-ci [~travis-ci@ec2-54-91-238-210.compute-1.amazonaws.com] has left #shogun [] | 13:35 | |
sukey1 | [https://github.com/shogun-toolbox/shogun] Pull Request https://github.com/shogun-toolbox/shogun/pull/4280 opened by shubham808 | 14:06 |
@HeikoS | shogitter: you still around shubham? | 14:20 |
@HeikoS | This is not possible, we actually want to get rid of BinaryLabels in the examples | 14:20 |
@HeikoS | just Labels | 14:20 |
shogitter | (shubham808) See here https://github.com/shogun-toolbox/shogun/blob/507a7049435a4866cf8bb9a193bb6a21e0252e5a/examples/undocumented/python/structure_multiclass_bmrm.py#L84 | 14:28 |
@HeikoS | ok, so | 14:30 |
@HeikoS | you would change | 14:30 |
@HeikoS | p3bmrm_out = LabelsFactory.to_multiclass_structured(sosvm.apply()) | 14:30 |
@HeikoS | to | 14:30 |
@HeikoS | p3bmrm_out = sosvm.apply() | 14:30 |
shogitter | (shubham808) I see | 14:30 |
@HeikoS | but then | 14:30 |
@HeikoS | the variable is of type CLabels* | 14:30 |
@HeikoS | so you cannot call the methods that are used in the example | 14:31 |
@HeikoS | like | 14:31 |
@HeikoS | p3bmrm_out.get_num_labels() | 14:31 |
@HeikoS | or p3bmrm_out.get_label(i) | 14:31 |
@HeikoS | so then you will need to do this via accessing the registered parameters | 14:32 |
@HeikoS | so lets see | 14:32 |
@HeikoS | p3bmrm_out.get_num_labels() is fine | 14:33 |
shogitter | (shubham808) Okay | 14:33 |
@HeikoS | as that is a virtual method of CLabels | 14:33 |
@HeikoS | you it can stay | 14:33 |
@HeikoS | this line here is more tricky | 14:33 |
@HeikoS | yi_pred = RealNumber.obtain_from_generic(p3bmrm_out.get_label(i)) | 14:33 |
shogitter | (shubham808) I will try it out | 14:35 |
@HeikoS | https://github.com/shogun-toolbox/shogun/blob/develop/src/shogun/structure/MulticlassSOLabels.h#L139 | 14:36 |
@HeikoS | https://github.com/shogun-toolbox/shogun/blob/develop/src/shogun/structure/MulticlassSOLabels.cpp#L104 | 14:36 |
@HeikoS | wait | 14:36 |
@HeikoS | https://github.com/shogun-toolbox/shogun/blob/develop/src/shogun/structure/MulticlassSOLabels.cpp#L47 | 14:36 |
@HeikoS | so in the last link, you see the method get_label | 14:36 |
@HeikoS | and it creates the CStructuredData on the fly | 14:37 |
-!- iglesiasg [~iglesias@f119189.upc-f.chello.nl] has joined #shogun | 14:37 | |
shogitter | (shubham808) yeah it directly casts it | 14:38 |
@HeikoS | that is a problem | 14:38 |
@HeikoS | but if we look further | 14:38 |
@HeikoS | m_labels_vector[idx] | 14:38 |
@HeikoS | it is just that | 14:38 |
@HeikoS | so I think | 14:38 |
@HeikoS | If you register m_labels_vector | 14:38 |
@HeikoS | as a parameter | 14:38 |
@HeikoS | then you can access it with | 14:39 |
@HeikoS | p3bmrm_out.get_real_vector("labels_vector") | 14:39 |
@HeikoS | and then the example should work | 14:39 |
@HeikoS | shall I patch that, or do you understand what I mean? | 14:40 |
shogitter | (shubham808) I kinda see what you mean | 14:41 |
shogitter | (shubham808) ... i will try it out and if it doesnt work i will ping u | 14:41 |
shogitter | (shubham808) oh wait my other pr seems destroyed by travis | 14:42 |
iglesiasg | HeikoS, hey mate | 14:43 |
@HeikoS | jojo | 14:43 |
shogitter | (shubham808) i will work on that first u can take this one | 14:43 |
iglesiasg | HeikoS, I read the Stan example Elfarouk put up | 14:44 |
iglesiasg | HeikoS, so adj() in Stan is used to get derivatives of a function wrt to some variable | 14:45 |
@HeikoS | yep | 14:45 |
@HeikoS | I was actyually earlier today trying to implement a kernel using that | 14:45 |
iglesiasg | I was wondering if there is some relation between the adjoint of a matrix and that | 14:45 |
@HeikoS | but it is tricky | 14:45 |
@HeikoS | idk | 14:45 |
@HeikoS | wondered the same | 14:46 |
@HeikoS | but checked the manual | 14:46 |
@HeikoS | and they say that is the method you use to get the grads | 14:46 |
iglesiasg | so implementing a kernel in Stain :) - what kernel were you going for? | 14:47 |
iglesiasg | Stan lol | 14:47 |
@HeikoS | gaussian | 14:48 |
@HeikoS | first question I have is | 14:48 |
@HeikoS | how can I wrap an existing block of memory using stan | 14:48 |
@HeikoS | like the feature vector | 14:48 |
iglesiasg | I understand, yeah | 14:49 |
@HeikoS | next, more fundamental, question: if we want to stick to the features api but use stan | 14:50 |
@HeikoS | then I cannot just get/wrap the feature vectors | 14:50 |
@HeikoS | but I need like a StanDotIter | 14:50 |
iglesiasg | so this would be in the sense of not only using Stan from Shogun | 14:51 |
iglesiasg | but in a way wrapping Stan so that it can be used via Shogun, or? | 14:51 |
iglesiasg | with using Stan from Shogun I meant something along the lines to that example from the PR | 14:52 |
@HeikoS | ah yes | 14:52 |
@HeikoS | that is easy | 14:52 |
@HeikoS | the example does it | 14:52 |
@HeikoS | but question is, can we use this nicely to say make our kernel diffable | 14:52 |
iglesiasg | I think I see | 14:53 |
iglesiasg | but I guess the kernels should then be defined ?analytically? | 14:53 |
iglesiasg | and probably using this data type that Stan uses for that (var?) | 14:53 |
@HeikoS | yes | 14:54 |
@HeikoS | there would be some helper in the kernel | 14:54 |
@HeikoS | that generates the stan expression | 14:54 |
@HeikoS | and then calling the kernel method evaluates it | 14:54 |
@HeikoS | and calling the gradient method evaluates it as well | 14:54 |
iglesiasg | got it | 14:54 |
@HeikoS | but I think for that we need to wrap feature dot iterators in stan | 14:54 |
@HeikoS | or I mean first step could be | 14:55 |
@HeikoS | to just get the feature vector | 14:55 |
@HeikoS | wrap it in stan | 14:55 |
@HeikoS | and then go ahead | 14:55 |
iglesiasg | hold on | 14:55 |
iglesiasg | so feature vector is already just numbers, no? | 14:55 |
@HeikoS | yes | 14:55 |
@HeikoS | but that is ok | 14:56 |
iglesiasg | I see a bit the direction, it could be fancy yeah | 15:00 |
iglesiasg | now I was wondering, naive question, what can we do with the derivatives of a kernel? | 15:01 |
iglesiasg | can we use them to select kernel parameters for instance? | 15:01 |
iglesiasg | for example, the gaussian kernel analytically would be defined in terms of feature vectors (`var`s) and the width (standard deviation-ish) | 15:03 |
@HeikoS | two things | 15:03 |
iglesiasg | then we could take the derivatives wrt to the width | 15:03 |
@HeikoS | one is to learn the width | 15:03 |
iglesiasg | go ahead please :) | 15:03 |
iglesiasg | yep | 15:03 |
@HeikoS | e.g. in a GP we have the marginal likelihood | 15:04 |
@HeikoS | and we want to maximise that wrt to the kernel hyperparameters | 15:04 |
@HeikoS | so we take gradient steps wrt to width | 15:04 |
iglesiasg | yes | 15:04 |
iglesiasg | this one is understood | 15:04 |
@HeikoS | the other situation is derivative wrt to the inputs | 15:04 |
@HeikoS | k(x,y), i.e. the derivative wrt x,y | 15:04 |
@HeikoS | this can be used for kernel machines that are defined in terms of a basis that is different from the data | 15:05 |
@HeikoS | like sparse GPs | 15:05 |
@HeikoS | there we want to learn the best location of the inducing points | 15:05 |
iglesiasg | I see | 15:05 |
@HeikoS | for that we need to take gradient steps once again | 15:05 |
iglesiasg | in a way that would be something like learning the linear transformation from the space of the data to the space of that basis | 15:06 |
iglesiasg | sort-of-ish, maybe | 15:06 |
iglesiasg | maybe not necessarily linear | 15:06 |
@HeikoS | nono | 15:07 |
@HeikoS | it is simpler | 15:07 |
@HeikoS | just think in terms of basis set | 15:07 |
@HeikoS | you have a set of basis functions at m locations in the space | 15:07 |
@HeikoS | and you use those to explain a function that agrees with your training data | 15:08 |
@HeikoS | but training data is different from basis locations | 15:08 |
@HeikoS | usually in kernel and GPs, the training data itself is the location of the basis | 15:08 |
@HeikoS | but doesnt need to be | 15:08 |
iglesiasg | I think I understand, it sounds interesting | 15:08 |
iglesiasg | thanks for explaining :) | 15:09 |
@HeikoS | what are you up to? | 15:10 |
@HeikoS | lisitsyn: jojo\ | 15:10 |
iglesiasg | staring at ?Blind Deconvolution Meets Blind Demixing: Algorithms and Performance Bounds? | 15:10 |
@HeikoS | operator const T*() const; | 15:10 |
@HeikoS | T* operator->() const; | 15:10 |
@HeikoS | lisitsyn: conflicts | 15:10 |
iglesiasg | trying to make some sense of it :/ | 15:10 |
lisitsyn | yes? | 15:10 |
@HeikoS | iglesiasg: sounds complicated | 15:11 |
lisitsyn | HeikoS: second one should not be const | 15:11 |
lisitsyn | T* operator->() >>const<<; | 15:11 |
iglesiasg | HeikoS, not more than anyting else probably :P | 15:11 |
@HeikoS | lisitsyn: thx | 15:11 |
@HeikoS | lisitsyn: you ok with this: | 15:13 |
@HeikoS | static Some<T> c_from_raw(const T* raw); | 15:13 |
@HeikoS | iglesiasg: hehe | 15:14 |
lisitsyn | HeikoS: from_rawc | 15:14 |
lisitsyn | :) | 15:14 |
lisitsyn | why not the same name? | 15:14 |
lisitsyn | it should overload properly, no? | 15:15 |
@HeikoS | it is ambiguous no? | 15:17 |
iglesiasg | HeikoS, it can be good because it is * | 15:23 |
@HeikoS | ok thx | 15:24 |
iglesiasg | what is the stl equivalent to this one btw? | 15:26 |
sukey1 | [https://github.com/shogun-toolbox/shogun] Pull Request https://github.com/shogun-toolbox/shogun/pull/4277 merged by karlnapf | 15:26 |
sukey1 | [https://github.com/shogun-toolbox/shogun] karlnapf pushed 2 commits: | 15:26 |
sukey1 | https://github.com/shogun-toolbox/shogun/commit/0e603b45765a76ecdc98db1011bcf43abc0876c3 | 15:26 |
sukey1 | https://github.com/shogun-toolbox/shogun/commit/bf67562de107044ebd110122c027a280af802745 | 15:26 |
lisitsyn | not sure | 15:28 |
iglesiasg | lisitsyn, yeah, me neither | 15:28 |
iglesiasg | maybe reset is the most similar | 15:29 |
iglesiasg | oh easy! The constructor taking Y* itself | 15:35 |
@HeikoS | iglesiasg: so what we are doing here | 15:42 |
@HeikoS | is to make Some have a flag for const | 15:42 |
iglesiasg | what is a flag for const? :) | 15:46 |
@HeikoS | bool flag readonly | 15:47 |
iglesiasg | Some<const T>? | 15:47 |
@HeikoS | yeah that is the other option | 15:48 |
@HeikoS | but then there are many more types | 15:48 |
@HeikoS | see log | 15:48 |
-!- travis-ci [~travis-ci@ec2-23-23-0-116.compute-1.amazonaws.com] has joined #shogun | 16:17 | |
travis-ci | it's Heiko Strathmann'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/377278344 | 16:17 |
-!- travis-ci [~travis-ci@ec2-23-23-0-116.compute-1.amazonaws.com] has left #shogun [] | 16:17 | |
-!- travis-ci [~travis-ci@ec2-54-91-238-210.compute-1.amazonaws.com] has joined #shogun | 16:42 | |
travis-ci | it's Heiko Strathmann'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/377278344 | 16:42 |
-!- travis-ci [~travis-ci@ec2-54-91-238-210.compute-1.amazonaws.com] has left #shogun [] | 16:42 | |
-!- iglesiasg [~iglesias@f119189.upc-f.chello.nl] has quit [Ping timeout: 240 seconds] | 16:46 | |
-!- iglesiasg [~iglesias@f119189.upc-f.chello.nl] has joined #shogun | 16:49 | |
-!- iglesiasg [~iglesias@f119189.upc-f.chello.nl] has quit [Ping timeout: 256 seconds] | 16:54 | |
-!- VeronicaX11 [~eriekeber@wlan-4-24.unl.edu] has joined #shogun | 19:08 | |
-!- VeronicaX11 [~eriekeber@wlan-4-24.unl.edu] has left #shogun [] | 19:16 | |
-!- VeronicaX11 [~eriekeber@wlan-4-24.unl.edu] has joined #shogun | 19:17 | |
-!- VeronicaX11 [~eriekeber@wlan-4-24.unl.edu] has left #shogun [] | 19:18 | |
-!- VeronicaX11 [~eriekeber@wlan-4-24.unl.edu] has joined #shogun | 19:35 | |
-!- shubham808 [dfb0b06c@gateway/web/freenode/ip.223.176.176.108] has joined #shogun | 20:02 | |
-!- HeikoS [~heiko@host81-153-166-104.range81-153.btcentralplus.com] has quit [Ping timeout: 260 seconds] | 20:30 | |
-!- Chris____ [8602a493@gateway/web/freenode/ip.134.2.164.147] has joined #shogun | 21:19 | |
Chris____ | Hi, is there documentation for nested cross validation using shogun? | 21:27 |
-!- shubham808 [dfb0b06c@gateway/web/freenode/ip.223.176.176.108] has quit [Ping timeout: 260 seconds] | 21:43 | |
sukey1 | [https://github.com/shogun-toolbox/shogun] Pull Request https://github.com/shogun-toolbox/shogun/pull/4280 synchronized by shubham808 | 22:24 |
-!- travis-ci [~travis-ci@ec2-54-160-138-195.compute-1.amazonaws.com] has joined #shogun | 23:11 | |
travis-ci | it's Shubham Shukla's turn to pay the next round of drinks for the massacre he caused in shubham808/shogun: https://travis-ci.org/shubham808/shogun/builds/377441886 | 23:11 |
-!- travis-ci [~travis-ci@ec2-54-160-138-195.compute-1.amazonaws.com] has left #shogun [] | 23:11 | |
-!- travis-ci [~travis-ci@ec2-54-224-238-97.compute-1.amazonaws.com] has joined #shogun | 23:31 | |
travis-ci | it's Shubham Shukla's turn to pay the next round of drinks for the massacre he caused in shubham808/shogun: https://travis-ci.org/shubham808/shogun/builds/377441886 | 23:31 |
-!- travis-ci [~travis-ci@ec2-54-224-238-97.compute-1.amazonaws.com] has left #shogun [] | 23:31 | |
--- Log closed Fri May 11 00:00:01 2018 |
Generated by irclog2html.py 2.10.0 by Marius Gedminas - find it at mg.pov.lt!