*** pcardune has quit IRC | 02:23 | |
*** jfroche has quit IRC | 03:20 | |
*** wjohnsto has left #schooltool | 05:25 | |
*** wjohnsto has joined #schooltool | 05:25 | |
*** pcardune has joined #schooltool | 05:29 | |
*** didymo has quit IRC | 07:13 | |
*** didymo has joined #schooltool | 08:13 | |
*** pcardune has quit IRC | 08:19 | |
*** pcardune has joined #schooltool | 08:25 | |
*** Aiste has joined #schooltool | 09:00 | |
*** Aiste has quit IRC | 09:42 | |
*** wrobel has joined #schooltool | 09:59 | |
*** Aiste has joined #schooltool | 10:17 | |
*** thisfred has joined #schooltool | 10:32 | |
*** pcardune has quit IRC | 11:33 | |
*** jinty has joined #schooltool | 11:34 | |
*** jfroche has joined #schooltool | 11:55 | |
*** ignas has joined #schooltool | 12:24 | |
*** jfroche has quit IRC | 13:20 | |
*** jfroche has joined #schooltool | 13:20 | |
*** jfroche has quit IRC | 13:51 | |
*** alga has joined #SchoolTool | 14:26 | |
*** alga has quit IRC | 14:29 | |
*** mgedmin has joined #schooltool | 14:56 | |
*** alga has joined #SchoolTool | 15:27 | |
*** mgedmin has quit IRC | 15:31 | |
*** mgedmin has joined #schooltool | 15:33 | |
*** mgedmin has quit IRC | 15:41 | |
ignas | jinty: ayt? | 16:03 |
---|---|---|
jinty | ignas: yep | 16:03 |
ignas | jinty: how important do we want schooltool conf to be? i mean do you prefer things like "which place schooltool person data should come from" to be set in schooltool.conf, or through the web? | 16:04 |
* ignas has an idea of how to solve the architectural dilema and database problems (at last) | 16:04 | |
jinty | I think you need to answer the question: Is this something a sysadmin would need to change? | 16:04 |
ignas | hmm | 16:05 |
jinty | if yes, then it should be in the config filr | 16:05 |
jinty | file | 16:05 |
ignas | jinty: do you have time for a story? :) | 16:05 |
jinty | guess so | 16:05 |
ignas | my idea is having 2 layers of components | 16:05 |
ignas | separating the "model" and the "view" | 16:06 |
ignas | so when initially configuring schooltool | 16:06 |
ignas | you would select "model components" | 16:06 |
ignas | let's say you would have 3-4 different "Person Source" components | 16:06 |
jinty | I think I have your answer for you: | 16:07 |
ignas | external database, "some proprietary SIS (TM)", "lyceum DB (TM)", and schooltool built in | 16:07 |
jinty | can I permanently break the schooltool database by twiddling this value? | 16:08 |
ignas | hmm | 16:08 |
jinty | can I just twiddle it and see what happens without bad things happening? | 16:08 |
ignas | let me try and explain | 16:08 |
jinty | ok | 16:08 |
ignas | so let's say in the middle of the year you suddenly want to switch to another Person store | 16:09 |
ignas | and now it depends if you want to "Remove" the old one (as in launch subscribers that clean up after all the objects) | 16:09 |
ignas | or just "disable" the old one | 16:09 |
ignas | and same for the new store | 16:09 |
ignas | you can say - take persons from here | 16:09 |
ignas | but other components will not perform any operations with their data upon switch | 16:10 |
ignas | or you can "Register" the new data store | 16:10 |
ignas | so that it will tell let's say to attendance - here we go 20 new persons, do something about them | 16:10 |
ignas | but normally - if you are not doing "Unregister" "Register" - the database would stay untouched | 16:11 |
ignas | with a web UI | 16:11 |
ignas | it is easy to say - now we will use this other database, but as it has all the same persons - don't do anything about it | 16:11 |
ignas | or say - hey, these are completely new persons, remove the data about old ones, and run subscribers for every person in the new database as if he was just added | 16:12 |
jinty | hmm, this is quite difficult to say | 16:12 |
ignas | well - you just pick components you want | 16:12 |
ignas | and either click "Disable"/"Remove" on the ones you don't need anymore | 16:13 |
ignas | and "Enable"/"Register" on the new ones that you will use | 16:13 |
jinty | I think we have 4 possible places to store configuration: python, zcml, config file, ZODB | 16:13 |
ignas | zcml - will not be used for that if i will succeed | 16:13 |
ignas | python - hmm, don't think it is being used now | 16:14 |
ignas | even if it is - it's for UI not data components | 16:14 |
jinty | yes, I agree zcml and python are not the places you want to store this info | 16:14 |
jinty | especially if you want non-developers to be able to change this | 16:14 |
ignas | UI plugins will just say "I depend on Persons and Groups and Lyceum Attendance" | 16:14 |
jinty | I think the config file is only for system administrators | 16:15 |
ignas | and if you will have these 3 data plugins set up, you will be able to enable this "UI" plugin | 16:15 |
jinty | I can't think of much that interests the system administrator in what you've just said | 16:15 |
ignas | indeed, admins care about ports, the place of Data.fs, the place of plugin files | 16:16 |
jinty | also: access control (in/out) | 16:16 |
ignas | ? | 16:16 |
ignas | access control or authentication mechanism | 16:17 |
jinty | the admin generally likes to be able to say: Never make an outgoing connection to anything. | 16:17 |
ignas | ahh | 16:17 |
ignas | hmm, don't know what to do about that | 16:17 |
ignas | i mean - LDAP breaks this ... | 16:17 |
jinty | or "only allow any connections to these IP's" | 16:17 |
jinty | yeah | 16:17 |
jinty | but it's nice to have certain unbreakable rules on the filesystem | 16:18 |
ignas | admin might want to be the one who configures LDAP, SQL connection etc. | 16:18 |
jinty | that can limit damage in case of attack | 16:18 |
jinty | definitely | 16:18 |
ignas | hmm, so if you add a SQL Person component - it will have it's own config file that admin can tweak | 16:19 |
ignas | while the enable/disable part | 16:19 |
ignas | will be left in the Web based UI | 16:19 |
ignas | so you install Schooltool.SQL plugin, you configure it | 16:19 |
jinty | (like cross site scripting attack to change the LDAP server) | 16:19 |
ignas | and then enable it TTW | 16:19 |
jinty | yes, I'd like that kind of thing | 16:19 |
ignas | makes sense | 16:20 |
jinty | at least for my sites, relational database connections are very important | 16:20 |
jinty | because I need to control how many there are | 16:20 |
ignas | yes, and you wouldn't want to edit them through the web i guess | 16:20 |
jinty | to limit resource usage on the database server itself | 16:20 |
jinty | no, I want this kind of stuff only controllable from filesystem files that the schooltool user cannot change | 16:21 |
jinty | i mean "no to TTW control" | 16:21 |
jinty | but, then, I am a special case user that want's things secure | 16:21 |
jinty | others might want them easy | 16:22 |
jinty | so perhaps a one line config file for the plugin: | 16:22 |
jinty | allow_ttw_config = True | 16:22 |
ignas | well - it will depend on the plugin :) | 16:23 |
ignas | i mean - if the author of the SQL plugin will add the UI for ttw configuration - then yes | 16:23 |
jinty | yes, and the user base of the plugin | 16:23 |
jinty | the users will _scream_ for this | 16:24 |
jinty | "Please, let me hold the gun in my hands" | 16:24 |
ignas | at last i know that it is possible to do the plugin thing in such a way that does not break anything if you remove a plugin | 16:25 |
ignas | and that allows users to safely play with the UI | 16:25 |
jinty | mind sharing this insight? | 16:25 |
ignas | plainly isolating persons, groups, resources, calendars from each other as much as possible | 16:26 |
jinty | The problem is pickles that don't have a backing class on the filesystem anymore, right? | 16:26 |
ignas | yes | 16:26 |
ignas | but that is a problem only if "schooltool.person" and "lyceum.person" | 16:27 |
ignas | are storing persons in app['persons'] | 16:27 |
ignas | which is the part that is fixable | 16:27 |
ignas | all the plugins should be contained the way annotations are | 16:27 |
ignas | in their own small space (even if they are in the same ZODB) | 16:27 |
ignas | so only schooltool.person can access app['persons'] and only lyceum.person can access app['lyceum.person'] or the equivalent | 16:28 |
jinty | ah, so something like this: app['persons']['lyceum.person'] | 16:28 |
* jinty waves hands vigorously | 16:28 | |
*** th1a has joined #schooltool | 16:28 | |
ignas | or just plain IAnnotations(person)['lyceum.person'] | 16:28 |
ignas | or just plain IAnnotations(app)['lyceum.person'] | 16:29 |
ignas | i mean | 16:29 |
jinty | yeah, use annotations if the infrastructure is already there | 16:29 |
ignas | so if you remove lyceum person data plugin - UI plugins will yell at you "IPerson data plugin is missing" | 16:29 |
ignas | until you will enable "schooltool.person" or even SQLPerson | 16:29 |
th1a | Well, looks like I've arrived in the middle of an interesting conversation. | 16:30 |
ignas | i would go for something like IPersonData(app) i think | 16:30 |
jinty | yeah, that sounds good, except for the synchronization issues | 16:30 |
ignas | jinty: which ones? | 16:30 |
jinty | I mean, now you have lots of people all over the place | 16:31 |
jinty | suppose you want to add the attribute "Address" to a SQLPerson | 16:31 |
ignas | yes | 16:31 |
jinty | but Address isn't in the SQL database | 16:31 |
ignas | yes | 16:31 |
jinty | then what do you do | 16:32 |
jinty | ? | 16:32 |
ignas | that's the point - you have "schooltool.sql.person" plugin that is an egg | 16:32 |
ignas | so you either reuse it and modify it | 16:32 |
ignas | python way | 16:32 |
ignas | and add an evolution script to schooltool.sql.person.generation | 16:33 |
ignas | ok | 16:33 |
ignas | sql | 16:33 |
ignas | no evolution | 16:33 |
ignas | but you just add the field to the table | 16:33 |
ignas | and modify the code | 16:33 |
ignas | in the data plugin | 16:33 |
ignas | and fix the UI in the UI counterpart | 16:33 |
ignas | or rename it to my_school.sql.person | 16:33 |
jinty | Hmm, my issue was more | 16:33 |
ignas | and do the same | 16:33 |
jinty | I don't want to store the Address in the SQL database | 16:34 |
jinty | it's just a place for authentication | 16:34 |
jinty | LDAP would be a better example, actually | 16:34 |
jinty | but I want it available to schooltool | 16:35 |
ignas | well - mixing SQL and ZODB would be difficult from the plugin perspective | 16:35 |
ignas | LDAP is different | 16:35 |
jinty | and I may, may not want it to move if use a different plugin | 16:35 |
ignas | 1 egg to enable LDAP authentication utility | 16:35 |
ignas | 1 egg to add LDAP as a person data source | 16:35 |
jinty | so how does LDAP as authentication work | 16:36 |
ignas | you can use LDAP authentication, but still use schooltool.person as the storage of information | 16:36 |
ignas | LDAP authentication is not touching schooltool database when authenticating | 16:36 |
jinty | ok, so the issue is kindof avoided for now. | 16:36 |
ignas | and if schooltool Person is not available | 16:37 |
ignas | standard IPersonData interface is used to add one | 16:37 |
jinty | sorry, I know this is taking a long time, but I'm finding it difficult to explain my point | 16:37 |
ignas | not a problem, i want as much feedback as i can get | 16:38 |
jinty | hmm, so lets assume that a "extra_person_data" plugin exists | 16:38 |
jinty | perhaps demographics | 16:38 |
ignas | i'd go for schooltool.demographics.person plugin as a separate data store, but it can be done as an addon as well | 16:39 |
ignas | so let's say an addon | 16:39 |
jinty | so to get demographics info, you would do: | 16:39 |
th1a | No jfroche this morning? | 16:39 |
jinty | IAnnotations(app)['schooltool.demographics'][integer_person_id] | 16:40 |
ignas | jinty: no, you would do: | 16:41 |
* th1a is perfectly happy following along with this conversation for now... | 16:41 | |
ignas | IDemographics(app).getDemographics['string_person_id'] | 16:41 |
ignas | IDemographics(app).getDemographics('string_person_id') | 16:41 |
ignas | th1a: http://licejus.pov.lt/groups/1a/view_timetable.html | 16:42 |
jinty | yeah | 16:42 |
jinty | that's cool | 16:42 |
jinty | I was about to suggest classing plugins according to the interface of the data they can provide | 16:42 |
ignas | and you would either use UI that has IDemographics as a requirement, or enable a Demographics UI plugin | 16:43 |
jinty | that's cool as wee | 16:43 |
jinty | well | 16:43 |
jinty | so the ZODB demographics plugin would probably do what I mentioned | 16:43 |
ignas | so if you disable Demographics Data - UI plugin either yells at you, or disables itself until you enable either the same plugin or another plugin that provides IDemographics | 16:44 |
ignas | yes, ZODB plugin would do that under the hood | 16:44 |
th1a | ignas: What is that showing me? | 16:44 |
jinty | while the SQL demographics plugin would do something completly different | 16:44 |
ignas | th1a: deployed the new things lyceum asked for | 16:45 |
th1a | Is pamoka a period? | 16:45 |
ignas | th1a: yes | 16:45 |
jinty | ignas: hmm, interface suggestion: This looks like the gateway pattern | 16:45 |
* jinty checks his books | 16:45 | |
ignas | now the lyceum database will stay stable as i have evolution scripts for it going | 16:45 |
th1a | Is "1a" a form? | 16:45 |
ignas | "1a" is a class | 16:45 |
th1a | Is "1a" a form? | 16:45 |
th1a | Is 1a a form? | 16:46 |
th1a | oops. | 16:46 |
th1a | Sorry. | 16:46 |
ignas | form? | 16:46 |
th1a | Didn't mean to repeat myself. | 16:46 |
th1a | What do you mean by "class" in this case? | 16:46 |
ignas | group of people | 16:47 |
ignas | students | 16:47 |
th1a | So at some times the class has students in three different sections? | 16:47 |
ignas | yes, some students have german, some have french for example | 16:48 |
ignas | girls have sport with one teacher in one place, guys with another teacher in another place | 16:49 |
th1a | OK. | 16:49 |
jinty | ignas: permutations of the interface IDemographicsGatway(app).getDemographics(PersonId) where the return object implements IDemographics | 16:49 |
ignas | jinty: hmm, that would make sense | 16:50 |
jinty | ignas: why isn't app a Utility? | 16:50 |
jinty | then it would just be getDemographics(PersonId) | 16:50 |
ignas | jinty: because we had the idea of having multiple apps in the same ZODB | 16:50 |
jinty | yes, but then a local utility | 16:50 |
ignas | getDemographics - you would have to import it from somewhere so we still want an adapter or a demographics utility | 16:51 |
ignas | but yes - ISchoolToolApplication(None) is acting like a utility lookup | 16:52 |
jinty | though that should probably be more explicit call to getUtility | 16:53 |
ignas | fixable in the long run :) | 16:54 |
jinty | but I now disagree with myself about getDemographics, for the same reason I don't like zapi | 16:54 |
jinty | rather not introduce a simple wrapper aroung the component interface that just obscures things | 16:55 |
jinty | ok, anyway, it looks good | 16:55 |
jinty | It also works well with the Object-Relational-Mappers that abound | 16:55 |
jinty | the only problem I see if you want to make a fully SQL schooltool | 16:56 |
ignas | you will still have the app in ZODB | 16:56 |
ignas | but the rest will work | 16:56 |
ignas | well - ok | 16:56 |
ignas | calendars will stay in ZODB | 16:56 |
ignas | unless you really really want to store them in SQL | 16:56 |
ignas | and will rewrite everything | 16:56 |
th1a | I don't think a fully SQL-able SchoolTool is ever necessary. | 16:57 |
jinty | yes, but if you apply this pattern to all other things eventually, you will be eventually able to do those things in SQL as well | 16:57 |
* jinty is thinking ___far___ into the future | 16:57 | |
ignas | jinty: not much need to have it in full SQL, but that gets us a lot lot closer to it | 16:58 |
th1a | ignas: I'm a little unclear on how extensive the changes you're discussing here are. | 16:58 |
jinty | the biggest problem I find when I do such things is normally efficient searching | 16:58 |
ignas | jinty: try eficient sorting in UTF-8 strings in SQL ... :( | 16:59 |
* jinty normally just sorts the bytes, no customers have comlained yet | 17:00 | |
ignas | th1a: very extensive, but knowing the direction helps to not mess things up for the future | 17:00 |
jinty | I mean when you want to do a join over people and demographics | 17:00 |
th1a | ignas: Right. | 17:00 |
jinty | yeah, I think that the fact that the pattern makes a SQL schooltool foreseeable is a side effect | 17:01 |
ignas | jinty: and i am talking about the nasty detail that different languages sort differently and SQL can't cope with that (indexing is quite impossible) | 17:02 |
ignas | th1a: so now i will start merging the resource booking branch | 17:03 |
ignas | and talking to lyceum about some related UI improvements | 17:03 |
th1a | ignas: Cool. | 17:03 |
ignas | and begin working on the journal | 17:03 |
jinty | ignas: yep, but all my clients havn't cared about that detail yet, nor even that the bytes of UTF-8 sort differently to unicode | 17:04 |
ignas | :) good to you | 17:04 |
ignas | the first assignement i got was "sort students by surname" | 17:04 |
ignas | and make "čibiraitė" appear before "filipavičius" not after "Zigmuntaitė" | 17:05 |
* jinty loves his clients, their non-techiness, and their englishness :):) | 17:05 | |
th1a | ignas: Coul you make me a very simple report that I could put on the web site that goes through the list of features in your quarterly plan and has a screenshot illustrating the feature. | 17:05 |
th1a | This would be partly for confirmation of your bonus and partly to show people what's going on. | 17:06 |
ignas | someone should do it for the resource booking as well | 17:06 |
ignas | th1a: priority screenshots, or priority merging ? | 17:07 |
th1a | Well, do you want your bonus now or in a month? | 17:08 |
th1a | If you do it now you can give me a new invoice. | 17:08 |
th1a | I don't need the report to be elaborate. | 17:08 |
ignas | ok, i'll see to both as soon as possible :) | 17:09 |
ignas | i still have to look through everything i did this quarter ;) | 17:09 |
th1a | I don't have much else, especially without jfroche here. | 17:10 |
th1a | He must be sleeping off his sprint. | 17:11 |
th1a | jinty: Did you book yourself a flight to Seville? | 17:12 |
ignas | th1a: i am talking to Bronius Skūpas now about some possible improvements already | 17:18 |
th1a | ignas: such as? | 17:19 |
ignas | making timetables for every teacher public | 17:19 |
ignas | making it possible to see the timetable for the whole school for Monday, Tuesday etc. | 17:19 |
ignas | having timetables for sections public as well | 17:20 |
th1a | Yes, those would be generally useful. | 17:20 |
ignas | having timetables for rooms as well | 17:21 |
th1a | ignas: Do you think you can come to a sprint in the US (in Washington) from August 5-8? | 17:21 |
ignas | i think so | 17:22 |
th1a | That's not, say, immediately before school opens in Lithuania? | 17:23 |
ignas | no, schools open 09-01 | 17:23 |
th1a | OK. That's the last big CanDo sprint of the summer, and it would be very helpful to have you there. | 17:24 |
th1a | ignas: So can I tell Jeff you'll be there, or do you want to check your calendar more closely and let me know? | 17:26 |
ignas | i'll look at it | 17:27 |
ignas | and write you an email today or tomorrow | 17:28 |
ignas | ok? | 17:28 |
th1a | OK. | 17:30 |
th1a | That's all I've got. | 17:30 |
th1a | Have a great week. | 17:30 |
* th1a drops the bag of gravel. | 17:30 | |
*** bnguyen has joined #schooltool | 17:35 | |
*** kjcole has quit IRC | 17:43 | |
*** mgedmin has joined #schooltool | 18:18 | |
*** pcardune has joined #schooltool | 18:23 | |
wjohnsto | pcardune: ayt? | 18:34 |
*** jinty has quit IRC | 18:39 | |
*** jinty has joined #schooltool | 18:56 | |
*** pcardune has quit IRC | 19:13 | |
*** thisfred has quit IRC | 19:52 | |
*** pcardune has joined #schooltool | 20:12 | |
* pcardune will be back at 2pm EST | 20:22 | |
* pcardune will answer questions at that time... | 20:23 | |
*** th1a has quit IRC | 20:28 | |
*** ignas has quit IRC | 20:37 | |
*** alga has quit IRC | 20:46 | |
*** pcardune has quit IRC | 20:46 | |
*** Aiste has quit IRC | 21:10 | |
*** pcardune has joined #schooltool | 21:10 | |
*** pcardune has quit IRC | 21:43 | |
*** pcardune has joined #schooltool | 21:54 | |
*** pcardune has quit IRC | 22:20 | |
*** Aiste has joined #schooltool | 22:21 | |
*** pcardune has joined #schooltool | 23:04 | |
*** Aiste has quit IRC | 23:10 | |
*** pcardune has quit IRC | 23:44 |
Generated by irclog2html.py 2.15.1 by Marius Gedminas - find it at mg.pov.lt!