Open in new window / Try shogun cloud
--- Log opened Sat Jul 21 00:00:17 2012
-!- heiko [] has quit [Quit: Leaving.]00:20
-!- blackburn [~blackburn@] has quit [Quit: Leaving.]02:34
-!- emrecelikten [~emre@] has quit [Ping timeout: 276 seconds]03:54
-!- puffin444 [187b4283@gateway/web/freenode/ip.] has joined #shogun05:46
-!- gsomix [~gsomix@] has quit [Remote host closed the connection]05:56
-!- gsomix [~gsomix@] has joined #shogun06:39
gsomixgood morning06:39
-!- puffin444 [187b4283@gateway/web/freenode/ip.] has quit [Quit: Page closed]07:22
-!- zxtx [] has joined #shogun08:37
-!- gsomix [~gsomix@] has quit [Ping timeout: 246 seconds]09:25
-!- rieck [~rieck@] has joined #shogun09:32
-!- rieck [~rieck@] has left #shogun []09:35
-!- gsomix [~gsomix@] has joined #shogun09:38
-!- pluskid [] has joined #shogun09:45
-!- gsomix [~gsomix@] has quit [Ping timeout: 252 seconds]10:42
-!- rieck [~rieck@] has joined #shogun10:53
-!- gsomix [~gsomix@] has joined #shogun10:54
-!- gsomix [~gsomix@] has quit [Ping timeout: 246 seconds]11:09
-!- heiko [] has joined #shogun11:35
-!- heiko [] has quit [Quit: Leaving.]11:41
@sonney2khaha droopy can you say droopy?11:41
droopysonney2k: there you go11:41
-!- heiko [] has joined #shogun11:56
-!- heiko [] has quit [Client Quit]11:58
-!- emrecelikten [~emre@] has joined #shogun12:09
@sonney2kwiking, please update your PR with the trivial changes such that I can merge it!12:09
-!- emrecelikten [~emre@] has quit [Client Quit]12:10
-!- hoijui [] has joined #shogun12:26
-!- hoijui_ [] has joined #shogun12:29
-!- hoijui [] has quit [Client Quit]12:30
-!- hoijui_ [] has quit [Client Quit]12:30
-!- hoijui [] has joined #shogun12:31
-!- blackburn [~blackburn@] has joined #shogun12:48
-!- n4nd0 [] has joined #shogun13:10
n4nd0hi all13:11
blackburnn4nd0: how did you holidays go?13:27
n4nd0blackburn: they were good!13:27
n4nd0I have been out in the wild camping and so on, it has been fun :)13:28
-!- hoijui [] has quit [Quit: Leaving]13:59
-!- pluskid [] has quit [Ping timeout: 264 seconds]14:34
-!- pluskid [~pluskid@] has joined #shogun14:54
blackburnpluskid: hey14:56
blackburnn4nd0: btw we with wiking wanted to test shogun on ILSVRC2012, wanna join?14:57
blackburnI also would like to build a team to participate in kaggle stuff14:57
n4nd0blackburn: I read about it in the mail wiking sent a couple of days in the list15:00
n4nd0it sounds very good, I would like to be in, yes15:01
blackburnwiking: ^15:01
blackburnn4nd0: we both are just curious how to handle SUCH BIG data15:01
blackburn138 Gb!15:01
blackburnand actually now we need to come up with some features15:02
n4nd0wow, 138 GB15:02
blackburnI am going to come up with some fast HOG and wiking wanted to adapt FREAK15:02
blackburn I am looking forward to try FREAK actually15:03
blackburnit is something faster and more accurate than SIFT/SURF15:03
pluskidblackburn: hi!15:06
blackburnpluskid: how is it going? you became rare here ;)15:06
pluskidblackburn: I hang here, but rarely speak :D15:06
pluskidstruggling with some 300+ line matlab code...15:07
pluskidmatlab function15:07
blackburnexactly like I do15:07
pluskidto turn it into C++15:07
pluskidblackburn: what algor are you working on now?15:08
blackburnpluskid: that thing is just 8 matlab files (loc ~200) generalized into one solver15:08
blackburnpluskid: well I am currently fixing bugs in recently introduced multitask algorithms ported from the MALSAR library15:08
blackburnthey are basically about the same15:09
blackburnregularizers are different :)15:09
pluskidblackburn: not better here :P,
pluskidtwo big functions15:10
blackburnpluskid: btw we now can use eigen3, did you know?15:10
pluskidblackburn: don't know :-/15:10
blackburnpluskid: here is the example15:11
blackburnthere are some double* but they are just for libqp interfacing15:11
pluskidblackburn: eigen3 is a matrix library?15:12
blackburnvectorizing actually15:13
blackburnso we can expect even some performance impact here15:13
pluskidlonging for a matrix library in shogun :D15:13
pluskidand I guess this would be much easier to code than raw LAPACK15:13
blackburnA*B is A*B15:14
blackburnnot cblas_dgemm(CblasColMajor,CblasNoTranspose, ... N,M,K15:14
pluskidthen what about SGMatrix?15:14
pluskidwill it stay?15:14
blackburnwell just store everything in sgmatrices15:14
blackburnbut in solvers/algorithms15:15
blackburnyou may use eigen315:15
blackburnI don't like idea of having eigen3 matrices members15:15
pluskidI see15:15
pluskidanyway, such a good news!15:16
blackburnactually if you want to treat SGMatrix as Eigen3 matrix15:16
blackburnyou may do that using Map<MatrixXd>15:16
blackburnso it looks like a good idea for me to keep eigen3 only inside15:16
pluskidhmm, that's reasonable15:17
-!- gsomix [~gsomix@] has joined #shogun15:20
-!- rieck [~rieck@] has left #shogun []15:38
-!- pluskid [~pluskid@] has quit [Quit: Leaving]16:01
-!- n4nd0 [] has quit [Quit: leaving]16:07
-!- heiko [] has joined #shogun16:27
blackburnheiko: hey16:28
heikoblackburn heyho16:28
blackburnheiko: I am thinking how can I make multitask work with xval or at least subsets16:28
blackburnheiko: can we know original indices of subset?16:29
heikooriginal indices?16:30
blackburnor initial or any other word16:30
blackburnI mean16:30
heikoYou could find that out, however, its expensive16:30
heikowhy do you need that?16:30
blackburnin multitask you have something liek16:31
blackburn0:20 is first task16:31
blackburn20:40 is second task16:31
blackburnand if you apply to first 20 vectors16:31
blackburnyou have to use first learned w16:31
blackburnor learned model generally16:31
heikocant you do that via the store_model_features?16:32
blackburnlet me try to think (it's hard for me) :D16:32
blackburnheiko: what can I store?16:32
heikoI must admit that I dont really get the problem you have16:34
heikofor doing xval, you would just need to train/test on different indices16:34
heikothese come from the SplittingStrategy16:34
heikoNow if you want only certain combinations, just build a new splitting strategy16:35
blackburnno I need to tell machine 'it is the second task vector, use second model'16:35
heikowhich respects you taks etc16:35
heikoyou should do that via the indices16:35
heikobut the cross-validation class just takes the indices and performs train/test16:35
-!- rieck [~rieck@] has joined #shogun16:36
blackburndamn I need to rearrange vectors somehow16:37
blackburnor to construct an explicit mapping16:37
heikoI think the splitting strategy would be good for that16:37
blackburnbecause currently it doesn't work with non contiguous tasks16:38
heikono idea...16:38
blackburnheiko: I mean now I am using a vector [0,20,40]16:38
blackburnto indicate 0:20 is the first task16:38
blackburnif I get something random16:39
blackburnlike [second task vector, first task vector, second task vector, ... ]16:39
blackburnit won't work at all16:39
blackburnand I don't really like it :)16:39
heikobut if you know which indices are which tasks16:40
heikothen you could build training/test indices that reflect that16:40
blackburnbut still time to change things I think16:40
blackburnindices vector would be better here..16:41
heikomight be, yes16:41
heikoblackburn, what do you think about the first section of the tutorial?16:46
blackburnlet me check16:51
blackburnhmm it doesnt' complile here :D16:52
blackburnheiko: okay so what do you mean first section?16:54
heikofor statistical tests16:54
heikowhat error do you get?16:54
heikoprobably package missing16:54
blackburnI just installed16:54
blackburnall is ok now16:54
heikoI meant more like style16:55
heikoI more focussed on the algo basics rather than SHOGUN internals16:55
blackburnlooks cool16:55
heikoand just saying see shogun class bla16:56
heikobut we need a way of doing this16:56
heikoI mean a uniform way16:56
heikoI currently only added TODO's16:56
blackburnwell style is something subjective16:56
blackburnbut I like the style you use and it probably fits to mine16:57
blackburnI'll add some stuff in next few days too16:57
heikoHow to reference shogun classes/methods?16:58
heikojust mention name?16:58
blackburnyeah I think so16:58
heikoand then user can look up class reference16:58
heikolets put the class names in some courier font16:59
blackburnwell actually may be we can set up some reference16:59
heikoyeah I thought so16:59
blackburnyeah \textt16:59
heikobut by hand=lots of work16:59
blackburnno why by hand16:59
heikocould that be embeddedn in latex?17:00
blackburntry that17:01
heikok will do17:01
heikothat might be an idea17:01
blackburnnow defcommand :D17:01
heikoor just put in url to class reference17:01
heikoon dis17:01
heikoor so17:01
heikodont know17:01
blackburnno, why17:01
blackburnjust use that kind of command17:01
blackburn\shogunclass{CBinaryFile} should work17:02
blackburnlet me try17:02
blackburna few mistakes here :)17:05
blackburnoh the weather is sweet finally17:07
heiko :)17:08
heikosame here17:09
heikofirst sunny day in ages17:09
heikohas been raining all the time17:09
blackburnwell opposite17:09
blackburnwas way too sunny :D17:09
blackburnheiko: \shogunclass{anything}17:11
blackburnheiko: I commited it17:11
heikothats supercool17:12
heikois it also in \tt ? :)17:12
blackburnheiko: it points to shogun-toolbox doc17:12
blackburnso if you click you see doc of the class *magic*17:13
blackburnheiko: I wonder whether anyone would be able to parse my english in that tutorial :D17:15
heikolol :)17:15
heikowell we should correct each other17:15
heikoand its a good chance to learn for you :)17:16
blackburnI remember I had to fix a lot of wrong usages in my wannabe-jmlr-paper17:16
blackburnheiko: I had one idea on authorship17:16
heikowhich is? :)17:17
blackburnsomething like \authors{Heiko Strathmann} in section/part17:17
heikoblackburn, I like the commadn you added17:17
blackburnwhich is shown in footer17:17
heikook, good idea17:17
blackburnso user can kick ass of correct person17:17
blackburnheiko: about style or rather desing17:19
blackburnI remember there was a cool package to set up section headers17:19
heikoblackburn, theres the git blamelist for that :)17:22
heikobut I agree anyway17:22
heikoand I like fancy chapter headers17:22
heikolike with capital letters17:22
blackburnheiko: I actually like fonts17:23
blackburnI love fonts17:23
blackburnheiko: which do you like most?17:24
heikolol :)17:25
heikoWell ,I think we should stay with the standard since people are used to it.17:25
heikoBut I love facy capital letters at section beginnings17:25
blackburnhow can people get used to font? ;)17:25
heikobecause everybody uses it17:26
blackburnI find palatino much more readable than computer modern roman17:26
heikoso it sorts in smoothly17:26
blackburnheiko: just try it17:26
heikodont know, lets just play around with that17:27
heikosee what people think :)17:27
droopyheiko, he17:27
heikocan always change, nice thing about LaTeX17:27
blackburnheiko: I just ran some script I used before but now with shogun compiled with optimizations17:37
blackburnnever thought it depends SO MUCH17:37
blackburn10 times faster at least17:38
heikoblackburn, what did you do?17:38
heikoah alright17:38
heikoyeah these count massively17:38
heikotake for example loops17:38
blackburnI never thought so much17:38
heikowhen you dont optimize, i++ takes three operations17:38
heiko++i just one17:39
blackburnheiko: do you know whether gcc uses SSE here in loops?17:39
heikowhen you optimise, its always one17:39
heikono idea17:39
blackburnheiko: if I had \infty time I'd analyze asm code17:42
heikoblackburn, I did that in uni intensively, completely boring, believe me, you dont wanna do that17:42
blackburnheiko: why did you?17:42
heikoI am a computer-scientist17:42
heikohad to do it17:42
-!- gsomix_ [~gsomix@] has joined #shogun17:43
heikoI already changed lots of these courses to math, but couldnt avoid all :D17:43
blackburnwell I am too but I hadn't ;)17:43
heikolucky you!17:43
heikogotta have a coffee now, see you later!17:43
blackburnsee you17:43
-!- heiko [] has quit [Quit: Leaving.]17:43
-!- gsomix [~gsomix@] has quit [Ping timeout: 248 seconds]17:46
CIA-18shogun: Sergey Lisitsyn master * r6eea837 / (7 files in 4 dirs): Introduced random search model selection -
-!- n4nd0 [] has joined #shogun18:47
-!- heiko [] has joined #shogun18:50
blackburnheiko: I added random search model selection18:53
heikoblackburn, random search?18:53
blackburnyeah :D18:53
heikowhat should that give? :)18:53
blackburnno idea18:53
heikoActually, for high dimensions, this is some kind of genetical programming approach, where you randomly find a good estimate and then refine from there18:53
heikoso useful  in conjunction with other methods :)18:54
blackburnheiko: well let it be anyway18:54
@sonney2kblackburn, sure gcc uses sse123, mmx etc19:15
blackburnI see19:15
@sonney2kblackburn, there is close to no gain to do assembly tweaks19:19
@sonney2kheiko, ^19:19
blackburnsonney2k: no I meant different thing19:19
@sonney2kblackburn, for example I used a for loop to compute a dot product19:19
blackburnit is useful to know what compiler produces19:19
@sonney2kvs. one that uses sse19:19
heikosonney2k, yeah, also its boring and can be done automatically by software which smart people wrote :)19:19
@sonney2kabout the same speed19:19
heikosonney2k, what do you think about adding a test framework19:20
heikobased on unit tests like googletest?19:20
@sonney2kbut when you overoptimize it runs slower on other tasks19:20
@sonney2kheiko, I am not so convinced... won't enabling the tests we have be sufficient?19:20
@sonney2kI mean what is the gain?19:20
heikoI mean a focus on small scale tests19:21
heikoI write a method19:21
heikoI add a test for that method19:21
heikolike index conversion or so19:21
heikowith defined input output19:21
heikothe test framework is for larger scale tests19:21
@sonney2kheiko, so sth like SVM cannot be tested then19:21
heikoI am more interested on the engineering side , not so much on ML19:21
heikomemory errors19:22
heikoguaranteed input/output19:22
heikothis stuff19:22
@sonney2kI understand then - however I can tell that these 'way too big tests' would cover these smaller ones somehow19:22
heikobecause most errors that pop up are exactly caused by this: somebody forgot a case ..19:22
@sonney2kat least the buildbot would tell us what failed19:22
heikoThats true, most errors are found19:22
heikohowever, it always takes ages to debug19:23
heikoAnd so much code is not even tested at all19:23
@sonney2kwell it would point us to the commit that broke *a* test19:23
heikoIn practice, errors are more complicated19:23
heikofor example this mkl stuff recently19:23
@sonney2kbut yes it would take more time to fix this than when you have such small tests19:23
heikoIt took quite a while till I found the method that was wrong: strore_model_features did a wrong job19:24
heikoa test would have detected that19:24
heikoI think so19:24
@sonney2kheiko, the problem here really is that we changed so much recently that basically all the 'big' tests were no longer working19:24
@sonney2k(think of serialization framework here!)19:24
heikoyeah I know19:24
heikoI think its a lot about actually running the code with defined input/output at least once19:25
heikoso people would think more about stuff19:25
heikorather than quickly committing as soon as the first test case worked19:25
@sonney2kheiko, I can only tell that even blackburn doesn't always add an example to the code he added. And it is even more difficult with anyone submitting patches...19:25
heikoI know, thats much more work19:25
@sonney2kpeople just give up19:26
@sonney2kbecause writing tests is not a fun taks19:26
heikoI know19:26
heikobut its crucial to *any* larger software19:26
@sonney2kyou are right - that is why I require an example before I merge anything19:26
@sonney2kit is useless currently because tests are no longer enabled19:27
@sonney2k(as in not running)19:27
heikoAnother reason why I suggest it is that we currently dont really have a place for these kind of tests19:27
heikoI am always commiting them to examples19:27
heikobut actually many are not examples, way to complicated/technical19:28
@sonney2kfor small tests we don't yes19:28
heikobut rather just checks that everything works as I want it to19:28
@sonney2kin python modular I think examples are nice to show how things work and are great tests too19:28
heikoyes they are great for detecting errors19:28
heikobut its always hard to debug since you only know that this large example fails19:29
heikoI think it would be worth so much if you knew that a method failed19:29
heikoanother thing: sometimes code is committed too fast. When you would have to write a test, you would think more about what you actually did there19:29
heikomore of a incremental development19:29
-!- rieck [~rieck@] has quit [Quit: ZNC -]19:29
@sonney2kheiko, I don't disagree - I just don't know who would write those tests19:29
-!- rieck [~rieck@] has joined #shogun19:30
droopyrieck :>19:30
heikoWhen somebody writes code, it has to be tested anyway, people do that locally19:30
heikoyou can't program without tests19:30
rieckdroopy: old chap!19:30
heikoso why not adding that bit of extra work to nail it down19:30
heikoI suggest a rule: each new method has to get a test19:31
heikojust all code covered at least once19:31
heikoits not that much work actually19:31
heikoand since they are all small scale, its easy to write them19:31
heikosince you already wrote the method19:31
@sonney2kheiko, yeah I use sth that I turn into an example examples (in python modular)19:32
heikoyeah like that, but only small scale19:33
heikoimagine every method had one of these19:33
heikobug tracing would be so easy19:33
@sonney2kwell any method you modify and any method that gets added19:33
heikoand methods would be more reliable19:33
heikoso over the time, we collect more and more19:33
-!- rieck [~rieck@] has quit [Client Quit]19:34
heikoand also, one could make it madatory that all tests (also old ones) pass and have no mem-leaks19:34
heiko=less new bugs19:34
heiko(at least in my fantasy its like this :)19:34
droopy*g* 8)19:34
heikowell, its just a suggestion19:34
heikoNow with all the new people, might be easier than a year ago19:34
@sonney2kI wouldn't mind - lets ask the others: blackburn, n4nd0, wiking - opinions on  new rule: "for any method you modify and any method that gets added a test is required"19:34
heikoI would add: "with defined input/output assertions"19:35
@sonney2kblackburn, leave aside the how for now.19:36
n4nd0I share heiko's opinion, I think it is a good idea that will decrease the number of bugs introduced19:36
blackburnI don't mind19:36
@sonney2kok then - so heiko any ideas how to do that practically then?19:37
heikowhat about a new folder new to example called tests19:37
heikochoose a free framework19:37
heikocopy folder structure from libshogun19:38
heikoand simply add units there19:38
heikoadd additionaly target to make19:38
@sonney2kheiko, so these would be all .cpp right?19:38
heikoCould add some for other languages but thats more complicated and I think the core ist most important19:38
heikomodular could in fact be handled in examples, and usually one does not change things too much in there19:39
heikoexcept for gsomix currently, but thats covered through new examples he makes19:39
@sonney2kso this would mean we have mini-unit tests and huge regression tests19:39
@sonney2kgsomix_, btw - any news on the PR?19:39
blackburnI actually agree we are BUG-O-TRONIC19:40
gsomix_sonney2k, I want to add setters to my PR.19:40
-!- rieck [~rieck@] has joined #shogun19:42
wikingheiko: still here?20:09
heikowiking, yes20:09
wikingheiko: i've started off with the following structure20:09
wikingadd to each class a implementation20:09
wikingthat has the unittests20:09
heikoeach class one .cpp file with tests for each method?20:10
wikingand then just modified the Makefile.template that it complies it with different flags (i.e. addig the flags for gtest/gmock20:10
heikoI would rather go for each shogun .cpp file gets one *_unittest.cpp20:10
heikoinstead of each class20:10
wikingheiko: well that's the idea20:10
wikingand then you have a main_unittest.cc20:11
heikobut the tests should be in a different dir20:11
wikingthat calls all the tests20:11
wikingheiko: i've tried that one as well20:11
heikolike a copy of the src dir20:11
heikoone could symlink all the .cpp files20:11
wikingbut it's very bizzare to have the same dir structure20:11
wikingjust for the unittesting20:11
heikoreally? well, ok20:11
heikoso same dir20:11
wikingthis way you have to create right next to your implementation20:12
wikingyour _unittest.cpp implementation as well20:12
wikingbut then again20:12
heikoyear, but it becomes a bit messy then20:12
heikomany files20:12
wikingthis can change20:12
wikingi'm ok with anything20:12
wikingi've just started of with SGVector20:12
wikingto define some unittest20:12
heikoyeah, dont know, blackburn, sonney2k, ^20:12
heikoyeah good place to start20:12
heikolike multiply, fill with zeros etc20:12
wikingdot product20:13
heikowe should somehow add a memory test20:13
wikingheiko: that's tricky20:13
heikothat it *always* fails if there is a memory leak or something20:13
wikingheiko: unittest is not meant for that20:13
heikoI know20:13
wikingheiko: but there are various solutions20:13
heikowe could add a script to run all these with valgrind20:13
heikolike blackburn did for the examples20:13
wikingheiko: well in some way that's already there in examples/libshogun20:13
heikothe thing is: it should be automatically enabled20:13
wikingheiko: the problem is that gtest for example20:14
heikootherwise, one forgets20:14
wikingdoes some tricky things20:14
wikingand thus valgrind will sometimes start crying20:14
heikoso valgrind complains about that?20:14
wikingfor no reason20:14
heikothats bad20:14
wikingor at least this is what i've read about20:14
wikingat some forums20:14
wikingbut there are other ways20:14
wikingthe problem is that those ones are system specific20:14
heikoI think we should definately check the tests for memory in some way20:14
wikingi.e. depends on the OS20:14
heikomh, other solutions?20:15
wikingso for win there's a straightforward20:15
wikingbut that's really for M$20:15
wikingaah way20:16
wikingi remember now20:16
wikingso yeah i forgot20:16
wikingboost.testing has an option20:16
wikingfor memory leak detectio20:16
wikingbuut that's actually m$ only as well20:17
wikingso i'll push soon my 'gtest based' attempt for unittest into my repo20:17
wikingso you can comment on it20:17
heikowiking, ok great work, we can still think of how to detect memory issues20:18
wikingheiko: yeah i've googled some20:18
wikingbut w/o luck20:18
wikingi think valgrind is still the best way to go in this case20:18
heikook, well lets see how it behaves with gtest20:18
wikingi mean osx has it's on way as well20:18
wikingbut that's as well osx20:18
wikingand i dont think we want to handle all the OSes 1-by-120:19
wikingthe funny thing about gtest is actually20:19
wikingthat you can even define that what should be the execution time of a given test20:19
wikingso if the test doesn't run within that time it'll still report it as fail20:19
wikingso it has some good stuff in there ....20:20
heikoI agree with the OS's20:20
heikomaybe thats second step20:20
heikobasic tests first20:21
heikotheres probably lot to discuss with the others on your patch20:21
wikingbut yeah i think basic unittesting would be already a good thing to have20:21
wikingso that really we can point out if there's suddenly something broken20:21
wikingheiko: yeah i've just felt that something should be done about it and didn't really felt for discussion20:21
wikingwe'll see when there's already something to discuss about20:22
heikoagreed, nice! :)20:22
wikingok i'm aw now a bit to polish the example20:22
wikingand then i'll send a mail to the list20:22
wikingso that anybody can add their thoughts20:22
heikogreat work wiking, Ill try to add something tomorrow then20:26
wikingheiko: okie20:29
blackburnwiking: i'll add multiple output multiclass labels for task 120:30
blackburnwe don't support it now actually20:30
blackburnthanks %deity we have well designed multiclass ;)20:30
-!- heiko [] has quit [Quit: Leaving.]21:06
-!- n4nd0 [] has quit [Quit: leaving]21:45
CIA-18shogun: Sergey Lisitsyn master * r2b6dcd3 / (14 files in 3 dirs): Changed task indexing way of MALSAR based algorithms and task api in general -
shogun-buildbotbuild #84 of bsd1 - libshogun is complete: Failure [failed compile]  Build details are at  blamelist: Sergey Lisitsyn <>22:10
wikingblackburn: yeey22:27
blackburnwiking: what?22:27
wikingon your prev message22:27
wikingi didn't see it22:27
CIA-18shogun: Sergey Lisitsyn master * r7a0f065 / (2 files in 2 dirs): Fixes for feature blocked logistic regression -
shogun-buildbotbuild #85 of bsd1 - libshogun is complete: Success [build successful]  Build details are at
gsomix_sonney2k, around?23:22
wikingthis works \o/23:47
--- Log closed Sun Jul 22 00:00:17 2012