IRC log of #schooltool for Tuesday, 2010-11-02

*** alga has quit IRC04:07
*** aks has joined #schooltool05:31
*** menesis has joined #schooltool09:34
*** ignas has joined #schooltool09:36
*** menesis has quit IRC09:37
*** menesis1 has joined #schooltool09:37
*** menesis1 is now known as menesis09:37
*** menesis has quit IRC10:53
*** menesis has joined #schooltool10:53
*** alga has joined #schooltool12:05
*** menesis has quit IRC12:49
*** menesis has joined #schooltool12:49
*** alga has quit IRC12:53
*** aks has quit IRC13:17
*** menesis has quit IRC13:22
*** menesis has joined #schooltool14:08
*** alga has joined #schooltool14:12
*** jelkner has joined #schooltool15:12
*** replaceafill has joined #schooltool15:24
th1aHappy (belated) birthday jelkner!15:28
th1ahi menesis, replaceafill, aelkner.15:30
replaceafillgood morning/afternoon15:30
th1areplaceafill, What's the open video chat Ubuntu is pushing now?15:31
replaceafillth1a, ?15:32
replaceafillopen video chat?15:32
th1aOh, that's just voice.15:33
replaceafillah, had never heard of it15:33
th1aOK, we have a couple big things to talk about.15:33
th1aMaybe Ubuntu isn't actually pushing it.15:33
th1aPredominantly: Natty packaging and some questions about how to approach specialized demographic cases, particularly how they work in the Cambodia package.15:34
th1aSo, menesis, can you update us on where we are now with packaging?15:35
menesisI have to send an email asking for sponsors again15:36
menesisdid not do this last week because of UDS15:36
menesisI don't think I need to update any packages, what is in Maverick is OK15:37
th1aPython 2.7?15:37
th1aIs that something they might change on us during the process?15:38
menesisZTK 1.0 is packaged and the supported versions are python 2.4 - 2.6, not 2.715:39
th1aYou mentioned Python 2.7 might be in Maverick last week?15:39
menesisI haven't looked at buildbots recently, I think only a couple packages' tests fail15:39
menesisbut tests failing does not matter as long as schooltool works15:40
menesisyou mean, natty?15:41
th1aYes, Natty.15:41
*** replaceafill_ has joined #schooltool15:41
menesisI see python2.7 is in maverick already15:41
th1aThey aren't going to remove 2.6 though, in Natty?15:41
menesisbut not as supported version15:41
menesisdon't remember whether I saw any decisions about python versions15:42
*** replaceafill has quit IRC15:42
menesisin UDS discussions15:42
*** replaceafill_ is now known as replaceafill15:42
menesisI only followed a couple sessions, not related15:43
th1aOK, so this is not really a hot issue, just something you were a little worried about?15:43
replaceafillsorry, got disconnected for a while15:43
menesisI think they are trying to make python2.7 a supported version, there are problems15:43
menesisif there are any problems with zope packages then I will have to fix them15:44
menesishard to predict15:44
th1aBut it sounds unlikely that they'd *remove* 2.6 this cycle.15:44
menesisI am not worried about that now15:44
th1aOK.  Fine.15:44
th1aSo we just need to send that email.15:44
th1aI would like to be able to report that as done to Mark in the annual report, which should be done in about two weeks.15:45
th1aOr at least mostly done!15:45
th1aThen we can relax a little.15:47
th1aSo lets get that email out tomorrow at the latest.15:48
th1aOK, replaceafill, I think it is time for me to send an email to Javier.15:49
th1aGive them a little boot.15:49
replaceafilli haven't had response on my report sample request15:49
th1aWhat do you have on your queue then?15:50
replaceafillnot much for cambodia15:50
replaceafilli finished the pending items i reported in my last email this week15:50
replaceafilli stored the national exam grades for grade 9 and 1215:51
replaceafilli'd also like to see the UI fully in khmer15:52
replaceafillbecause of the spaces15:52
replaceafillbut that's not as important as the reports15:52
replaceafill(i think)15:52
replaceafilland my last question in that last email was about teachers15:53
replaceafill"from grades 1-6, one teacher teaches all subjects to the class, correct? What about the other grades? How many teachers could a class have?"15:53
replaceafilltrying to improve teacher assignment to classes15:53
th1aI'd imagine it works like primary and secondary schools pretty much everywhere.15:53
th1aSpecialized by subject in secondary.15:54
replaceafillmaybe i could change the teacher forms to allow them to assign the class for  the teacher15:54
th1aBut yes, an answer would help.  :S15:54
replaceafilllike we do with the student form15:54
replaceafilland also, if yvl have some time this week, finishing the score refactoring would be great :)15:55
replaceafilli mean in the gradebook15:55
replaceafillthe score refactoring allow to insert columns in the gradebook using adapters15:55
replaceafilland you can put the logic of the column in the adapter15:55
replaceafillnot in the view (like i currently do in cambodia's case)15:56
th1aWell, yvl is on vacation this week.15:56
th1aSo you could do that.15:57
replaceafilland maybe i can work in el salvador stuff?15:57
replaceafilli still have some changes to do to the forms, and some report samples for esaes15:57
th1aAnd otherwise I'll try to have other stuff for you to work on next week if necessary.15:58
replaceafillah ok15:58
th1aAlso, can you just send an email about using the fixes you made to sample data generation?15:58
th1aSo people know what they can do with it.15:58
th1aJust a few sentences.15:59
replaceafilllike a way of using sample data generation? what i did is not "a big fix"15:59
th1aWell, just update me on what it actually does at this point.15:59
replaceafillah ok15:59
th1aI mean, I know what it does in general, but what works now?15:59
replaceafillth1a, question15:59
replaceafilli was thinking of writing a schooltool book for cambodia16:00
replaceafilllike a quick tutorial on how to use the customizations i've made16:00
replaceafilli mean, i cannot point them to the full schooltool book16:00
replaceafillbecause the UI is different16:00
th1aYes... well, let's hold off on that for the moment.16:01
replaceafillah ok16:01
th1aI don't want to pour a lot more work into this until we hear back from them.16:01
th1aWe don't have to go looking for things to do for them.16:01
* replaceafill hopes everything is ok with them...16:01
th1aEspecially since we now know we have thousands of other existing users out there right now.16:02
replaceafillgot it16:02
th1aI'm just worried about the constant possibility that someone local might snake us.16:02
* replaceafill too16:03
replaceafill"we went with another SIS" is my worst case scenario16:03
th1aSNAKE - If your skating an object in which only a limited number of people can skate, a snake, or snaker, is the person that seems to have more goes than anyone by jumping the naturally occurring queue16:03
*** jelkner has quit IRC16:03
th1aThanks, replaceafill.16:04
th1aaelkner:  Did you gain any insight to the problem we discussed last night?16:05
aelkneri poured over schooltool.cambodia, creating my own readme doc about what is done there16:05
th1aFeel free to submit that as a patch if it is might be useful to others.16:06
aelknerfor instance, this diagram describes the event flow:16:06
aelkneradd schoolyear -> add levels -> add groups A, B, C for16:07
aelkner                                each new level added16:07
aelkner                  add courses16:07
aelkner                  add term  ->  add sections based on -> add report sheets to sections16:07
aelkner                                levels and courses       based on level of the section16:07
aelknerit's all very custom for cambodia's needs16:07
aelknerdefines LevelGroups and SectionEnrollment relationships to do this16:08
aelkneruses LevelCourses from core16:08
aelknernothing is dne with resources16:08
aelknerApplicationPreferences is subclassed16:08
aelknerand the derived class instance replaces what schooltool puts ApplicationPreferences16:09
aelkneragain, i don't see anything that is useful outside of cambodia16:09
aelknerthere are custom demographics fields for students, teachers16:10
aelknercustom views for adding them with tons of formlib magic16:11
aelknerwhat a mess it is to use that library16:11
replaceafillframework :D16:11
aelknerrocket science to play tic-tac-toe16:11
aelkneri'm just not seeing the benefits16:12
aelknernor the portability16:12
aelknerwhat about all of this is going to end up in core?16:12
th1aWell, separate demographics for different groups will probably.16:13
th1aSeparate "Add Student" and "Add Teacher" views.16:13
th1aWhich closely relates to what you need, aelkner.16:14
aelkneras they are, they are hard-coded table driven16:14
aelknerthe tables being specific to cambodia16:14
th1aYes, the forms themselves.16:14
aelknerthat's all there is, the forms16:15
th1aI'm maybe steering this NIEPA project more towards customization than I originally thought.16:15
th1aBut basically, we need to go through the process of doing one of these censuses.16:15
th1aAlso, pulling things from Cambodia into core is probably going to be a main goal in our next sprint.16:16
th1aGeneral features.16:17
replaceafillis core going to use level-group by default?16:17
th1aWhat is level-group?16:17
aelknerit's a relationship16:17
replaceafilli mean, the student is assigned to a group and by default he gets in all the sections that are related16:17
replaceafillgets enrolled16:17
aelkneryes, that will be usefule in core16:18
th1aI would say yes.16:18
aelkneralthough not the part about hard-coding which groups go with which levels16:18
aelkneragain, the general case is not considered yet16:18
th1aWell, it would just be a matter of writing a UI, right?16:19
replaceafilli think so, do in a UI what cambodia does with suscribers and initialization16:19
aelknerfor instance, i wrote a view for setting the section group relationship in schooltool.niepa16:20
aelknerbut i didn't commit the change, ust kept the diff, as David is not clamouring for that feature16:21
aelknernow that we fixed the cando bug16:21
th1aOK, so getting to the actual issue aelkner has right now...16:21
th1ado you see how you can apply different demographics just for teachers?16:21
aelkneryou mean the hack?16:22
aelknerthere's this rocket science zc3.formlib view that hard-codes which fields to present16:23
aelknerbased on which group the person belongs to16:23
th1aAh, right.16:23
aelknerit's completly NOT transportable16:23
th1aSo everyone has a big demographics schema which includes all the possible ones, but only some are displayed.16:23
replaceafillactually cambodia only use two additional demographics16:24
replaceafill"name in latin" and "nationality"16:24
aelknerthat's for teachers and administrators16:25
th1aaelkner needs to track stuff like "education level" for teachers.16:25
* th1a is remembering this stuff now.16:25
th1aSo at this point, it is just kind of hardwired.16:26
*** ignas has quit IRC16:26
aelkneremployer and academic qualification, too16:26
th1aSo when you edit person, it directs you to a different view based on the group?16:26
th1aBut everyone has the same schema?16:26
aelknerthe form schema is dynamically created16:27
replaceafillschema as in demographics fields?16:27
aelknerthen mapped onto the data inside the form code16:27
aelknerstudents have custom contacts for instance16:27
replaceafilland grade data16:27
aelknerand the student form has to use a custom FormAdapter16:28
th1aIn terms of demographic data.16:28
aelknerto get the contacts to show16:28
th1aI'm happy with the end result.16:29
*** ignas has joined #schooltool16:29
replaceafillin terms of demographics fields, all of them uses the same fields, just the student displays them all16:29
th1aI'm ok with that approach.16:29
th1aBecause down the road what we can do in SchoolTool core is modify the demographics setup page to allow you to specify which fields are relevant to which core groups.16:30
th1aIt is a pretty simple change.16:30
th1a(compared to some of the other possibilities)16:30
th1aSee what I'm saying, aelkner?16:31
replaceafilland then the forms should react according to the group?16:31
th1aBasically in each field ask "is the person in a group this field is relevant to?"16:31
aelknerthat sounds like a nce feature for down the road16:32
aelknerbut what about right now?16:32
th1aWell, essentially that's what Cambodia is doing, except hardwired.16:33
th1aWhich you could also do.16:33
aelknerhow does that help?16:34
aelkneri mean, i can keep teacher data in custom demo fields16:35
aelknerand i can have a custom form that puts the data there16:35
aelknerbut must i use the rocket science formlib approach?16:35
th1aI gather that was primarily necessary for contacts?16:35
aelknernot exacty16:36
replaceafillthe rock science approach is also used for presentation16:36
aelknerthere are two fieldsets16:36
replaceafillin the student forms16:36
aelknerit's a completely custom form16:36
replaceafill3 actually16:36
replaceafillstudent data, grade data, contact person16:36
th1aI like the completely custom form, it is much more usable.16:36
th1aBut that's not what I'm really worried about at this exact second.16:37
aelkneralso, the UI is crippled in schooltool.cambodia, most standard views are closed off from user16:38
aelknerdoes David Ally want the same?16:38
th1aHe might eventually.16:38
*** menesis has quit IRC16:38
*** menesis1 has joined #schooltool16:38
*** menesis1 is now known as menesis16:38
th1aBut we don't need to rush there.16:38
th1aAlso, we're not doing eternal open ended work for David.16:38
th1aSo let's just get to the point where we can create these census forms -- without completely recreating half the objects in our database.16:39
aelkneryou see, i had a plan for creating the census forms and storing all of the data16:40
aelknerin a simple data structure16:40
aelknerthat creates no new object types16:40
aelknerusing IAnnotations(app)['schooltool.niepa']16:41
aelknerI can put any data there I want using PErsistenDict and PersistenList16:41
aelknerand have the forms created in a table-driven fashion16:42
th1aLinked to the existing people and resources?16:42
aelknerwithout needing any formlib magic16:42
aelknerhow would I link to existing resources?16:42
th1aThat's what I'm asking you.16:42
aelknerI looked at the resource library, too16:42
th1aWe already have teachers and classrooms.16:42
aelknerteachers are persons16:43
aelknerwhch have custom demos16:43
aelknerresources have no such ting16:43
aelknerthere are three resource content types16:43
aelknerResource, Location, and Equiptment16:44
th1aSo we need a customized or extended Location.16:44
aelknerso I create a custom content type in schooltool.niepa?16:45
aelknerclass NiepaLocation(location):16:45
th1aI don't really know what the best way to implement it is,16:45
th1aexcept that a user should be able to add a location to the system and get the necessary fields, and the census should look at those objects in generating its report.16:46
aelkneragain, i'm not seeing how this benefits schooltool core16:47
aelknerwe create a custom location in schooltool.niepa16:48
aelknerwe have a custom form16:48
aelknerour census reports look for the resultant data in custom resource objects16:48
aelknerhow does that benefit schooltool core?16:48
th1aIt doesn't necessarily directly.16:49
th1aBut it benefits SchoolTool to implement a central use case needed by our customers.16:49
th1aAnd perhaps encourages us to give resources customizable fields.16:50
aelknerthe use case is get the census data into a schooltool instance and get it back out16:50
aelknerwhere that data goes is not important16:50
aelknerif the form of the data is not recognized outside of the custom package16:50
aelknerwhat difference does it make wat form that data takes?16:50
th1aWe can't ask users to enter the same data twice.16:50
aelknerwhy would we?16:51
th1aBecause we already have locations.16:51
th1aAnd, as far as I can tell, you're suggesting we create different locations, just for census data.16:51
aelknerno, i'm suggesting we don't need any new content types16:52
aelknerheck the whole of the census form can be kept in one data structure16:52
aelknerthat does not need to touch into other parts of the system16:53
th1aBut you're still suggesting the user enter locations twice, correct?16:53
aelkneri wasn't suggesting entering locations at all, that was your idea16:54
aelknerclassrooms as they are specified on the cencus form16:55
th1aSo you're suggesting adding locations in a way that cannot be used by the rest of the system, then.16:55
aelknerthe rest of the system?  what part of the system can deal with custom locations?16:55
aelknerif we had a system for resource demos16:56
aelknerin core already16:56
aelknerthen we could leverage that16:56
th1aWell, you can assign an event to a location, correct?16:56
aelknerif that's what i wanted to do, why?16:57
th1aWell, the thing is that locations are underutilized,16:57
th1abut it isn't like they are stupid or there is no reason for them to be there,16:57
th1ait is just one of our little backwaters.16:57
th1aBut if we are going to start routing around them entirely, we might as well remove them from the system.16:58
th1a(you can book locations for events, btw)16:58
th1aAlthough there's also a kind of redundant free form location field in there too.16:59
aelkneri haven't seen that one yet16:59
th1aI mean, look, it is ok if this leads us to a resource cleanup.17:00
th1aWe need that anyhow.17:01
aelknerthat would be core work, though17:01
* th1a drops the bag of gravel.17:01
* th1a and aelkner will keep chatting.17:01
th1aHave a great week gentlemen!17:01
th1amenesis:  Send that email!17:01
th1aaelkner:  That may be ok.17:02
replaceafillthanks everybody17:03
th1areplaceafill:  Do you have any thoughts about this conversation?17:03
aelknerth1a, thing is, if there is work that needs to be dne in core17:04
aelknerto make resources more flexible17:04
aelknerfor instance, the resource container view in core now assumes the three resource types17:04
aelknerand would not be able to handle a new resource type17:04
replaceafillth1a, i still think pilots should allow us to test stuff and then pull things out to core17:04
aelknerthus making it necessary to subclass the view and change in the custom package17:05
th1areplaceafill:  Yes, but we need to be smart about what we might want to use and core and what we'd definitely NOT use in core.17:05
aelknerfor instance, ApplicationPreferences17:05
th1aaelkner:  What if we just stuck with three content types and made them each customizable?17:05
aelknerlike demos for resources17:06
aelknerthat makes more sense than creating a new resource content type17:06
th1aOK then.17:07
aelknerso, assuming we already have added resource demos to core17:07
aelknerschooltool.niepa would add the resource demo fields at app init17:08
aelknerand the core resource views would know how to handle them17:08
th1aWe'd also provide sensible defaults in core.17:08
aelkneri can see much benefit in that approach17:08
th1ai.e. what they are now.17:08
aelknerwe already have the defaults in core17:08
aelknerand canging them now would be problmeatic17:08
aelknerwell, not too bad, i guess17:09
aelknerwhat did you have in mind as far as changing the defaults17:09
th1aI mean, just defaulting to what they are now, not nothing.17:10
aelkneryes, the default location fields are:17:10
aelkneractually, capacity is the only additional field form the base resource17:11
aelknerwich has title, description and notes17:11
th1aLocation type.17:11
th1aWhich perhaps needs to be changed in some way.17:12
aelkneri see type in the interface, but not in the implementaion17:13
th1aI suspect it is an overly magical implementation.17:13
aelknerclass Location(BaseResource):17:13
aelkner    """Location."""17:13
aelkner    implements(interfaces.ILocation)17:13
aelkner    capacity = None17:13
aelkneri think the implements statement there is a bit dishonest17:13
aelknerin other words, i could see saying location = Location('My class room')17:14
aelknerand verifyObject(location, ILocation) failing17:14
aelknerso that's weird17:14
aelknerbtw, the same is not true for Equiptment17:15
aelknerwhich has type = u"" in its class implementation17:15
aelknerso I guess i just found a bug incore17:15
th1aSo basically one task here is digging into resources.17:16
th1aWhat about the person side?17:17
aelknerwe can have custom demos set up in schooltool.niepa17:18
th1aThat would be something that we intend to merge into core though.17:18
th1aSo just keep that in mind.17:18
aelknercan't merge custom demos into core17:18
aelknerbesides core already supplies the mechanism for having custom demos17:19
aelknerschooltool.niepa would just deine it's own set17:19
aelknerfor the custom purpose it has17:19
th1aI was still on resources.17:19
th1aSpaced out.17:19
aelknerah, i see17:20
* th1a presses reset.17:20
aelkneryes, so you definitely want to have custom demos for resources in core17:20
aelknerand then have them used in schooltool.niepa17:20
aelkneras well as using the already supported custom demos for persons17:20
th1aOr push them to niepa first, but knowing we'll probably get them in core by the next release.17:20
th1aOn the person side, why don't you just start by adding the necessary fields to a regular custom demographic schema,17:21
th1aand then maybe next(ish) we'll implement the filtering demo fields by group thing, which will take several steps.17:22
replaceafillth1a, turning some (or all) the demo fields off would be a good feature?17:23
replaceafilli mean, if you don't use them, just turn them all off17:23
replaceafillif you just use 2 just leave those two on, etc17:23
aelknerso we need a content type in core that maps groups to custom demo felds17:24
th1aOn a per-group basis?17:24
aelkneractuall, a relationship might work17:24
replaceafillth1a, or in a simple use case17:24
th1aWe'd probably only do this for the built in groups, so you can assume they exist.17:24
th1aA list should work fine.17:25
replaceafilli think for instance of cando virginia users, they see all the demo fields, and the custom ones, they use some default ones and the custom ones17:25
th1aHiding the default ones?17:26
replaceafillthey dont use "language" for instance17:26
replaceafillnot all, just the one you dont want to use17:26
th1aThey can't be deleted now?17:26
replaceafillah! :D17:26
aelknerdemo fields can be removed17:27
aelknerbut that would effect all preson objects17:27
replaceafillwell, actually removing demo fields is like hiding17:27
th1areplaceafill's point is different.17:28
aelkneri can see benefit in having a group - demo fields relationship17:28
th1athan aelkner's current issue.17:28
replaceafillif you add the field again, the data is still there17:28
aelknerwhich would be used in the preson edit form17:28
replaceafillnever mind, nonsense though of mine ;)17:28
aelknerthat's ok17:29
aelknerbut if we had such a mechanism in core17:29
aelknerfor relating a list of demo fields to a group17:29
aelknerit wouldn't have to be only for teachers and students17:29
aelknerthe user could set up the relationship for nay group they wanted17:30
aelknerand the custom package could then set up those relationships in the app init17:30
*** ignas has quit IRC17:33
th1aThe UI is simpler if we limit the group choices, at least initially.17:33
aelknerhow do you mean?17:34
th1aIf you're choosing among five options instead of N.17:35
aelknerwell, if we add group demos17:36
aelknerthen i see having a link from the group view17:36
aelknerthere, the user would select/deselect from the master list of person demo fields17:36
aelknerbut that link would be dependent on the view context17:36
aelknergroup context, i mean17:37
aelknerso regardless of what group, you'll see the link17:37
th1aI would come at this from the demo interface -- choose groups.17:37
th1aI'm not strongly against just using all groups.17:38
aelknerso, stepping back a second, where are talking about two things:17:44
aelkner1) group relationship to demos so that schooltool.cambodia wouldn't have needed a custom student form17:45
aelkner    in the first place and schooltool.niepa could have different custom demos for staff17:45
aelkner2) resource demos17:45
th1aSomething like Cambodia, and maybe NIEPA is potentially different, if we're talking about a large scale.17:46
th1aFor Cambodia I want a hand-coded custom form to maximize usability.17:46
aelknerwell, the custom contacts part of it is cambodia only, i see that17:46
aelknerbut as for the rest of the fields17:46
aelknerthose that represent the demos17:47
th1aBut in core we need to get to "Add Student" which has student-relevant fields, "Add Teacher" which has teacher relevant fields.17:47
aelknerwould be automatically generated into the form (no need for cambodia to do it)17:48
aelknerbased on the group17:48
aelknerthat is, if that feature existed in core17:48
aelknerbtw, since IDemographics(person_object) is how we get the demo fields in our code17:49
aelknerall we need to do is change the adpater to take the group relationship into acount17:49
aelkneralso, the adapter would basically be able to handle the person belonging to multiple groups by doing17:50
aelknera union of the demo fields17:50
aelknerof each group the user belongs to17:50
aelkneras the person joins or leaves a group, the form will look different17:51
aelknerand what replaceafill sadi before17:51
aelknerabout the values coming back is true17:51
th1aYes... that's tricky.17:52
aelknerbut that's not necessarily a bad thing17:52
aelkneris it?17:52
th1aWe could also just display any values that were not none.17:52
th1aYou don't really want data disappearing without explanation.17:52
aelknerit's the old hidden versus removing paradigm that we use in the gradebook17:53
th1aEven then, you don't necessarily want things to hide themselves in a way that might seem magical.17:53
aelknerwell, if an administrator choses to remove a demo field, they want it removed, right?17:54
aelknerand if they say, woops17:55
aelknerthen they should be able to add it back and have the data come back17:55
aelknerthat's all i'm saying17:55
th1aI'm referring to if you change someone's group.17:55
th1aAnd data about them disappears.17:55
th1aAnd there is no way to get it back except adding them to the group again.17:56
aelkneri'm thinking you would expect the data to disappear if you are using the group demo filter17:56
th1aThe end user doesn't know about that.17:56
th1aI'm just saying, we might want to show non-empty fields.17:57
aelknerat the end of the form in a separate fieldset, right?17:57
Lumiere'morning everyone (from Bright, Warm, and Sunny Denver)18:06
aelknerhey Lumiere18:09
Lumierehow's schooltool doing?18:10
LumiereI'm planning to visit welsh'/elkner friday18:10
th1aWe're huge in Portugal.18:10
Lumierevery cool18:13
*** alga has quit IRC18:41
*** replaceafill has quit IRC19:13
*** menesis has quit IRC20:24
*** alga has joined #schooltool21:22
*** menesis has joined #schooltool21:47
*** menesis has quit IRC21:54
*** menesis has joined #schooltool21:55
*** replaceafill has joined #schooltool23:01

Generated by 2.15.1 by Marius Gedminas - find it at!