aelkner | thla: I have a question. | 00:39 |
---|---|---|
th1a | aelkner: I was on the can. | 00:44 |
aelkner | I was wondering why I can't run python test.py without getting and import error "import transaction". | 00:46 |
th1a | What platform are you on? | 00:46 |
aelkner | Edgy. | 00:46 |
th1a | Did you apt-get the ZODB? | 00:47 |
aelkner | I did a full svn co of the zope source. | 00:47 |
th1a | apt-get install python zodb | 00:48 |
aelkner | Is that going to conflict with my zope instance? | 00:49 |
th1a | I don't think so. | 00:49 |
aelkner | I'm not sure I want to chance it. I'm working on editing Stephan's book, and I want my zope environment to be clean. | 00:50 |
th1a | Then I don't know what to tell you. | 00:51 |
aelkner | What if zope ends up finding the zodb where apt-get puts it. That would mean it would be running two different versions at the same time. | 00:52 |
aelkner | Well, I suppose it would be safe to apt-get remove it if I run into problems. | 00:52 |
th1a | That, and the PYTHON_PATH determines the sequence it checks, right? | 00:53 |
aelkner | So I could PYTHON_PATH to the zodb within zope, right? | 00:53 |
aelkner | Right now I have no python path, and zope works fine. | 00:54 |
th1a | Uh... quite frankly, I don't really understand that stuff. | 00:54 |
aelkner | Do you have zope running on the same machine you use to develop tinyzis? | 00:54 |
th1a | But it is easily enough undoable, and it should work. | 00:54 |
th1a | Yes. | 00:55 |
aelkner | Ok. I'll do the apt-get. | 00:55 |
aelkner | apt-get install zodb yields "Couldn't find zodb". Am I doing something wrong? | 00:56 |
th1a | sorry 'python-zodb' | 00:57 |
aelkner | Ok. Now I'm getting further into the tests which yields SIF errors. From Will I understand that you expect that. | 01:02 |
pcardune | th1a, how is the new schooltool interface going? | 01:06 |
th1a | pcardune: It needs you. | 01:07 |
pcardune | how so? | 01:07 |
th1a | ignas & vidasp just don't have any enthusiasm for it. | 01:07 |
pcardune | well i suppose it is pretty tough | 01:08 |
th1a | Perhaps we can get jfroche going on it. He's more of a web designer. | 01:09 |
pcardune | if only svn update didn't take forever... I could check it out | 01:10 |
* pcardune watches grass grow as 'svn up' sits there | 01:10 | |
th1a | We're working on it... | 01:11 |
jfroche | th1a: i am not that good at design but i know people | 01:11 |
th1a | I don't understand why it works fine in Rhode Island and not in VIrginia. | 01:11 |
pcardune | nor in WAshington | 01:12 |
pcardune | aha, it worked when i switch to svn+ssh | 01:16 |
th1a | Hm... | 01:16 |
*** pcardune has quit IRC | 01:28 | |
aelkner | thla: I have Will joining us at around 8:00. Jeff wants us to work on tinyzis at the sprint, so we need to prepare. | 01:33 |
th1a | You know, you guys REALLY, REALLY, REALLY should work on an agent. | 01:33 |
th1a | Really. | 01:33 |
th1a | I mean it. | 01:33 |
aelkner | Really? | 01:33 |
th1a | Really. | 01:34 |
aelkner | Do you really mean it? | 01:34 |
th1a | I really mean it. | 01:34 |
aelkner | Cool. What is an agent? | 01:34 |
th1a | What talks to TinyZIS. | 01:34 |
aelkner | Ok. I thought so. | 01:34 |
th1a | Are you working with Will Dickerson on this? | 01:35 |
aelkner | I see you created tz-run.py to start the server. | 01:35 |
aelkner | Yes. | 01:35 |
aelkner | He's joining around 8:00 tonight. | 01:35 |
th1a | I chatted with him about what he should work on. | 01:35 |
aelkner | He thinks we need to get into threading. | 01:35 |
th1a | Well, you see the threading comes in if you want to integrate the agent into a server like SchoolTool. | 01:36 |
aelkner | Well, let's walk before we try to run. | 01:36 |
th1a | Because then SchoolTool has to send queries to TinyZIS but not block the rest of the app waiting for the reply. | 01:36 |
th1a | Right. | 01:36 |
aelkner | If schooltool talks to an agent, then the agent is a server from schooltools point of view, right? | 01:37 |
th1a | The agent would be a SchoolTool component. | 01:37 |
aelkner | Or is it an imported mdule. | 01:38 |
aelkner | Oh. | 01:38 |
th1a | But the agent would be acting as a HTTP client at times. | 01:38 |
th1a | So when it does client-like things, it needs to be in a separate thread. | 01:38 |
aelkner | Yes, it's a client to the tinyzis server we start with tz-run.py, right? | 01:38 |
th1a | Sometimes. | 01:39 |
aelkner | Whentimes. | 01:39 |
th1a | In HTTP terms, they can both act as a client or server. | 01:39 |
th1a | So the agent sends a SIF_Register message to the ZIS. | 01:39 |
th1a | The agent is an HTTP client & the ZIS is an HTTP server. | 01:40 |
th1a | But if the agent is a "push" agent, when the ZIS gets a message for the agent, the ZIS will act like an HTTP client and send a SIF_Message to the agent. | 01:41 |
th1a | (if the agent is a "pull" agent, it only acts as an HTTP client and has to request its messages) | 01:41 |
aelkner | The agent tell ZIS it's hostname and port? | 01:41 |
th1a | Yes. | 01:41 |
aelkner | Is that message already part of ZIS? | 01:41 |
aelkner | I think I found it. | 01:44 |
aelkner | ZisHandler's register method has logic for push that looks for the url. | 01:45 |
aelkner | That url would contain oth the hostname and port, right? | 01:45 |
th1a | Yes. | 01:46 |
th1a | (I guess...) | 01:46 |
th1a | Don't really have the whole spec memorized ;-) | 01:46 |
aelkner | Could you look at the code to see if I'm getting it right: tinyzis.py, class ZisHandler? | 01:47 |
aelkner | Never mind. Your previous message above make me realize I got it right. | 01:50 |
aelkner | Instead, let me suggest a plan for Will and me to get started: | 01:52 |
aelkner | 1) We build a python module that starts a agent server | 01:52 |
aelkner | 2) Another module will send requests to the agent as if it were school tool | 01:53 |
aelkner | 3) When we know all is working, we can move on to bolting it into schooltool as a component | 01:53 |
aelkner | I need to do a LOT of studying to get up to speed with zope and schooltool, but I'm sure Will would be able to bring me along with that. | 01:54 |
aelkner | Oh yes, and of course we will need to use threading eventually to solve the blocking problem. | 01:57 |
th1a | Just do a pull agent, then it just has to act as a client. | 01:57 |
aelkner | Doesn't you tests already do that? | 01:58 |
th1a | Do a pull agent that uses a text file as its database and handles SIF_Request messages. | 01:58 |
th1a | Well, that's a very simple case. | 01:58 |
aelkner | Woops, I confuse pull and push. | 01:58 |
aelkner | Oh no I don't. Now yo're confusing me. | 01:59 |
aelkner | I'd like to kep things simple by continuing to operate independently of schooltool. | 02:00 |
th1a | Absolutely. | 02:00 |
aelkner | However, we need three things to really feel we've done anything: | 02:00 |
th1a | Think of this use case (which is very common in SIF implementations). | 02:00 |
th1a | You've got a legacy app you can't write an agent for. | 02:01 |
th1a | So you do a database export, and write an agent that works off the text file. | 02:01 |
aelkner | Let's talk at a higher level for our use case. | 02:02 |
aelkner | 1) what does the push agent push? | 02:02 |
aelkner | 2) what does the pull agent want? | 02:02 |
aelkner | Any silly application will do. | 02:02 |
th1a | Messages are pushed TO a push agent. | 02:03 |
th1a | A pull agent has to ask if it has messages; it pulls them. | 02:03 |
th1a | Push is automatic from the agents point of view. | 02:03 |
th1a | Pull is manual. | 02:03 |
aelkner | Ok. | 02:03 |
aelkner | For example, a student comes into a school for the first time. | 02:04 |
aelkner | He shows up at the admin office with his mommy and they take his name and whatever else. | 02:04 |
aelkner | Let's keep it simple: name, gender, age | 02:05 |
aelkner | TinyZIS, push agent, pull agent: who does what at this point? | 02:05 |
th1a | OK, the SIS is the provider of StudentPersonal in this zone. | 02:07 |
th1a | So when it adds the record it sends a SIF_Event to the ZIS. | 02:07 |
th1a | The ZIS looks at the subscribers to StudentPersonal and sees that the library system is a push agent and the cafeteria system is a pull agent. | 02:08 |
th1a | It sends a SIF_Message to the library system. | 02:08 |
th1a | It adds a SIF_Message to the cafeteria system's queue. | 02:09 |
th1a | Every hour the cafe system sends a SIF_GetMessage to the ZIS. | 02:09 |
th1a | When it does so, it gets the SIF_Message in the HTTP Response. | 02:09 |
aelkner | I'm confused. | 02:11 |
aelkner | I don't know the terms as well as you do. | 02:12 |
aelkner | SIS vrs. ZIS? | 02:12 |
th1a | SIS = student information system. | 02:12 |
aelkner | Admin ofice. | 02:13 |
th1a | (a generic term) | 02:13 |
th1a | Yes. | 02:13 |
aelkner | Pull agent? | 02:13 |
aelkner | No, push agent. | 02:14 |
aelkner | ZIS asks the SIS for new students every n minutes? | 02:14 |
th1a | Push and pull is only for messages. | 02:16 |
th1a | That is, | 02:16 |
th1a | if an agent has subscribed to an object, | 02:16 |
th1a | and a message comes in that an event has taken place on that object, | 02:17 |
th1a | how is the subscribing agent notified of the change. | 02:17 |
th1a | Push or pull? | 02:17 |
aelkner | Push? | 02:17 |
th1a | Otherwise, agents always are clients. | 02:17 |
th1a | It just depends on if they're push or pull agents. | 02:17 |
th1a | But it only is for sending messages to the agent. | 02:18 |
th1a | At this point it might be easier to just start writing some code... | 02:18 |
th1a | First step is the SIF_Register message. | 02:18 |
aelkner | I'm sorry. It's just dificult for me to code when I don't understand the goals. | 02:20 |
aelkner | I know how to write clients and servers, but I need to know who's serving and who's being the client. | 02:20 |
aelkner | Rather than just talking conceptually, could we stick to our simple example? | 02:20 |
th1a | OK. Forget push agents exist. | 02:20 |
th1a | You're writing a client. | 02:20 |
th1a | Period. | 02:20 |
aelkner | We're talking the SIS application acting as client to ZIS, right? | 02:21 |
th1a | Any pull agent is 100% client. | 02:21 |
aelkner | Let's stick to our use case. | 02:22 |
aelkner | A student comes in. | 02:22 |
aelkner | SIS is a datbase app so the amind person adds the student to the SIS. | 02:23 |
aelkner | Now the SIS app wants the world to know, so it communicates with ZIS. | 02:23 |
aelkner | As a client? | 02:23 |
th1a | Yes. | 02:25 |
aelkner | Great. | 02:25 |
aelkner | It connects to the host and port and send the appropriate SIF message. | 02:25 |
aelkner | It's job is done. | 02:26 |
aelkner | ZIS now has the new student in it's zodb as a message for anyone who's interested. | 02:26 |
aelkner | Meanwhile the cafe is also connected and ready for new students (which happens rarely, but at any time) | 02:27 |
aelkner | So the cafe is a push agent that has registered itself providing its host and port. | 02:27 |
aelkner | The ZIS immediately upon receiving the message from SIS sends the message to the cafe. | 02:28 |
aelkner | I'm I right so far? | 02:28 |
th1a | Yes. | 02:29 |
aelkner | Ok. So Will and I could create the agent for the SIS and then the agent for the cafe and see if we can get them to talk to each other correctly. | 02:29 |
aelkner | Via the ZIS of course. | 02:30 |
th1a | Yes. | 02:31 |
aelkner | Cool. A nice simple app. Just the technical things to hurdle. | 02:31 |
aelkner | We'll let you know of our progress. | 02:34 |
th1a | OK. Good luck. | 02:35 |
aelkner | thla: Are you av available Saturday on #schooltool? | 02:58 |
*** wrobel` has quit IRC | 03:20 | |
*** jfroche_ has joined #schooltool | 03:23 | |
*** jfroche_ has quit IRC | 03:34 | |
*** jfroche has quit IRC | 03:39 | |
*** wdickers has joined #schooltool | 03:55 | |
wdickers | You there aelkner? | 03:55 |
aelkner | Yes. | 03:57 |
aelkner | I was ust about to give up on you. | 03:57 |
aelkner | I had a long talk with Tom today. | 03:58 |
wdickers | What did he say? | 03:58 |
aelkner | Here's what we want to do. | 03:58 |
aelkner | First, to make things simple, we will NOT worry about threading or schooltool components. | 03:58 |
aelkner | WE will start with a couple of simple agents. | 03:59 |
aelkner | That way we can become fluent in that area before going onto other things. | 03:59 |
aelkner | The app is the following: | 03:59 |
aelkner | A student walks in to a new school, having moved from somewhere else. | 03:59 |
aelkner | There is a program called a SIS = Student Information System | 04:00 |
aelkner | It's a datbase of the students in the school. | 04:00 |
aelkner | We will pretend to be that app that talks to the ZIS. | 04:01 |
aelkner | We'll tell the ZIS of the new student. That's one of the agents we will make. | 04:01 |
wdickers | Okay. So we won't mess with the server at all yet? | 04:01 |
aelkner | Well, it's a bit complicated. I'll explain. | 04:02 |
aelkner | tz-run.py invoves tinyzis.py that start the ZIS server. | 04:02 |
aelkner | We shouldn't be touching that for now. | 04:02 |
aelkner | So as we develop, we'll have ZIS running. | 04:02 |
aelkner | If you look at tinyzis.conf, you'll see how it tells what host and port to run on. | 04:03 |
aelkner | What we develop is two agents. | 04:03 |
aelkner | 1) the SIS agent which merely acts as a client to ZIS, sending the students details as explained before | 04:04 |
aelkner | 2) the cafeteria agent, which needs to know whenever a new student has arrived in the school to, say, order more food from then on. | 04:04 |
aelkner | The cafe agent will actaully be a server, so that's where it gets complicate. | 04:05 |
aelkner | You'll be getting plenty of exposure to python just on these pieces alone. | 04:05 |
aelkner | Now. | 04:05 |
aelkner | Some terminology. | 04:05 |
aelkner | There are two types of agents. | 04:06 |
aelkner | Pull agents are merely client to ZIS. ZIS 'pulls' requests from the agent. | 04:06 |
aelkner | It's an unfortunate term from the point of view of ZIS. ZIS pulls. I hate it, but it's how the industry talks. | 04:07 |
aelkner | Push agents are servers from the ZIS point of view. | 04:07 |
wdickers | Yeah, it is kind of confusing | 04:07 |
aelkner | Yeh, I had to get Tom to explain it to me mulitple times before I got it. | 04:08 |
wdickers | So to which does the ZIS send the information, pulls or pushes? | 04:08 |
aelkner | A pull agent connects to ZIS and posts a request, much like a browser would. | 04:09 |
wdickers | Okay, and a push? | 04:09 |
aelkner | HTTP requests are one in one out, meaning the client sends a request and gets a response. | 04:09 |
aelkner | A push agent acts as a client only for the purpose of contacting the ZIS initially. | 04:10 |
aelkner | It sends the ZIS a register message, the response being ok or failure like any clent would get. | 04:10 |
aelkner | However, the push agent's register message contains the host and port of its server. | 04:10 |
aelkner | From then on, ZIS will ack as a client to the push agent any time it needs to send it info | 04:11 |
aelkner | For instance, the student has been added to the ZIS db by the SIS pull agent. | 04:11 |
wdickers | So a pull agent simply sends requests for data and gets data for each request. | 04:12 |
wdickers | But for pushes, why would the ZIS need to send requests to the push agent? | 04:12 |
aelkner | No wait. The ZIS knows that there's a pull agent (the cafe) who's interested in students. | 04:12 |
aelkner | Oops. I meant push agent for the cafe. Sorry. | 04:13 |
aelkner | So ZIS acts as client and send the cafe agent the student message. | 04:13 |
aelkner | I admit it would be easier with diagrams. | 04:13 |
wdickers | so the cafe is a subscriber to that data? | 04:14 |
aelkner | Yes. | 04:14 |
aelkner | Good point. | 04:14 |
wdickers | Do pull agents /request/ data, /give/ data, or both to the ZIS? | 04:14 |
aelkner | Tom didn't mention a third type of agent, i.e., combo, so let's assume the following: | 04:15 |
aelkner | 1) pull agents are clients only | 04:15 |
aelkner | 2) push agents are servers and clients. | 04:15 |
aelkner | So a cafe might learn something when the student first comes in. | 04:16 |
aelkner | For instance, his favorite meals. | 04:16 |
wdickers | okay | 04:16 |
aelkner | If that were interesting to a different app somewhere in the school, then perhaps the cafe would send a message to the ZIS | 04:17 |
aelkner | I.e., act as a pull agent. | 04:17 |
aelkner | Let's keep it as simple as possible for now. | 04:17 |
aelkner | It's complicated enough to code the SIS agent and the cafe agent that only wnats to know of new students. | 04:18 |
aelkner | Shall we give you a chance to digest this for now and start planning the code tomorrow at 10:56? | 04:19 |
wdickers | That sounds good | 04:19 |
aelkner | I suggest getting to know the code that's already there. | 04:20 |
aelkner | I've been doind that. | 04:20 |
aelkner | doctests.txt does a lot of what our code will do, i.e. communicates with a running ZIS. | 04:21 |
wdickers | So I should look over the registering and requesting? | 04:21 |
aelkner | Yes. | 04:21 |
aelkner | It uses exam.py for its test messages. | 04:21 |
wdickers | Alright. I'll see you tomorrow then | 04:21 |
aelkner | Ok. Tomorrow it is. | 04:22 |
*** wdickers has quit IRC | 04:22 | |
*** aelkner has quit IRC | 04:28 | |
*** eukreign has quit IRC | 04:44 | |
*** eukreign has joined #schooltool | 04:45 | |
*** pcardune has joined #schooltool | 04:45 | |
*** eukreign has quit IRC | 04:56 | |
*** eukreign has joined #schooltool | 05:01 | |
*** eukreign has quit IRC | 05:03 | |
*** eukreign has joined #schooltool | 05:05 | |
*** eukreign has quit IRC | 05:12 | |
*** eukreign has joined #schooltool | 05:13 | |
*** eukreign has quit IRC | 06:07 | |
*** eukreign has joined #schooltool | 06:10 | |
*** eukreign has quit IRC | 06:15 | |
*** eukreign has joined #schooltool | 06:16 | |
*** lisppaste5 has quit IRC | 07:00 | |
*** lisppaste5 has joined #schooltool | 07:07 | |
*** lex__ has joined #schooltool | 08:40 | |
*** eukreign has quit IRC | 08:40 | |
*** Aiste has quit IRC | 09:03 | |
*** wrobel has joined #schooltool | 09:35 | |
*** jinty has joined #schooltool | 11:25 | |
*** jfroche has joined #schooltool | 11:35 | |
*** thisfred has joined #schooltool | 12:28 | |
*** Aiste has joined #schooltool | 13:23 | |
*** jelkner has joined #schooltool | 13:46 | |
*** ignas has joined #schooltool | 13:49 | |
*** alga has joined #SchoolTool | 13:58 | |
jfroche | ignas: hello, do know know the good procedure to update a po file ? | 16:01 |
jfroche | (in schooltool) | 16:01 |
ignas | emm | 16:01 |
ignas | what do you mean by "update"? | 16:01 |
ignas | update in rosetta? update in schooltool checkout? | 16:01 |
jfroche | update in schooltool checkout | 16:02 |
jfroche | i downloaded the new po file | 16:02 |
jfroche | should move it to locales | 16:02 |
jfroche | and compile it | 16:02 |
jfroche | thats it ? | 16:02 |
ignas | yes | 16:02 |
jfroche | ok great | 16:02 |
jfroche | no script to compile all po files at once ? | 16:04 |
*** lex__ has quit IRC | 16:05 | |
*** lex__ has joined #schooltool | 16:05 | |
jfroche | ignas: now that i have a new po file, should i put in trunk and then merge my branches or should i just play in my branch ? | 16:10 |
ignas | jfroche: you can put it on trunk if you want | 16:11 |
ignas | not that it matters much | 16:11 |
ignas | but be careful, i might do a bulk import from rosetta timet to time | 16:11 |
ignas | and if you add some non rosetta translations to po file they might get replaced ... | 16:12 |
ignas | as i have neither language skills nor time to check whether new translations are adding translated strings or removing them ... | 16:12 |
jfroche | of course | 16:15 |
jfroche | you told me, you are using something else than rosetta ? | 16:15 |
ignas | yep | 16:18 |
ignas | Pootle | 16:18 |
jfroche | ignas: i am trying get-rosetta-translations.py in bin | 16:24 |
jfroche | whats the correct baseurl to provide for schoolbell and schooltool ? | 16:24 |
ignas | jfroche: use makefile commands | 16:25 |
ignas | as for rosetta translations - you must download them manually | 16:25 |
jfroche | so get-rosetta-translations.py is deprecated ? because it goes fetching in rosetta the correct po file | 16:32 |
ignas | i think so | 16:32 |
ignas | if in doubt - ask jinty | 16:33 |
ignas | he is the one who created the machinery | 16:33 |
jfroche | jinty: do you know if get-rosetta-translations.py is deprecated ? | 16:34 |
*** erchache has joined #schooltool | 16:44 | |
erchache | hi | 16:45 |
erchache | im here again! | 16:45 |
erchache | :-D | 16:45 |
erchache | th1a: hi | 16:53 |
jinty | jfroche: er moment | 16:54 |
jfroche | ignas: if i do a make update-translations it requieres a schooltool.pot and a schoolbell.pot file in src/schooltool/locales , what should i put in it ? | 16:55 |
jinty | jfroche: where did you get get-rosetta-translations.py??? | 16:56 |
jfroche | it requires a pot file to do the msgmerge | 16:56 |
ignas | jfroche: want to read "README.txt" ? | 16:56 |
ignas | the "Building SchoolTool from a subversion checkout" part | 16:57 |
jfroche | right :) | 16:57 |
jinty | afterwards you can read the part in the makefile in trunk " Makefile rules for importing and exporting translations to rosetta:" | 16:57 |
jfroche | jinty: it's in bin | 16:58 |
jinty | ah, it used to work until launchpad disallowed direct downloads of po files | 17:01 |
jfroche | ok | 17:01 |
jinty | I don't know if they still require e-mail | 17:01 |
jinty | we should probably just delete that script if it's not going to work. | 17:02 |
jfroche | it's slow to get po files ... | 17:02 |
ignas | jfroche: well, not that one needs to do that often | 17:03 |
jfroche | automated rosetta upload/download could be good for working together on translations | 17:05 |
ignas | how? | 17:07 |
ignas | i thought that rosetta is for working together on translations | 17:07 |
jfroche | yep but once somebody else has finish to translate something you have to request for a mail ... | 17:07 |
jfroche | wait for the mail | 17:08 |
jfroche | and copy it to the right folder | 17:08 |
ignas | well, yes if you want them to be very very up to date - yes | 17:08 |
ignas | though do you really need that so much ? | 17:08 |
jinty | I reacall the issue was that downlaoding a PO file was blocking a thread for too long and hurting responsiveness of launchpad | 17:08 |
ignas | i mean downloading translations once a week is more than enough | 17:08 |
jfroche | i have 2 teacher translating in french | 17:08 |
ignas | yes, and both of them can work on rosetta | 17:09 |
ignas | at the same time | 17:09 |
jinty | jfroche: can you put the password for the zodbpacker user of the new schooltool site in your homedirectory? | 17:09 |
jfroche | right and each time they will finish the translation they will have to send me the po file or i ll have to download it | 17:09 |
jfroche | jinty: isnt it the same as usual ? | 17:09 |
jinty | hmm, didn't work when I tried it, but I will try manually | 17:10 |
ignas | jfroche: no they will not have to send anything, they will use rosetta for translation, and you will download the most up to date translations like once every few days ... | 17:10 |
th1a | Now would be a good time to pack the schooltool.org database, since I just deleted all those members. | 17:11 |
jfroche | asking every few days for a mail to rosetta is boring | 17:11 |
jinty | jfroche: If you can come up with a script that automatically recieves that mail and parses it, be my guest:) | 17:12 |
jinty | and must be robust | 17:12 |
jfroche | no thank you :) no way to make this po view back in rosetta ? | 17:13 |
ignas | jfroche: nope, really, the policy is - everything that might run more than some amount of time - must be an external process | 17:13 |
ignas | as some po files take a while to generate - they are doing it that way | 17:14 |
jfroche | i see | 17:14 |
jfroche | jinty: working for you ? | 17:15 |
jinty | hmm, my init script isn't working, that's the second time today zope's denial that unix exists has bitten me | 17:16 |
jfroche | ignas: with Pottle how do you update the po file in Rosetta ? | 17:18 |
ignas | you can import a po file to rosetta iirc, haven't tried it yet though | 17:19 |
jfroche | cause for now upload is disabled in Rosetta | 17:20 |
*** erchache has quit IRC | 17:20 | |
jfroche | just hope it's just "for now" | 17:20 |
*** vidasp has joined #schooltool | 17:25 | |
ignas | jfroche: btw, do you know which po file to download? | 17:26 |
jfroche | mean the french one ? | 17:27 |
ignas | mean the 2006 one | 17:27 |
jinty | jfroche: no, the password I have isn't working for me | 17:28 |
ignas | jfroche: https://launchpad.net/products/schooltool/2006/+translations | 17:30 |
*** vidasp has quit IRC | 17:31 | |
jfroche | jinty: try now | 17:31 |
jfroche | zodbpacker | 17:31 |
jfroche | pwd in /var/local/zope/instance287-dev | 17:31 |
jinty | looks, good. I'll delete that file now | 17:37 |
jfroche | ignas: for french https://launchpad.net/products/schooltool/+translations is more up to date than https://launchpad.net/products/schooltool/2006/+translations | 17:39 |
ignas | jfroche: yes, but pot files are very very old in https://launchpad.net/products/schooltool/+translations | 17:40 |
jfroche | argh will have to merge both ? | 17:40 |
jfroche | as upload is dead i don't want to do that one by one | 17:41 |
ignas | where did you see the upload being dead ? | 17:41 |
jfroche | https://launchpad.net/products/schooltool/2006/+pots/schooltool/fr/+upload | 17:42 |
ignas | ouch | 17:42 |
ignas | well, i'd guess that you could merge po files with some tool offline and commit the new po files into your branches to "protect" translations from accidental overwrite ... | 17:45 |
jfroche | yep i ll do that | 17:45 |
ignas | jfroche: did replacing the rst with a pt help with translations for online help? | 17:50 |
jfroche | havent tried yet | 17:51 |
jfroche | the string of online help will be in po file then like that ? | 17:51 |
jfroche | yes | 17:51 |
jinty | jfroche, th1a: the new site should be live now | 17:54 |
jfroche | jinty: great, thanks | 17:55 |
jfroche | you changed the logo ? | 17:55 |
jfroche | cache updated sorry | 17:56 |
*** wdickers has joined #schooltool | 17:57 | |
* jinty cleans up a few things he wanted to for a long time | 17:59 | |
*** aelkner has joined #schooltool | 18:02 | |
aelkner | Hey Will. | 18:02 |
wdickers | Hello | 18:02 |
aelkner | So I thought about how to scturcture the code from a very high level. | 18:02 |
aelkner | We need: | 18:03 |
aelkner | 1) a module called agentSis.py containing the class for the SIS agent. | 18:03 |
aelkner | 2) agentCafe.py, the same idea | 18:03 |
aelkner | 3) I can't think of a good name, but for now, agentTests.txt | 18:04 |
aelkner | 4) driveAgentTests.py | 18:04 |
aelkner | 5) agentSis.conf and agentCafe.conf for configuration | 18:04 |
aelkner | That's all I can think of for now. | 18:04 |
aelkner | What do you think> | 18:05 |
wdickers | So agentSis will be the pull agent and agentCafe will be the push agent? | 18:05 |
aelkner | Right. | 18:05 |
wdickers | ok | 18:05 |
aelkner | Oh, I forgot one thing. | 18:05 |
aelkner | If you look at exam.py, the doctests messages, you'll see a bunch of xml messages. | 18:06 |
aelkner | WE should create a module that builds those messages for us based on some parameters we pass. | 18:06 |
aelkner | buildMessage.py? | 18:07 |
wdickers | What would these messages be exactly, XML containing information? | 18:07 |
aelkner | Yes. All messages are in xml format. | 18:07 |
aelkner | Check out exam.py fa second. | 18:08 |
aelkner | Our message building routines could compute the date and time on the fly. | 18:09 |
wdickers | which one is it, provide? | 18:09 |
aelkner | I'm not sure about message id yet. We could fake it at first. | 18:09 |
*** jelkner has quit IRC | 18:09 | |
aelkner | Remember that many of exam.py messages are for error testing. | 18:10 |
wdickers | I believe there may already be something like that in tz-run.py, it uses lxml to generate the messages | 18:10 |
wdickers | ah | 18:10 |
aelkner | But yes, one of them would be provide. | 18:10 |
aelkner | WE need a register message. | 18:10 |
aelkner | The routine should except variable parms for things like push vrs. pull. | 18:11 |
wdickers | <SIF_Message xmlns="http://www.sifinfo.org/infrastructure/1.x" Version="1.5r1"> | 18:11 |
wdickers | <SIF_Register> | 18:11 |
wdickers | <SIF_Header> | 18:11 |
wdickers | <SIF_MsgId>14BA09653261545A31905937B265CE01</SIF_MsgId> | 18:11 |
wdickers | <SIF_Date>19990218</SIF_Date> | 18:11 |
wdickers | <SIF_Time Zone="UTC-08:00">20:39:12</SIF_Time> | 18:11 |
wdickers | <SIF_SourceId>RamseySIS</SIF_SourceId> | 18:11 |
wdickers | </SIF_Header> | 18:11 |
wdickers | <SIF_Name>Ramsey Administration Office</SIF_Name> | 18:11 |
wdickers | <SIF_Version>1.5r1</SIF_Version> | 18:11 |
th1a | Hey. | 18:11 |
wdickers | <SIF_MaxBufferSize>1024000</SIF_MaxBufferSize> | 18:11 |
wdickers | <SIF_Mode>Pull</SIF_Mode> | 18:11 |
wdickers | </SIF_Register> | 18:11 |
wdickers | </SIF_Message> | 18:11 |
wdickers | But should we change the version to 2? It doesn't seem to be supported, but it is the current version out. | 18:11 |
wdickers | Hey Tom | 18:12 |
aelkner | WE can fake the version also until we get things working. | 18:12 |
wdickers | okay | 18:12 |
th1a | I would just focus on 1.5r1 for now. | 18:13 |
aelkner | I think when we have the structure in place, Tom can answer questions in bulk about the things that we fake at first. | 18:13 |
aelkner | There's one answer. | 18:13 |
th1a | I wouldn't fake it -- I'd just explicitly support 1.5r1. | 18:13 |
aelkner | That's col. | 18:13 |
aelkner | What about message ids | 18:13 |
aelkner | Hey Will, how did you enter those xml lines one per second like that? | 18:14 |
wdickers | I just used copy&paste of multiple lines | 18:15 |
aelkner | One copy/paste? | 18:15 |
wdickers | yeah | 18:15 |
aelkner | Oh, it seemed like you did it a line at a time, but I guess that's how chat works. | 18:15 |
th1a | I wrote a routine to generate the id's. It has its own module. I think it is even correct. | 18:16 |
aelkner | Which module? | 18:16 |
th1a | Anyhow, you can just use that module. | 18:16 |
th1a | Uh... something obvious... | 18:16 |
aelkner | Fine. | 18:16 |
aelkner | I was telling will that we need a module to build xml messages from parameters given. | 18:17 |
aelkner | Makes sense? | 18:17 |
wdickers | Yeah. So it would auto-gen the time and ID then? | 18:17 |
aelkner | Exactly. | 18:17 |
wdickers | Alright. Should we use the lxml module? That's what Tom seemed to use | 18:18 |
aelkner | Yes, that's the design decision Tom made that applies to the whole project. | 18:18 |
aelkner | How to start? | 18:19 |
aelkner | Deviding tasks I mean. | 18:19 |
aelkner | I'm not used to working where you can't see each others work on the fly. | 18:20 |
wdickers | Hmm, maybe you should work on the agentCafe and I'll work on the AgentSis? Then tomorrow we can just compare how we go about it | 18:20 |
wdickers | Well tomorrow we'll be meeting anyways | 18:20 |
aelkner | True. | 18:20 |
aelkner | But we need the xml message building routine for both of our agents. | 18:21 |
aelkner | I have an idea. | 18:21 |
aelkner | Let\'s outline here the names of the routines for building the messages. | 18:21 |
wdickers | Alright. | 18:22 |
aelkner | Then we could each code using those routine names even though they don't exist yet. | 18:22 |
aelkner | We wouldn't expect our agents to be runnable. | 18:22 |
aelkner | But we would have spent the time fleshing them out. | 18:22 |
wdickers | But is there a need for multiple functions to create a message? | 18:22 |
aelkner | Let me study exam.py a second. | 18:23 |
aelkner | Ok, what I envision is something like: | 18:24 |
aelkner | import messageBuilder | 18:24 |
aelkner | registerMessage = messageBuilder.register(sourceId='RamseySIS', name='Ramsey Admin Office', mode='pull) | 18:25 |
aelkner | We can always add more parms later as they are named. | 18:26 |
wdickers | Okay, so for now we'll just make register | 18:26 |
aelkner | But we'll make the messages together (on Sat) since we will both want to use them. | 18:27 |
wdickers | So what should we work on tonight? | 18:27 |
aelkner | For now we could assume they exist in the code we each flesh out. | 18:27 |
wdickers | Alright | 18:27 |
wdickers | You work on the push and I'll work on the pull? | 18:28 |
aelkner | At some point we'll break from discussing our plan and do some code as you just suggested. | 18:28 |
aelkner | Right. | 18:28 |
aelkner | Remember to code whatever messageBuilder calls you tink you need even though we won't have them until Sat. | 18:29 |
wdickers | okay | 18:29 |
aelkner | Should we discuss naming conventions before we break to code? | 18:29 |
aelkner | I think it's a good idea to keep things consistent where possible. | 18:30 |
aelkner | Ok. | 18:30 |
wdickers | Yeah. Should the classes be specific as in AgentSis or generic, AgentPull? | 18:30 |
aelkner | class AgentSis (for me class AgentCafe) | 18:30 |
aelkner | Oh, you bring up an elegant point. | 18:31 |
wdickers | Do they inherit from anything that you can think of? I'm thinking Persistent | 18:31 |
aelkner | If we created base classes for push and pull agents, then we could use inheritance. | 18:31 |
wdickers | but for now just our examples? | 18:31 |
aelkner | I'd hold off on using Persistent until we knew we needed it. | 18:32 |
aelkner | But you do bring up a good point about push and pull as possible base classes. | 18:32 |
*** jelkner has joined #schooltool | 18:32 | |
aelkner | class AgentSis(AgentPull): is self documenting, too. | 18:33 |
th1a | You guys shouldn't really do persistence. | 18:33 |
aelkner | We won't. | 18:33 |
aelkner | But Will, if we want to use base classes like AgentPull, then we should plan that out before coding. | 18:34 |
wdickers | You're right | 18:34 |
wdickers | What would all agents be passed? Name, sourceID, and what else? | 18:35 |
aelkner | Let's say the derived class would build a dictionary of things to pass the register builder. | 18:35 |
aelkner | Then the base class would have the register method and would add push and pull as applicable. | 18:35 |
aelkner | And make the actual call to the messageBuilder. | 18:36 |
wdickers | the base class would make the call to messageBuilder, and the derived would call the base class with specifics? | 18:36 |
aelkner | Actually, if the dictionary is set as a member variable, then the base class would have it when called. No parms necessary. | 18:37 |
aelkner | __init__.... | 18:37 |
aelkner | ... | 18:37 |
aelkner | registerDict = {'sourceId': 'RamseySis'... | 18:38 |
aelkner | AgentPull.register(self) | 18:38 |
aelkner | ... | 18:38 |
aelkner | Do you follow? | 18:38 |
wdickers | Yes, and then AgenrPull.register would use self.registerDict | 18:38 |
aelkner | Exactly. | 18:39 |
wdickers | What data needs to be in the dictionary? | 18:39 |
aelkner | The parms from the above call to message builder. | 18:39 |
aelkner | Minus the mode='pull' | 18:39 |
wdickers | okay. Well my class is ending, so I'll work on it this evening | 18:39 |
aelkner | Check in with me on schooltool first before we code anyting, ok? | 18:40 |
wdickers | Okay. Will you be on at 6? | 18:40 |
aelkner | Cool. I'll be there. | 18:40 |
wdickers | See you then | 18:40 |
aelkner | See you. | 18:40 |
*** wdickers has quit IRC | 18:41 | |
aelkner | Jeff, are you there? | 18:41 |
jelkner | aelkner: yup, but i need to go to the doctor for blood extraction | 18:53 |
jelkner | i just sent an email introducing paul bui (whom you know) to will and tom. | 18:53 |
jelkner | paul is interested in the sif work you are doing | 18:53 |
jelkner | he can't make it tomorrow, but he will be there at the december sprint | 18:54 |
jelkner | th1a: great posting to the cando list, tom, that spells it out as clear as can be | 18:56 |
th1a | jelkner: Good. | 18:56 |
th1a | I just don't want you to feel like we're pulling some kind of open source bait and switch. | 18:56 |
*** jinty has quit IRC | 18:57 | |
*** jfroche has quit IRC | 18:57 | |
jelkner | th1a: i have been singing the same tune every chance i get | 18:57 |
jelkner | my message is: | 18:57 |
jelkner | we need to see cando as part of schooltool | 18:58 |
jelkner | and ourselves as schooltool developers | 18:58 |
jelkner | when we need something done in schooltool | 18:58 |
jelkner | we should do it | 18:58 |
th1a | Right. | 18:58 |
jelkner | by communicating with the other schools, we can coordinate our work and make schooltool better | 18:59 |
jelkner | so communication will be key | 18:59 |
th1a | Yes. | 18:59 |
jelkner | we will have to talk more about how to make that happen soon | 18:59 |
th1a | Well, there is already better communication going on between jfroche, ignas & jinty than we've had before between different teams. | 18:59 |
jelkner | great | 19:00 |
jelkner | i need to run and get blood taken from me | 19:00 |
jelkner | i'll catch up with you soon | 19:00 |
*** jelkner has quit IRC | 19:00 | |
* ignas reads the email by th1a | 19:08 | |
ignas | th1a: what do you call "generic SchoolTool problems" ? | 19:15 |
th1a | Well, like "it is too hard to add users." | 19:15 |
ignas | it's not really generic, it's very specific ... | 19:16 |
th1a | perhaps "core" SchoolTool problems? | 19:17 |
ignas | in this department overengineering in the wrong direction is the top one as far as i am concerned ... | 19:17 |
th1a | I've tried to stop contributing to that problem. | 19:18 |
ignas | features that should be cheap become way too expensive :/ | 19:19 |
ignas | and if it is difficult for me to think of ways to change that, what about others ... | 19:20 |
ignas | another problem is - having more people who want improvements/features and have ideas compared to the amount of programming power, but this one is pretty much universal for all software projects ;) | 19:21 |
*** mgedmin has joined #schooltool | 19:56 | |
*** thisfred has quit IRC | 20:23 | |
*** ignas has quit IRC | 21:18 | |
*** Aiste has quit IRC | 21:27 | |
*** dwelsh has joined #schooltool | 21:42 | |
dwelsh | th1a: you there? | 21:42 |
*** Aiste has joined #schooltool | 22:13 | |
*** alga has quit IRC | 22:36 | |
*** mgedmin has quit IRC | 22:37 | |
*** pcardune has quit IRC | 22:43 | |
*** lisppaste5 has quit IRC | 23:31 | |
*** lisppaste5 has joined #schooltool | 23:37 |
Generated by irclog2html.py 2.15.1 by Marius Gedminas - find it at mg.pov.lt!