Pharo-dev
By thread
pharo-dev@lists.pharo.org
By month
Messages by month
- ----- 2026 -----
- August
- 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
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- 3 participants
- 144616 messages
Re: [Pharo-dev] Pharo 7 provisional HOWTO
by Nicolai Hess
2017-06-28 18:25 GMT+02:00 Esteban Lorenzano <estebanlm(a)gmail.com>:
>
> On 28 Jun 2017, at 18:21, Nicolai Hess <nicolaihess(a)gmail.com> wrote:
>
> And if I only want to contribute by reviewing a fix. Do I have to go the
> git-path ?
> Or is there a way to just start up an image and load and review the change?
>
>
> right now, you can review by going to github and seeing.
> I will add a âPR toolâ to view/load PRs into an image, but thatâs not
> ready. If someone wants to take a hit on it⦠the idea is to extend the
> github plugin with it :)
>
> cheers!
> Esteban
>
Anyone got this working on windows (32) ?
I followed this guide, enabled the ssh key setting for iceberg.
But I still got the error :
Image: Pharo7.0SNAPSHOT [Latest update: #0]
LGitReturnCodeEnum>>handleLGitReturnCode
Receiver: a LGitReturnCodeEnum(#git_error [-1])
Arguments and temporary variables:
handler: LGit_GIT_ERROR
Receiver's instance variables:
value: -1
LGitRepository(LGitExternalObject)>>withReturnHandlerDo:
Receiver: a LGitRepository (<not initialized>)
Arguments and temporary variables:
callBlock: [ self
clone: self
url: aString
local_path: aFileReference pathSt...etc...
Receiver's instance variables:
handle: @ 16r00000000
repositoryPath: File @ pharo-core
isOpen: nil
workingDirectory: nil
LGitRepository>>clone:options:to:
Receiver: a LGitRepository (<not initialized>)
Arguments and temporary variables:
aString: 'git@github.com:pharo-project/pharo.git'
cloneOptions: a LGitCloneOptions ()
aFileReference: File @ pharo-core
Receiver's instance variables:
handle: @ 16r00000000
repositoryPath: File @ pharo-core
isOpen: nil
workingDirectory: nil
And finally after some more tries, the vm crashed
(crash.dmp attached).
If this only happens on windows, what else would be an option to start with
contributing for pharo 7 ?
>
>
> Am 28.06.2017 5:26 nachm. schrieb "Pavel Krivanek" <
> pavel.krivanek(a)gmail.com>:
>
>
>
> 2017-06-28 17:06 GMT+02:00 Clément Bera <bera.clement(a)gmail.com>:
>
>> Hi all,
>>
>> Just to be clear, in Pharo 7, if I want to get some code integrated:
>> - I *have to* use the pull request process described by Pavel
>> OR
>> - I *can* use the pull request process, but I can also use the old slice
>> monticello process
>> ?
>>
>> What is the answer to the first question now, and what will be the answer
>> of this question in 6 months from now ?
>>
>
> You should use the pull request process.
>
> It is possible to create a standard slice BUT it must be done from Pharo 6
> and then sent into Pharo60Inbox. And then you need to wait until somebody
> converts this slice to pull request. That means that it will be harder and
> harder to contribute this way because the code-base is moving.
>
> No slice will be integrated into Pharo 7 with the old process directly.
>
> Cheers,
> -- Pavel
>
>
>
>>
>> Thanks
>>
>>
>> On Wed, Jun 28, 2017 at 3:42 PM, Ben Coman <btc(a)openinworld.com> wrote:
>>
>>>
>>>
>>> On Wed, Jun 28, 2017 at 3:46 PM, Juraj Kubelka <juraj.kubelka(a)icloud.com
>>> > wrote:
>>>
>>>>
>>>> El 28-06-2017, a las 02:57, Ben Coman <btc(a)openinworld.com> escribió:
>>>>
>>>>
>>>>
>>>> On Tue, Jun 27, 2017 at 10:35 PM, Pavel Krivanek <
>>>> pavel.krivanek(a)gmail.com> wrote:
>>>>
>>>>>
>>>>>
>>>>> 2017-06-27 16:17 GMT+02:00 Serge Stinckwich <
>>>>> serge.stinckwich(a)gmail.com>:
>>>>>
>>>>>> On Tue, Jun 27, 2017 at 3:10 PM, Pavel Krivanek
>>>>>> <pavel.krivanek(a)gmail.com> wrote:
>>>>>> >
>>>>>> >
>>>>>> > 2017-06-27 15:57 GMT+02:00 Serge Stinckwich <
>>>>>> serge.stinckwich(a)gmail.com>:
>>>>>> >>
>>>>>> >> On Mon, Jun 26, 2017 at 12:14 PM, Pavel Krivanek
>>>>>> >> <pavel.krivanek(a)gmail.com> wrote:
>>>>>> >> > Hi,
>>>>>> >> >
>>>>>> >> > this mail describes how to start to send pull requests to Pharo
>>>>>> 7 Github
>>>>>> >> > repository from Pharo 7.
>>>>>> >>
>>>>>> >> Thank you for the great explanation Pavel.
>>>>>> >>
>>>>>> >> > Preparations
>>>>>> >> > =====================
>>>>>> >> >
>>>>>> >> > - you need to have a Github account and set SSH keys. See
>>>>>> >> > https://help.github.com/articles/connecting-to-github-with-ssh/
>>>>>> >> > - create own pharo-project/pharo repository fork. Go to
>>>>>> >> > https://github.com/pharo-project/pharo, click on "Fork" button
>>>>>> and
>>>>>> >> > follow
>>>>>> >> > the instructions
>>>>>> >>
>>>>>> >> [ ... ]
>>>>>> >>
>>>>>> >> > Issue processing
>>>>>> >> > =====================
>>>>>> >> >
>>>>>> >> > - create new case on FogBugz to get the issue number
>>>>>> >> > - open Iceberg and from the context menu on the 'pharo'
>>>>>> repository do:
>>>>>> >> > Pharo
>>>>>> >> > - Create new branch from FogBugz issue, enter the issue ID and
>>>>>> it will
>>>>>> >> > fill
>>>>>> >> > the full branch name for you
>>>>>> >> > - create your changes (you can do it before the creation of the
>>>>>> branch
>>>>>> >> > too)
>>>>>> >> > - commit and push your changes in Iceberg, this way you will
>>>>>> commit your
>>>>>> >> > branch to your fork repository. Remember that the Iceberg commit
>>>>>> window
>>>>>> >> > has
>>>>>> >> > two buttons, one for local commit, the second for commit with
>>>>>> immediate
>>>>>> >> > push. They can be very long because they contain the full branch
>>>>>> (issue)
>>>>>> >> > name
>>>>>> >> > - in Iceberg in the 'pharo' repository context menu do: Pharo -
>>>>>> Create
>>>>>> >> > pull
>>>>>> >> > request, fill your
>>>>>> >> > - fill your Github credentials
>>>>>> >> > - leave the PR title, comment is not required, check the pull
>>>>>> request
>>>>>> >> > head
>>>>>> >> > and base. The base MUST be pharo-project/pharo development.
>>>>>> Create the
>>>>>> >> > pull
>>>>>> >> > requests
>>>>>> >> > - go to https://github.com/pharo-project/pharo/pulls, check
>>>>>> your pull
>>>>>> >> > requests and put URL of it into the issue record on FogBugz (as a
>>>>>> >> > comment).
>>>>>> >> > Resolve the issue as Fix review needed
>>>>>> >>
>>>>>> >> It means, there is no PR without a corresponding FogBugz issue ?
>>>>>> >
>>>>>> >
>>>>>> > Yes, at least for code changes we would like to keep this relation.
>>>>>> If it is
>>>>>> > a really trivial change in readme or something like that, we can
>>>>>> accept no
>>>>>> > related issue record.
>>>>>> > Please prefer to comment the issues instead of PRs directly to have
>>>>>> all
>>>>>> > information at one place.
>>>>>>
>>>>>> Thank you Pavel for the explanation.
>>>>>>
>>>>>> Maybe in the future, it will make sense to put everything in the PR
>>>>>> and use github issues.
>>>>>> You will use CI travis builds for all PR ?
>>>>>>
>>>>>
>>>>> For now we will use FogBugz because it has a lot of nice features and
>>>>> good API. Maybe we will switch it in future but now we should not change
>>>>> too many things at once :-)
>>>>> For several reasons we now prefer to use own infrastructure for
>>>>> checking of PRs (mainly because of MacOS issues on Travis). But again, it
>>>>> can be changed in future.
>>>>>
>>>>>
>>>> It would be interesting to see how this might fit in with our
>>>> workflow...
>>>> https://blog.fogcreek.com/fogbugz-github-integration/
>>>>
>>>>
>>>>
>>>> What is the benefit of the integration? I do not understand it from the
>>>> given link.
>>>>
>>>>
>>> When you submit a PR on github, Fogbugz is automatically updated with a
>>> link to the PR.
>>> Presumably this makes it easier for people reviewing cases in Fogbugz to
>>> identify the slice to test.
>>> This is a better link...
>>> https://blog.fogcreek.com/improved-github-integration-automa
>>> tically-create-bug-events-with-commits/
>>>
>>> cheers -ben
>>>
>>
>>
>
>
>
July 3, 2017
Re: [Pharo-dev] Reflecting on data (literal) object syntax
by Torsten Bergmann
Hi Christian,
just to avoid confusions: What was released with MIT license now:
a) the Values code
b) the pdf4smalltalk code
c) or both
and where can one find the latest release in case interested people want to start
a port to Pharo?
Thanks in advance for any clarification!
Bye
Torsten
Gesendet:Â Montag, 03. Juli 2017 um 18:54 Uhr
Von:Â "Ben Coman" <btc(a)openinworld.com>
An:Â "Pharo Development List" <pharo-dev(a)lists.pharo.org>
Betreff:Â Re: [Pharo-dev] Reflecting on data (literal) object syntax
Thanks Christian for the open release of pdf4smalltalk. Sorry I aborted the two times I started to port it to Pharo. The task of dealing with both file format and namespace differences to synchronise with VW was too big for me. Now with Iceberg, if VisualWorks might work with git that would knock down one barrier and I might have another go.
Â
On Mon, Jul 3, 2017 at 5:45 PM, Christian Haider <christian.haider@smalltalked-visuals.com[mailto:christian.haider@smalltalked-visuals.com]> wrote:
I did
Â
Von: Pharo-dev [mailto:pharo-dev-bounces@lists.pharo.org[mailto:pharo-dev-bounces@lists.pharo.org]] Im Auftrag von Serge Stinckwich
Gesendet: Montag, 3. Juli 2017 11:40
An: Pharo Development List <pharo-dev@lists.pharo.org[mailto:pharo-dev@lists.pharo.org]>
Betreff: Re: [Pharo-dev] Reflecting on data (literal) object syntax
Â
Â
Hi Christian,
Â
interesting ! Maybe you can release your software with an MIT licence ?
Â
Regards,
Â
On Mon, Jul 3, 2017 at 10:06 AM, Christian Haider <christian.haider@smalltalked-visuals.com[mailto:christian.haider@smalltalked-visuals.com]> wrote:
I solved this with Values[1] for VW and I am very happy with it (using it intensively/routinely).
Your example would look like:
Â
(PointCollection points: (Array
               with: (Point x: 10 y: 20)
               with: (Point x: 5 y: 8)
))
Â
And I remember you saying pdf4smalltalk relied heavily on this, so having Values integrated (if it was broadly useful) would also be a minor step in porting pdf4smalltalk to Pharo.Â
Â
cheers -ben
Â
Â
As you see, it is the same except that lots of noise is gone.
Drawbacks: only literal objects (like Values) are allowed; i.e. no cyclic structures (same with JSON etc.)
and the order of arguments is fixed unlike JSON (but you can add constructors for every permutation J).
Â
I think this is very clear and direct (no magic from parsers etc.). I like it most for configurations (see everything at a glance) and interface data.
Â
Best,
               Christian
