*** th1a_ is now known as th1a | 00:25 | |
*** ignas has joined #schooltool | 01:08 | |
*** ignas has quit IRC | 02:03 | |
*** jinty has left #schooltool | 04:22 | |
povbot` | /svn/commits: * hoffman committed revision 5420: | 08:08 |
---|---|---|
povbot` | /svn/commits: Small edits and a few XXX-ed comments. | 08:08 |
povbot` | /svn/commits: * hoffman committed revision 5421: | 08:44 |
povbot` | /svn/commits: I added a few "how to use this document" paragraphs to the end of the README. Perhaps they should go earlier in the document. | 08:44 |
*** Aiste has quit IRC | 09:25 | |
*** Aiste has joined #schooltool | 10:02 | |
*** jinty has joined #schooltool | 10:58 | |
*** ignas has joined #schooltool | 12:29 | |
*** vidasp has joined #schooltool | 13:03 | |
*** alga has joined #SchoolTool | 13:37 | |
*** mgedmin has joined #schooltool | 13:42 | |
*** thisfred has joined #schooltool | 14:40 | |
*** mgedmin has quit IRC | 15:22 | |
tiredbones | srichter, are you going to be given a talk, at the boston-pig, on zope 3 soon? | 15:35 |
*** alga has quit IRC | 15:43 | |
th1a | Hello everyone. | 16:30 |
th1a | Everyone awake? srichter, mgedmin, ignas? | 16:32 |
ignas | yep | 16:35 |
th1a | OK, that's one... | 16:35 |
*** mgedmin has joined #schooltool | 16:37 | |
th1a | Ah. There's mgedmin. | 16:37 |
mgedmin | hi, th1a | 16:38 |
th1a | hi mgedmin. | 16:38 |
th1a | So how did things go last week. | 16:38 |
th1a | Seemed like you made some progress on Friday. | 16:38 |
mgedmin | we finished the Sci-Fi, I think | 16:38 |
mgedmin | although one of the stories is a bit unclear | 16:38 |
mgedmin | th1a, perhaps you could elaborate on the absence workflow user interface | 16:39 |
mgedmin | ? | 16:39 |
*** alga has joined #SchoolTool | 16:39 | |
mgedmin | the story just says "If the | 16:39 |
mgedmin | user has the proper access, he or she can modify the workflow status | 16:39 |
mgedmin | of unresolved incidents from the attendance view." | 16:39 |
alga | hi | 16:39 |
th1a | Right. | 16:39 |
th1a | alga: How was windsurfing? | 16:39 |
th1a | mgedmin: I hadn't given that a lot of thought. | 16:40 |
alga | th1a: brilliant, thanks | 16:40 |
mgedmin | th1a, nice article btw: http://pyre.third-bit.com/blog/archives/000292.html | 16:40 |
mgedmin | (hint, hint) | 16:40 |
th1a | mgedmin: That's very encouraging, thanks. | 16:41 |
mgedmin | :) | 16:41 |
mgedmin | back to pov status\ | 16:42 |
mgedmin | sci-fi (aka API design): finished | 16:42 |
mgedmin | API implementation: 50% done | 16:42 |
mgedmin | realtime attendance form: just started | 16:42 |
mgedmin | school-wide timezone preference: 80% done | 16:43 |
mgedmin | have I left anything out? ignas, vidasp. alga? | 16:43 |
* mgedmin over | 16:44 | |
th1a | OK, let's discuss the workflow interface for a bit. | 16:44 |
mgedmin | let's | 16:45 |
th1a | These will be resolved whenever a student brings in an excuse. | 16:45 |
mgedmin | so, a text area for entering the excuse | 16:45 |
mgedmin | and two buttons "accept & resolve", or "reject and wait for a new excuse"? | 16:45 |
th1a | That sounds right. | 16:46 |
th1a | Navigate to the individual absence event. | 16:46 |
th1a | From the person to the absence, I'd think. | 16:46 |
th1a | Does that make sense? | 16:47 |
mgedmin | maybe | 16:48 |
mgedmin | so, each absence has an individual page for adding explanations & resolving it | 16:48 |
mgedmin | you may enter more than one explanation | 16:48 |
th1a | Hm... I suppose sometimes you'll have one excuse that covers several days. | 16:49 |
mgedmin | initially an explanation is not reviewed, and you get two buttons next to it | 16:49 |
mgedmin | "accept" and "reject" | 16:49 |
mgedmin | if you hit "accept", the workflow is finished and the absence is excused | 16:49 |
mgedmin | if you hit "reject", the explanation is marked as rejected and displayed accordingly | 16:49 |
mgedmin | and you have to add a new explanation | 16:49 |
mgedmin | does that sound right? | 16:49 |
* mgedmin hmms | 16:49 | |
mgedmin | yeah, or even if you skipped just one day, you may have a day absence and five section absences | 16:50 |
srichter | good morning | 16:50 |
mgedmin | hi, srichter | 16:50 |
th1a | Good morning, srichter. | 16:50 |
srichter | sorry for being late, dropping car at the dealer took longer than expected | 16:50 |
mgedmin | srichter is strong if he can lift and drop cars on people | 16:50 |
th1a | Well, the section absences have to be associated with the day absence somehow. | 16:51 |
mgedmin | or did you use a crane | 16:51 |
mgedmin | ? | 16:51 |
srichter | no, pure mussles :-) | 16:51 |
alga | mgedmin: http://pyre.third-bit.com/blog/archives/000292.html | 16:51 |
mgedmin | alga, it also says "no laptops" :) | 16:51 |
mgedmin | th1a, do you have any suggestions about the association? | 16:52 |
mgedmin | a student's attendance view | 16:52 |
mgedmin | that lists all unresolved absences | 16:52 |
mgedmin | and you can select several of them | 16:52 |
mgedmin | and click "resolve" | 16:52 |
mgedmin | which would give you a form for entering the explanation | 16:52 |
mgedmin | and a checkbox saying whether that explanation was acceptable | 16:52 |
mgedmin | (if yes, then all those absences are excused, and workflow ends) | 16:53 |
mgedmin | (if no, explanation gets stored, but the absences remain unexcused) | 16:53 |
th1a | Yes, it probably needs to work like that. | 16:53 |
mgedmin | th1a, one question: will the accept/reject decision be done at the same time and by the same person who enters the student's explanation into the system, | 16:54 |
mgedmin | or should entering the explanation and accepting/rejecting be separate steps | 16:54 |
mgedmin | perhaps done by different people | 16:54 |
th1a | From the users point of view, if there is a day absence, they don't want to see all the individual section absences on that view as well. | 16:54 |
mgedmin | at different times | 16:54 |
th1a | Accept/reject is mostly done later, although it should be possible to do it at the same time. | 16:55 |
mgedmin | ok | 16:55 |
th1a | And it might be the same or different people. | 16:55 |
mgedmin | th1a, it would be very nice to have some user interface sketches... (in html, or scanned pencil & paper drawings) | 16:55 |
th1a | OK. | 16:56 |
th1a | I don't see the resolution form being very elaborate. | 16:57 |
mgedmin | good | 16:57 |
th1a | Do you have any questions for srichter about viewlets? | 16:58 |
mgedmin | not at this point | 16:58 |
mgedmin | do we plan to use viewlets for attendance? | 16:58 |
th1a | Yes, we do. | 16:59 |
mgedmin | I imagined that a student's attendance page will be a separate page | 16:59 |
mgedmin | not included as a sidebar on some existing page | 16:59 |
th1a | srichter: Do you want to jump in here? | 16:59 |
*** pingswept has quit IRC | 17:00 | |
srichter | I agree with MArius | 17:00 |
srichter | :-) | 17:00 |
srichter | viewlets are not something you decide to use in a particular feature | 17:00 |
srichter | but something that you use to not make your packages depend on each other | 17:00 |
th1a | Right, but won't they need to register things in an "Actions" viewlet or something like that? | 17:01 |
srichter | for example, I will make the "note sidebar" a viewlet as part of the documentaiton effort | 17:01 |
mgedmin | that's a menu | 17:01 |
srichter | I think the actions are still menus, right | 17:01 |
srichter | so I am contemplating converting them to viewlets | 17:01 |
mgedmin | rationale? | 17:02 |
srichter | in fact, I think for Zoep 3.3 I might suggest implementing menus as viewlets | 17:02 |
srichter | the action might be more than a link | 17:02 |
mgedmin | so, would the whole menu be a viewled, or would each menu item be a viewlet? | 17:02 |
srichter | I also find the conditions being TALES somewhat limiting | 17:02 |
srichter | right, a menu item would be a viewlet and a menu would be a viewlet manager | 17:03 |
mgedmin | but that's all under the hood, right? you would still use just a single zcml directive to register a simple menu item | 17:03 |
mgedmin | (and you could write a fully-fledged viewlet if you wanted an highly dynamic menu item etc) | 17:04 |
mgedmin | ? | 17:04 |
srichter | yes | 17:04 |
srichter | right | 17:04 |
th1a | So to achieve the goal of "to not make your packages depend on each other," is there anything in particular POV needs to be aware of? | 17:04 |
srichter | yes | 17:05 |
* mgedmin would be very happy if we managed to eradicate circular imports in ST | 17:05 | |
srichter | *sigh*, yes! | 17:05 |
srichter | basically, don't write view code that should really belong to another package inside your code | 17:06 |
srichter | the prime example, again, is the note for a person | 17:06 |
* mgedmin nods | 17:06 | |
srichter | the person detail screen should never know about notes | 17:06 |
srichter | this can be solved using a viewlet | 17:06 |
* mgedmin nods | 17:06 | |
srichter | basically, the person detail view defines a right column (viewlet manager) with which other packages can register viewlets, for example the notes | 17:07 |
srichter | I will do this particular conversion, because I want to add commendation viewlets in that screen as well | 17:07 |
th1a | OK, so does that make sense? | 17:09 |
mgedmin | absolutely | 17:09 |
th1a | All right. Moving on then. | 17:09 |
th1a | We need to put out a snapshot tarball either before Christmas or New Years. | 17:10 |
th1a | I would like the attendance system to do something at that point, although I know it won't be done. | 17:10 |
th1a | Would you guys prefer to have that release come before Christmas or between Christmas and New Year's? | 17:10 |
mgedmin | more time == better | 17:11 |
th1a | The "release process" in this case just consists of creating a tarball and putting it on the web. | 17:11 |
mgedmin | and giving it a version number perhaps | 17:11 |
th1a | Right. | 17:11 |
mgedmin | or at least making sure db generation evolution scripts work | 17:11 |
ignas | so if we will semi accidentaly manage to make it on christmas - we can do a release ? | 17:11 |
th1a | So Dec. 30th? | 17:11 |
ignas | +1 :) | 17:12 |
mgedmin | we should have a candidate a couple of days earlier | 17:12 |
th1a | Jan 3rd? | 17:12 |
mgedmin | and test it a bit | 17:12 |
th1a | We'll do our regular Tuesday release. | 17:12 |
mgedmin | tuesday is either 27 or 3 | 17:12 |
th1a | So candidate on the 29th and release the 3rd? | 17:13 |
mgedmin | +1 | 17:13 |
th1a | OK. That's settled. | 17:13 |
th1a | All right, let's talk about Stephan's commendation package for a minute. | 17:14 |
th1a | If everyone else can take a second to skim over the documents. | 17:14 |
th1a | srichter: I checked in an addition to the README last night. | 17:15 |
srichter | I just read through it | 17:15 |
th1a | Feel free to edit it. | 17:15 |
srichter | yep, right now it looks good | 17:15 |
th1a | Probably it should be above the table of contents. | 17:16 |
srichter | on Friday I got a bit stuck on what to do | 17:16 |
th1a | In terms of? | 17:16 |
srichter | I can either implement a namespace for commendations or I take the note approach, in which case all commendation views are views of components providing IHaveCommendation | 17:17 |
srichter | the first approach allows me to use more common patterns | 17:17 |
srichter | the second make the implementation a bit easier, since you do not have a namespace | 17:17 |
* mgedmin does not want to see '++' signs in URLs, ever | 17:18 | |
srichter | I, on the other hand love them :-) | 17:18 |
th1a | Probably easier is better. | 17:19 |
srichter | namespaces are so easy to use :-) | 17:19 |
mgedmin | dark side is tempting | 17:19 |
th1a | So far my reaction to the tutorial is "oh, so *that's* all you have to do?" | 17:19 |
srichter | why do you think it is dark? | 17:19 |
srichter | th1a: great! | 17:19 |
srichter | though the hard part is coming | 17:20 |
srichter | I'll take Marius' dislike-sentiment for now and shy away from namespaces | 17:20 |
mgedmin | yay | 17:20 |
th1a | I'd like to know mgedmin's reasons, anyhow. | 17:20 |
mgedmin | readable URLs | 17:21 |
th1a | srichter: I think you need to add two things to make this a bit more clear. | 17:21 |
th1a | * more explanation of the individual steps in the doctest. | 17:21 |
th1a | For example "First, we have to make a stub implementation of the student class:" | 17:22 |
srichter | what is not redable about "stephan/++notes++/reminder"? | 17:22 |
th1a | You sort of assume that all Python code is inherently readable. | 17:22 |
mgedmin | the ++ signs are completely gratuitous | 17:23 |
mgedmin | what's wrong with stephan/notes/reminder? | 17:23 |
th1a | * more comments in the code | 17:23 |
srichter | I guess our new pluggable traverser framework makes it easier to not use namespaces | 17:23 |
srichter | btw, we should strive to get that package into Zope 3.3 | 17:24 |
th1a | I know comments make the code look longer and more complicated than it is, but if someone has gotten to the tutorial, they've got pretty good motivation. | 17:24 |
srichter | th1a: ok | 17:24 |
th1a | Otherwise, I think it works pretty well. | 17:24 |
povbot` | /svn/commits: * mg committed revision 5422: | 17:24 |
srichter | cool | 17:24 |
povbot` | /svn/commits: Stripped trailing whitespace; added the missing newline at the end of file, converted "ReStructured Text" to a hyperlink to the RST website. | 17:24 |
th1a | Adding comments shouldn't be hard. Pretty much just short "this is what is happening here" type stuff. | 17:25 |
th1a | OK. Last thing. | 17:25 |
srichter | yep | 17:25 |
th1a | I got an estimate from Aiste of POV's availability over the next six months. | 17:26 |
th1a | Which estimates 90 developer days between the end of this contract in June. | 17:26 |
Aiste | th1a: it is a conservative estimate | 17:26 |
th1a | Aiste: Well, it is good for me to work from that. | 17:27 |
Aiste | yes :) | 17:27 |
th1a | Since in my planning I tend to overestimate that resource. | 17:27 |
Aiste | so I figured, it is better to get more than expected than less | 17:27 |
th1a | So that generally looks like enough time to finish attendance and make some fixes to calendaring. | 17:28 |
th1a | And probably create some reports. | 17:28 |
th1a | So I'm thinking someone else will be doing the demographics system. | 17:29 |
th1a | I'm working on who that will be. | 17:29 |
th1a | Make sense? | 17:29 |
th1a | POV? | 17:30 |
mgedmin | I guess so | 17:30 |
th1a | So... was this a "bad meeting?" | 17:31 |
mgedmin | no, this was a good meeting | 17:32 |
alga | Looked fine to me :-) | 17:32 |
th1a | OK. Just wanted to make sure. | 17:32 |
th1a | Aside the fact that some people were late... | 17:33 |
mgedmin | is it over? | 17:33 |
mgedmin | we still have 3 minutes, since some people were late (sorry) | 17:33 |
* th1a strikes the virtual gavel. | 17:33 | |
th1a | That's all I've got. | 17:33 |
*** alga has quit IRC | 18:12 | |
povbot` | /svn/commits: * vidas committed revision 5423: | 18:43 |
povbot` | /svn/commits: Made all calendar views use ViewPreferences instead of IPersonPreferences. | 18:43 |
mgedmin | srichter, are viewlets currently used anywhere in schooltool? | 19:08 |
srichter | yeah | 19:17 |
mgedmin | I want to make calendar event display pluggable | 19:21 |
mgedmin | so I'm looking into viewlets | 19:21 |
mgedmin | I think I need a new viewlet manager | 19:25 |
srichter | yes | 19:39 |
srichter | sorry I was (and am) on the phone | 19:39 |
mgedmin | np, I think I figured it out | 19:41 |
mgedmin | we need a new interface (ICalendarEventManager?) inheriting IViewletManager | 19:42 |
mgedmin | register it with <browser:viewletManager> | 19:42 |
mgedmin | then in cal_daily.pt use tal:replace="structure provider:schooltool.CalendarEvent" inside the daily event div | 19:42 |
mgedmin | and register viewlets for showing event booking info or whatever else we need | 19:42 |
mgedmin | hm, viewlets by default are unordered? | 19:44 |
mgedmin | so I would need to reuse the __cmp__ from NavigationViewlet if I want zcml-defined ordering? | 19:44 |
srichter | ok, now I am back | 19:54 |
srichter | correct (to the procedure) | 19:55 |
srichter | mgedmin: viewlet managers have a sort method that you can implement | 19:55 |
srichter | whether it uses information from the viewlet itself or uses other external info for sorting is up to the viewlet manager | 19:56 |
srichter | __cmp__ is just the default implementation | 19:56 |
srichter | note that a common pattern is that a special viewlet manager interface is associated with a specific viewlet interface | 19:57 |
mgedmin | question: why NavigationViewlet.__cmp__ converts self.order into int explicitly? | 19:57 |
mgedmin | when you specify the order in zcml, is it stored as a string internally? | 19:58 |
mgedmin | can you specify arbitrary string attributes in <viewlet> directives? | 19:58 |
mgedmin | or is the order specified explicitly in Python code? | 19:58 |
* mgedmin greps | 19:58 | |
srichter | yes, arbitrary string attributes are possible | 19:58 |
mgedmin | order is specified in zcml | 19:58 |
srichter | right, order is one of the arbitrary field attributes | 19:59 |
srichter | order is there to make life easier | 19:59 |
srichter | I tend to encourage people to find different sorting mechanisms, if possible | 20:00 |
mgedmin | diversity is good, right | 20:03 |
mgedmin | I'm tempted to have a 'weight' attribute and have heavier viewlets settle on the bottom | 20:04 |
srichter | but that would be similar to order with the same drawbacks | 20:04 |
srichter | if you talk about events, you could sort by date for example | 20:04 |
mgedmin | I'm talking about chunks of info inside a single event box | 20:13 |
mgedmin | such as booking information | 20:13 |
mgedmin | and I want to add a link to the attendance form inside a section event box | 20:14 |
mgedmin | 'cause that seems to be the best UI for finding the form | 20:14 |
povbot` | /svn/commits: * mg committed revision 5424: | 20:14 |
povbot` | /svn/commits: Added a missing unit test for NavigationViewlet.__cmp__. | 20:14 |
th1a | mgedmin: I just realized that generally speaking, when you convert an absence to a tardy, the student will often have their excuse with them (if they were talking to another teacher, for instance). | 20:14 |
th1a | So the realtime attendance UI should probably be like this. | 20:15 |
th1a | Jose Hidalgo |||||||||| [ ] | 20:15 |
th1a | That is, you start with name, sparklines and a checkbox. | 20:16 |
th1a | Then you have: | 20:16 |
th1a | Jose Hidalgo [V] [ Make tardy ] | 20:16 |
th1a | Whoops. | 20:16 |
th1a | Jose Hidalgo |||||||||| [V] [ Make tardy ] | 20:17 |
mgedmin | vidasp, http://issues.schooltool.org/msg1288 | 20:18 |
th1a | So you've checked the absence/tardy box, and then you get a "Make tardy" button, which if you click, you get a form to change the entry time and also enter an excuse. | 20:18 |
povbot` | /svn/commits: * mg committed revision 5425: | 20:25 |
povbot` | /svn/commits: Refactored OrderedViewlet as a new base class of NavigationViewlet. Added all the missing unit tests. | 20:25 |
mgedmin | actually, the more I think, the less I like the idea of comparing 'order' in a viewlet's __cmp__ | 20:26 |
mgedmin | I think the boston skin chose the right path with its OrderedViewlet and overriding of sort() in the manager | 20:26 |
mgedmin | everything will break in unobvious ways if you insert a viewlet that doesn't have the appropriate __cmp__ among other viewlets thatdo | 20:27 |
*** alga has joined #SchoolTool | 20:31 | |
povbot` | /svn/commits: * vidas committed revision 5426: | 20:41 |
povbot` | /svn/commits: Made ViewPreferences return default values when in test environment. | 20:41 |
mgedmin | in what interface is IViewletManager.sort defined? | 20:46 |
*** ignas has quit IRC | 20:52 | |
povbot` | /svn/commits: * mg committed revision 5427: | 20:54 |
povbot` | /svn/commits: Use a OrderedViewletManager to sort the viewlets instead of relying that all of them will inherit from OrderedViewlet. | 20:54 |
*** vidasp has quit IRC | 20:55 | |
*** alga_ has joined #SchoolTool | 21:02 | |
*** alga_ has quit IRC | 21:02 | |
*** dman13_ has joined #schooltool | 21:29 | |
*** dman13_ is now known as dman13 | 21:29 | |
povbot` | /svn/commits: * mg committed revision 5428: | 21:34 |
povbot` | /svn/commits: Fixed a buglet in EventForDisplay.renderShort; refactored it somewhat. | 21:34 |
*** thisfred_ has joined #schooltool | 21:43 | |
povbot` | /svn/commits: * mg committed revision 5429: | 21:58 |
povbot` | /svn/commits: Extract the unit tests for EventForDisplay.getBooker and getBookedResources into a separate test. | 21:58 |
*** thisfred has quit IRC | 22:01 | |
povbot` | /svn/commits: * mg committed revision 5430: | 22:08 |
povbot` | /svn/commits: Another minor timezone bugfix; this time in EventForDisplay.editLink. | 22:08 |
srichter | mgedmin: I just checked and it is not a method publically defined, but an implementation detail of the default viewlet manager | 22:22 |
srichter | i.e. if you use zope.viewlet.manager.ViewletManagerBase, you can override the sort() or filter() method | 22:23 |
*** thisfred_ has quit IRC | 22:24 | |
povbot` | /svn/commits: * mg committed revision 5431: | 22:48 |
povbot` | /svn/commits: Cleaning up the mess that cal_daily.pt has become: instead of convoluted string: TALES expressions that jump through tal:condition hoops to avoid exceptions defined three new EventForDisplay methods and used them in the template: ev.viewLink(), ev.deleteLink(), and ev.bookingLink(). Fixed some really stupid expressions in the page template. Removed some of the duplication | 22:48 |
povbot` | /svn/commits: with judicious use of tal:omit-tag. Pretty-printed certain portions. | 22:48 |
povbot` | /svn/commits: Am wondering if all-day events really should be displayed quite differenly from regular events (e.g. no resource booking information whatsoever; no shortening of overlong titles). Probably not. | 22:48 |
mgedmin | thanks, I figured that out | 22:48 |
mgedmin | oops, my last commit had a <tal:comment>XXX bla bla</tal:comment> | 22:56 |
mgedmin | with no condition="nothing" clause | 22:56 |
povbot` | /svn/commits: * jinty committed revision 5432: | 23:11 |
povbot` | /svn/commits: Make sure there are no absolute paths in the .pot file comments. Some were sneaking in because of the zcml in schooltool-skel. | 23:11 |
povbot` | /svn/commits: * mg committed revision 5433: | 23:22 |
povbot` | /svn/commits: Mercilessly refactored the cal_daily.pt template: extracter portions of the event box into macros (defined in the same file), so that the template is easier to read. Removed a bunch of unused variables. | 23:23 |
povbot` | /svn/commits: Fixed the <tal:comment> (with omitted condition="nothing") bug I introduced in my previous checkin. | 23:23 |
povbot` | /svn/commits: Fixed the grid height problem -- use sum of row heights instead of 4em * number_of_rows as the height for the outer div. | 23:23 |
*** jinty has quit IRC | 23:24 | |
povbot` | /svn/commits: * hoffman committed revision 5434: | 23:26 |
povbot` | /svn/commits: Tiny typo. | 23:26 |
povbot` | /svn/commits: * mg committed revision 5435: | 23:32 |
povbot` | /svn/commits: Added an (incomplete) functional test for the realtime attendance form. | 23:32 |
povbot` | /svn/commits: * mg committed revision 5436: | 23:34 |
povbot` | /svn/commits: Register a viewlet manager schooltool.CalendarEvent. | 23:34 |
povbot` | /svn/commits: cal_daily.pt will use it in the near future instead of | 23:34 |
povbot` | /svn/commits: <metal:block use-macro="template/macros/event-core-info" /> <metal:block use-macro="template/macros/event-resource-booking-info" /> | 23:34 |
povbot` | /svn/commits: More importantly, schooltool.attendance will be able to hook into it and include an "attendance" link if the event is a section meeting event. | 23:34 |
povbot` | /svn/commits: * mg committed revision 5437: | 23:38 |
povbot` | /svn/commits: Filename tab-completion for bin/runfdoctests.py | 23:38 |
*** mgedmin has quit IRC | 23:55 |
Generated by irclog2html.py 2.15.1 by Marius Gedminas - find it at mg.pov.lt!