Thanks Torsten for this detailed view.

I think nothing stop for having the CustomHelp approach (for writing
overviews) AND the pragmas approach (to extract documentation from code /
tests).  Indeed a complete help on a package will surely mix the two.
Actually for the Help I write I have some Help books +
PackageAPIHelpBuilder.

Another example is ProfStef: with last ConfigurationOfProfStef, all
tutorials are automatically available in HelpSystem, thanks to HelpBuilder.

You will also find in http://www.squeaksource.com/LaurentLSandbox.html the
package API-Help wich build the help of all classes in Pharo (warning: slow,
but has been helpful for me several times :)

PS:I added the cool IRC example here:
http://www.pharocasts.com/2010/09/document-with-helpsystem.html

Laurent


On Mon, Dec 13, 2010 at 2:34 AM, Torsten Bergmann <asta...@gmx.de> wrote:

> Hi,
>
> OK, just read the IRC meeting notes and the last posts/threads on the help
> discussions.
> Unfortunately the discussion is scattered and I try to catch up/summarize
> here
> even for people who are new to the topic. Excuse the length of this post in
> advance.
> If the pragma help is interesting to you only then jump to section "D":
>
>
>  A. Pharo once lacked a "help system", so I wrote one. It was and still is
> more oriented
>    towards "end user help" or "browsable manuals" with written text content
> in form of
>    nestable books. I had no need for the next JavaDoc in Smalltalk with
> just an API reference
>    - I wanted real help text which gives a big picture overview to people
> on various topics.
>
>    The design of HelpSystem is simple and should be easy to understand, we
> have a
>    HelpBrowser that displays (nestable) HelpTopics. To display something
> you have to
>    convert it into such a help topic instance.
>
>    Click on "Help" -> "HelpBrowser" in your Pharo image and have a look at
> the book
>    "Help on Help" to get more details or try a few examples.
>
>
>  B. I think you all agree that a "help system" without content is not very
> useful.
>    Different people have different ideas and what could be used as "help
> contents"
>    should be up to you.
>
>    The HelpSystem itself is not and should not be bound to where and how
> (format, etc.)
>    the content is stored. You can convert from any source and format into
> nested HelpTopics.
>
>    To demonstrate this I once provided an example [1] to query and display
> the IRC archive.
>    You will also find this example with IRC as one possible external source
> in the "Help on help"
>    book.
>
>    So the content could be defined in any format you like and the contents
> source could be
>    internal or external to the image. You should declare the help contents
> the way you like.
>
>  C. When you want to provide help to a user you may find it nice to include
> and manage
>    the contents directly within the image. Nice - since you can deploy it
> with your app or
>    unload if it is not needed.
>
>    There are many solutions here - on squeak-dev it was discussed to use a
> specific class
>    comment format or store the contents in methods returning an XML string,
> etc.
>    I expected this discussion since I thought long enough about formats,
> storage and I
>    didnt want to limit anyone.
>
>    Therefore HelpSystem is open to any of these solutions - one can
> implement a custom
>    help builder (see class HelpBuilder) that does the necessary conversion
> into help topic
>    instances.
>
>    One of the many possible solution is to use "pragma annotated" classes
> that hold the
>    contents. Looks like this is getting more attention now again since
> pragmas are used
>    in various places now (like the settings framework).
>
>    And yes, I followed the pragma path already. But after initial
> experiments with pragmas
>    I found it much more convenient to map a tutorial/the help book
> structure directly to
>    the class hierarchy.
>
>    This "class to book" mapping is more natural, one can use the usual
> class browsers and
>    tools to manage the contents (including references, implementors,
> senders, ...)
>    and you can easily have extensible books/tutorials (which is complicated
> with pragmas)
>
>    If you want to follow this "class to book" approach then HelpSystem
> provides a class
>    called "CustomHelp" that you can subclass and that has all the necessary
> support
>    (even for editing and saving by using a workspace) - so you can easily
> implement your
>    help books. Some projects use this already and there is even a Pharocast
> on how to
>    to this.
>
>    Through the class CustomHelp in the HelpSystem we have a commonality
> with SUnit -
>    where you have TestCase as a superclass and implement hook methods.
>
>    This class "CustomHelp" is the one "under fire" that leads to scathing
> criticism from
>    Lukas.
>
>    Maybe it is exactly this commonality with SUnit that makes some of you
> think HelpSystem
>    forces you to subclass "CustomHelp" or forces you to have a dependency
> on the help system
>    if you want to declare your help content.
>
>      => But yet again: nobody has to use the provided "class to book"
> mapping or subclass
>                        "CustomHelp" if you want to define your help
> contents!
>
>    Maybe I should not ship HelpSystem with this support class "CustomHelp"
> as the (currently sole)
>    default but I wanted to at least provide a way to get you started. Still
> it is an utility class
>    and also categorized as such.
>
>    I for myself have no problem with this additional class since when
> subclassed I know that
>    I have a dependency on it's package and I treat the help packages
> similar to test
>    in SUnit (only loaded when HelpSystem is there, etc.)
>
>    However the "CustomHelp" approach has pros and cons and you have to
> decide if it is the
>    right for you:
>
>     Maybe you like:     - easy mapping of classes to books
>                         - easy browsing/managing in standard code tools
>                         - familarity with SUnit (common superclass)
>                         - no "copy/paste" methods as in Metacellos
> ConfigurationOfXXX
>
>     Maybe you dislike:  - the dependency on the superclass CustomHelp and
>                         - therefore the dependency on the help package
>
>    Typical use case is that you display the help contents in the browser
> anyway and
>    therefore this dependency may not hurt you.
>
>    Looks like Lukas has a use-case where he requires his help contents only
> - but
>    not the help system itself. Similar to a loaded test without any SUnit
> support in the image...
>
>  D. As I already said I designed HelpSystem to stay independent from the
> way the contents is
>    defined. So I'm definitely open to a pragma based solution too. In the
> long term I would like to see
>    support for different "content definition styles" anyway.
>
>    Lukas can store his blog posts/help texts the way he likes and without
> any dependency on HelpSystem.
>
>    After the discussion in May we all agreed [2] that it is a good
> direction  to check out the
>    pragma/builder approach too and see how far we can go here. I provided
> an example how one
>    can easily add this "pragma approach" to to the HelpSystem ([3] and [4]
> for the code) but I left
>    out the builder part since I dont know what Lukas expects here.
>
>    So no real feedback/adoption so far ... at least it would help if I get
> an example
>    on how the contents should be defined in an annotated #buildHelpOn:
> method.
>
>    However, the pragma approach has pros and cons:
>
>      Maybe you like:   - no dependency on a common superclass or package
> dependency on a class in HelpSystem
>                        - may therefore seem "cleaner" depending on POV
>
>      Maybe you dislike:  - even with pragmas one has an implicit dependency
> on the builders interface
>                            which also has to be stable very early
>                          - by using pragmas (loose coupling) you have to
> deal with the problem that
>                            your parent topic may not be there/not be loaded
> since it can be defined
>                            somewhere else in the class hierarchy.
>
>  E. After the initial release people asked on how to integrate typical
> "Smalltalk documentation"
>    to include browsable reference documentation (API doc) like class and
> method comments in the
>    HelpSystem too. This was easy to add since again I just had to write a
> custom help builder that does the
>    necessary conversion.
>
>    If you load the "Pharo-Project-Help" you can browse the complete
> reference on anything that
>    is already documented:
>
>
>      Gofer new
>           squeaksource: 'HelpSystem';
>           package: 'Pharo-Project-Help';
>           load.
>      HelpBrowser open.
>
>    In the help browser click on "Pharo" and "API Reference". This is more
> "reference documentation" and
>    only a "poor" way to easily fill up the help system ;)
>
>    I would like to see people writing more tutorials/manuals about parts of
> the system so one could get the big
>    picture, but the idea of Stef [5] to get fully documented classes and
> methods is also nice. For the
>    reference docu:
>
>
>      Maybe you like:     - no dependency on anything, just comment your
> classes and methods
>                            as you may know from any other smalltalk system
>
>      Maybe you dislike:  - you dont need the help system, you can look at
> it in the standard browser
>                          - its only a basic API documentation system
> (compared to JavaDoc and others)
>
>
> -----------------------------------------------------------------------------------------------------------------
> And now some comments on IRC/posts I've seen:
>
> Lukas on IRC see [6]:
> >[3:14pm] renggli: HelpSystem is not useable for me and obviously not for
> anybody else (otherwise
> >it wouldn't be empty)
>
> Lukas, nobody forces you to follow the "define help contents via class to
> book mapping" approach.
> If you want a "define help content via pragmas" approach then help moving
> this issue forward or define
> your help contents the way you like and implement a custom help builder.
>
> For the other point: HelpSystem is not empty - look at an updated core 1.2
> and it is already
> used in many external packages as Laurent already pointed out. [7]
>
>
> Lukas wrote on [8]:
> >> Couldn't you just add another loop to your script to "unload all help"
> just
> >> like unload all tests
> >Sure, but that means I have to package help text separately. This is
> >the contrary to what Java, Ruby, Python, Javascript, ... are doing;
> >keeping code and documention as close together as possible.
>
> No - you dont have to package documentation seperately. A class/method
> comment is still a
> class/method comment and its packaged with the code. There is no dependency
> on HelpSystem
> here - although the HelpBrowser can display it too.
>
> You still keep code and documentation close as in any other language.
>
> But if you write a "big picture" help manual or tutorial on how things
> interact it would
> be good to package it seperately. Either using CustomHelp, pragmas, or ...
>
>
> Lukas wrote on [8]:
> >I think, the fact that there is no single external package with help
> >system documentation proves this, no?
>
> There are quite a few. Maybe you should look more often on Squeaksource.
> Again I point to [7]
>
>
> Stef wrote on [9]
> >Now I was thinking that torsten would reply to this mail but in 1.3 will
> take a decision because I want a really better help
> >and documentation inside the right class and package.
>
> I still think that we should in minimum have the "code" - "tests" - "help"
> package triade, where the code package
> includes the class and method documentation as any Smalltalker is used to.
> The test package should include unit tests
> covering the code. And the help package should give a high level overview
> on how to use the code or tests.
>
> If the dependency from "help" packages to "help system" due to the class
> CustomHelp is a problem then
> we can easily convert them once we have a good "pragma based" approach in
> place.
>
> Removing packages or classes that are not documented is too hard ... but we
> should use Lint rules to check the
> "completeness/basic quality" of package.
>
> Similar to checkstyle for Java in Eclipse - if there are problems in a
> package then you have a different icon for
> the package and you work until it's clean because it hurts your eyes (see
> [10] for a screenshot)
>
>
> Hope I could at least bring some light into the whole discussion and I
> would really like
> the see if also the pragma approach would move forward.
>
> Bye
> Torsten
>
>
> [1]
> http://forum.world.st/Preview-Help-System-with-new-model-now-also-for-Squeak-td1695386.html
> [2] http://forum.world.st/Help-System-td2131748.html
> [3]
> http://lists.gforge.inria.fr/pipermail/pharo-project/2010-May/026148.html
> [4]
> http://lists.gforge.inria.fr/pipermail/pharo-project/attachments/20100505/cc589ac2/attachment-0001.obj
> [5]
> http://lists.gforge.inria.fr/pipermail/pharo-project/2010-December/036952.html
> [6] http://pastebin.com/Y7MFaddK
> [7]
> http://lists.gforge.inria.fr/pipermail/pharo-project/2010-December/037507.html
> [8]
> http://lists.gforge.inria.fr/pipermail/pharo-project/2010-December/037485.html
> [9]
> http://lists.gforge.inria.fr/pipermail/pharo-project/2010-December/037499.html
> [10]
> http://www.ibm.com/developerworks/java/library/j-ap01117/checkstyle-eclipse.jpg
>
>
>
> --
> Neu: GMX De-Mail - Einfach wie E-Mail, sicher wie ein Brief!
> Jetzt De-Mail-Adresse reservieren: http://portal.gmx.net/de/go/demail
>
>

Reply via email to