Â
[1] https://wiki.pdftalk.de/doku.php?id=complexvalues[https://wiki.pdftalk.de/d…
Â
Von: Pharo-dev [mailto:pharo-dev-bounces@lists.pharo.org[mailto:pharo-dev-bounces@lists.pharo.org]] Im Auftrag von Norbert Hartl
Gesendet: Montag, 3. Juli 2017 10:28
An: Pharo Dev <pharo-dev@lists.pharo.org[mailto:pharo-dev@lists.pharo.org]>
Betreff: Re: [Pharo-dev] Reflecting on data (literal) object syntax
Â
Eliot,
Â
Am 01.07.2017 um 20:22 schrieb Eliot Miranda <eliot.miranda@gmail.com[mailto:eliot.miranda@gmail.com]>:
Â
Hi Norbert,
Â
On Jul 1, 2017, at 7:36 AM, Norbert Hartl <norbert@hartl.name[mailto:norbert@hartl.name]> wrote:
Â
Am 30.06.2017 um 21:14 schrieb Stephane Ducasse <stepharo.self@gmail.com[mailto:stepharo.self@gmail.com]>:
But what is DataFrame?
the new collection done by alesnedr from Lviv. It is really nice but
does not solve the problem of the compact syntax.
Â
STON fromString: 'Point[10,20]'
Same goes for JSON.
Â
We were brainstorming with marcus and we could have a first nice extension:
{ 'x' -> 10 .'y' -> 20 } asObjectOf: #Point.
10@20
Now in addition I think that there is a value in having an object
literal syntax.
I pasted the old mail of igor on object literals because I like the
idea since it does not add any change in the parser.
Do you remember what were the problem raised by this solution (beside
the fact that it had too many # and the order was like in ston not
explicit).
I would love to have another pass on the idea of Igor.
What I don't like about it is that the object literal exposes the internal implementation of the object. Everything is based on index. So it could suffer the same problem as fuel. When you don't have the exact same code the deserialization fails.
Indeed this is why
{ 'x' -> 10 .'y' -> 20 } asObjectOf: #Point.
could be more robust.
We could extend the object literal syntax to use association for non
collection.
I think it is more robust and more explicit. I do not know what are the semantics of detecting something as #Point being a class name. Is it then forbidden to use symbols with uppercase letters? I think something like
{ #x -> 10 . #y -> 20} asObjectOf: #Point
is handling the format with implicit knowledge of type. While the explicit version would be
{ #Point -> { #x -> 10 . #y -> 20}} asObject
And then nested objects are as easy as
{#PointCollection -> {Â
  #points -> { {#Point -> { #x -> 10 . #y -> 20} }.
                {#Point -> { #x -> 5 . #y -> 8} } } }  asObject
The -> messages are just noise and add additional processing for nothing. This is just as effective:
{ #Point. { #x. 10 . #y. 20}} asObject
{#PointCollection. { Â Â #points. { {#Point. { #x. 10 . #y. 20} }.
              {#Point. { #x. 5 . #y. 8} } } }  asObject
So an object is a pair of a class name and an array of slot specifier pairs, and a slot specifier is a pair of a slot band and a value. And of course that means that many object specs can be literal, which is useful for storing in pragmas etc:
   #(PointCollection
       (points ((Point (x 10 y 20))
                     ((Point (x 5 y 8))))  asObject
Agreed. My first impression was it should be something like S-expression which your example is. I was misled by the idea it should be closer to the programming syntax. But a parser does not care if implemented properly, that's right. I like the compactness of that format but still find it a bit hard to read if there is only pairs. As this object literal syntax is meant to be written in code it is important that it reads well even if there are noisy characters.Â
would give a PointCollection of two point objects. My future wish would be that there is an object literal parser that takes all of the information from the format. And then a object literal parser that is aware of slot information. Meaning that the type information can be gathered from the object class instead having it to write in the format. In the PointCollection the slot for points would have the type information #Point attached. The format goes then to
{ #points -> {
  { #x -> 10 . #y -> 20 }.
      { #x -> 5 . #y -> 8 } }
which would then the equivalent to something like JSON
{ "points" : [
    { "x" : 10, "y" : 20 },
    { "x" : 5, "y" : 8 } ] }
What I don't know is how to solve the difference between a dictionary and an collection of associations.
That's incidental to the format, internal to the parser. If the parser chooses to build a dictionary as it parses so be it. The point is that the output is as you specify; a tree of objects.
The thing to think about is how to introduce labels so that sub objects can be shared in the graph, the naïve deepCopy vs deepCopyUsing: issue.
Â
I'm not sure this is necessary. It should be a format to easily instantiate a small tree of objects. Making it build a graph instead of a tree makes everything much more complicated. Either we decide that STON can do the full set and in that case it is probably less valuable to have a simple syntax to write in code. Or we need to break pairs rule. In that case an object definition can have an optional third argument which would be the label for the object. The draback is that the label needs to be before the array of slots
Â
{ :v1 #ValueHolder { 'contents' . { ValueHolder . { 'contents' . @v1 }}}}Â
Â
Or something like this. It would be in theory closer to STON using the @ reference. The difference is that STON has indexed object access and that variant would make it based on labels.Or something like this.
Â
Norbert
Â
Â
Norbert
Â
As a dictionary is both, an array of associations and a key-value store, it works perfectly there. But for other objects I have doubts. Especially is in a lot of contexts you need to have a mapping of internal state to external representation. It can be applied afterwards but I'm not sure that can work all the time.
Yes after we should focus on the frequent cases. And may be having a
literal syntax for dictionary would be good enough.
I will do another version of igor's proposal with associations to see
how it feels.
Â
my 2 cents,
Norbert
Â
Stef
---------- Forwarded message ----------
From: Igor Stasenko <siguctua@gmail.com[mailto:siguctua@gmail.com]>
Date: Fri, Oct 19, 2012 at 1:09 PM
Subject: [Pharo-project] Yet another Notation format: Object literals
To: Pharo Development <Pharo-project@lists.gforge.inria.fr[mailto:Pharo-project@lists.gforge.inria.fr]>
Hi,
as i promised before, here the simple smalltalk-based literal format.
It based on smalltalk syntax, and so, unlike JSON, it doesn't needs to
have separate parser (a normal smalltalk parser used for that).
The idea is quite simple:
you can tell any object to represent itself as an 'object literal' ,
for example:
(1@3) asObjectLiteral
--> Â #(#Point 1 3)
{ 1@2.  3@4. true. false . nil  } asObjectLiteral
-> #(#Array #(#Point 1 2) #(#Point 3 4) true false nil)
(Dictionary newFromPairs: { 1->#(1 2 3) . 'foo' -> 'bar' }) asObjectLiteral
->
#(#Dictionary 1 #(#Array 1 2 3) 'foo' 'bar')
Next thing, you can 'pretty-print' it (kinda):
#(#Dictionary 1 #(#Array 1 2 3) 'foo' 'bar') printObjectLiteral
'#(#Dictionary
    1
    (#Array 1 2 3)
    ''foo'' ''bar'')'
and sure thing, you can do reverse conversion:
'#(#Dictionary
    1
    (#Array 1 2 3)
    ''foo'' ''bar'')'  parseAsObjectLiteral
a Dictionary('foo'->'bar' 1->#(1 2 3) )
Initially, i thought that it could be generic (by implementing default
Object>>#asObjectLiteral),
but then after discussing it with others, we decided to leave
Object>>#asObjectLiteral to be a subclass responsibility.
So, potentially the format allows to represent any object(s) as
literals, except from circular referencing objects, of course.
The implementation is fairly simple, as you may guess and contains no
new classes, but just extension methods here and there.
Take it with grain and salt, since it is just a small proof of
concept. (And if doing it for real it may need some changes etc).
Since i am far from areas right now, where it can be used, i don't
want to pursue it further or advocate if this is the right way to do
things.
Neither i having a public repository for this project..
So, if there anyone who willing to pick it up and pursue the idea
further, please feel free to do so and make a public repository for
project.
Â
Â
Â
--
Serge Stinckwich
UCN & UMI UMMISCO 209 (IRD/UPMC)
Every DSL ends up being Smalltalk
http://www.doesnotunderstand.org/[http://www.doesnotunderstand.org/]
July 3, 2017
Re: [Pharo-dev] Recommended production VM on latest macOS Sierra?
by Esteban Lorenzano
Hi,
> On 3 Jul 2017, at 20:08, Bernhard Pieber <bernhard(a)pieber.com> wrote:
>
> Hi,
>
> What VM would you recommend for a production app on macOS Sierra?
> - Pharo 6, right?
yes
> - I assume 32-bit because 64-bit is still experimental, right?
not particularly, you can download it and use it.
some tests fails but people is already using it (iceberg will not work, but AFAIK, is the only thing that does not works).
> - The one I get with âcurl get.pharo.org | bashâ has a reproducible crash when typing (https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/141) So it canât be the recommended one, right?
nevertheless is the current recommended one, and that bug is annoying us all :)
but we hope to be able to fix it eventually, of course :)
cheers!
Esteban
>
> I must admit I am quite confused.
>
> Cheers,
> Bernhard
July 3, 2017
Recommended production VM on latest macOS Sierra?
by Bernhard Pieber
Hi,
What VM would you recommend for a production app on macOS Sierra?
- Pharo 6, right?
- I assume 32-bit because 64-bit is still experimental, right?
- The one I get with âcurl get.pharo.org | bashâ has a reproducible crash when typing (https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/141) So it canât be the recommended one, right?
I must admit I am quite confused.
Cheers,
Bernhard
July 3, 2017
Re: [Pharo-dev] Reflecting on data (literal) object syntax
by Ben Coman
Thanks Christian for the open release of pdf4smalltalk. Sorry I aborted
the two times I started to port it to Pharo. The task of dealing with both
file format and namespace differences to synchronise with VW was too big
for me. Now with Iceberg, if VisualWorks might work with git that would
knock down one barrier and I might have another go.
On Mon, Jul 3, 2017 at 5:45 PM, Christian Haider <
christian.haider(a)smalltalked-visuals.com> wrote:
> I did
>
>
>
> *Von:* Pharo-dev [mailto:pharo-dev-bounces@lists.pharo.org] *Im Auftrag
> von *Serge Stinckwich
> *Gesendet:* Montag, 3. Juli 2017 11:40
> *An:* Pharo Development List <pharo-dev(a)lists.pharo.org>
>
> *Betreff:* Re: [Pharo-dev] Reflecting on data (literal) object syntax
>
>
>
> Hi Christian,
>
>
>
> interesting ! Maybe you can release your software with an MIT licence ?
>
>
>
> Regards,
>
>
>
> On Mon, Jul 3, 2017 at 10:06 AM, Christian Haider <
> christian.haider(a)smalltalked-visuals.com> wrote:
>
> I solved this with Values[1] for VW and I am very happy with it (using it
> intensively/routinely).
>
> Your example would look like:
>
>
>
> (PointCollection points: (Array
>
> with: (Point x: 10 y: 20)
>
> with: (Point x: 5 y: 8)
>
> ))
>
>
And I remember you saying pdf4smalltalk relied heavily on this, so having
Values integrated (if it was broadly useful) would also be a minor step in
porting pdf4smalltalk to Pharo.
cheers -ben
>
>
> As you see, it is the same except that lots of noise is gone.
>
> Drawbacks: only literal objects (like Values) are allowed; i.e. no cyclic
> structures (same with JSON etc.)
>
> and the order of arguments is fixed unlike JSON (but you can add
> constructors for every permutation J).
>
>
>
> I think this is very clear and direct (no magic from parsers etc.). I like
> it most for configurations (see everything at a glance) and interface data.
>
>
>
> Best,
>
> Christian
>
>
>
> [1] https://wiki.pdftalk.de/doku.php?id=complexvalues
>
>
>
> *Von:* Pharo-dev [mailto:pharo-dev-bounces@lists.pharo.org] *Im Auftrag
> von *Norbert Hartl
> *Gesendet:* Montag, 3. Juli 2017 10:28
> *An:* Pharo Dev <pharo-dev(a)lists.pharo.org>
> *Betreff:* Re: [Pharo-dev] Reflecting on data (literal) object syntax
>
>
>
> Eliot,
>
>
>
> Am 01.07.2017 um 20:22 schrieb Eliot Miranda <eliot.miranda(a)gmail.com>:
>
>
>
> Hi Norbert,
>
>
> On Jul 1, 2017, at 7:36 AM, Norbert Hartl <norbert(a)hartl.name> wrote:
>
>
> Am 30.06.2017 um 21:14 schrieb Stephane Ducasse <stepharo.self(a)gmail.com>:
>
> But what is DataFrame?
>
>
> the new collection done by alesnedr from Lviv. It is really nice but
> does not solve the problem of the compact syntax.
>
>
> STON fromString: 'Point[10,20]'
>
> Same goes for JSON.
>
> We were brainstorming with marcus and we could have a first nice extension:
>
> { 'x' -> 10 .'y' -> 20 } asObjectOf: #Point.
>
> 10@20
>
>
> Now in addition I think that there is a value in having an object
> literal syntax.
>
> I pasted the old mail of igor on object literals because I like the
> idea since it does not add any change in the parser.
> Do you remember what were the problem raised by this solution (beside
> the fact that it had too many # and the order was like in ston not
> explicit).
>
> I would love to have another pass on the idea of Igor.
>
>
> What I don't like about it is that the object literal exposes the internal
> implementation of the object. Everything is based on index. So it could
> suffer the same problem as fuel. When you don't have the exact same code
> the deserialization fails.
>
>
> Indeed this is why
> { 'x' -> 10 .'y' -> 20 } asObjectOf: #Point.
> could be more robust.
> We could extend the object literal syntax to use association for non
> collection.
>
> I think it is more robust and more explicit. I do not know what are the
> semantics of detecting something as #Point being a class name. Is it then
> forbidden to use symbols with uppercase letters? I think something like
>
> { #x -> 10 . #y -> 20} asObjectOf: #Point
>
> is handling the format with implicit knowledge of type. While the explicit
> version would be
>
> { #Point -> { #x -> 10 . #y -> 20}} asObject
>
> And then nested objects are as easy as
>
> {#PointCollection -> {
> #points -> { {#Point -> { #x -> 10 . #y -> 20} }.
> {#Point -> { #x -> 5 . #y -> 8} } } } asObject
>
>
> The -> messages are just noise and add additional processing for nothing.
> This is just as effective:
>
> { #Point. { #x. 10 . #y. 20}} asObject
>
> {#PointCollection. { #points. { {#Point. { #x. 10 . #y. 20} }.
> {#Point. { #x. 5 . #y. 8} } } } asObject
>
> So an object is a pair of a class name and an array of slot specifier
> pairs, and a slot specifier is a pair of a slot band and a value. And of
> course that means that many object specs can be literal, which is useful
> for storing in pragmas etc:
>
> #(PointCollection
> (points ((Point (x 10 y 20))
> ((Point (x 5 y 8)))) asObject
>
> Agreed. My first impression was it should be something like S-expression
> which your example is. I was misled by the idea it should be closer to the
> programming syntax. But a parser does not care if implemented properly,
> that's right. I like the compactness of that format but still find it a bit
> hard to read if there is only pairs. As this object literal syntax is meant
> to be written in code it is important that it reads well even if there are
> noisy characters.
>
>
> would give a PointCollection of two point objects. My future wish would be
> that there is an object literal parser that takes all of the information
> from the format. And then a object literal parser that is aware of slot
> information. Meaning that the type information can be gathered from the
> object class instead having it to write in the format. In the
> PointCollection the slot for points would have the type information #Point
> attached. The format goes then to
>
> { #points -> {
> { #x -> 10 . #y -> 20 }.
> { #x -> 5 . #y -> 8 } }
>
> which would then the equivalent to something like JSON
>
> { "points" : [
> { "x" : 10, "y" : 20 },
> { "x" : 5, "y" : 8 } ] }
>
> What I don't know is how to solve the difference between a dictionary and
> an collection of associations.
>
>
> That's incidental to the format, internal to the parser. If the parser
> chooses to build a dictionary as it parses so be it. The point is that the
> output is as you specify; a tree of objects.
>
> The thing to think about is how to introduce labels so that sub objects
> can be shared in the graph, the naïve deepCopy vs deepCopyUsing: issue.
>
>
>
> I'm not sure this is necessary. It should be a format to easily
> instantiate a small tree of objects. Making it build a graph instead of a
> tree makes everything much more complicated. Either we decide that STON can
> do the full set and in that case it is probably less valuable to have a
> simple syntax to write in code. Or we need to break pairs rule. In that
> case an object definition can have an optional third argument which would
> be the label for the object. The draback is that the label needs to be
> before the array of slots
>
>
>
> { :v1 #ValueHolder { 'contents' . { ValueHolder . { 'contents' . @v1 }}}}
>
>
>
> Or something like this. It would be in theory closer to STON using the @
> reference. The difference is that STON has indexed object access and that
> variant would make it based on labels.Or something like this.
>
>
>
> Norbert
>
>
>
>
>
>
> Norbert
>
>
>
> As a dictionary is both, an array of associations and a key-value store,
> it works perfectly there. But for other objects I have doubts. Especially
> is in a lot of contexts you need to have a mapping of internal state to
> external representation. It can be applied afterwards but I'm not sure that
> can work all the time.
>
>
> Yes after we should focus on the frequent cases. And may be having a
> literal syntax for dictionary would be good enough.
>
> I will do another version of igor's proposal with associations to see
> how it feels.
>
>
> my 2 cents,
>
> Norbert
>
>
> Stef
>
>
>
>
> ---------- Forwarded message ----------
> From: Igor Stasenko <siguctua(a)gmail.com>
> Date: Fri, Oct 19, 2012 at 1:09 PM
> Subject: [Pharo-project] Yet another Notation format: Object literals
> To: Pharo Development <Pharo-project(a)lists.gforge.inria.fr>
>
>
> Hi,
> as i promised before, here the simple smalltalk-based literal format.
> It based on smalltalk syntax, and so, unlike JSON, it doesn't needs to
> have separate parser (a normal smalltalk parser used for that).
>
> The idea is quite simple:
> you can tell any object to represent itself as an 'object literal' ,
> for example:
>
> (1@3) asObjectLiteral
> --> #(#Point 1 3)
>
> { 1@2. 3@4. true. false . nil } asObjectLiteral
>
> -> #(#Array #(#Point 1 2) #(#Point 3 4) true false nil)
>
> (Dictionary newFromPairs: { 1->#(1 2 3) . 'foo' -> 'bar' }) asObjectLiteral
> ->
> #(#Dictionary 1 #(#Array 1 2 3) 'foo' 'bar')
>
> Next thing, you can 'pretty-print' it (kinda):
>
> #(#Dictionary 1 #(#Array 1 2 3) 'foo' 'bar') printObjectLiteral
>
> '#(#Dictionary
> 1
> (#Array 1 2 3)
> ''foo'' ''bar'')'
>
>
> and sure thing, you can do reverse conversion:
>
> '#(#Dictionary
> 1
> (#Array 1 2 3)
> ''foo'' ''bar'')' parseAsObjectLiteral
>
> a Dictionary('foo'->'bar' 1->#(1 2 3) )
>
> Initially, i thought that it could be generic (by implementing default
> Object>>#asObjectLiteral),
> but then after discussing it with others, we decided to leave
>
> Object>>#asObjectLiteral to be a subclass responsibility.
> So, potentially the format allows to represent any object(s) as
> literals, except from circular referencing objects, of course.
>
> The implementation is fairly simple, as you may guess and contains no
> new classes, but just extension methods here and there.
>
> Take it with grain and salt, since it is just a small proof of
> concept. (And if doing it for real it may need some changes etc).
> Since i am far from areas right now, where it can be used, i don't
> want to pursue it further or advocate if this is the right way to do
> things.
> Neither i having a public repository for this project..
>
> So, if there anyone who willing to pick it up and pursue the idea
> further, please feel free to do so and make a public repository for
> project.
>
>
>
>
>
>
>
> --
>
> Serge Stinckwich
> UCN & UMI UMMISCO 209 (IRD/UPMC)
> Every DSL ends up being Smalltalk
> http://www.doesnotunderstand.org/
>
July 3, 2017
Re: [Pharo-dev] Esteban's ChangeLog week of 26 June 2017
by Ben Coman
On Mon, Jul 3, 2017 at 2:00 PM, <estebanlm(a)gmail.com> wrote:
> Hello!
>
> This is my weekly ChangeLog, from 26 June 2017 to 2 July 2017.
> You can see it in a better format by going here:
> http://log.smallworks.eu/web/search?from=26/6/2017&to=2/7/2017
>
> ChangeLog
> =========
>
> 29 June 2017:
> -------------
>
> * ... and I spent some time figuring out why windows users have a
> persistent error about access files.
>
> We should always remember the windows path limitations (256) :)
>
> Now, the workaround for this is to execute this in command line:
>
> ----
> git config --system core.longpaths true
> ----
>
> but of course, this is just a workaround because people using Iceberg
> could not hava installed a
> command line git client. I will need to check in the future this :(
>
Nice pickup. I notice this command creates the file /etc/gitconfig like
this...
[core]
longpaths = true
and instead using --local update
$ cp .git/config /tmp/oldconfig
$ git config --local core.longpaths true
$ diff .git/config /tmp/oldconfig
6d5
< longpaths = true
Sorry I don't have time to test further, but if --local has the same
positive effect per repo as --global,
could Pharo modify the config text file directly?
>
> * I spent some time trying to get [Iceberg version dev-0.5](
> https://github.com/pharo-vcs/iceberg/tree/dev-0.5)
> to load properly (yesterday's script is not working).
>
> The reason is that +Metacello+ fails to upgrade packages from a
> baseline. And there is no way (at least
> that I found) to force the upload.
>
> So this is the updated script to test dev-0.5:
>
> 1. Download latest vm and image.
>
> ----
> wget -O- get.pharo.org/64/70+vmLatest | bash
> wget -O- get.pharo.org/64/70+vmTLatest | bash # for linux systems
> ----
>
> 2. Execute this on your image
>
> ----
> #('Iceberg-UI' 'Iceberg-Plugin' 'Iceberg-Metacello-Integration'
> 'Iceberg-Libgit' 'Iceberg' 'BaselineOfIceberg'
> 'LibGit-Core' 'BaselineOfLibGit')
> do: [ :each | each asPackage removeFromSystem ].
>
> Metacello new
> baseline: 'Iceberg';
> repository: 'github://pharo-vcs/iceberg:dev-0.5';
> load.
> ----
>
> This should actually remove old iceberg version then install new one.
>
>
> 28 June 2017:
> -------------
>
> * Ok, I get the VM to compile correctly with the new libgit2 version,
> and now +latest vm+ comes with
> +libgit 0.25.1+ for both 32 and 64 bits versions.
>
> I also made some minor fixes to +iceberg dev-0.5+ and it should be
> ready to test and release. This
> version incorporates some important changes that will allow us to work
> with it to make changes to
> Pharo itself (and that will be noticed on big projects):
>
> * it has cherry-pick.
> * it speeds up sincronization by introducing more precise comparisons
> instead making a "full scan"
>
sincronization = something naughty you do at regular intervals ?? %^)
> * it keeps in sync branch on disk and branch on iceberg (before it was
> keeping them separately and it was very confusing)
>
> To test it, you can execute:
>
> ----
> wget -O- get.files.org/64/70+vmLatest | bash
> wget -O- get.files.org/64/70+vmTLatest | bash # on linux systems
> ----
>
> then you will need to load version +dev-0.5+ :
>
> ----
> Metacello new
> baseline: 'Iceberg';
> repository: 'github://pharo-vcs/iceberg:dev-0.5';
> load.
> "And you will need to execute this... I will need to update the
> baseline with this,
> now that I think :)"
> LGitExternalStructure allSubclassesDo: #compileFields.
> ----
>
> * I finished ensuring [iceberg](https://github.com/
> pharo-vcs/iceberg/tree/dev-0.5) will work on 64 bits.
>
> Now, I needed to make some fixes for UFFI, which I put in [case:
> 20198](https://pharo.fogbugz.com/f/cases/20198) (it is imperative to
> include
> this to be able to backport 0.5 into Pharo 6.0). Also, I will need to
> promote a new VM as stable.
>
> I'm not sure I want to backport this into Pharo 6. I know I promised
> but complications are... more than
> benefits, I think: You will need a new VM. People will not know that
> and they will download a P6 image
> with the older VM and this will cause problems.
>
> Maybe is better to move all this to P7?
>
>
> cheers!
> Esteban
>
>
July 3, 2017
Re: [Pharo-dev] [Vm-dev] multiple crashes on macOS Sierra
by Bernhard Pieber
Hi,
Using Aliaksei Syrelâs instructions I can reproduce the crash on macOS Sierra Version 10.12.5 using the Pharo 6. I installed it using:
curl get.pharo.org | bash
How can I get the latest VM for Pharo 6?
âcurl get.pharo.org/vmLatest60 | bashâ did not work for me. [1]
Cheer,
Bernhard
[1]
MacBookProRetina:pharo-vm-test bernhard$ curl get.pharo.org/vmLatest60 | bash
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 5696 100 5696 0 0 48223 0 --:--:-- --:--:-- --:--:-- 48271
Downloading the latest pharoVM:
http://files.pharo.org/get-files/60/pharo-mac-latest.zip
[pharo-vm/vm.zip]
End-of-central-directory signature not found. Either this file is not
a zipfile, or it constitutes one disk of a multi-part archive. In the
latter case the central directory and zipfile comment will be found on
the last disk(s) of this archive.
unzip: cannot find zipfile directory in one of pharo-vm/vm.zip or
pharo-vm/vm.zip.zip, and cannot find pharo-vm/vm.zip.ZIP, period.
> Am 01.06.2017 um 23:00 schrieb Tudor Girba <tudor(a)tudorgirba.com>:
>
> Hi,
>
>
>> On Jun 1, 2017, at 7:23 PM, Esteban Lorenzano <estebanlm(a)gmail.com> wrote:
>>
>> What is in bintray now is the same as vm latest :)
>
> Do I understand correctly that:
> curl get.pharo.org/vmLatest60 | bash
>
> will get the VM with the fix?
>
> Doru
>
>
>> On 1 Jun 2017, at 18:30, Nicolas Cellier <nicolas.cellier.aka.nice(a)gmail.com> wrote:
>>
>>> Tobias has commited a fix in cog branch a few days ago.
>>> https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/0f07ffbedcc184391e…
>>> So could you try latest Vm from bintray and report?
>>> https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/0f07ffbedcc184391e…
>>>
>>>
>>> 2017-06-01 16:12 GMT+02:00 Tudor Girba <tudor(a)tudorgirba.com>:
>>> Hi,
>>>
>>> I am not sure what is the status with this issue, but it seems clear that there exists a problem, so I opened an issue to accumulate the different opinions:
>>> https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/141
>>>
>>> Cheers,
>>> Doru
>>>
>>>
>>>
>>>> On May 29, 2017, at 9:53 PM, Eliot Miranda <eliot.miranda(a)gmail.com> wrote:
>>>>
>>>>
>>>> ---------- Forwarded message ----------
>>>> From: Tobias Pape <Das.Linux(a)gmx.de>
>>>> Date: Mon, May 29, 2017 at 12:09 AM
>>>> Subject: Re: [Vm-dev] multiple crashes on macOS Sierra
>>>> To: John McIntosh <johnmci(a)smalltalkconsulting.com>
>>>> Cc: Squeak Virtual Machine Development Discussion <vm-dev(a)lists.squeakfoundation.org>
>>>>
>>>>
>>>>
>>>> Hi John, all
>>>>
>>>>
>>>>> On 28.05.2017, at 22:12, John McIntosh <johnmci(a)smalltalkconsulting.com> wrote:
>>>>>
>>>>> At commit point d0e7bfa0f8d99b856d9ac56372f7dacecdd63106 (5/5/17) Tobias added
>>>>>
>>>>>
>>>>> NSEvent* syntheticEvent = AUTORELEASEOBJ([NSEvent keyEventWithType:(isUp ? NSEventTypeKeyUp : NSEventTypeKeyDown)
>>>>> location:[theEvent locationInWindow]
>>>>> modifierFlags:(isUp ? oldFlags : [theEvent modifierFlags])
>>>>> timestamp:[theEvent timestamp]
>>>>> windowNumber:[theEvent windowNumber]
>>>>> context:nil
>>>>> characters:@""
>>>>> charactersIgnoringModifiers:@""
>>>>> isARepeat:NO
>>>>> keyCode:[theEvent keyCode]]);
>>>>>
>>>>> in sqSqueakOSXOpenGLView.m at - (void)flagsChanged:(NSEvent *)theEvent
>>>>
>>>> That's correct.
>>>>
>>>>>
>>>>> However I believe this is incorrect as the NSEvent class side method is by the old non-arc memory rules implicitly an autoreleased object, so doing the AUTORELEASEOBJ() might cause side effects. https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/…
>>>>>
>>>>> + (NSEvent *)keyEventWithType:(NSEventType)type location:(NSPoint)location modifierFlags:(NSEventModifierFlags)flags timestamp:(NSTimeInterval)time windowNumber:(NSInteger)wNum context:(NSGraphicsContext *)unusedPassNil characters:(NSString *)keys charactersIgnoringModifiers:(NSString *)ukeys isARepeat:(BOOL)flag keyCode:(unsigned short)code;
>>>>
>>>> Well, I have not found a reference to how this relates to autorelease (the Apple docs are becoming increasingly useless these days :()
>>>> I read this https://developer.apple.com/reference/appkit/nsevent/1533943-keyeventwithty…
>>>> and the header /System/Library/Frameworks/AppKit.framework/Headers/NSEvent.h and although autorelase pops up somewhere in the file, it does not somewhere near the declaration.
>>>> I read through the code an found quite a few AUTORELEASEOBJ() around object creation and (apparently wrongly) thought I would need that here.
>>>>
>>>>
>>>> I now understand that I should only autorelease alloc/inited stuff.
>>>>
>>>> So you may be right here.
>>>>
>>>> Fixed in 0f07ffbed
>>>>
>>>> Best regards
>>>> -Tobias
>>>>
>>>>>
>>>>> If Tobias can verify and submit a change we can see if that affects the behaviour we have been observing. Note that I"ve not been able to recreate the problem, but in eyeballing the code this leaps out as suspect.
>>>>
>>>> [snip]
>>>
>>> --
>>> www.tudorgirba.com
>>> www.feenk.com
>>>
>>> "Reasonable is what we are accustomed with."
>>>
>>>
>>>
>
> --
> www.tudorgirba.com
> www.feenk.com
>
> "If you interrupt the barber while he is cutting your hair,
> you will end up with a messy haircut."
July 3, 2017
Re: [Pharo-dev] Pharo Launcher
by Ben Coman
On Mon, Jul 3, 2017 at 6:35 PM, Serge Stinckwich <serge.stinckwich(a)gmail.com
> wrote:
>
>
> On Thu, Jun 29, 2017 at 2:32 PM, Stephane Ducasse <stepharo.self(a)gmail.com
> > wrote:
>
>> Hi
>>
>> where can I find the pharo launcher for the latest version of Pharo?
>>
>>
>
> âI'm still fighting to use Pharo Launcher in Cameroon with very low
> bandwidth ...
> Most of the time I have an error: can't find EOCD position.
> What is the meaning of this error ? a latency problem ?
>
http://forum.world.st/quot-error-can-t-find-EOCD-position-quot-during-updat…
>> My screen shows I'm processing "update-nice.42.mcm"
>> and downloading "kernel-nice.278.mcz"
>> and I get a debugger notify "can't find EOCD position"
>>
>> Known? Or does someone want some debugging data?
>Clean out the MC cache and try again. This error means the zip is
>corrupt.
With very low bandwidth, maybe you want to limit totally clearing the cache.
You might try a script that copies the .mcz to .zip and uses the system
`unzip`
to identify corrupt files.
cheers -ben
July 3, 2017
Re: [Pharo-dev] [ANN] Iceberg 0.5 released
by Norbert Hartl
> Am 03.07.2017 um 14:45 schrieb Esteban Lorenzano <estebanlm(a)gmail.com>:
>
>
>> On 3 Jul 2017, at 13:32, Norbert Hartl <norbert(a)hartl.name <mailto:norbert@hartl.name>> wrote:
>>
>> So it is decided there won't be an official pharo6 supporting iceberg?
>
> not today :)
> I will release Pharo 6.1 with updated iceberg⦠because it requires a new VM and I donât want to break current downloaded version.
> Problem is: once we jump to 6.1, 6.0 will not be maintained anymore⦠not cool, maybe. But inevitable due the amount of effort we can put there.
>
Ok, understood! And glad we will have 6.1. Great!
Norbert
> Esteban
>
>>
>> Norbert
>>
>>> Am 03.07.2017 um 13:28 schrieb Esteban Lorenzano <estebanlm(a)gmail.com <mailto:estebanlm@gmail.com>>:
>>>
>>>>
>>>> On 3 Jul 2017, at 13:18, Esteban Lorenzano <estebanlm(a)gmail.com <mailto:estebanlm@gmail.com>> wrote:
>>>>
>>>> Hi all,
>>>> Iâm releasing 0.5 version of iceberg.
>>>> This is the changelog:
>>>>
>>>> Major changes:
>>>> ----
>>>> - works on 64bits
>>>> - adds cheery-pick
>>>>
>>>> Other:
>>>> ----
>>>> This version also includes a list of fixes, most important one is this:
>>>>
>>>> - branchs are kept inline with local working copy (so if you change a branch in command line or in another image it will indicate it correctly)
>>>>
>>>> But there are many others, next version will have a full list, I promise :)
>>>>
>>>> Now, to actually use it you will need to accomplish several steps (until I update the image)
>>>>
>>>> 1) You need to download the new stable VM for P7 (it does not matters if you are on P6).
>>>> Zeroconf:
>>>>
>>>> 64bits:
>>>> wget -O- get.pharo.org/64/vm70 <http://get.pharo.org/vm70> | bash
>>>> wget -O- get.pharo.org/ <http://get.pharo.org/vm70>64/ <http://get.pharo.org/vm70>vmT70 <http://get.pharo.org/vm70> | bash #If you are on linux
>>>>
>>>> 32bits:
>>>> wget -O- get.pharo.org/vm70 <http://get.pharo.org/vm70> | bash
>>>> wget -O- get.pharo.org/vmT70 <http://get.pharo.org/vm70> | bash #If you are on linux
>>>>
>>>> then, to update, execute this (sorry, this is like that because we have still an older Metacello version):
>>>>
>>>> #('Iceberg-UI' 'Iceberg-Plugin' 'Iceberg-Metacello-Integration' 'Iceberg-Libgit' 'Iceberg' 'BaselineOfIceberg' 'LibGit-Core' 'BaselineOfLibGitâ)
>>>> do: [ :each | each asPackage removeFromSystem ].
>>>>
>>>> Metacello new
>>>> baseline: 'Iceberg';
>>>> repository: 'github://pharo-vcs/iceberg <github://pharo-vcs/iceberg>';
>>>> load.
>>>
>>> Maybe I was not clear⦠this script works also for P6 (*if * you have the new VM) :)
>>>
>>>>
>>>> cheers!
>>>> Esteban
>>
>
July 3, 2017
Re: [Pharo-dev] The new implementation of current working directory
by Alistair Grant
Hi Rajula,
On Thu, Jun 29, 2017 at 05:42:02AM -0700, Rajula Vineet wrote:
> Hi all,
>
> As I have already been posting about my GSoC work and updates on my blog
> <https://vineetreddy.wordpress.com> and on the mailing list
> <http://forum.world.st/template/NamlServlet.jtp?macro=search_page&node=12947…>
> . In this post, I would like to go in depth of my work on 'the working
> directory' so that I can get valuable feedback and suggestions from
> everyone. This discussion was started on an github PR
> <https://github.com/pharo-project/pharo/pull/96> which was conflicting my
> PR.
It looks like my concerns were unfounded, but many thanks for taking the
trouble to follow up on this.
It would good if you could keep a similar caching strategy to the one I
introduced as the performance gains can be significant (as suggested by
Cyril's comment).
Thanks again,
Alistair
> Firstly, I would like to go through the current implementation of the
> working directory. With this implementation, when you use the
> defaultWorkingDirectory method, the directory in which the running image is
> present in, is returned. This is not a completely good working because when
> you run the image from a different directory like './pharo ../Pharo.image'
> the working directory is the one in which your image resides. But that isn`t
> your actual working directory. Due to this,
>
> 1. Pharo cannot be installed as a normal application in a read-only
> environment.
> 2. Pharo wrongly reads and writes files relative to the 'working directory'.
> 3. It also makes scripting difficult.
>
> In the FogBugz issue here
> <https://pharo.fogbugz.com/f/cases/5723/Default-Working-Directory> , there
> is an example which explains the problem.
>
> Let say the Pharo VM and Image are in the directory "~/Pharo",
> and I wrote a script in "~/Documents/Pharo-scripts" called
> "perfect-numbers.st"
>
> I have 2 possibilities:
>
> cd ~/Pharo && pharo Pharo.image st
> ~/Documents/Pharo-scripts/perfect-numbers.st // works
>
> or
>
> cd ~/Documents/Pharo-scripts && pharo ~/Pharo/Pharo.image st
> perfect-numbers.st // doesn't work...
>
> It doesn't work because when pharo wants to load the file,
> it tries to locate it with: FileSystem disk workingDirectory !!!
> which is NOT the current working directory."
>
> I hope you get the problem.
>
> So for the new implementation <https://github.com/rajula96reddy/pharo-cli>
> with the help of Guille I researched about $PWD and getcwd() for a while and
> wrote a new implementation. This is how it goes
> 1. I have written new methods in OSPlatorm 'getPwdFromFFI' and
> 'getPwdFromFFIwithsize:'. These call the getcwd() function using the UFFI
> 2. And a new method currentWorkingDirectoryPath and
> currentWorkingDirectoryPathWithBufferSize: in OSPlatform which uses the
> above method and gets the working directory.
> 3. To integrate this, I have patched the DiskStore method
> 'defaultWorkingDirectory' to use the new methods in OSPlatform.
>
> I have checked all the sendors of the 'defaultWorkingDirectory' for any
> issue. And I also wrote some unit tests. So, the new implementation is
> working fine. With this, now I am able to get the right working directory.
> The example mentioned above works perfectly.
>
> But, there may be a few cases where it can break interoperability between
> Pharo and other Smalltalk dialects like squeak etc. And the 'pharo-local'
> directory and its methods should also be patched subsequently. In fact,
> these problems can be tackled by running image from its own directory itself
> (which is obvious ;) ) or by using the method imageDirectory in FileLocator
> class explicitly when necessary. But overall a good thing is this is will
> ensure the system will behave as in other languages.
>
> I have completed this implementation and submitted a PR
> <https://github.com/pharo-project/pharo/pull/92> to github. But because of
> some dependency issue, it has not yet been merged. With the help of my
> mentor, I am working on the problem.
>
> Thanks for reading all this. Please give your feedback and comments on this
> new implementation. Your suggestions help me in learning more about the
> project and also about the organization.
>
> Thanks,
> Rajula
>
>
>
> --
> View this message in context: http://forum.world.st/The-new-implementation-of-current-working-directory-t…
> Sent from the Pharo Smalltalk Developers mailing list archive at Nabble.com.
>
July 3, 2017