Pharo-users
By thread
pharo-users@lists.pharo.org
By month
Messages by month
- ----- 2026 -----
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
August 2016
- 68 participants
- 301 messages
Re: [Pharo-users] Set on Attribute
by Sean P. DeNigris
Sven Van Caekenberghe-2 wrote
> PluggableSet ?
Perfect! Thanks :)
My actual usage, in case anyone finds it helpful, was removing duplicate
files:
uniqueFiles := PluggableSet new
equalBlock: [ :a :b | a isMD5Equal: b ];
hashBlock: [ :f | f binaryReadStreamDo: [ :str | (MD5 hashStream: str) hex
hash ] ]
yourself.
allFiles := folder filesMatching: '*.eml'.
uniqueFiles addAll: allFiles.
(allFiles difference: uniqueFiles) do: #delete.
-----
Cheers,
Sean
--
View this message in context: http://forum.world.st/Set-on-Attribute-tp4912672p4912678.html
Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.
Aug. 26, 2016
More reliable VCS, Project management and tools?
by Vitor Medina Cruz
Hello,
I am doing some katas and challenges using pharo 5, and I got a bad
impression from the VCS and Project management as a whole. I got a bunch of
problems with, as it seems to me, simple stuff, and so I loose a lot of
confidence with the system :( I get myself saving the image a lot and
double checking anything done with version control. I am going to tell more
or less what I have done in the last days for you to get an idea of the
problems I had and then ask some questions.
I am using Pharo 5 in a Windows 10 system and I was first trying to use GIT
as the underlying provider for monticello. I know gitfiletree has problems
in a windows system, but I tried to use it anyway to see what happens and I
got an image unusable, with Nautilus package view messed up with red blocks
and yellow crosses.... scary. I am not sure if that problem with Nautilus
was actually caused by gitfiletree since I changed the package of the
configuration of my project (I did that only to see if I could) and then
rolled that back while testing gitfiletree... but, well, gitfiletree do not
work on Windows, I got an index out of bounds exception or something like
that, so I gave up and used filetree with a git client to make actual
commits.
However, for anyone to load my configurations and projects, I could not use
filetree with a local directory, so I created a smalltalkhub repository and
started to commit there and on my local filetree directory. I used Kommiter
to commit onto smalltalkhub and Monticello to copy changes to my local file
tree until I got and error using Komiter. I tried to proceed instead of
abort and one of the packages didn't commit correctly. Trying to access it
on the smalltalkhub site I got an error....
I opened Monticello and had to Flush Cached Version so that it stopped to
tell me that there were no changes and started to prompt an error message.
I had to forcibly save a new version so that it work again. If I go now to
smalltalkhub, sometimes I got errors, sometimes don't. I don't know yet if
the error was with komiter, smalltalkhub or my image.
Oh, and Monticello sometimes says there are changes to pakages that I
haven't changed, when I click on changes it discover that there are no
changes and remover the "*" mark of it.
I tried using Versioner too, but sometimes when I try to commit a minor
version, for example, the system hangs and I need to "Alt + .". For now the
reliable way of using versioner is to create a release version and commit
from Monticello
Right now I fell like stepping in a land mine, so I would like to know:
1- Shouldn't I be using Windows? Pharo isn't stable on a Windows plataform?
2- Is Komiter reliable or should I use Monticello directly?
3- Is Smalltalkhub reliable or should I use other repository?
4- I don't believe those problems are normal, otherwise there wouldn't be
so many places using Pharo for production purpose, any hints of what I may
be doing wrong? :(
Thanks in advance and sorry if the stuff I am doing seems dumb... :(
Regards,
Vitor
Aug. 26, 2016
Re: [Pharo-users] Set on Attribute
by monty
Other than PluggableSet, something like Unix's sort and uniq combo would work:
condenseOnFirst: aCollection
| lastSelected |
^ aCollection sorted select: [:each |
(lastSelected isNil
or: [lastSelected first ~= each first])
ifTrue: [
lastSelected := each.
true]
ifFalse: [false]]
> Sent: Thursday, August 25, 2016 at 7:42 PM
> From: "Sean P. DeNigris" <sean(a)clipperadams.com>
> To: pharo-users(a)lists.pharo.org
> Subject: [Pharo-users] Set on Attribute
>
> Say I have a collection like #('ab' 'ac' 'ba' bc') and I want to condense it
> so that a certain attribute is unique. In this example, say the first
> character, so I want one object where the first character is $a and one $b,
> but I don't care which object i.e. 'ab' or 'ac' for $a, but not both.
>
> Is there an elegant way to do that?
>
>
>
> -----
> Cheers,
> Sean
> --
> View this message in context: http://forum.world.st/Set-on-Attribute-tp4912672.html
> Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.
>
>
Aug. 26, 2016
Re: [Pharo-users] Set on Attribute
by Sven Van Caekenberghe
PluggableSet ?
> On 26 Aug 2016, at 01:42, Sean P. DeNigris <sean(a)clipperadams.com> wrote:
>
> Say I have a collection like #('ab' 'ac' 'ba' bc') and I want to condense it
> so that a certain attribute is unique. In this example, say the first
> character, so I want one object where the first character is $a and one $b,
> but I don't care which object i.e. 'ab' or 'ac' for $a, but not both.
>
> Is there an elegant way to do that?
>
>
>
> -----
> Cheers,
> Sean
> --
> View this message in context: http://forum.world.st/Set-on-Attribute-tp4912672.html
> Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.
>
Aug. 26, 2016
Set on Attribute
by Sean P. DeNigris
Say I have a collection like #('ab' 'ac' 'ba' bc') and I want to condense it
so that a certain attribute is unique. In this example, say the first
character, so I want one object where the first character is $a and one $b,
but I don't care which object i.e. 'ab' or 'ac' for $a, but not both.
Is there an elegant way to do that?
-----
Cheers,
Sean
--
View this message in context: http://forum.world.st/Set-on-Attribute-tp4912672.html
Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.
Aug. 25, 2016
Re: [Pharo-users] [Pharo-dev] [ann] GTExamples alpha
by Tudor Girba
Hi,
I just tried again, and the latest GToolkit image does contain FileSystem class >> gtExampleZip:
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 <tudor(a)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 <nicolaihess(a)gmail.com> wrote:
>>
>>
>>
>> 2016-08-25 8:47 GMT+02:00 Tudor Girba <tudor(a)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."
Aug. 25, 2016
Re: [Pharo-users] [Pharo-dev] [ann] GTExamples alpha
by Tudor Girba
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 <nicolaihess(a)gmail.com> wrote:
>
>
>
> 2016-08-25 8:47 GMT+02:00 Tudor Girba <tudor(a)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."
Aug. 25, 2016
Re: [Pharo-users] IIS and Pharo web service solutions
by Sabine Manaa
Hi Robert,
you offer to give a detailed explanation for exactly what we would need.
Currently we use a windows server with apache in production with
Pharo/Seaside but we would like to switch to IIS.
Could you send us some information about the points you mention: (Pharo as a
service on Windows, IIS modules to install, how to make it and how to
configure proxy / url rewrite). This would be very helpful!
Regards
Sabine
--
View this message in context: http://forum.world.st/IIS-and-Pharo-web-service-solutions-tp4887804p4912648…
Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.
Aug. 25, 2016
Re: [Pharo-users] support for Croatian language
by Gour
On Thu, 25 Aug 2016 18:19:13 +0200 Esteban Lorenzano
<estebanlm(a)gmail.com> wrote:
> you mean the list after enabling free type library?
Yes.
> that has nothing to do with Pharo, it lists the fonts present (and
> findable) of your system.
Ahh, now I got it...'language' simply denotes "demo string" and not
selecting support for the language...still, I see that it does not find
fonts installed in ~/.fonts.
Sincerely,
Gour
--
One must deliver himself with the help of his mind, and not
degrade himself. The mind is the friend of the conditioned soul,
and his enemy as well.
Aug. 25, 2016
Re: [Pharo-users] [Pharo-dev] [ann] GTExamples alpha
by Nicolai Hess
2016-08-25 8:47 GMT+02:00 Tudor Girba <tudor(a)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?
> 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.
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.
>
> 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").
> 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).
>
> 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
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?)
The example on the examples.html side isn't actually in the image right?
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.
The code pane context menu of a sendersOf Message browser is broken (debug
menu).
>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.
And the menu entries are ... unfortunate (see screenshot), what you put in,
the whole source as menu label?
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?)
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
"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?
>
> 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."
>
>
>
Aug. 25, 2016