I will try to digest that long mail.
Now what I want is that people can type

thisMethodForZork: aBuilder
        <help>

        aBuilder title: 'About Zork'
                text: 'here is the help for the Zork'

        "adapted to the API of Help"

or 

thisMethodForZork
        <help> or <help:1> or <help: 'About Zork' :1>

        ^ 'here is the help for the Zork'


and that if the help is loaded we can see it in help.


Stef

        
        



On Dec 13, 2010, at 2:34 AM, Torsten Bergmann 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