--- Log opened Thu Apr 18 00:00:41 2019 | ||
-!- wiking [~wiking@huwico/staff/wiking] has joined #shogun | 01:21 | |
-!- mode/#shogun [+o wiking] by ChanServ | 01:21 | |
-!- wiking [~wiking@huwico/staff/wiking] has quit [Ping timeout: 255 seconds] | 01:26 | |
-!- wiking_ [~wiking@c-185-45-237-122.customer.ggaweb.ch] has joined #shogun | 07:49 | |
-!- wiking_ [~wiking@c-185-45-237-122.customer.ggaweb.ch] has quit [Remote host closed the connection] | 07:56 | |
-!- wiking_ [~wiking@c-185-45-237-122.customer.ggaweb.ch] has joined #shogun | 07:57 | |
-!- wiking_ [~wiking@c-185-45-237-122.customer.ggaweb.ch] has quit [Remote host closed the connection] | 08:15 | |
-!- wiking_ [~wiking@c-185-45-237-122.customer.ggaweb.ch] has joined #shogun | 08:48 | |
-!- gf712 [905208d0@gateway/web/freenode/ip.144.82.8.208] has joined #shogun | 09:14 | |
-!- geektoni [5d2045c3@gateway/web/freenode/ip.93.32.69.195] has joined #shogun | 09:36 | |
-!- wiking_ [~wiking@c-185-45-237-122.customer.ggaweb.ch] has quit [Remote host closed the connection] | 10:28 | |
-!- gf712 [905208d0@gateway/web/freenode/ip.144.82.8.208] has quit [Ping timeout: 256 seconds] | 10:32 | |
-!- wiking_ [~wiking@ict-networks-195-176-113-192.fwd-v4.ethz.ch] has joined #shogun | 10:47 | |
wiking_ | /msg nickserv ghost wiking kitscHme | 11:02 |
---|---|---|
wiking_ | haha | 11:02 |
wiking_ | that one is gone then | 11:02 |
-!- wiking_ is now known as wiking | 11:02 | |
-!- wiking [~wiking@ict-networks-195-176-113-192.fwd-v4.ethz.ch] has quit [Changing host] | 11:02 | |
-!- wiking [~wiking@huwico/staff/wiking] has joined #shogun | 11:02 | |
-!- mode/#shogun [+o wiking] by ChanServ | 11:03 | |
@wiking | geektoni: around? | 11:12 |
geektoni | wiking: yup | 11:13 |
@wiking | ok so swig q | 11:14 |
@wiking | are you up for it? :) | 11:14 |
@wiking | because i'm like gonna give up on this project soon if i dont find a neet solution | 11:14 |
@wiking | :) | 11:14 |
geektoni | lol i will try | 11:15 |
@wiking | ok so i have this problem | 11:15 |
@wiking | that we used to have a java code | 11:15 |
@wiking | in SWIG | 11:15 |
@wiking | to support java object externalization | 11:15 |
@wiking | basically it's an SGO extension | 11:15 |
@wiking | (class extension) | 11:15 |
@wiking | for supporting https://docs.oracle.com/javase/7/docs/api/java/io/Externalizable.html | 11:16 |
@wiking | basically this is to be able to do in java | 11:16 |
@wiking | serialization | 11:16 |
@wiking | using java framework | 11:16 |
@wiking | instead of going knee deep into shogun stuff | 11:17 |
@wiking | which is great i think | 11:17 |
@wiking | we do have this for pickle in python | 11:17 |
@wiking | anyhow | 11:17 |
@wiking | i'm having problems with swig mappings because | 11:17 |
@wiking | i export json serialization objects | 11:17 |
@wiking | to swig... so i can create those in jvm as well. those inherit from CSerializer/CDeserializer | 11:18 |
@wiking | and there's an interface in sgo: SGO::serializer(CSerializer*) and the deserilizer part as well | 11:18 |
@wiking | but say now i create JsonDeserizlizer in JVM | 11:18 |
@wiking | and do sgo.deserilize(jsonDeserializer) | 11:19 |
@wiking | the java complains that it cannot convert jsonDeserializer to CDeserializer | 11:19 |
@wiking | as if inheritence is being ignored | 11:19 |
geektoni | I see I see | 11:19 |
@wiking | now of course we can say that yeey cool it's because i have not added CDeserializer to swig | 11:19 |
@wiking | but and here comes the shitty part | 11:19 |
@wiking | i haven't added those because all these things are working with Some<Class> | 11:20 |
@wiking | and now i'm like either i drop Some so that there's a chance (as inheritance should work in swig see Features etc) | 11:20 |
@wiking | or that somehow i add Some support | 11:20 |
geektoni | so | 11:20 |
geektoni | from my experience | 11:20 |
@wiking | dropping some is not a good idea because then i'm back to the same asdf with SG_REF and so on | 11:20 |
geektoni | you should avoid to expose Some from SWIG | 11:21 |
geektoni | yes yes, I know | 11:21 |
@wiking | :< | 11:21 |
@wiking | but imo there should be a way | 11:21 |
@wiking | to support some in swig no? | 11:21 |
@wiking | i mean in the first place having Some instead of std::shared_ptr | 11:21 |
@wiking | is because we wanna be able to use that one day | 11:21 |
@wiking | otherwise we could just use std::shared_ptr in the first place no? :) | 11:22 |
@wiking | (there's no need to have some as we have already c++14 required) | 11:22 |
geektoni | yes, exactly. I mean, SWIG should already support shared_ptr natively | 11:22 |
geektoni | I didn't look into it yet | 11:22 |
geektoni | but I guess it will be much easier to use | 11:22 |
@wiking | it does | 11:22 |
@wiking | but not for all targets | 11:23 |
@wiking | i mean maybe this is fixed in the upcoming 4.0 release | 11:23 |
@wiking | (there's already an rc1 released from that) | 11:23 |
geektoni | than to come up with our version of shared_ptr and with out version of the interface mapping | 11:23 |
@wiking | mmm on the other hand | 11:24 |
@wiking | i've just checked swig master | 11:24 |
@wiking | all the target langs we are interested in | 11:24 |
@wiking | has boost_shared_ptr.i | 11:25 |
@wiking | which is basically the support for std::shared_ptr | 11:25 |
@wiking | so | 11:26 |
@wiking | maaaaybe | 11:26 |
@wiking | its' actually better to start doing some->shared_ptr | 11:26 |
@wiking | ? | 11:26 |
@wiking | and finally have all things in the c++ interface use shared_ptr as well? | 11:26 |
@wiking | lemme ping lisitsyn | 11:26 |
lisitsyn | hello | 11:27 |
@wiking | ok so lisitsyn^ | 11:27 |
lisitsyn | yes | 11:27 |
geektoni | if we want to drop SG_REF/SG_UNREF some day I guess we need to start from somewhere ;) | 11:27 |
@wiking | is there any specific reason why we wanna have Some instead of shared_ptr | 11:27 |
lisitsyn | ah you want to get rid of pointer in swig? | 11:27 |
@wiking | lisitsyn: at least wanna be able to have either Some or shared_ptr | 11:28 |
lisitsyn | the only reason is sg_ref | 11:28 |
@wiking | dont care what | 11:28 |
@wiking | ok but | 11:28 |
@wiking | if all swig supports | 11:28 |
@wiking | (the languages we use) shared_ptr | 11:28 |
lisitsyn | apart from that you can do using shared_ptr<T> = Some<T> | 11:28 |
lisitsyn | or typedef whatever :) | 11:28 |
@wiking | yeah i get what you mean | 11:28 |
@wiking | but i mean what is the blocker | 11:28 |
@wiking | from us using shared_ptr ? | 11:28 |
@wiking | we could just drop sg_ref right? | 11:28 |
@wiking | if we use shared_ptr/some | 11:29 |
@wiking | (i mean with current some not as that relies on sg_ref) | 11:29 |
@wiking | but see what i mean? | 11:29 |
lisitsyn | not yet | 11:29 |
@wiking | ok so | 11:29 |
@wiking | say we start porting everything | 11:29 |
@wiking | where we pass PTRs in c++ api | 11:29 |
@wiking | to shared_ptr | 11:29 |
@wiking | and say swig supports its (as it does 3.0.12) | 11:30 |
lisitsyn | oh that sounds like a great endeavour :) | 11:30 |
lisitsyn | but ok | 11:30 |
@wiking | yeye it's crazy | 11:30 |
@wiking | but lets say that we do this | 11:30 |
@wiking | but what is the thing | 11:30 |
lisitsyn | then I don't see any problem | 11:30 |
@wiking | that would be shooting our leg? | 11:30 |
@wiking | lisitsyn: currently for example i have this problem | 11:30 |
@wiking | that either i drop | 11:30 |
@wiking | Some | 11:30 |
lisitsyn | I think there is none but the complexity of transforming all the stuff | 11:30 |
@wiking | in serialization | 11:30 |
@wiking | or somehow make Some work in SWIG | 11:31 |
lisitsyn | it doesn't matter if you have Some or shared_ptr they are jjust the same :) | 11:31 |
@wiking | yeye | 11:31 |
@wiking | indeed | 11:31 |
@wiking | so i was just wondering | 11:31 |
@wiking | since we could use shared_ptr | 11:31 |
@wiking | (apparently) | 11:31 |
@wiking | from the developer point of view | 11:31 |
@wiking | maybe it's easier to name as is | 11:31 |
@wiking | and use std:: instead of sg_ref et al? | 11:32 |
@wiking | because if we use std::shared_ptr | 11:32 |
@wiking | we pretty much can drop m_refcount | 11:32 |
@wiking | right? | 11:32 |
@wiking | in sgo | 11:32 |
lisitsyn | yeah sure | 11:32 |
@wiking | and then all the SG_REF/UNREF | 11:32 |
@wiking | is gone as well | 11:32 |
@wiking | from c++ | 11:32 |
@wiking | okey | 11:32 |
@wiking | i mean with libtooling | 11:32 |
@wiking | to replace all the fucking place | 11:33 |
@wiking | of creating objects | 11:33 |
@wiking | where object is an SGO-like | 11:33 |
@wiking | should not be more than 80 lines | 11:33 |
@wiking | and replace the code with shared_ptr | 11:33 |
lisitsyn | I like your bravery! :) | 11:33 |
@wiking | i mean i've done this | 11:33 |
@wiking | with SHOGUN_EXPORT | 11:33 |
@wiking | for windows | 11:33 |
lisitsyn | generalmente yes, you can do that and it should work | 11:33 |
@wiking | so i have the codebase there for libtooling | 11:33 |
@wiking | and we dont wanna have | 11:34 |
@wiking | std::unique_ptr | 11:34 |
@wiking | at least not that is exposed to swig | 11:34 |
@wiking | as that's anyways would be tricky | 11:34 |
@wiking | with passing ownership around | 11:34 |
lisitsyn | sure, unique_ptr has no place in the interface | 11:34 |
@wiking | ok | 11:34 |
@wiking | so | 11:34 |
lisitsyn | it is all shared_ptr | 11:34 |
@wiking | say i start a feature branch :) | 11:34 |
@wiking | and first replace things with libtooling | 11:35 |
@wiking | to shared_ptr | 11:35 |
@wiking | i'm just wondering | 11:35 |
lisitsyn | yeah if you're in a psycho killer mood then you might want to try | 11:35 |
lisitsyn | :) | 11:35 |
@wiking | about inhertiance shit | 11:35 |
lisitsyn | what inheritance? | 11:35 |
@wiking | i mean | 11:35 |
@wiking | somehow something tells me | 11:35 |
@wiking | that we had some problems with inherited objs | 11:35 |
@wiking | but i'm just maybe dreaming here | 11:35 |
@wiking | but it should work that say | 11:35 |
@wiking | train(std::shared_ptr<CFeatures> data) | 11:36 |
lisitsyn | ah this thing | 11:36 |
@wiking | and then i pass a std::shared_ptr<DenseFeatures<float64_t>> | 11:36 |
@wiking | oooor? | 11:36 |
@wiking | geektoni: ^ | 11:36 |
@wiking | https://stackoverflow.com/questions/1358143/downcasting-shared-ptrbase-to-shared-ptrderived | 11:36 |
@wiking | apparently works the downcasting | 11:37 |
@wiking | (we do this a lot) | 11:37 |
lisitsyn | I think this should work yeah | 11:37 |
@wiking | and upcasting should be automagic? | 11:37 |
@wiking | just as usual ptr? | 11:37 |
lisitsyn | uhmm? | 11:37 |
lisitsyn | it's only one way ticket | 11:37 |
lisitsyn | what do you mean? | 11:37 |
@wiking | so say i get a shared_ptr<LibLinear> | 11:38 |
@wiking | and then i wanna do | 11:38 |
@wiking | obj.put("machine", shared_ptr<LibLinear>) | 11:38 |
@wiking | right? | 11:38 |
@wiking | or the same like | 11:38 |
lisitsyn | oh that's a tricky thing actually | 11:39 |
lisitsyn | I think put/get is suited for pointers now | 11:39 |
@wiking | where we have obj.set_machine(CMachine*) | 11:39 |
@wiking | yes | 11:39 |
@wiking | that is for sure | 11:39 |
@wiking | and there needs to be some crazy hacking | 11:39 |
@wiking | i'm just wondering | 11:39 |
@wiking | whether there's a blocker | 11:39 |
@wiking | that goes super crazy | 11:39 |
@wiking | or it's managable | 11:39 |
@wiking | i mean currently anyways there's a dispatch code right? | 11:39 |
lisitsyn | I can't see any clearly but there might be some (whoknows) | 11:39 |
lisitsyn | yeah | 11:40 |
@wiking | i mean the thing is of course | 11:40 |
@wiking | now the put | 11:40 |
@wiking | is expecting an SGOPtr | 11:40 |
lisitsyn | yeah you just get the raw pointer and dispatch it | 11:40 |
@wiking | the right change of this will be | 11:40 |
@wiking | shared_ptr<SGO> | 11:40 |
@wiking | but then | 11:40 |
@wiking | what if i try to use that interface | 11:40 |
@wiking | and i have a shared_ptr<LibLinear> | 11:41 |
@wiking | i mean the caller should do the typecasting unfortunately | 11:41 |
@wiking | or this is supported out of box? | 11:41 |
@wiking | (upcasting that is) | 11:41 |
lisitsyn | it is in a copy constructor | 11:41 |
lisitsyn | (at least in Some) | 11:41 |
@wiking | i mean i'm quite sure tha tactualy | 11:42 |
@wiking | this quite of casting is not automagic | 11:42 |
@wiking | but godbolt will tell me i guess :) | 11:42 |
lisitsyn | that is the copy constructor I was fixing in beograd :D :D | 11:42 |
@wiking | https://stackoverflow.com/a/21019216/2798875 | 11:42 |
@wiking | ok since we cannot hax0r shared_ptr | 11:43 |
@wiking | maybe this is the reason we wanna have some? | 11:43 |
@wiking | ok i gotta run now | 11:43 |
lisitsyn | SG_REF was the main reason | 11:43 |
lisitsyn | but having your own (but compatible) class might be of some benifit | 11:43 |
@wiking | will leave the console here | 11:43 |
lisitsyn | maybe some leaking memory tracking or etc | 11:43 |
@wiking | so it'll log shit | 11:43 |
@wiking | but i gotta run | 11:44 |
lisitsyn | yeah I have to run too | 11:44 |
lisitsyn | :) | 11:44 |
@wiking | ttyl | 11:44 |
@wiking | thnx | 11:44 |
-!- HeikoS [~heiko@69.pool85-48-187.static.orange.es] has joined #shogun | 12:00 | |
-!- mode/#shogun [+o HeikoS] by ChanServ | 12:00 | |
@HeikoS | wiking: yo! | 12:00 |
@HeikoS | geektoni: hi! | 12:00 |
-!- geektoni [5d2045c3@gateway/web/freenode/ip.93.32.69.195] has quit [Ping timeout: 256 seconds] | 12:01 | |
@HeikoS | lisitsyn: | 12:19 |
-!- HeikoS [~heiko@69.pool85-48-187.static.orange.es] has quit [Ping timeout: 246 seconds] | 13:07 | |
-!- HeikoS [~heiko@112.pool85-48-187.static.orange.es] has joined #shogun | 13:10 | |
-!- mode/#shogun [+o HeikoS] by ChanServ | 13:10 | |
-!- HeikoS [~heiko@112.pool85-48-187.static.orange.es] has quit [Ping timeout: 255 seconds] | 13:28 | |
-!- gf712 [1f0ef8ff@gateway/web/freenode/ip.31.14.248.255] has joined #shogun | 14:27 | |
-!- geektoni [5d2045c3@gateway/web/freenode/ip.93.32.69.195] has joined #shogun | 15:15 | |
@wiking | ok | 15:39 |
@wiking | so lisitsyn with all that in mind | 15:39 |
@wiking | lisitsyn: seems we should be good to go | 15:40 |
@wiking | https://godbolt.org/z/TXYQdm | 15:40 |
@wiking | gf712: here we go | 15:40 |
@wiking | git checkout -b feature/smart_ptr :) | 15:40 |
@wiking | geektoni: ^ | 15:40 |
@wiking | seems like a good plan to waste easter holidays | 15:40 |
@wiking | :D | 15:40 |
geektoni | wiking: ahah we don't need holidays | 15:45 |
@wiking | :> | 15:46 |
@wiking | aaha man doxygen of llvm | 15:48 |
@wiking | now that is a blackhole for time :) | 15:48 |
-!- durovo [~durovo@a3.c8.2fa9.ip4.static.sl-reverse.com] has quit [Read error: Connection reset by peer] | 16:08 | |
-!- durovo [~durovo@a3.c8.2fa9.ip4.static.sl-reverse.com] has joined #shogun | 16:09 | |
@wiking | ahhahaha | 16:09 |
@wiking | geektoni: can you believe that this is the class def in doxygen of llvm | 16:10 |
@wiking | "Engages in a tight little dance with the lexer to efficiently preprocess tokens. More..." | 16:10 |
geektoni | wiking: they do have a sense of humor LoL | 16:11 |
@wiking | :) | 16:11 |
geektoni | wiking: you know, I tried to work with LLVM once, but, as you saw, I was quickly brought to desperation by their docs. | 16:12 |
geektoni | I hope they improved them a bit in the last few years. | 16:12 |
@wiking | hehehe yeah | 16:12 |
@wiking | noup | 16:12 |
@wiking | :) | 16:12 |
@wiking | its doxygen | 16:12 |
@wiking | and most of the things are not actually doxygenized | 16:12 |
@wiking | so you go to src | 16:12 |
@wiking | and then check wtf is actually doing | 16:12 |
geektoni | ehehe thought so | 16:13 |
@wiking | gf712: here? | 16:13 |
geektoni | btw is it still a pain to compile it from source? | 16:13 |
@wiking | geektoni: not daring to try | 16:14 |
@wiking | :) | 16:14 |
@wiking | so dunno | 16:14 |
geektoni | ahaha fair enough | 16:14 |
gf712 | wiking: yup im here | 16:19 |
@wiking | gf712: okey so.... | 16:19 |
@wiking | watch_param/SG_ADD | 16:19 |
@wiking | what's your thought on being able to support std::shared_ptr :P | 16:20 |
@wiking | like a guesstimate how hard that'd be | 16:20 |
gf712 | you mean pass around shared_ptr instead of references? | 16:21 |
gf712 | or? | 16:21 |
@wiking | yeah since in case of switching to shared_ptr that'd mean that obj properties that are sgo-like | 16:22 |
@wiking | would all become shared_ptrs | 16:22 |
@wiking | i mean that's the point | 16:25 |
@wiking | that i'm wondering adding things to the tags framework | 16:25 |
@wiking | shared_ptr | 16:25 |
@wiking | how complicated/crazy that'd be | 16:25 |
@wiking | as passing around those is one thing... it's just a lot of code replacement and that's all | 16:26 |
@wiking | + removing all the SG_REF/UNREF pairs | 16:26 |
@wiking | it's almost as if it's regex job | 16:26 |
gf712 | I guess its time to pay the tech debt :D | 16:26 |
gf712 | hmm, I am just thinking if its that simple/. | 16:26 |
@wiking | but the q is more about how crazy will it be to do | 16:26 |
gf712 | yea | 16:26 |
@wiking | SG_ADD(shared_ptr....) | 16:26 |
gf712 | it'll be pretty insane | 16:27 |
@wiking | as everything that is sgo-like will be wrapped into a shared_ptr | 16:27 |
gf712 | is any compatible with shared_ptr? | 16:27 |
@wiking | not yet i would say | 16:27 |
@wiking | :) | 16:27 |
gf712 | or would there have to be a workaround | 16:27 |
gf712 | can always have a shared_ptr<Any> | 16:28 |
gf712 | right> | 16:28 |
@wiking | ah | 16:28 |
@wiking | yeah that is possible | 16:28 |
@wiking | i see where you are goin :) | 16:28 |
@wiking | :P | 16:28 |
gf712 | hmm but then there could be dangling references no? | 16:28 |
gf712 | actually maybe not | 16:29 |
gf712 | would have to try | 16:29 |
@wiking | yep yep | 16:29 |
@wiking | ok so basically all the sg_add will go haywire | 16:29 |
@wiking | as soon as i do the libtooling job | 16:30 |
@wiking | to replace SGOPtr -> shared_ptr<SGO-like> | 16:30 |
@wiking | which is fine for the time being | 16:30 |
@wiking | namely see how the c++ part would act | 16:30 |
@wiking | without serialization/put/get | 16:30 |
@wiking | and then would come swig with shared_ptr | 16:30 |
@wiking | and any haxors | 16:30 |
@wiking | but models should work on c++ level | 16:31 |
@wiking | especially with the ones where we dont use tags fw :P | 16:31 |
gf712 | so for shared_ptr swig do you have to release the pointer? | 16:32 |
gf712 | and then make shared in type map in? | 16:32 |
@wiking | no | 16:35 |
@wiking | there's a typemap for shared_ptr in swig for the langs we are interested in | 16:35 |
@wiking | so swig takes care of that just as for std::string and std::vector | 16:35 |
gf712 | even R? | 16:35 |
gf712 | I thought it used boost pointer for that? | 16:35 |
@wiking | http://www.swig.org/Doc3.0/Library.html#Library_std_shared_ptr | 16:35 |
@wiking | yes | 16:36 |
@wiking | but boost_ptr = shared_ptr | 16:36 |
gf712 | ah ok | 16:36 |
gf712 | cool! | 16:36 |
gf712 | and unique_ptr? | 16:36 |
gf712 | I guess it doesn't make sense | 16:36 |
@wiking | that doesn't make sense | 16:36 |
@wiking | ah wait | 16:37 |
@wiking | maybe i'm now a bit asdf | 16:37 |
@wiking | lemme check the repo again | 16:37 |
@wiking | i mean gf712 https://github.com/swig/swig/blob/master/Lib/r/std_shared_ptr.i | 16:37 |
gf712 | https://github.com/swig/swig/blob/31b3b782a15bd4752b93193019dde85528443db5/Lib/r/boost_shared_ptr.i#L1 | 16:39 |
gf712 | ah wait thats a different "header" | 16:39 |
@wiking | so lua is kind of out | 16:39 |
@wiking | and in R if we rely on 3.0.12 | 16:40 |
gf712 | I wonder how difficult it is to implement these things? | 16:40 |
@wiking | we need to do a hack that i added | 16:40 |
@wiking | what exactly? | 16:40 |
gf712 | add for example lua | 16:40 |
gf712 | write the std_shared_ptr.i ourselves | 16:40 |
@wiking | ah | 16:42 |
@wiking | dunno | 16:42 |
gf712 | I guess you have to know that language c api well | 16:42 |
@wiking | ye | 16:44 |
@wiking | anyhow it would be super good | 16:44 |
@wiking | to get shared_ptr support in c++ and most of the swig interfaces | 16:44 |
@wiking | the any part will be interesting i guess :))) | 16:44 |
@wiking | but most of the things could be ported w/o that already | 16:45 |
gf712 | can you paste bin the lib tooling thing you have for shared ptr btw? | 16:46 |
gf712 | just so I can see how it works | 16:46 |
gf712 | pls :) | 16:46 |
@wiking | will do | 16:47 |
@wiking | i've just started to hack it | 16:47 |
@wiking | i either work my way up from SG_UNREF/REF pairs | 16:47 |
@wiking | or work my way down from fucntion args | 16:47 |
@wiking | oooooor maybe the best is to catch this from the object properties | 16:48 |
@wiking | and then go up along the way | 16:48 |
@wiking | change the property to shared_ptr if it's sgolike | 16:48 |
@wiking | and then wherever that property is being used | 16:48 |
@wiking | change shit around :) | 16:48 |
@wiking | lol hardware_destructive_interference_size | 16:54 |
gf712 | what kind of error is that? | 17:01 |
@wiking | nono new c++17 feature | 17:08 |
@wiking | nice one actually | 17:08 |
-!- wiking [~wiking@huwico/staff/wiking] has quit [Remote host closed the connection] | 17:52 | |
-!- gf712 [1f0ef8ff@gateway/web/freenode/ip.31.14.248.255] has quit [Ping timeout: 256 seconds] | 18:50 | |
-!- geektoni [5d2045c3@gateway/web/freenode/ip.93.32.69.195] has quit [Ping timeout: 256 seconds] | 18:57 | |
-!- sighingnow [~sighingno@2001:da8:203:81:1c3a:5657:47d3:aafb] has quit [Read error: Connection reset by peer] | 21:10 | |
-!- HeikoS [~heiko@134.red-81-47-28.dynamicip.rima-tde.net] has joined #shogun | 22:00 | |
-!- mode/#shogun [+o HeikoS] by ChanServ | 22:00 | |
-!- HeikoS [~heiko@134.red-81-47-28.dynamicip.rima-tde.net] has quit [Quit: Leaving.] | 22:39 | |
-!- HeikoS [~heiko@134.red-81-47-28.dynamicip.rima-tde.net] has joined #shogun | 22:39 | |
-!- mode/#shogun [+o HeikoS] by ChanServ | 22:39 | |
-!- HeikoS [~heiko@134.red-81-47-28.dynamicip.rima-tde.net] has quit [Ping timeout: 246 seconds] | 22:45 | |
--- Log closed Fri Apr 19 00:00:42 2019 |
Generated by irclog2html.py 2.10.0 by Marius Gedminas - find it at mg.pov.lt!