Pharo-dev
By thread
pharo-dev@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
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
August 2017
- 787 messages
Re: [Pharo-dev] Creating the smallest server runtime footprint
by Guillermo Polito
Yes, you should be able to load an mcz in that image by doing:
(MCDirectoryRepository new directory: 'where-your-mcz-is')
loadVersionFromFileNamed: 'Metacello-GitBasedRepository-Author.1.mcz')
load.
Guille
On Wed, Aug 2, 2017 at 7:57 AM, Pavel Krivanek <pavel.krivanek(a)gmail.com>
wrote:
>
> 2017-08-01 23:13 GMT+02:00 Tim Mackinnon <tim(a)testit.works>:
>
>> Hi Pavel - I tried it again and the problem is do with Metacello
>> dependencies in your baseline.
>>
>> The SUnit baseline doesnât specify any additional dependencies to load
>> (it just loads local packages), whereas my baseline that fails looks like
>> this:
>>
>> baseline: spec
>> <baseline>
>>
>> spec for: #common do: [
>> spec configuration: 'ZTimestamp' with: [
>> spec
>> versionString: #stable;
>> repository: 'http://mc.stfx.eu/Neo' ].
>> spec baseline: 'AWS' with: [
>> spec repository: 'github://newapplesho/aws-sdk-
>> smalltalk:v1.10/pharo-repository' ].
>> spec
>> package: 'Lambda' with: [ spec requires: {'ZTimestamp'. 'AWS'}].
>> ].
>>
>>
>> The âspec configuration: â¦.â Specifications cause the error:
>>
>> 25 UndefinedObject(Object)>>*doesNotUnderstand: #addTo:*
>> 26 MCRepositoryGroup>>addRepository:
>>
>> If I remove those lines from my baseline above (as well the requires:
>> reference to them) I can then successfully load my packages.
>>
>> So is this something the minimal image should support (otherwise how do
>> you load external packages into your image without checking them in
>> locally?) OR is there something simple I can checkin and load locally to
>> return that behaviour? (Personally I think it would make sense to allow
>> remote loading - Iâm guessing Pharo itself as a core has everything it
>> needs - but if you want to do any experimentation on the core and need
>> remote packages, you would hit this too - so it feels a bit limiting).
>>
>
> The dependencies in th baseline are supported but the support for most of
> external repositories (like package Metacello-GitBasedRepository) is loaded
> at the end of bootstrapping process in BaselineOfIDE. We should check/solve
> dependencies and move it into the minimal Pharo. For now you can try to
> load it by yourself or work with already prepared local clones of required
> repositories.
>
> -- Pavel
>
>
>
>
>>
>> Tim
>>
>> On 1 Aug 2017, at 10:06, Pavel Krivanek <pavel.krivanek(a)gmail.com> wrote:
>>
>>
>>
>> 2017-07-31 22:51 GMT+02:00 Tim Mackinnon <tim(a)testit.works>:
>>
>>> I wasnât clear on which image to retry - the https://ci.inria.fr/pharo/
>>> job/Pharo-6.0-Update-Step-3.2-Minimal/lastSuccessfulBuild/ar
>>> tifact/Pharo-minimal-64.zip one still shows as being last updated 7
>>> days ago.
>>>
>>> The https://ci.inria.fr/pharo/view/6.0-SysConf/job/Pharo-6.0
>>> -Step-04-01-ConfigurationOfMinimalPharo/ one gives me a mismatch
>>> error: This interpreter (vers. 68021) cannot read image file (vers. 6521).
>>>
>>> The https://ci.inria.fr/pharo/view/7.0/job/70-Bootstrap-32bi
>>> t-Conversion/lastSuccessfulBuild/artifact/latest-minimal-64.zip one
>>> gives me a walkback when trying to run my install script :
>>>
>>> 25 UndefinedObject(Object)>>*doesNotUnderstand: #addTo:*
>>> 26 MCRepositoryGroup>>addRepository:
>>> 27 createRepository
>>> | repo |
>>> repo := self project createRepository: self.
>>> ^ MCRepositoryGroup default repositories
>>> detect: [ :each | each = repo ]
>>> ifNone: [
>>> MCRepositoryGroup default addRepository: repo.
>>> repo ] in MetacelloRepositorySpec>>createRepository
>>>
>>> I think this is because the image doesnât support Metacello? As in:
>>>
>>> Metacello new
>>> repository: 'filetree://../src';
>>> baseline: 'Lambda';
>>> load.
>>>
>>>
>>> How do you guys load things into the minimal images (I thought you used
>>> Metacello - but maybe you do it some other way?)
>>>
>>> I can use a big 6.1 image fine (as it has Metacello loaded) but Iâd
>>> really like a minimal solution - that can load in libraries like AWS S3, or
>>> XML parsing etc. and it seems like I should be a good customer for kicking
>>> the tires on all of this.
>>>
>>> Tim
>>>
>>>
>> I checked the 64-bit Pharo 7 minimal image and loading of baseline (of
>> SUnit from pharo-project/pharo) works:
>>
>> ./pharo Pharo7.0-minimal-64bit-b1625bf.image eval --save "Metacello new
>> baseline: 'SUnit'; repository: 'filetree://./pharo-core/src'; load."
>>
>> ./pharo Pharo7.0-minimal-64bit-b1625bf.image eval "TestCase suite run"
>>
>> Can you test it too?
>>
>> -- Pavel
>>
>>
>>
>
--
Guille Polito
Research Engineer
French National Center for Scientific Research - *http://www.cnrs.fr*
<http://www.cnrs.fr>
*Web:* *http://guillep.github.io* <http://guillep.github.io>
*Phone: *+33 06 52 70 66 13
Aug. 2, 2017
Re: [Pharo-dev] Creating the smallest server runtime footprint
by Pavel Krivanek
2017-08-01 23:13 GMT+02:00 Tim Mackinnon <tim(a)testit.works>:
> Hi Pavel - I tried it again and the problem is do with Metacello
> dependencies in your baseline.
>
> The SUnit baseline doesnât specify any additional dependencies to load (it
> just loads local packages), whereas my baseline that fails looks like this:
>
> baseline: spec
> <baseline>
>
> spec for: #common do: [
> spec configuration: 'ZTimestamp' with: [
> spec
> versionString: #stable;
> repository: 'http://mc.stfx.eu/Neo' ].
> spec baseline: 'AWS' with: [
> spec repository: 'github://newapplesho/aws-sdk-smalltalk:v1.10/pharo-
> repository' ].
> spec
> package: 'Lambda' with: [ spec requires: {'ZTimestamp'. 'AWS'}].
> ].
>
>
> The âspec configuration: â¦.â Specifications cause the error:
>
> 25 UndefinedObject(Object)>>*doesNotUnderstand: #addTo:*
> 26 MCRepositoryGroup>>addRepository:
>
> If I remove those lines from my baseline above (as well the requires:
> reference to them) I can then successfully load my packages.
>
> So is this something the minimal image should support (otherwise how do
> you load external packages into your image without checking them in
> locally?) OR is there something simple I can checkin and load locally to
> return that behaviour? (Personally I think it would make sense to allow
> remote loading - Iâm guessing Pharo itself as a core has everything it
> needs - but if you want to do any experimentation on the core and need
> remote packages, you would hit this too - so it feels a bit limiting).
>
The dependencies in th baseline are supported but the support for most of
external repositories (like package Metacello-GitBasedRepository) is loaded
at the end of bootstrapping process in BaselineOfIDE. We should check/solve
dependencies and move it into the minimal Pharo. For now you can try to
load it by yourself or work with already prepared local clones of required
repositories.
-- Pavel
>
> Tim
>
> On 1 Aug 2017, at 10:06, Pavel Krivanek <pavel.krivanek(a)gmail.com> wrote:
>
>
>
> 2017-07-31 22:51 GMT+02:00 Tim Mackinnon <tim(a)testit.works>:
>
>> I wasnât clear on which image to retry - the https://ci.inria.fr/pharo/
>> job/Pharo-6.0-Update-Step-3.2-Minimal/lastSuccessfulBuild/ar
>> tifact/Pharo-minimal-64.zip one still shows as being last updated 7 days
>> ago.
>>
>> The https://ci.inria.fr/pharo/view/6.0-SysConf/job/Pharo-6.0
>> -Step-04-01-ConfigurationOfMinimalPharo/ one gives me a mismatch
>> error: This interpreter (vers. 68021) cannot read image file (vers. 6521).
>>
>> The https://ci.inria.fr/pharo/view/7.0/job/70-Bootstrap-32bi
>> t-Conversion/lastSuccessfulBuild/artifact/latest-minimal-64.zip one
>> gives me a walkback when trying to run my install script :
>>
>> 25 UndefinedObject(Object)>>*doesNotUnderstand: #addTo:*
>> 26 MCRepositoryGroup>>addRepository:
>> 27 createRepository
>> | repo |
>> repo := self project createRepository: self.
>> ^ MCRepositoryGroup default repositories
>> detect: [ :each | each = repo ]
>> ifNone: [
>> MCRepositoryGroup default addRepository: repo.
>> repo ] in MetacelloRepositorySpec>>createRepository
>>
>> I think this is because the image doesnât support Metacello? As in:
>>
>> Metacello new
>> repository: 'filetree://../src';
>> baseline: 'Lambda';
>> load.
>>
>>
>> How do you guys load things into the minimal images (I thought you used
>> Metacello - but maybe you do it some other way?)
>>
>> I can use a big 6.1 image fine (as it has Metacello loaded) but Iâd
>> really like a minimal solution - that can load in libraries like AWS S3, or
>> XML parsing etc. and it seems like I should be a good customer for kicking
>> the tires on all of this.
>>
>> Tim
>>
>>
> I checked the 64-bit Pharo 7 minimal image and loading of baseline (of
> SUnit from pharo-project/pharo) works:
>
> ./pharo Pharo7.0-minimal-64bit-b1625bf.image eval --save "Metacello new
> baseline: 'SUnit'; repository: 'filetree://./pharo-core/src'; load."
>
> ./pharo Pharo7.0-minimal-64bit-b1625bf.image eval "TestCase suite run"
>
> Can you test it too?
>
> -- Pavel
>
>
>
Aug. 2, 2017
Re: [Pharo-dev] [IMPORTANT] Following changes in the bootstrapping process
by Guillermo Polito
Hi all,
I think Pablo answered most of the questions. But there is another
important concern: Hermes is not designed to be a general purpose
serializer. So it not in it goals to be extensible or fast. The main goals
behind hermes are:
- to be small (actually smaller than the compiler)
- to have as few dependencies as possible
This is because we want to have it in the first bootstrapped image to have
a small kernel with faster build time, and be able to load the compiler
afterwards using it. Concretely, after bootstrap we use Hermes to load only
four packages (Compiler + 3 dependencies). Once that is done, we can go
back into using the compiler to load the rest.
We did not think about putting it at the level of monticello, that has to
be thought for the future. In any case, moving to git/filetree makes
sharing binary mcz more difficult. Another two points that hermes is not
managing so far to be a more general code loading solution is that it does
not manage source files (it installs methods without source) nor the
reloading/update of code.
>From an implementation/format point of view, Hermes writes something
somehow equivalent to a java .class file but with a package granularity. I
think it may be valuable to nicely document the format. That could allow
other dialects to have their implementation and share hermes files (delta
some runtime compatibility :) ).
Guille
On Tue, Aug 1, 2017 at 11:14 PM, tesonep(a)gmail.com <tesonep(a)gmail.com>
wrote:
> Hi Mariano,
> The definition is not serialized. What is serialized is all the
> information to regenerate the class (eg: superclass name, instance variable
> names, class variables names, share pool names, category, layout class, and
> so on). This information is later used to regenerate the class as it is
> created initially by the class builder and installer. The same happens with
> the methods, they are built up from scratch without using the compiler. The
> bytecode is stored, the literals are serialized and the information in the
> header is serialized, as it has to be rebuilt when install.
>
> The same is applicable to the traits and extension methods.
>
> Basically it can be seen as a class builder / installer, that get all the
> information from the serialized version and not from the text
> representation of the class or the methods.
>
> That's why I said Hermes is so couple with Pharo.
>
> Thanks for clarifying, I am starting to understand where yours doubts came
> from.
>
> Cheers,
> Pablo
>
> On Tue, Aug 1, 2017 at 10:52 PM, Mariano Martinez Peck <
> marianopeck(a)gmail.com> wrote:
>
>>
>>
>> On Tue, Aug 1, 2017 at 5:31 PM, tesonep(a)gmail.com <tesonep(a)gmail.com>
>> wrote:
>>
>>> Hi,
>>> Yes for sure there are objects, and that is very powerful, but
>>> comparing the algorithm of serialization of Hermes with Fuel (I don't
>>> really know Parcels) is not possible. It is like comparing Filetree with
>>> Fuel, The problems they have to take care are completely different.
>>>
>>> Maybe I am not seeing the point.
>>>
>>>
>> Let me add one sentence that may explain Eliot questions... if you
>> serialize the class definition, then it means you would need the compiler.
>> I guess Eliot may be interested in NOT having the compiler at all and
>> instead bring classes directly from binary format (like Fuel / Tanker )
>>
>>
>>
>>
>>> Cheers.
>>>
>>> On Tue, Aug 1, 2017 at 10:25 PM, Eliot Miranda <eliot.miranda(a)gmail.com>
>>> wrote:
>>>
>>>> Hi Pablo,
>>>>
>>>> On Tue, Aug 1, 2017 at 12:36 PM, tesonep(a)gmail.com <tesonep(a)gmail.com>
>>>> wrote:
>>>>
>>>>> Hi again,
>>>>> thanks for the clarification, I haven't understood the question
>>>>> initially, but now I think I can answer it.
>>>>>
>>>>> Hermes is only exporting the classes, not objects. so it does not have
>>>>> to handle complex graphs of objects. Basically it serializes the definition
>>>>> of the classes, traits and methods. Then they are loaded in sequence. The
>>>>> only caring during the generation is to serialize first the superclasses,
>>>>> and then the subclasses. There is no way of serializing objects outside the
>>>>> classes, methods, traits and literals in a method.
>>>>>
>>>>
>>>> Classes, traits, methods, literals *are* a graph of objects :-). The
>>>> Parcel architecture, from which Fuel derived its architecture, was designed
>>>> for loading code in VisualWorks. In fact, last time I looked Parcels were
>>>> used only to store code and not as a general purpose (de)serializer.
>>>>
>>>> So the answer is that is not using Parcels or Fuel architecture because
>>>>> they are intended for different uses.
>>>>>
>>>>
>>>> Well, I don't think that's the reason ;-), but fine. I understand that
>>>> it doesn't use this architecture. Thanks.
>>>>
>>>>
>>>>> Also the format itself has no special design or considerations to be
>>>>> fast to generate or fast to read (as It happens with Fuel)
>>>>>
>>>>> Cheers,
>>>>> Pablo
>>>>>
>>>>> On Tue, Aug 1, 2017 at 9:16 PM, Eliot Miranda <eliot.miranda(a)gmail.com
>>>>> > wrote:
>>>>>
>>>>>> Hi Pablo,
>>>>>>
>>>>>> I understand that Hermes has its own format. My question was
>>>>>> about architecture. The Parcels/Fuel architecture is, AFAIA, the best
>>>>>> architecture for binary storage because it is virtual, is fast to load and
>>>>>> cleanly separates loading from initialization. What do I mean?
>>>>>>
>>>>>> - concrete formats like ImageSegment are tied to internal
>>>>>> representations in the VM and do are difficult to read in forever FB
>>>>>> systems and very hard to write in foreign systems. So a virtual format
>>>>>> (like BOSS, Fuel, Parcels, etc) is better but unless done well can be slow
>>>>>>
>>>>>> - a first generation system like BOSS is a flattening of a graph
>>>>>> traversal using a simple grammar. Each phrase is either an object
>>>>>> reference (object id) or an object definition (object is followed by type
>>>>>> info and contents, contents being a sequence of phrases. This is slow to
>>>>>> parse (because each phrase must be decoded), and has invalid intermediate
>>>>>> states (e.g. a Set whose contents are not all present, hence whose external
>>>>>> hash may change during loading, etc). A second generation system like
>>>>>> Parcels and Fuel separates objects from references (nodes from arcs) and
>>>>>> batches object creation, grouping all instances of a given class for bulk,
>>>>>> and hence fast, instantiation. Following my the objects are the
>>>>>> references. So loading has three phases:
>>>>>> - instantiate the objects
>>>>>> - connect the graph by filling in object references
>>>>>> - initialize the objects that require it (e.g. rehash sets)
>>>>>>
>>>>>> Consequently the writer must be two pass, the first pass to collect
>>>>>> the objects in the graph and sort them by class, the second to write the
>>>>>> nodes followed by the references
>>>>>>
>>>>>> So let me ask again, does Hermes use the Parcels/Fuel architecture?
>>>>>>
>>>>>> _,,,^..^,,,_ (phone)
>>>>>>
>>>>>> On Aug 1, 2017, at 11:52 AM, "tesonep(a)gmail.com" <tesonep(a)gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>> Hi Eliot,
>>>>>>
>>>>>> The last version of Hermes, that I have generated today and have to
>>>>>> be tested for real yet, is able to load and save from and to 32 and 64
>>>>>> bits, handling the conversion. Because the Hermes representation (if we can
>>>>>> call it like that, because is really simple, does not care about the
>>>>>> architecture).
>>>>>>
>>>>>> Hermes is using a custom format completely separated from Fuel or any
>>>>>> other tool.
>>>>>>
>>>>>> This is a consequence of the design of Hermes. Hermes has been
>>>>>> designed to only work as light way of loading code during the bootstrap. So
>>>>>> that, it is heavily coupled with Pharo (it can be changed, for example
>>>>>> implementing another loader / installer) and uses only really core classes.
>>>>>>
>>>>>> Of course it can be extended and used in another Smalltalk dialects,
>>>>>> but I am not sure if the tool can be useful for them, or even for the Pharo
>>>>>> community outside the Pharo bootstrap process.
>>>>>>
>>>>>> Today to be useful outside the bootstrap process, some work has to be
>>>>>> done (perhaps a lot), but mainly new use cases have to be thinked. Once the
>>>>>> Compiler, Monticello or Metacello is available, there is no need for
>>>>>> Hermes. It is only used to generate some binary loadable packages for the
>>>>>> compiler from the source code.
>>>>>>
>>>>>> Again, it was only thinked as a tool to improve the speed during the
>>>>>> bootstrap. However, if somebody has ideas to use it or want to collaborate
>>>>>> are of course welcomed.
>>>>>>
>>>>>> Hermes is actually in Github, because to me is more comfortable to
>>>>>> have it there, but if somebody is really wanting to use it.... we can
>>>>>> manage to have an export process to Smalltalkhub.
>>>>>>
>>>>>> I hope I have clarified a little the idea behind Hermes.
>>>>>>
>>>>>> Maybe you have better ideas of what can we do with it.
>>>>>>
>>>>>>
>>>>>> On Tue, Aug 1, 2017 at 7:59 PM, Eliot Miranda <
>>>>>> eliot.miranda(a)gmail.com> wrote:
>>>>>>
>>>>>>> Hi Guille,
>>>>>>>
>>>>>>> On Aug 1, 2017, at 4:29 AM, Guillermo Polito <
>>>>>>> guillermopolito(a)gmail.com> wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Tue, Aug 1, 2017 at 12:57 PM, philippe.back(a)highoctane.be <
>>>>>>> philippe.back(a)gmail.com> wrote:
>>>>>>>
>>>>>>>> Massive.
>>>>>>>>
>>>>>>>> What is in the super small image?
>>>>>>>> Is Hermes going to be a generic binary content loader?
>>>>>>>>
>>>>>>>
>>>>>>> There is still work to do in this front.
>>>>>>> - Hermes only works for 32bits format. We should adapt it to 64
>>>>>>> bits (immediate floats and so on...)
>>>>>>> - There is no format validation. We should add one for safety.
>>>>>>>
>>>>>>>
>>>>>>> Will Hermes be able to save on 32-bits and load on 64-bits and vice
>>>>>>> verse?
>>>>>>>
>>>>>>> Does Hermes use the Parcels/Fuel architecture of saving nodes,
>>>>>>> grouped by class, followed by the arcs?
>>>>>>>
>>>>>>> If yes to both of these, are you willing to keep it in Monticello
>>>>>>> and collaborate with the Squeak & Cuis communities in developing Hermes?
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>> Phil
>>>>>>>>
>>>>>>>> On Aug 1, 2017 12:36, "Stephane Ducasse" <stepharo.self(a)gmail.com>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> Hi Pavel
>>>>>>>>>
>>>>>>>>> This is super excellent! IMPRESSIVE. An image without the compiler
>>>>>>>>> and
>>>>>>>>> a reloadable compiler.
>>>>>>>>> Super cool.
>>>>>>>>>
>>>>>>>>> Stef
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Tue, Aug 1, 2017 at 11:57 AM, Pavel Krivanek
>>>>>>>>> <pavel.krivanek(a)gmail.com> wrote:
>>>>>>>>> > Hello,
>>>>>>>>> >
>>>>>>>>> > we are checking a huge pull request #177
>>>>>>>>> > (https://github.com/pharo-project/pharo/pull/177) that will
>>>>>>>>> change some
>>>>>>>>> > basics of the bootstrap process:
>>>>>>>>> >
>>>>>>>>> > Now we will bootstrap a smaller image that will not include
>>>>>>>>> compiler/parser.
>>>>>>>>> > Compiler and related packages are exported and loaded using a
>>>>>>>>> binary
>>>>>>>>> > exporter named Hermes.
>>>>>>>>> > The compiler is then used to load FileSystem and Monticello. The
>>>>>>>>> rest of the
>>>>>>>>> > bootstrap process will be the same as before.
>>>>>>>>> > As the result we will have faster bootstrap and better system
>>>>>>>>> modularization
>>>>>>>>> > and possibilities.
>>>>>>>>> >
>>>>>>>>> > It required some modularization efforts:
>>>>>>>>> >
>>>>>>>>> > - simplified initialization scripts
>>>>>>>>> > - Use Zinc converters and encoders instead of FilePathEncoder
>>>>>>>>> and old
>>>>>>>>> > TextConverter
>>>>>>>>> > - Use Stdio instead of FileStream
>>>>>>>>> > - Using File instead of FileSystem
>>>>>>>>> > - Deprecated FileStream & childs (Moved to Deprecated70)
>>>>>>>>> > - Extracted Path classes to their on package: FileSystem-Path
>>>>>>>>> > - Moved OpalEncoders to their own package. They are required by
>>>>>>>>> the runtime
>>>>>>>>> > (not only for compilation)
>>>>>>>>> > - Introduced AsciiCharset in the kernel to answer to #isLetter
>>>>>>>>> #isUppercase
>>>>>>>>> > and so on without requiring full Unicode tables from the
>>>>>>>>> beginning
>>>>>>>>> > - Cleaning up a bit the full exception logging infrastructure
>>>>>>>>> (streams,
>>>>>>>>> > transcript, files, stack printing...)
>>>>>>>>> > - Split Ring methods required for system navigation to the
>>>>>>>>> Ring-Navigation
>>>>>>>>> > package
>>>>>>>>> > - Remove usages of #translated in the kernel
>>>>>>>>> > - Refactored the bootstrapping classes to remove duplications
>>>>>>>>> > - Cleaning up dependencies in CompiledMethod>>printOn:
>>>>>>>>> > - fix path printing
>>>>>>>>> >
>>>>>>>>> > We need to merge these changes at once and of course it can
>>>>>>>>> cause some
>>>>>>>>> > conflicts with the existing pull requests or external code.
>>>>>>>>> Anyway, we need
>>>>>>>>> > to merge it as soon as possible.
>>>>>>>>> >
>>>>>>>>> > So please, try to look at the PR and test the resultant image
>>>>>>>>> [1] to avoid
>>>>>>>>> > some major problems.
>>>>>>>>> >
>>>>>>>>> > [1]
>>>>>>>>> > https://ci.inria.fr/pharo/view/7.0/job/70-PR-Check-Load/last
>>>>>>>>> SuccessfulBuild/artifact/bootstrap-cache/Pharo7.0-32bit-9c06
>>>>>>>>> 91d.zip
>>>>>>>>> >
>>>>>>>>> > Cheers,
>>>>>>>>> > -- Pavel
>>>>>>>>> >
>>>>>>>>>
>>>>>>>>>
>>>>>>> --
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Guille Polito
>>>>>>>
>>>>>>>
>>>>>>> Research Engineer
>>>>>>>
>>>>>>> French National Center for Scientific Research -
>>>>>>> *http://www.cnrs.fr* <http://www.cnrs.fr>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> *Web:* *http://guillep.github.io* <http://guillep.github.io>
>>>>>>>
>>>>>>> *Phone: *+33 06 52 70 66 13 <+33%206%2052%2070%2066%2013>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Pablo Tesone.
>>>>>> tesonep(a)gmail.com
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Pablo Tesone.
>>>>> tesonep(a)gmail.com
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> _,,,^..^,,,_
>>>> best, Eliot
>>>>
>>>
>>>
>>>
>>> --
>>> Pablo Tesone.
>>> tesonep(a)gmail.com
>>>
>>
>>
>>
>> --
>> Mariano
>> http://marianopeck.wordpress.com
>>
>
>
>
> --
> Pablo Tesone.
> tesonep(a)gmail.com
>
--
Guille Polito
Research Engineer
French National Center for Scientific Research - *http://www.cnrs.fr*
<http://www.cnrs.fr>
*Web:* *http://guillep.github.io* <http://guillep.github.io>
*Phone: *+33 06 52 70 66 13
Aug. 2, 2017
Re: [Pharo-dev] Catalog down
by Tudor Girba
Thanks, indeed.
Doru
> On Aug 1, 2017, at 1:27 PM, Stephane Ducasse <stepharo.self(a)gmail.com> wrote:
>
> Tx christophe.
>
>
> On Tue, Aug 1, 2017 at 11:23 AM, Torsten Bergmann <astares(a)gmx.de> wrote:
>>
>> Thanks!
>>
>>
>> Gesendet: Dienstag, 01. August 2017 um 10:48 Uhr
>> Von: "Christophe Demarey" <christophe.demarey(a)inria.fr>
>> An: "Pharo Development List" <pharo-dev(a)lists.pharo.org>
>> Betreff: Re: [Pharo-dev] Catalog down
>>
>> It is nows back on line!
>>
>> Christophe
>>
>>
>> Le 1 août 2017 à 08:40, Torsten Bergmann <astares@gmx.de[mailto:astares@gmx.de]> a écrit :
>>
>> It is still down.
>> Am 31.07.2017, 19:55, Esteban Lorenzano <estebanlm@gmail.com[mailto:estebanlm@gmail.com]> schrieb:It will be restarted at midnight
>>
>>> On 31 Jul 2017, at 19:51, Torsten Bergmann <astares@gmx.de[mailto:astares@gmx.de]> wrote:
>>>
>>> http://catalog.pharo.org/catalog/json[http://catalog.pharo.org/catalog/json] responds with "Service Temporarily Unavailable".
>>> Sabine already reported it this morning on Discord.
>>>
>>> Any idea?
>>>
>>>
>>
>>
>
--
www.tudorgirba.com
www.feenk.com
"Beauty is where we see it."
Aug. 2, 2017
Re: [Pharo-dev] [IMPORTANT] Following changes in the bootstrapping process
by Tudor Girba
Wow!
This is impressive indeed.
Doru
> On Aug 1, 2017, at 12:35 PM, Stephane Ducasse <stepharo.self(a)gmail.com> wrote:
>
> Hi Pavel
>
> This is super excellent! IMPRESSIVE. An image without the compiler and
> a reloadable compiler.
> Super cool.
>
> Stef
>
>
> On Tue, Aug 1, 2017 at 11:57 AM, Pavel Krivanek
> <pavel.krivanek(a)gmail.com> wrote:
>> Hello,
>>
>> we are checking a huge pull request #177
>> (https://github.com/pharo-project/pharo/pull/177) that will change some
>> basics of the bootstrap process:
>>
>> Now we will bootstrap a smaller image that will not include compiler/parser.
>> Compiler and related packages are exported and loaded using a binary
>> exporter named Hermes.
>> The compiler is then used to load FileSystem and Monticello. The rest of the
>> bootstrap process will be the same as before.
>> As the result we will have faster bootstrap and better system modularization
>> and possibilities.
>>
>> It required some modularization efforts:
>>
>> - simplified initialization scripts
>> - Use Zinc converters and encoders instead of FilePathEncoder and old
>> TextConverter
>> - Use Stdio instead of FileStream
>> - Using File instead of FileSystem
>> - Deprecated FileStream & childs (Moved to Deprecated70)
>> - Extracted Path classes to their on package: FileSystem-Path
>> - Moved OpalEncoders to their own package. They are required by the runtime
>> (not only for compilation)
>> - Introduced AsciiCharset in the kernel to answer to #isLetter #isUppercase
>> and so on without requiring full Unicode tables from the beginning
>> - Cleaning up a bit the full exception logging infrastructure (streams,
>> transcript, files, stack printing...)
>> - Split Ring methods required for system navigation to the Ring-Navigation
>> package
>> - Remove usages of #translated in the kernel
>> - Refactored the bootstrapping classes to remove duplications
>> - Cleaning up dependencies in CompiledMethod>>printOn:
>> - fix path printing
>>
>> We need to merge these changes at once and of course it can cause some
>> conflicts with the existing pull requests or external code. Anyway, we need
>> to merge it as soon as possible.
>>
>> So please, try to look at the PR and test the resultant image [1] to avoid
>> some major problems.
>>
>> [1]
>> https://ci.inria.fr/pharo/view/7.0/job/70-PR-Check-Load/lastSuccessfulBuild…
>>
>> Cheers,
>> -- Pavel
>>
>
--
www.tudorgirba.com
www.feenk.com
"Speaking louder won't make the point worthier."
Aug. 2, 2017
Re: [Pharo-dev] [IMPORTANT] Following changes in the bootstrapping process
by Alexandre Bergel
Impressive!!!
--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
> On Aug 1, 2017, at 7:13 AM, Pavel Krivanek <pavel.krivanek(a)gmail.com> wrote:
>
> We already have an experimental reduced image with Hermes that is able to be bootstrapped under 2 minutes. The minimal system based on the current code-base that is able to be bootstrapped has about 260kB.
>
Aug. 2, 2017
Re: [Pharo-dev] [IMPORTANT] Following changes in the bootstrapping process
by tesonep@gmail.com
Hi Mariano,
The definition is not serialized. What is serialized is all the
information to regenerate the class (eg: superclass name, instance variable
names, class variables names, share pool names, category, layout class, and
so on). This information is later used to regenerate the class as it is
created initially by the class builder and installer. The same happens with
the methods, they are built up from scratch without using the compiler. The
bytecode is stored, the literals are serialized and the information in the
header is serialized, as it has to be rebuilt when install.
The same is applicable to the traits and extension methods.
Basically it can be seen as a class builder / installer, that get all the
information from the serialized version and not from the text
representation of the class or the methods.
That's why I said Hermes is so couple with Pharo.
Thanks for clarifying, I am starting to understand where yours doubts came
from.
Cheers,
Pablo
On Tue, Aug 1, 2017 at 10:52 PM, Mariano Martinez Peck <
marianopeck(a)gmail.com> wrote:
>
>
> On Tue, Aug 1, 2017 at 5:31 PM, tesonep(a)gmail.com <tesonep(a)gmail.com>
> wrote:
>
>> Hi,
>> Yes for sure there are objects, and that is very powerful, but
>> comparing the algorithm of serialization of Hermes with Fuel (I don't
>> really know Parcels) is not possible. It is like comparing Filetree with
>> Fuel, The problems they have to take care are completely different.
>>
>> Maybe I am not seeing the point.
>>
>>
> Let me add one sentence that may explain Eliot questions... if you
> serialize the class definition, then it means you would need the compiler.
> I guess Eliot may be interested in NOT having the compiler at all and
> instead bring classes directly from binary format (like Fuel / Tanker )
>
>
>
>
>> Cheers.
>>
>> On Tue, Aug 1, 2017 at 10:25 PM, Eliot Miranda <eliot.miranda(a)gmail.com>
>> wrote:
>>
>>> Hi Pablo,
>>>
>>> On Tue, Aug 1, 2017 at 12:36 PM, tesonep(a)gmail.com <tesonep(a)gmail.com>
>>> wrote:
>>>
>>>> Hi again,
>>>> thanks for the clarification, I haven't understood the question
>>>> initially, but now I think I can answer it.
>>>>
>>>> Hermes is only exporting the classes, not objects. so it does not have
>>>> to handle complex graphs of objects. Basically it serializes the definition
>>>> of the classes, traits and methods. Then they are loaded in sequence. The
>>>> only caring during the generation is to serialize first the superclasses,
>>>> and then the subclasses. There is no way of serializing objects outside the
>>>> classes, methods, traits and literals in a method.
>>>>
>>>
>>> Classes, traits, methods, literals *are* a graph of objects :-). The
>>> Parcel architecture, from which Fuel derived its architecture, was designed
>>> for loading code in VisualWorks. In fact, last time I looked Parcels were
>>> used only to store code and not as a general purpose (de)serializer.
>>>
>>> So the answer is that is not using Parcels or Fuel architecture because
>>>> they are intended for different uses.
>>>>
>>>
>>> Well, I don't think that's the reason ;-), but fine. I understand that
>>> it doesn't use this architecture. Thanks.
>>>
>>>
>>>> Also the format itself has no special design or considerations to be
>>>> fast to generate or fast to read (as It happens with Fuel)
>>>>
>>>> Cheers,
>>>> Pablo
>>>>
>>>> On Tue, Aug 1, 2017 at 9:16 PM, Eliot Miranda <eliot.miranda(a)gmail.com>
>>>> wrote:
>>>>
>>>>> Hi Pablo,
>>>>>
>>>>> I understand that Hermes has its own format. My question was
>>>>> about architecture. The Parcels/Fuel architecture is, AFAIA, the best
>>>>> architecture for binary storage because it is virtual, is fast to load and
>>>>> cleanly separates loading from initialization. What do I mean?
>>>>>
>>>>> - concrete formats like ImageSegment are tied to internal
>>>>> representations in the VM and do are difficult to read in forever FB
>>>>> systems and very hard to write in foreign systems. So a virtual format
>>>>> (like BOSS, Fuel, Parcels, etc) is better but unless done well can be slow
>>>>>
>>>>> - a first generation system like BOSS is a flattening of a graph
>>>>> traversal using a simple grammar. Each phrase is either an object
>>>>> reference (object id) or an object definition (object is followed by type
>>>>> info and contents, contents being a sequence of phrases. This is slow to
>>>>> parse (because each phrase must be decoded), and has invalid intermediate
>>>>> states (e.g. a Set whose contents are not all present, hence whose external
>>>>> hash may change during loading, etc). A second generation system like
>>>>> Parcels and Fuel separates objects from references (nodes from arcs) and
>>>>> batches object creation, grouping all instances of a given class for bulk,
>>>>> and hence fast, instantiation. Following my the objects are the
>>>>> references. So loading has three phases:
>>>>> - instantiate the objects
>>>>> - connect the graph by filling in object references
>>>>> - initialize the objects that require it (e.g. rehash sets)
>>>>>
>>>>> Consequently the writer must be two pass, the first pass to collect
>>>>> the objects in the graph and sort them by class, the second to write the
>>>>> nodes followed by the references
>>>>>
>>>>> So let me ask again, does Hermes use the Parcels/Fuel architecture?
>>>>>
>>>>> _,,,^..^,,,_ (phone)
>>>>>
>>>>> On Aug 1, 2017, at 11:52 AM, "tesonep(a)gmail.com" <tesonep(a)gmail.com>
>>>>> wrote:
>>>>>
>>>>> Hi Eliot,
>>>>>
>>>>> The last version of Hermes, that I have generated today and have to be
>>>>> tested for real yet, is able to load and save from and to 32 and 64 bits,
>>>>> handling the conversion. Because the Hermes representation (if we can call
>>>>> it like that, because is really simple, does not care about the
>>>>> architecture).
>>>>>
>>>>> Hermes is using a custom format completely separated from Fuel or any
>>>>> other tool.
>>>>>
>>>>> This is a consequence of the design of Hermes. Hermes has been
>>>>> designed to only work as light way of loading code during the bootstrap. So
>>>>> that, it is heavily coupled with Pharo (it can be changed, for example
>>>>> implementing another loader / installer) and uses only really core classes.
>>>>>
>>>>> Of course it can be extended and used in another Smalltalk dialects,
>>>>> but I am not sure if the tool can be useful for them, or even for the Pharo
>>>>> community outside the Pharo bootstrap process.
>>>>>
>>>>> Today to be useful outside the bootstrap process, some work has to be
>>>>> done (perhaps a lot), but mainly new use cases have to be thinked. Once the
>>>>> Compiler, Monticello or Metacello is available, there is no need for
>>>>> Hermes. It is only used to generate some binary loadable packages for the
>>>>> compiler from the source code.
>>>>>
>>>>> Again, it was only thinked as a tool to improve the speed during the
>>>>> bootstrap. However, if somebody has ideas to use it or want to collaborate
>>>>> are of course welcomed.
>>>>>
>>>>> Hermes is actually in Github, because to me is more comfortable to
>>>>> have it there, but if somebody is really wanting to use it.... we can
>>>>> manage to have an export process to Smalltalkhub.
>>>>>
>>>>> I hope I have clarified a little the idea behind Hermes.
>>>>>
>>>>> Maybe you have better ideas of what can we do with it.
>>>>>
>>>>>
>>>>> On Tue, Aug 1, 2017 at 7:59 PM, Eliot Miranda <eliot.miranda(a)gmail.com
>>>>> > wrote:
>>>>>
>>>>>> Hi Guille,
>>>>>>
>>>>>> On Aug 1, 2017, at 4:29 AM, Guillermo Polito <
>>>>>> guillermopolito(a)gmail.com> wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Tue, Aug 1, 2017 at 12:57 PM, philippe.back(a)highoctane.be <
>>>>>> philippe.back(a)gmail.com> wrote:
>>>>>>
>>>>>>> Massive.
>>>>>>>
>>>>>>> What is in the super small image?
>>>>>>> Is Hermes going to be a generic binary content loader?
>>>>>>>
>>>>>>
>>>>>> There is still work to do in this front.
>>>>>> - Hermes only works for 32bits format. We should adapt it to 64 bits
>>>>>> (immediate floats and so on...)
>>>>>> - There is no format validation. We should add one for safety.
>>>>>>
>>>>>>
>>>>>> Will Hermes be able to save on 32-bits and load on 64-bits and vice
>>>>>> verse?
>>>>>>
>>>>>> Does Hermes use the Parcels/Fuel architecture of saving nodes,
>>>>>> grouped by class, followed by the arcs?
>>>>>>
>>>>>> If yes to both of these, are you willing to keep it in Monticello and
>>>>>> collaborate with the Squeak & Cuis communities in developing Hermes?
>>>>>>
>>>>>>
>>>>>>
>>>>>>> Phil
>>>>>>>
>>>>>>> On Aug 1, 2017 12:36, "Stephane Ducasse" <stepharo.self(a)gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Hi Pavel
>>>>>>>>
>>>>>>>> This is super excellent! IMPRESSIVE. An image without the compiler
>>>>>>>> and
>>>>>>>> a reloadable compiler.
>>>>>>>> Super cool.
>>>>>>>>
>>>>>>>> Stef
>>>>>>>>
>>>>>>>>
>>>>>>>> On Tue, Aug 1, 2017 at 11:57 AM, Pavel Krivanek
>>>>>>>> <pavel.krivanek(a)gmail.com> wrote:
>>>>>>>> > Hello,
>>>>>>>> >
>>>>>>>> > we are checking a huge pull request #177
>>>>>>>> > (https://github.com/pharo-project/pharo/pull/177) that will
>>>>>>>> change some
>>>>>>>> > basics of the bootstrap process:
>>>>>>>> >
>>>>>>>> > Now we will bootstrap a smaller image that will not include
>>>>>>>> compiler/parser.
>>>>>>>> > Compiler and related packages are exported and loaded using a
>>>>>>>> binary
>>>>>>>> > exporter named Hermes.
>>>>>>>> > The compiler is then used to load FileSystem and Monticello. The
>>>>>>>> rest of the
>>>>>>>> > bootstrap process will be the same as before.
>>>>>>>> > As the result we will have faster bootstrap and better system
>>>>>>>> modularization
>>>>>>>> > and possibilities.
>>>>>>>> >
>>>>>>>> > It required some modularization efforts:
>>>>>>>> >
>>>>>>>> > - simplified initialization scripts
>>>>>>>> > - Use Zinc converters and encoders instead of FilePathEncoder and
>>>>>>>> old
>>>>>>>> > TextConverter
>>>>>>>> > - Use Stdio instead of FileStream
>>>>>>>> > - Using File instead of FileSystem
>>>>>>>> > - Deprecated FileStream & childs (Moved to Deprecated70)
>>>>>>>> > - Extracted Path classes to their on package: FileSystem-Path
>>>>>>>> > - Moved OpalEncoders to their own package. They are required by
>>>>>>>> the runtime
>>>>>>>> > (not only for compilation)
>>>>>>>> > - Introduced AsciiCharset in the kernel to answer to #isLetter
>>>>>>>> #isUppercase
>>>>>>>> > and so on without requiring full Unicode tables from the beginning
>>>>>>>> > - Cleaning up a bit the full exception logging infrastructure
>>>>>>>> (streams,
>>>>>>>> > transcript, files, stack printing...)
>>>>>>>> > - Split Ring methods required for system navigation to the
>>>>>>>> Ring-Navigation
>>>>>>>> > package
>>>>>>>> > - Remove usages of #translated in the kernel
>>>>>>>> > - Refactored the bootstrapping classes to remove duplications
>>>>>>>> > - Cleaning up dependencies in CompiledMethod>>printOn:
>>>>>>>> > - fix path printing
>>>>>>>> >
>>>>>>>> > We need to merge these changes at once and of course it can cause
>>>>>>>> some
>>>>>>>> > conflicts with the existing pull requests or external code.
>>>>>>>> Anyway, we need
>>>>>>>> > to merge it as soon as possible.
>>>>>>>> >
>>>>>>>> > So please, try to look at the PR and test the resultant image [1]
>>>>>>>> to avoid
>>>>>>>> > some major problems.
>>>>>>>> >
>>>>>>>> > [1]
>>>>>>>> > https://ci.inria.fr/pharo/view/7.0/job/70-PR-Check-Load/last
>>>>>>>> SuccessfulBuild/artifact/bootstrap-cache/Pharo7.0-32bit-9c0691d.zip
>>>>>>>> >
>>>>>>>> > Cheers,
>>>>>>>> > -- Pavel
>>>>>>>> >
>>>>>>>>
>>>>>>>>
>>>>>> --
>>>>>>
>>>>>>
>>>>>>
>>>>>> Guille Polito
>>>>>>
>>>>>>
>>>>>> Research Engineer
>>>>>>
>>>>>> French National Center for Scientific Research - *http://www.cnrs.fr*
>>>>>> <http://www.cnrs.fr>
>>>>>>
>>>>>>
>>>>>>
>>>>>> *Web:* *http://guillep.github.io* <http://guillep.github.io>
>>>>>>
>>>>>> *Phone: *+33 06 52 70 66 13 <+33%206%2052%2070%2066%2013>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Pablo Tesone.
>>>>> tesonep(a)gmail.com
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Pablo Tesone.
>>>> tesonep(a)gmail.com
>>>>
>>>
>>>
>>>
>>> --
>>> _,,,^..^,,,_
>>> best, Eliot
>>>
>>
>>
>>
>> --
>> Pablo Tesone.
>> tesonep(a)gmail.com
>>
>
>
>
> --
> Mariano
> http://marianopeck.wordpress.com
>
--
Pablo Tesone.
tesonep(a)gmail.com
Aug. 1, 2017
Re: [Pharo-dev] Creating the smallest server runtime footprint
by Tim Mackinnon
Hi Pavel - I tried it again and the problem is do with Metacello dependencies in your baseline.
The SUnit baseline doesnât specify any additional dependencies to load (it just loads local packages), whereas my baseline that fails looks like this:
baseline: spec
<baseline>
spec for: #common do: [
spec configuration: 'ZTimestamp' with: [
spec
versionString: #stable;
repository: 'http://mc.stfx.eu/Neo' ].
spec baseline: 'AWS' with: [
spec repository: 'github://newapplesho/aws-sdk-smalltalk:v1.10/pharo-repository' ].
spec
package: 'Lambda' with: [ spec requires: {'ZTimestamp'. 'AWS'}].
].
The âspec configuration: â¦.â Specifications cause the error:
25 UndefinedObject(Object)>>doesNotUnderstand: #addTo:
26 MCRepositoryGroup>>addRepository:
If I remove those lines from my baseline above (as well the requires: reference to them) I can then successfully load my packages.
So is this something the minimal image should support (otherwise how do you load external packages into your image without checking them in locally?) OR is there something simple I can checkin and load locally to return that behaviour? (Personally I think it would make sense to allow remote loading - Iâm guessing Pharo itself as a core has everything it needs - but if you want to do any experimentation on the core and need remote packages, you would hit this too - so it feels a bit limiting).
Tim
> On 1 Aug 2017, at 10:06, Pavel Krivanek <pavel.krivanek(a)gmail.com> wrote:
>
>
>
> 2017-07-31 22:51 GMT+02:00 Tim Mackinnon <tim(a)testit.works <mailto:tim@testit.works>>:
> I wasnât clear on which image to retry - the https://ci.inria.fr/pharo/job/Pharo-6.0-Update-Step-3.2-Minimal/lastSuccess… <https://ci.inria.fr/pharo/job/Pharo-6.0-Update-Step-3.2-Minimal/lastSuccess…> one still shows as being last updated 7 days ago.
>
> The https://ci.inria.fr/pharo/view/6.0-SysConf/job/Pharo-6.0-Step-04-01-Configu… <https://ci.inria.fr/pharo/view/6.0-SysConf/job/Pharo-6.0-Step-04-01-Configu…> one gives me a mismatch error: This interpreter (vers. 68021) cannot read image file (vers. 6521).
>
> The https://ci.inria.fr/pharo/view/7.0/job/70-Bootstrap-32bit-Conversion/lastSu… <https://ci.inria.fr/pharo/view/7.0/job/70-Bootstrap-32bit-Conversion/lastSu…> one gives me a walkback when trying to run my install script :
>
> 25 UndefinedObject(Object)>>doesNotUnderstand: #addTo:
> 26 MCRepositoryGroup>>addRepository:
> 27 createRepository
> | repo |
> repo := self project createRepository: self.
> ^ MCRepositoryGroup default repositories
> detect: [ :each | each = repo ]
> ifNone: [
> MCRepositoryGroup default addRepository: repo.
> repo ] in MetacelloRepositorySpec>>createRepository
>
> I think this is because the image doesnât support Metacello? As in:
> Metacello new
> repository: 'filetree://../src <>';
> baseline: 'Lambda';
> load.
>
> How do you guys load things into the minimal images (I thought you used Metacello - but maybe you do it some other way?)
>
> I can use a big 6.1 image fine (as it has Metacello loaded) but Iâd really like a minimal solution - that can load in libraries like AWS S3, or XML parsing etc. and it seems like I should be a good customer for kicking the tires on all of this.
>
> Tim
>
>
> I checked the 64-bit Pharo 7 minimal image and loading of baseline (of SUnit from pharo-project/pharo) works:
>
> ./pharo Pharo7.0-minimal-64bit-b1625bf.image eval --save "Metacello new baseline: 'SUnit'; repository: 'filetree://./pharo-core/src'; load."
>
> ./pharo Pharo7.0-minimal-64bit-b1625bf.image eval "TestCase suite run"
>
> Can you test it too?
>
> -- Pavel
Aug. 1, 2017
Re: [Pharo-dev] [IMPORTANT] Following changes in the bootstrapping process
by Mariano Martinez Peck
On Tue, Aug 1, 2017 at 5:31 PM, tesonep(a)gmail.com <tesonep(a)gmail.com> wrote:
> Hi,
> Yes for sure there are objects, and that is very powerful, but
> comparing the algorithm of serialization of Hermes with Fuel (I don't
> really know Parcels) is not possible. It is like comparing Filetree with
> Fuel, The problems they have to take care are completely different.
>
> Maybe I am not seeing the point.
>
>
Let me add one sentence that may explain Eliot questions... if you
serialize the class definition, then it means you would need the compiler.
I guess Eliot may be interested in NOT having the compiler at all and
instead bring classes directly from binary format (like Fuel / Tanker )
> Cheers.
>
> On Tue, Aug 1, 2017 at 10:25 PM, Eliot Miranda <eliot.miranda(a)gmail.com>
> wrote:
>
>> Hi Pablo,
>>
>> On Tue, Aug 1, 2017 at 12:36 PM, tesonep(a)gmail.com <tesonep(a)gmail.com>
>> wrote:
>>
>>> Hi again,
>>> thanks for the clarification, I haven't understood the question
>>> initially, but now I think I can answer it.
>>>
>>> Hermes is only exporting the classes, not objects. so it does not have
>>> to handle complex graphs of objects. Basically it serializes the definition
>>> of the classes, traits and methods. Then they are loaded in sequence. The
>>> only caring during the generation is to serialize first the superclasses,
>>> and then the subclasses. There is no way of serializing objects outside the
>>> classes, methods, traits and literals in a method.
>>>
>>
>> Classes, traits, methods, literals *are* a graph of objects :-). The
>> Parcel architecture, from which Fuel derived its architecture, was designed
>> for loading code in VisualWorks. In fact, last time I looked Parcels were
>> used only to store code and not as a general purpose (de)serializer.
>>
>> So the answer is that is not using Parcels or Fuel architecture because
>>> they are intended for different uses.
>>>
>>
>> Well, I don't think that's the reason ;-), but fine. I understand that
>> it doesn't use this architecture. Thanks.
>>
>>
>>> Also the format itself has no special design or considerations to be
>>> fast to generate or fast to read (as It happens with Fuel)
>>>
>>> Cheers,
>>> Pablo
>>>
>>> On Tue, Aug 1, 2017 at 9:16 PM, Eliot Miranda <eliot.miranda(a)gmail.com>
>>> wrote:
>>>
>>>> Hi Pablo,
>>>>
>>>> I understand that Hermes has its own format. My question was about
>>>> architecture. The Parcels/Fuel architecture is, AFAIA, the best
>>>> architecture for binary storage because it is virtual, is fast to load and
>>>> cleanly separates loading from initialization. What do I mean?
>>>>
>>>> - concrete formats like ImageSegment are tied to internal
>>>> representations in the VM and do are difficult to read in forever FB
>>>> systems and very hard to write in foreign systems. So a virtual format
>>>> (like BOSS, Fuel, Parcels, etc) is better but unless done well can be slow
>>>>
>>>> - a first generation system like BOSS is a flattening of a graph
>>>> traversal using a simple grammar. Each phrase is either an object
>>>> reference (object id) or an object definition (object is followed by type
>>>> info and contents, contents being a sequence of phrases. This is slow to
>>>> parse (because each phrase must be decoded), and has invalid intermediate
>>>> states (e.g. a Set whose contents are not all present, hence whose external
>>>> hash may change during loading, etc). A second generation system like
>>>> Parcels and Fuel separates objects from references (nodes from arcs) and
>>>> batches object creation, grouping all instances of a given class for bulk,
>>>> and hence fast, instantiation. Following my the objects are the
>>>> references. So loading has three phases:
>>>> - instantiate the objects
>>>> - connect the graph by filling in object references
>>>> - initialize the objects that require it (e.g. rehash sets)
>>>>
>>>> Consequently the writer must be two pass, the first pass to collect the
>>>> objects in the graph and sort them by class, the second to write the nodes
>>>> followed by the references
>>>>
>>>> So let me ask again, does Hermes use the Parcels/Fuel architecture?
>>>>
>>>> _,,,^..^,,,_ (phone)
>>>>
>>>> On Aug 1, 2017, at 11:52 AM, "tesonep(a)gmail.com" <tesonep(a)gmail.com>
>>>> wrote:
>>>>
>>>> Hi Eliot,
>>>>
>>>> The last version of Hermes, that I have generated today and have to be
>>>> tested for real yet, is able to load and save from and to 32 and 64 bits,
>>>> handling the conversion. Because the Hermes representation (if we can call
>>>> it like that, because is really simple, does not care about the
>>>> architecture).
>>>>
>>>> Hermes is using a custom format completely separated from Fuel or any
>>>> other tool.
>>>>
>>>> This is a consequence of the design of Hermes. Hermes has been designed
>>>> to only work as light way of loading code during the bootstrap. So that, it
>>>> is heavily coupled with Pharo (it can be changed, for example implementing
>>>> another loader / installer) and uses only really core classes.
>>>>
>>>> Of course it can be extended and used in another Smalltalk dialects,
>>>> but I am not sure if the tool can be useful for them, or even for the Pharo
>>>> community outside the Pharo bootstrap process.
>>>>
>>>> Today to be useful outside the bootstrap process, some work has to be
>>>> done (perhaps a lot), but mainly new use cases have to be thinked. Once the
>>>> Compiler, Monticello or Metacello is available, there is no need for
>>>> Hermes. It is only used to generate some binary loadable packages for the
>>>> compiler from the source code.
>>>>
>>>> Again, it was only thinked as a tool to improve the speed during the
>>>> bootstrap. However, if somebody has ideas to use it or want to collaborate
>>>> are of course welcomed.
>>>>
>>>> Hermes is actually in Github, because to me is more comfortable to have
>>>> it there, but if somebody is really wanting to use it.... we can manage to
>>>> have an export process to Smalltalkhub.
>>>>
>>>> I hope I have clarified a little the idea behind Hermes.
>>>>
>>>> Maybe you have better ideas of what can we do with it.
>>>>
>>>>
>>>> On Tue, Aug 1, 2017 at 7:59 PM, Eliot Miranda <eliot.miranda(a)gmail.com>
>>>> wrote:
>>>>
>>>>> Hi Guille,
>>>>>
>>>>> On Aug 1, 2017, at 4:29 AM, Guillermo Polito <
>>>>> guillermopolito(a)gmail.com> wrote:
>>>>>
>>>>>
>>>>>
>>>>> On Tue, Aug 1, 2017 at 12:57 PM, philippe.back(a)highoctane.be <
>>>>> philippe.back(a)gmail.com> wrote:
>>>>>
>>>>>> Massive.
>>>>>>
>>>>>> What is in the super small image?
>>>>>> Is Hermes going to be a generic binary content loader?
>>>>>>
>>>>>
>>>>> There is still work to do in this front.
>>>>> - Hermes only works for 32bits format. We should adapt it to 64 bits
>>>>> (immediate floats and so on...)
>>>>> - There is no format validation. We should add one for safety.
>>>>>
>>>>>
>>>>> Will Hermes be able to save on 32-bits and load on 64-bits and vice
>>>>> verse?
>>>>>
>>>>> Does Hermes use the Parcels/Fuel architecture of saving nodes,
>>>>> grouped by class, followed by the arcs?
>>>>>
>>>>> If yes to both of these, are you willing to keep it in Monticello and
>>>>> collaborate with the Squeak & Cuis communities in developing Hermes?
>>>>>
>>>>>
>>>>>
>>>>>> Phil
>>>>>>
>>>>>> On Aug 1, 2017 12:36, "Stephane Ducasse" <stepharo.self(a)gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>>> Hi Pavel
>>>>>>>
>>>>>>> This is super excellent! IMPRESSIVE. An image without the compiler
>>>>>>> and
>>>>>>> a reloadable compiler.
>>>>>>> Super cool.
>>>>>>>
>>>>>>> Stef
>>>>>>>
>>>>>>>
>>>>>>> On Tue, Aug 1, 2017 at 11:57 AM, Pavel Krivanek
>>>>>>> <pavel.krivanek(a)gmail.com> wrote:
>>>>>>> > Hello,
>>>>>>> >
>>>>>>> > we are checking a huge pull request #177
>>>>>>> > (https://github.com/pharo-project/pharo/pull/177) that will
>>>>>>> change some
>>>>>>> > basics of the bootstrap process:
>>>>>>> >
>>>>>>> > Now we will bootstrap a smaller image that will not include
>>>>>>> compiler/parser.
>>>>>>> > Compiler and related packages are exported and loaded using a
>>>>>>> binary
>>>>>>> > exporter named Hermes.
>>>>>>> > The compiler is then used to load FileSystem and Monticello. The
>>>>>>> rest of the
>>>>>>> > bootstrap process will be the same as before.
>>>>>>> > As the result we will have faster bootstrap and better system
>>>>>>> modularization
>>>>>>> > and possibilities.
>>>>>>> >
>>>>>>> > It required some modularization efforts:
>>>>>>> >
>>>>>>> > - simplified initialization scripts
>>>>>>> > - Use Zinc converters and encoders instead of FilePathEncoder and
>>>>>>> old
>>>>>>> > TextConverter
>>>>>>> > - Use Stdio instead of FileStream
>>>>>>> > - Using File instead of FileSystem
>>>>>>> > - Deprecated FileStream & childs (Moved to Deprecated70)
>>>>>>> > - Extracted Path classes to their on package: FileSystem-Path
>>>>>>> > - Moved OpalEncoders to their own package. They are required by
>>>>>>> the runtime
>>>>>>> > (not only for compilation)
>>>>>>> > - Introduced AsciiCharset in the kernel to answer to #isLetter
>>>>>>> #isUppercase
>>>>>>> > and so on without requiring full Unicode tables from the beginning
>>>>>>> > - Cleaning up a bit the full exception logging infrastructure
>>>>>>> (streams,
>>>>>>> > transcript, files, stack printing...)
>>>>>>> > - Split Ring methods required for system navigation to the
>>>>>>> Ring-Navigation
>>>>>>> > package
>>>>>>> > - Remove usages of #translated in the kernel
>>>>>>> > - Refactored the bootstrapping classes to remove duplications
>>>>>>> > - Cleaning up dependencies in CompiledMethod>>printOn:
>>>>>>> > - fix path printing
>>>>>>> >
>>>>>>> > We need to merge these changes at once and of course it can cause
>>>>>>> some
>>>>>>> > conflicts with the existing pull requests or external code.
>>>>>>> Anyway, we need
>>>>>>> > to merge it as soon as possible.
>>>>>>> >
>>>>>>> > So please, try to look at the PR and test the resultant image [1]
>>>>>>> to avoid
>>>>>>> > some major problems.
>>>>>>> >
>>>>>>> > [1]
>>>>>>> > https://ci.inria.fr/pharo/view/7.0/job/70-PR-Check-Load/last
>>>>>>> SuccessfulBuild/artifact/bootstrap-cache/Pharo7.0-32bit-9c0691d.zip
>>>>>>> >
>>>>>>> > Cheers,
>>>>>>> > -- Pavel
>>>>>>> >
>>>>>>>
>>>>>>>
>>>>> --
>>>>>
>>>>>
>>>>>
>>>>> Guille Polito
>>>>>
>>>>>
>>>>> Research Engineer
>>>>>
>>>>> French National Center for Scientific Research - *http://www.cnrs.fr*
>>>>> <http://www.cnrs.fr>
>>>>>
>>>>>
>>>>>
>>>>> *Web:* *http://guillep.github.io* <http://guillep.github.io>
>>>>>
>>>>> *Phone: *+33 06 52 70 66 13 <+33%206%2052%2070%2066%2013>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Pablo Tesone.
>>>> tesonep(a)gmail.com
>>>>
>>>>
>>>
>>>
>>> --
>>> Pablo Tesone.
>>> tesonep(a)gmail.com
>>>
>>
>>
>>
>> --
>> _,,,^..^,,,_
>> best, Eliot
>>
>
>
>
> --
> Pablo Tesone.
> tesonep(a)gmail.com
>
--
Mariano
http://marianopeck.wordpress.com
Aug. 1, 2017
Re: [Pharo-dev] [IMPORTANT] Following changes in the bootstrapping process
by tesonep@gmail.com
Hi,
Yes for sure there are objects, and that is very powerful, but
comparing the algorithm of serialization of Hermes with Fuel (I don't
really know Parcels) is not possible. It is like comparing Filetree with
Fuel, The problems they have to take care are completely different.
Maybe I am not seeing the point.
Cheers.
On Tue, Aug 1, 2017 at 10:25 PM, Eliot Miranda <eliot.miranda(a)gmail.com>
wrote:
> Hi Pablo,
>
> On Tue, Aug 1, 2017 at 12:36 PM, tesonep(a)gmail.com <tesonep(a)gmail.com>
> wrote:
>
>> Hi again,
>> thanks for the clarification, I haven't understood the question
>> initially, but now I think I can answer it.
>>
>> Hermes is only exporting the classes, not objects. so it does not have to
>> handle complex graphs of objects. Basically it serializes the definition of
>> the classes, traits and methods. Then they are loaded in sequence. The only
>> caring during the generation is to serialize first the superclasses, and
>> then the subclasses. There is no way of serializing objects outside the
>> classes, methods, traits and literals in a method.
>>
>
> Classes, traits, methods, literals *are* a graph of objects :-). The
> Parcel architecture, from which Fuel derived its architecture, was designed
> for loading code in VisualWorks. In fact, last time I looked Parcels were
> used only to store code and not as a general purpose (de)serializer.
>
> So the answer is that is not using Parcels or Fuel architecture because
>> they are intended for different uses.
>>
>
> Well, I don't think that's the reason ;-), but fine. I understand that it
> doesn't use this architecture. Thanks.
>
>
>> Also the format itself has no special design or considerations to be fast
>> to generate or fast to read (as It happens with Fuel)
>>
>> Cheers,
>> Pablo
>>
>> On Tue, Aug 1, 2017 at 9:16 PM, Eliot Miranda <eliot.miranda(a)gmail.com>
>> wrote:
>>
>>> Hi Pablo,
>>>
>>> I understand that Hermes has its own format. My question was about
>>> architecture. The Parcels/Fuel architecture is, AFAIA, the best
>>> architecture for binary storage because it is virtual, is fast to load and
>>> cleanly separates loading from initialization. What do I mean?
>>>
>>> - concrete formats like ImageSegment are tied to internal
>>> representations in the VM and do are difficult to read in forever FB
>>> systems and very hard to write in foreign systems. So a virtual format
>>> (like BOSS, Fuel, Parcels, etc) is better but unless done well can be slow
>>>
>>> - a first generation system like BOSS is a flattening of a graph
>>> traversal using a simple grammar. Each phrase is either an object
>>> reference (object id) or an object definition (object is followed by type
>>> info and contents, contents being a sequence of phrases. This is slow to
>>> parse (because each phrase must be decoded), and has invalid intermediate
>>> states (e.g. a Set whose contents are not all present, hence whose external
>>> hash may change during loading, etc). A second generation system like
>>> Parcels and Fuel separates objects from references (nodes from arcs) and
>>> batches object creation, grouping all instances of a given class for bulk,
>>> and hence fast, instantiation. Following my the objects are the
>>> references. So loading has three phases:
>>> - instantiate the objects
>>> - connect the graph by filling in object references
>>> - initialize the objects that require it (e.g. rehash sets)
>>>
>>> Consequently the writer must be two pass, the first pass to collect the
>>> objects in the graph and sort them by class, the second to write the nodes
>>> followed by the references
>>>
>>> So let me ask again, does Hermes use the Parcels/Fuel architecture?
>>>
>>> _,,,^..^,,,_ (phone)
>>>
>>> On Aug 1, 2017, at 11:52 AM, "tesonep(a)gmail.com" <tesonep(a)gmail.com>
>>> wrote:
>>>
>>> Hi Eliot,
>>>
>>> The last version of Hermes, that I have generated today and have to be
>>> tested for real yet, is able to load and save from and to 32 and 64 bits,
>>> handling the conversion. Because the Hermes representation (if we can call
>>> it like that, because is really simple, does not care about the
>>> architecture).
>>>
>>> Hermes is using a custom format completely separated from Fuel or any
>>> other tool.
>>>
>>> This is a consequence of the design of Hermes. Hermes has been designed
>>> to only work as light way of loading code during the bootstrap. So that, it
>>> is heavily coupled with Pharo (it can be changed, for example implementing
>>> another loader / installer) and uses only really core classes.
>>>
>>> Of course it can be extended and used in another Smalltalk dialects, but
>>> I am not sure if the tool can be useful for them, or even for the Pharo
>>> community outside the Pharo bootstrap process.
>>>
>>> Today to be useful outside the bootstrap process, some work has to be
>>> done (perhaps a lot), but mainly new use cases have to be thinked. Once the
>>> Compiler, Monticello or Metacello is available, there is no need for
>>> Hermes. It is only used to generate some binary loadable packages for the
>>> compiler from the source code.
>>>
>>> Again, it was only thinked as a tool to improve the speed during the
>>> bootstrap. However, if somebody has ideas to use it or want to collaborate
>>> are of course welcomed.
>>>
>>> Hermes is actually in Github, because to me is more comfortable to have
>>> it there, but if somebody is really wanting to use it.... we can manage to
>>> have an export process to Smalltalkhub.
>>>
>>> I hope I have clarified a little the idea behind Hermes.
>>>
>>> Maybe you have better ideas of what can we do with it.
>>>
>>>
>>> On Tue, Aug 1, 2017 at 7:59 PM, Eliot Miranda <eliot.miranda(a)gmail.com>
>>> wrote:
>>>
>>>> Hi Guille,
>>>>
>>>> On Aug 1, 2017, at 4:29 AM, Guillermo Polito <guillermopolito(a)gmail.com>
>>>> wrote:
>>>>
>>>>
>>>>
>>>> On Tue, Aug 1, 2017 at 12:57 PM, philippe.back(a)highoctane.be <
>>>> philippe.back(a)gmail.com> wrote:
>>>>
>>>>> Massive.
>>>>>
>>>>> What is in the super small image?
>>>>> Is Hermes going to be a generic binary content loader?
>>>>>
>>>>
>>>> There is still work to do in this front.
>>>> - Hermes only works for 32bits format. We should adapt it to 64 bits
>>>> (immediate floats and so on...)
>>>> - There is no format validation. We should add one for safety.
>>>>
>>>>
>>>> Will Hermes be able to save on 32-bits and load on 64-bits and vice
>>>> verse?
>>>>
>>>> Does Hermes use the Parcels/Fuel architecture of saving nodes, grouped
>>>> by class, followed by the arcs?
>>>>
>>>> If yes to both of these, are you willing to keep it in Monticello and
>>>> collaborate with the Squeak & Cuis communities in developing Hermes?
>>>>
>>>>
>>>>
>>>>> Phil
>>>>>
>>>>> On Aug 1, 2017 12:36, "Stephane Ducasse" <stepharo.self(a)gmail.com>
>>>>> wrote:
>>>>>
>>>>>> Hi Pavel
>>>>>>
>>>>>> This is super excellent! IMPRESSIVE. An image without the compiler and
>>>>>> a reloadable compiler.
>>>>>> Super cool.
>>>>>>
>>>>>> Stef
>>>>>>
>>>>>>
>>>>>> On Tue, Aug 1, 2017 at 11:57 AM, Pavel Krivanek
>>>>>> <pavel.krivanek(a)gmail.com> wrote:
>>>>>> > Hello,
>>>>>> >
>>>>>> > we are checking a huge pull request #177
>>>>>> > (https://github.com/pharo-project/pharo/pull/177) that will change
>>>>>> some
>>>>>> > basics of the bootstrap process:
>>>>>> >
>>>>>> > Now we will bootstrap a smaller image that will not include
>>>>>> compiler/parser.
>>>>>> > Compiler and related packages are exported and loaded using a binary
>>>>>> > exporter named Hermes.
>>>>>> > The compiler is then used to load FileSystem and Monticello. The
>>>>>> rest of the
>>>>>> > bootstrap process will be the same as before.
>>>>>> > As the result we will have faster bootstrap and better system
>>>>>> modularization
>>>>>> > and possibilities.
>>>>>> >
>>>>>> > It required some modularization efforts:
>>>>>> >
>>>>>> > - simplified initialization scripts
>>>>>> > - Use Zinc converters and encoders instead of FilePathEncoder and
>>>>>> old
>>>>>> > TextConverter
>>>>>> > - Use Stdio instead of FileStream
>>>>>> > - Using File instead of FileSystem
>>>>>> > - Deprecated FileStream & childs (Moved to Deprecated70)
>>>>>> > - Extracted Path classes to their on package: FileSystem-Path
>>>>>> > - Moved OpalEncoders to their own package. They are required by the
>>>>>> runtime
>>>>>> > (not only for compilation)
>>>>>> > - Introduced AsciiCharset in the kernel to answer to #isLetter
>>>>>> #isUppercase
>>>>>> > and so on without requiring full Unicode tables from the beginning
>>>>>> > - Cleaning up a bit the full exception logging infrastructure
>>>>>> (streams,
>>>>>> > transcript, files, stack printing...)
>>>>>> > - Split Ring methods required for system navigation to the
>>>>>> Ring-Navigation
>>>>>> > package
>>>>>> > - Remove usages of #translated in the kernel
>>>>>> > - Refactored the bootstrapping classes to remove duplications
>>>>>> > - Cleaning up dependencies in CompiledMethod>>printOn:
>>>>>> > - fix path printing
>>>>>> >
>>>>>> > We need to merge these changes at once and of course it can cause
>>>>>> some
>>>>>> > conflicts with the existing pull requests or external code. Anyway,
>>>>>> we need
>>>>>> > to merge it as soon as possible.
>>>>>> >
>>>>>> > So please, try to look at the PR and test the resultant image [1]
>>>>>> to avoid
>>>>>> > some major problems.
>>>>>> >
>>>>>> > [1]
>>>>>> > https://ci.inria.fr/pharo/view/7.0/job/70-PR-Check-Load/last
>>>>>> SuccessfulBuild/artifact/bootstrap-cache/Pharo7.0-32bit-9c0691d.zip
>>>>>> >
>>>>>> > Cheers,
>>>>>> > -- Pavel
>>>>>> >
>>>>>>
>>>>>>
>>>> --
>>>>
>>>>
>>>>
>>>> Guille Polito
>>>>
>>>>
>>>> Research Engineer
>>>>
>>>> French National Center for Scientific Research - *http://www.cnrs.fr*
>>>> <http://www.cnrs.fr>
>>>>
>>>>
>>>>
>>>> *Web:* *http://guillep.github.io* <http://guillep.github.io>
>>>>
>>>> *Phone: *+33 06 52 70 66 13 <+33%206%2052%2070%2066%2013>
>>>>
>>>>
>>>
>>>
>>> --
>>> Pablo Tesone.
>>> tesonep(a)gmail.com
>>>
>>>
>>
>>
>> --
>> Pablo Tesone.
>> tesonep(a)gmail.com
>>
>
>
>
> --
> _,,,^..^,,,_
> best, Eliot
>
--
Pablo Tesone.
tesonep(a)gmail.com
Aug. 1, 2017