uPortal IRC Logs-2010-04-01

[08:04:27 EDT(-0400)] * athena (~athena@adsl-99-65-194-144.dsl.wlfrct.sbcglobal.net) has joined ##uportal
[08:30:21 EDT(-0400)] * colinclark (~colin@bas2-toronto09-1176131835.dsl.bell.ca) has joined ##uportal
[08:37:28 EDT(-0400)] * athena (~athena@adsl-99-65-194-144.dsl.wlfrct.sbcglobal.net) has joined ##uportal
[09:16:54 EDT(-0400)] * jessm (~Jess@c-71-232-3-151.hsd1.ma.comcast.net) has joined ##uportal
[09:55:15 EDT(-0400)] * EricDalquist (~dalquist@2607:f388:e:0:221:9bff:fe37:e768) has joined ##uportal
[10:00:03 EDT(-0400)] * michelled (~michelled@142.150.154.101) has joined ##uportal
[10:47:44 EDT(-0400)] * michelled_ (~michelled@142.150.154.141) has joined ##uportal
[11:03:39 EDT(-0400)] * lfuller (~sparhk@wsip-72-215-204-133.ph.ph.cox.net) has joined ##uportal
[11:14:36 EDT(-0400)] * colinclark (~colin@142.150.154.101) has joined ##uportal
[11:48:42 EDT(-0400)] * EricDalquist (~dalquist@2607:f388:e:0:221:9bff:fe37:e768) has joined ##uportal
[12:20:56 EDT(-0400)] * athena (~athena@adsl-99-65-194-144.dsl.wlfrct.sbcglobal.net) has joined ##uportal
[12:57:04 EDT(-0400)] * Sememmon (~Sememmon@unaffiliated/sememmon) has joined ##uportal
[14:35:25 EDT(-0400)] * EricDalquist (~dalquist@2607:f388:e:0:221:9bff:fe37:e768) has joined ##uportal
[14:43:51 EDT(-0400)] <EricDalquist> ah xkcd fun
[14:43:53 EDT(-0400)] <EricDalquist> sudo make me a sandwich
[14:43:54 EDT(-0400)] <EricDalquist> try it uot
[14:50:11 EDT(-0400)] <athena> yes, xkcd is awesome today (smile)
[14:50:14 EDT(-0400)] <athena> try "whoami"
[14:50:17 EDT(-0400)] <athena> or "man cat"
[14:50:18 EDT(-0400)] <EricDalquist> yeah
[14:50:24 EDT(-0400)] <EricDalquist> I just got eaten by a grue
[14:50:27 EDT(-0400)] <EricDalquist> ping is fun too
[14:50:28 EDT(-0400)] <athena> uhoh!!
[14:50:29 EDT(-0400)] <athena> (smile)
[14:50:37 EDT(-0400)] <EricDalquist> "go west" a lot gives you a little poem
[14:53:01 EDT(-0400)] <athena> i read through the source (tongue)
[14:53:08 EDT(-0400)] <EricDalquist> lol
[14:54:45 EDT(-0400)] <EricDalquist> apt-get ....
[14:55:54 EDT(-0400)] <EricDalquist> found a bug :
[14:55:58 EDT(-0400)] <EricDalquist> if (($.browser.name == 'msie') || ($.browser.name == 'firefox' || $.browser.versionX < 3)) {
[14:57:43 EDT(-0400)] <athena> is that a bug?
[14:58:02 EDT(-0400)] <EricDalquist> I'm assuming it should be
[14:58:08 EDT(-0400)] <EricDalquist> if (($.browser.name == 'msie') || ($.browser.name == 'firefox' && $.browser.versionX < 3)) {
[14:58:17 EDT(-0400)] <athena> oh, yeah, i see
[14:58:27 EDT(-0400)] <EricDalquist> since right now you get set to the 'better browser' even if you're running firefox 3.x
[14:58:41 EDT(-0400)] <athena> on first glance i thought he'd just decided that any browser w/ a version of less than 3 was probably for crap (smile)
[14:59:01 EDT(-0400)] <EricDalquist> except you get sent there if you're running firefox no matter what (smile)
[14:59:10 EDT(-0400)] <athena> yeah
[14:59:12 EDT(-0400)] <athena> that is sad (smile)
[14:59:33 EDT(-0400)] <athena> love that they link to a page to download not-IE though (smile)
[15:01:10 EDT(-0400)] <EricDalquist> nano is funny (smile)
[15:07:57 EDT(-0400)] <athena> lol
[15:07:57 EDT(-0400)] <athena> yes
[15:08:08 EDT(-0400)] <athena> i think shawn wrote the original CAS in nano
[15:08:10 EDT(-0400)] <athena> or pico
[15:08:14 EDT(-0400)] <athena> or something equally silly
[15:08:14 EDT(-0400)] <EricDalquist> ack
[15:08:24 EDT(-0400)] <athena> i'm with you on that one (tongue)
[15:08:52 EDT(-0400)] <EricDalquist> I'm so addicted to an IDE
[15:08:58 EDT(-0400)] <EricDalquist> I don't think I'd know what to do
[15:09:11 EDT(-0400)] <athena> me too
[15:09:22 EDT(-0400)] <athena> i'm not sure i could remember how to write anything functional w/o one (tongue)
[15:18:00 EDT(-0400)] * michelled (~michelled@142.150.154.101) has joined ##uportal
[15:18:39 EDT(-0400)] * michelled_ (~michelled@142.150.154.141) has joined ##uportal
[15:29:07 EDT(-0400)] <athena> so EricDalquist i'm thinking that maybe it's time to replace the current IPermissible implementations w/ a system that's mostly JPA
[15:29:14 EDT(-0400)] <EricDalquist> +++
[15:29:18 EDT(-0400)] <athena> rather than hard-coding activity names into classes
[15:29:21 EDT(-0400)] <EricDalquist> that would be wonderus
[15:34:58 EDT(-0400)] <athena> i mean i guess they're still kind of hard-coded in in that the portlets use those permissions
[15:35:04 EDT(-0400)] <athena> but it'd be a lot clearer to have them in the database instead
[15:35:07 EDT(-0400)] <EricDalquist> right
[15:35:14 EDT(-0400)] <athena> cool (smile)
[15:35:17 EDT(-0400)] <EricDalquist> but if they are looking up a permission by fname
[15:35:19 EDT(-0400)] <EricDalquist> and that doesn't exist
[15:35:25 EDT(-0400)] <EricDalquist> stuff fails fast with a good error message
[15:35:36 EDT(-0400)] <athena> yeah that'd be great
[15:35:42 EDT(-0400)] <EricDalquist> I'm hoping that whatever you come up with has at a minimum
[15:36:00 EDT(-0400)]

<EricDalquist>

Unknown macro: {long id, String functionalName, String humanReadableName}

[15:36:29 EDT(-0400)] <athena> so here's what i have so far
[15:36:46 EDT(-0400)] <EricDalquist> so we can keep our database key separate from the business key separate from the displayed info
[15:36:59 EDT(-0400)] <athena> yeah
[15:37:35 EDT(-0400)] <athena> so far i have an IPermissionOwner [id, fname, name, description, IPermissible class]
[15:37:55 EDT(-0400)] <athena> and owners have a set of IPermissionActivity [fname, name, description]
[15:38:14 EDT(-0400)] <EricDalquist> nice
[15:38:16 EDT(-0400)] <athena> in the past owners were IPermissible implementations that returned key -> name pairs for activities
[15:38:34 EDT(-0400)] <athena> i've got that set up w/ JPA and import/export
[15:38:37 EDT(-0400)] <athena> seems to work ok
[15:38:59 EDT(-0400)] <athena> and it means we can actually implement a bunch of the name / description stuff gary put in the permissions manager wireframes
[15:39:16 EDT(-0400)] <athena> the one kind of weird part is the IPermissible implementation
[15:39:59 EDT(-0400)] <athena> the part we can't replace easily is that the IPermissible implementation provides a list of valid targets
[15:40:16 EDT(-0400)] <athena> turns out we've been ignoring that entirely in uportal, as well as making up owners that aren't in the owner table (tongue)
[15:40:37 EDT(-0400)] <athena> but in theory you can have IPermissible return the list of all channels, or some static strings, or something
[15:40:55 EDT(-0400)] <EricDalquist> weird
[15:41:02 EDT(-0400)] <athena> though honestly that might not make sense performance-wise if the list of valid targets is several thousand users, or something like that
[15:41:04 EDT(-0400)] <EricDalquist> that doesn't fit into our JPA model at all
[15:41:08 EDT(-0400)] <EricDalquist> yeah
[15:41:08 EDT(-0400)] <athena> no
[15:41:20 EDT(-0400)] <EricDalquist> can that get moved into a DAO or Registry style class?
[15:41:30 EDT(-0400)] <athena> and in our new spring world, doing something like calling newInstance() for a class is kind of awkward anyway
[15:41:39 EDT(-0400)] <athena> perhaps
[15:41:47 EDT(-0400)] <athena> dunno what we'd register in the database - a bean name?
[15:42:14 EDT(-0400)] <EricDalquist> hrm
[15:42:26 EDT(-0400)] <EricDalquist> so that API is supposed to tell you all the things that permission is applied to?
[15:42:48 EDT(-0400)] <athena> no
[15:42:55 EDT(-0400)] <athena> though actually it sort of does that too
[15:43:05 EDT(-0400)] <athena> but what it does is return all the valid things it might be applied to
[15:43:17 EDT(-0400)] <athena> so the GroupsChannel one returns a list of all group and category keys
[15:44:01 EDT(-0400)] <athena> the publishing system owner returns a list of all channel keys
[15:44:10 EDT(-0400)] <athena> (and should return the ALL_CHANNELS target)
[15:45:10 EDT(-0400)] <athena> there's some weirdness here too in that of course you also want a user interface for selecting targets
[15:46:13 EDT(-0400)] <EricDalquist> oi
[15:46:21 EDT(-0400)] <EricDalquist> this sounds like it is prime for cleanup
[15:46:27 EDT(-0400)] <athena> i suppose we could just do autocomplete on the list of valid targets, but i think we'd imagined that for the groups owner, you'd be able to use the groups hierarchical browser and such, though that doesn't give a particularly intuitive model for picking those static group strings
[15:46:28 EDT(-0400)] <athena> indeed (smile)
[15:46:43 EDT(-0400)] <athena> and i think at least this part we can address w/o affecting the main permissions API
[15:47:27 EDT(-0400)] <athena> and i think there's some cool stuff here, since a logical UI for all this means you could more easily start registering and defining your own owner and permission names, then interact w/ them through some REST service
[15:47:39 EDT(-0400)] <EricDalquist> yup
[15:47:41 EDT(-0400)] <athena> i think the targets thing is the big question mark at the moment
[15:47:56 EDT(-0400)] <EricDalquist> so do you know what actually depends on that API right now?
[15:47:59 EDT(-0400)] <athena> do you want me to check in what i have so far, or hold off until we figure out more of what we want?
[15:48:08 EDT(-0400)] <athena> just the permissions manager, which i deleted (smile)
[15:48:14 EDT(-0400)] <athena> so that makes all this a whole lot easier
[15:48:19 EDT(-0400)] <EricDalquist> well that's good
[15:48:24 EDT(-0400)] <EricDalquist> so we could just delete it (wink)
[15:48:33 EDT(-0400)] <athena> we could
[15:48:47 EDT(-0400)] <athena> though it seems like having a way to define what valid targets for a permission might be is potentially useful
[15:49:02 EDT(-0400)] <EricDalquist> yes, I agree
[15:49:30 EDT(-0400)] <EricDalquist> so are we still thinking of sticking with the concept that stuff has to implement IEntity to be able to be targeted?
[15:49:45 EDT(-0400)] <athena> i don't think that concept exists now, actually
[15:49:48 EDT(-0400)] <EricDalquist> oh ok (smile)
[15:49:56 EDT(-0400)] <athena> maybe it was supposed to be at one point - i'd have to ask andrew
[15:50:07 EDT(-0400)] <athena> but targets are just strings
[15:50:17 EDT(-0400)] <athena> some of them happen to be keys for IEntity implementations
[15:50:28 EDT(-0400)] <athena> but a lot are magical strings that a particular system looks for
[15:50:44 EDT(-0400)] <EricDalquist> hrm
[15:50:45 EDT(-0400)] <EricDalquist> ok
[15:51:07 EDT(-0400)] <athena> so things like "ALL_CHANNELS" or "Account Manager"
[15:51:54 EDT(-0400)] <athena> i know the ALL_CHANNELS concept is pretty recent
[15:52:04 EDT(-0400)] <EricDalquist> yeah
[15:52:16 EDT(-0400)] <athena> no idea about "Account Manager" thing, or what that even means
[15:52:23 EDT(-0400)] <EricDalquist> ALL of whatever is probably generally useful
[15:52:30 EDT(-0400)] <EricDalquist> I think it was used by that CPersonInfo channel
[15:52:35 EDT(-0400)] <EricDalquist> or whatever that was called
[15:52:35 EDT(-0400)] <athena> yeah
[15:52:38 EDT(-0400)] <athena> i think so
[15:53:34 EDT(-0400)] <athena> wonder if those were always supposed to have been entitties
[15:53:44 EDT(-0400)] <EricDalquist> probably
[15:54:00 EDT(-0400)] <EricDalquist> that's what the groups code is very much like
[15:55:23 EDT(-0400)] <athena> yeah
[15:55:25 EDT(-0400)] <athena> that sounds plausible
[15:55:32 EDT(-0400)] <athena> is that a restriction we want to try and re-implement?
[15:55:39 EDT(-0400)] <EricDalquist> I don't know
[15:55:55 EDT(-0400)] <EricDalquist> we should probably audit everything that is a target now
[15:55:58 EDT(-0400)] <EricDalquist> and see what doesn't fit
[15:56:01 EDT(-0400)] <athena> i think the only valid thing we're using it for right now is ALL_CHANNELs
[15:56:24 EDT(-0400)] <athena> and that's only because we have this stupid magical behavior of treating channels differently if they're not in a category
[15:56:29 EDT(-0400)] <EricDalquist> and we could probably build into a new API an ALL concept that is applicable for every potential target type
[15:56:40 EDT(-0400)] <athena> yes
[15:56:46 EDT(-0400)] <EricDalquist> since that seems like a generally useful function
[15:56:53 EDT(-0400)] <athena> yeah
[15:57:21 EDT(-0400)] <athena> so maybe what we really need is a way to define types of entities that are valid targets for a given permission activity
[15:57:34 EDT(-0400)] <athena> and then have the UI able to provide ways to select each valid type
[15:57:42 EDT(-0400)] <EricDalquist> yup
[15:58:00 EDT(-0400)] <EricDalquist> store the Class.getName() int the DB
[15:58:16 EDT(-0400)] <athena> probably a set of IEntity classes?
[15:58:21 EDT(-0400)] <EricDalquist> yeah
[15:58:25 EDT(-0400)] <EricDalquist> then create a TargetFinder interface
[15:58:38 EDT(-0400)] <EricDalquist> and in spring have a Map of class names to finder impls
[15:59:03 EDT(-0400)] <athena> or maybe just a subflow for entity selection
[15:59:34 EDT(-0400)] <athena> since we already have a subflow that can be configured to select groups, categories, people, and channels
[15:59:35 EDT(-0400)] <EricDalquist> yup
[15:59:51 EDT(-0400)] <athena> so this is actually an interesting segue into another potential issue i've been looking at
[16:00:03 EDT(-0400)] <athena> i'm pretty sure we want to drop the whole ChannelCategory interface
[16:00:08 EDT(-0400)] <athena> really no reason for it's existence
[16:00:23 EDT(-0400)] <athena> but you can't tell the difference between person groups and channel groups in the database
[16:00:29 EDT(-0400)] <athena> or through any other mechanism, really
[16:00:42 EDT(-0400)] <EricDalquist> right
[16:00:46 EDT(-0400)] <athena> the only way you can tell is whether it's a child of the Everyone or the All Channels group
[16:00:58 EDT(-0400)] <EricDalquist> well the database backed group store needs a JPA refactoring too :/
[16:01:04 EDT(-0400)] <athena> it does indeed
[16:01:16 EDT(-0400)] <athena> is that something we want to do?
[16:01:34 EDT(-0400)] <EricDalquist> yes
[16:01:36 EDT(-0400)] <EricDalquist> eventually
[16:01:42 EDT(-0400)] <EricDalquist> or now, if someone has time
[16:01:57 EDT(-0400)] <EricDalquist> that might even be doable without refactoring the whole of groups & permissions
[16:02:08 EDT(-0400)] <EricDalquist> I've written spring-jdbc backed group stores here
[16:02:11 EDT(-0400)] <athena> if we can do it w/o refactoring groups and permissions that sounds pretty attractive
[16:02:28 EDT(-0400)] <EricDalquist> yeah
[16:02:37 EDT(-0400)] <athena> i have some time for coop dev right now, and JPA implementations are really quick to do
[16:02:46 EDT(-0400)] <EricDalquist> maybe even have referential integrity between groups & permissions
[16:02:56 EDT(-0400)] <EricDalquist> and between individual groups of course too
[16:03:14 EDT(-0400)] <athena> so what would we want to transfer over? i guess maybe UP_GROUP, UP_ENTITY_TYPE, UP_PERMISSION
[16:03:55 EDT(-0400)] <athena> at that point we could also add referential integrity between permission assignments and permission activities
[16:08:28 EDT(-0400)] <EricDalquist> yeah
[16:08:31 EDT(-0400)] <EricDalquist> think that sounds good
[16:08:56 EDT(-0400)] <EricDalquist> group membership would be needed too
[16:09:16 EDT(-0400)] <athena> ah right
[16:09:18 EDT(-0400)] <athena> makes sense
[16:09:18 EDT(-0400)] <EricDalquist> for tracking the object graph (since groups really is a graph and not a tree)
[16:09:24 EDT(-0400)] <athena> yeah
[16:09:36 EDT(-0400)] <athena> i can file a ticket for all this under the groups portlet ticket
[16:10:13 EDT(-0400)] <EricDalquist> sounds good
[16:12:28 EDT(-0400)] <athena> (smile)
[16:12:55 EDT(-0400)] <athena> actually maybe all we need for the valid targets is a pointer to a set of entity type ids
[16:13:14 EDT(-0400)] <EricDalquist> yeah
[16:13:15 EDT(-0400)] <athena> maybe some combination of entity type id + isGroup-ness
[16:13:26 EDT(-0400)] <EricDalquist> are entity types in JPA now?
[16:13:29 EDT(-0400)] <athena> no
[16:13:32 EDT(-0400)] <athena> we'd have to move that over
[16:13:35 EDT(-0400)] <athena> but it's a little table
[16:13:43 EDT(-0400)] <EricDalquist> oh it was channel types that we moved right?
[16:14:03 EDT(-0400)] <athena> yeah
[16:14:18 EDT(-0400)] <athena> hm, guess the other thing we might have to look at is the locking and cache invalidation?
[16:15:19 EDT(-0400)] <EricDalquist> JPA/hibernate does that (big grin)
[16:15:31 EDT(-0400)] <athena> so we can just drop all that?
[16:15:35 EDT(-0400)] <athena> cuz that'd be awesome
[16:15:45 EDT(-0400)] <athena> though i think the whole lock thing might be part of the groups API?
[16:16:11 EDT(-0400)] <EricDalquist> well the cache invalidation has been gone since 3.0
[16:16:15 EDT(-0400)] <EricDalquist> the code may still be there
[16:16:18 EDT(-0400)] <EricDalquist> but everything uses ehcache
[16:16:29 EDT(-0400)] <EricDalquist> the locking thing can probably go away too
[16:16:38 EDT(-0400)] <EricDalquist> and be relegated to an implementation detail of the group store
[16:16:48 EDT(-0400)] <athena> sounds good
[16:16:56 EDT(-0400)] <EricDalquist> which can just throw some sort of recoverable concurrent modification exception in the case of it happening
[16:17:21 EDT(-0400)] <athena> (smile)
[16:17:23 EDT(-0400)] <EricDalquist> or if it ever became an issue we could just switch the TX isolation for certain group dao operations
[16:17:31 EDT(-0400)] <athena> yeah
[16:17:46 EDT(-0400)] <athena> well, this all sounds like worthwhile changes
[16:17:55 EDT(-0400)] <athena> and i probably actually have time to do them
[16:18:34 EDT(-0400)] <EricDalquist> sounds great
[16:18:43 EDT(-0400)] <athena> so a couple things
[16:19:01 EDT(-0400)] <athena> first, i'm hoping it's ok to change around a lot of the permission names and such?
[16:19:18 EDT(-0400)] <athena> i realize that'll mean we have to figure out what to do w/ that at migration time, but a lot of them just don't make sense
[16:19:26 EDT(-0400)] <EricDalquist> yeah
[16:19:29 EDT(-0400)] <EricDalquist> I think that is ok
[16:19:30 EDT(-0400)] <athena> or use the fully qualified classnames of classes we're deleting
[16:19:31 EDT(-0400)] <athena> cool
[16:19:33 EDT(-0400)] <EricDalquist> can you maintain a wiki page of the changes?
[16:19:36 EDT(-0400)] <athena> yes
[16:19:41 EDT(-0400)] <athena> sounds like a good idea
[16:19:44 EDT(-0400)] <EricDalquist> that's what I've done in the past to help with making sure we dno't miss something
[16:19:49 EDT(-0400)] <athena> yeah, that sounds great
[16:20:05 EDT(-0400)] <athena> would it be better to kind of do this work / check it in in stages?
[16:20:13 EDT(-0400)] <athena> i'd kind of rather not have a huge commit with all of this
[16:20:23 EDT(-0400)] <athena> maybe we can break it out into refactoring the IPermissible system
[16:20:30 EDT(-0400)] <athena> then refactoring the permissions portlet to use it
[16:20:40 EDT(-0400)] <athena> then refactoring the groups store
[16:20:59 EDT(-0400)] <EricDalquist> stages is fine
[16:21:05 EDT(-0400)] <EricDalquist> yeah
[16:21:14 EDT(-0400)] <EricDalquist> I'm on furlough tomorrow
[16:21:22 EDT(-0400)] <EricDalquist> so I'm hoping to make good headway on the pluto stuff
[16:21:25 EDT(-0400)] <athena> awesome!
[16:21:27 EDT(-0400)] * athena cheers
[16:36:03 EDT(-0400)] * michelled (~michelled@142.150.154.101) has joined ##uportal
[17:28:47 EDT(-0400)] * michelled_ (~michelled@142.150.154.141) has joined ##uportal
[19:39:33 EDT(-0400)] * lfuller (~sparhk@wsip-72-215-204-133.ph.ph.cox.net) has joined ##uportal
[20:19:15 EDT(-0400)] * lfuller (~sparhk@wsip-72-215-204-133.ph.ph.cox.net) has left ##uportal