Open in new window / Try shogun cloud
--- Log opened Mon May 21 00:00:02 2012
--- Day changed Mon May 21 2012
n4nd0we won't have access to anything that is not defined in that class00:00
-!- cronor [] has quit [Ping timeout: 246 seconds]00:00
-!- cronor_ is now known as cronor00:00
blackburnn4nd0: right00:01
blackburnlooks unsolvable00:01
n4nd0no wait00:02
n4nd0we would have access to the other stuff if we downcast00:02
blackburnyes but I so much do not like casting00:02
n4nd0well, but it must exist because of something and it solves the problem we get here :D00:03
n4nd0why don't you like it?00:03
blackburnnevermind I think I can live with it :D00:03
n4nd0tell me anyway00:03
blackburnI do not know - I simply do not like it00:04
blackburnit looks redundant00:04
blackburnok let me think what can we do here then00:05
n4nd0how can we do it in any case from other interfaces other that libshogun?00:05
n4nd0e.g. python00:05
n4nd0I have read about doing something like base_class_instance.__class__ = DerivedClass00:06
n4nd0that didn't work though00:06
n4nd0something like that operation can only be used with head variables00:06
blackburnno just lets live with casting :D00:07
blackburnI mean it is ok to do this casting I think00:09
blackburnI changed my mind :D00:11
blackburnn4nd0: however it looks really redundant00:12
blackburnsee - you need *to know* which labels to use00:12
n4nd0tell me why it is redundant00:13
blackburnn4nd0: because of that casting you need to do (and only in one proper way)00:14
n4nd0I don't see why you worry about redundancy here00:15
n4nd0probably I am missing something00:15
blackburnI just do not like that any user would need to cast apply result00:15
blackburnand know what is the result00:15
n4nd0mmm I see00:17
n4nd0I agree with you, in that sense it would be more comfortable that apply returns directly what is needed00:18
n4nd0but I see no way to have at the same time that advantage and a CMachine::apply that works for all the subclasses00:18
blackburnyes and this drives me mad00:18
n4nd0I don't think that the fact that the user needs to know this such a big deal in any case00:20
n4nd0isn't require to know something similar when creating features, for example?00:20
CIA-113shogun: Sergey Lisitsyn master * rfc7021d / (7 files): Some labels refactoring -
CIA-113shogun: Sergey Lisitsyn master * r101802d / (2 files in 2 dirs): Merge branch 'master' of -
blackburnyes but there should be a hack anyway00:20
blackburnfor python at least00:20
blackburnn4nd0: ok I think I'd rather go sleep now00:24
n4nd0all right00:24
n4nd0good night00:25
blackburnn4nd0: if you are bored00:25
blackburnyou may add these copy constructors00:25
blackburnn4nd0: just ERROR on wrong labels given00:26
blackburnin this way your way of casting should work00:26
blackburnI hope I will feel better about all these things tomorrow00:31
blackburnsee you00:31
-!- blackburn [~blackburn@] has left #shogun []00:31
-!- wiking_ [] has joined #shogun00:44
-!- wiking_ [] has quit [Changing host]00:44
-!- wiking_ [~wiking@huwico/staff/wiking] has joined #shogun00:44
-!- wiking [~wiking@huwico/staff/wiking] has quit [Ping timeout: 250 seconds]00:46
-!- wiking_ is now known as wiking00:46
-!- cronor [] has quit [Read error: Connection reset by peer]01:04
-!- cronor [] has joined #shogun01:04
-!- blackburn [~blackburn@] has joined #shogun01:17
blackburnargh insomnia01:17
blackburnn4nd0: still here?01:17
n4nd0blackburn: yeah01:17
n4nd0blackburn: I cannot solve this :(01:17
blackburnsolve what?01:17
n4nd0if we return CLabels01:18
n4nd0cast it to CMulticlassLabels in python01:18
blackburnhmm why?01:19
blackburnI thought copy constructor would enable this - no?01:19
n4nd0I did a constructor like this one01:20
blackburnright - and?01:21
n4nd0one of the examples explodes01:21
blackburnonly one?01:22
n4nd0it was the second I tried01:22
n4nd0not a good percentage :D01:23
blackburnwhat is the error?01:23
n4nd0the common *** glibc detected *** python: free(): invalid pointer: 0x0ad330e8 ***01:23
n4nd0and a long trace01:23
blackburnok but it is not the problem of copy constructor I think01:24
n4nd0this it gdb's trace01:25
blackburnnot a constructor problem again :)01:26
n4nd0I think it must be related01:27
n4nd0since it is what the new changes have introduced01:27
blackburnno I can't believe that01:28
blackburnthe problem is in wrong get_mean01:28
blackburnn4nd0: do you understand why it is wrong?01:29
n4nd0something is getting deleted twice01:29
blackburnn4nd0: adding .clone() would be the simplest solution I think01:30
n4nd0I cannot believe that the error has nothing to do with this constructor thing01:32
n4nd0what else can it be otherwise?01:33
n4nd0I'd that probably something is not getting properly initialized01:33
blackburnn4nd0: no it is wrong anyway01:33
n4nd0the constructor is wrong?01:33
blackburnahha anoooooother problem01:34
blackburnapply returns float64_t01:34
n4nd0where is that happening?01:34
blackburnor what?01:35
n4nd0haha don't know, you said it :P01:35
n4nd0why is that apply an issue?01:36
n4nd0for structured labels it is01:36
n4nd0I actually thought of that but forgot to mention :S01:36
blackburnyes for SO01:36
n4nd0arghh damn it01:37
n4nd0is templates = solution?01:38
n4nd0why not?01:38
blackburntemplating of what?01:38
n4nd0the type that represents a single label01:38
n4nd0what otherwise?01:41
blackburnCKernelMachiine : public CMachine<float64_t>?01:41
blackburnoh so complex01:41
n4nd0it gets nasty indeed01:42
n4nd0this shit is a huge change man ...01:42
blackburnI would rather remove apply by index01:42
n4nd0I bet it is not widely used01:43
blackburnin all libshogun examples01:43
n4nd0as long as it is in the examples and we don't screw lot of users01:44
blackburnwe screwed everything already01:44
blackburnlets write down01:45
n4nd0so when we say that to make it templated may be difficult in terms of SWIG01:56
n4nd0it should be possible or?01:56
blackburnlets assure we have written down all ideas01:56
blackburnand freeze it :D01:56
blackburnI think yes should be possible01:57
n4nd0*but* if we template it01:57
n4nd0shouldn't CMachine be templated too?01:57
n4nd0how would we declare apply otherwise?01:58
blackburnyes be templated01:58
blackburnand everything should be01:58
n4nd0I don't like much the idea of making it templated too01:58
blackburnsounds infeasible01:58
n4nd0I think that downcasting is the best01:58
blackburnyes probably01:59
n4nd0in C++ or java is something we can do directly02:00
n4nd0we need to provide some functions to do it from other languages02:00
n4nd0maybe SWIG methods like the one the suggest in the link I pasted there02:00
n4nd0what do you think?02:00
blackburnn4nd0: for python there should be a hack I think02:01
n4nd0to make it transparent you mean=02:01
blackburnhah it is already dawn here02:04
n4nd0not yet here, but it'll be soon probably02:05
-!- av3ngr [av3ngr@nat/redhat/x-ouidhbnbsioxllxt] has joined #shogun02:06
n4nd0let's see if we can agree all on this soon02:06
blackburnI'll merge apply() and apply(CFeatures* data) now02:07
-!- av3ngr [av3ngr@nat/redhat/x-ouidhbnbsioxllxt] has quit [Read error: Connection reset by peer]02:07
n4nd0what changes?02:07
-!- av3ngr [av3ngr@nat/redhat/x-hjkimqqbpdpapkel] has joined #shogun02:07
blackburnn4nd0: just merge these two methods02:07
blackburnto apply(CFeatures* data=NULL)02:07
-!- av3ngr [av3ngr@nat/redhat/x-hjkimqqbpdpapkel] has quit [Read error: Connection reset by peer]02:27
CIA-113shogun: iglesias master * recc853c / src/shogun/classifier/QDA.cpp : ~ RealLabels to MulticlassLabels in QDA -
-!- abn_ [av3ngr@nat/redhat/x-pugqrqjzwcytawbe] has joined #shogun02:27
-!- vikram360 [~vikram360@] has joined #shogun02:41
blackburnhmmm good way to get rid of insomnia02:41
blackburnnow I want to die after such refactoring :D02:42
CIA-113shogun: Sergey Lisitsyn master * rad7e86b / (28 files in 7 dirs): Merged apply() and apply(CFeatures* data) into apply(CFeatures* data=NULL) -
-!- vikram360 [~vikram360@] has quit [Ping timeout: 246 seconds]02:46
blackburnn4nd0: here?02:47
n4nd0tell me02:50
n4nd0blackburn: still insomnia :)?02:51
blackburnn4nd0: could you please move QDA to multiclass then?02:51
n4nd0I am with another thing but I will do it ;)02:52
-!- Francis_Chan [~Adium@] has joined #shogun02:55
-!- Francis_Chan [~Adium@] has left #shogun []02:56
blackburnhmm no more insomnia02:56
blackburnI am powered off02:56
blackburnlast commit02:56
blackburnn4nd0: I ran QDA on 39209 vectors of size 57602:57
n4nd0how did it go?02:57
blackburnis it a big mistake?02:57
blackburn15 mins elapsed or so02:57
blackburnno result yet :D02:57
blackburnn4nd0: am I right it requires to operate on 43(num classes) matrices of 576x576 shape?02:58
CIA-113shogun: Sergey Lisitsyn master * re8a662e / (8 files in 3 dirs): Moved GNB to multiclass folder -
n4nd0I didn't understand the last part soryr02:59
blackburnn4nd0: I mean while dimension is 57602:59
blackburnand number of classes is 4302:59
blackburnit would require to construct 43 matrices03:00
n4nd0well, more than that actually :O03:00
blackburnbut no n_of_vectors matrix?03:00
blackburnbecause 39K is too big for square matrices :D03:01
blackburn915s elapsed03:01
blackburnit trained!03:01
blackburnlets wait it applies03:01
n4nd0if I remember correctly no, no # vectors matrix03:01
n4nd0it will actually build one matrix, 2 ndarrays and one vector03:01
blackburnhmm apply is pretty slow03:01
n4nd0maybe we could add there multi-threading or sth?03:02
blackburnoh line 103 is pretty bad03:03
blackburnyou may use add_to_dense_vec here instead03:03
n4nd0it is an empty line :P03:04
blackburnX = features - means part03:04
n4nd0instead of the for?03:04
blackburnah you need full matrix here03:04
blackburncan't it be avoided?03:05
n4nd0no idea03:05
blackburnwe have broken shogun anyway03:06
n4nd0c'mon, it will be fixed soon03:06
n4nd0what were you using QDA for btw?03:07
n4nd0just trying it out?03:07
blackburnsame problem - road sign recognition03:07
blackburnyes just curious about results03:07
blackburnstill applying :D03:08
n4nd0oh not good03:08
n4nd0how many vectors?03:08
n4nd0in apply03:08
n4nd0those are quite a few too03:09
blackburnarrrrrrgh I can't wait no more03:17
n4nd0yeah, I am going to bed too03:18
n4nd0good morning03:18
-!- n4nd0 [] has quit [Quit: leaving]03:20
-!- blackburn [~blackburn@] has quit [Ping timeout: 260 seconds]03:21
-!- abn__ [av3ngr@nat/redhat/x-jlcexhkeketlyesx] has joined #shogun03:32
-!- abn_ [av3ngr@nat/redhat/x-pugqrqjzwcytawbe] has quit [Ping timeout: 240 seconds]03:36
-!- cronor [] has quit [Read error: Connection reset by peer]03:57
-!- av3ngr [av3ngr@nat/redhat/x-pjunzffxtdsfhgvr] has joined #shogun03:58
-!- abn__ [av3ngr@nat/redhat/x-jlcexhkeketlyesx] has quit [Ping timeout: 276 seconds]04:03
-!- vikram360 [~vikram360@] has joined #shogun04:46
-!- cronor [] has joined #shogun05:06
-!- av3ngr [av3ngr@nat/redhat/x-pjunzffxtdsfhgvr] has quit [Read error: Connection reset by peer]05:28
-!- av3ngr [av3ngr@nat/redhat/x-crgfftiyumbtmlza] has joined #shogun05:29
-!- av3ngr [av3ngr@nat/redhat/x-crgfftiyumbtmlza] has quit [Read error: Connection reset by peer]05:40
-!- abn_ [av3ngr@nat/redhat/x-ktzqmkcjqpbbiibl] has joined #shogun05:41
-!- abn_ [av3ngr@nat/redhat/x-ktzqmkcjqpbbiibl] has quit [Read error: Connection reset by peer]06:12
-!- abn_ [av3ngr@nat/redhat/x-aqwycomoiagytinn] has joined #shogun06:14
-!- abn__ [av3ngr@nat/redhat/x-mfgmdhkqdftcoqnz] has joined #shogun06:49
-!- abn_ [av3ngr@nat/redhat/x-aqwycomoiagytinn] has quit [Ping timeout: 244 seconds]06:52
-!- abn__ [av3ngr@nat/redhat/x-mfgmdhkqdftcoqnz] has quit [Read error: Connection reset by peer]07:04
-!- av3ngr [av3ngr@nat/redhat/x-nknzddjwccloowmq] has joined #shogun07:05
-!- abn_ [av3ngr@nat/redhat/x-fnazpdaeawkebpne] has joined #shogun07:10
-!- av3ngr [av3ngr@nat/redhat/x-nknzddjwccloowmq] has quit [Ping timeout: 265 seconds]07:14
-!- abn_ [av3ngr@nat/redhat/x-fnazpdaeawkebpne] has quit [Read error: Connection reset by peer]07:22
-!- av3ngr [av3ngr@nat/redhat/x-hswmmepzjupurfpz] has joined #shogun07:23
-!- av3ngr [av3ngr@nat/redhat/x-hswmmepzjupurfpz] has quit [Read error: Connection reset by peer]07:40
-!- av3ngr [av3ngr@nat/redhat/x-pkxftaaonwjygnkl] has joined #shogun07:40
-!- av3ngr [av3ngr@nat/redhat/x-pkxftaaonwjygnkl] has quit [Read error: Connection reset by peer]07:58
-!- abn_ [av3ngr@nat/redhat/x-kcuzawowlelshpos] has joined #shogun07:59
-!- cronor [] has quit [Quit: cronor]08:18
-!- cronor [] has joined #shogun08:19
-!- n4nd0 [] has joined #shogun08:28
@sonney2kn4nd0, how about the solution you and blackburn suggested?08:30
@sonney2kI mean use apply_binary() and it will return BinaryLabels08:30
@sonney2kapply_multiclass() -> MulticlassLabels etc08:30
n4nd0the one we referred to as to use interfaces?08:31
@sonney2kand then in addition to enable people to use CMethod::apply()08:31
@sonney2ka way to convert CLabels -> anything08:31
@sonney2kif possible :)08:31
@sonney2kso adding additional constructors CMulticlassLabels(CLabels* lab)08:32
@sonney2kI am fine with that08:32
n4nd0that's like providing all the strategies we talked about except from templates :D08:32
@sonney2kyou mean each machine gets a template label parameter?08:33
n4nd0to make CLabels templated08:33
@sonney2kthat won't help08:33
n4nd0yeah, CMachine should then be templated too08:33
n4nd0I do not like that much this though08:33
@sonney2kactually it is sufficient if CMachine is templated08:33
@sonney2kL* labels;08:33
n4nd0sonney2k: have you seen the google docs where we wrote some of this things?08:34
n4nd0these* things08:34
@sonney2knot yet08:34
n4nd0but you have access to it, right?08:34
-!- pluskid [] has joined #shogun08:35
pluskidhi sonney2k08:35
@sonney2kn4nd0, I got the mail but my mail prg is refusing access08:36
@sonney2kpluskid, there are a couple of issues we need to discuss about wrt the new label system08:36
pluskidI just got the email08:36
@sonney2kpluskid, biggest problem is that some machines return binary labels *or* reallabels08:36
pluskidfor example?08:36
@sonney2klike kernel machines08:36
@sonney2kso plan would be to use CMachine::apply() whcih always returns CLabels08:37
@sonney2kand then inside the machines have a function like apply_binary() etc08:37
@sonney2kreturning the wanted label08:37
@sonney2kand if there is just one alternative return it in apply()08:37
@sonney2kbased on label type one can then determine whats going on08:37
@sonney2kI have to leave train08:38
pluskidso apply_binary, apply_mc, apply_SO?08:38
@sonney2kn4nd0, I please get pluskid up to date08:38
@sonney2kwill be back in 10-15 mins08:38
pluskidn4nd0: so what's the conclusion so far?08:38
n4nd0pluskid: I'll send you a link to a google doc where we wrote some of our thoughts08:38
pluskidthe doc blackburn shared?08:39
n4nd0already got it?08:39
n4nd0I just sent you an invitation in any case08:39
pluskidAh, got it08:40
pluskidbut those are all questions08:40
pluskidnot solutions08:40
n4nd0possible solutions are 1, 2 and 308:40
n4nd0I told you it was a doc with some thoughts in any case ;)08:41
pluskid1 will be killed by sonney2k08:41
n4nd0that one is there just because it could be possible08:41
n4nd0but imho to make CMachine templated is not a good idea08:42
n4nd0so I would discard it as well08:42
n4nd0I think that he is suggesting to provide both 2 and 308:42
n4nd0just change "possible solutions" if you don't like that ;)08:43
n4nd0yeah, I think so08:43
n4nd0check what he said at 8:3008:43
n4nd0I don't know yet why both08:43
pluskiddowncasting seems to be not very friendly to SWIG08:44
n4nd0I think the link is a way to do it08:44
pluskidi like 3 personly08:44
pluskidyes, but that's tedious08:44
pluskidhave to write a func for every possible casting08:44
n4nd0do you think so?08:44
n4nd0it is just one for each Labels hierarchy leaf08:45
n4nd0shouldn't be that many08:45
n4nd0Binary, Multiclass, Regression (or Real) and SO08:45
pluskidyou are right08:45
-!- sonne|work [~sonnenbu@] has joined #shogun08:52
sonne|workpluskid, n4nd0 so any thoughts?08:53
-!- uricamic [~uricamic@2001:718:2:1634:28fe:5862:cc8e:2234] has joined #shogun08:53
n4nd0sonney2k: why do we need both things? castings from Labels to any other thing *and* the interfaces?08:54
n4nd0wouldn't one of them suffice?08:54
sonne|workn4nd0: which interfaces?08:54
sonne|workyou mean the apply_binary?08:55
n4nd0the approach 3 in the document08:55
pluskidsonne|work: so you put apply_binary in CMachine or CBinaryMachine?08:55
sonne|workpluskid: in kernel machine08:55
n4nd0pluskid: I think that would be in CBinary08:55
sonne|workI wouldn't introduce any CBinary or so08:55
n4nd0oh yeah, in kernel and linear machine probably08:56
sonne|workn4nd0: I just managed to open the document08:56
sonne|work1) isn't going to help as with the problem we are having08:56
pluskidsonne|work: so KernelMachine can return both CRealLabel and CBinaryLabel?08:56
sonne|workso 2) and 3) or apply_binary() etc are the only option08:57
sonne|workpluskid: yes08:57
pluskidwhy not make use of confidence in BinaryLabels ?08:57
pluskidI mean RealLabel is equivalent to BinaryLabels with confidence value08:57
sonne|workpluskid: no08:58
sonne|workreal labels might have confidences too08:58
sonne|workpluskid: think of GPs08:58
-!- n4nd0 [] has quit [Quit: Lost terminal]08:58
-!- n4nd0 [] has joined #shogun08:58
pluskidsonne|work: so KernelMachine can be used for both classification and regression?08:59
pluskidGP can return RealLabel with confidence09:00
pluskidKernelMachine can return BinaryLabel with confidence09:00
sonne|workpluskid: exactly09:00
sonne|workbut kernel machine could also return real label with confidence09:00
pluskidso there's no need for KernelMachine to be able to return *both* RealLabel and BinaryLabel09:01
pluskidGP is a subclass of Kernelmachine?09:01
sonne|workno but it could be09:01
sonne|workand there are other techniques like it...09:01
pluskidtoo bad that SWIG doesn't support interfaces09:02
pluskidI mean multiple inheritance with pure virtual superclass (like interface in Java)09:02
pluskidor else solution 3 looks good09:03
sonne|workwell the other solution09:03
sonne|workwould be to use templates in machines09:03
sonne|worklike L* labels09:03
sonne|workbut then again that doesn't help09:03
sonne|workin swig and friends we would need to do %template Machine<CBinaryLabels> BinaryMachine etc09:04
sonne|workactually 4) and 2) are more or less the same...09:06
pluskidsonne|work: though some machines can be used for both regression and classification09:06
pluskidor both binary or MC09:06
pluskidI think it's good to distinguish09:06
pluskidto create base class for binary, MC, regression and SO09:06
pluskidfor example09:07
pluskidliblinear can do many things09:07
pluskidbut we can wrap it as binary and mc09:07
pluskiddifferent wrappers makes it "different" machines09:07
pluskidthis might make things more clear09:07
sonne|workpluskid leaving aside the problem that then e.g. liblinear cannot be a linearmachine for both regression and classification, this would also mean apply() from CMachine is no longer useful09:09
-!- abn_ [av3ngr@nat/redhat/x-kcuzawowlelshpos] has quit [Read error: Connection reset by peer]09:09
-!- abn_ [av3ngr@nat/redhat/x-ofozcfboipspfgxn] has joined #shogun09:09
sonne|workexcept if we return CBinaryLabels casted as CLabels like now09:09
-!- uricamic [~uricamic@2001:718:2:1634:28fe:5862:cc8e:2234] has quit [Quit: Leaving.]09:09
pluskidif we make the hierarchy clear09:09
pluskidthen CMachine would have no apply09:09
-!- abn_ [av3ngr@nat/redhat/x-ofozcfboipspfgxn] has quit [Read error: Connection reset by peer]09:10
pluskidapply() is moved to subclasses09:10
pluskidCBinMachine, CMCMachine, CSOMachine, etc.09:10
pluskidCBinMachine's apply return CBinLabels09:10
pluskidCSOMachine's apply return CSOLabels09:10
pluskiddo you think this is a possible solution?09:10
-!- abn_ [av3ngr@nat/redhat/x-nxczvssnqswykuju] has joined #shogun09:10
sonne|workpluskid: yes except that we have code duplication because we also have KernelMachine etc09:11
-!- abn_ [av3ngr@nat/redhat/x-nxczvssnqswykuju] has quit [Read error: Connection reset by peer]09:11
pluskidyou are right09:11
n4nd0I don't like much the idea of removing apply() from the base class and have it in all the subclasses09:11
-!- abn_ [av3ngr@nat/redhat/x-kkqwvuqhxfnbucxt] has joined #shogun09:11
pluskidKernelMachine is in a different hierarchy09:11
sonne|workwell ok CBinKernelMachine etc gives also too much stuff09:12
sonne|workMachines I mean09:12
sonne|workn4nd0: yeah I would prefer to have apply() in the baseclass too09:12
sonne|workproblem then remains with casting09:12
-!- abn_ [av3ngr@nat/redhat/x-kkqwvuqhxfnbucxt] has quit [Read error: Connection reset by peer]09:12
-!- av3ngr [av3ngr@nat/redhat/x-whazgcqjivdomxue] has joined #shogun09:13
sonne|workI am not so worried about the casting stuff - what sucks though is that we need some extra treatment for the modular interfaces09:13
n4nd0sonne|work: why about the solution provided in the link in the google docs?09:13
sonne|workn4nd0: it is basically 4)09:13
n4nd0well, I think it is 2)09:14
sonne|workn4nd0: I would rather do a better one really for each machine doing something more clever09:14
n4nd0it is a way to provide this downcasting09:14
sonne|workas in no need to change python modular code at all09:14
sonne|workyou just get the right CBinaryLabel object even if CMachine only returns CLabels09:14
sonne|workthis can be done by %ignore CMachine::apply()09:15
sonne|workand adding a new apply() function in swig that returns the right type for each machine09:15
sonne|workbut the problem remains - linear machines can return both binary and regression labels09:16
sonne|worksome for kernel machines09:16
n4nd0I like that solution :)09:16
sonne|workso I don't have a solution for that other than doing 4) apply_binary() etc...09:16
sonne|workand lets say apply() per default returns the most powerful label descriptor like RealLabels in this case09:17
n4nd0could the same be applied but doing the %ignore in linear machine and kernel machine09:17
n4nd0and adding new apply in swig for every particular machine?09:17
sonne|workn4nd0: yes - the only issue we have is that one might want to serialize a machine09:18
sonne|workso when loading it you want to be able to call apply()09:18
sonne|workok fix would be to rename apply to apply_machine()09:18
sonne|workbut then one has to do the casting09:19
sonne|workor to serialize the real machine (LibLinearRegression) ...09:19
sonne|workn4nd0: actually no - that all should be ok. because one cannot cast down to CMachine from e.g. LibLinear anyways...09:22
sonne|workn4nd0: so I favor this approach. it will involve doing 4) as helper functions and some typemap magic in addition09:23
n4nd0sonne|work: but there is no need to make apply_binary and friends09:24
pluskidsonne|work: have a look at solution (5)?09:25
sonne|workn4nd0: the typemaps would need to call them09:25
sonne|workn4nd0: so better have that in the class09:25
sonne|workpluskid: looking09:25
n4nd0sonne|work: ok, I understand09:26
sonne|workpluskid: yes - I think we can avoid code duplication there by just having an independent CKernelMachine class that can be utilized09:26
-!- uricamic [~uricamic@2001:718:2:1634:2030:5375:f044:5459] has joined #shogun09:26
sonne|workI prefer 4) with typemap changes though09:26
pluskidyes, kind of that09:26
sonne|worklet me write it09:26
pluskidbut (5) can avoid that SWIG magic09:28
sonne|workhmmhh, so how do we come to a decision? I guess we should wait for blackburn09:28
sonne|workpluskid: yes09:28
sonne|workbut it sacrifices the apply() interface09:29
pluskidthere's no need for a generic apply() if we make the hierarchy clear09:29
pluskidisn't it?09:29
sonne|workpluskid: I think it is the same concept that we use for CMachine::apply(CFeatures* data)09:30
sonne|workwe have general CFeatures* there09:30
n4nd0sonne|work: got a doubt here, let's say we have KNN09:30
sonne|workand only later check for the correct type09:30
n4nd0sonne|work: it will have two methods, apply() and apply_multiclass(), right?09:30
pluskidI think they are different09:31
pluskida generic apply() returning a generic CLabel is not very useful09:31
sonne|workpluskid: so we don't have CRealMachines or so09:31
n4nd0sonne|work: are both methods supposed to be implemented?09:31
sonne|workpluskid: well one always has to cast to the correct type09:31
pluskidyes, if one has to do casting, then one knows what he is doing09:31
n4nd0sonne|work: or apply() will contain most of the stuff and apply_multiclass just() calls and cast the return type from CLabels* to CMulticlassLabels*09:31
sonne|workn4nd0: I would implement apply_multiclass() and let apply() { return apply_multiclass(); }09:32
pluskidif one know what he is doing, he should know what kind of machine he is using09:32
pluskidinstead of a generic CMachine09:32
sonne|workpluskid: but why is this different wrt CFeatures? you know which feature type you want to use so you should use a machine that supports it09:32
pluskidthere are machines that supports different kind of features09:33
pluskidbut each machine supports only one kind of label09:33
pluskid(if we make the hierarchy clear as in (5))09:33
sonne|workpluskid: well one could say the same about machines & features. we would have RealKernels working only on realfeatures etc09:35
sonne|workso then they would only support one type of features09:35
pluskidbut there are too many features, but only several kind of labels09:36
pluskida kind of trade-off here09:36
pluskidanyway, maybe we should have blackburn in the discussion, too09:36
sonne|workpluskid: yes it is a trade-off... I am favoring the other solution simply because we already treat features differently and I think it is more consistent now with CLabels to do the same09:37
sonne|workof course the other solution is to just use the 'new' label system as is09:39
sonne|workthat is just real valued outputs09:39
sonne|workis what machines return in general09:39
sonne|workbut CMachine::apply() still returns CLabels*09:39
sonne|workpluskid: I like it more the way you suggested with having binary machines return binary stuff though ...09:40
pluskidreal valued output isn't suitable for SO I guess09:40
pluskidyes, Binary and Regression is not that different09:40
pluskidthey can be combined09:40
sonne|workpluskid: SOmachines will return SOLabels of course... that all works with the CLabels* CMachine::apply() interface09:43
sonne|workpluskid: could you live with 4) btw?09:43
sonne|workwiking: any opinion?09:44
pluskidyes, of course :D09:44
pluskidI have no problem with (4), though I prefer (5) :p09:44
sonne|workyeah I know09:44
sonne|workpluskid: the other issue with 5) is that it is a lot of work09:45
pluskidthat's true09:45
sonne|worka lot more than 4)09:45
sonne|workand I think 4) is already quite a bit09:45
sonne|workwell ok mostly in typemaps09:46
pluskidso fast!09:46
sonne|worknot so much in machines/labels - only base machines and labels have to be touched09:46
sonne|workpluskid: heh09:46
pluskidsonne|work: you win :D09:46
sonne|workn4nd0: you still ok with 4)?09:46
n4nd0sonne|work: sure09:47
sonne|workI hope blackburn can live with it too09:47
sonne|workwe really need to get back into a stable state09:47
n4nd0the only problem I see with it is that apart from you I don't know who can take care of it since it requires dealing with SWIG09:48
sonne|workand a decision is the first thing we need... rest is easy09:48
sonne|workn4nd0: I can easily do an example09:48
sonne|workthen the rest will be obvious and you all can help09:48
n4nd0all right09:48
sonne|workthe changes to labels/machines can be done rather quickly09:49
n4nd0sonne|work: another topic, is it possible to use mosek from shogun?09:49
sonne|workn4nd0: we have no wrapper for mosek09:49
sonne|workn4nd0: so you are on your own09:49
n4nd0sonne|work: it turned out that we cannot use libqp for our problem :(09:49
n4nd0SO, I mean09:50
sonne|workthat is not good09:50
sonne|workwe have to discuss with uricamic & vojtech09:50
sonne|workn4nd0: we cannot use mosek by default09:50
sonne|workwe need something open source...09:50
n4nd0no way to use mosek as a first instance?09:51
sonne|workn4nd0: would you mind doing a pull request for the labels - I mean for casting things?09:51
sonne|workn4nd0: no one can use it except you then09:52
n4nd0sonne|work: because of the license file?09:52
sonne|worknot the build bot nor me ...09:52
sonne|workn4nd0: what do you need btw that you cannot use any of libqp?09:52
n4nd0check this09:53
n4nd0we need to solve something similar to the second problem09:53
n4nd0QP task with box constraints and a single linear equality constraint.09:53
n4nd0but our problem needs to handle inequalities like A?w <= b09:53
n4nd0or better A?x <= b using the notation there for the optimization vector09:54
sonne|workn4nd0: that is a general optimizer you need there - IIRC there is no open source one for that09:55
sonne|workis there no way around it?09:55
n4nd0I asked nico about it, he knows I asked him to use something open source09:56
n4nd0but he suggested mosek09:56
n4nd0so I guess there's nothing to do09:56
n4nd0no workaround either :S09:57
sonne|workuricamic: do you need sth as complex as n4nd0?09:57
uricamichi there09:57
sonne|workn4nd0:  uricamic is creating some fast solver for SO problems09:57
sonne|workso he will know if he needs a Ax <=b constraint09:57
uricamicsonne|work: in my case the libqp is completely ok09:57
sonne|workuricamic: how come you don't have these constraints?09:58
sonne|workuricamic: btw is vojtech back?09:58
uricamicHe should be at work today, but has not arrived yet09:58
sonne|workuricamic: ok maybe you ask him or tell us how you can do without Ax<=b :)09:59
uricamicI think for the BMRM we are using, it is sufficient to use the liqp_splx solver09:59
sonne|workuricamic: do you have the SO formulation you are solving somewhere on paper?10:00
sonne|workand could mail it around to all the SO guys?10:00
n4nd0I think that using the dual formulation one doesn't encounter that constraints10:00
uricamicdo you mean the original BMRM, or the version with our "improvements"10:01
sonne|workuricamic: look at the mails nico sent around - the first one had a .pdf with the problem they are trying to solve10:04
sonne|workso it is the original one IMHO10:04
sonne|workn4nd0: could you deal with labels now?10:11
n4nd0sonne|work: do you want me to include this apply_binary and friends methods?10:11
sonne|workn4nd0: no just the CMulticlassLabels(CLabels* label) stuff10:12
-!- karlnapf [] has joined #shogun10:25
-!- vikram360 [~vikram360@] has quit [Ping timeout: 245 seconds]10:26
-!- vikram360 [~vikram360@] has joined #shogun10:27
-!- eric_ [2e1fd566@gateway/web/freenode/ip.] has joined #shogun10:30
eric_hi all10:32
-!- av3ngr [av3ngr@nat/redhat/x-whazgcqjivdomxue] has quit [Quit: That's all folks!]10:32
-!- cronor [] has quit [Quit: cronor]10:35
n4nd0sonne|work: can you take a look to the new PR a moment and tell me if that is what you wanted?10:38
n4nd0how can we stop with an error if the cast is not valid?10:39
sonne|workn4nd0: could you please check the label type?10:39
sonne|workbase_labels->get_label_type() == LT_MULTICLASS10:39
n4nd0all right10:39
sonne|workahh and btw isn't this an upcast :D10:39
sonne|workYMMV as usual :)10:40
n4nd0we have a CLabels and get a CMulticlassLabels10:40
n4nd0I understand that as downcast10:40
n4nd0how do you see it?10:40
sonne|workthe other way round10:40
sonne|workI guess my trees grow the other direction10:41
sonne|workn4nd0: what is CLabels* const base_labels for?10:41
sonne|workthe const?10:41
n4nd0just to denote we do not point to another thing inside10:42
n4nd0that we won't do base_labels = ...10:42
n4nd0does it make sense?10:42
sonne|workyou mean base_labels.something=somethign?10:42
n4nd0mmm no10:44
n4nd0that the pointer is constant10:44
-!- wiking_ [] has joined #shogun10:44
-!- wiking_ [] has quit [Changing host]10:44
-!- wiking_ [~wiking@huwico/staff/wiking] has joined #shogun10:44
sonne|workn4nd0: but then it doesn't help or? I mean base_labels=NULL won't change a thing10:44
-!- wiking [~wiking@huwico/staff/wiking] has quit [Ping timeout: 265 seconds]10:45
-!- wiking_ is now known as wiking10:45
n4nd0sonne|work: I use just to make clear that base_class will point to the same thing after the call than before it10:46
n4nd0by the way I think I should assign the other members too10:46
n4nd0the confidences vector, the subset stack10:47
sonne|workn4nd0: but when you have foo(int i) you don't write const there right? because i=2 won't change outside anyway10:47
sonne|workok anyway what is a problem is that we would need to steal the original labels etc10:48
n4nd0sonne|work: yeah it is base_class->something = .... we are not allowed to do that with the const10:49
sonne|workn4nd0: maybe it is better to not have that as constructor but static helper function then10:49
n4nd0sonne|work: why?10:50
sonne|workso just CMulticlassLabels* obtain_from_generic(CLabel* label)10:50
sonne|workand then return the cast' object10:50
sonne|workn4nd0: in constructor we cannot change the type of base_labels but have to copy all fields, like m_labels, m_confidences, ...10:51
-!- pluskid [] has quit [Quit: Leaving]10:52
n4nd0so just that with (CMulticlassLabels*) base_labels10:53
sonne|workyeah plus the label type check and an appropriate SG_ERROR msg10:54
-!- cronor [] has joined #shogun11:02
eric_What's the purpose of a MulticlassLbels class ?11:03
sonne|workeric_: when we designed shogun we just used double* as in /output labels11:04
sonne|workbut that is not really nice/clean way11:04
sonne|workfor example binarylabels should only have +/-111:04
sonne|workand machines having them as input should output +/-111:05
n4nd0wow I just got my package!11:06
sonne|worksame with multiclass 0...<nr classes>11:06
sonne|workso a binary classifier will return a binary label object11:06
sonne|workand we have outputs +/- 111:07
sonne|workin internally confidences (the real valued outputs) from before11:07
eric_okay thx11:07
eric_sonne|work: I would like to point out smthg strange with multiclass Xvalid, I didnt find the problem but some multiclass machine give wrong Xvalid results11:08
sonne|workkarlnapf: btw any thoughts about the new label stuff?11:09
eric_sonne|work: seems that only CMulticlassLibLinear works with that11:09
karlnapfsonne|work, hi, just looking into it11:09
karlnapfor could you give a brief overview?11:09
eric_sonne|work: CGMNPSVM or CMulticlassLibSVMgive wrong results. I said wrong coz I ve been testing splitting manually several times ..11:10
sonne|workkarlnapf: not yet ready though - there is one big change still missing11:11
sonne|workkarlnapf: in principle we drop the old label class11:11
sonne|workbefore we assumed all labels == doubles11:11
karlnapfand now instead?11:12
sonne|worknow we introduce CBinaryLabels, CMulticlassLabels, CRealLabels etc11:12
sonne|workand binary labels are just +1/-111:12
sonne|workbut all of them have confidences11:12
karlnapfah thats nice11:12
sonne|workwhich for SVM would be the real valued outputs11:12
sonne|workso a svm would return binary labels11:13
sonne|workand one can access the actual predictions11:13
sonne|workwith +1/-111:13
karlnapfwe can finally have the john plat sigmoid stuff :)11:13
sonne|workor the confidences for computing roc11:13
sonne|workthat's about it11:13
karlnapfwhat about multiclass?11:13
sonne|workconfidence will be max f(x) in OvR11:14
sonne|workfor others not clear11:14
sonne|workkarlnapf: there are tons of implementation issues though11:14
karlnapfWill there be a way to get normed probabilities for multiclass?11:14
sonne|workbiggest concern is that if we want apply() to still return labels11:14
karlnapfBecause this currently has to be done in an extra class11:14
sonne|workwe need to cast11:14
-!- blackburn [~blackburn@] has joined #shogun11:15
karlnapfSo if I call apply I get just Labels11:15
karlnapfbut I know that these are binary labels so I would have to cast?11:15
sonne|workkarlnapf: one can add those...11:15
sonne|workkarlnapf: yes11:15
sonne|workblackburn: morning. hope you didn't have nightmares11:15
karlnapfhi blackburn11:16
n4nd0blackburn: did you beat the insomnia?11:16
sonne|workkarlnapf: you can check the actual type via labels->get_label_type() == LT_BINARY etc11:16
karlnapfah ok11:16
eric_So if I undestand well: any calls to apply() with return a CLabel (base class for all derived labels ?)11:16
karlnapfmmmh, perhaps some way to do this automatically?11:16
sonne|workand we think about adding apply_binary() to return the actual CBinaryLabel type11:16
sonne|workkarlnapf: not really. only way is to drop the apply() method from CMachine11:17
sonne|workblackburn: could you live with option 4) ?11:17
karlnapfwhat about adding a method to the labels which casts itself (if possible, if not throws error), that would be dirty but might work11:18
sonne|workkarlnapf: for binary labels we could add a estimate sigmoidal for the confidences11:18
n4nd0sonne|work: PR updated, I think that is the idea11:18
karlnapfor so11:18
sonne|workor histogram based11:18
eric_if you add a apply_binary(), why not adding apply_multiclass() so ?11:18
sonne|workyeah nice11:18
sonne|workeric_: yes11:18
sonne|workeric_: we will do too11:18
sonne|workkarlnapf: that is what we will add yes11:19
blackburnhehe sorry welcome package arrived11:19
karlnapfwhy do we need an apply_binary then?11:19
eric_sonne|work: seems strange coz when apply is called, you know what type of CLabels is in argument no ?11:19
blackburnsonne|work: what is 4) option?11:19
sonne|work4) Introduce apply_binary(), apply_multiclass(), apply_regressor() to respective machines needing it. In addition we could have constructors in respective labels e.g. CBinaryLabels(CLabels* labels). In addition, one uses typemaps to %rename apply methods of CMachine etc and creates an apply method for each machine realization like LibLinear, LiblinearRegression returning the correct type always.11:19
sonne|workscratch constructors11:19
sonne|workconverters like in n4nd0's pull requrest11:20
blackburnit is very similar to just add apply in appropriate machines11:21
sonne|workblackburn: yes - but from the C++ side we still have the CMachine::apply() interface11:21
blackburndo we really need it?11:22
sonne|workit is like having train() IMHO11:23
sonne|workthe essence of a machine11:23
sonne|workbeing able to train() and apply()11:23
blackburn%rename is confusing then11:23
sonne|workI don't think so:11:24
sonne|workwe only need this for languages that don't support types11:24
sonne|workand type casts11:24
sonne|workso for such $LANG it is still the same principle11:24
sonne|workyou call apply() on a machine and get the correct label type11:25
sonne|workall others cast as necessary11:25
n4nd0I actually like this strategy quite a lot :)11:28
n4nd0blackburn: but I know you were not much in favour of casting :S11:29
sonne|workn4nd0: btw when you do fixes to a pull request. please use git commit --amend11:29
sonne|workso we only have one changelog entry11:29
n4nd0oh sorry, a bit too late for this one11:29
sonne|workn4nd0: sure just for the future11:30
sonne|workyou might need to force push though11:30
n4nd0no problem with amend for commits that have already been pushed?11:30
n4nd0I thought that was not recommended to do11:30
sonne|workyeah that is not possible except you overwrite the thing with force push11:31
blackburnhahah I ca imagine change log of 2.011:31
blackburnDear all, everything is changed11:31
sonne|workn4nd0: btw you need to return NULL to suppress the compiler warnings11:32
sonne|workblackburn: so can you live with that or not?11:32
blackburnsonne|work: yes I can11:33
sonne|workyes we can!11:33
sonne|workso then not too much changes are required...11:33
sonne|workwe need n4nd0's patch11:33
sonne|workthen each machine should have a apply_binary() or so method11:34
sonne|workand apply() { return apply_binary(); } etc11:34
sonne|workI will add typemaps in the evening and we are back to normal11:34
blackburnsonne|work: rather apply(CFeatures* data=NULL)11:35
sonne|workor that11:35
blackburnno more apply()11:35
sonne|workblackburn: can you do these changes?11:35
blackburnI removed all of them I think11:35
sonne|workthe apply_binary11:35
sonne|workblackburn: btw I think we can then even rename CRealLabels to CRegressionLabels11:36
sonne|workbecause everything is in confidences then11:36
n4nd0sonne|work: it should be ok by now11:41
CIA-113shogun: iglesias master * r89a638e / (2 files): + helper function to obtain MulticlassLabels from Labels, - previous constructor -
CIA-113shogun: iglesias master * r5f02a4a / (2 files): + constructor from base class in multiclass labels -
CIA-113shogun: iglesias master * r4562bc0 / (6 files): + obtain from generic Labels in sub-label classes -
n4nd0though the warnings didn't pop up here before11:41
CIA-113shogun: Soeren Sonnenburg master * r6630435 / (6 files): Merge pull request #537 from iglesias/fix-labels -
n4nd0I included the last changes using amend :D11:41
sonne|workn4nd0: so did you need to force push?11:42
blackburninstead of force push you also can git push :branchname and git push branchname11:43
n4nd0I think it does something similar internally11:45
sonne|workblackburn: ok so if you can please try to do the changes to all the machines... I will do typemaps this evening but now I have to eat/work for real :D11:45
blackburnok I'll have to go in a hour I hope to get it changed11:46
n4nd0sonne|work: about the optimization problem, I understand by the mails that we skip that constraints for the moment and go with libqp right?11:46
-!- n4nd0 [] has quit [Quit: leaving]11:47
-!- n4nd0 [] has joined #shogun11:48
n4nd0blackburn, have you got your packet today?11:50
blackburnn4nd0: yes just 20 mins before11:50
blackburnn4nd0: didn't you?11:52
blackburnn4nd0: but what about apply(idx)?11:53
blackburnany conclusion?11:53
n4nd0blackburn, apply(idx) is oficially dead according to the google docs11:53
blackburnoh I should check11:53
n4nd0blackburn, yeah, I got the package this morning too11:54
-!- vikram360 [~vikram360@] has quit [Ping timeout: 246 seconds]11:56
n4nd0apply(idx) is still alive in the code though11:56
blackburnhmm I will remove it then11:56
blackburnkarlnapf: hey what about apply_locked?11:59
karlnapfblackburn, sorry?12:00
karlnapfabout the labels in apply_locked?12:00
blackburnkarlnapf: apply -> apply_binary, apply_regression, ..12:00
blackburnwhat about apply_locked then12:00
karlnapfI think thats straightforward12:00
karlnapfjust like in apply12:00
blackburnoh my gosh12:00
blackburnI hate adding new code :D12:01
karlnapfnot too nice all these new methods :)12:01
blackburnnot really I even like it in some way12:03
blackburnyou can use your trained svm for regression12:03
karlnapflol :)12:06
sonne|workblackburn, karlnapf: how about adding a boolean to apply then?12:49
sonne|workI mean that would then say locked=true?12:49
karlnapf locked/non-locked?12:49
sonne|workn4nd0: I discussed with nico on th ephone12:49
karlnapfwhat about even making this automatic?12:49
karlnapfthe signature is different12:50
sonne|workn4nd0: so as reference you can implement sth based on mosek #ifdef HAVE_MOSEK though12:50
karlnapfapply_locked has indices paramteers12:50
n4nd0sonne|work, all right, thank you12:51
sonne|workkarlnapf: well if you just pass empty indices it would work or?12:51
karlnapfbut apply then needs to have indices as parameter doesnt it?12:51
blackburnsonne|work: are you ok removing apply(idx)?12:51
sonne|workblackburn: from CMachine yes12:53
sonne|workiirc I commented it already12:53
sonne|workso it is RIP already12:53
sonne|workbut other machines can still use it12:53
blackburnyou remember it wrong12:53
* sonne|work checks12:53
blackburnyou commented get_label12:54
sonne|worksame thing12:54
sonne|workyes die die12:54
blackburnI am confused12:54
sonne|workblackburn: btw some commit must have increased shogun repository size quite a bit12:54
blackburnI removed apply from linear machine already12:54
sonne|workI suspect that someone added a dataset to shogun12:55
blackburnsonne|work: yes, that commit of gunnar's student12:55
sonne|workand then removed it12:55
blackburnyes I removed12:55
sonne|workwe cannot remove it from git now12:55
blackburnI realized it is bad later :(12:55
sonne|workwe have serious trouble on buildbots due to it12:55
blackburnbad bad12:56
blackburnsonne|work: so it is something like +100 mb  now?12:57
sonne|workand everyone cloning shogun will not just get a few MB like before but over hundred I guess12:57
blackburnyes was something like 13912:58
blackburnwe can't keep it12:58
sonne|workblackburn: we would have to rewrite all git history to get rid of it12:58
sonne|workinvalidating all checkouts watches etc12:59
sonne|workblackburn: do you remember the path of the file?13:00
sonne|workok good we will have to do that after labels are good13:00
blackburn.git is 150M13:05
blackburnsonne|work: it seems filter-branch can save us13:06
sonne|workblackburn: later13:07
sonne|worknow labels :)13:07
-!- karlnapf [] has quit [Quit: Leaving.]13:24
sonne|workblackburn: could we do apply(data=NULL, subset=SGVector<index_t>()) ?13:26
sonne|workinstead of having additional locked stuff?13:26
blackburnsonne|work: why not13:26
blackburnbad protocol though13:27
blackburnah no13:27
blackburnit is ok13:27
sonne|worklocked does sth else or?13:27
blackburnsomething like that I think13:27
blackburnok be back in 2 hrs13:31
n4nd0StructuredLabels adapted to the new labels hierarchy :D14:00
n4nd0there are probably missing things and so on but it is a good step I guess14:01
sonne|workn4nd0: yeah we should get going14:03
sonne|workbtw today is the first official gsoc day right?14:03
n4nd0I will be back later14:04
-!- wiking [~wiking@huwico/staff/wiking] has quit [Remote host closed the connection]14:05
-!- wiking [] has joined #shogun14:06
-!- wiking [] has quit [Changing host]14:06
-!- wiking [~wiking@huwico/staff/wiking] has joined #shogun14:06
-!- n4nd0 [] has quit [Ping timeout: 245 seconds]14:08
-!- wiking_ [~wiking@huwico/staff/wiking] has joined #shogun14:14
-!- vikram360 [~vikram360@] has joined #shogun14:15
-!- wiking [~wiking@huwico/staff/wiking] has quit [Ping timeout: 252 seconds]14:18
-!- wiking_ is now known as wiking14:18
-!- eric_ [2e1fd566@gateway/web/freenode/ip.] has quit [Quit: Page closed]14:25
-!- vikram360 [~vikram360@] has quit [Ping timeout: 260 seconds]14:34
-!- vikram360 [~vikram360@] has joined #shogun14:34
-!- eric___ [2e1fd566@gateway/web/freenode/ip.] has joined #shogun14:52
eric___hi again all14:52
eric___sonne|work: will you integrate a way to import/export samples features with their multiclasslabels ?15:18
eric___maybe there is smth that already exist ?15:18
sonne|workeric___: I don't know what you are saying15:18
eric___I look over all shogun examples and I don't find loading/saving example for Features and associated Labels15:20
sonne|workyou have to same them separately15:21
sonne|workor use libsvm format15:21
eric___I wrote my own export/import to/from xml files and fill the CLabel, Features manually15:21
-!- gsomix [~gsomix@] has joined #shogun15:49
gsomixhi all15:49
sonne|workhi gsomix15:50
sonne|workhow is it going?15:50
gsomixsonne|work, on the way of improving director kernel.15:51
sonne|workgsomix: err?15:52
sonne|workI thought the plan was to do it in isolated steps?15:52
sonne|workthere is no way you can get director kernel to work directly I would say15:53
gsomixsonne|work, hm, ok.15:53
gsomixI did 1-6 steps.15:54
gsomixIt works fine.15:54
gsomixsonne|work, what to do next?15:55
sonne|workgsomix: show me the code :) I'd like to play with it too :)15:56
gsomixthere is one note. swig don't wrap protected methods/attributes without setting "allprotected" property.16:01
sonne|workI see so you cannot call/set things16:01
sonne|workgsomix: try the simplest possible class in shogun for that16:06
sonne|workgsomix: maybe CSet is a good starting point16:08
sonne|workor DynamicArray16:09
gsomixsonne|work, ok.16:10
sonne|workgsomix: when that works try CList16:10
sonne|workand then kernel :)16:10
* gsomix needs to take a shower16:11
gsomixsonne|work, google sent a cool notepad.16:12
gsomixit's happy day16:12
sonne|workjust in time :)16:13
-!- gsomix [~gsomix@] has quit [Quit: Ex-Chat]16:14
sonne|workhmmhh, mentors don't get any such toys16:26
-!- gsomix [~gsomix@] has joined #shogun17:02
-!- gsomix [~gsomix@] has quit [Remote host closed the connection]17:09
@sonney2k../../shogun/lib/DynamicArray.h:188: Warning 509: Overloaded method shogun::CDynamicArray< float64_t >::CDynamicArray(double const *,int32_t) effectively ignored,17:10
@sonney2k../../shogun/lib/DynamicArray.h:102: Warning 509: as it is shadowed by shogun::CDynamicArray< float64_t >::CDynamicArray(double *,int32_t).17:10
@sonney2kahh you escaped17:10
-!- n4nd0 [] has joined #shogun17:10
-!- gsomix [~gsomix@] has joined #shogun17:11
-!- wiking [~wiking@huwico/staff/wiking] has quit [Quit: wiking]17:11
-!- n4nd0 [] has quit [Client Quit]17:12
-!- wiking [~wiking@huwico/staff/wiking] has joined #shogun17:25
-!- wiking [~wiking@huwico/staff/wiking] has quit [Remote host closed the connection]17:28
-!- wiking [] has joined #shogun17:29
-!- wiking [] has quit [Changing host]17:29
-!- wiking [~wiking@huwico/staff/wiking] has joined #shogun17:29
-!- uricamic [~uricamic@2001:718:2:1634:2030:5375:f044:5459] has quit [Quit: Leaving.]17:34
-!- eric___ [2e1fd566@gateway/web/freenode/ip.] has quit [Quit: Page closed]17:55
blackburnsh took more time18:13
-!- wiking_ [] has joined #shogun18:31
-!- wiking_ [] has quit [Changing host]18:31
-!- wiking_ [~wiking@huwico/staff/wiking] has joined #shogun18:31
-!- wiking [~wiking@huwico/staff/wiking] has quit [Ping timeout: 252 seconds]18:35
-!- wiking_ is now known as wiking18:35
-!- karlnapf [] has joined #shogun18:51
@sonney2kblackburn, if you have something partial to commit please do19:03
blackburnsonney2k: yes both kernel and linear machine are ready but distance machine to finish19:03
blackburnsonney2k: I can but will be uncompileable19:04
@sonney2kblackburn, why?19:04
@sonney2kgsomix, <sonney2k> ../../shogun/lib/DynamicArray.h:188: Warning 509: Overloaded method shogun::CDynamicArray< float64_t >::CDynamicArray(double const *,int32_t) effectively ignored,19:04
@sonney2k<sonney2k> ../../shogun/lib/DynamicArray.h:102: Warning 509: as it is shadowed by shogun::CDynamicArray< float64_t >::CDynamicArray(double *,int32_t).19:04
blackburnsonney2k: because distance machine is not finished yet19:04
@sonney2kwell you could commit kernel / linear machine only and push19:04
@sonney2kthen it would compile or?19:05
@sonney2kanyway go on19:05
-!- cronor [] has quit [Read error: Connection reset by peer]19:05
blackburnsonney2k: no - I changed machine drastically19:05
@sonney2kblackburn, uh?19:05
@sonney2kblackburn, btw which apply functions do we have now19:05
-!- cronor [] has joined #shogun19:05
@sonney2kapply(CFeatures*) ?19:05
@sonney2kanything else?19:05
blackburnsonney2k: apply(CFeatures* data=NULL) in machine19:05
blackburncalls apply_binary19:05
blackburnand apply_multiclass19:06
-!- cronor [] has quit [Client Quit]19:06
blackburndepends on problem set in machine19:06
@sonney2kblackburn, no I mean apply() functions19:06
@sonney2knot apply_* functions19:06
gsomixsonney2k, ah, ok. I will fix it.19:06
blackburnapply(idx) in all submachines like19:06
blackburnlinear and kernel19:06
@sonney2kblackburn, apply(idx) will go away right?19:06
@sonney2kin CMachine at least19:07
blackburnsonney2k: yes it can go but I did not remove it yet19:07
blackburnI removed it in machine already19:07
blackburnimplementations are based on apply(idx) so would need some refactoring19:07
@sonney2kblackburn, so I just rename the apply(CFeatures*) to apply_generic()19:07
blackburnhuh why?19:07
@sonney2kin typemaps19:07
blackburnsonney2k: let me finish distance machine19:08
@sonney2kbe fast19:08
blackburna few mins19:08
blackburndomain adaptation stuff19:14
blackburnnot my19:15
@sonney2kblackburn, the buildbot has now twice the diskspace19:16
blackburnsonney2k: do you think we can go for removing that commit from history?19:17
blackburnARGH SCATTER SVM19:19
@sonney2kblackburn, yes but after labels19:19
blackburnsonney2k: argh! CFeatures* data=NULL should have impl in .cpp19:21
blackburnok mostly done19:24
blackburnsonney2k: apply(idx) -> apply_one(idx)19:29
blackburnsonney2k: guess the reason to rename19:29
-!- gsomix [~gsomix@] has quit [Quit: Ex-Chat]19:30
blackburnsonney2k: here it goes19:35
CIA-113shogun: Sergey Lisitsyn master * rc3e643d / (19 files in 6 dirs): Refactoring of apply() methods -
-!- gsomix [~gsomix@] has joined #shogun19:41
CIA-113shogun: Soeren Sonnenburg master * r8f5bf6e / src/shogun/machine/MulticlassMachine.cpp : apply -> apply_one -
blackburnsonney2k: so what you wanted to commit?19:51
-!- karlnapf [] has quit [Ping timeout: 276 seconds]20:03
CIA-113shogun: Soeren Sonnenburg master * r39bb66e / (9 files in 3 dirs): do apply() renames in typemaps + misc fixes in labels -
@sonney2kblackburn, running out of battery.20:05
blackburnok I'll continue20:06
blackburnsonney2k: ehm why do you add apply in distance machine? it should be done via get_problem_type - I'll change20:07
@sonney2kblackburn, why did you add apply_binary, apply_multiclass, apply_regression everywhere?20:40
blackburnsonney2k: junk20:40
CIA-113shogun: Sergey Lisitsyn master * rb60ea37 / src/shogun/machine/DistanceMachine.h : Replaced apply with apply_one in distance machine -
blackburnsonney2k: before I did it pure virtual in machine20:40
CIA-113shogun: Sergey Lisitsyn master * r615e2bb / .gitignore : Updated gitignore -
@sonney2kblackburn, you forgot git pull --rebase ...20:42
blackburnI did not20:42
blackburnI did that20:42
@sonney2kblackburn, I meant why do we need apply_binary etc everywhere?20:42
blackburnsonney2k: where everywhere?20:42
@sonney2kI mean we could just use it for machines where it makes sense20:42
@sonney2kin all machines20:42
blackburnsonney2k: I am removing it20:43
@sonney2kI wouldn't even mention this in CMachine ...20:43
blackburnmention what?20:43
@sonney2kI would keep apply() in all machines20:43
blackburnhmm why?20:44
@sonney2kand return the most general label if there are multiple options20:44
@sonney2kblackburn, because one can just call apply() in every machine20:44
blackburnyes it inherited from CMachine20:44
@sonney2kand one gets the correct label type back20:44
@sonney2kbut why did you remove it from distance machine then?20:45
blackburnsonney2k: I forgot to set problem type as multicalss in distance machine20:45
blackburnthis way it will call multiclass apply20:45
@sonney2kahh so CMachine calls the apply_* stuff based on problem type?20:46
@sonney2kblackburn, btw while you are at it EClassifierType should probably be named EMachineType20:47
blackburnsonney2k: I think it should be a macros like20:47
CIA-113shogun: Soeren Sonnenburg master * rfd4e728 / (2 files): rename apply -> apply_one -
blackburnour commits were merged somehow20:49
@sonney2kI pushed this quite some time ago...20:50
blackburnsonney2k: no merge commit - I did rebase20:51
@sonney2kno idea20:53
@sonney2kblackburn, will you do the EClassifierType rename or shall I?20:54
blackburnsonney2k: already20:54
CIA-113shogun: Sergey Lisitsyn master * ra9363e1 / (56 files in 10 dirs): Renamed EClassifierType to EMachineType -
@sonney2kblackburn, I would change the SG_NOTIMPLEMENTED to some sg_error msg20:55
@sonney2kin Machine.cpp20:55
@sonney2kblackburn, don't you think we should do the rename CRealLabels -> CRegressionLabels now too?20:56
blackburnI'll do20:56
CIA-113shogun: Sergey Lisitsyn master * r6e7f947 / src/shogun/machine/MulticlassMachine.h : Removed junk methods from multiclass machine -
CIA-113shogun: Soeren Sonnenburg master * r60b2900 / examples/undocumented/python_modular/ : fix libsvm py example -
CIA-113shogun: Soeren Sonnenburg master * r8d2101e / src/shogun/machine/Machine.cpp : output some more reasonable error messages in CMachine::apply_* methods -
blackburnwe have a few wrong usages of regression labels20:59
@sonney2kblackburn, yes20:59
@sonney2kmany I suspect20:59
blackburnI'll fix20:59
@sonney2kblackburn, we also need to fix Evaluation ...20:59
@sonney2kblackburn, I am doing the typemap stuff21:00
blackburnsonney2k: I need to fix Machine.i21:06
@sonney2kblackburn, ?21:08
@sonney2kfix what?21:08
@sonney2kblackburn, ok do21:08
blackburnand add LinearMulticlassMachine21:08
@sonney2kblackburn, why is CGaussianNaiveBayes not deriving from MulticlassMachine?21:08
@sonney2kblackburn, just do21:08
blackburnsonney2k: should be derived21:08
@sonney2kblackburn, please do so too then21:09
@sonney2kblackburn, CQDA should derive from MC then too21:09
blackburnjust like conjugate shit21:09
@sonney2kblackburn, please push when you are done touching Machine.i21:12
@sonney2kI'd like to continue there21:12
blackburn30 sec21:12
CIA-113shogun: Sergey Lisitsyn master * rd91047e / (44 files in 12 dirs): Renamed RealLabels to RegressionLabels -
blackburnsonney2k: I want to add new class between GNB and MulticlassMachine21:18
blackburnto avoid adding stuff like prepare_machines, etc21:19
@sonney2kblackburn, what label type should a one class machine return?21:19
@sonney2kerr LibSvmOneclass21:19
blackburnbinary I think?21:19
blackburnare you ok with naming?21:20
@sonney2kblackburn, what is plainmulticlassmachine?21:20
@sonney2kI mean one that natively does MC?21:20
@sonney2kwell then True or NativeMulticlassMachine21:20
blackburnGNB, ConjugateIndex21:20
blackburnoh native ok21:20
-!- n4nd0 [] has joined #shogun21:21
@sonney2kI need a macro for doing that rename stuff21:26
@sonney2kway too many classes21:26
blackburnwhat do you rename?21:26
@sonney2kactually not the rename21:26
@sonney2kbut the %extend21:26
blackburnwait so you add it to every class?21:27
@sonney2kblackburn, adding type customized apply's yes21:27
@sonney2kall child classes...21:27
@sonney2kwiking, where do I have to put the -I include config for the vim plugins to find the shogun headers?21:30
wikingsonney2k: in root of shogun dir21:31
@sonney2kwiking, how exactly?21:31
blackburnExample .clang_complete file: > -DDEBUG -include ../config.h -I../common -I/usr/include/c++/4.5.3/ -I/usr/include/c++/4.5.3/x86_64-slackware-linux/21:31
wikingthis is the line in it: -I./src -I/opt/local/include/libxml221:31
wikingand then i open vim .21:31
@sonney2kwait so in shogun/src I create a .clang_complete file?21:32
wikingsonney2k: i've created in ./shogun21:33
wikingsonney2k: so i have ./shogun/.clang_complete21:33
blackburnsonney2k: depends where do you run your vim I think21:33
@sonney2kI see21:33
wikingblackburn: yep21:33
@sonney2kok works21:35
blackburnsonney2k: do not forget to put let g:clang_close_preview = 1 to .vimrc21:35
blackburnreally annoying to see that window above21:35
blackburnlet g:clang_auto_select=0 is useful too - makes first suggestion selected from the very beginning21:36
CIA-113shogun: Sergey Lisitsyn master * r54eef53 / (5 files in 3 dirs): Made GaussianNaiveBayes a multiclass machine -
@sonney2kblackburn, in vimrc ?21:37
blackburnsonney2k: yes21:39
@sonney2kblackburn, is it possible to use ctrl+space to trigger completion?21:39
blackburnsonney2k: yes default is Ctrl+X Ctrl+U21:40
blackburnlet me find21:40
blackburn 88   inoremap <expr> <buffer> <C-X><C-U> <SID>LaunchCompletion()21:41
blackburnsonney2k: try to change that21:41
@sonney2kwell I failed but lets continue for now21:44
-!- vikram360 [~vikram360@] has quit [Ping timeout: 246 seconds]21:44
blackburn 88   inoremap <expr> <buffer> <C-space> <SID>LaunchCompletion()21:46
blackburn 89   imap <C-@> <C-space>21:46
-!- ckwidmer [] has joined #shogun21:50
@sonney2kblackburn, seems like c-space is doing sth already here21:55
@sonney2kpasting marked text21:55
@sonney2kno idea how to undefine that21:56
blackburn 41 imap <Nul> <Space>21:56
blackburn 42 map <Nul> <Nop>21:56
blackburn 43 vmap <Nul> <Nop>21:56
blackburn 44 cmap <Nul> <Nop>21:56
blackburn 45 nmap <Nul> <Nop>21:56
blackburnsonney2k: ^ to .vimrc21:56
blackburnit seems I know everything :D lol21:56
@sonney2kwhat is that doing?21:56
blackburnsonney2k: undefining C+space21:56
@sonney2k5 lines jsut for that?21:57
blackburnsonney2k: different modes21:57
blackburninsert, visual, .. you know21:57
@sonney2kblackburn, bah still doesn't work22:00
@sonney2know c-space doesn't do anything22:00
blackburndid you add imap <C-@> <C-space> to clang_complete.vim?22:01
@sonney2kI don't have that line22:01
blackburn(11:46:47 PM) blackburn:  88   inoremap <expr> <buffer> <C-space> <SID>LaunchCompletion()22:01
blackburn(11:46:47 PM) blackburn:  89   imap <C-@> <C-space>22:01
blackburnit should look like that22:01
@sonney2kand now back to ...22:02
-!- cronor [] has joined #shogun22:03
@sonney2kblackburn, did you 'fix' GPs too?22:09
@sonney2kgaussianprocessregression that is22:09
blackburnsonney2k: why it needs a fix?22:11
@sonney2klet me do it22:15
blackburnI am moving QDA right now22:15
blackburnoh and we need to indicate problem types in each machine22:15
@sonney2kblackburn, ...and fix evaluations22:17
@sonney2kblackburn, what if a machine can handle two problem types?22:17
blackburnsonney2k: just call appropriate22:17
blackburnor apply_binary22:18
@sonney2kI mean when indicating problem type22:18
blackburnor.. do you hide it?22:18
blackburnwhat is the example of two problems?22:18
@sonney2kliblinear, libsvm ... I mean ok we can split them up to make things explicit22:18
blackburnsonney2k: problem type is something by default I think22:19
CIA-113shogun: Soeren Sonnenburg master * r7407407 / (11 files in 5 dirs): introduce macros to easy apply renaming -
@sonney2kblackburn, no I mean if liblinear (in one class) handles regression, classification, multiclass22:20
@sonney2kthen we cannot set problem type in constructor22:20
blackburnsonney2k: no way22:21
blackburnwe already have splitted that22:21
@sonney2kso we need to split it up22:21
blackburnmulticlass machines are totally different22:21
@sonney2kfixing typemaps seems quite easy with these macros22:21
@sonney2knot a lot of work now22:21
blackburnand even multiclass part of liblinear is not related at all22:21
@sonney2klet me get a few python examples to work22:21
@sonney2kblackburn, btw do libshogun examples work already?22:22
blackburnno I don't think they work at all22:22
@sonney2kblackburn, evaluation / model selection certainly not22:22
@sonney2kbut the rest?22:23
* sonney2k checks22:23
@sonney2kblackburn, indeed - but they are trivially fixed22:27
blackburnI am little stucked with qda right now22:28
CIA-113shogun: Sergey Lisitsyn master * re9382f3 / (8 files in 3 dirs): Rebased QDA -
n4nd0blackburn: speaking of which, I started to move it to multiclass this morning but faced some errors I didn't quite manage to solve22:36
blackburnn4nd0: already22:36
n4nd0blackburn: cool, thank you!22:36
blackburnhmm while you appeared22:36
n4nd0sorry I didn't get it done22:36
blackburnI would like to get you loaded :D22:36
n4nd0loaded of what man?22:36
blackburnheh yeah not the best wording22:37
blackburnlets say overloaded22:37
n4nd0tell me22:37
blackburnokay could you please add proper get_problem_type to *every* classifier? :D22:38
n4nd0what are the possibilities22:38
n4nd0some according to labels?22:38
n4nd0like multiclass, binary22:38
@sonney2kblackburn, MulticlassMachines have no apply_one?22:39
blackburnn4nd0: check CMachine22:39
n4nd0blackburn: ok22:39
blackburnsonney2k: hmm it has I think22:39
@sonney2kblackburn, please check - I am getting compile errros there22:44
blackburnsonney2k: works22:50
@sonney2kn4nd0, python examples also need some treatment22:52
blackburnoh n4nd0 sorry I need to clarify22:53
blackburnjust 5 mins22:53
@sonney2kshould be easy though22:53
n4nd0sonney2k: what about the swig functions we talked about?22:53
n4nd0are they ready or something done?22:53
@sonney2kn4nd0, they are all ready22:54
n4nd0the ones for ignore apply and apply_binary & co.22:54
@sonney2kmuch easier than expected22:54
blackburngsomix: ping22:54
@sonney2kgsomix is hiding all day22:55
@sonney2kerr afternoon-> evening22:55
n4nd0blackburn: tell me when you get time since I have already started including methods22:55
@sonney2kblackburn, could you please look at the libshogun classifier_multiclasslibsvm example?22:56
blackburnn4nd0: I think you'd rather should add a macros for that22:56
@sonney2kapply_one doesn' t exist there22:56
n4nd0blackburn: why?22:56
blackburnn4nd0: less code22:56
n4nd0isn't it more typical around here to use methods?22:56
n4nd0like get_name and the like22:57
blackburnn4nd0: yes macros hiding method22:57
-!- wiking [~wiking@huwico/staff/wiking] has quit [Quit: wiking]22:57
gsomixblackburn, wut?22:59
n4nd0blackburn: somethind like
blackburnn4nd0: exactly23:00
blackburnbut naming could be just MULTICLASS_MACHINE23:00
n4nd0I was thinking to do the macro with an argument23:00
n4nd0you prefer one macro for each?23:01
blackburnno preference at all - up to you23:01
blackburnparam macro is ok I think23:01
@sonney2kblackburn, had a look?23:01
blackburnargh sec23:01
blackburnsonney2k: what is the problem?23:02
blackburnline 50 apply(i)?23:02
-!- wiking [] has joined #shogun23:05
-!- wiking [] has quit [Changing host]23:05
-!- wiking [~wiking@huwico/staff/wiking] has joined #shogun23:05
blackburngsomix: what do you do?23:06
blackburnoptics is not the anwer23:06
gsomixblackburn, warnings. fixing swig warnings.23:07
CIA-113shogun: Soeren Sonnenburg master * r4830bda / (16 files): various fixes for libshogun examples -
CIA-113shogun: Soeren Sonnenburg master * rc54276b / (9 files): fix remaining libshogun examples for new label system -
@sonney2kblackburn, do we have apply_one there or what?23:08
gsomixblackburn, I'm reading some docs about renaming and ignoring.23:08
blackburnsonney2k: yes apply_one instead of apply I think23:08
@sonney2kblackburn, but we have apply_one there23:09
@sonney2kalready I mean23:09
@sonney2kit doesn't compile though becauce mc machine doesn't have it23:10
@sonney2kso please check23:10
@sonney2kmost of the exmaples work now but these and the evaluation based ones / train/apply_locked ones23:10
blackburnwho stole it?23:10
@sonney2kcertainly not me23:11
blackburnok let me get it back23:11
n4nd0blackburn: I have just seen an small PR23:13
n4nd0blackburn: check it and tell if you like it like that and I will continue to the other machines23:13
blackburnok a min23:13
CIA-113shogun: Soeren Sonnenburg master * r1a6ae98 / (3 files): rename apply(idx) -> apply_one(idx) -
CIA-113shogun: Soeren Sonnenburg master * r5f9d58b / (11 files): fix various python examples -
blackburnarght that conflicts with my commit23:17
@sonney2kurgs I have to sleep now or I will die tomorrow23:17
blackburnsee you23:17
blackburnokay and I am the olny one left :D23:17
blackburnw/ commit rights23:18
n4nd0sonney2k: good night23:19
blackburnn4nd0: sorry a little more23:21
n4nd0no problem23:21
blackburnn4nd0: yes continue with it please23:22
@sonney2kblackburn, btw why not have a get_problem_type() in CMachine23:22
blackburnsonney2k: ?? :D23:23
blackburnsonney2k: it is here23:23
blackburnreturns PT_BINARY23:23
@sonney2khave a EProblemType machine_type member variable23:23
@sonney2kand just set the variable in constructors23:23
@sonney2kor even better init()23:23
blackburnI think virtual method is better for that23:23
blackburnvariable is pretty redundant23:24
* sonney2k checks how we do it with Features23:24
blackburnsonney2k: member is always harder to maintain I think23:25
blackburnokay apply_one is here again23:25
CIA-113shogun: Sergey Lisitsyn master * re496dce / (2 files): Restored apply_one method of multiclass machine -
@sonney2kblackburn, yeah but please make it pure virtual - otherwise it is tough to debug why apply() is failing and if we missed a case23:26
@sonney2kor at least SG_ERROR23:27
blackburnwhat should be pure virtual?23:27
@sonney2kget_machine problem type returns PT_BINARY23:27
@sonney2kby default23:27
@sonney2kthat is not good23:27
blackburnyes should be pure virtual23:27
@sonney2kit is hard to detect23:27
n4nd0I will remove that right now23:27
@sonney2kSG_ERROR() or =023:27
blackburnbut I can't remove it before *ALL* machines23:27
blackburnare marked23:27
@sonney2kall multiclass examples still die23:29
blackburnsonney2k: I thought you went to bed :)23:30
n4nd0I am going to bed soon too, too tired today :S23:31
n4nd0blackburn: this can wait until tomorrow or?23:31
blackburnn4nd0: yes23:31
blackburnI think yes23:31
@sonney2kblackburn, you know I am like chuck norris: I can program while asleep23:32
blackburnhehe would be cool actually23:32
@sonney2kblackburn, examples fail because e.g. QDA has PT_BINARY23:32
blackburnhowever my dreams are usually about some crazy shit like cat becoming jelly23:33
blackburnso my code would be bad I think23:33
n4nd0jelly? why?!23:33
blackburnn4nd0: no idea I had one dream like that day before yesterday23:33
n4nd0:DD never heard that in my life23:33
@sonney2kblackburn, it is the shogun cat dissolving23:33
CIA-113shogun: Soeren Sonnenburg master * r8d4b65b / (4 files): fix a few MC examples -
@sonney2kok some work now23:34
@sonney2krest is probably LT_BINARY crap due to wrong problem type23:34
* sonney2k off23:35
n4nd0well good night guys23:35
blackburngood night23:35
blackburnI tihkn I have one more hour to code23:35
-!- n4nd0 [] has quit [Quit: leaving]23:35
-!- wiking_ [~wiking@huwico/staff/wiking] has joined #shogun23:39
blackburnhmm ok let me fix evaluations then23:41
-!- wiking [~wiking@huwico/staff/wiking] has quit [Ping timeout: 245 seconds]23:42
-!- wiking_ is now known as wiking23:42
--- Log closed Tue May 22 00:00:05 2012