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
May 2010
- 103 participants
- 1644 messages
Re: [Pharo-project] Problem in Pharo 1.1 (Igor?) : You have reached the size limit of the changes file.
by David T. Lewis
On Fri, May 14, 2010 at 09:58:57PM +0300, Igor Stasenko wrote:
> On 14 May 2010 04:27, David T. Lewis <lewis(a)mail.msen.com> wrote:
> > On Fri, May 14, 2010 at 02:33:38AM +0300, Igor Stasenko wrote:
> >> 2010/5/14 Mariano Martinez Peck <marianopeck(a)gmail.com>:
> >> >
> >> >
> >> > On Thu, May 13, 2010 at 8:26 PM, St??phane Ducasse
> >> > <stephane.ducasse(a)inria.fr> wrote:
> >> >>
> >> >> mariano
> >> >>
> >> >> i just released a fix could you stress the system?
> >> >
> >> > wiiiiiii
> >> >
> >> > My .changes is now 36MB. It seems to work ok.
> >> >
> >> Don't climb too high , failing would be painfull :)
> >
> > Actually you should keep climbing! The address mapping needs to
> > do strange things on the 32MB boundaries for backward compatibility
> > with the original 32MB address mapping. So keep loading those
> > Seaside packages until you get to at least 150MB or so, just be
> > to sure it keeps working over 32MB -> 64MB -> 96MB -> 128MB ...
> >
>
> Isn't it would be wiser to do a simple numerical tests, instead of
> manually tossing bunch of code into the .changes?
Of course numerical tests are needed, which is why I provided the
tests in ExpandedSourceFileArrayTest.
I'm sure that Pharo will pass all those tests. But the test that
did not pass was a real user adding to a real changes file, which
triggered a side effect unrelated to the numerical conversion. So
I would have to say that skipping the crude manual test was not
wiser in this case.
Dave
May 17, 2010
Re: [Pharo-project] [Metacello] Managing Pharo external packages with Metacello, please read!
by Miguel Enrique Cobá Martinez
El dom, 16-05-2010 a las 17:28 +0200, Mariano Martinez Peck escribió:
> Hi folks. We have been discussing a lot what to do with the Metacello
> configurations of all projects and MetacelloRepository.
> We want several things:
>
> - Have an specific catalog of the working and tested packages/projects
> for each Pharo release (1.0, 1.1, etc).
> - Be able to have a hudson server running and testing such
> configurations.
> - Unified way to load a project.
>
> For such objectives, we propose the following scheme:
>
> 1) We create a squeaksource repository called
> Pharo10MetacelloRepository
> 2) All the Metacello configurations that are known and tested to work
> perfect in Pharo1.0, are copied to such repository. (this takes 2
> minutes)
> 3) Now, we have the problem of WHICH version from the conf class
> should be the one that loads and works in Pharo 1.0. So, once you
> copied the configuration, then you have to implement a class side
> method "load" that loads the exact version that should work in
> Pharo1.0. This version may not be the last. And you already may have
> defined "load" to load the last version. In such case, you can just
> change it for the version in the Pharo10MetacelloRepository.
> Otherwise, we can use another message. Give us your opinion.
>
> So the idea is that all developers/maintainers of Metacello
> configurations, do that and publish it. With this, if you want to know
> which projects work on Pharo 1.0 you just browser
> Pharo10MetacelloRepository, load the repository you want, and you know
> that just doing "ConfigurationOfXXX" load will do the job.
>
> In addition to this, we are able to have a hudson server that every XX
> time, it scans the repository, and for each project it tries to load
> it and report if there is a problem. We can even make that "load"
> loads also the tests and make Hudson to run the tests. Or if you want
> we can use another message than load.
>
> So...this is just an idea. But we need feedback and hear opinions.
> Because Pharo 1.1 will be soon and would be great to have this already
> working for Pharo 1.0.
>
> Thanks
>
> Mariano
I was thinking about the "folders" to store copies of ConfigurationOfXXX
for a given release. I think that this will have problems, for example
for the simplest package that load fine in 3 consecutive release we will
have exactly 3 copies of the ConfigurationOfXXX package (not that the
disk space is a problem). On the other side, if a package has 19
versions for a given release (lets say RFB has 19 version methods in the
ConfigurationOfXXX for Pharo 1.0), then when Pharo 2.0 is released, a
copy of it will be made. This copy will be full, having the 19 version
methods, or you just take the last version method. Also, what about the
pre/post do its, they will likely be similar or exactly equal between
releases of Pharo.
If you delete the methods, you also lost the history and the opportunity
that new users can learn or use the previous versions.
Some time ago I proposed the idea that Metacello should have tags to
mark that a version method has been tested in a given fork/release. As
the time pass, the tags in a method will grow to mark the version has
been tested on.
But for this to work, Metacello or the tools (I would prefer Metacello)
must honor this tags and before loading the code in a given image by
comparing what image is being installed on.
Lets put an example:
1. Initial creation of the configuration for package Package for Pharo
1.0 uploaded to MetacelloRepository:
ConfigurationOfPackage>>baseline01
"initial baseline"
ConfigurationOfPackage>>version01: spec
<version: '0.1'>
spec for: #common do: [
spec blessing: #release.
spec worksIn: 'Pharo1.0'
... ].
2. A new version for Pharo 1.0 (lets say a bug fix):
ConfigurationOfPackage>>version02: spec
<version: '0.2'>
spec for: #common do: [
spec blessing: #release.
spec worksIn: 'Pharo1.0'
... ].
3. A new Pharo release is made, no changes to the package are needed,
that is, it works correctly in Pharo1.0 and Pharo 1.1
ConfigurationOfPackage>>version03: spec
<version: '0.3'>
spec for: #common do: [
spec blessing: #release.
spec worksIn: #( 'Pharo1.0' 'Pharo1.1' )
... ].
At this point the ConfigurationOfPackage has four methods: baseline and
three versions. Also, before loading, Metacello checks the worksIn:
list against a standard release string in the image is working on. If
it match it install the package. That is, if I start with a Pharo1.1
image and load the configuration, the only possible candidate version
to install is the 0.3, because is the only one marked to work in Pharo1.1.
4. A port to Squeak 5 is made. This likely will need a new baseline
because will need squeak specific packages to be included
(compatibility packages) and also maybe a Pharo compatibility package
will be made. Anyway, a new baseline indicating new packages
relationships will be made:
ConfigurationOfPackage>>baseline02
"second baseline, it accounts for install in Pharo and Squeak"
ConfigurationOfPackage>>version04: spec
<version: '0.4'>
spec for: #common do: [
spec blessing: #release.
spec worksIn: #( 'Pharo1.0' 'Pharo1.1' 'Squeak5.0' )
... ].
spec for: #squeak do: [
... ].
spec for: #pharo do: [
... ].
At this point the ConfigurationOfXXX is capable of install the last
version in Squeak and Pharo.
If I start on Squeak 4.0 then even if I load the
ConfigurationOfPackage, no package will be installed because nobody has tested this.
If I start on Squeak 5.0 only version 0.4 can be installed.
If I start on Pharo 1.0 versions 0.1, 0.2, 0.3 and 0.4 can be installed
If I start on Pharo 1.3 no package will be installed
5. Nobody updates the configuration for the Squeak 6.0 and 7.0 releases
but new versions are created for Pharo 1.3 and Pharo1.4. The code no longer works in Pharo 1.0 and Pharo1.1
ConfigurationOfPackage>>baseline08
"second baseline, it accounts for install in Pharo and Squeak"
ConfigurationOfPackage>>version09: spec
<version: '0.9'>
spec for: #common do: [
spec blessing: #release.
spec worksIn: #( 'Pharo1.3' 'Pharo1.4' )
... ].
spec for: #pharo do: [
... ].
6. Installing on Squeak 8 is again supported together with support for Squeak 7.0:
ConfigurationOfPackage>>baseline04
"third baseline, it accounts for install in Pharo and Squeak"
ConfigurationOfPackage>>version10: spec
<version: '1.0'>
spec for: #common do: [
spec blessing: #release.
spec worksIn: #( 'Pharo1.3' 'Pharo1.4' 'Squeak7.0' 'Squeak8.0' )
... ].
spec for: #squeak do: [
... ].
spec for: #pharo do: [
... ].
So the tags come and go as the support for given forks and releases are
tested.
Different versions of the Package package can work in different forks
and in different releases of those forks.
It is always the job of the interested parties to add support (that is
version methods and baselines, or simply tags to the worksIn: list) for
a package in a given combination.
What do you think?
Cheers
--
Miguel Cobá
http://miguel.leugim.com.mx
May 17, 2010
Re: [Pharo-project] [squeak-dev] Re: Problem with variable capture in blocks or ? #7532
by Eliot Miranda
On Sun, May 16, 2010 at 3:32 PM, Andreas Raab <andreas.raab(a)gmx.de> wrote:
> Hi Ken -
>
> Very interesting. Looks like an issue with OutOfScopeNotification. The
> problem appears to be that this code:
>
> "..." [ :a | a ].
> "..." a.
>
> generates an OutOfScopeNotification that is being suppressed in workspaces
> (I'm not exactly sure why that is). This is of course is interesting because
> of the highly unusual situation of a temp shadowing a global instead of
> another temp / ivar. For example, this wouldn't compile:
>
> | a |
> [ :a | a ].
>
> But stranglely, this does:
>
> [ :Object | Object ].
>
> so your example code is roughly equivalent to running:
>
> b := [ :Object | Object ].
> c := b value: Object.
>
> When you run this line by line it works 'as expected' and when you run it
> as a single doIt you get the result of c being a "[closure] in
> UndefinedObject>>DoIt" due to the OutOfScopeNotification.
>
> Hope this explains the issue - as for how to fix it, I have no clue :-)
>
Yes, the bug is that Encoder>>encodeVariable:sourceRange:ifUnknown: doesn't
continue from a caught OutOfScopeNotification by answering the ifUnknown:
action. Instead it returns the out-of-scope block temp. This is a rather
serious compiler bug that I'd left unfixed because it only bites in
workspaces (apologies) and I didn't have a small example to analyse before
(thanks Ken!). The code generated is actually equivalent to
b := [ :a | a ].
c := b value: <temp 0>.
Since there aren't any temps, temp 0 is top of stack, which just happens to
be the closure just created by the preceding bytecode. e.g. look at
bytecode 49 in the following:
a := 4. b := [ :a | a ]. c := b value: a. { a. b. c } thisContext method
symbolic
The fix is simple. When an OutOfScopeNotification is caught the Encoder
should still answer what ever it should for an out of scope variable. In
Encoder>>encodeVariable:sourceRange:ifUnknown: the statements
(varNode isTemp and: [varNode scope < 0]) ifTrue: [
OutOfScopeNotification signal ifFalse: [ ^self notify: 'out of scope'].
].
^ varNode
should read
(varNode isTemp and: [varNode scope < 0]) ifTrue:
[^OutOfScopeNotification signal
ifTrue: [action value]
ifFalse: [self notify: 'out of scope']].
^varNode
Find attached:
!Encoder methodsFor: 'encoding' stamp: 'eem 5/16/2010 17:33'!
encodeVariable: name sourceRange: range ifUnknown: action
| varNode |
varNode := scopeTable
at: name
ifAbsent:
[(self lookupInPools: name
ifFound: [:assoc | varNode := self global: assoc name: name])
ifTrue: [varNode]
ifFalse: [^action value]].
range ifNotNil:
[name first canBeGlobalVarInitial ifTrue:
[globalSourceRanges addLast: { name. range. false }]].
(varNode isTemp and: [varNode scope < 0]) ifTrue:
[^OutOfScopeNotification signal
ifTrue: [action value]
ifFalse: [self notify: 'out of scope']].
^varNode! !
P.S. this is probably applicable to any Squeak bytecode compiler (including
eToys). The only change in my closure compiler from Andreas' 2003 version
was changing "name first isUppercase" to "name first canBeGlobalVarInitial".
P.P.S. Again Ken, thanks for a comprehensible example. It always bit me in
huge doits I was using to analyse the entire system's compiled methods, and
invariably crashed the VM. I never took the time to isolate the bug, I just
fixed the doit and continued. Turns out to be very simple.
best
Eliot
> Cheers,
> - Andreas
>
>
>
> On 5/16/2010 12:35 PM, Ken Causey wrote:
>
>> Well, it's nothing new but this one has stumped me:
>>
>> http://bugs.squeak.org/view.php?id=7532
>>
>> Initially I (and Frank) thought the reporter was mistaken until we
>> understood that the problem shows up when you execute the main code all
>> in one do-it. I've since modified the original report to make this
>> clearer.
>>
>> So here it is:
>>
>> a := 4.
>> b := [ :a | a ].
>> c := b value: a.
>>
>> If you SELECT ALL OF THIS AND EXECUTE IT ALL AT ONE TIME (crucial
>> detail). The result is that a is 4, b is a BlockClosure, and c is a
>> BlockClosure not 4 as expected. Execute each statement separately and c
>> is 4.
>>
>> Alternately, from a suggestion from jmckeon, if you specify a different
>> symbol for the block argument:
>>
>> a := 4.
>> b := [ :d | d ].
>> c := b value: a.
>>
>> when executed all at one time works as you would expect: a is 4, b is a
>> BlockClosure, and c is 4. (and d is nil)
>>
>> So what's up?
>>
>> Ken
>>
>>
>>
>>
>
>
May 17, 2010
Re: [Pharo-project] Managing Pharo external packages with Metacello, please read!
by Miguel Enrique Cobá Martinez
Sent before finish it, sorry
El dom, 16-05-2010 a las 09:14 -0700, Eliot Miranda escribió:
> Hi Mariano,
>
>
> I think Andreas' recent post to squeak-dev is most cogent o this
> topic:
>
I don't see why.
Lets see, Andreas said:
"While looking into Metacello I also spent some time at the Pharo
Metacello repository on Squeaksource. There are many interesting things
to be said about it, both good and bad. Good things about it are that
it's community maintained. Everyone can update everyone else's
contributions and although that's not generally done, it offers a
community approach to making sure things work. Something that for
example both Universes and Squeakmap lack completely. What's problematic
about the repository on the other hand is that for one thing one needs
to unconditionally trust the code even before one has even decided to
install it (this by far my biggest complaint about Metacello)."
I don't buy this, how is this different than loading a package
(Seaside, RFB, whatever) from SqueakSource in my image. Unless I browse
the full code in SqueakSource (slow as hell), I don't have any
guarantees that the code doesn't does a true become: false in some
initialization method somewhere. The same applies to the
ConfigurationOfXXX packages. The advantage of loading it to your image
is that at least you can use a real environment to analyze the code. If
you are using the loader to update your critical mission deployment,
well, given the current security foundations of Smalltalk, you're
betting to the wrong horse. If you want more security is a matter of
signing the package in Squeaksource somehow and checking the signature
on loading in the image (like every reasonable linux distro does
currently on installing packages), or using some kind of sandbox for
loading untrused code. But that is completely other issue and has
nothing to do with the Metacello way of work. In fact, Metacello it
could be enhanced to check some kind of signature before loading and
then the trust problem will be real targeted.
"Also, I
don't think that a single repository is a feasible option in the long
term - it seems to me that supporting the cross-product of image and
package versions is going to be problematic before too long. And of
course browsing repositories with several dozen of packages to find what
you need isn't exactly fun either."
Of course, nobody denies that, and in fact is an issue that has been
discussed several times before in this list. Check the Loader code that
is being worked on. It searches, installs, and is easier to write than
directly use ConfigurationOfXXX messages.
"However, the problems can be turned on their head, and that's actually
pretty insightful. Here's the basic idea: What if, instead of having a
single repository for all image versions with separate packages for each
config, we would instead have a single package simply called
Configurations in the trunk?
That Configurations package would contain all the "supported"
configurations for Squeak (I'll get to that in a minute). The package
would be community-maintained, just like any other package in trunk
development process. This addresses the trust issues with Metacello,
since the package has the same level of trust that all the other
packages in a Squeak release have; it has been developed using the same
principles."
Won't work, because not everybody works on Squeak, in fact, most
ConfigurationOfXXX have been created and tested first on Pharo. The
idea Andreas propose is to have a Squeak configuration and Pharo a
Pharo configuration, that very likely will be a hell of copy & paste of
methods. The good thing of having separate ConfigurationOfXXX packages
in a neutral repository (MetacelloRepository) is that everybody can add
methods (one for each version and for each one of Squeak and Pharo if
necessary) to a only one Configuration. What you propose is to forget
that there are users of a package in both camps and that your solution
propose that the maintainer create two or more configuration packages
in distinct repositories (one for Squeak in trunk repo and one for
Pharo in MetacelloRepository). This is not funny. Also, this just add
other package to the base image, a package that will change a lot
between different Squeak releases. Squeak 5 will have a package with 10
configurations, Squeak 6 will have a package with 45 configurations.
The idea of core package or base package is that the package is not
changing a lot between releases. Current ConfigurationOfXXX only needs
Gofer or Installer in the base image. Maybe a future Pharo release will
have Gofer and Loader in the base image but Loader doesn't grow
unrestricted between Pharo releases. The MetacelloRepository will do.
"What that gives us is a mechanism by which we suddenly can include
Omnibrowser, Seaside, Magma, FFI and anything else people can come up
with in Squeak without having to preload it in the shipping image."
This is funny, I haven't realised that to this day it is imposible to
have a Pharo Core image without packages installed by default. Good to
know that this will be possible soon with this new Configurations package.
"What
it also means is that we can start removing packages from the image,
replacing them with the proper configurations for how to load them back.
What it means is that somebody with a new application (be that
Stephane's Muo app, Hillaire's Dr. Geo, or Josh's OpenCL demo) can ask
for the configuration to be part of the next Squeak release, thereby
contributing *directly* to that Squeak version."
And this is really what I don't understand of the Squeak fellows, why,
why should someone *ask* someone (people or board or institution) for
permission to add a package to a released Squeak. Why? Why should I
wait for the next release for my package to be *accepted*? This is
non-sense. The current state of affairs permit me, even now that Pharo
1.0 has been released, to release my own package *aimed* on Pharo1.0 by
just testing that works and publishing my ConfigurationOfXXX in the
MetacelloRepository. The proposed solution is just plain wrong and
completely "Squeakish" (lets have everything in the image)
"Most importantly, however, is that we as the community can decide what
we feel we want to support and what not. "
What you base your judgements on to conclude this. The community decide
what ConfigurationOfXXX is created, tested and maintained or supported.
"To do that, I'm proposing to create a status of "Community Supported
Package" in Squeak. What is that? A community supported package is a
piece of software where we feel this is an important/interesting/novel
package that should ship with this Squeak version. A community supported
package can be loaded in a 'one-click' process directly from within the
image. A community supported package is a package where we provide
assurance that the package has been tested for this release."
How is this different from the current #released, #stable, #development
tags you can use in Metacello to mark the status level of a given
package in a given released Pharo or Squeak version?
"However, that status does not come for free. In return for achieving
this status, the software needs follow the rules for community supported
packages, which (at least) should include the following:
* No conflicts. Neither class names nor -override categories. The
rationale is that all community supported packages can be loaded
together without creating conflicts."
This is an artificial restriction. Debian and derived ones and Red Hat
and derived ones distros permit to install conflicting packages from
the same universe without problems. You see, is the decision of the
user and not the maintainer or distro packager what to install. For
example you can't install (well you can, but you shouln't most times)
Sendmail at the same time that Exim or Postfix. They are conflicting
packages and the system only warns you about the conflicts. But the
system permits you install them if you want. The same applies to the
overrides. If I want to install two packages that have overrides over
the same methods that is my problem. The system should only warn me and
let me do what I want.
"* Tests mandatory. A community supported package MUST have tests. The
rationale is that since we provide the guarantee that the package has
been tested, we need to ensure that testing can be automated to the
maximum extent possible. It doesn't mean 100% coverage but *some*
meaningful set of tests need to be provided or else we can't say if we
broke it in the latest update."
This is good no matter the package system on hand. But this is also an
artificial restriction. A package can work (and for a lot of people can
be useful) even if no single test is provided. Would you denied them
the posibility of install the package in your image. This only will
push users away from your image
"4. Provide a better installer than these awful doIts for Metacallo."
This is the job of the tools, as Dale has said from the beginning. And
there are tools to simplify the install of package both in a workspace
doit or with GUI
"5. Establish a test server to automatically verify the community
standards for supported packages (i.e., load packages randomly, ensure
no conflicts, run tests, report results)."
This is something also being worked on since a while. A Hudson server has been proposed for this.
"At this point, there is another clearly defined way to contribute to
Squeak even if you're not a core developer: Develop your software,
provide a configuration, ensure your software adheres to the community
standards."
But this already exists, or we live in different worlds?
So, what is really new or advantageous in this proposal? I really don't see it.
--
Miguel Cobá
http://miguel.leugim.com.mx
May 17, 2010
Re: [Pharo-project] Managing Pharo external packages with Metacello, please read!
by Miguel Enrique Cobá Martinez
El dom, 16-05-2010 a las 09:14 -0700, Eliot Miranda escribió:
> Hi Mariano,
>
>
> I think Andreas' recent post to squeak-dev is most cogent o this
> topic:
>
I don't see why.
Lets see, Andreas said:
"While looking into Metacello I also spent some time at the Pharo
Metacello repository on Squeaksource. There are many interesting things
to be said about it, both good and bad. Good things about it are that
it's community maintained. Everyone can update everyone else's
contributions and although that's not generally done, it offers a
community approach to making sure things work. Something that for
example both Universes and Squeakmap lack completely. What's problematic
about the repository on the other hand is that for one thing one needs
to unconditionally trust the code even before one has even decided to
install it (this by far my biggest complaint about Metacello)."
I don't buy this, how is this different than loading a package
(Seaside, RFB, whatever) from SqueakSource in my image. Unless I browse
the full code in SqueakSource (slow as hell), I don't have any
guarantees that the code doesn't does a true become: false in some
initialization method somewhere. The same applies to the
ConfigurationOfXXX packages. The advantage of loading it to your image
is that at least you can use a real environment to analyze the code. If
you are using the loader to update your critical mission deployment,
well, given the current security foundations of Smalltalk, you're
betting to the wrong horse. If you want more security is a matter of
signing the package in Squeaksource somehow and checking the signature
on loading in the image (like every reasonable linux distro does
currently on installing packages), or using some kind of sandbox for
loading untrused code. But that is completely other issue and has
nothing to do with the Metacello way of work. In fact, Metacello it
could be enhanced to check some kind of signature before loading and
then the trust problem will be real targeted.
"Also, I
don't think that a single repository is a feasible option in the long
term - it seems to me that supporting the cross-product of image and
package versions is going to be problematic before too long. And of
course browsing repositories with several dozen of packages to find what
you need isn't exactly fun either."
Of course, nobody denies that, and in fact is an issue that has been
discussed several times before in this list. Check the Loader code that
is being worked on. It searches, installs, and is easier to write than
directly use ConfigurationOfXXX messages.
"However, the problems can be turned on their head, and that's actually
pretty insightful. Here's the basic idea: What if, instead of having a
single repository for all image versions with separate packages for each
config, we would instead have a single package simply called
Configurations in the trunk?
That Configurations package would contain all the "supported"
configurations for Squeak (I'll get to that in a minute). The package
would be community-maintained, just like any other package in trunk
development process. This addresses the trust issues with Metacello,
since the package has the same level of trust that all the other
packages in a Squeak release have; it has been developed using the same
principles."
Won't work, because not everybody works on Squeak, in fact, most
ConfigurationOfXXX have been created and tested first on Pharo. The
idea Andreas propose is to have a Squeak configuration and Pharo a
Pharo configuration, that very likely will be a hell of copy & paste of
methods. The good thing of having separate ConfigurationOfXXX packages
in a neutral repository (MetacelloRepository) is that everybody can add
methods (one for each version and for each one of Squeak and Pharo if
necessary) to a only one Configuration. What you propose is to forget
that there are users of a package in both camps and that your solution
propose that the maintainer create two or more configuration packages
in distinct repositories (one for Squeak in trunk repo and one for
Pharo in MetacelloRepository). This is not funny. Also, this just add
other package to the base image, a package that will change a lot
between different Squeak releases. Squeak 5 will have a package with 10
configurations, Squeak 6 will have a package with 45 configurations.
The idea of core package or base package is that the package is not
changing a lot between releases. Current ConfigurationOfXXX only needs
Gofer or Installer in the base image. Maybe a future Pharo release will
have Gofer and Loader in the base image but Loader doesn't grow
unrestricted between Pharo releases. The MetacelloRepository will do.
"What that gives us is a mechanism by which we suddenly can include
Omnibrowser, Seaside, Magma, FFI and anything else people can come up
with in Squeak without having to preload it in the shipping image."
This is funny, I haven't realised that to this day it is imposible to
have a Pharo Core image without packages installed by default. Good to
know that this will be possible soon with this new Configurations package.
"What
it also means is that we can start removing packages from the image,
replacing them with the proper configurations for how to load them back.
What it means is that somebody with a new application (be that
Stephane's Muo app, Hillaire's Dr. Geo, or Josh's OpenCL demo) can ask
for the configuration to be part of the next Squeak release, thereby
contributing *directly* to that Squeak version."
And this is really what I don't understand of the Squeak fellows, why,
why should someone *ask* someone (people or board or institution) for
permission to add a package to a released Squeak. Why? Why should I
wait for the next release for my package to be *accepted*? This is
non-sense. The current state of affairs permit me, even now that Pharo
1.0 has been released, to release my own package *aimed* on Pharo1.0 by
just testing that works and publishing my ConfigurationOfXXX in the
MetacelloRepository. The proposed solution is just plain wrong and
completely "Squeakish" (lets have everything in the image)
"Most importantly, however, is that we as the community can decide what
we feel we want to support and what not. "
What you base your judgements on to conclude this. The community decide
what ConfigurationOfXXX is created, tested and maintained or supported.
"To do that, I'm proposing to create a status of "Community Supported
Package" in Squeak. What is that? A community supported package is a
piece of software where we feel this is an important/interesting/novel
package that should ship with this Squeak version. A community supported
package can be loaded in a 'one-click' process directly from within the
image. A community supported package is a package where we provide
assurance that the package has been tested for this release."
How is this different from the current #released, #stable, #development
tags you can use in Metacello to mark the status level of a given
package in a given released Pharo or Squeak version?
"However, that status does not come for free. In return for achieving
this status, the software needs follow the rules for community supported
packages, which (at least) should include the following:
* No conflicts. Neither class names nor -override categories. The
rationale is that all community supported packages can be loaded
together without creating conflicts."
This is an artificial restriction. Debian and derived ones and Red Hat
and derived ones distros permit to install conflicting packages from
the same universe without problems. You see, is the decision of the
user and not the maintainer or distro packager what to install. For
example you can't install (well you can, but you shouln't most times)
Sendmail at the same time that Exim or Postfix. They are conflicting
packages and the system only warns you about the conflicts. But the
system permits you install them if you want. The same applies to the
overrides. If I want to install two packages that have overrides over
the same methods that is my problem. The system should only warn me and
let me do what I want.
"* Tests mandatory. A community supported package MUST have tests. The
rationale is that since we provide the guarantee that the package has
been tested, we need to ensure that testing can be automated to the
maximum extent possible. It doesn't mean 100% coverage but *some*
meaningful set of tests need to be provided or else we can't say if we
broke it in the latest update."
This is good no matter the package system on hand. But this is also an
artificial restriction. A package can work (and for a lot of people can
be useful) even if no single test is provided. Would you denied them the posibility of install the package in your image.
There may be some other guidelines that we may want to establish but I'm
trying to keep things simple and only the above two are truly crucial -
what they allow is to ensure that during ongoing trunk development we
will always be able to load all supported packages, run the tests and
see if we broke something horribly.
So the goal of the process is that if we do this right, we should be
able to tell how good (or how bad) a shape we're in regarding the
supported packages when we get to ship date. We should be able to
encourage people who write libraries or apps with, for, and in Squeak,
to contribute directly to the next release by providing a configuration,
their code, and the tests so that we can keep things running. In return,
we'll help with porting, provide backwards compatibility as required etc.
Code that we want to move out of the default image would be moved into a
configuration so people can load it if desired, and it remains a part of
Squeak instead of rotting away. Since the Configuration package is small
and has no dependencies, there's no problem to include that in
core/basic images and allow people to tailor custom images from there.
Concretely, I'm seeing the following steps as necessary:
1. Establish the status and the rules for "Community Supported Packages".
2. Create the "Configurations" package and start populating it with some
examples (Omnibrowser, FFI, Magma ...) to see how that 'feels' like.
3. Encourage people to bring their packages up to 'community standards'
and include them in the Configurations.
From here, there are a few more things that we should do before we can
ship the next Squeak version:
4. Provide a better installer than these awful doIts for Metacallo.
5. Establish a test server to automatically verify the community
standards for supported packages (i.e., load packages randomly, ensure
no conflicts, run tests, report results).
At this point, there is another clearly defined way to contribute to
Squeak even if you're not a core developer: Develop your software,
provide a configuration, ensure your software adheres to the community
standards. That's it. You've just made the next Squeak release a little
better :-)
--
Miguel Cobá
http://miguel.leugim.com.mx
May 17, 2010
Re: [Pharo-project] ConfigurationOfExternalWebBrowser working in Squeak and Pharo trunk
by Sean P. DeNigris
Stéphane Ducasse wrote:
>
> if this is based on applescript you get the answer :)
>
It looks like Applescript is only necessary for pre-unix (OS X?) Macs, so
this could be removed? Also, Andreas mentioned that even Applescript could
be rewritten without its own plugin and use FFI
(http://wiki.squeak.org/squeak/1414.diff?id=17)
Sean
--
View this message in context: http://forum.world.st/ConfigurationOfExternalWebBrowser-working-in-Squeak-a…
Sent from the Pharo Smalltalk mailing list archive at Nabble.com.
May 17, 2010
Re: [Pharo-project] Managing Pharo external packages with Metacello, please read!
by Sean P. DeNigris
I posted this on Squeak-dev @
http://forum.world.st/Community-Supported-Packages-td2217473.html#a2218970:
I eagerly read all the discussions and offer my humble contribution (posting
to Pharo too, because I think the benefit is cross-platform):
I'm overjoyed that we are digging in and making packages easily loadable (or
clear that they are not). I don't know what I'll do with all the hours I
currently spend fishing for working versions ;-)
Overall the goals seem to be (put best in a post from Mariano Peck):
* have a specific catalog of working and tested projects for each platform
(Pharo 1.0, Pharo 1.1, Squeak 4.0, Squeak 4.1...)
* Be able to have a hudson server running and testing such configurations.
* Unified way to load a project.
* (I added this one) have the least amount of effort for the developer
The Pharo and Squeak versions both sound intriguing. I suggest one addition
that would magnify all of the above, and eliminate the accidental complexity
that versioning is adding to the mix:
***Extend Metacello specs to account for platform version (e.g. Pharo 1.0
vs. 1.1)***
In effect, since we are distilling the platforms down to the pure good stuff
- each version is a whole different platform; from a developer's
perspective, it's the same process porting to different forks and porting to
new versions of the same fork - either way, incompatible interfaces.
A hypothetical developer perspective:
- Porting from Squeak to Pharo: I'm a developer with a project that
works on Squeak 4.0. Now, I decide to port it to Pharo 1.0. So I crank up
a new image and... wait, how do I load it? I don't have a ConfigOf. So I
either alter the Config #squeak to #squeakCommon, or load manually. Now, it
doesn't load because there are classes that don't exist in Pharo, so one by
one, I move the platform-specific code into Platform.squeak and
Platform.pharo.
- Pharo 1.0 to Pharo 1.1: Now, Pharo 1.1 is released, with even
fewer classes - tight core, yay! So I go through the same process, but now
I have *three platforms* - Pharo 1.0, 1.1, and Squeak 4.0.
User perspective: simple - I want to have *one* place to go where I know
that all the packages there will work in my image, and cut out all the junk.
And, if I'm feeling adventurous, I'd like *one* place to see what else is
out there, but very clear that it's not up to community standards - for
inspiration, to port to my platform, or to steal code :)
Once you have Metacello handling the versions
* the developers go from fork*version configs to one config
* the version problem is handled
* all other features of the current plans are preserved
This is what I envision at the intersection of what's been proposed and
Metacello versioning:
* Configs are either:
- in one central location; it won't matter because we went from
projects*forks*versions Configs to just 1*projects.
- or, kept with the projects they reference e.g. pick
squeaksource.com, and every project repository keeps its own ConfigurationOf
(might diminish the community involvement if read-only repos)
>Andreas
(http://forum.world.st/Community-Supported-Packages-td2217473.html#a2217473)
>Good things about it are that
>it's community maintained. Everyone can update everyone else's
>contributions and although that's not generally done, it offers a
>community approach to making sure things work.
* Each platform (fork + version combo) (via hudson server? I don't know
much about them) tries to load each Config from the central repository. If
it meets the community standards (no conflicts, tests, etc.), either the
Config is copied to that platform/fork's list of compatible Configs, or a
reference is added.
* If it doesn't load, another list could be kept with the result of the
attempt to load, so anyone who wants to use or port it has a heads up on the
status.
So:
* we don't need a separate Config for fork*version platforms. Right now,
it seems the implementation and behavior are collapsed - we don't care where
the actual Configs are (at least in the Pharo plan), as long as we know
which ones work. Which resolves Andreas's concern with a single repository:
> Andreas
(http://forum.world.st/Community-Supported-Packages-td2217473.html#a2217473)
> Also, I don't think that a single repository is a feasible option
in the long
> term - it seems to me that supporting the cross-product of image
and
> package versions is going to be problematic before too long. And
of
> course browsing repositories with several dozen of packages to
find what
> you need isn't exactly fun either.
and eliminated manual fiddling with the Config file:
> Pharo proposal @
http://groups.google.com/group/metacello/browse_thread/thread/42c088d58acfb…
> [developers will copy configs that work in Pharo x.y to]
PharoxyMetacelloRepository, then add class>>load for Pharo 1.0 version.
* there is still one place to install for a user's platform
* you really do get "a standard way to load the packages on such repository:
just send the message load" because the spec already knows whether it will
work on that platform
* you still get a Pharo [and Squeak] release with the correct repository as
default (already added in Monticello Browser) - this is your list you copied
over
Thanks.
Sean
--
View this message in context: http://forum.world.st/Managing-Pharo-external-packages-with-Metacello-pleas…
Sent from the Pharo Smalltalk mailing list archive at Nabble.com.
May 17, 2010
Re: [Pharo-project] Managing Pharo external packages with Metacello, please read!
by Eliot Miranda
2010/5/16 Mariano Martinez Peck <marianopeck(a)gmail.com>
>
>
> 2010/5/16 Eliot Miranda <eliot.miranda(a)gmail.com>
>
>
>> I think Andreas' recent post to squeak-dev<http://lists.squeakfoundation.org/pipermail/squeak-dev/2010-May/150658.html>is most cogent o this topic:
>>
>>
>
> why ?
>
Read it and you'll see. But the most important thing is that there is one
place to find all the external packages which are "supported", or part of
the base distribution but not bundled. It is in the image so it can be
updated to keep it current. I think its better than the external repository
(doesn't force a single repository). But read Andreas' message. He
motivates the idea very well; cogently no less :)
>
>
>>
>>> Thanks
>>>
>>> Mariano
>>>
>>> _______________________________________________
>>> Pharo-project mailing list
>>> Pharo-project(a)lists.gforge.inria.fr
>>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>>
>>
>>
>>
>> _______________________________________________
>> Pharo-project mailing list
>> Pharo-project(a)lists.gforge.inria.fr
>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>
>
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
May 16, 2010
Re: [Pharo-project] [Pharo-users] [ANN] Traits installer/uninstaller utility
by Johan Fabry
On 16 May 2010, at 19:30, Tudor Girba wrote:
>> My philosophy here is to not hide anything from the developer, which is why the Trait is part of the definition. What you see is what you get. Delete the Trait when editing the base class and it goes away. What you see is what you get.
>>
>> So just edit the class as you want to, you can even add new Traits manually. You can always remove the TAMStructuralZoom trait (or any other trait actually) using the traits uninstaller.
>
> I know that, but I was just pointing out that if I change the base class and commit while your code is loaded, I publish unwillingly your trait. So, when your code is loaded I have to be careful to first remove the trait and only afterwards publish my change.
>
> This is a severe limitation and it stems from the Trait definition being tightly coupled with the class definition (both in the model and in the browser).
OK so we are in agreement :-)
--
Johan Fabry
jfabry(a)dcc.uchile.cl - http://dcc.uchile.cl/~jfabry
PLEIAD Lab - Computer Science Department (DCC) - University of Chile
May 16, 2010
Re: [Pharo-project] [Pharo-users] [ANN] Traits installer/uninstaller utility
by Tudor Girba
Hi,
On 16 May 2010, at 19:43, Johan Fabry wrote:
>
> On 16 May 2010, at 03:48, Tudor Girba wrote:
>
>> I took a quick look and it looks interesting.
>
> Thanks :-)
>
>> Just a note for discussion. Executing "AspectMapsUI open" installs
>> the traits. One of your trait extension is adding TAMStructuralZoom
>> to FAMIXClass.
>>
>> Now, when I browse the FAMIXClass, I get this in the browser:
>>
>> -----
>> FAMIXType subclass: #FAMIXClass
>> uses: TAMStructuralZoom
>> instanceVariableNames: 'isInterface'
>> classVariableNames: ''
>> poolDictionaries: ''
>> category: 'Famix-Core'
>> -----
>>
>> There are two problems with this:
>>
>> 1. So, now if I just want to edit the base class, I have to take
>> care and delete the Trait before, because the Trait is part of the
>> definition.
>>
>> This is a limitation of the browser, but we have to pay attention
>> to it.
>
> My philosophy here is to not hide anything from the developer, which
> is why the Trait is part of the definition. What you see is what you
> get. Delete the Trait when editing the base class and it goes away.
> What you see is what you get.
>
> So just edit the class as you want to, you can even add new Traits
> manually. You can always remove the TAMStructuralZoom trait (or any
> other trait actually) using the traits uninstaller.
I know that, but I was just pointing out that if I change the base
class and commit while your code is loaded, I publish unwillingly your
trait. So, when your code is loaded I have to be careful to first
remove the trait and only afterwards publish my change.
This is a severe limitation and it stems from the Trait definition
being tightly coupled with the class definition (both in the model and
in the browser).
Cheers,
Doru
>> 2. If you look in Monticello, the base package (FAMIX-Core in this
>> case) is not dirty, but if you explicitly look for Changes, it gets
>> dirty. I do not know how this could be solved. Perhaps we need
>> extension as first class?
>
> OK this should not happen. I tried to be as close to how the browser
> works when redefining a class (the redefinition even gets recorded
> in changes) because I want to avoid breaking any magic that is going
> on. But apparently I did not succeed completely. If any Monticello
> magicians can tell me what incantation to add I would be most happy
> to oblige!
>
> --
> Johan Fabry
> jfabry(a)dcc.uchile.cl - http://dcc.uchile.cl/~jfabry
> PLEIAD Lab - Computer Science Department (DCC) - University of Chile
>
>
>
>
> _______________________________________________
> Pharo-users mailing list
> Pharo-users(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-users
--
www.tudorgirba.com
"Next time you see your life passing by, say 'hi' and get to know her."
May 16, 2010