Along the same line, another solution
would be to split all the contributions done through XML into
their separate bundle. For example if I have a UI plugin with a
view and one menu contribution, then I would have 3 bundles. One
with the code, one for the XML of the view and another one for the
menu contribution (this could probably be automated at build
time).
Then someone trying to compose an IDE would just have to pick and
chose the right bundles to include.
There would be a runtime overhead because of the number of bundles
that would result from this split but I'm pretty sure that this
becomes irrelevant pasted the first run because of the caching .
lazy loading mechanism in Equinox.
Now these mechanisms are fine but they are means to achieve
Integration but they don't do it automatically and it is unclear
if real users would be willing to do it.
Pascal
On 11/03/2014 4:10 PM, Eric Moffatt wrote:
OK...here's my take on an
approach that tries to live in the reality of our current
state. Take everything below with a grain of salt and bear
with me if I'm off the mark on some of the packaging
details...
Right now we define an EPP by
aggregating a set of Features, each specifying the bundles
required to support it. Each bundle may contain any number of
contributions to the UI *all* of which get picked up with the
bundle (the key issue with our bloat IMO). The XSLT approach
was an attempt to help here but I don't think it had the
necessary tooling support to succeed (see below).
Bundle structures are pretty
well fixed in place, nobody's got the time to go over them all
and there's really no 'proper' way to split them up based on
their contributions anyway. We need a fine grained mechanism
to deal with this without directly having to modify the
existing bundles.
What we need is a way to
uniquely identify and filter out any given contribution (be it
Menu[Item], KeyBinding, View, Editor, Perspective...). Let's
say we have a file defining the filters (could even be an XLST
file if appropriate) for a particular bundle. This means that
we can now re-package the *same* bundle with different subsets
of functionality, giving far greater flexibility to anyone
wanting to package up certain capabilities but not others even
when using the same bundle(s). A bundle's 'install' is now a
tuple, the bundle itself and the file defining which UI
contributions are to be exposed to the application when
reading the registry.
The sticking point here may
well be that we need a way to uniquely identify those
contributions we want from a particular bundle. Maybe it's
better if the file identifies the ones that we *want* rather
than the ones to filter out. The advantage of this approach is
that any work needed to add ids to contributions would only
have to be done for contributions that are 'in'
EasyEclipse...for the tooling below I'm going to take some way
to do this as a given (otherwise I think the exercise is
doomed due to the amount of actual effort / coordination
required)
As far as the tooling goes what
I see is something akin to the current Plug-in Registry view
except that the tree being shown for a given bundle would be a
'checkbox' tree, allowing the product packager to directly
select the contributions they want. Conversely a tree that
given a 'product' (list of Features) could show all extensions
for a given extension point. This has the added advantage that
it would be able to show all the handlers / key bindings for a
given Command under the command in the tree (meaning that if
you uncheck the Command then all its handlers and bindings
also get filtered (similarly for other related contributions
such as EditorActions/ViewActions...).
This is of course not a
complete solution. It doesn't help much with preferences but
surely each 'install' could also come with a pre-defined
default preference definition. Note that we while it'd be
great to also be able to filter out unwanted prefs we'd have
to address the problems associated with the separately defined
PreferencePages (which will still have UI for the preference).
It also doesn't solve cases where some contributions are
related in non-obvious ways (i.e. an editor whose
implementation requires a particular view to be available...).
A final thought (YAY!)....early
on there was some discussion about providing an 'all in'
install since download speeds have gone up and disk space is
cheap. This approach could be extended upwards to include
which features are to be included. Think of an update site
called 'local' which simply removes the filter from the
desired feature ( / bundle... ) from the filter, exposing the
code that's already on your drive...
Back to slides,
Eric
Eric
Moffatt---03/11/2014 02:50:01 PM---Miles, I think you've
pretty well nailed the base issue; our UI is an aggregation of
many different
Miles, I think you've pretty well
nailed the base issue; our UI is an aggregation of many
different bundles, each with their own extensions but with no
finer-grained control over what is 'important' to a particular
role. I'm very glad that 'bloat control' has finally reached the
level where the community is *actively* looking for a mechanism
to get a handle on this...
We've actually implemented a number of approaches to mitigate
this over the years:
Perspectives:
Tries to 'bundle' the views appropriate to a work flow within
that perspective. The problem here is that it's not enforced
(i.e. you see *all* views in the ShowView dialog), can't prevent
other bundles from 'polluting' a given perspective with their
own views (including adding them to the 'shortcuts', making them
'first class' citizens of the perspective. This also lead to the
'progressive discovery' approach..."Would you like to open the
Debug Perspective ?" which is OK but represents a single
hard-coded path to a particular perspective.
ActionSets: An
attempt to limit the number of visible command elements (mostly
menu items / TB's) by 'chunking' them into groups to which
common visibility behaviors are applied. Aside from being the
bane of our existence these also suffer from the lack of fine
grained support.
Activities:
Another attempt to limit the visibility of various UI
elements...apparently not used much due to complexities in
defining the 'Activity' definition.
There's also been some work on a lower level approach, removing
extensions 'on the fly'; see
'https://wiki.eclipse.org/Product_Customization' and 'https://wiki.eclipse.org/Equinox_Transforms'. Aside from the issues of having to
hand-craft the XSLT I think that this is near to the correct
approach (i.e. removing the complexity in the UI *before* the
application starts). Again this also suffers from being less
than flexible after defined (how do I as a user get something
back if it's been 'filtered' ?).
Finally, of course, there are the EPP packages...
In short....even with all these abilities in place we're still
where we're at...perhaps a new approach is needed ?
I'll outline some ideas for a possible approach in a separate
email...;-),
Eric
Miles Parker
---03/10/2014 02:00:40 PM---Right. This is what I think of as
the “right-click” problem. Supposedly the Eclipse context menu
is
Right. This is what I think of as the “right-click” problem.
Supposedly the Eclipse context menu is “contextualized”, but
that when you right click on an editor and there are 37 items
on the menu, it’s clear the context isn’t refined enough! When
“Paste” is the 15th item on that list, it’s evidence for even
the most casual user noone is in a position to force a
disciplined high-level design for the overall product. That’s
why efforts like EasyEclipse are important. You need someone
who cares about the typical end user — (and who makes money --
maybe not 1% money, but *some* money -- by caring) — to be
able to make the hard choices about what get’s in by default
and what doesn’t. But even with that effort, without providing
tools to support deeper contextualization, we lose the
advantage as soon as people start using plugin-ins, which is
after all one of the strongest features of the Eclipse
ecosystem.
The basic dilemma of Ux design is the same design conundrum as
with all technologies from babylon on — how to give maximum
information and control with minimum effort and cognitive
load? One answer is to contextualize (the most extreme example
being the original iPod scroll wheel). Mylyn has gone a long
way toward addressing the issue of content-based
contextualization, but the community hasn't effectively
addressed the issue of role or activity-based
contextualization. The closest thing we have for that in
Eclipse-land is Perspectives and that’s far too coarse grained
and cognitively disruptive. But the great thing about Eclipse
is that all of the underlying technologies to make a truly
contextualized experience are all there. It’s “just” a matter
of developing some approaches (and metaphors?) that support
transparent, fluid and user-guided role contextualization and
filtering UI and execution elements based on that.
On Mar 9, 2014, at 8:58 PM, Andrew Eisenberg
<andrew@xxxxxxxxxxxx> wrote:
> I wouldn't be surprised if uninstalling Groovy-Eclipse
could address some of his problems, but the post shows a
larger problem with the IDE work we are (or at least I am)
doing. Too often features are implemented so that a handful
of vocal users are happy, but the silent 99% don't have their
needs fully met.
>
> As a simple example, consider this statement: "Sometimes,
selecting a launch configuration with arrow keys and hitting
enter twice to run it works. Sometimes, it runs a previous
launch configuration. Using the mouse is fully reliable but
less efficient." I'm pretty sure it's because sometimes he has
the editor active and the expected thing runs, but sometimes
some other view is active. This makes sense to power users and
the behavior is consistent with the rest of Eclipse, but it is
probably non-intuitive for new users.
>
> The problem is that determining and implementing the most
intuitive workflow for new users that doesn't annoy power
users is not a cheap or easy process. It involves something
like user studies and active engagement with all of the
community (not just the 1% (no, not *that* 1%)). I admit that
this is something that I have failed to do enough of.
>
>
>
> On Sat, Mar 8, 2014 at 11:32 PM, Max Rydahl Andersen
<manderse@xxxxxxxxxx> wrote:
> I think it's worth noticing he mentions groovy eclipse
which to make it work "hot patches" the JDT.
>
> Pretty sure he should try uninstall groovy eclipse and
see if that doesn't improve his eclipse experience.
>
> This shows how great it would be if jdt could be better
at allowing other javavm based languages to integrate better
so tricks like hot patching aren't needed.
>
> /max (sent from my phone)
>
>
> > On 09/03/2014, at 06.02, Doug Schaefer
<dschaefer@xxxxxxx> wrote:
> >
> > Interesting post. I'd love if we could find some way
to enforce consistency in the IDE. There's lots of things we
can override. I wonder if it's enough. Food for thought.
> >
> > I love the comparison with netbeans and intellij.
Eclipse has so much to offer. We just need to find a way to
manage the product as a whole to make it great.
> >
> > Thanks for this Stephan.
> >
> > Sent from my BlackBerry 10 smartphone on the Rogers
network.
> > Original Message
> > From: Stephan Herrmann
> > Sent: Saturday, March 8, 2014 8:35 PM
> > To: ide-dev@xxxxxxxxxxx
> > Reply To: Discussions about the IDE
> > Subject: Re: [ide-dev] Inconsistent Eclipse user
experience
> >
> >
> > Have you guys seen this:
> >
> > http://www.eclipse.org/forums/index.php/mv/msg/668948/1267143/#msg_1267143
> >
> > Sounds like another client for this group :)
> >
> > best,
> > Stephan
> > _______________________________________________
> > ide-dev mailing list
> > ide-dev@xxxxxxxxxxx
> > https://dev.eclipse.org/mailman/listinfo/ide-dev
> > _______________________________________________
> > ide-dev mailing list
> > ide-dev@xxxxxxxxxxx
> > https://dev.eclipse.org/mailman/listinfo/ide-dev
> _______________________________________________
> ide-dev mailing list
> ide-dev@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/ide-dev
>
> _______________________________________________
> ide-dev mailing list
> ide-dev@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/ide-dev
_______________________________________________
ide-dev mailing list
ide-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/ide-dev
_______________________________________________
ide-dev mailing list
ide-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/ide-dev
_______________________________________________
ide-dev mailing list
ide-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/ide-dev
|