drobilla | ... I'm beginning to regret choosing to publicly log this place | 00:05 |
---|---|---|
drobilla | Anchakor: Not sure. Their online compiler thingie is down due to a security breach though | 00:05 |
drobilla | Anchakor: Re: paper, I'd ask about the overall scope and focus, but you're an RDF nerd, so maybe I just shouldn't :) | 00:12 |
Anchakor | well I tried to suppress my RDF knowledge and idealism :) | 00:14 |
Anchakor | I think it is well done | 00:14 |
Anchakor | if you address the things which have confused me | 00:15 |
Anchakor | also I wonder how the forge section would be, stopped reading there as it was clearly mostly notes for yourself what to write about there | 00:15 |
drobilla | Yeah, haven't really made it that far | 00:16 |
drobilla | Was trying to make that damned forge snippet fit in the column :) | 00:16 |
drobilla | But it kind of needs to be right next to the corresponding Turtle | 00:16 |
Anchakor | what did you use for the atom type hierarchy diagram? | 00:17 |
drobilla | but this is talked about much ealier. tricky. | 00:17 |
drobilla | Anchakor: tikz | 00:17 |
drobilla | Which I totally don't understand, mostly blind copy/paste. It's weird. | 00:17 |
drobilla | Would have been less work to just draw it. | 00:17 |
drobilla | (ipe being my usual weapon of choice) | 00:17 |
Anchakor | I saw diagrams pretty clearly done with the same tool in some other papers | 00:17 |
Anchakor | seems popular with tex people | 00:18 |
drobilla | it's built in | 00:18 |
Anchakor | I use inkscape/yEd | 00:18 |
drobilla | latex package that gives you a graphics language in your document | 00:19 |
drobilla | I use ipe because you can typeset labels in latex | 00:19 |
drobilla | Particularly important if it corresponds to variables in the text | 00:19 |
Anchakor | I did draw some vertex stuff in latex class I took, worse part of the course | 00:20 |
Anchakor | worst* | 00:20 |
drobilla | Yeah, I never draw with any of those weird packages | 00:21 |
*** Gethiox has quit IRC | 00:21 | |
drobilla | This is literally the only time I tried, and it wasn't fun | 00:21 |
*** HarryHaaren has quit IRC | 01:26 | |
* drobilla goes to bed, having totally not finished the paper at all | 05:37 | |
drobilla | sigh. | 05:37 |
*** falktx_ has joined #lv2 | 05:53 | |
*** falktx has quit IRC | 05:54 | |
*** edogawa has joined #lv2 | 07:02 | |
*** abique has joined #lv2 | 08:45 | |
*** abique has quit IRC | 08:51 | |
*** abique has joined #lv2 | 08:51 | |
*** drobilla has quit IRC | 09:30 | |
*** rncbc has joined #lv2 | 09:33 | |
*** drobilla has joined #lv2 | 09:34 | |
*** Gethiox has joined #lv2 | 09:48 | |
*** falktx_ has quit IRC | 10:29 | |
*** falktx has joined #lv2 | 10:35 | |
*** NickSB2 has joined #lv2 | 12:32 | |
*** rncbc is now known as rncbc|AFK | 13:21 | |
*** shanipribadi has quit IRC | 13:27 | |
*** edogawa_ has joined #lv2 | 15:30 | |
*** edogawa has quit IRC | 15:33 | |
*** mlpug has joined #lv2 | 15:39 | |
*** edogawa_ is now known as edogawa | 15:41 | |
rgareus | lv2_atom_forge_blank() has been deprecated, use lv2_atom_forge_resource() instead... | 16:03 |
rgareus | lv2_atom_forge_resource() has been deprecated, use lv2_atom_forge_resource() instead. | 16:04 |
rgareus | drobilla: ^^ is that a typo? | 16:04 |
falktx | I reported something similar a few days ago | 16:05 |
rgareus | falktx: and? | 16:06 |
rgareus | falktx: did you get an answer? | 16:06 |
rgareus | falktx: did you file a ticket? | 16:06 |
falktx | drobilla fixed it I believe | 16:06 |
falktx | but it was in a comment | 16:06 |
rgareus | falktx: svn rev905 fixed only part of this | 16:08 |
rgareus | it did s/lv2_atom_forge_resource/lv2_atom_forge_object/ | 16:09 |
rgareus | in forge.h | 16:09 |
falktx | it's the copy paste | 16:10 |
rgareus | http://dev.drobilla.net/ticket/957 | 16:13 |
*** mlpug has quit IRC | 16:28 | |
*** mlpug has joined #lv2 | 16:32 | |
*** mlpug has quit IRC | 16:37 | |
drobilla | Oops, half fix. Fixed now. | 16:56 |
rgareus | drobilla: oh, sorry. I should have used http://lv2plug.in/report | 17:15 |
drobilla | I wonder if there's a decent fancy trac module to hijack from other accounts these days | 17:16 |
drobilla | preferably many, like openid, google, etc | 17:16 |
drobilla | I'd like to maintain my own services without the make an account barrier... | 17:16 |
rgareus | it's called github :) | 17:16 |
* rgareus ducks | 17:16 | |
drobilla | If anything I'd move to gitorious | 17:17 |
drobilla | I do not approve of github's proprietization of FS development | 17:17 |
drobilla | Having the *two* sites to run sucks though | 17:18 |
rgareus | drobilla: the question I asked myself: Do i want to spend time on maintaining it and fighting spam. vs how much freedom/control is lost by not hosting it myself. | 17:18 |
Anchakor | I think github is ok if you don't *rely* on its additional features | 17:18 |
rgareus | Anchakor: yeah. I came to the same conclusion | 17:19 |
Anchakor | aka someone who doesn't use github can still contribute to github-based projects | 17:19 |
drobilla | Almost nobody actually uses the LV2 trac anyway. Mine is a little more useful. | 17:20 |
rgareus | I like the 'issue/ticket' system on github, too | 17:20 |
Anchakor | if you don't force people to use pull requests, and the bugtracker, it is fine | 17:20 |
drobilla | 'course, when the super cool trendy hosting site of the month goes away, then you get to move it all over again | 17:20 |
drobilla | Anchakor: A bug tracker is the main thing I need. | 17:20 |
drobilla | I have also idly considered installing something more heavy-duty and multi project at lv2plug.in and just moving all my LAD stuff there | 17:21 |
Anchakor | I think bugtracker I liked the most was mantis | 17:21 |
drobilla | and inviting whoever else to do the same | 17:21 |
drobilla | Though few probably would | 17:21 |
drobilla | mantis strikes me as hyper complicated | 17:21 |
drobilla | Trac is nice in that you can link back and forth, I close tickets with a link to the commit that resolved them. | 17:22 |
rgareus | drobilla: I close tickets with a commit message :) | 17:22 |
drobilla | Yes, I mean, I don't think Mantis can do such things. | 17:23 |
drobilla | and that's just *another* service to run. | 17:23 |
Anchakor | many people seem to like redmine, but it is ruby :| | 17:24 |
drobilla | Yeah, no thanks. | 17:25 |
drobilla | I am more or less happy with trac anyway, just account shit is problematic. | 17:25 |
drobilla | I assume the git stuff is working decently these days. | 17:25 |
falktx | a user is reporting an issue with latest lv2 update | 17:26 |
falktx | "lv2ls" gives a segmentation fault... | 17:26 |
drobilla | I doubt an LV2 update could make lv2ls segfault | 17:26 |
falktx | I did the update to latest svn | 17:26 |
falktx | afaik it was working (for him) before | 17:27 |
falktx | anyway, I asked for a "strace lv2ls" to see if a specific ttl is the issue | 17:27 |
drobilla | IIRC only atom stuff has changed | 17:27 |
drobilla | which lv2ls doesn't use | 17:27 |
falktx | I don't know either | 17:31 |
falktx | users have a special skill to break stuff | 17:32 |
rgareus | maybe s/he installed a fancy plugin? | 17:32 |
rgareus | with a buffer-overflow'ing URI | 17:32 |
drobilla | yeah, most all it does is read ttl | 17:34 |
rgareus | http://coolplugin\0rm%20-rf%20/#borked | 17:35 |
drobilla | there have been some non trivial *lilv* changes... | 17:35 |
drobilla | if you can track it down to a file that would be good | 17:35 |
drobilla | rgareus: hah. serd is pretty robust, but I haven't specifically gone over it with a security eye, I guess you never know :) | 17:35 |
falktx | maybe it's naspro again... | 17:36 |
rgareus | strace -f -e trace=open lv2ls 2>/tmp/debug.out | 17:37 |
rgareus | -f might not be needed, lv2ls does not fork itself, but who knows | 17:38 |
rgareus | there might be some exploits possible with those launchers that just go lv2ls, user-selection, run jalv.gtk.. | 17:46 |
rgareus | but that's just academic. if the plugin is executed it can do anything, anyway | 17:49 |
falktx | later | 17:49 |
*** falktx has quit IRC | 17:49 | |
Anchakor | it can steal your music! | 17:50 |
drobilla | I wonder if any other projects would end up at lv2plug.in if it was pitched that way | 17:52 |
drobilla | Plugins, in particuar. | 17:52 |
drobilla | lv2-universe | 17:52 |
Anchakor | doesn't seem to be much of a point | 17:53 |
drobilla | the main point there would be maintaing otherwise dead plugins I suppose | 17:53 |
Anchakor | you can always fork those | 17:54 |
drobilla | I dunno. I don't like hosting projects on some companies Product™ | 17:54 |
drobilla | LV2: Now Hosted on UltraHub Pro™ | 17:54 |
drobilla | Fucking Facebook of programming is what we've come to | 17:55 |
wrl | then use bitbucket or gitorious or repo.or.cz or something | 17:55 |
drobilla | It would be nice not to run 2 tracs, but I don't really want lv2plug.in to be a drobilla only party any more than it already is | 17:55 |
drobilla | Though lilv and friends probably should move into LV2 proper regardless | 17:56 |
drobilla | serd/sord are the tricky parts | 17:56 |
drobilla | Apps and plugins are so unbelievably easy and unproblematic. Sigh. | 17:57 |
drobilla | Anyway, I'm going to go finish this damned paper now | 17:58 |
Anchakor | I think maybe in what could lv2plug.in be more useful is if it turned to be more community site - people would manage catalogization of lv2 plugins to promote their plugins or plugins they use + would have account so could easily report problems with your SW | 18:01 |
drobilla | I can't really map that to concrete software | 18:02 |
drobilla | More community centric is what I was going on about yesterday. | 18:02 |
drobilla | There *is* a wiki... | 18:02 |
drobilla | I like the question things | 18:02 |
Anchakor | trac has a wiki, can you restrict users to giving them write rights to only certain pages? | 18:03 |
drobilla | I don't think so, but is there really a need? | 18:03 |
Anchakor | hmm good point | 18:03 |
Anchakor | if it is resistant to bot vandalism | 18:03 |
drobilla | Maybe jumping off the deep-end of new software isn't really worth it, and the trac should just be restructured to look more contribute/community friendly, google accounts supported, etc. | 18:04 |
Anchakor | yeah I think so, integrating another system would be PITA | 18:04 |
drobilla | I guess one obvious thing is to move all that current stuff to a separate page. | 18:36 |
drobilla | Maybe intro for developers, intro for users. | 18:36 |
drobilla | Where the latter is all screenshots and whiz-bang features | 18:36 |
* drobilla launches the 17 gig Windows vbox image he just downloaded | 18:51 | |
drobilla | pleaseworkpleaseworkpleasework | 18:51 |
*** mlpug has joined #lv2 | 18:59 | |
*** abique has quit IRC | 19:03 | |
rgareus | I have/had this idea to make 1 page per plugin with generated doc + user-comment-section at the bottom. | 19:15 |
rgareus | lv2ls | lv2tohtml -> http://robin.linuxaudio.org/tmp/lv2doc/ | 19:15 |
rgareus | the screenshot does not work for every plugin and the old event ports are not rendered correctly in the HTML. and it's currently static html | 19:16 |
rgareus | also, for the plugins that I have around, dave and I are the only ones who provide a plugin-description and port-documentation in the ttl. | 19:17 |
drobilla | rgareus: cool stuff | 19:20 |
drobilla | Yeah, I was hoping more obvious support in hosts would get more plugins to do it | 19:20 |
drobilla | Tooltips aren't so obvious though | 19:21 |
rgareus | publishing this could become an incentive for others to add [build-in] docmentation | 19:21 |
rgareus | drobilla: yeah. the html+CSS is also up for improvement | 19:21 |
drobilla | I was going to make such a thing based on the lv2specgen theme | 19:21 |
drobilla | rgareus: I use the same stylesheet for all lv2 stuff. Feel free to steal it | 19:22 |
drobilla | an option to make this output things in a way that would be resolvable for plugin URI, so projects can do that, would be cool | 19:22 |
rgareus | there could be an iframe included for comments.. | 19:22 |
rgareus | personally I'm not a fan of web-forums, but I suppose most users would like that | 19:23 |
rgareus | drobilla: it'll need some planning. I hacked this together to docuent my own plugins. to make this work generally it'll need some tweaks | 19:24 |
rgareus | http://robin.linuxaudio.org/tmp/lv2doc/http___www_openavproductions_com_fabla.html wins the awared to highest port-count :) | 19:25 |
rgareus | some sort-option and grouping in the index-page would be needed as well.. | 19:26 |
drobilla | needs groups | 19:26 |
rgareus | it eventually boils down how automated it should become. | 19:26 |
rgareus | drobilla: oh my. I still have your age old 'OSC Metronome' around. Is that still maintained? | 19:28 |
drobilla | rgareus: huh. I don't know if that thing ever even worked | 19:29 |
drobilla | I sort of implemented LV2ey OSC at one point... | 19:29 |
drobilla | i.e., no | 19:30 |
rgareus | drobilla: I have it in /usr/local/lib/lv2/metro.lv2/ - Feb/2008 | 19:30 |
* rgareus feels old, now | 19:30 | |
drobilla | Yeah, I get weirded out by how long LV2 has been around sometimes | 19:34 |
drobilla | It's insane how long Windows updates take | 19:51 |
drobilla | I am almost tempted to just omit the forge section entirely. | 19:59 |
drobilla | 1 Introduction, 2 Mechanics, 3 Semantics, 4 Reading and Writing Atoms, 6 Future Work | 19:59 |
drobilla | 4 really messes up the flow of the thing | 19:59 |
Anchakor | 4 was Applications no? | 20:04 |
Anchakor | you probably could omit the forge section as it is basically just a tutorial material | 20:04 |
Anchakor | just explain wht it is and that it should be used instead of having to make atoms by hand | 20:05 |
drobilla | er, right, insert Applications at 4 | 20:10 |
rgareus | Appendix A: code examples | 20:12 |
rgareus | Appendix B: Collection of email-flames regarding LV2-Atoms | 20:13 |
drobilla | Appendix would conveniently get me out of trying to cram code into 40 columns, but also could just be ommitted | 20:13 |
drobilla | hah | 20:13 |
drobilla | Well, I'll revise and finish up the rest of the stuff and see where the length stands | 20:13 |
*** drobilla has quit IRC | 20:40 | |
*** drobilla has joined #lv2 | 20:53 | |
* drobilla 's machine hard locked | 20:54 | |
drobilla | Well, that's fun | 20:54 |
Javafant | you think hard locks are fun? | 20:55 |
drobilla | Whee! | 20:58 |
drobilla | I blame Windows. | 20:59 |
drobilla | Speaking of Windwos, I saw something on stack overflow that's actually a nice idea which is a Windows convention | 20:59 |
drobilla | Structs start with a size field, which serves as both size and version (since you only append to structs). So, you can initialize them like Foo x = {sizeof(x)} | 21:00 |
drobilla | The compiler will zero out the rest, though I'm not sure that's actually standard C behaviour. Things certainly warn about that. | 21:00 |
drobilla | Anyway, LV2 definitely should have put size fields in all the stricts. There's always extension_data, but that sort of makes things a second class citizen forever. | 21:01 |
drobilla | Apparently zeroing the rest is standard, -Wall or -Wextra is just being paranoid | 21:05 |
rgareus | why would you want a size AND version field in any struct. Strikes me as the same stupid idea as hungarian notation. | 21:15 |
rgareus | it does not help with API/ABI versioning in anyway way, and the compiler does not know what to make of this, either way | 21:17 |
drobilla | rgareus: there is just a size. size effectively serves as version. | 21:17 |
rgareus | drobilla: struct versioning for runtime? | 21:17 |
drobilla | rgareus: yes | 21:18 |
drobilla | e.g. load an LV2_Descriptor and you can check the size to know if, say, ultra_run() is there | 21:18 |
rgareus | questionable at best. | 21:19 |
drobilla | why? | 21:19 |
drobilla | otherwise you have no mechanism to add anything. | 21:19 |
rgareus | drobilla: you'll need to change LV2_Descriptor in the first place to add .size | 21:19 |
drobilla | you just straight up can't, because there's no way to check what version something is using | 21:19 |
drobilla | rgareus: Well, yeah, that's the point. Should have, but didn't. | 21:20 |
rgareus | drobilla: and further fragmenting LV2 by allowing more functions in there seems unwise, too | 21:20 |
drobilla | It doesn't fragment anything. | 21:20 |
rgareus | drobilla: host 1 supports ultra_run(), some other dev increments the size and adds special_in_place() | 21:21 |
rgareus | oops same .size | 21:21 |
rgareus | drobilla: host 3 does not know about either.. | 21:21 |
drobilla | rgareus: uh, obviously anyone can't just set the size to whatever the hell they want | 21:21 |
drobilla | rgareus: it's sizeof(LV2_Descriptor) | 21:21 |
rgareus | drobilla: right, you add ultra_run, I add special_in_place | 21:21 |
drobilla | This is how you make structs extensible in a dynamically loaded API. | 21:21 |
rgareus | drobilla: same sizeof() | 21:21 |
drobilla | rgareus: Uh, no. Two people can't both change lv2.h obviously. Any more than they can now. | 21:22 |
drobilla | This is to do with structs in (inherently centralized) APIs. | 21:22 |
drobilla | It is not a decentralized extension mechanism. | 21:23 |
rgareus | drobilla: mmkay. for dlopen() descriptor this is compatible way | 21:24 |
rgareus | drobilla: for API in general, a better idea is to simply deprecated the struct and provide a new one. | 21:25 |
drobilla | rgareus: Right. For library APIs, the static sizeof(struct) will tell you if this is even necessary at all (which is unlikely), but for modules, you need the size to be able to extend structs | 21:25 |
drobilla | rgareus: For library APIs you just append stuff and bump the minor version | 21:25 |
rgareus | drobilla: but code-wise. the host will need to check size() anyway and then do something depending on the version found | 21:26 |
rgareus | drobilla: it could also just check for different descriptors directly | 21:26 |
drobilla | rgareus: Indeed it will. Being the whole point and all :) | 21:26 |
drobilla | rgareus: Now *that's* fragmentation... | 21:27 |
rgareus | drobilla: heh. same thing really | 21:27 |
drobilla | rgareus: No. A plugin that uses a newer extended version would work in an old host | 21:27 |
rgareus | drobilla: could be done with unions, too | 21:28 |
drobilla | I really don't get why you'd actively try to come up with all these crazy difficult ways of doing the same thing :P | 21:29 |
rgareus | drobilla: well, yeah. are you planning to change LV2_Descriptor? | 21:29 |
rgareus | ..anytime soon? | 21:29 |
drobilla | No, because I can't, because of this mistake. | 21:29 |
rgareus | drobilla: I was just brainstorming if there'd be a more elegant or practical solution.. | 21:30 |
drobilla | My loathing of the unbelievably stupid connect_port() is pretty well known. I will make an extension for that at some point that just passes an array of pointers to run_on() or whatever. | 21:30 |
drobilla | (Which is also const-correct, as it happens) | 21:30 |
drobilla | rgareus: Size is a great solution. Extensible, but zero clunky overhead for either side. | 21:31 |
rgareus | drobilla: how about variable port-counts? | 21:31 |
drobilla | rgareus: I don't know, but it's not really related to those APIs. Some other API could change up how many ports there are. | 21:31 |
drobilla | rgareus: Not a can of worms I plan on opening any time soon. | 21:32 |
drobilla | Event-based control is vastly more important IMO. | 21:32 |
drobilla | (If it weren't for zero-copy requirements I'd probably want to send audio that way too) | 21:33 |
drobilla | rgareus: A group port strikes me as a more realistic route to multi-channel configurability than full on variable ports | 21:33 |
rgareus | drobilla: I have not thought about using Atoms for variable-ports. That could be neat indeed. | 21:34 |
rgareus | drobilla: one could even go so far as to pass a pointer to a float* in an Atom | 21:35 |
rgareus | drobilla: and achieve in-place processing like that | 21:35 |
drobilla | rgareus: Maybe kinda sorta, but atoms are POD by definition. | 21:35 |
drobilla | rgareus: Type 0 is reserved for references, but I'd rather just not go there. | 21:35 |
drobilla | The event extension had a half-baked never used stab at this. | 21:35 |
drobilla | Which is the main place I learned that half-baked never used things shouldn't get standardised. | 21:36 |
drobilla | rgareus: I don't know, an array of float* or whatever would be the more conservative thing | 21:36 |
drobilla | but literally just having one input and one output and doing all things via messages is a far more sane general model than this ports stuff | 21:36 |
drobilla | more or less analogous to what OO was originall envisioned as | 21:37 |
drobilla | But until somebody has a real active interest in this I probably will just ignore it. | 21:37 |
drobilla | The weird question with non-POD is... what does it point to? Not an atom, if you want to have pointers in it. | 21:41 |
drobilla | For the more conservative route, note the dynamic options API can probably already do all that's required. | 21:42 |
drobilla | Set port 5 rdf:type to pg:FivePointOneGroup or some such thing | 21:43 |
drobilla | I wonder if atom:String could have been ommitted in favour of just using atom:Vector | 21:57 |
drobilla | Simpler model, more annoying use, I suppose. | 21:58 |
rgareus | drobilla: re falkTX's example to send Midi-data as atom. introducing a | 22:14 |
rgareus | struct LV2_Atom_MidiEvent | 22:14 |
rgareus | and not using the forge seems odd to me | 22:14 |
drobilla | I have no plan to define such a struct since the atom extension does not define a MIDI type | 22:14 |
drobilla | However utility functions to clear and append to a sequence would be useful to people who don't want to deal with the forge | 22:15 |
drobilla | It's a 'regression' from event in people like Herman's eyes. I hadn't noticed because I just use the forge. | 22:15 |
rgareus | drobilla: +1 for a wrapper function | 22:15 |
drobilla | Need to think of some really basic MIDI sending example plugin | 22:16 |
rgareus | drobilla: does the forge know the 'midi_Event' URI internally? that's biggest problem I see with a wrapper-function. | 22:18 |
drobilla | rgareus: They'll have to map it. Same as event. | 22:19 |
drobilla | Would be nice to just have 'all the URIs in this extension' structs with fancy auto-map functions, which I guess we could, but the order is relevant, so that'd get messy over time | 22:20 |
rgareus | drobilla: I'm pondering to reply to the email and either point to http://pastebin.com/LnfKbuEV or https://github.com/x42/tuna.lv2/blob/ccd85a340/src/tuna.c#L441 | 22:21 |
drobilla | rgareus: Yeah, I suppose it should be mentioned that the forge is what's used which is why that function isn't there | 22:21 |
drobilla | last two lines can be merged by using forge_write instead | 22:22 |
rgareus | drobilla: an example plugin would be either a 'random note generator' or maybe a simple hardcoded midi-filter. | 22:23 |
drobilla | rgareus: Maybe a fifths generator | 22:23 |
rgareus | drobilla: yeah. | 22:24 |
rgareus | drobilla: the hard-part only comes up if you allow to change that note dynamically (you'll need to keep track of note-on/offs) | 22:25 |
rgareus | drobilla: if it's 5th and only 5ths. it'll be easy | 22:25 |
drobilla | just fifths. doing all that would only serve to obscure the point | 22:25 |
drobilla | sampler and scope are way too complicated as examples too, really. | 22:27 |
rgareus | yeah. the scope introduces 3 or 4 things. mono/stereo variants, state-save and Array transfer | 22:29 |
rgareus | not to mention all the cairo-GUI stuff | 22:29 |
drobilla | The variants should probably go, but it's more important to add new very simple examples of various things anyway. | 22:34 |
rgareus | drobilla: yeah, though I can't really think of anything simpler that would require shipping raw audio-data to a GUI :) | 22:35 |
drobilla | rgareus: waveform view in a sampler | 22:36 |
rgareus | drobilla: would be pretty much the same (GUI wise) | 22:37 |
drobilla | Pretty much. mono/stereo is just distracting though. | 22:37 |
drobilla | Whatever, it's fine. The book is still really bad anyway. | 22:37 |
drobilla | At some point it will become a little more deserving of the title "book", I hope :) | 22:38 |
*** rncbc|AFK has quit IRC | 23:05 | |
*** edogawa has quit IRC | 23:29 |
Generated by irclog2html.py 2.13.0 by Marius Gedminas - find it at mg.pov.lt!