IRC log of #schooltool for Sunday, 2006-03-19

th1aWhere is the sprint based?00:00
th1aDo you work in the Canonical offices now?00:00
SteveAwe're at a hotel in the middle of the canary wharf docklands wasteland00:00
SteveAeast london00:00
SteveAi work from my apartment in lithuania most of the time00:00
th1aI know you work in Lithuania ;-)00:01
SteveAthe canonical offices aren't in lithuania00:01
SteveAso you confused me for a moment00:01
th1aBut the sprints aren't all in Mark's flat anymore.00:02
*** vmx__ has joined #schooltool00:02
SteveAno00:02
SteveAnot generally00:02
*** vmx_ has quit IRC00:02
SteveAif they're small, like 4 people, they're at the offices00:02
SteveAfor larger ones, they're at a hotel00:02
th1aI see.00:02
th1aHave you seen Helen King lately?00:02
SteveAfrom TSF?00:02
SteveAnot in a while00:03
th1aYes.00:03
th1aI've started working with her more closely, which is quite pleasant.00:03
SteveAoh, good00:04
SteveAi'm not really sure what she does, other than TSF stuff from the mossop st. offices00:04
SteveAbtw, the CoC is larger than that one paragraph00:04
th1aShe's the "international relations" person for TSF, so she ends up coming to things in the US pretty often.00:05
SteveApeople GPG sign it.  i haven't signed the CoC yet, so I can still mouth off at people on irc and by email.00:05
th1aShe's on the short list of open source in education speakers now.00:05
th1a:-D00:05
*** didymo has joined #schooltool01:16
*** pcardune has joined #schooltool01:24
*** GeekNoobness has joined #SchoolTool03:26
*** NoobsGeek has quit IRC03:43
*** ffsnoopy has joined #schooltool03:58
ffsnoopypcardune: paul, are you available?03:59
*** SteveA has quit IRC04:15
*** NoobsGeek has joined #SchoolTool04:34
pcarduneffsnoopy: hey, are you still here04:49
ffsnoopyyes04:49
pcardunewhat's up/04:49
pcardune?04:49
ffsnoopywhen adding a new journal, how do I record the user who added it?04:50
pcardunein the request object is a principle object04:51
pcarduneI think it is request.principle04:51
pcardunethere is an adapter from principle to Person04:51
pcarduneso you can do something like person = IPerson(request.principle) in the view class04:51
pcardunelet me look for some example code04:52
ffsnoopyokay04:53
*** GeekNoobness has quit IRC04:53
pcarduneyeah, i was right...04:56
pcarduneit is just IPerson(self.request.principal)04:56
pcardunealthough that means you will have to adjust the view class for the addform04:57
pcarduneand override the create method04:57
ffsnoopyoh, so it doesnt go in the __init__() func of journal?04:57
ffsnoopyi cant do any 'request'ing from there?04:57
pcarduneno you can't04:58
pcardunebecause Journal has no idea about this thing called the internet04:58
pcarduneit is just a data structure which stores data about journals04:59
ffsnoopyhrm04:59
pcardunethe browser views however, are aware of the internet, and are the proper place to do stuff with requests04:59
ffsnoopyso author has to be a Person object and not just a string username?04:59
pcardunewell, it could be a string username, since it is really easy to get the Person object from the username,05:00
ffsnoopygood deal05:01
pcardunebut the biggest reason you don't want that, is so the user can't pretend to be someone else05:01
ffsnoopywell i was thinking in the interfaces have a default field05:01
ffsnoopyand then just dont show it in the add form05:01
ffsnoopyalthought interfaces probably have no clue about the internet too...05:02
pcardunewhat would the field default to though?05:02
pcarduneprecisely05:02
ffsnoopythats a problem05:02
pcarduneI mean, the only way you could conceivably do that is to have a hidden field in the addform which the user doesn't see, that is automatically set to their username05:03
pcardunebut they could still fudge it by sending requests manually (not through a web browser)05:03
ffsnoopyhow could they if its a POST and not a GET?05:03
pcarduneyou can send POST requests just as easily05:03
ffsnoopyoh05:03
ffsnoopyyeah that makes sense05:04
pcardunein any case, it will be a good experience to extend the AddView class to handle a special case like that05:04
pcarduneJust out of curiosity, are you running ubuntu/debian?05:05
ffsnoopyyes05:05
pcardunehave you installed ctags?05:05
ffsnoopyyup05:05
pcardunegood05:05
pcarduneI would suggest creating a tag file for the Zope3/src/zope directory05:05
pcardunethen going in there and searching for AddView05:05
pcarduneYou will need to subclass AddView and override the create method05:06
ffsnoopybummer05:09
ffsnoopytoo bad things arent simple in the zope world05:09
pcardunewell, they actually are05:10
pcarduneif this were a regular zope app, I'd tell you to let the Dublin Core handle it05:10
ffsnoopymaybe i just need to get used to it...05:10
pcardunebut schooltool works a bit differently05:10
pcarduneOnce you get high enough onto the learning curve you begin to notice the incredible flexibility of zope and why things are the way they are05:11
ffsnoopyprobably05:11
pcardunefor example, I turned the zwiki content component that comes with zope into something that schooltool can recognize and fully interact with just by changing two configure.zcml files05:12
ffsnoopythats pretty cool05:12
pcarduneYou can't do that with any other content management framework as far as I know05:12
*** pcardune has quit IRC05:29
*** ffsnoopy has left #schooltool05:35
*** Aiste|away has quit IRC10:30
*** didymo has quit IRC12:46
*** carljm has joined #schooltool15:03
*** Aiste has joined #schooltool15:07
*** carljm_ has joined #schooltool16:39
*** carljm has quit IRC16:41
*** ignas has joined #schooltool16:45
*** carljm_ has quit IRC16:58
*** carljm has joined #schooltool16:58
*** jelkner has joined #schooltool18:08
*** flint has joined #schooltool18:12
flintjelkner, Jeff how are you doing?18:12
jelknermorning paul18:16
*** huynh has joined #schooltool18:17
jelknergood morning, linda18:17
huynhmorning18:17
huynhwhat's that really random file that we're supposed to have in the separate folder?18:17
jelknertimeclock-configure.zcml18:18
jelknerwhich goes in zope3/etc/package-includes/18:18
jelknerand contains only: <include package="timeclock" />18:19
huynhthank you18:20
*** ignas has quit IRC18:20
jelknerhuyhn: sure thing18:20
jelknerhuynh: btw, i just finished editing the summer intership commitment letter18:21
jelknerit will take a day or two to get that approved, and then i need to get one to you18:21
huynhokay18:21
huynhI can tell you right now, though, that my work will be improved in the summer from lack of schoolwork18:22
jelknerthat will go for all of us ;-)18:22
huynhbecause homework right now is killer18:22
jelkneri understand18:22
jelknerand that needs to come first18:23
huynhit's unnatural for children to go to sleep after midnight just because of homework18:23
flinthuynh, it's unnatural for children to go to sleep... I have been a parent my dear...18:34
flint:^)18:34
huynh:) well, unlike most children, I like to sleep18:34
flinthuynh, linda, you are doing fine.  I have always had great problems with homework, and this course is about par.18:35
flintBasically I am totally lost in zope 3.  It makes little or no sense.  how about for you?18:36
huynhsince our teacher's not here, I can agree with you unconditionally18:36
huynhbut I'm getting the code and everything18:37
huynhthe placements of everything is what's confusing me18:37
flinthuynh, ah elkner is calling to yell at me...18:37
huynhflint, have fun18:37
*** pcardune has joined #schooltool18:38
huynhhello, teach18:38
jelknermorning teach18:38
pcardunehello18:38
tiredboneshuynh, have you read anybooks on design pattern and XP?18:44
huynhno, was this required?18:45
huynhalthough there is a zope3 book in my comp sci class that I've skimmed through18:45
tiredboneshuynh, no but it would help in putting the pieces together.18:45
pcardunei don't think i've read any books on design patterns or XP either, so I wouldn't worry to much18:46
*** ignas has joined #schooltool18:47
tiredboneshuynh, if you can find a copy of Design Patterns by the GoF would help.18:47
huynhGoF?18:47
tiredbonespcardune, a while back you recommend the class read these materials.18:48
tiredboneshuynh, Gang of Four.18:48
carljmthere's also http://c2.com/cgi/wiki?DesignPatterns18:48
pcardunewell, it was really only if they felt the desire to know more18:49
pcarduneAnd i don't think i recommended any books18:49
flintpcardune, there really is no way of logging out of manager once you are in it.  You can shut down the server and the broser, but somehow that cookie is lodged in there.  any ideas?18:57
jelknerhuynh: can you ask mr. c if you can take that book until the end of the summer?18:58
pcarduneflint: unfortunately no.  We would have to set up an authentication service, and that is complicated18:58
jelkneri had ment to ask you about that, but i forgot18:58
flintpcardune, that is a very good and complete answer, thanks.  there is no default authentication service beyond the manager role hard wired in at install.18:58
tiredbonesIs this site still being used http://ypal.net/zope3class/FrontPage19:00
*** wdickers has joined #schooltool19:00
jelknergood moring will19:00
pcarduneit is also a bit difficult because the authentication services aren't really explained in the current zope books.  at least from the point of view that would be most useful to us.19:00
wdickersmorning19:00
flintjelkner, technically it is good afternoon in EST.19:01
flint:^)19:01
wdickersHeh, by 1 minute19:01
pcardunetiredbones: i believe we've moved it to http://ibiblio.org/obp/pyBiblio/courses/zope3class/19:01
pcarduneok, so is everyone here who is supposed to be here?19:02
pcardunei'll assume "yes"19:04
flintanyone who was not here would answer "No"...19:04
flint:^)19:05
pcarduneok, so I gave out some more homework last sunday19:05
pcardunethat asked you to write some new interfaces for the part of timeclock that would actually keep track of the time19:05
carljmok, i must be out of part of the communications loop still19:06
carljmwhen/where did you give the homework?19:06
pcardunecarljm: I sent it out on the mailing list19:06
pcardunejelkner: is carljm on the mailing list yet?19:06
carljmi think i am, you must have sent it out right after class before i got on19:06
* jelkner goes to check the mailing list19:06
carljmok, proceed - i'll catch up19:06
flintpcardune, I got the assignment, elkner had mentioned putting the homework assignment on the wiki...19:07
pcarduneit might be on the wiki then19:07
jelknerit isn't19:07
pcarduneanyways, I asked you to create three new interfaces: IWorkLog, IWorkLogEntry, and IWorkLogEntryContained19:08
pcarduneand to figure out what attributes should go into each of these interfaces19:08
jelkneri know that wdickers did *all* of his homework19:08
jelknerhe showed it to me in class19:08
wdickersI'm telling you I just copied Timeclock >//>19:09
jelknerwdickers: but it worked!19:09
jelknerthat's actually a good thing19:09
wdickersHeh, true19:09
jelknerit means this is starting to make sense to you19:09
flintwdickers, the whole directory?19:09
jelknerand you can develop new things fast19:09
jelknerflint: no19:10
flintoh good, i thought I got it... now I feel better :^)19:10
jelknerhe means he copied IPerson, IPersonContainer19:10
flintand person.py19:10
jelkneryes19:10
wdickersHeh, pretty much I just renamed stuff19:10
wdickersAnd changed the attributes19:10
jelkneryes, but know what to rename and how to change it is the whole point19:10
pcardunewell, let's look over what you did wdickers19:11
flintcreate an object called WorkLog...including the stanzas of stuff in interfaces.py and configure.zcml19:11
wdickersso...how should I show it?19:11
jelknerflint: create an *interface* called IWorkLOg19:11
jelkners/IWorkLOg/IWorkLog19:12
pcarduneIt would be ideal if you put it on the internet, but if that isn't easy, you can just paste it in here, although only do one peice at a time19:12
flintjelkner,  in interfaces.py and configure.zcml19:12
pcardunelet's start with IWorkLog19:12
jelknerwhich goes in the interfaces.py file19:12
wdickersclass IWorkLog(zope.app.container.interfaces.IContainer):19:13
wdickers        """A container for work entries."""19:13
wdickers        zope.app.container.constraints.contains(IWorkLogEntry)19:13
pcarduneflint: I only asked to create new interfaces, not to implement them or configure them19:13
pcarduneok, this is correct, however it isn't quite complete19:14
jelknerbut wdickers did implement them19:14
wdickersso what else do I need?19:14
jelknerquestion: teach, is it time now to change the import to from zope.app.container.interfaces import IContainer?19:14
pcardunebesides just copying and pasting some variables, we want to think about the nature of our problem and what kind of things can be attributed to the new content components we come up with19:15
pcardunejelkner: there is no "time" to do this, it is personal preference.  It doesn't matter how you do it as long as it is explicit (meaning no from something import *)19:15
pcarduneas far as I know, there is no standard in place for imports19:16
pcarduneSo, can someone tell me what the purpose of IWorkLog is? in full.19:17
flintpcardune, will has created a container you can put what you want into... eh?19:17
jelknerto store instances of "work", including when the work was done (start and finish) and what was done and what was learned19:17
pcarduneflint: you can only put object that provide IWorkLogEntry in to his container, not "what you want"19:18
wdickersI thought you could only put in IWorkLogEntries as it's constrained19:18
wdickersyay19:18
pcardunejelkner: so then it doesn't matter who is doing the work as long as the hours are stored?19:18
flintyou both said the same thing. ok.19:18
jelknerahh yes, we need who did the work19:19
wdickersWell wouldn't each person have their own instance of WorkLog?19:19
flintwdickers, will I believe they will...19:19
jelknerexcept that managers will want to see all work19:19
flintif there is a mapping between the worklog and the person.19:20
jelknerso there must be a way to look at all work logs together19:20
wdickersSo there should be some variable within IWorkLog that ties all the WorkLogs of a person together?19:20
pcardunewell, a person may have multiple work logs for multiple projects19:21
pcarduneyou want to think about the intrinsic nature of the components we are creating19:21
jelknerahh a many to many relationship19:21
flintthere is a one-to-many relaton between persons and worklogs19:21
carljmmultiple work logs for an employee aren't in our use cases19:21
carljmat least not as they stand19:21
pcarduneis having a work log instrinsic to the nature of a person?  I would say no19:22
jelknercarljm: good point, we don't have a story for that yet19:22
flintpcardune, does the worklog contain all instances of work or just a single instance of work?19:22
tiredbonespcardune, how would you have a eotk log without a person?19:22
pcarduneflint: neither, it contains many instances of WorkLogEntry, but not necessarily all instances of WorkLogEntry19:23
flintpcardune, so it contains all work log entries for a given person or for all persons?19:23
pcardunefor a given person19:24
pcardunewell, here is how you should thing about it, let me outline it19:24
wdickersI thought we didn't know as there could be multiple WorlLogs per person19:24
wdickers**WorkLogs19:24
flintwdickers, yea, that is what I thought as well.19:24
pcarduneok, let me explain19:24
flintthat the worklogs were like job tickets, discrete19:25
pcardunework logs contain work log entries19:25
pcardunework log entries look like this (start time, end time, description of work done)19:25
pcardunejust like you would right down in a notebook19:25
pcardunethe notebook is the worklog19:26
flintpcardune, paul, this is flawed in that it would not scale.  if each worklog were discrete, they are more flexable.19:26
pcarduneeach person will have one worklog for each project they are working on19:26
pcarduneare you saying that worklogs are continuous?  how are they not discrete?19:27
flintpcardune, think job tickets, they are able to be organized by project, or reviewed by a supervisor19:27
flintjob tickets can even be assigned.19:27
flintimagine that each quanta of work is an individual thing19:28
pcardunei'm afraid I don't know what job tickets are, but continue19:28
flintand that thing has who what when where how info in it.19:28
wdickersSo...are you saying that each entry should not be within a WorkLog?19:28
carljmflint: each "quanta of work" is an individual thing, a WorkLogEntry19:28
flintand it is created or assigned19:28
flintbut it is not a notebook which is a collection of work quanta19:29
pcarduneflint: I think you are confusing WorkLog and WorkLogEntry19:29
pcarduneWorkLog is a collection of WorkLogEntries19:30
flintthe "job ticket" is a small quantity of work.  in the past is is a WorkLogEntry, in the future it is an AssignedTask19:30
wdickersI don't think we get assigned tasks, we just write down what we did and what we learned19:30
tiredbonesflint, job ticket don't close until the job is done. Keeping track of time worked end before the project is done.19:30
pcarduneI understand what you are saying, but you are breaking out of what our system is supposed to do19:31
flintpcardune, that is the trap. if you create a WorkLog then WorkLog Entries are associated with this particular WorkLog for good19:31
pcardunewhy is this bad?19:31
flintpcardune, when you try to extend this for the purpose of assignment of work, it breaks.19:31
wdickersNo, you can create a worklogentry in whichever worklog you want19:32
jelknerwe have no story for assignment of work19:32
jelkneryagni19:32
jelkner(you ain't gona need it)19:32
jelkners/gona/gonna19:32
flintjelkner, you need to consider this now.  that is the point of design components.19:33
pcarduneflint: we could do it your way, but that becomes a far more complicated implementation which will be end up being more about knowing python than about knowing zope19:33
tiredbonesthe relationship -- prodject to people     people to work done.19:33
jelknerflint: and we are not going to need it19:33
jelknerif we do later, we add it then19:34
jelknerso let's do the simplest thing that will work for our current problem19:34
flintyou considered it I get to do the ITYS later :^)19:35
pcarduneflint: we are not working with a relational database ;)19:35
flint(I Told You So :^)19:35
jelknerflint: fine19:36
pcarduneok, so, back to the intrinsic nature of a worklog19:36
jelknerin the mean time, i have happy customers with code they can see now19:36
flintand happy students.19:36
jelkneryou have nothing to show them because you are building the complete, do all system that never gets finished19:36
wdickersyeah, we got kind of sidetracked...please explain what you mean pcardune19:37
pcarduneassume someone is paying each of us for working on the timeclock application19:37
pcarduneeach one of us will keep track of the amount of time we work on it seperately19:37
pcarduneso we will keep track of it in our own WorkLog19:38
pcardunelet's say some of us are also being paid to work on another project (like CanDo)19:38
flintworklog entries in individual worklogs.19:38
pcardunewe will want to have a seperate WorkLog for the work we do for CanDo19:39
pcarduneso a Person can have more than one worklog, but a worklog can only have one person19:39
jelknerwhy?19:39
pcardunejelkner: because different people might be paying us, or because the boss wants to see the amount of money they are spending on each different project19:40
wdickerswhat if two people were working jointly, would they still have 2 seperate worklogs for the same project and work?19:40
jelknerwdickers: yes19:40
pcardunewdickers: that is a very good question19:40
carljmpcardune: shouldn't we update the user stories to reflect multiple worklogs per person?19:41
flintpcardune, you have one WorkLog per person for many job assignments?19:41
carljmcurrently they read as if each person only has one19:41
jelknerpcardune: i'm here as the customer for this project19:41
jelknerand as far as what i want, each person does have only one worklog19:41
jelknerwe should implement that now, and add other worklogs only if they become necessary19:42
tiredbonespcardune, your system appears to have redundent data.19:42
jelknerall i want is to be able to pay our developers19:42
jelknerthey all work for the same employer19:42
tiredbonesjelkner, you want more than that.19:43
jelknerand all their work is paid from the same account19:43
jelknerat least at this stage19:43
jelknerwe want a simple solution to a simple problem19:43
jelknerand we want it fast19:43
pcardunewell, in any case, it still makes sense to have a WorkLog keep track of the Person it is attached to19:44
pcarduneand to keep WorkLog objects separate from Person objects19:44
pcardunebecause again, WorkLogs are not an intrinsic part of the nature of a person19:45
flintquote fromj above "jelkner we have no story for assignment of work"19:45
pcarduneyou jelkner, as the boss, are not going to have a worklog, but you are still going to be a Person19:45
wdickersSo there will be a tie between the single Person object and all the WorkLog objects?19:45
wdickersBut right now the user can add as many Person objects as they want19:46
pcarduneso, some Person objects will be bosses/administrators, and WorkLogs will be attached to a particular person19:46
pcardunewdickers: one work log to one person19:46
flintwdickers, will by tie you mean relationship not even score eh?19:46
wdickersflint: of course19:46
wdickerspcardune: so we decided on a 1-1?19:47
carljmso - do we make a person into a container for WorkLogs, or is there a better way to tie them together?19:47
pcarduneit really doesn't matter whether it is 1 to 1 or 1 to many, the implementation at this point, as well as the interfaces will be exactly the same19:47
tiredbonespcardune, will one beable tp select a person an determine all the current prodjects there on?19:47
flinttiredbones, there is only one project so the answer is yes.19:48
flinttiredbones, all the current prjects are one project eh elkner?19:48
jelkneryup19:49
pcardunecarljm: that would be one way... in fact is would be the simplest way in my mind, but not the proper way, we'll get into that later19:49
pcarduneso regardless of how many work logs a person might have, a work log will always have one person... does everyone agree with this?19:49
carljm+119:50
huynhyep19:50
wdickersyup19:50
jelknersi19:50
flintse-se19:50
pcarduneok, that is really all we have to worry about19:50
pcarduneso, going back to what wdickers wrote for IWorkLog, can anyone tell me what it is missing?19:50
wdickersclass IWorkLog(zope.app.container.interfaces.IContainer):19:51
wdickers        """A container for work entries."""19:51
wdickers        zope.app.container.constraints.contains(IWorkLogEntry)19:51
jelknerit has nothing about People?19:51
flinta clearer doc line?19:51
jelkneror rather IPerson?19:51
pcardunejelkner: good, we need something that says implementations of IWorkLog should have some attribute for IPerson19:52
tiredbonesjelkner, I think you use adapters to tie them together.19:52
jelknerare we going to have a containedBy requriement19:52
pcarduneno19:52
wdickersjelker: but I thought pcardune said we wouldn't put WorkLog into IPerson19:52
flintpcardune, thanks paul for not containing this in person.19:53
pcarduneflint: your welcome19:53
flintpcardune, go on, the supsense is killing me...19:53
pcardunewhat we want to do is add a zope.schema.Object attribute19:54
wdickerswhy of course xD19:54
flintpcardune, I knew that :^019:54
huynhof course19:54
flintlol19:54
pcarduneif you look at chapter 8 of the developers guide, (top of pg 58) you will see the Object schema attribute19:55
wdickersI assume it starts like this:19:55
wdickers        person = zope.schema.Object(19:55
flintata girl linda19:55
pcardunewdickers: that's right19:55
pcarduneit is just like all the other schema attributes except that it has an extra parameter19:55
pcarduneschema=IPerson19:56
wdickersperson = zope.schema.Object(19:56
wdickers                title = u"Personthingy",19:56
wdickers                description = u"Owner of WorkLog",19:56
wdickers                schema = IPerson,19:56
wdickers                required = True)19:56
wdickersBut don't we have to import IPerson at the top then?19:57
pcardunewdickers: IPerson is already in this file (remember, this is interfaces.py)19:57
wdickersOh. I created a new package called work. Let me put this in timeclock then19:59
flintand this is part of the class description?19:59
pcarduneflint: this is part of the IWorkLog interface which sould be in timeclock/interfaces.py19:59
flintsorry the stanza begins with the word "class"19:59
flintthe stanza describing the interface19:59
pcarduneflint: that's true.  If python had interfaces (like java) then there would be other keywords for it19:59
pcarduneflint: you can ask guido why there aren't interfaces in python20:00
jelknermaybe there will be in python 320:00
pcarduneok, so does everyone understand that?20:00
flintpcardune, where within the interface class description do we put this reference to schema?20:00
tiredbonespcardune, is this the only way to associate these components?20:01
pcarduneanywhere as long as it is in the interface definition20:01
pcardunetiredbones: well, I'm not sure I would call it an association, and it isn't the only way, but it is the simplest way20:02
tiredbonesok20:02
flintso something like this:20:02
flintclass IWorkLog(zope.app.container.interfaces.IContainer):20:02
flint         """A container for work entries."""20:02
flint         schema=IPerson20:02
flint         zope.app.container.constraints.contains(IWorkLogEntry)20:02
pcardunesorry, i meant that schema=IPerson was a parameter for zope.schema.Object20:03
wdickersclass IWorkLog(zope.app.container.interfaces.IContainer):20:03
wdickers        """A container for work entries."""20:03
wdickers        person = zope.schema.Object(20:03
wdickers                title = u"Personthingy",20:03
wdickers                description = u"Owner of WorkLog",20:03
wdickers                schema = IPerson,20:03
wdickers                required = True)20:03
wdickers        zope.app.container.constraints.contains(IWorkLogEntry)20:03
flintoh ok20:03
pcardunewdickers has it correct20:03
povbot/svn/commits: * ignas committed revision 5821:20:03
povbot/svn/commits: Make schooltool event edit form support events longer than 1 day.  Make schooltool event edit form show sane units when displaying duration of events, not just minutes.20:03
pcardunes/correct/correctly20:04
pcarduneeveryone is on the same page yes?20:04
flintwdickers, will how did you know to put a comma at the end?20:05
wdickersat the end of each parameter?20:05
pcarduneflint: arguments in python are seperated by commas20:05
flintpcardune, ah a list...20:06
pcardunemore like a tuple, but same difference20:06
povbot/svn/commits: * ignas committed revision 5822:20:06
povbot/svn/commits: Added support for importing of all day events from icalendar files.  Added some missing tests for error checking in the icalendar parser.  Merged read_icalendar and parse_icalendar into one function (this will be needed when i'll add icalendar timezone support)20:06
pcarduneok, so if everyone is alright with the IWorkLog interface, we can move to the IWorkLogEntry interface.  sound good?20:07
carljmyep20:08
huynhokay20:08
pcarduneok, wdickers can you post what you have for IWorkLogEntry (so we can tare it apart again ;)20:08
wdickersmy version just has the times as textlines where the user inputs them (there's no format)20:08
wdickersclass IWorkLogEntry(zope.interface.Interface):20:08
wdickers        """A work entry."""20:08
wdickers        sTime = zope.schema.TextLine(20:08
wdickers                title = u"Start Time",20:08
wdickers                description = u"Person's start time",20:08
wdickers                required = True)20:08
wdickers        eTime = zope.schema.TextLine(20:08
wdickers                title = u"End Time",20:09
wdickers                description = u"Person's end time",20:09
wdickers                required = True)20:09
wdickers        workDone = zope.schema.Text(20:09
wdickers                title = u"Description",20:09
wdickers                description = u"What s/he did",20:09
wdickers                required = True)20:09
wdickers        learned = zope.schema.Text(20:09
wdickers                title = u"What you learned",20:09
wdickers                description = u"What s/he learned",20:09
wdickers                required = True)20:09
wdickersjelkner wanted me to put in the learned20:09
pcardunethat's a nice touch20:09
jelknerbut required can be False20:09
wdickersfor which ones jelkner?20:09
jelknerlearned20:09
pcardunefor learned20:09
wdickersok20:09
carljmi used:20:10
carljm    start = Datetime(20:10
carljm          title=u'Start Time',20:10
carljm          description=u'The time work began.',20:10
carljm          required=True)20:10
carljmimported zope.schema.Datetime20:10
wdickersyeah, I don't know how the Datetime worked20:10
pcardunecarljm: that looks good20:10
wdickerswait, don't you have to say zope.schema.Datetime?20:10
carljmwdickers, at the top I have:20:10
wdickersunless you said "import zope.schema.Datetime as Datetime"?20:10
carljmfrom zope.schema import TextLine, Datetime20:11
wdickersah, okay20:11
pcarduneas far as variable names, i would like to combine what carljm and wdickers have so as to have startTime and endTime... just to be more explicit20:11
wdickersheh, okay20:12
pcardunewe don't need to limit the number of characters in our variables because computers have a lot more memory these days...20:12
jelknerand programmer don't ;-)20:13
jelkners/programmer/programmers20:13
pcardunewell this looks fine to me20:13
pcardunewhat does everyone else thing of this model?20:13
flintpcardune, this last bit goes into what file? interfaces.py?20:14
jelkneronce you explain Datatime to us, it will be great20:14
pcardune(having 4 attributes: startTime, endTime, workDone, and learned, with startTime and endTime as Datetime attributes)20:14
ignaswell - we are usnig dtstart and dtend for such things in schooltool.calendar20:14
pcarduneflint: yes, all interfaces go into interfaces.py20:14
ignasas it tells that it's not just datetime.time, but a datetime.datetime20:14
flintpcardune, and Datetime returns current date and time.20:15
pcarduneDatetime is a great python package that manages, obviously, date and time20:15
jelknerhow can we learn about it?20:15
flintpcardune, that i have used before20:15
pcardunei would recommend looking in the python library reference20:16
pcardunei'll get a link20:16
jelknerhttp://docs.python.org/lib/lib.html20:16
pcardunewow... did they just radically change the python website?20:16
jelkneryes20:17
jelknerduring a sprint at pycon20:17
* tiredbones takes a look.20:17
pcarduneoh man... i wish i had been there20:17
flintjeff, how do you call the docs for datetime from the command line in python, it is something(datetime)...20:17
jelknernext20:17
jelknernext year20:17
pcardunehttp://docs.python.org/lib/datetime-datetime.html20:17
pcarduneflint: you can do dir(datetime)20:18
flintthanks forgot.20:18
pcarduneor you can do "import pydoc; pydoc.getdoc(datetime)"20:18
flintna dir is fine20:18
wdickersbut how would Datetime work? I thought WorkLogEntry was like a journal entry, one that could be written after or during the actual working, how are the times correct?20:19
flintpcardune, the pydoc is not detailed...20:19
pcardunewdickers: I believe the way jelkner wanted it was for users to actually clock in and clock out20:20
pcardunefrom when they start working to when they stop20:20
jelkneryup20:20
pcarduneof course, this only works when they are online, and they don't forget to clock out20:20
flintpcardune, Will has a point.  can you set the form up so that it can be edited after the default current date/time is placed in the worklog?20:20
pcarduneyes20:20
pcarduneand that is in fact what we will do20:20
jelknerwe may have to add an edit time story20:20
jelknerbut later20:20
wdickershow would that work, the moment you create that object the time is set...so how would it get the endtime as well?20:20
jelknerwdickers: when you "clock in" (log in) a time is stored20:21
pcardunein one of the views it would check whether endtime has been set or not, and if it hasn't it will there could be a button that says "clock out"20:21
jelknerand when you "clock out" a log entry is created20:21
pcardunethese are good questions20:22
huynhthe window will be up the entire time you're working?20:22
wdickersI'm still not understanding. So you cannot log in without creating an entry?20:22
pcarduneallow me to make a proposal20:23
jelknerplease20:23
flintwdickers, yea but you could change the time once you were logged in.20:23
pcardunewhen a user logs in, they will be taken to a screen showing the current state of their worklog20:23
ignaspcardune, if it's not a secret what application is the code being developed for ?20:23
wdickerstrue, but what if you were logging in for other reasons besides working?20:23
ignasis it a part of schooltool ?20:23
pcarduneignas: no, it is for the timeclock application,20:24
wdickerspcardune: and they would have the /option/ of creating a new entry?20:24
pcarduneignas: it's a project we are using to teach zope320:24
pcardunewdickers: yes, that is what i was going to say20:24
jelknerignas: and to pay the Arlington Schools SchoolTool summer interns20:24
wdickersoh, okay, that works for me20:24
ignaspcardune, oh, i see, i guess you can find some usefull things by looking at mgedin's gtimelog then ;)20:24
pcarduneso they might log in just to take a look at how much money they have made so far so they can decide whether or not to buy that ipod...20:24
wdickersexactly ;D20:25
pcarduneignas: really?  do you have a link, i didn't know he ever made such a thing20:25
flintpcardune, making the worker resource aware is out of scope...20:25
jelknerflint is right20:25
ignaspcardune, it's not zope app, but the interface solutions can be usefull to you20:25
pcarduneignas: sounds like it would be a good thing to look at20:26
pcarduneflint, jelkner, how is the worker resource aware?20:26
ignashttp://mg.pov.lt/gtimelog/20:26
pcarduneall i'm saying is that there will be a page showing the current state of the work log, and the worker will be able to see that20:26
jelknertimeclock doesn't know anything about pay20:26
jelknerok20:27
pcarduneoh, i see20:27
flintwhat do you mean by "the current state of their worklog"?20:27
pcardunewell in that case replace "money" with "hours" and let the worker convert hours to money20:27
wdickersnuuuu, math20:27
wdickersflint: I think he means all the existing entries and their contents20:27
pcarduneflint: i mean, see the objects in the work log (the work log entries)20:28
flintwdickers, republican arithmetic rathere....20:28
jelknerpcardune: i propose we keep the ui as simple as possilbe20:28
jelknerwhen an intern first logs in to timeclock20:28
jelknerthey will see a "clock in" button20:28
jelknerthen to answer linda's question, they can go off and work, and even log out20:29
jelknerthe next time they login20:29
flintpcardune, how bout a summary button?20:29
jelknertimeclock will see that they have clocked in20:29
jelknerand offer them a clockout option20:29
pcardunejelkner: my proposal does keep it simpler20:29
pcardunebecause we wont have to right an extra view for the clock in/clock out screens20:29
flintpcardune, if you hit the summary button you see your whole worklog?20:29
jelknerpcardune: but clockin and clockout screens are very different20:30
*** lhuynh has joined #schooltool20:30
wdickersshouldn't we get the basic objects and containers finished before we work on the layout?20:31
flintjelkner, this summary feature would be useful for the boss...20:31
jelknerthe clockout screen requires you to fill in a text field (or 2) describing what you did20:31
jelknerlet's impliment this first, so we can begin trying it out20:31
pcardunewdickers: thank you20:31
jelknerfair enough20:31
pcardunei only wanted to think about the user interface from the point of view of how/when WorkLogEntry objects would be created20:32
pcardunefrom what we've discussed:20:32
pcarduneWorkLogEntry instances are created when the worker clicks a button20:32
pcarduneat that point in time, only the startTime is stored20:32
wdickersdoes that mean endTime's required has to be False?20:33
carljmpcardune: does that mean our other three attributes shouldn't be required?20:33
jelknerdoes that run into conflict with the other "required=True" attributes?20:33
carljmheh20:33
pcardunegood!20:33
pcarduneyou are all on the same page20:33
wdickersapparently20:33
pcardunethe answer is yes20:34
pcarduneso, we want the other attributes, besides startTime, to not be required20:34
jelknerso we will need another way to make them required for clockout?20:35
flintpcardune, why should any attributes be required20:35
flintpcardune, they should be audited at "clockout"20:35
jelknerin other words, clockout should fail if no work description is provided20:35
pcarduneright20:36
tiredbonesTime is a derive value from prodject20:36
pcardunethe proper way to do this would be with workflows, but we aren't there yet, so for now we will do this just manually with browser view classes20:36
flintand they should make sense, is this not a widget function?20:36
tiredboness/prodject/poject/20:36
flintpcardune, the time recorded cannot be negative... (except in my case:^)20:37
pcarduneflint: keeping track of time will be automated for the clock out screen.  it will just be the current time when they log out20:37
pcardunethe amount of time actually worked will be calculated (endTime-startTime)20:38
flintpcardune, good, within scope.20:38
pcarduneok, so can someone please post what the IWorkLogEntry interface should look like?20:39
lhuynhthe dates will be calculated, too, right?20:39
wdickersclass IWorkLogEntry(zope.interface.Interface):20:39
wdickers        """A work entry."""20:39
wdickers        startTime = zope.schema.Datetime(20:39
wdickers                title = u"Start Time",20:39
wdickers                description = u"Person's start time",20:39
wdickers                required = True)20:39
wdickers        endTime = zope.schema.Datetime(20:39
wdickers                title = u"End Time",20:39
wdickers                description = u"Person's end time",20:39
wdickers                required = False)20:39
wdickers        workDone = zope.schema.Text(20:39
wdickers                title = u"Description",20:39
wdickers                description = u"What s/he did",20:39
wdickers                required = False)20:39
wdickers        learned = zope.schema.Text(20:39
wdickers                title = u"What you learned",20:39
wdickers                description = u"What s/he learned",20:39
wdickers                required = False)20:40
jelknerlhuynh: yes20:40
pcarduneThis looks good to me, is everyone else in agreement at this point?20:40
wdickerswait, is endTime correct, since it's not going to be automatically created?20:40
pcardunewdickers: it's correct20:41
wdickersok20:41
flintpcardune, at this time do you need anything like this?20:41
flint         tTime = zope.schema.TextLine(20:41
flint                 title = u"Total Time",20:41
flint                 description = u"Person's time spent",20:41
flint                 required = True)20:41
flintjust asking...20:41
pcarduneno20:42
flintpcardune, this comes later in the process or is a calculation?20:42
pcardunebecause we can derive this information from the attributes we already have20:42
flintit is a calculation then.20:43
pcarduneflint: yes20:43
pcarduneso if everyone agrees with this, then we can look at the IWorkLogEntryContained interface20:43
carljmclass IWorkLogEntryContained(IContained):20:44
carljm    """A work log entry contained in a work log."""20:44
carljm    containers(IWorkLog)20:44
pcarduneThis looks good to me20:44
carljmor zope.app.container.constraints.containers(IWorkLog)20:44
carljmif you prefer20:44
wdickersclass IWorkLogEntryContained(zope.app.container.interfaces.IContained):20:44
wdickers        """A WorkLogEntry contained in a WorkLogEntryContainer"""20:44
wdickers        zope.app.container.constraints.containers(IWorkLog)20:44
wdickersHeh, I have the longer ones20:44
jelkneryeah, i think we should agree on the shorter ones20:45
wdickersok20:45
jelknerit was my fault in the beginning for suggesting the longer ones20:45
pcarduneI think at this point everyone gets the idea with that20:45
jelkneri apologize ;-)20:45
pcarduneok, that is pretty much all we are going to finish today20:46
jelknernext week, teach, you aren't here, right?20:46
pcardunewe have gone through a very important process in the development of zope components20:46
pcardunejelkner: that's right20:46
lhuynhwho'll teach the class?20:46
jelknerthis was fun!20:46
jelknermay i make a suggestion?20:47
pcardunesure jelkner, although I think you are thinking what I am thinking20:47
*** huynh has quit IRC20:47
jelkneryou give us an assignment which we can work on in class together20:47
flintpcardune, where are you going off to next week?20:48
pcardunecamping in oregon until the end of my spring break20:48
pcardune(which goes through sunday)20:48
flintgotcha. sounds nice.20:48
jelknerhave fun20:48
lhuynhhave fun!20:48
tiredbonespcardune, do you normalize the data when developing?20:48
wdickershave fun20:48
pcarduneanyways, I will be gone from wednesday through sunday20:48
flintemail in some homework for me to get confused about please...20:48
tiredbonespcardune, have fun.20:49
pcardunetiredbones: what do you mean by normalize?20:49
jelknerso, you can email us the homework20:49
pcardunewell, i'll send out an email and just tell you right now20:49
jelknerand we can all be confused about it together next week20:49
pcarduneI want you to implement these new interfaces and even configure them20:49
lhuynhthat'll be fun to look forward to20:49
jelkner(but wdickers and carljm will help us through it no doubt!)20:50
wdickers mwahaha, I've almost done that...except for the system error I have u.u20:50
tiredbonespcardune, they don't teach how to normalize data in school anymoer/20:50
pcardunetiredbones: ask jelkner, he is the one who taught me20:50
jelknertiredbones: zodb is not a relational database20:50
flintoh I so wanted to be in first normal form....20:51
tiredbonesjelkner, it doesn't matter on what data base you use.20:51
wdickerswell if that's all I really must be going. See you all next week (except you jelkner, see you on Monday)20:51
*** wdickers has quit IRC20:51
jelknertiredbones: so how would we normalize this data?20:52
flintwell I will call and complain to elkner later.  thanks to all.20:52
pcardunefor the ignorant masses: http://databases.about.com/od/specificproducts/a/normalization.htm20:52
jelknercya all next week20:52
pcardunebye everybody (i'll stick around for a while)20:53
tiredbonesjelkner, the value you get it data quality.20:53
*** lhuynh has quit IRC20:54
pcardunetiredbones: normalization isn't something you have to worry about in interfaces20:55
pcarduneif it is ever a thing to consider it would be in the actual implementations20:55
tiredbonespcardune, I'm not so sure of that.20:56
pcardunecan you give me an example?20:56
pcarduneor tell me what data is being copied?20:56
tiredbonespcardune, refactoring is nice, but it can be to much time in the devloping of a product.20:57
pcardunewhen you refactor zope code, you rarely change interfaces20:57
tiredbonespcardune, is ever worlog going to have the name of the prodject recorded?20:57
pcarduneno20:58
carljmseems to me that normalization sort of applies to building interfaces, in the sense that you don't want duplicate attributes, and you want all your attributes to be inherent properties of the object (i.e. dependent on the primary key)20:58
tiredbonescorrect20:58
pcardunecarljm: that's right, that is what i was thinking to after breifly reading up on normalization20:58
pcardunetiredbones: in our current model, there is only one project20:58
tiredbonespcardune, but the is not realistic.20:59
pcarduneif there were more than one project, then the worklogs wouldn't store the project names20:59
pcardunethey would store references to the project object20:59
pcardunein the same way work logs are connected to Persons21:00
carljmjust brushing up on normalization - in fact the point you (pcardune) made earlier about why we don't store a totalTime is precisely 3rd normal form in action...21:00
tiredbonescarljn, correct21:00
pcardune(i've just been normalizing all along intuitively :D )21:00
pcardunea work log doesn't store the name of a person, it stores a reference to a person object21:01
tiredbonesOf course not.21:01
pcardunewhich is just like a key in a relational database21:02
carljmso, do you have time to give a fuller explanation of why we store the Person as an attribute of the WorkLog, instead of just making Person a WorklogContainer?21:02
tiredbonespcardune,  the opposite is true. A person relate to a worklog.21:02
carljmthe person also needs a reference to their worklog(s), it goes both ways21:03
tiredbonespcardune, and a worklog relate to a prodject.21:03
tiredbonesdams/prodject/project/21:04
tiredbonestime is derived from worklog.21:04
*** jelkner has quit IRC21:04
pcardunecarljm: that's right21:05
tiredbonesThe whole purpose of worklog is time.21:05
tiredbonescarljm,think of your statement as a foriegen key21:07
tiredboness/foriegen/foreigen/21:07
carljmtiredbones: it depends if the relationship is many-to-many, one-to-many, or one-to-one21:08
tiredbonescarljm,no it doesn't21:08
carljmin a relational DB, to implement many-to-many you have to have a join table21:08
tiredbonesok21:09
*** _pcardune has joined #schooltool21:09
carljmwith objects, you just have references going both ways21:09
_pcardunei'm on the phone with jelkner, but i'll be back and give you an explanation21:09
carljmpcardune, thanks21:09
carljmtiredbones: you're right that to have references go both ways in a one-to-many or one-to-one is duplication of information21:10
tiredbonescarljm, yes but a person to prodjects is a 1 - m.21:10
tiredbonescarljm, the time is a m - m21:10
tiredbonescarljm, time is based on a project and a project can have many people on it.21:12
carljmtiredbones, so you want a worklog entry to be independently related to person and project21:15
tiredbonescarljm, yes21:16
tiredbonescarljm, the volitility of the info dictates that.21:17
carljmtiredbones, well, i think you're right, but it's beyond the scope of the user story we've been given21:17
carljmtiredbones, in fact, our current user story has no concept of project at all, just a single per-person worklog21:17
tiredbonescarljm, yes but the design is goin to suffer.21:17
tiredbonescarljm, by the way, normalization would have brought that out.21:18
carljmtiredbones, i wouldn't say the design suffers.  It depends what the problem is that's being solved.  You're solving a different problem than the one posed in our use stories.21:18
carljmif the goal is to have one worklog per person, and no concept of project, then you need a design that reflects that, not an unnecessarily-complicated design21:19
tiredbonescarljm, the user story is base on faults permis.21:19
tiredbonescarljm, the user story is base on faults permises.21:19
tiredbonescarljm, the design is not compilated.21:20
carljmtiredbones: what premise is false?  if the user wants to have one timelog per person, there's nothing inherently wrong with that.21:21
carljmlike i said, you're just solving a different problem.21:21
*** pcardune has quit IRC21:21
tiredbonescarljm, the basic enitites are not looked at.  Person   Project    Time.21:21
carljmtiredbones, those are the basic entities for a _different problem_21:22
carljmthe basic entities for _this problem_ are Person, Time21:22
carljmprojects do not exist21:22
tiredbonesok21:22
tiredbonescarljm, Where do you go to school at?21:23
carljmtiredbones, i agree with you that if we extend the use story to include multiple timelogs, then it should be done the way you suggest, not with multiple timelogs directly associated with a person21:23
carljmtiredbones, i don't go to school anymoe21:23
carljms/anymoe/anymore21:23
carljmwhen I did, I went to Goshen College (northern Indiana)21:24
tiredbonescarljm, You work for a living?21:24
carljmtiredbones, yep, crazy thing, eh?21:24
tiredbonescarljm, Areyou going to be using zope in your day job?21:24
carljmtiredbones, sort of21:25
carljmtiredbones, i work for a community development agency21:26
carljmtiredbones, my day job consists of volunteering my time at a number of community nonprofits21:26
carljmtiredbones, at one of them, they wanted a web calendar solution21:26
carljmi chose SchoolBell21:26
carljmit had bugs, I fixed a few of the more glaring ones that were affecting them21:26
carljmdoing that got me interested in Zope21:26
carljmand here I am21:26
carljmtiredbones, how about you, where do you live/study?21:27
tiredbonescarljm, I'm retired some what, I'm a dad mom and homeschool my kids and build commercial building for myself. I have about forty year in computers, mostly with big iron.. I live in Maine.21:29
tiredbonescarljm, I'm going to go back into the field, thus the reason for my interest with schooltool.21:31
tiredbonescarljm, Think haven't change all that much only the terms.21:32
tiredboness/Think/things/21:33
carljmtiredbones, very neat - so what environment were you working in forty years ago in computers?21:33
carljmtiredbones, and congrats on homeschooling the kids, that's a big job, i plan to do the same21:34
tiredbonescarljm, IBM and a product called CICS.21:34
tiredbonescarljm, Homeschooling gave more meaning to my life than anything. It should me mandatory for parents.21:36
carljmtiredbones, an ironic conversation to be having here in #schooltool - a product dedicated to serving the needs of institutional schooling21:39
tiredbonesThat why I'm doing it.21:39
carljmwhat do you mean?21:40
tiredbonesI don't think is needs to be institutional.21:40
tiredbonesIf we can ever pull education away from the unions, then maybe we can educate our childern.21:41
tiredbonesthat is another use case.21:42
tiredbonesBack to the days of Plato.21:43
*** pcardune_ has joined #schooltool21:43
tiredbonespcardune, when you sign on as _pcardune is that because your machine time out?21:44
tiredbonesand then switches you to pcardune.21:45
pcardune_yeah21:45
*** pcardune_ is now known as pcardune21:45
pcarduneok, I just got off the phone with elkner21:46
tiredbonescool21:46
carljmtiredbones: i agree about education - though I don't know that i'd frame it as anti-union, but that's another discussion...21:47
tiredbonestrue.21:47
tiredbonesI use to be on the school board.21:47
pcarduneI am pro homeschooling21:48
pcarduneat least for certain subjects21:48
pcarduneanyways, to get back to your question21:48
tiredbonesmy son does the hons lab work at school and everthing else at home.21:49
pcardunenot having IPerson contain IWorkLog is ultimately just a design decision and you actually could implement it that way and have everything work just fine21:49
pcarduneit really all goes back to the nature of the components we are making21:50
tiredbonespcardune, would it be hard to pull apart?21:50
carljmpcardune: summary of the pros/cons of the design decision?21:51
pcarduneyou mean like when we refactor?  no, it wouldn't be that hard21:51
carljmpcardune: what about the "nature of the components" suggests a certain direction?21:51
tiredbonespcardune, because of the nature and importance of interfaces and the fact that the schema determines the data structure for future groeth.21:52
pcardunewell, Person's don't inherently have work logs21:52
pcarduneyou want to connect things to the real world as much as possible21:52
tiredbonespcardune, refactoring does not take in the data quality.21:53
pcardunewhen a person does actually have work logs, it is more out of happenstance21:53
carljmok21:53
pcarduneas far as pros vs. cons21:53
carljmjust out of curiosity, if Person was a third-party interface that we can't touch, could we still make it a container for worklogs if we wanted to go that route?  and if so, how would we do it?21:53
pcarduneyes you could21:54
pcarduneand this is in fact the proper way to do it21:54
pcardunesince worklogs aren't instrinsic to a Person object, making Person a container for work logs is no good, so we want to keep the objects distinct21:55
pcardunewhat you would do is create an IWorkLogContainer interface21:55
flintpcardune, well, I am having fun, carl you stay with this for me eh?21:55
pcarduneand set up constraints for having IWorkLogContainer contain IWorkLog21:55
*** _pcardune has quit IRC21:55
pcardunethen in configure.zcml21:55
*** flint has quit IRC21:56
pcarduneyou can add21:56
pcardune<content class="timeclock.person.Person">21:56
pcardune<implements interface="timeclock.interfaces.IWorkLogContainer />21:57
pcardune</content>21:57
pcardunefor example, if we wanted to attach this to schooltool21:57
pcarduneand we had the timeclock package and the schooltool package in the path then we could say:21:57
pcardune<content class="schooltool.person.Person"> <implements interface="timeclock.interfaces.IWorkLogContainer" /> </content>21:58
pcarduneand that would go in timeclock/configure.zcml21:58
pcarduneso we wouldn't touch anything in schooltool, but now our schooltool person would be able to container IWorkLog instances21:58
carljmright21:59
pcardunethis is the real flexibility with zope21:59
carljmhave to get used to this business of hooking things up with zcml - my instinct is still to inherit and extend21:59
pcarduneif you use zcml then it is *super* flexible21:59
tiredbonesI think of conponent arch as putting together a train.22:00
pcarduneI would agree with you tiredbones but trains are too linear :)  zope3 is anything but linear22:01
tiredbonesyea, I know.22:01
pcardunein any case, carljm if we put a constraint in IPerson saying it can contain IWorkLog, then we have reduced the flexibility of the api22:02
pcardunethat's the main reason we don't do that22:03
tiredbonesMy concerns with interfaces, as they relate to schemas, is changing data needed.22:03
carljmsure22:04
pcardunethat is a valid concern22:04
pcardunewhich is why it is important to design your interfaces as best you can the first time22:04
tiredbonesbecause once you build your schema, then you what to make sure your contract is always with all its attributes.22:05
tiredbonesWaht did I say22:05
pcardunei'm not sure, i got confused at "then you what to make"22:05
pcarduneoh wait, maybe what=want22:06
tiredbonesBasically, you alway want to service your contract 100% of the time.22:06
tiredbonesIf data changes then it makes it hard to change your schema.22:07
pcarduneright, so if you want to add attributes to a schema, you should extend it with subclasses22:07
tiredbonesYea, but now where getting make to inheritence messes.22:08
tiredboness/make/back/22:08
pcardunejust wait until we do stuff with adapters22:09
pcarduneor adaptors22:09
tiredboneslike I said, normalize normalize normalize! to avoid this issue.22:10
pcarduneI suppose you're right, although instead of calling it normalize, we call it, "understanding the problem domain"22:11
tiredboneslike I said earlier, only the term have change.22:11
pcardunein the real world when you want to make a change to the api and you already have a bunch of users who don't want to reenter all their data with the new api, zope has a generations package that allows you to do that automatically and make it transparent22:12
tiredbonesLet your data do the talking!22:12
pcarduneI've got to go have some lunch22:13
pcardunesee you all later.22:13
tiredbonesthanks for the talk.22:13
pcardunethanks for keeping me on my toes :)22:13
carljmthanks pcardune22:16
carljmlater22:16
carljmi've got to go also, good talking with you tiredbones22:16
tiredbonesbye22:16
*** carljm has quit IRC22:16
*** ffsnoopy has joined #schooltool22:41
ffsnoopypcardune: are you available paul?22:41
tiredbonesffsnoopy, he's gone to lunch.22:42
ffsnoopyokay, thanks :)22:42
*** ffsnoopy has left #schooltool22:47
*** pcardune has quit IRC23:03
*** pcardune has joined #schooltool23:17
*** th1a has quit IRC23:17
tiredbonespcardune, can I ask a qustion about python search path?23:19
pcardunesure23:19
tiredbonesif I create an instance and start that instance up and I created the slug in the instance etc/package-include shouldn't I see somthing in content screen?23:21
tiredbonesrelating to the package23:21
pcardunenot necessarily23:22
tiredboneswhen wouldn't I23:22
*** ignas has quit IRC23:23
pcarduneyou would only see something in contents if you had registered an AddMenuItem for something in the package23:23
* tiredbones got to look at worldcookery and messageboard.23:24
tiredbonespcardune, I should beable to import the modules from python prompt?23:25
pcarduneassuming they are in the path yes23:26
tiredboneshow should this be coded in python prompt?  from worldcookery import recipe???23:27
tiredboneshow much of the pathe has to be given?23:28
pcarduneas much as is needed23:28
pcarduneif you are in the zope3/lib/python directory23:28
tiredbonesyes23:29
pcarduneand worldcookery is in that directory too23:29
tiredbonesyes23:29
tiredbonesI tired many23:29
pcardunethen in a python prompt, the path to stuff inside worldcookery is import worldcookery.path.to.stuff.in.worldcookery23:29
tiredbonesso it should be import worldcookery import recipe if you go accorden to the book.23:30
pcardunei don't remember what's in the book exactly.  is there a recipe.py file in the worldcookery folder?23:31
tiredbonesyes23:31
tiredbonesthe implementor23:31
tiredbonesI also change PYTHONPATH to every possible combination one can thonk off.23:32
tiredbonesthink of23:33
pcardunewell, the current directory is always in the python path23:33
tiredbonesI have no problen importing zope23:35
pcarduneim not sure why you are having that problem then23:36
tiredbonesok thanks23:37
*** tiredbones has left #schooltool23:42
*** vmx_ has joined #schooltool23:53
*** vmx_ is now known as vmx23:53

Generated by irclog2html.py 2.15.1 by Marius Gedminas - find it at mg.pov.lt!