On 22 Mar 2012, at 15:40, Ate Douma wrote:

> On 03/22/2012 03:54 PM, Scott Wilson wrote:
>> 
>> On 20 Mar 2012, at 17:53, Drozdetski, Stan A. wrote:
>> 
>>> Some input from the UX perspective:
>>> 
>>> Navigation does depend on the architecture of the application (in essence, 
>>> the user learns about the architecture from the navigation structure).
>>> 
>>> You want the possibility of inheritance, but having too many levels makes 
>>> it hard/impossible to navigate/visualize the structure.
>>> 
>>> I'd suggest coming up with a basic skeleton first, and then working 
>>> backwards to implementation. For example:
>>> 
>>> Environment
>>> - one (or more) workspaces
>>>  - zero (or more) sub-workspaces (or sub-spaces - useful if the workspace 
>>> gets too large... however, I'd end inheritance there)
>>>    - one (or more) pages
>>>      - zero (or more) widgets
>> 
>> I think I'd be happier with one less level:
>> 
>> one or more workspaces (context and header)
>> ... has one or more pages  (tab)
>>   ... has one or more regions (area on page)
>>     ... has zero or more widgets
>> 
>> Though reading down I think we may mean the same thing :-)
> 
> To me either of the above, for *now*, is fine.
> 
> However, a less strict separation between workspaces and pages IMO should be 
> kept in mind and will pay off better in the end.
> 
> As I said before, in my view a workspace can be just a page with (possible) 
> child pages and some extra security and other *configurations*.
> If for instance a theme should only be configurable on root page or workspace 
> level IMO is a choice to be made by a concrete Rave implementation, not 
> forced into the model...
> Likewise, rendering and representation choices concerning workspace/root-page 
> context and switching, also should be an (custom) implementation choice.
> Same goes for showing sibling pages or child pages as tabs.
> Or usage of # hashbang for sub url navigation (which IMO is fundamentally 
> broken and wrong to be honest).

I think we're in agreement here. The model just has a hierarchy of pages and 
sub-pages, but for the concrete implementation in the current portal we can 
present this as "workspaces" with "tabs". It could just as easily be 
represented using a side-nav tree or heading/subheading structure.

> 
> I'd be in favor of specifying a 'workspace' as a set of 'rules' which we then 
> leverage in the demo Rave portal as:
> - a root navigational page
> - defines an inheritable theming for child pages
> - defines administrative ownership for this page and its children
> - defines access/view privileges for this page and its children
> 
> But being (just) a page in itself, the above 'rules' would just be an 
> implementation detail, e.g. (custom) portal specific.
> 
> If in another context nested/child page would be allowed to override the 
> theming, or define additional security constraints, or context switching on 
> child pages, that should also be possible.
> For our (Hippo) use-cases we definitely will be needing that level of 
> flexibility...
> 
> What I like to stress is that while building a good and out-of-the-box usable 
> Rave portal *demo* implementation, we need keep an open mind for other 
> use-cases :)
> Definitely not by making it more complex than needed, but also not more 
> restricted than possible or single use-case driven either.
> 
>> 
>> 
>>> In my way of thinking, the workspace defines the context (+1 for 
>>> context-sensitive implementation!). The user may or may not need/want to 
>>> navigate to other workspaces. As Matt stated, traditionally the header is 
>>> used to show the current context - and to allow the user to navigate to a 
>>> different context.
>> 
>> For moving between pages within a workspace, there is the existing tabbed 
>> navigation model. I think adding a context-switching navigation for moving 
>> between workspaces would fit well; and associating this navigation with the 
>> header also makes sense.
>> 
>> (I find the Liferay model for handling the workspace/pages concept really 
>> confusing, so simpler would be better...)
> 
> Can you explain a bit how the Liferay model works?
> Its been a long time since I used or even looked at Liferay.
> Good examples of what you *don't* want are IMO extremely useful!


LifeRay typically has a drop-down menu with "Home" and "My Places"; the latter 
of which has the sub-list of "workspaces"; each of these is then broken down 
into "Private Pages" and "Public Pages"  (all in a sort of cascading menu). 
There are also tabs and breadcrumbs.

One of the big usability issues with a lot of sites is its not obvious how 
these things are really structured as there are lots of "aliases" that mean you 
can end up somewhere completely different to where you thought you were going 
(and not know where you "are" so to speak). 

So for Rave I'd like the structure to be simple and obvious in the default 
implementation, with as little possibility to feel "lost" as possible.

