Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 133 Next »

[08:54:13 CDT(-0500)] <nickblair> hello everyone
[08:54:33 CDT(-0500)] <EricDalquist> nickblair: and I have been chatting about portlet error handling in trunk
[08:54:44 CDT(-0500)] <nickblair> i'm doing some work portlet error handling in the new portletexecutionmanager
[08:54:51 CDT(-0500)] <EricDalquist> and are wondering if anyone (athena) has any thoughts about handling an error from the action
[08:55:03 CDT(-0500)] <nickblair> yep - eric beat me to it (smile)
[08:55:54 CDT(-0500)] <EricDalquist> my current thoughts are if a portlet throws an exception during an action we store the Throwable in the user's session , set a portal URL parameter that denotes an error has been thrown and then do the render redirect
[08:56:14 CDT(-0500)] <EricDalquist> on render the execution manager would see the portal parameter and replace the portlet with the error UI
[08:56:32 CDT(-0500)] <EricDalquist> this would be a one time thing, if the user hit refresh it would re-render the actual portlet
[08:56:47 CDT(-0500)] <EricDalquist> but thats only an idea so far
[08:56:55 CDT(-0500)] <EricDalquist> so feedback is more than welcome
[08:59:16 CDT(-0500)] <EricDalquist> oh and so with that handle-on-redirect approach the execution manager would remote the Throwable from the session after that first render
[08:59:27 CDT(-0500)] <EricDalquist> though I'm not sure the portal URL parameter would be needed
[09:00:03 CDT(-0500)] <EricDalquist> the execution manager could just always check the state of a Session resident map: ConcurrentMap<IPortletWindowId, Throwable>
[09:00:28 CDT(-0500)] <EricDalquist> and if a Throwable exists display the "an exception happened during an action" message
[09:03:55 CDT(-0500)] <EricDalquist> what do you think of all that nickblair?
[09:05:00 CDT(-0500)] <nickblair> i don't really have any other ideas on the subject, so it seems to make sense to me
[09:05:48 CDT(-0500)] <nickblair> would getPortletOutput have to check if there was a throwable in the session map before dispatching to the portlet?
[09:05:56 CDT(-0500)] <EricDalquist> yes
[09:06:02 CDT(-0500)] <EricDalquist> as would startPortletRendering
[09:06:47 CDT(-0500)] <nickblair> startPortletRenderInternal you mean?
[09:06:59 CDT(-0500)] <EricDalquist> right
[09:07:14 CDT(-0500)] <EricDalquist> I don't have the code up right now so I was just guessing at the name (smile)
[09:07:23 CDT(-0500)] <nickblair> i'd prefer the map in the session rather than the url parameter
[09:07:55 CDT(-0500)] <EricDalquist> yeah
[09:08:06 CDT(-0500)] <EricDalquist> well we have to stick the Throwable in the session no matter what
[09:08:30 CDT(-0500)] <EricDalquist> I just hadn't thought it through well enough to realize that a url parameter is pointless
[09:14:55 CDT(-0500)] <nickblair> how should this throwable be cleared from the session?
[09:15:04 CDT(-0500)] <EricDalquist> yeah
[09:15:12 CDT(-0500)] <nickblair> when the portlet fails, we clearly put the throwable in the session
[09:15:25 CDT(-0500)] <nickblair> but what should trigger clear - would the error portlet take care of that?
[09:15:27 CDT(-0500)] <EricDalquist> I think the execution manager when rendering the portlet-in-error should map.remove(windowId)
[09:15:52 CDT(-0500)] <nickblair> ok - so the output is printed once
[09:15:54 CDT(-0500)] <EricDalquist> so really the execution manager will only ever do put and remove from that map
[09:15:56 CDT(-0500)] <EricDalquist> never get
[09:15:57 CDT(-0500)] <EricDalquist> yeah
[10:26:07 CDT(-0500)] <b-rock> Greetings uPortal Devs: I have a missing channel on a fragment. the missing channel is locked. when I go to unlock it I get this trace http://uportal.pastebin.com/Wc4zh9EL. The error makes sense but I still need to remove the channel. Is there a way to pull it out directly in the db?
[10:37:48 CDT(-0500)] <athena> EricDalquist: think the proposed error handling behavior makes sense
[10:38:10 CDT(-0500)] <EricDalquist> great
[10:38:26 CDT(-0500)] <athena> b-rock: maybe do an fragment layout import to overwrite what's currently there?
[10:43:33 CDT(-0500)] <b-rock> oh ok. I'll try that Athena. Thanks.
[11:19:00 CDT(-0500)] <nickblair> i'm working on creating the new error portlet for UP-2661, and this new portlet is going to need to know whether or not the current user is an administrator or not
[11:19:22 CDT(-0500)] <nickblair> to determine which view is returned (one including exception details for admins, plainer for non-admins)
[11:19:35 CDT(-0500)] <nickblair> how does one tell if the current user is an admin?
[11:22:31 CDT(-0500)] <nickblair> or rather, more generically, if there is a permission for seeing error details (rather than just "is admin")
[11:32:57 CDT(-0500)] <athena> nickblair: there's a permission specifically that represents whether a user should be able to see error details
[11:33:26 CDT(-0500)] <athena> i think it's under the UP_ERROR permission owner
[11:33:59 CDT(-0500)] <athena> looks like the activity name is "VIEW"
[11:34:05 CDT(-0500)] <athena> which is pretty annoyingly generic
[11:34:29 CDT(-0500)] <athena> i'd change it to something more descriptive, and maybe eliminate the owner in favor of adding that to the other framework permissions
[11:34:31 CDT(-0500)] <EricDalquist> we can do what we want with that now
[11:34:46 CDT(-0500)] <athena> but anyway for now you could just use that permission for building the portlet
[11:35:15 CDT(-0500)] <athena> by the way, i'm trying to debug an issue w/ the new subscribed tabs feature and i can't figure out what's going on
[11:35:32 CDT(-0500)] <EricDalquist> in trunk?
[11:35:37 CDT(-0500)] <athena> apparently if you turn on database-persisted dlm fragments, you can't import the subscribed tab based fragments - but everything else works
[11:35:42 CDT(-0500)] <athena> in 3.2 - haven't tried in trunk
[11:35:45 CDT(-0500)] <EricDalquist> uhg
[11:35:52 CDT(-0500)] <athena> get this error: Caused by: org.hibernate.HibernateException: instance not of expected entity type: org.jasig.portal.layout.dlm.providers.SubscribedTabEvaluator is not a: org.jasig.portal.layout.dlm.Evaluator
[11:36:04 CDT(-0500)] <athena> but SubscribedTabEvaluator extends Evaluator, so i'm not sure what the isue is
[11:36:06 CDT(-0500)] <EricDalquist> yeah so it isn't annotated for hibernate
[11:36:14 CDT(-0500)] <EricDalquist> would be my guess
[11:40:54 CDT(-0500)] <nickblair> i'm reading the https://wiki.jasig.org/display/UPC/uPortal+3.3+Groups+and+Permissions+Changes and I guess I'm not seeing how to use the new permissions
[11:42:49 CDT(-0500)] <EricDalquist> I think you need to use the static factory method on AuthorizationService
[11:43:21 CDT(-0500)] <EricDalquist> http://uportal.pastebin.com/SFf3nL7f
[11:43:32 CDT(-0500)] <EricDalquist> there is an example from yesterday
[11:43:37 CDT(-0500)] <EricDalquist> missing a little bit of context thought
[11:43:47 CDT(-0500)] <EricDalquist> that is in PortletAdministrationHelper
[11:44:04 CDT(-0500)] <EricDalquist> search in the file for the string "Found permission for category"
[11:46:50 CDT(-0500)] <nickblair> line 691
[11:47:22 CDT(-0500)] <EricDalquist> you can see ther ehow to get the ap object for an IPerson
[11:51:19 CDT(-0500)] <EricDalquist> I need a trackpad that can tell the difference between my hands and baby hands ...
[11:51:30 CDT(-0500)] <EricDalquist> just quit an app by accident ... thanks elsa (tongue)
[12:26:47 CDT(-0500)] <athena> so EricDalquist we wanted to auto-focus the tab editing feature when a tab is first created
[12:27:05 CDT(-0500)] <athena> but i don't know if there's a way for us to tell the page that it's a first request to a new tab
[12:27:24 CDT(-0500)] <athena> is there a way for us to pass a parameter into the theme just once w/o having it cached on subsequent requests?
[12:28:31 CDT(-0500)] <EricDalquist> yes
[12:28:42 CDT(-0500)] <EricDalquist> just a minute and I'll give you the how-to
[12:28:49 CDT(-0500)] <athena> oooh awesome, thanks (smile)
[12:33:10 CDT(-0500)] <EricDalquist> need more ram ... doing stuff in a windows VM right now
[12:33:18 CDT(-0500)] <EricDalquist> and don't have enough memory to have eclipse open too
[12:33:56 CDT(-0500)] <EricDalquist> so I don't have the code in front of me but what you need to do is write a custom TransformerConfigurationSource bean
[12:34:19 CDT(-0500)] <EricDalquist> I think there is a base class impl that lets you pick which one of the two methods you're overriding
[12:34:28 CDT(-0500)] <EricDalquist> then you set your theme XSL parameter that way
[12:34:55 CDT(-0500)] <EricDalquist> and that class also will have its getCacheKey(req, res) called every time
[12:35:10 CDT(-0500)] <EricDalquist> so it can change the value it returns for its key to control caching
[12:35:43 CDT(-0500)] <EricDalquist> and that would get wired up in the renderingPipelineContext
[12:36:00 CDT(-0500)] <EricDalquist> under the themeTransformComponent;s configurationSources property
[12:36:02 CDT(-0500)] <athena> i hear that about the ram
[12:36:09 CDT(-0500)] <EricDalquist> note that all of that was from memory
[12:36:15 CDT(-0500)] <EricDalquist> so I may be slightly off on class/bean/property names
[12:36:19 CDT(-0500)] <athena> hmm
[12:36:51 CDT(-0500)] <athena> i'm wondering whether all this is worth it or we should just pretend that a tab that has the default name and no content is probably true
[12:37:28 CDT(-0500)] <EricDalquist> another option is to add the IPortalRequestInfo object to the SpEL context
[12:37:49 CDT(-0500)] <EricDalquist> then you can do it via a layout URL parameter + some SpEL in renderingPipelineContext
[12:37:54 CDT(-0500)] <athena> hmm
[12:37:57 CDT(-0500)] <athena> yeah
[12:38:02 CDT(-0500)] <EricDalquist> I just added IPerson to the SpEL context last night to get some stuff moved in there
[12:38:07 CDT(-0500)] <athena> neat (smile)
[12:38:29 CDT(-0500)] <EricDalquist> and the configuration source bean that runs the SpEL will automatically include the result of your expression in the cache key
[12:42:25 CDT(-0500)] <athena> very cool
[12:48:35 CDT(-0500)] <EricDalquist> brb
[13:51:21 CDT(-0500)] <EricDalquist> athena: where are we putting framework-portlet specific scripts right now?
[13:51:28 CDT(-0500)] <EricDalquist> javascript files to be specific
[13:51:37 CDT(-0500)] <athena> good question
[13:51:38 CDT(-0500)] <EricDalquist> like the new error portlet has a little bit of JS in the UI
[13:51:46 CDT(-0500)] <athena> we only have one portlet that actually uses anything like that
[13:51:55 CDT(-0500)] <EricDalquist> it seems like there is a lot of js in uportal-war/src/main/webapp/media/skins/universality/common/javascript/uportal
[13:52:00 CDT(-0500)] <athena> and we added a flows directory to media/org/jasig/portal, or something like that
[13:52:06 CDT(-0500)] <EricDalquist> but that is related to the theme
[13:52:11 CDT(-0500)] <athena> everything in the universality folder is imported by the theme
[13:52:11 CDT(-0500)] <athena> yeah
[13:52:37 CDT(-0500)] <EricDalquist> ah
[13:52:43 CDT(-0500)] <athena> so one issue with having a portlet import its own js is that i don't know that it'll behave well if the portlet is installed twice on a page
[13:52:44 CDT(-0500)] <EricDalquist> so maybe under uportal-war/src/main/webapp/media/org/jasig/portal/portlet/error
[13:52:49 CDT(-0500)] <athena> it might, but i wouldn't count on it
[13:52:53 CDT(-0500)] <EricDalquist> hrm
[13:52:55 CDT(-0500)] <EricDalquist> that is a good point
[13:52:58 CDT(-0500)] <athena> yeah, i think that would be appriate
[13:53:00 CDT(-0500)] <EricDalquist> especially for the error portlet
[13:53:04 CDT(-0500)] <athena> right
[13:53:09 CDT(-0500)] <EricDalquist> nickblair: you seeing all this?
[13:53:22 CDT(-0500)] <athena> so i think maybe we have two options:
[13:53:31 CDT(-0500)] <athena> er, actually
[13:54:02 CDT(-0500)] <athena> i'm honestly wondering if it wouldn't be better to just import javascript for all framework portlets in the theme to start off w/
[13:54:14 CDT(-0500)] <athena> w/ our caching implementation, it shouldn't really have a big performance cost
[13:54:51 CDT(-0500)] <EricDalquist> right
[13:54:57 CDT(-0500)] <EricDalquist> that is my thought as well
[13:55:02 CDT(-0500)] <EricDalquist> it will only add a KB or two
[13:55:08 CDT(-0500)] <EricDalquist> and the user just gets it once
[13:55:11 CDT(-0500)] <athena> we coudl of course have portlets not use the up.jQuery object, but that means they wouldn't have access to any framework js components like the portlet browser
[13:55:11 CDT(-0500)] <athena> yeah
[13:55:11 CDT(-0500)] <nickblair> i am - thanks for the tips on where to put js
[13:55:15 CDT(-0500)] <athena> i think that'd be a better plan
[13:55:31 CDT(-0500)] <EricDalquist> no I think framework portlets should use up.jQuery
[13:55:37 CDT(-0500)] <athena> yes, i agree
[13:55:51 CDT(-0500)] <athena> sorry, meant i think having the user just go get it once is a better plan
[13:56:12 CDT(-0500)] <athena> so one disadvantage to putting everything in packages in that case is that then it doens't get aggregated together
[13:56:30 CDT(-0500)] <EricDalquist> for JS it will
[13:56:31 CDT(-0500)] <athena> though at the same time i'm not sure it makes sense for reusable things liek the portlet browser to be in a theme's directory
[13:56:39 CDT(-0500)] <EricDalquist> JavaScript isn't load-location aware
[13:56:41 CDT(-0500)] <EricDalquist> only CSS is
[13:56:45 CDT(-0500)] <athena> oh cool then
[13:56:53 CDT(-0500)] <athena> so in that case, maybe using packages is sensible
[13:56:56 CDT(-0500)] <EricDalquist> so I believe the aggregator will group JS files across directories
[13:57:02 CDT(-0500)] <athena> ok
[13:57:06 CDT(-0500)] <EricDalquist> I'm actually working on that code a little bit rightnow
[13:57:15 CDT(-0500)] <EricDalquist> I can look at adding include abilities too
[13:57:18 CDT(-0500)] <athena> cool (smile)
[13:57:29 CDT(-0500)] <EricDalquist> so we could have one common-skin.xml for all the portlet stuff
[13:57:36 CDT(-0500)] <EricDalquist> which each theme includes
[13:57:43 CDT(-0500)] <EricDalquist> we'll see
[13:57:44 CDT(-0500)] <athena> one enhancement that would be nice would be to be able to define an optional non-minified version of external js resources
[13:57:55 CDT(-0500)] <EricDalquist> hrm
[13:57:55 CDT(-0500)] <EricDalquist> yeah
[13:57:56 CDT(-0500)] <athena> that'd be nice too
[13:58:00 CDT(-0500)] <EricDalquist> ok
[13:58:34 CDT(-0500)] <athena> good stuff (smile)
[13:59:42 CDT(-0500)] <nickblair> any particular css class to apply to the containing div?
[14:00:03 CDT(-0500)] <athena> not sure we have much of a standard for that
[14:00:18 CDT(-0500)] <athena> is this for scoping the css or the js?
[14:00:25 CDT(-0500)] <nickblair> there are a few fields i'll put as a list, then I'll wrap the stack trace in a div that will be collapsed by default with a js button to expand
[14:00:39 CDT(-0500)] <athena> for the js selector, we'll need to use an ID instead of a class
[14:00:48 CDT(-0500)] <nickblair> right now, i'm focusing on getting the content in the markup
[14:01:00 CDT(-0500)] <nickblair> good call, using the portlet namespace
[14:01:03 CDT(-0500)] <nickblair> for the id
[14:01:15 CDT(-0500)] <athena> sounds good (smile)
[14:01:25 CDT(-0500)] <athena> are you coming to the unconference nick?
[14:01:27 CDT(-0500)] <nickblair> the basics of the error portlet are in the trunk now
[14:01:34 CDT(-0500)] <athena> awesome!
[14:01:50 CDT(-0500)] <nickblair> i'd like to, but I think that's the week my wife and i find out if we're having a boy or a girl (smile)
[14:01:59 CDT(-0500)] <athena> oh!
[14:02:03 CDT(-0500)] <athena> congrats, that's fantastic (smile)
[14:02:29 CDT(-0500)] <nickblair> thanks!
[14:02:32 CDT(-0500)] <athena> i'm glad you guys are producing a new generation of uportal developers
[14:02:37 CDT(-0500)] <athena> elsa can type by now right?
[14:02:44 CDT(-0500)] <EricDalquist> lol
[14:02:52 CDT(-0500)] <EricDalquist> well she really likes to hit my keyboard
[14:02:56 CDT(-0500)] <athena> (or at least close programs, apparently)
[14:02:57 CDT(-0500)] <athena> haha i bet
[14:02:58 CDT(-0500)] <EricDalquist> makes having her on my lap hard (tongue)
[14:03:10 CDT(-0500)] <athena> cleo used to like to climb on the keyboard
[14:03:13 CDT(-0500)] <athena> and press keys
[14:03:15 CDT(-0500)] <athena> annoying
[14:03:19 CDT(-0500)] <EricDalquist> lol
[14:03:36 CDT(-0500)] <athena> though not having fingers it was somewhat easier to deter her
[14:04:50 CDT(-0500)] <athena> so i think we're almost done with gallery development
[14:05:12 CDT(-0500)] <EricDalquist> neat (smile)
[14:05:28 CDT(-0500)] <athena> the only thing left really is seeing if we can figure out how to allow users to drag new content from the gallery into the page
[14:05:36 CDT(-0500)] <athena> think we might have to do that w/ vanilla jquery
[14:05:50 CDT(-0500)] <athena> but we're about ready to start porting it to 3.2
[14:05:55 CDT(-0500)] <EricDalquist> great
[14:05:57 CDT(-0500)] <athena> let us know if you guys see any bugs
[14:06:15 CDT(-0500)] <athena> i squashed a few yesterday, but hopefully we should be to the point where everything works
[14:06:18 CDT(-0500)] <EricDalquist> will do
[14:06:24 CDT(-0500)] <athena> thanks
[14:09:28 CDT(-0500)] <nickblair> for clarity: so it's ok for me to depend on up.jQuery already being loaded ?
[14:09:37 CDT(-0500)] <EricDalquist> yes
[14:09:59 CDT(-0500)] <EricDalquist> and the way most of the JS has been written so far
[14:10:03 CDT(-0500)] <EricDalquist> is all the logic goes in a .js file
[14:10:12 CDT(-0500)] <EricDalquist> and you call an initializer function from the markup
[14:10:19 CDT(-0500)] <EricDalquist> which passes in things like the portlet namespace
[14:10:26 CDT(-0500)] <EricDalquist> and other dynamic or configuration data
[14:11:08 CDT(-0500)] <nickblair> ok, so i'll write this as a jquery plugin essentially
[14:11:25 CDT(-0500)] <EricDalquist> yeah, we've been doing those or Fluid components
[14:11:25 CDT(-0500)] <nickblair> pass in the id of the stack trace and the plugin will do the rest
[14:11:57 CDT(-0500)] <athena> i think at this point we actually don't have any more jquery plugins left in uportal
[14:12:10 CDT(-0500)] <athena> so for consistency it might make sense to do it as a fluid component
[14:12:17 CDT(-0500)] <athena> we moved everything over as part of the gallery development
[14:12:38 CDT(-0500)] <EricDalquist> oh great
[14:12:39 CDT(-0500)] <EricDalquist> yeah
[14:12:46 CDT(-0500)] <EricDalquist> so that sounds like the approach to talk
[14:12:48 CDT(-0500)] <EricDalquist> take*
[14:13:06 CDT(-0500)] <athena> i think by the end of the week we might be able to delete ajax-jquery-preferences.js (smile)
[14:13:10 CDT(-0500)] <athena> which would make me super happy
[14:13:16 CDT(-0500)] <EricDalquist> yay!
[14:13:39 CDT(-0500)] <athena> ya
[14:14:09 CDT(-0500)] <nickblair> ok, fluid plugin it is
[14:14:45 CDT(-0500)] <athena> by the way
[14:15:04 CDT(-0500)] <athena> anastasiac is doing some documentation refactoring over on the fluid side
[14:15:18 CDT(-0500)] <athena> they have a thread open on the fluid users lists looking for input
[14:15:40 CDT(-0500)] <athena> i'm sure they'd appreciate any thoughts you guys have about their documentation and what kind of updates might be helpful
[14:16:02 CDT(-0500)] <EricDalquist> ok
[14:20:57 CDT(-0500)] <EricDalquist> oh and athena, what did we decided about messages files for portlets?
[14:21:05 CDT(-0500)] <EricDalquist> we were going to merge those right?
[14:21:08 CDT(-0500)] <athena> yes!
[14:21:12 CDT(-0500)] <athena> already pretty far into that
[14:21:21 CDT(-0500)] <EricDalquist> so where should nick add the messages for the error portlet?
[14:21:33 CDT(-0500)] <athena> properties/i18n/Messages.properties
[14:21:38 CDT(-0500)] <EricDalquist> great
[14:21:48 CDT(-0500)] <athena> there should be a lot he can re-use directly already
[14:22:04 CDT(-0500)] <athena> otherwise i'd recommend assigning each string a clear name that's based on the content of the string rather than its use
[14:22:09 CDT(-0500)] <athena> and adding it to the list alphabetically
[14:22:22 CDT(-0500)] <EricDalquist> ok
[14:22:24 CDT(-0500)] <athena> i've fixed up the groups and permissions portlets and the entity selector flow
[14:22:35 CDT(-0500)] <athena> haven't redone all the other flows yet
[14:22:35 CDT(-0500)] <athena> th
[14:22:48 CDT(-0500)] <athena> e new gallery stuff is all in there too, though we still need to move over some of the strings in the rest of the theme
[14:22:54 CDT(-0500)] <athena> i think it'll be a really nice change
[14:23:18 CDT(-0500)] <athena> and if we wanted we could even try something like writing an autotranslator and asking a couple people to QA the resulting files
[14:23:18 CDT(-0500)] <EricDalquist> yeah
[14:23:24 CDT(-0500)] <EricDalquist> yup
[14:23:36 CDT(-0500)] <athena> i know we at least have french and swedish speaking people around
[14:23:48 CDT(-0500)] <athena> seems like we should be able to find spanish too
[14:24:01 CDT(-0500)] <athena> dunno if you know of a good free translation service
[14:24:09 CDT(-0500)] <athena> don't know if google and yahoo have non-web-based endpoints
[14:24:23 CDT(-0500)] <athena> or non-browser, rather
[14:25:26 CDT(-0500)] <athena> there's stuff like this: http://code.google.com/p/google-api-translate-java/
[14:26:47 CDT(-0500)] <EricDalquist> nice
[14:28:08 CDT(-0500)] <athena> yeah
[14:28:19 CDT(-0500)] <athena> could probably even build a re-usable library to use w/ our portlets too
[14:29:10 CDT(-0500)] <EricDalquist> oh yeah
[14:30:26 CDT(-0500)] <athena> maybe something like a job that could be given a set of languages
[14:30:49 CDT(-0500)] <athena> then for any languages that didn't have a file, create a new file and auto-translate from the default
[14:31:02 CDT(-0500)] <athena> for existing files, only add auto-translations for strings that are missing
[14:31:36 CDT(-0500)] <athena> that way we wouldn't overwrite a string that someone had fixed if the translation was bad
[14:31:48 CDT(-0500)] <EricDalquist> yeah
[14:33:39 CDT(-0500)] <athena> good stuff (smile)
[14:33:39 CDT(-0500)] <athena> wou
[14:33:49 CDT(-0500)] <athena> would be nice to make life easier for international implementers
[14:33:55 CDT(-0500)] <EricDalquist> yes
[14:34:13 CDT(-0500)] <athena> and then someday we'll have to take a look again at adding i18n features for portlet registrations, etc.
[14:40:35 CDT(-0500)] <EricDalquist> back in a bit ...
[14:41:02 CDT(-0500)] <athena> me too
[14:41:08 CDT(-0500)] <athena> we're making a taco bell run (tongue)
[14:56:34 CDT(-0500)] <nickblair> i'm thinking that the error portlet output should include a link to "reset" the original portlet
[14:56:56 CDT(-0500)] <nickblair> how would one render a portlet render url for a different portlet?
[14:57:55 CDT(-0500)] <athena> like the reload button we used to have?
[14:57:56 CDT(-0500)] <nickblair> i suppose the portlet controller could build the reset render url and pass it into the model
[14:58:02 CDT(-0500)] <nickblair> right
[14:58:22 CDT(-0500)] <athena> i have no idea how that stuff works
[14:58:24 CDT(-0500)] <EricDalquist> there is no such thing as a "reset url"
[14:58:34 CDT(-0500)] <EricDalquist> that would be a feature completley encapsulated in the error portlet
[14:58:38 CDT(-0500)] <EricDalquist> so it would generate a URL to itself
[14:58:39 CDT(-0500)] <nickblair> ok
[14:58:55 CDT(-0500)] <EricDalquist> that would handle calling the reset API
[14:59:00 CDT(-0500)] <EricDalquist> we can leave that out for now
[14:59:12 CDT(-0500)] <EricDalquist> I'm not sure it even works in pluto 2 yet
[14:59:14 CDT(-0500)] <nickblair> it dawned on me that the jsps the error portlet displays will print render urls for the error portlet itself using the portlet:renderURL taglib
[14:59:51 CDT(-0500)] <EricDalquist> right
[14:59:52 CDT(-0500)] <nickblair> if you click the title link of the portlet it will give the desired effect
[15:00:18 CDT(-0500)] <nickblair> otherwise right now the error portlet has no link for the customer to get away from the error display
[15:00:23 CDT(-0500)] <EricDalquist> maybe
[15:00:35 CDT(-0500)] <EricDalquist> I'm honestly now sure how a URL to the error portlet would be handled
[15:00:39 CDT(-0500)] <EricDalquist> since the portlet isn't in your layuout
[15:00:50 CDT(-0500)] <EricDalquist> and was never really targeted
[15:01:12 CDT(-0500)] <EricDalquist> you might end up rendering the error portlet in maximized with no error context
[15:01:32 CDT(-0500)] <EricDalquist> so for now lets leave off links on the error portlet UI
[15:01:40 CDT(-0500)] <EricDalquist> have to go again
[15:07:23 CDT(-0500)] <mpolizzotti> Afternoon everyone. Just wanted to let everyone know, that I just checked in an update to the new tab management functionality, which includes tab drag and drop functionality.
[15:07:51 CDT(-0500)] <awills> nice matt
[15:08:07 CDT(-0500)] <athena> think we're almost done w/ gallery development (smile)
[15:08:42 CDT(-0500)] <mpolizzotti> So far, it's testing nice across all major browsers. Although, we need to spend a little time some IE specific css.
[15:20:33 CDT(-0500)] <nickblair> just committed some enhancements to the error portlet to toggle the stack trace
[15:20:54 CDT(-0500)] <nickblair> last thing is to turn the js into a fluid component; although since it's so little javascript, it it worth it?
[15:21:11 CDT(-0500)] <nickblair> i suppose it is, so it's re-usable for other admin portlets
[15:26:29 CDT(-0500)] <EricDalquist> hey nickblair it is so it is re-usable and more importantly for consistency
[15:26:51 CDT(-0500)] <EricDalquist> we want to try and lessen the learning curve so if everything is a fluid component that should make life a little easier
[15:28:57 CDT(-0500)] <nickblair> sure
[15:39:12 CDT(-0500)] <athena> mpolizzotti: tab drag and drop looks like it's working great
[15:39:42 CDT(-0500)] <mpolizzotti> Thanks. It needs a little touch up for IE and some testing.
[15:39:44 CDT(-0500)] <athena> i like the new uportal (smile)
[15:39:56 CDT(-0500)] <athena> just went through some permissions testing and it all seems to act like it's supposed to
[15:40:06 CDT(-0500)] <athena> about to commit a permissions link
[15:40:19 CDT(-0500)] <athena> right now just has some inline styling - we can fix it up later
[15:47:12 CDT(-0500)] <athena> so EricDalquist and nickblair - gary and i had had some discussions about navigating to admin portlets
[15:47:15 CDT(-0500)] <nickblair> question about the showHideToggle fluid component - where should it go under src/main/webapp/?
[15:47:18 CDT(-0500)] <athena> since the current interface doesn't have a sidebar
[15:47:26 CDT(-0500)] <athena> would a flyout admin menu at the top of the page be helpful?
[15:47:42 CDT(-0500)] <athena> maybe just in the theme's common folder for now w/ the rest of the js?
[15:47:53 CDT(-0500)] <athena> we can figure out later how we want to organize all that stuff
[15:48:47 CDT(-0500)] <nickblair> webapp/media/skins/universality/common/javascript?
[15:49:09 CDT(-0500)] <athena> take a look at webapp/media/skins/universality/common/javascript/uportal
[15:49:15 CDT(-0500)] <nickblair> ok
[15:49:15 CDT(-0500)] <athena> should be a bunch of other scripts there
[15:50:49 CDT(-0500)] <nickblair> then just add the script to skin.xml?
[15:51:25 CDT(-0500)] <nickblair> i suppose add to uportal3/skin.xml, ivy/skin.xml, and hc/skin.xml
[16:06:57 CDT(-0500)] <mpolizzotti> I am still seeing some xsl caching issues. I am not seeing any xsl changes reflected in my browser, when refreshed. I updated trunk this morning and disabled css and js aggregation. Am I missing anything? Is anyone else still experiencing this? This is not a huge issue, I just wanted to notify everyone.
[16:07:44 CDT(-0500)] <EricDalquist> even after a minute or so?
[16:08:04 CDT(-0500)] <EricDalquist> the XSL should be getting checked for timestamp changes every minute
[16:08:44 CDT(-0500)] <mpolizzotti> I am testing by attempting to add the sidebar back into the page by toggling the USE_SIDEBAR parameter.
[16:08:58 CDT(-0500)] <EricDalquist> which is specified in what file?
[16:09:08 CDT(-0500)] <mpolizzotti> universality.xsl
[16:09:23 CDT(-0500)] <mpolizzotti> Changes show up after I restart tomcat.
[16:09:44 CDT(-0500)] <EricDalquist> how are you editing it? I wonder if the editor isn't changing the last-modified date on the file
[16:10:03 CDT(-0500)] <mpolizzotti> I use aptana IDE.
[16:10:13 CDT(-0500)] <EricDalquist> what os are you on?
[16:10:18 CDT(-0500)] <mpolizzotti> linux.
[16:10:21 CDT(-0500)] <mpolizzotti> ubuntu.
[16:10:34 CDT(-0500)] <EricDalquist> can you try doing "touch /path/to/universality.xsl"
[16:10:42 CDT(-0500)] <mpolizzotti> yeah.
[16:13:04 CDT(-0500)] <mpolizzotti> Didn't seem to work.
[16:14:20 CDT(-0500)] <EricDalquist> can you go into uPortal/WEB-INF/log4j.properties
[16:14:28 CDT(-0500)] <EricDalquist> and add
[16:14:28 CDT(-0500)] <EricDalquist> log4j.logger.org.jasig.portal.utils.cache.resource=TRACE, R
[16:14:28 CDT(-0500)] <EricDalquist> log4j.additivity.org.jasig.portal.utils.cache.resource=false
[16:14:36 CDT(-0500)] <EricDalquist> under the rootCategory
[16:14:38 CDT(-0500)] <EricDalquist> then restart
[16:14:47 CDT(-0500)] <mpolizzotti> yeah. doing it now.
[16:15:25 CDT(-0500)] <EricDalquist> that should write out to uPortal.log what the resource loader is doing
[16:15:41 CDT(-0500)] <EricDalquist> you should be able to render and see it load the files
[16:15:48 CDT(-0500)] <EricDalquist> then render again and see it say it is using the cached version
[16:15:53 CDT(-0500)] <EricDalquist> then touch an XSL file
[16:15:59 CDT(-0500)] <EricDalquist> wait 60 seconds
[16:16:15 CDT(-0500)] <EricDalquist> and another render should show it checking the file for changes and reloading it
[16:16:25 CDT(-0500)] <EricDalquist> thanks for the help debugging this
[16:17:49 CDT(-0500)] <mpolizzotti> no problem. I'm restarting now
[16:22:35 CDT(-0500)] <mpolizzotti> Do I need to change the value of log4j.rootCategory?
[16:22:48 CDT(-0500)] <mpolizzotti> Right now its set to INFO, R
[16:23:07 CDT(-0500)] <EricDalquist> no, those two lines override the level for just that package
[16:23:43 CDT(-0500)] <mpolizzotti> okay. In the uPortal.log file should I be able to search for the string "universality.xsl" to see where it is loaded?
[16:24:05 CDT(-0500)] <EricDalquist> yeah
[16:24:21 CDT(-0500)] <EricDalquist> and after the first render there shouldn't be much else being added to the log
[16:24:31 CDT(-0500)] <EricDalquist> other than resource loader messages
[16:27:21 CDT(-0500)] <mpolizzotti> Okay. I'm not seeing those file in my log. Do you want to see my log4j.properties file? I can post it to pastebin.
[16:27:30 CDT(-0500)] <EricDalquist> sure
[16:27:36 CDT(-0500)] <mpolizzotti> http://pastebin.com/0TtGLEA5
[16:28:13 CDT(-0500)] <mpolizzotti> I believe its configured correctly.
[16:28:26 CDT(-0500)] <EricDalquist> looks right to me
[16:28:51 CDT(-0500)] <EricDalquist> and that is in tomcat/webapps/uPortal/WEB-INF/log4.properties
[16:28:56 CDT(-0500)] <mpolizzotti> yes.
[16:29:04 CDT(-0500)] <mpolizzotti> Do you want me to post my uPortal.log file
[16:29:10 CDT(-0500)] <mpolizzotti> Perhaps I am missing something.
[16:29:19 CDT(-0500)] <EricDalquist> sure you can just email it to me: eric.dalquist@doit.wisc.edu
[16:29:37 CDT(-0500)] <mpolizzotti> k. one second.
[16:30:40 CDT(-0500)] <mpolizzotti> sent.
[16:32:10 CDT(-0500)] <EricDalquist> ok
[16:34:38 CDT(-0500)] <EricDalquist> it looks like the portal didn't even start correctly
[16:34:39 CDT(-0500)] <EricDalquist> INFO [Timer-35] Sep/23 14:19:09,852 container.PortletContextManager.[] - Registering 1 portlets for context //WebProxyPortlet
[16:34:39 CDT(-0500)] <EricDalquist> INFO [Thread-44] Sep/23 14:19:10,668 container.PortletContextManager.[] - Portlet Context '/cas-proxy-test-portlet' removed.
[16:34:39 CDT(-0500)] <EricDalquist>
[16:34:55 CDT(-0500)] <EricDalquist> it was up for ~ 1 second before shutting down again
[16:35:01 CDT(-0500)] <EricDalquist> was there already another tomcat instance running?
[16:35:16 CDT(-0500)] <mpolizzotti> No. I'm only running one instance.
[16:35:49 CDT(-0500)] <EricDalquist> weird according to that log you really should never have been able to access the uPortal webapp
[16:35:55 CDT(-0500)] <EricDalquist> since it wasn't up long enough
[16:36:13 CDT(-0500)] <mpolizzotti> That is strange. I'm running the portal now.
[16:36:23 CDT(-0500)] <EricDalquist> can you try shutting it down
[16:36:29 CDT(-0500)] <EricDalquist> and then seeing if you you can still access it?
[16:36:38 CDT(-0500)] <mpolizzotti> Okay.
[16:36:53 CDT(-0500)] <EricDalquist> just to make sure it is actually done
[16:36:55 CDT(-0500)] <EricDalquist> down*
[16:37:34 CDT(-0500)] <mpolizzotti> Double checking that it is down.
[16:38:16 CDT(-0500)] <mpolizzotti> starting it back up
[16:38:43 CDT(-0500)] <mpolizzotti> I'll send you my new uPortal.log file.
[16:39:18 CDT(-0500)] <EricDalquist> ok
[16:39:27 CDT(-0500)] <EricDalquist> after hitting the render.uP page a few times
[16:41:05 CDT(-0500)] <mpolizzotti> Sorry. Disregard the email I just sent you.
[16:41:12 CDT(-0500)] <mpolizzotti> I didn't hit refresh.
[16:41:46 CDT(-0500)] <EricDalquist> ok
[16:43:03 CDT(-0500)] <mpolizzotti> okay. sent
[16:43:28 CDT(-0500)] <EricDalquist> ok
[16:44:26 CDT(-0500)] <EricDalquist> ok
[16:44:31 CDT(-0500)] <EricDalquist> so the lines like:
[16:44:31 CDT(-0500)] <EricDalquist> TRACE [http-8080-1] Sep/23 14:42:19,124 resource.CachingResourceLoaderImpl.[] - Found CachedResourceImpl [resource=class path resource [layout/theme/universality/universality.xsl], lastLoadTime=1285278084770, lastCheckTime=1285278084770, lastLoadDigest=eSfy6GJNdNdlcRqH2ImdaWhWOdI, digestAlgorithm=SHA1] in cache
[16:44:31 CDT(-0500)] <EricDalquist> TRACE [http-8080-1] Sep/23 14:42:19,124 resource.CachingResourceLoaderImpl.[] - CachedResourceImpl [resource=class path resource [layout/theme/universality/universality.xsl], lastLoadTime=1285278084770, lastCheckTime=1285278084770, lastLoadDigest=eSfy6GJNdNdlcRqH2ImdaWhWOdI, digestAlgorithm=SHA1] is within checkInterval 60000, returning
[16:44:43 CDT(-0500)] <EricDalquist> it found universality.xsl in the cache
[16:44:52 CDT(-0500)] <EricDalquist> and it has checked the lastModified within the last 60 seconds
[16:44:58 CDT(-0500)] <EricDalquist> if you touch the xsl file
[16:45:03 CDT(-0500)] <EricDalquist> wait 1 minute
[16:45:07 CDT(-0500)] <EricDalquist> and then refresh again
[16:45:18 CDT(-0500)] <EricDalquist> those messages from resource.CachingResourceLoaderImpl should be different
[16:45:42 CDT(-0500)] <mpolizzotti> Okay. I'll give it a shot.
[16:45:48 CDT(-0500)] <nickblair> i just committed changes to the error portlet; the javascript to show/hide the exception stack trace is now a fluid component (up.showHideToggle)
[16:46:01 CDT(-0500)] <EricDalquist> great!
[16:46:19 CDT(-0500)] <nickblair> i'm admittedly new to writing fluid components, if anyone can double check that i've done things correctly i'd appreciate it
[16:46:34 CDT(-0500)] <nickblair> the javascript is in webapp/skins/universality/common/javascript/up-showHideToggle.js
[16:46:49 CDT(-0500)] <nickblair> and the usage is in WEB-INF/jsp/PortletError/detailed.jsp
[16:47:40 CDT(-0500)] <nickblair> i'm also looking for other ideas/features to add to the error portlet
[16:48:08 CDT(-0500)] <nickblair> i still think it'd be neat to have a "retry" and a "reset" button
[16:52:41 CDT(-0500)] <EricDalquist> yeah, I agree
[16:52:52 CDT(-0500)] <EricDalquist> that is going to get a little interesting with how the URLs work
[16:53:44 CDT(-0500)] <athena> hey i like the new error portlet (smile)
[16:53:51 CDT(-0500)] <nickblair> me too (smile)
[16:54:07 CDT(-0500)] <athena> though it'd be better if i'd remembered to put an @Controller on my new portlet (tongue)
[16:54:13 CDT(-0500)] <nickblair> it needs the old CError gears image
[16:54:29 CDT(-0500)] <nickblair> i know that will please andrew petro
[16:55:42 CDT(-0500)] <athena> lol
[16:55:54 CDT(-0500)] <athena> did we never update the public view of that?
[16:56:01 CDT(-0500)] <athena> maybe that was only at yale that we changed it
[16:56:06 CDT(-0500)] <athena> i think it had a sleeping bulldog
[16:56:12 CDT(-0500)] <athena> like the channel just dozed off (tongue)
[16:56:18 CDT(-0500)] <nickblair> it's still in the media folder
[16:56:22 CDT(-0500)] <athena> ew.
[16:56:33 CDT(-0500)] <athena> we have plenty of better images now
[16:56:36 CDT(-0500)] <nickblair> the show/hide trace buttons are in there too
[16:56:40 CDT(-0500)] <mpolizzotti> Hey Eric. The UI still doesn't change when refreshed. I am going to flush out my tomcat instance and rebuild to see if it fixes the issue. Is anyone else experiencing this issue?
[16:57:02 CDT(-0500)] <EricDalquist> did the log show the XSL being reloaded?
[16:57:09 CDT(-0500)] <mpolizzotti> It did
[16:57:22 CDT(-0500)] <EricDalquist> hrm
[16:57:35 CDT(-0500)] <EricDalquist> oh ... I think I realized what the issue is now
[16:57:36 CDT(-0500)] <mpolizzotti> Makes me think this is something wrong with my env.
[16:57:37 CDT(-0500)] <EricDalquist> ok
[16:57:41 CDT(-0500)] <EricDalquist> no
[16:57:52 CDT(-0500)] <EricDalquist> it is new code
[16:58:08 CDT(-0500)] <EricDalquist> and due to how the XSL imports are handled in the theme XSL it isn't generating a good enough cache key
[17:03:12 CDT(-0500)] <athena> hmm, this doesn't look good
[17:03:14 CDT(-0500)] <athena> Caused by: java.lang.UnsupportedOperationException: As of Pluto 1.1.4 Portlet rendering should always only use getWriter() on the underlying HttpServletResponse
[17:03:38 CDT(-0500)] <EricDalquist> um where is that coming from?
[17:03:45 CDT(-0500)] <athena> spring's XSLTView, i think
[17:04:17 CDT(-0500)] <EricDalquist> in trunk?
[17:04:26 CDT(-0500)] <athena> new local code
[17:04:34 CDT(-0500)] <athena> trying to port over the sitemap channel
[17:04:36 CDT(-0500)] <EricDalquist> what version of uPortal?
[17:04:41 CDT(-0500)] <athena> figured the XsltView would be a pretty logical choicde
[17:04:43 CDT(-0500)] <athena> yes, trunk
[17:05:01 CDT(-0500)] <EricDalquist> I wonder if we have something wrong in one of our response wrappers or pluto support classes
[17:05:41 CDT(-0500)] <athena> want me to copy the stack trace out?
[17:05:47 CDT(-0500)] <EricDalquist> yeah
[17:05:51 CDT(-0500)] <EricDalquist> stick it in pastebin
[17:06:01 CDT(-0500)] <EricDalquist> and if it isn't obvious we can create a jira issue
[17:06:16 CDT(-0500)] <athena> http://uportal.pastebin.com/AqjHNnv3
[17:06:59 CDT(-0500)] <EricDalquist> looks like a bug in our code (smile)
[17:07:06 CDT(-0500)] <athena> oh ok
[17:07:18 CDT(-0500)] <athena> so we should be calling something other than getOutputStream, apparently?
[17:07:29 CDT(-0500)] <athena> wonder why we're just hitting it now
[17:07:32 CDT(-0500)] <EricDalquist> no our code is throwing that exception
[17:07:45 CDT(-0500)] <EricDalquist> this is probably the first portlet that calls getOutputStream in trunk
[17:07:49 CDT(-0500)] <athena> ah
[17:07:55 CDT(-0500)] <athena> well, glad i tripped it i guess
[17:08:07 CDT(-0500)] <athena> so we should just be using a writer instead for that method?
[17:08:10 CDT(-0500)] <EricDalquist> PortletHttpServletResponseWrapper is the wrapper we add to the http response to capture the portlet output
[17:08:29 CDT(-0500)] <EricDalquist> right now it has an internal Writer that it returns when getWriter is called
[17:08:45 CDT(-0500)] <EricDalquist> and that just collects the output for later use as a String
[17:08:55 CDT(-0500)] <EricDalquist> looks like we need to support getOutputStream too
[17:09:04 CDT(-0500)] <athena> ah
[17:09:19 CDT(-0500)] <athena> so it's not actually true that "As of Pluto 1.1.4 Portlet rendering should always only use getWriter() on the underlying HttpServletResponse"?
[17:09:31 CDT(-0500)] <EricDalquist> it probably was in Pluto 1.1
[17:09:35 CDT(-0500)] <athena> gotcha
[17:09:37 CDT(-0500)] <EricDalquist> but we're using 2.0 now (smile)
[17:09:44 CDT(-0500)] <EricDalquist> the problem is character encoding ...
[17:11:14 CDT(-0500)] <EricDalquist> so the difference is in portlet 2 there is a portletResponse.getOutputStream
[17:11:45 CDT(-0500)] <EricDalquist> hrm
[17:11:59 CDT(-0500)] <EricDalquist> so I'm not quite sure how we're supposed to handle portlet specified character encoding
[17:12:07 CDT(-0500)] <EricDalquist> uPortal always uses UTF-8
[17:12:17 CDT(-0500)] <EricDalquist> what if a portlet specifies something else for its outputstream
[17:12:47 CDT(-0500)] <athena> no idea
[17:12:59 CDT(-0500)] <EricDalquist> hrm
[17:13:08 CDT(-0500)] <EricDalquist> looks like we should write it to a ByteArrayOutputStream
[17:13:17 CDT(-0500)] <EricDalquist> then convert it to a STring with the encoding specified by the portlet
[17:13:33 CDT(-0500)] <EricDalquist> then we can use that String and it will get written out as UTF-8
[17:13:36 CDT(-0500)] <EricDalquist> oi
[17:14:22 CDT(-0500)] <athena> land mines!
[17:14:35 CDT(-0500)] <EricDalquist> yes
[17:14:44 CDT(-0500)] <EricDalquist> character encoding is always a pain
[17:15:28 CDT(-0500)] <athena> yes.
[17:16:14 CDT(-0500)] <athena> is this something you want me to look at, or does it involve enough pluto knowledge that i should just shelve this portlet for the moment?
[17:17:42 CDT(-0500)] <EricDalquist> probably shelve it for the moment
[17:17:49 CDT(-0500)] <athena> sounds good
[17:17:52 CDT(-0500)] <athena> can do (smile)
[17:17:58 CDT(-0500)] <EricDalquist> I'm going to have to dig into pluto to see what they are doing for handling setContentType
[17:18:09 CDT(-0500)] <athena> might check this stuff in at this point just so it has a secure place to live until i pick it up again
[17:18:11 CDT(-0500)] <athena> shouldn't break anything
[17:18:20 CDT(-0500)] <EricDalquist> sounds good
[17:19:55 CDT(-0500)] <athena> looks like we're getting close to having all the custom channels replaced
[17:20:05 CDT(-0500)] <EricDalquist> yay
[17:20:14 CDT(-0500)] <athena> maybe i'll go move the RSS channels over to the news reader
[17:20:26 CDT(-0500)] <athena> i think that portlet's single-feed view is pretty solid at this point
[17:20:49 CDT(-0500)] <EricDalquist> yeah, that should be good enough for now
[17:21:24 CDT(-0500)] <athena> once we get your fixes for HTML preferences in i can move over the web proxy ones too (smile)
[17:21:27 CDT(-0500)] <athena> should be good
[17:21:34 CDT(-0500)] <athena> then someday we can actually go update the content
[17:22:14 CDT(-0500)] <nickblair> i'm off - fun day for me today to work on the error portlet
[17:22:16 CDT(-0500)] <nickblair> thanks everyone
[17:22:19 CDT(-0500)] <athena> cya nick!
[17:32:31 CDT(-0500)] <EricDalquist> uhg I'm going to have to take a look at that output stream issue when I have more sleep and time
[17:32:40 CDT(-0500)] <EricDalquist> would you be able to stick that stack in a jira issue?
[17:38:53 CDT(-0500)] <athena> sure
[17:38:55 CDT(-0500)] <athena> no worries (smile)
[17:40:35 CDT(-0500)] <athena> https://issues.jasig.org/browse/UP-2825
[17:40:40 CDT(-0500)] <EricDalquist> thanks!
[17:44:09 CDT(-0500)] <athena> yep
[17:44:30 CDT(-0500)] <EricDalquist> so for the skin.xml updates there was something you asked for
[17:44:33 CDT(-0500)] <EricDalquist> what was it again?
[17:48:49 CDT(-0500)] <athena> hm, don' think it was me?
[17:48:58 CDT(-0500)] <athena> oh
[17:49:17 CDT(-0500)] <athena> are you talking about how i said it'd be nice to specify an alternate non-aggregated form of our external js resources?
[17:49:27 CDT(-0500)] <athena> can we just take out the RssPortlet?
[17:49:45 CDT(-0500)] <EricDalquist> oh yeah
[17:49:48 CDT(-0500)] <EricDalquist> that was it
[17:49:52 CDT(-0500)] <athena> oh ok (smile)

  • No labels