Le 7 mars 05, à 21:30, Stefan Urbanek a écrit :
On Mon, 2005-03-07 at 17:52 +0100, Quentin Mathé wrote:
Partially, NSDocument is just a facility to manage documents but he
hasn't be written with document orientation in mind, however we could
probably extend it with" rich document bundle support" to add such
semantic without extra work on developers side.
No it was not, as you state. To make document oriented applications
reality, we need to move focus from NSApplication to NSDocument as a
core environment class.
True, but we need to think now how it should extend step by step
NSDocument (API and code level).
hmm no, document orientation involves probably to change UI (a bit
like
what IBM/Apple tried to do with OpenDoc) in order to really get
benefits of the paradigm in my opinion.
Possible UI evolution :
- document components layout
- document components interaction (may be ?)
- document window owner changed on the fly when you switch application
context (initially we could start with a "Document editor"
application,
may be the Workspace, which permits to layout your components, and
when
you double-click on a component it is opened in whatever default
editor
application bound to this component…)
- etc.
I will stop on the last bullet - the document window. Let me explain:
Current state:
- user launches an "application"
- user uses the application to "create a document"
- user uses the application to "open a document"
- Edit, save, close
- Use another application to edit different document
- Use "import" feature to include product of one application into the
another.
How it should be in a document based environment:
- user "creates a document container" (from the environment)
Yes, but do you think the "environment to create document containers"
should be the Workspace or a special "application" ?
- user adds "document parts" to the container
- user uses "document part editors" to edit components of the document
- "part editors" can save the parts
The last point is not simple to solve, especially until we have thin
applications with their core implementation separated in a framework,
no ?
"document part" can be a text, diagram, spreadsheet,... and it is
edited
in a window. Difference is, that the window is not owned by an
application, but by an environment or document manager.
How do you think it is possible to do that, by keeping UI (menus
especially) tailored to the current editor context ?
Especially when you take in account we haven't a deployment OS with a
single address space and we should take in account DO performance which
can be problematic with "heavy data" oriented applications (Image
editor to take an example).
Do you mean "Document manager" is just a display and eventually layout
process ?
I think we could improve this in the future, by discarding "Document
manager" and keeping the document window owned by the editor
application and having a popup menu in the top of the window where you
can choose "Applications filter" to view the document. Then when you
would change the current "Applications filter", with an AppKit hack we
would migrate the document window in another application process (the
window is technically speaking owned by the window manager) and
redisplay the content in accordance with the new application (using
NSDataLink & co to display the document parts).
Few "unrealistic" proposals for more long term plan… To take in account
the idea to have applications broken in set of components, and the fact
it would be nice to share documents content directly in memory when
possible (hmm for example, to avoid reloading a whole big image when
you move to a new application context)… Anyway this last point is
probably too much work (on model/data protocols etc.) and way too
complicated for not so many benefits with currents computer systems.
There are various possible models :
1) For each document :
- we have a separate process (document window owner)
- we load/unload applications bundles in this process on the fly
2) For each document :
- we have a separate process (document window owner)
- we launch/terminate applications in separate processes on the fly
- we have a connection like DO, StepTalk etc. (with a "data source"
protocol) to allow transparent talk between documents processes and
applications processes, and especially having applications nib UI
loaded in document process
3) For each document :
- we have background model/data process
- we have applications in separate processes where documents are
opened (the applications are document window owner)
(- we can move document window to other applications with
"Applications filter" popup menu)
Theses three solutions (not really true for 3) would permit better
document orientation (from programming code point), moreover to produce
the illusion documents could be opened and owned by Workspace (or other
your specific application choices) and "moved" cleanly technically
speaking in the application context you want to use for editing or
viewing.
Theses various solutions would allow to have "opened stored objects"
like folder windows, document windows managed in a similar way with
their own process.
Anyway there is already many work to do to achieve the first goals you
outlined.
The conclusion…
The main problem is the outdated conception of today OS with separated
address spaces, no objects semantic support, no real persistency
mechanism and poor distributed use support. The ideas you describe in
<http://stefan.agentfarms.net/IMG/pdf/OgmaSVOC-2.pdf> with domain
objects which are door to enter in pool of objects would make this
stuff far more easier, but we are not not going to write yet another OS
now ;-)
Then we could have to think about smart workarounds to implement such
possibilities, but first steps should be doable without too much "brain
fighting".
To make transition easier say we keep applications. We only change them
to editors of those "document parts". From the beginning, only a kind
of
"binder" application would be necessary. And this is important: to move
from application focused environment to the document focused
environment
we should go step-by-step to allow users adapt to the new paradigm.
Only
then it will be accepted.
What do you mean precisely when you talk about "binder" application, a
"Document manager" application where you layout and eventually connect
your documents parts ?
In this case, NSDataLink would allow this, we would double-click the
document part we want to edit in order to launch a separate editor
application (like classic GNUstep applications) where the part could be
edited like traditional document.
I would rather keep away from hanging the menu depending on selected
object, like it is done by OLE. This will bring only confusion, as
users
are focused on the application. You will break their thoughts and make
them ask "where i am?" Context (document) sensitive changes can be done
only when it is clear that the environment is document oriented and
that
there are no applications, but document part editors.
Even when full document oriented UI implementation is achieved, I'm
still not sure "document context" sensitive changes are really the
thing to do.
… otherwise NSDataLink provides a class with linked parts inspector
iirc, that would avoid to shuffle the menu like OLE.
If it's not the case it would be probably interesting to add such
"Quick inspection" feature.
With process and application oriented operating environments you will
gain a little with this component architecture - you can not easily
compose those components to cooperate on a single task, then decompose
them. But what can you do currently is to have many small applications
that can edit pieces of a document. Call those applications
"components" :)
True, thin applications with framework based backends combined with
NSDataLink stuff and some NSDocument improvements would permit to
implement this idea.
Again, if you decide to go in the directon of document orientation,
then
go there slowly and try to use anything that is currently available
(like start by breaking applications and making them cooperate).
That's what we will try to do, at least when current basic stuff will
compile and work.
p.s.: I have related problem with StepTalk, where i wanted to finally
create "the application glue". It can be solved by a helper tool that
will create a separate process holding current state of a scripting
environment. Process = object memory = scripting environment = user
task
= user context = user thoughts. Similar attitude can be used in
document
oriented environment, i think.
I have read your presentation where you talked about StepTalk to glue
applications in your workflow… but I hadn't any ideas on how
collaboration between objects would be established in what you
proposed, then the things are a bit more clear now.
However I don't precisely understand what you mean with this equation :
Process = object memory = scripting environment = user task = user
context = user thoughts.
Quentin.
--
Quentin Mathé
[EMAIL PROTECTED]