> 
> Ate
>> 
>>> 
>>> A workspace will have one or more owners* who get to decide who can:
>>> - edit the workspace (i.e., join the ranks of administrators)
>>> - access the workspace (i.e., join the ranks of users)
>>> ---
>>> * (from implementation perspective, that could equal "one owner - who can 
>>> be a group")
>>> 
>>> The concept of ownership is key. Who owns the content that you create in a 
>>> workspace? In just about every collaboration-support system I've seen, the 
>>> author retains ownership. However, that creates problems - when the user 
>>> leaves the workspace (or the environment), what happens to the content? I'd 
>>> like to explore the concept of content being owned by the workspace... and 
>>> if the user is not comfortable with that, they have their own (personal) 
>>> workspace to work with.
>>> 
>>> Stan Drozdetski
>>> MITRE
>>> 
>>> -----Original Message-----
>>> From: Franklin, Matthew B. [mailto:[email protected]]
>>> Sent: Tuesday, March 20, 2012 10:42 AM
>>> To: [email protected]
>>> Subject: RE: [jira] [Commented] (RAVE-103) Support shared spaces
>>> 
>>>> -----Original Message-----
>>>> From: Scott Wilson [mailto:[email protected]]
>>>> Sent: Monday, March 19, 2012 5:36 PM
>>>> To: [email protected]
>>>> Subject: Re: [jira] [Commented] (RAVE-103) Support shared spaces
>>>> 
>>>> On 19 Mar 2012, at 13:51, Ate Douma wrote:
>>>> 
>>>>> On 03/17/2012 04:37 PM, Scott Wilson (Commented) (JIRA) wrote:
>>>>>> 
>>>>>>    [ https://issues.apache.org/jira/browse/RAVE-
>>>> 103?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-
>>>> tabpanel&focusedCommentId=13231993#comment-13231993 ]
>>>>>> 
>>>>>> Scott Wilson commented on RAVE-103:
>>>>>> -----------------------------------
>>>>>> 
>>>>>> I think there are two models we can look at:
>>>>>> 
>>>>>> 1. Page Sharing
>>>>>> 
>>>>>> In this model, a user creates a new page, and from the tab context menu
>>>> selects "Share this page...". A dialog opens, and the user can add people 
>>>> (e.g.
>>>> using a search/filter view), or select an existing group (e.g. friends, 
>>>> family, co-
>>>> workers...). The user chooses OK, and each user is notified when they log 
>>>> into
>>>> Rave of the invitation to add the shared Page. The user who created the 
>>>> Page
>>>> is the Owner; each user they share with is by default a Viewer (read-only).
>>>> However, it should be possible for the Owner to grant other users a "Can 
>>>> Edit"
>>>> role allowing them to add, remove and move widgets.
>>>>>> 
>>>>>> 2. Workspace Sharing
>>>>>> 
>>>>>> In this model, there is a higher-level entity comprising a collection of
>>>> multiple pages managed by a group. New shared pages can be added as sub-
>>>> pages of the top-level workspace. I'm a bit less clear on the workflow for 
>>>> this
>>>> one, whether its the same as (1) but with sub-pages, or something
>>>> conceptually quite different
>>>>>> 
>>>>> IMO we should (eventually) strive to merge both these models into one
>>>> logical model from Rave perspective.
>>>>> For one, we already have a 'shared' page right now: the profile page. With
>>>> sub pages...
>>>>> 
>>>>> IMO the current separate/special handling of the profile page should
>>>> technically or model wise not be special at all. What difference is there
>>>> between sharing 'a' page to the public with sharing 'the' profile page(s) 
>>>> to the
>>>> public?
>>>>> To me this seems like just a matter of security configuration, with the 
>>>>> profile
>>>> page 'just' representing a common default 'share'.
>>>> 
>>>> Right - that could be handled by "magic" Users like AnyAuthenticatedUser 
>>>> and
>>>> Anyone that you could add as a member of your page, or some user-less
>>>> permissions attached to the page.
>>> 
>>> +1 for modeling them the same.  We just have to make sure that we have the 
>>> right information available when the page is created to apply the right 
>>> permission scheme; but this could be accomplished by re-working the Page 
>>> Template to include a default permission set.  There is one small 
>>> OpenSocial concern we need to make sure we have a strategy for supporting:  
>>> The default view name for profile isn't HOME, it's PROFILE.
>>> 
>>>>> 
>>>>> Interestingly, the current profile page also now has 'sub' pages, which 
>>>>> in a
>>>> minimalistic sense maybe could be regarded as a shared 'workspace' already
>>>> (with a single owner).
>>>> 
>>>> Indeed - every page is sort of a workspace in that regard, though that 
>>>> isn't
>>>> currently exposed through the UI.
>>> 
>>> I could definitely see a scenario where we have the concept of a workspace 
>>> with "pages" attached to it.  The workspace would represent the context and 
>>> could come in the form of a portal, profile, team site, peer-to-peer shared 
>>> workspace, and any other scenario.  The changes in context would allow us 
>>> to create implementations that have different "UI" for each workspace.  
>>> This way, each workspace can lay out the entire web page however works best 
>>> for their use case.  We can then create a new construct of "Workspace 
>>> Template" that is responsible for the overall look, feel&  layout of the 
>>> web page and use the PageTemplates to manage the regions and corresponding 
>>> widgets.
>>> 
>>>>> 
>>>>> I'm interested in how adding a shared page to the users view of pages will
>>>> work out.
>>>> 
>>>> That looks to be the bigger challenge - making the model make sense to 
>>>> users.
>>> 
>>> IMO, we need to have a smooth navigation in the header to move between 
>>> various workspaces.
>>> 
>>>> 
>>>>> 
>>>>> Right now we do not have yet a navigational representation of pages.
>>>>> Will sharing the canonical 'Main' page with john.doe result in two 'Main'
>>>> pages to be shown? As the name of a page (currently) is only stored in the
>>>> page itself, to prevent 'namespace' clashes, you either need to:
>>>>> - 'expose' the owner /owner/canonical/ as prefix, (e.g. something like:
>>>> /person/canonical/pages/Main), or
>>>>> - allow the viewer to *locally* rename that page (ugh: Main1, Main2,
>>>> Main3), or
>>>>> - introduce a mounting or shortcut like feature where the viewer can
>>>> structure its own 'site' and 'inject' shared pages at any desired 
>>>> location, or
>>>>> - ...?
>>>> 
>>>> Perhaps the "mounted" pages look in some way different to the normal tabs
>>>> stylistically (e.g. aligned to the right and a different colour, with a 
>>>> tooltip along
>>>> the lines of "Shared with you by Bob"). Or maybe you have to have a 
>>>> separate
>>>> page navigation UI to organise pages - "My pages", "Pages shared with me",
>>>> "Public pages" (etc)
>>> 
>>> I think what approach we take depends on what is sharable.  Assuming we go 
>>> with the "Workspace" concept, would your users want to share entire 
>>> workspaces or just individual groups of regions that we now call pages, or 
>>> both?
>>> 
>>>> 
>>>>> 
>>>>> Note: in the above options I'm not referring to page IDs anymore. While
>>>> each page can/should still be addressable by ID (too), if you're going to 
>>>> share
>>>> pages you'll need *also* a logical naming representation to be able for the
>>>> viewer to navigate its own 'site' or even more so a public/anonymous view 
>>>> of
>>>> 'the' site. Meaning: we'll need to come up with a navigational structure 
>>>> for
>>>> pages which can be rendered through menu's, site maps, etc. These IMO
>>>> should be accessible and represented as REST resources like the web itself.
>>>> Thus hierarchically structured.
>>>>> 
>>>>> Once we get there, I think the workspace vs page discussion becomes easier
>>>> and more 'structured'. A workspace then can simply represent a parent (or
>>>> root) page resource with optional children which happens to be shared,
>>>> somehow.
>>>>> 
>>>>> Important this IMO is a discussion on ownership of a shared page or
>>>> workspace, something which was also discussed, but IMO not concluded,
>>>> recently on the OpenSocial 3.0 kickoff concerning the Spaces proposal.
>>>>> 
>>>>> I think each page/space/workspace or whatever (Rave) 'social' web
>>>> resource should have a canonical owner. Meaning only one. And if you want
>>>> to 'share' ownership, then a separate and standalone entity like Group 
>>>> should
>>>> be used. Because that will then allow providing both a canonical location 
>>>> (url).
>>>> 
>>>> +1 I like the idea of a single owner of any page, even if that owner is a 
>>>> Group:
>>> 
>>> This is in alignment with the discussions from the OpenSocial 3.0 kickoff.
>>> 
>>>> 
>>>> /portal/app/group/trekkies/profile
>>>> /portal/app/group/trekkies/spock
>>>> 
>>>>> Consider for instance searching (public web or from within the portal) and
>>>> finding an entry matching a page or workspace: what or who's canonical url
>>>> should be linked to if you would have multiple owners?
>>>>> 
>>>>> There are many different ways to represent a site structure and also many
>>>> different ways to logically blend or merge/share/overlay logical 
>>>> structures on
>>>> top of it, but I think it would be useful to start with something which as 
>>>> a
>>>> minimum provides a canonical representation of the Rave site, and leverage
>>>> that as a start for sharing purposes, without any need to 'OK' a shared 
>>>> page
>>>> before it becomes 'visible'.
>>>> 
>>>> Agreed - a predictable and user-readable URL scheme will help with
>>>> understanding how the pages fit together.
>>>> 
>>>> At the moment, if you try and access a page without permission, you just 
>>>> get
>>>> an error message - this could instead have a dialog to send a message to 
>>>> the
>>>> owner that you'd like to be added or otherwise start a flow that could 
>>>> lead to
>>>> being added as a page member.
>>>> 
>>>>> 
>>>>> So for example canonical could have the following 'pages':
>>>>> 
>>>>> /portal/app/my/profile
>>>>> /portal/app/my/profile/about
>>>>> /portal/app/my/profile/activities
>>>>> /portal/app/my/pages/main
>>>>> /portal/app/my/pages/social
>>> 
>>> I am all for intuitive URL structure and think addressable sub-components 
>>> could make sense.  For at least one of our use cases, we would want 
>>> /portal/app/my/profile/about and /portal/app/my/profile have the same 
>>> overall structure with user image etc at the top of the page. Maybe in 
>>> /about the about tab could be active?
>>> 
>>>>> 
>>>>> and have its /profile, /profile/about and /pages/social pages shared with
>>>> john.doe
>>>>> 
>>>>> Then, john.doe might be able to see (and have menu/links) to:
>>>>> 
>>>>> /portal/app/my/profile
>>>>> /portal/app/my/profile/about
>>>>> /portal/app/my/profile/activities
>>>>> /portal/app/my/pages/main
>>>>> /portal/app/my/pages/social
>>>>> /portal/app/person/canonical/profile
>>>>> /portal/app/person/canonical/profile/about
>>>>> /portal/app/person/canonical/pages/social
>>>>> 
>>>>> Of course the above url structure is just an example.
>>>> 
>>>> 
>>>>> 
>>>>> As soon as I have a bit more time I can try to better explain it, but 
>>>>> hopefully
>>>> it makes sense somewhat.
>>>> 
>>>> I did some hacking on the model, controller, and permission evaluator code
>>>> today to get the backend of page sharing working, and have passed the baton
>>>> to Paul as I don't think I'm going to get any coding time for the next two 
>>>> days.
>>>> So we should (I hope) have some working page-sharing to play with by the
>>>> end of the week.
>>>> 
>>>>> 
>>>>> Ate
>>>>> 
>>>>> 
>>>>>> ====
>>>>>> 
>>>>>> Paul and I are really interested in seeing if we can develop something 
>>>>>> along
>>>> the lines of model (1) in a sprint next week as it would be a good fit for 
>>>> a
>>>> project we're working on.  This wouldn't include the OpenSocial Spaces
>>>> extension (I'm sure someone else could implement it later) but would 
>>>> include
>>>> the basic functionality of sharing pages, selecting users, and extending 
>>>> the
>>>> relevant PermissionEvaluator classes for non-Owner roles.
>>>>>> 
>>>>>>> Support shared spaces
>>>>>>> ---------------------
>>>>>>> 
>>>>>>>                Key: RAVE-103
>>>>>>>                URL: https://issues.apache.org/jira/browse/RAVE-103
>>>>>>>            Project: Rave
>>>>>>>         Issue Type: Epic
>>>>>>>           Reporter: Matt Franklin
>>>>>>> 
>>>>>>> Support shared, or common, spaces with group managed pages, widgets,
>>>> and security
>>>>>> 
>>>>>> --
>>>>>> This message is automatically generated by JIRA.
>>>>>> If you think it was sent incorrectly, please contact your JIRA 
>>>>>> administrators:
>>>> https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
>>>>>> For more information on JIRA, see:
>>>> http://www.atlassian.com/software/jira
>>>>>> 
>>>>>> 
>>>>> 
>>> 
>>> 
>> 
> 

Reply via email to