IRC log of #schooltool for Wednesday, 2007-12-05

th1a_Anyhow, generally, when the term ends, you want to allow a period of time for grades to be calculated, and then lock the records.00:00
ignasthese are not affected by the things i am going to do00:01
ignasi mean it's up to the gradebook to decide00:01
ignashow to react to the term ending00:01
th1a_Yes, that's the gradebook's problem.00:01
ignasmost probably old code using sections, timetables, groups and persons will still work00:02
th1a_Well, that's good.00:03
ignasjust that such code will not be paying attention to the history of these objects00:04
ignasthus will only see the current state00:04
th1a_That makes sense.00:04
ignaswhat i am mostly worried about is - permissions and access control00:04
ignasit is quite difficult to think aobut them while taking the past into account00:05
*** jhancock__ has joined #schooltool00:05
th1a_In general, your ability to change the past should be limited.00:06
ignasnot just change00:06
ignasjust the usecase of "you were a teacher of a section for 2 months"00:06
ignasvs " you were the last person teaching this section"00:07
th1a_Well, hm.00:07
th1a_Changing the teacher of a section is just inherently messy.00:08
ignasi will probably stick to relationships that were during the last day of the term/school year objects belonged to00:08
th1a_I mean, the business practices for changing the teacher of a section are very unclear.00:08
ignasmembers are fishy too, like - if you were a member of a section for 4 monthes, and then you got removed from it00:09
ignasyou sohuld be able to see at least some data00:09
ignasrelated to that period of time00:09
ignaslike your gradebook00:09
ignasfor that subject00:09
th1a_I think in practice the solutions to the individual cases aren't that hard.00:09
ignasi hope so00:10
ignasdo we have any other choice?00:10
th1a_Insofar as, if you were ever in the section, you can probably safely see everything in the section you would be able to if you were still in it.00:10
th1a_Being able to see what assignments you're not doing isn't a big deal, for example.00:11
th1a_I mean, SchoolTool will have to be able to say two things.00:12
th1a_Are you in this course now?00:12
th1a_Were you ever in this course?00:12
th1a_If you withdrew, when?00:12
ignasa new set of crowds i guess00:12
ignasTeachersCrowd and an ExTeachersCrowd00:12
th1a_OK, I vote for not removing teachers from sections.00:13
th1a_If the teachers change, you've got two teachers.00:13
*** didymo has joined #schooltool00:14
ignasdoing these two and tracking them is not too difficult, it's the concept of your role flowing and changing during the lifetime of the system00:14
th1a_In practice, that transition is unlikely to be clean.00:14
th1a_Here's another use case though: substitute teachers.00:15
th1a_You need to give them a temporary login and let them take attendance or grade in the place of the main teacher.00:15
ignashmm, i guess it is easier to make him a normal teacher, and then disable his user, though i don't really know how things will turn out at the moment00:16
ignasit might be quite easy00:16
th1a_Well, it is also the kind of case where it is easier if you aren't doing super-anal legally binding in the US attendance tracking.00:17
ignasactually attaching sections to terms and tracking their members during the term will make it possible to do some weird things00:19
th1a_But the substitute case is a good one for having some system for making someone a teacher of a section for a limited period of time.00:19
th1a_Good weird or bad weird?00:19
ignaslike - having members of a section change, while changing time for lessons sometimes while everything is working together00:20
ignasgood weird00:20
ignasi have tried to make implementing the modifiable timetabling as easy as possible00:20
ignasthough it requires looking at schooltool from a strange perspective00:21
ignas(have you ever worked with 2d/3d animation software?)00:21
*** jhancock_ has quit IRC00:22
th1a_A little.00:23
ignasyou know the concept of keyframes00:24
th1a_I think I see where you're going.00:24
ignasso the idea is having school years and Terms define the timeline00:24
ignaswith discrete slots00:24
ignasschool days00:24
ignaswhile sections are storing their state (if it changes) in any of the slots that exists in the related timeline00:25
ignasso you can modify the first keyframe to change the object for the whole term00:25
ignasyou can add "keyframes" that add/remove members00:25
ignasyou can later modify them even00:25
ignaswhile the system can get a consistent state of the object by passing a schoolday that it cares about00:26
ignasso making lessons during some school day 5 minutes schorter just adds 2 "keyframes"00:27
ignasone that changes the timetable schema to a compatible one with different period lengths, and another one that switches it back00:27
ignasit's quite strange, but some things are moving towards the design that you and Stephan worked on00:29
ignaswell not strange ;)00:29
ignasa lot of the ideas were really good00:29
th1a_Well, it is simpler if you don't have to also think about wfmc.00:29
th1a_Just take out the shiny new hammer.00:30
th1a_That is, remove the shiny hammer.00:31
ignashammer is dead, long live the hammer ;)00:32
*** jhancock__ has quit IRC00:36
*** jhancock_ has joined #schooltool00:39
*** ignas has quit IRC01:32
*** kkubasik_ has joined #schooltool03:21
*** kkubasik has joined #schooltool03:21
*** kkubasik__ has joined #schooltool03:23
*** kkubasik__ has quit IRC03:24
*** kkubasik_ has quit IRC03:40
*** jhancock_ has quit IRC04:16
*** Fujitsu_ has joined #schooltool04:23
*** Fujitsu has quit IRC04:23
*** Fujitsu_ is now known as Fujitsu04:58
*** alga has quit IRC05:56
*** didymo has quit IRC06:18
*** subir has joined #schooltool08:28
*** mgedmin has joined #schooltool12:18
*** Aiste has quit IRC13:28
*** subir has quit IRC13:35
*** alga has joined #SchoolTool14:42
*** kkubasik has quit IRC15:35
*** th1a has joined #schooltool15:39
*** alga has quit IRC15:39
*** ignas has joined #schooltool16:03
*** aelkner has joined #schooltool16:12
ignasaelkner: hi16:16
aelknerhey there16:16
aelkneri did a lot of reading last night on relationships16:16
aelkneri had avoided that code for some time as i didn't need to understand it16:16
aelknerbut now with the section issues, i do16:16
aelknerso i get how LinkSets are added to object's annotations16:17
aelkneri'm currently trying to figure out how RelationshipProperty can be used as a lsit16:18
aelkneri'm guessing there's some magic wtht he __get__ method16:18
aelknerthat causes it to be a list16:18
aelknerbut i need to read up on __get__ which i'm doing now16:18
*** alga has joined #SchoolTool16:18
th1ahey aelkner, ignas.16:23
aelknerhry Tom16:23
aelkneri was telling ignas that i'm having trouble figuring out how a RelationShipProperty becomes a list16:24
aelknerbut i guess that's not important for the discussion of terms16:24
th1aYes, I can see what you were talking about ;-)16:25
aelknerreading the python docs on __get_ is not helping yet.16:25
aelknervery confusing16:25
ignasaelkner: isn't __iter__ the part that does the list stuff16:26
aelknerit alwasys does16:26
ignasand __getitem__16:26
ignasif you want the direct access to some element in the list16:26
aelknerbut RelationshipProperty doesn't have that16:26
aelknerit just has this __get__ method16:26
ignasyep, RelationshipProperty is a descriptor16:27
aelknerBoundRelationshipProperty has __iter__16:27
aelknerso it's just a matter of understanding what it means to bind16:27
aelknerperhaps when one goes for the __iter__ of a RalationshipProperty object16:28
aelknerit results in finding the __iter__ for a BoundRelationshipProperty object16:28
ignasnot really16:28
ignasrather when you access foo.members16:29
ignasinstead of getting RelationshipProperty16:29
ignasyou get the BoundRelationship property16:29
ignasbound to the instance16:29
mgedminaah, descriptors16:29
ignas(RelationshipProperty was created in the class)16:29
ignasaelkner: - Advanced Python16:30
ignaswatch this16:30
th1a_I just hit you with a load of blueprint spam.16:42
th1a_That must be a long video.17:16
ignas1 hour or so17:19
ignasit's worth it17:21
*** jelkner has joined #schooltool17:33
th1a_jelkner: I had one comment on your blueprints.17:37
th1a_Which I'm sure you would have preferred to have before yesterday.17:38
aelknerignas: i watched the video, and it's one of those things that i think takes repeated viewings to understand fully17:51
aelknerperhaps other references would help, too17:51
aelknermainly, he talks breifly about concepts17:52
aelknerbut he doesn't go into detailed examples17:52
aelknerwhich is where i usualyy gain understanding17:52
aelknerbut i saved it away for future viewing17:52
aelknerignas: are you there?17:53
ignasa sec17:53
aelknerwhen you are ready could you please verify or deny the following:17:54
aelknerin section for example17:54
aelknerwhen someone says mysection.members17:54
aelknereven though members is defined as a RelationshipProperty17:55
aelknerwhich has no __iter__17:55
aelknerthey will get the __iter__ for the BoundRElationshipProperty class17:55
aelknerIn other words RElationshipProperty is a desriptor of BoundRelationshipPeroperty17:56
aelknerbut even saying that, i'm not sure what i mean17:56
aelknerbut am i on the right track?17:56
ignasnot the __iter__, they will get the BoundRelationshipProperty itself17:57
aelknermysection.members,__iter__ i meant17:57
aelknermysection.members.__iter__ i meant17:58
ignasthe "mysection.members" is17:58
ignasnot RelationshipProperty17:58
ignasbut rather a BoundRelationshipProperty17:58
ignaswhile mysection.__dict__['members'] is a RelationshipProperty17:58
ignasso mysection.members retrieves RelationshipProperty from the __dict__, then sees that it has an __get__ method17:59
ignasand calls it17:59
ignaswhich yields a BoundRelationshipProperty object17:59
ignasthat you see when you look at mysection.members17:59
aelkneri noticed that in pdb once18:00
aelknersaving mysection.mebers yielded <BoundRelat... >18:00
aelknerso I think i get it now18:00
aelknerbut i'm not quite sure why we need RelationshipProperty18:01
aelknerif instance is None18:01
aelknerwhy would that be true?18:01
aelkneris it for when someone wants to look at members as a class attribute when there is not yet any instance?18:03
ignasi guess18:07
ignasfor the case when you do18:08
ignasnot really sure about it18:08
aelknerok, i'm done asking about it as I know it will work in a way that i can expect18:09
aelknerso i'm reading the rest of your chat from yesterday to catch up18:09
aelknerignas: i read your discussion with th1a, but i'm still hazy about your design ideas (regardless of security)18:31
th1a_Hazy about what?18:32
aelkneri mean, could you perhaps give an example of the object interaction of terms and sections?18:32
aelknerterms are date ranges with schooldays logic, i see that18:32
aelknersections have members and instructors18:33
aelknerhow would you see them interacting?18:33
ignasyou see - when school year ends18:33
ignasold timetables become pretty much useless for the next year18:33
ignasmost schools do them form scratch every year18:33
aelknermakes sense18:34
ignasnew sections, with new members18:34
aelknerthat's what i wold expect18:34
th1a_A specific section shouldn't last longer than a year ever.18:34
ignasso while person and school years are permanent objects18:34
ignassections only live as long as a yeatr18:35
ignasmost of the time - only 1 term actually18:35
aelknerwhen you say lve, you're referring to locking out changes, right?18:35
ignasyes, changes like "members" for example18:35
ignasif you kick someone after the last day of the term - it just does not change anything18:36
ignasyou still can delete the user from the section so it would look like he never was in the section18:36
ignaseven if the term is over18:36
aelknerand we want to prevent that18:36
ignasbut you can't delete a user in the way that is tracked by the system as a sensible change18:36
ignaslet me try18:37
th1aWell, there is some question about whether a year is a term.18:37
ignaswell - if you are not redoing timetables in the middle of the year18:37
ignasyou probably don't need terms, and if you are redoing timetables - sections should expire18:37
ignasnow for sections18:37
ignaswhat you can do with a section that is "connected" to a specific term18:38
ignasyou can say that "pete" is in section since day 118:38
ignasyou can say that "john" was in the section from day 1 and got kicked out of it on day 5018:38
ignaswhat you can't say (and that is because the section is related to the term)18:38
ignasthat "ann" was in the section since day 1 but got kicked out of it on day 50018:39
aelknercould you explain how that would look in the section object def18:39
ignasaelkner: i don't know, i don't have the implementation at the moment, my idea is that you have 2 ways to query the data18:39
ignasyou either ask for the snapshot with a specific school day in mind18:39
ignasor you ask for the snapshot for "today"18:39
ignasdefault is today18:40
ignasso you would see current members of the section18:40
ignasbut if you pass it some "old" school day - you can see the section it was some time ago18:40
ignaswith an interface to go through all the changes (needed to dsiplay a sane gradebook)18:40
ignaslyceum gradebook18:41
ignassection attendance in your case18:41
ignasold code will probably work most of the time, but it will be showing only the "current" state of the system18:41
ignasso if you delete john from the section - old parts will think that john was never in there18:41
ignaswhile new parts of the system will be capable of showing that john was there, but now is not18:42
aelkneryou mean when someone iterates over mysection.members, they get only the current members18:43
ignasjust as they do now18:43
aelknerwhich is ok most of the time18:43
ignasbecause we don't have the tracking18:43
ignasyes, most of the time it's ok18:44
aelknerliek attendance18:44
aelknerbut for a grading perios18:44
aelknerwe need to see the student who is no longer there18:44
ignasin attendance - it's not ok, because you want the state of the section during that specific date you are doing attendance for18:44
aelknerbut was there at the start18:44
ignasyou will need to do that, at the moment - it works and you are not doing it18:45
ignasbut yes - the gradebook will probably have to be modified18:45
ignasto take advantage of the new features18:45
aelknerso we need to query members by time18:45
ignasyes, it should be quite easy if your grading periods have time spans defined for them18:45
*** kkubasik has joined #schooltool18:46
ignasotoh - the data will be there, but it will be the job of the gradebook to either take advantage of it18:46
ignasor not ;)18:46
aelknerwe should define the members attribute as boing a query18:47
aelknerwith the date as an argument18:47
aelknerans perhaps today as the defult18:47
aelknerif we make it a property18:47
ignasi don't really know what the interface will be at the moment18:47
aelknerthat takes one argument that is optional?18:47
aelknerthen the old code would still work?18:48
ignasit will take time to settle everything down, and to implement it18:48
ignasbut yes - i will try to keep the old code working18:48
ignasyou will maybe have to adapt the section to some interface to access it's history18:48
aelkneri need to see the implementation (even if it is just what if) in order to understand the problem18:48
ignasthere is no implementation18:49
ignasthere is a set of usecases18:49
aelkneri'm talking what if18:49
ignasand a drawing on the whiteboard18:49
aelknerthe whiteboard?18:49
aelkneris that something i could look at?18:49
ignasyes, in my office ;)18:49
aelknerthat helps :)18:49
ignasi can take a photo, no it won't help too much18:49
aelknercould you indulge my discussion for a moment18:50
ignasindulge ?18:50
aelknerand consider what members might look lke in an implementation18:50
aelknerwe have code that does list(mysection.members)18:50
ignasi don't know, i have yet to design it18:50
aelknerindulge me, what if?18:51
aelknerwhat if members were a property?18:51
aelknerlist(mysection.members) would work18:51
aelknerbecuase the property would have a defult date18:51
aelknerlike None meaning today18:52
aelknerthen anyone needing historical members18:52
aelknerlike the gradebook18:52
aelknercould use the grading period dates to get all members of the grading period18:52
aelknerdef members(self, date=None):18:52
aelkneretc, etc.18:53
ignasemm, properties don't work this way18:53
aelknerdoes this look like something that could potentially make sense?18:53
ignashaving a property that acts as a list and as a callable at the same time is possible18:53
ignasbut it is a hack18:53
ignasthe history access will be needed for a lot of objects18:53
ignaslike half of all the objects in schooltool18:53
ignasso i am thinking of having some adapters (maybe)18:54
aelknerok, forget my recent idea18:54
aelknerso members always will return the current members18:54
aelknerand a new method (or adapter) would give historical access18:54
ignasmaybe i'll make it like ISectionHistory(section, date)18:54
ignaswhich returns an ISection object18:55
ignasthat is tied to that date18:55
ignasand IKeyframes(section).__iter__()18:55
ignasto go through all the changes18:55
ignasin an efficient manner18:56
* mgedmin wonders why IKeyframes instead of IKeyFrames18:56
aelknerwhere do you think the historical membershp could be stored?18:57
ignasin the section18:57
ignasi will be rewriting most of the objects18:57
ignasprobably directly18:57
th1a_Perhaps it is good we didn't get a release in Gutsy.18:58
aelknerare you refering to changing section class and evolving?18:58
th1a_I guess we will have to evolve for CanDo.18:58
ignasmost of the things that need their history tracked18:59
ignashave the trackable information18:59
ignasin annotations18:59
ignas(relationships for example)18:59
aelkneri noticed18:59
ignasso section will get an attribute for storing of it's keyframes18:59
ignasa new class will appear that will define a keyframe for a section18:59
ignasand an initial keyframe will be created from the initial state of the section19:00
aelknermay i interrupt to ask for definiiton of keyframe?19:00
aelkneri say you and Tom discuss it,19:00
aelknerbut i'm not familiar19:00
ignaswell - section is an object19:00
ignasterm is a set of discrete steps in time19:01
ignasso you can look at the combined thing as an animation19:01
ignasanimations are defined using a "state" like (this sphere is in coordinates x,y)19:01
ignasand a set of keyframes of the format (t1, x1, y1)19:01
ignasso if you remove peter, you can store either the whole state in the slot, or just the delta19:02
aelknerso a keyfram is a state for a given time19:02
aelkneror a delta19:02
ignasthe point is that when you take some specific school day19:02
ignasyou can reconstruct the state of the object in that time by taking the initial state19:02
ignasand combining it with all the states inbetween the t0 and the school day you are interested in19:03
aelknergot it19:03
aelknerso 10 days into the term, jonny is removed19:03
aelknerresults in delta -jonny19:03
aelknerso the adapter will go through the logic you referred to to return a section with the right members for that date19:04
ignasthe whiteboard19:06
aelkneri think the word chaos is appropriate :)19:07
aelknerbut all kidding aside, i think i'm getting an idea of where this is heading19:08
aelknerand it doesn't look like it will be hard to use19:08
aelknerwhat about grading periods?19:09
aelknerthey would also be derived from DateRange, right?19:09
ignasyes, just that they would not matter ;)19:09
ignasas in - they will not be "time managers" for any of the content objects19:09
ignasmost probably at least19:10
ignasit is possible to implement them outside of terms actually19:10
aelkneri have a worksheet which is a grid of students by activities19:10
aelknercurrently the worksheet has not time19:10
aelknerbut it would need to19:10
ignasnot necessarily19:11
aelknerin orrder to bring up the right students19:11
ignasit's up to the logic you want to have19:11
ignasand what you want to do with students that get removed in the middle of the term19:11
ignasif you want them to have only grades for the first grading period - then you can add dates to worksheets19:11
aelkneri think it only makes sense to have all students that were in the section for at least one day appear in the worksheet19:12
ignasbut it's still up to you to decide if a person has grades if he was present in the end of the period, or if he was present in the beginning19:12
aelknerso the worksheet having a date range would help19:12
aelknerup to the teaher you mean19:13
ignasor up to you19:13
aelkneri woudl think that the student needs to appear19:13
aelknerthat reminds the teacher of the history19:13
aelknerbut then again the teacher may not want to see the student19:14
aelknerif they left the class after only one day19:14
aelknerdidn't do any assinments19:14
aelkneror as you say19:14
aelknerif they entered right at the end19:14
aelknermaybe the teacher doesn';t want to give them a grade for the worksheet19:14
ignasyou will always be able to remove the student as if he wasn't in the section by the way19:15
ignasyou will modify the keyframes['0']19:15
aelkneranother adpater that would remove the deltas?19:15
ignasand wham - the student is gone without any trace19:15
ignasnot remove, just modify19:15
aelknerand the teacher shoudl have a UI element to remove the student19:15
ignasi mean - if it was a mistake19:16
ignasand the student shouldn't have ever been in the section19:16
ignaslike when I imported some students from the last year19:16
ignasbecause of a copy paste error in gnumeric19:16
ignasso when performing a tracked operation19:17
ignasadministrator will have an option to say "since when" does it happen19:17
ignaslike - lessons will be shorter since 2008-01-2519:17
ignasor pete is not a member since beginning of the term19:17
ignas(which means - he never was a member)19:17
ignasit just makes it a bit more convenient to think about such transformations to me19:18
ignaswhen I look at the problem from this perspective19:18
aelknerso definitely key frames is the main paradigm19:18
ignasremoval of a member is the same operation in both cases, but the object that get's modified is different19:19
ignasand the part that defines "objects" or rather "slots" for these keyframes is the "Term"19:19
ignasor a "school year"19:19
ignasor some global "time scale"19:19
ignasfor objects that outlive everything19:19
aelkneri noticed that currently sections can have multiple terms associated with them19:20
aelknerso that won't change, right?19:20
ignasyes, but from my experience that does not make too much sense when scheduling19:20
ignasit makes creation of new timetables automatically too complicated most of the times19:21
ignasit is easier to redo sections from scratch even if they haven't changed19:21
ignasthan to reuse sections while creating a new schedule if they have changed19:21
ignasand redefine what a term is if your sections do not change for the whole year19:22
ignasi mean - if you divide the year, but don't change the timetable, nor sections in between of the divisions - maybe you only need grading periods ...19:22
ignaswith one large term19:23
aelknerok - i have to close this down and get ready for today's CanDo meeting19:25
aelknertomorrow i have a funeral to go to, so I might not get online until late in the day19:26
aelkneri'll check the logs though19:26
*** aelkner has quit IRC19:26
*** jelkner has quit IRC19:51
*** ignas has quit IRC20:12
*** mgedmin has quit IRC20:53
*** Ninno has joined #schooltool21:07
*** didymo has joined #schooltool22:41
*** Ninno has quit IRC22:50
*** kkubasik has quit IRC23:07

Generated by 2.15.1 by Marius Gedminas - find it at!