Hi,

> On Aug 26, 2016, at 10:01 PM, Nicolai Hess <nicolaih...@gmail.com> wrote:
> 
> 
> 
> 2016-08-26 0:51 GMT+02:00 Tudor Girba <tu...@tudorgirba.com>:
> Hi,
> 
> I just tried again, and the latest GToolkit image does contain FileSystem 
> class >> gtExampleZip:
> 
> Yes, it is there, but not listed under the FileSystem class package.
> If you open Nautilus for all gt examples (world menu -> GT Examples -> Browse 
> all examples)
> A Nautilus browser opens, but it shows mostly GT-Packages.
> And if you just open a new Nautilus window, select the FileSystem-Core 
> package and choose "Browse All Examples of Package FileSystem-Core from the 
> GT-Examples menu.
> you won't see any example. 
> It is "impractical", that you need to select the GT-Examples-Examples package 
> to actuall find the FileSystem-Core examples (and others).
> 
> Or in short
> The FileSystem examples are not in the FileSystem *package*
> And the same for other examples, you can not find all "Collections"-Examples 
> by selecting the Collection package and choose "Browse All Examples”

Indeed. Good catch. This should be rethought.

Cheers,
Doru


> Inspect this:
>         Smalltalk gtExamplesContained select: [ :each |
>                 each method methodClass instanceSide = FileSystem ]
> 
> This is the image:
>         https://ci.inria.fr/moose/job/gtoolkit/5595/artifact/gtoolkit.zip
> 
> Cheers,
> Doru
> 
> 
> > On Aug 25, 2016, at 11:40 PM, Tudor Girba <tu...@tudorgirba.com> wrote:
> >
> > Hi Nicolai,
> >
> > Thanks a lot for the feedback. Please let’s continue. See more inline.
> >
> >> On Aug 25, 2016, at 6:34 PM, Nicolai Hess <nicolaih...@gmail.com> wrote:
> >>
> >>
> >>
> >> 2016-08-25 8:47 GMT+02:00 Tudor Girba <tu...@tudorgirba.com>:
> >> Hi,
> >>
> >> Hi Doru,
> >> some questions and feedback ( I am sorry for my tone or if this sounds 
> >> negative, it isn't meant to be)
> >>
> >> Over the last coupe of years Stefan Reichhart and the rest of the GT team 
> >> worked on an implementation of examples. The work is inspired from 
> >> previous work done by Markus Gaelli and Adrian Kuhn.
> >>
> >> As one of the goals of GT is to offer a live programming environment,
> >>
> >> Isn't this what we already have, a live programming environment, I think 
> >> for newcomers (and maybe others) this needs to make be more clear, how is 
> >> different, what gap are you trying to fill.
> >>
> >> one important issue is how to move from the static code to live objects as 
> >> fast as possible.
> >>
> >> Isn't code always "static" and aren't objects always "live", how do play 
> >> gtExamples any role in this?
> >
> > What I meant is that I want to be as little as possible in the static code 
> > browser. Instead I want to write code in the presence of a bounded “self” 
> > which happens either in a debugger or in an inspector.
> >
> > The gap that examples fill is that when I look at a static code and I have 
> > examples about it, I can possibly jump to those examples and code against 
> > their result. So, instead of coding a method about a FileReference in the 
> > code browser, I will code it against an instance of a FileReference. Hence, 
> > we make live programming easier to achieve.
> >
> >
> >> That is why we worked on this library as a solution to provide a link 
> >> between the static code and live objects.
> >>
> >> From my understanding, I think this "link" between code an objects is the 
> >> real valuable new point. This is the great thing about gtExamples. link 
> >> from code (the example methods itself or methods refering a class
> >> to an example object/instance that can be inspected (the raw  object or an 
> >> object specific inspector pane).
> >> This is what I would consider the real step forward. You see a method 
> >> refering to class TextModel and Nautilus or any other tool not only offers 
> >> a method to browse all Users of this class, but too, a dedicated
> >> list of "example methods" where every example has a view for this example 
> >> instance that let the user show and interact (even for non-visual objects 
> >> through the "evaluater pane", or just see the code creating this
> >> example.
> >
> > Exactly.
> >
> >> We really miss examples, I often see questions on the mailing list 
> >> (especially about spect) that can be explained easily with an example. And 
> >> even worse, often the examples already exists, they just aren't as visible.
> >
> > Exactly. These examples are particularly amplified by the fact that we have 
> > an inspector that can provide a reacher experience through different views.
> >
> >
> >> Furthermore, this examples library also enables the definition of 
> >> assertions on the examples, and this provides the possibility of 
> >> rethinking the way we construct tests throughout our system. Tests are 
> >> great as they help us create live objects and then to assert live 
> >> properties.
> >>
> >> This whole thing sounds as if Unit-Test were a good idea but not the way 
> >> that they are used today, I strongly disagree. I don't see this as a 
> >> "rethinking the way we construct tests", yes, we can
> >> augment the current set of tests with addtional assertions on live 
> >> objects, but this is not a replacement.
> >> "Tests are great as they help us create live objects" This is not my only 
> >> purpose for writing tests, often unit-tests cover methods and 
> >> "private-apis" not even considered to be used on live objects. You can not 
> >> (or I don't want to
> >> ) write tests only on "finished lived objects" sometimes we need tests for 
> >> initialiazation/private code or exception handling I don't see how we can 
> >> offer this only by using example instances (yes your "rethinking" sounds 
> >> like "this
> >> is the better way to do tests”).
> >
> > I think there is a misunderstanding here.
> >
> > When I test, (1) I create one or more objects, (2) I assert against them 
> > and then (3) I potentially cleanup. At least the objects from step 1 are 
> > potentially interesting for documentation purposes as well. However, 
> > because tests are built in a completely different environment than examples 
> > are, and because they are not casually linked to the code they are about, 
> > we cannot exploit them to the maximum potential.
> >
> > The GT-Examples model offers a unification. This means that you can use the 
> > same mechanism for expressing both a test scenario and a documentation one. 
> > There is potential to be exploited here. For example, there is research 
> > that aims to take the all sorts of objects and try to infer types for code 
> > out of these. We could make this much simpler.
> >
> > I understand that this is a departure from the classic way of testing, but 
> > we have already expressed more than 1 thousand examples both from a 
> > documentation and from testing point of view, and it does seem to work.
> >
> >
> >> However, they do not allow us to leverage the objects we create, and this 
> >> can be a tremendous resource for understanding systems.
> >>
> >> In our vision, examples should be everywhere and they should be explicitly 
> >> linked to the static code they exemplify. That is why the library comes 
> >> with an initial integration in existing tools (such as Nautilus, Spotter, 
> >> Inspector).
> >>
> >> The current solution works well and it is the result of several rewrites. 
> >> We think that the solution is complete in terms of features, but there are 
> >> still several things to improve and iterate on. To this end, I kindly ask 
> >> you to take a look at it while distinguishing between the concrete 
> >> implementation choice (e.g., the current extensive use of pragmas) and the 
> >> conceptual benefits of the approach.
> >>
> >> To ease the discussion, we put together a short documentation:
> >>
> >> Everytime I see a gtExample method on a class I first think, shouldn't 
> >> this go to a Help or Doc or Exampels class instead. I don't know how 
> >> others thinks about this but this is my first impression.
> >> For example, the example on your page:
> >>
> >> FileSystem class >> #createFileOnDisk
> >>
> >>     <gtExample>
> >>     <
> >> description: 'Create a new file or override an existing file with some 
> >> contents. Open and close the stream safely'
> >>>
> >>     ^
> >> FileSystem workingDirectory / 'test.txt'
> >>
> >>
> >> writeStreamDo: [ :stream | stream nextPutAll: self
> >> comment ];
> >>          yourself
> >>
> >> Nice, now the user can see how to use FileSystem to create a file, open 
> >> *and* close the stream safely.  But for me, this method does *not* belong 
> >> to the FileSystem class it just not make any sense to me, to have a method 
> >> (*in this class*) that opens and closes a stream. Even if this is just an 
> >> example, I would put it in a doc-page or a tutorial that can execute code. 
> >> But again , this is just my point of view.
> >> I can not really explain it, having a example method on Morph or a widget 
> >> ui or a widget model class, that opens an example morph or widget in the 
> >> world, is for me something completly different and a valid example.
> >> Having the same for the method above  - is not, at least not as executable 
> >> code on the FileSystm class).
> >
> > I do not understand this last point.
> >
> > Just because an object does not have a visual appearance like a Morph does, 
> > does not make it uninteresting from an interaction point of view. The 
> > inspector already can provide the views. We also have the possibility of 
> > adding custom actions that can be installed as menu items. Even for a 
> > morph, I sometimes want to not look at its default appearance, but at its 
> > submorphs. Thus, I do not see the confusion.
> >
> > Nevertheless, the example does not have to be on the class side. It can be 
> > in any class you want and you can associate it with a subject. For example, 
> > all Roassal examples are in dedicated classes. There are hundreds of 
> > methods, so putting them all on the class side of a domain class would not 
> > work at all. We showed the example on the class side because that is a 
> > pattern that people used for a long time and it is a reasonable place when 
> > you have only a handful of examples. The rationale is that an example is a 
> > way to instantiate a class, so having it on the class side is not far 
> > fetched. Also, if you put it on the class side, you get by default the 
> > class as a subject for the examples it contains which is quite natural.
> >
> >
> >>        http://gtoolkit.org/doc/Examples/examples.html
> >>
> >> That being said, you can get it with the full GToolkit in Pharo 6.0:
> >>
> >> Is this based on the recent Pharo 6.0?
> >>
> >> GTExamplesReleaseTests are failing for me
> >
> > Yes, these are yellow.
> >
> >
> >> Where did you test this? I get some Object>>#name deprecation warnings 
> >> when browsing for examples refering a class, for example on
> >> class FileSystem and menu entry "Browse Examples refering FileSystem" 
> >> (maybe a Pharo 5.0 version?)
> >
> > I tested in Pharo 6.0 (60188), but we just got a problem that was reported 
> > related to Epicea and Martin is looking at it.
> >
> >
> >> The example on the examples.html side isn't actually in the image right?
> >
> > Yes, it’s not there yet.
> >
> >
> >> The browsing examples of a package (context menu on nautilus package pane) 
> >> does not work or I don't understand why it does not find any examples at 
> >> all.
> >> The World menu "Browse All Examples" does not contain the class 
> >> FileSystem, although FileSystem>>gtExampleZip is a gtExample, this is 
> >> because
> >> the example method is in an extension package, should all gtExample 
> >> methods be class extensions ? This is handled differently for different 
> >> packages.
> >
> > Hmm. When I "Browse All Examples" I get a Nautilus with FileSystem 
> > class>>gtExampleZip in my image. But, indeed, in the latest GToolkit image, 
> > this example is missing.
> >
> >
> >> The code pane context menu of a sendersOf Message browser is broken (debug 
> >> menu).
> >
> > I do not understand what menu item you refer to. Could provide a screenshot.
> >
> >>
> >> From the web-side:
> >>
> >> "Furthermore, Nautilus, the World-Menu, all Rub-Text-Editors as well as 
> >> Spotter and Inspector provide access to retrieve, browse and navigate 
> >> examples from entities within the world"
> >> I can not find it, not in inspector, Rub-Text-Editors, only in Nautilus.
> >
> > In Nautilus and in RubText you get it in the GT-Examples menu (Browse 
> > examples with subject …).
> >
> > The Inspector is not yet there, but we are adding it.
> >
> >
> >> And the menu entries are ... unfortunate (see screenshot), what you put 
> >> in, the whole source as menu label?
> >
> > Hmm. Something is strange there. I get the name of a method, not the source 
> > code. What image are you in?
> >
> >
> >> run "run the example and return its return-value"
> >>
> >> debug
> >> "same run, but open debugger if the example fails”
> >> returnValue
> >> "the return-value"
> >> Executing run/debug/inspect returnValue does not seem to make any 
> >> different when called from nautilus. It always gives
> >> an inspector on a dictionary holding the gtexample and its gtexampleresult 
> >> (is this a bug?)
> >
> > Yes.
> >
> >
> >> Glossary:
> >> "Example: an example is a tiny stub object representing a GT-Example. It 
> >> holds the references to its dependencies, subjects and many other 
> >> entities. "
> >> What are "many other entities" this is a bit unclear
> >
> > Icon, Label, Provider, and others that you can add through custom 
> > annotations if you want to. This part is not yet clear.
> >
> >
> >> "After-method: the after-method is a method that is performed right after 
> >> the example."
> >> After the example ? I thought an example is a "tiny stub *object*", how 
> >> can it run?
> >> How it is run after I run an example for inspection, after I closed the 
> >> inspector?
> >
> > Not yet. At this point, inspecting does not prevent triggering of the 
> > cleanup method, but it would certainly be interesting to get there.
> >
> > Cheers,
> > Doru
> >
> >>        http://gtoolkit.org/#install
> >>        (easiest is to download the ready made image for now)
> >>
> >> For those that are at ESUG, I will try to provide a short overview during 
> >> the Show Us Your Project session from today.
> >>
> >> Cheers,
> >> Doru
> >>
> >>
> >> --
> >> www.tudorgirba.com
> >> www.feenk.com
> >>
> >> "Reasonable is what we are accustomed with."
> >>
> >>
> >>
> >> <gtexample_menu.png>
> >
> > --
> > www.tudorgirba.com
> > www.feenk.com
> >
> > "No matter how many recipes we know, we still value a chef."
> 
> --
> www.tudorgirba.com
> www.feenk.com
> 
> "Quality cannot be an afterthought."
> 
> 
> 

--
www.tudorgirba.com
www.feenk.com

"What we can governs what we wish."





Reply via email to