[Packages] Split-Join in development universe etc

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
35 messages Options
12
Reply | Threaded
Open this post in threaded view
|

[Packages] Split-Join in development universe etc

keith1y
I added Split-Join as a package in the development universe.

This is a small set of functionality, much discussed on the list, which
has not yet gained the notoriety required to make it into 3.10. Making
this an item that can be named as a dependant, should other packages
make use of it this has the benefit of recording its usefulness. It also
means that I/you can write packages so that we can be sure it is loaded
when needed.

I proposed enabling Universes to run arbitrary, or Installer based
scripts, but this is considered somewhat cavalier. So undaunted, and no
less barbaric I have used a PackageInfo-#preamble to load this script!
This has the disadvantage of being hard to maintain and it is working
invisible magic behind the scenes , whereas the script option would have
been visible and manageable.

To use this you will need a PackageInfo-Base which supports preamble
scripts etc. I am not sure if the Monticello in 3.10 can support this
fully (it should do but I haven't tested it).

So in addition I have also uploaded Monticello1.5 ;-) to the package
universe, in some areas it has been a radical makeover of 1.0 This
should now be ready to use in 3.10 now that I have reinstated traits
support.

recent work includes
- fixed monticello configurations
- fixed preambles/postscripts
- fixed browsing of configurations
- wired up load/merge/browse buttons for configurations
- real version numbering 1.2.3b etc
- out of order loading
- doesnt loose methods from packages so easily as 1.0
- support for traits reinstated
- (untested diffs support not expected to work)

The monticello in 3.10 is unique among monticello versions in that I
find it impossible to work around so as to get it to load monticello
1.5, so there is a Monticello15-bootstrap package which loads it in from
source the first time. (Another task which a script would have been
helpful for)

A warning though, there is one significant show stopper bug to catch,
which I havent had time to track down in the past 3 months. When given a
package in which classes change their instVars significantly (i.e in
ways that 1.0 could not handle at all) the class can get corrupted and
that package needs recompiling. We have found this is needed
occassionally (i.e.it is usually signalled by the image crashing)

In spite of this I think that Monticello1.5 is nearly ready to be used
in 3.10. I tried using the old one for a few hours and got very
frustrated with loosing class extensions.

enjoy

Keith




Reply | Threaded
Open this post in threaded view
|

Re: [Packages] Split-Join in development universe etc

Jason Johnson-5
On 8/1/07, Keith Hodges <[hidden email]> wrote:
I added Split-Join as a package in the development universe.

This is a small set of functionality, much discussed on the list, which
has not yet gained the notoriety required to make it into 3.10. Making
this an item that can be named as a dependant, should other packages
make use of it this has the benefit of recording its usefulness. It also
means that I/you can write packages so that we can be sure it is loaded
when needed.


Cool.  This is the double dispatch way that lets you do things like:    #(252 211 203) joinWith: #(255 254) => #(252 255 254 211 255 254 203)
right?


I proposed enabling Universes to run arbitrary, or Installer based
scripts, but this is considered somewhat cavalier. So undaunted, and no
less barbaric I have used a PackageInfo-#preamble to load this script!
This has the disadvantage of being hard to maintain and it is working
invisible magic behind the scenes , whereas the script option would have
been visible and manageable.


Why?  Why is a script needed to add the methods from your class?


In spite of this I think that Monticello1.5 is nearly ready to be used
in 3.10. I tried using the old one for a few hours and got very
frustrated with loosing class extensions.

enjoy

Keith


Losing class extensions?  You mean star methods?



Reply | Threaded
Open this post in threaded view
|

Re: [Packages] Split-Join in development universe etc

Damien Cassou-3
In reply to this post by keith1y
Hi Keith,

it sounds really cool. Does it load on 3.9 too or only on 3.10? If
yes, my next dev images will include your Monticello1.5. If not, I
will have more work.

Thank you for your work

Bye

2007/8/1, Keith Hodges <[hidden email]>:

> I added Split-Join as a package in the development universe.
>
> This is a small set of functionality, much discussed on the list, which
> has not yet gained the notoriety required to make it into 3.10. Making
> this an item that can be named as a dependant, should other packages
> make use of it this has the benefit of recording its usefulness. It also
> means that I/you can write packages so that we can be sure it is loaded
> when needed.
>
> I proposed enabling Universes to run arbitrary, or Installer based
> scripts, but this is considered somewhat cavalier. So undaunted, and no
> less barbaric I have used a PackageInfo-#preamble to load this script!
> This has the disadvantage of being hard to maintain and it is working
> invisible magic behind the scenes , whereas the script option would have
> been visible and manageable.
>
> To use this you will need a PackageInfo-Base which supports preamble
> scripts etc. I am not sure if the Monticello in 3.10 can support this
> fully (it should do but I haven't tested it).
>
> So in addition I have also uploaded Monticello1.5 ;-) to the package
> universe, in some areas it has been a radical makeover of 1.0 This
> should now be ready to use in 3.10 now that I have reinstated traits
> support.
>
> recent work includes
> - fixed monticello configurations
> - fixed preambles/postscripts
> - fixed browsing of configurations
> - wired up load/merge/browse buttons for configurations
> - real version numbering 1.2.3b etc
> - out of order loading
> - doesnt loose methods from packages so easily as 1.0
> - support for traits reinstated
> - (untested diffs support not expected to work)
>
> The monticello in 3.10 is unique among monticello versions in that I
> find it impossible to work around so as to get it to load monticello
> 1.5, so there is a Monticello15-bootstrap package which loads it in from
> source the first time. (Another task which a script would have been
> helpful for)
>
> A warning though, there is one significant show stopper bug to catch,
> which I havent had time to track down in the past 3 months. When given a
> package in which classes change their instVars significantly (i.e in
> ways that 1.0 could not handle at all) the class can get corrupted and
> that package needs recompiling. We have found this is needed
> occassionally (i.e.it is usually signalled by the image crashing)
>
> In spite of this I think that Monticello1.5 is nearly ready to be used
> in 3.10. I tried using the old one for a few hours and got very
> frustrated with loosing class extensions.
>
> enjoy
>
> Keith
>
>
>
>
>


--
Damien Cassou

Reply | Threaded
Open this post in threaded view
|

Re: [Packages] Split-Join in development universe etc

keith1y
Damien Cassou wrote:
> Hi Keith,
>
> it sounds really cool. Does it load on 3.9 too or only on 3.10? If
> yes, my next dev images will include your Monticello1.5. If not, I
> will have more work.
>
> Thank you for your work
>
>  
Hi damien, I am using MC1.5 :-) in 3.8 and 3.10, so... 3.9 should work.

Keith


Reply | Threaded
Open this post in threaded view
|

Re: [Packages] Split-Join in development universe etc

Lex Spoon-3
In reply to this post by keith1y
Keith Hodges <[hidden email]> writes:
> I added Split-Join as a package in the development universe.

What does it do?  You do not say.


> I proposed enabling Universes to run arbitrary, or Installer based
> scripts, but this is considered somewhat cavalier. So undaunted, and
> no less barbaric I have used a PackageInfo-#preamble to load this
> script! This has the disadvantage of being hard to maintain and it is
> working invisible magic behind the scenes , whereas the script option
> would have been visible and manageable.

The development package universe should be a place where we work
together.  The above does not suggest a working-together sort of
attitude.


Can you say what is wrong with Package Universes dependencies, that
you need to apparently add a new kind of dependencies?  What is it
that you want to happen in preamble scripts?


-Lex


Reply | Threaded
Open this post in threaded view
|

Re: [Packages] Split-Join in development universe etc

Jason Johnson-5
In reply to this post by Jason Johnson-5
Keith, did you miss my questions? :)

On 8/4/07, Jason Johnson <[hidden email]> wrote:
On 8/1/07, Keith Hodges <[hidden email]> wrote:
I added Split-Join as a package in the development universe.

This is a small set of functionality, much discussed on the list, which
has not yet gained the notoriety required to make it into 3.10. Making
this an item that can be named as a dependant, should other packages
make use of it this has the benefit of recording its usefulness. It also
means that I/you can write packages so that we can be sure it is loaded
when needed.


Cool.  This is the double dispatch way that lets you do things like:    #(252 211 203) joinWith: #(255 254) => #(252 255 254 211 255 254 203)
right?


I proposed enabling Universes to run arbitrary, or Installer based
scripts, but this is considered somewhat cavalier. So undaunted, and no
less barbaric I have used a PackageInfo-#preamble to load this script!
This has the disadvantage of being hard to maintain and it is working
invisible magic behind the scenes , whereas the script option would have
been visible and manageable.


Why?  Why is a script needed to add the methods from your class?


In spite of this I think that Monticello1.5 is nearly ready to be used
in 3.10. I tried using the old one for a few hours and got very
frustrated with loosing class extensions.

enjoy

Keith


Losing class extensions?  You mean star methods?




Reply | Threaded
Open this post in threaded view
|

Re: [Packages] Split-Join in development universe etc

keith1y
Jason Johnson wrote:
>  
>
>
>
>     Cool.  This is the double dispatch way that lets you do things
>     like:    #(252 211 203) joinWith: #(255 254) => #(252 255 254 211
>     255 254 203)
>     right?
>
yes thats the one.

>
>
>         I proposed enabling Universes to run arbitrary, or Installer
>         based
>         scripts, but this is considered somewhat cavalier. So
>         undaunted, and no
>         less barbaric I have used a PackageInfo-#preamble to load this
>         script!
>         This has the disadvantage of being hard to maintain and it is
>         working
>         invisible magic behind the scenes , whereas the script option
>         would have
>         been visible and manageable.
>
>
>
>     Why?  Why is a script needed to add the methods from your class?
>
Because those methods are in a change set with discussion etc. managed
mantis. Loaded as per

Installer mantis ensureFix: 4874.

>
>         In spite of this I think that Monticello1.5 is nearly ready to
>         be used
>         in 3.10. I tried using the old one for a few hours and got very
>         frustrated with loosing class extensions.
>
>
>     Losing class extensions?  You mean star methods?
>
yes, there are two types of class extensions supported by monticello.
'*' prefixed extensions and '*' prefixed and '-override' suffixed method
categories.

Having monticello preserve the integrity of packages which either use
these, or have these used on them is difficult, but I think it is possible.

When monticello is not reliably supporting these extensions I would have
to have an image specifically for managing each package. I.e. to ensure
that the package I was managing was not over-ridden, and all packages
that it extends are currently loaded.

Now the monticello 1.5 ;-) orphanage keeps hold of methods and classes
which extend packages not currently loaded, and loading an overridden
method, loads the original, then the override, so that searching for the
original on saving should work.

cheers

Keith

Reply | Threaded
Open this post in threaded view
|

Re: [Packages] Split-Join in development universe etc

Jason Johnson-5
Ok, thanks for you answers (comments below)

On 8/7/07, Keith Hodges <[hidden email]> wrote:

yes thats the one.


Cool, I like that one.

Because those methods are in a change set with discussion etc. managed
mantis. Loaded as per

Installer mantis ensureFix: 4874.


Wouldn't it be best to get this fix loaded into the Montecello repository as a proper change, so that the Universe just has to point at the new version?

Personally I see Monticello as a change repository like CVS, SVN, etc. (but better), and Universes as the "apt-get" system debian has.  I don't think the apt-get system automatically picks anything up, it only gets what has been configured for the set it is working on ( e.g. Stable, Unstable, etc.).  Now those sets may be programatically updated, but the apt-get system itself doesn't (afaik anyway) and imo shouldn't do it.

For me personally, maintaining this separation of concerns makes it much easier to understand the systems then if everything can do everything.


Reply | Threaded
Open this post in threaded view
|

Re: [Packages] Split-Join in development universe etc

keith1y

>
>
>     Installer mantis ensureFix: 4874.
>
>
>
> Wouldn't it be best to get this fix loaded into the Montecello
> repository as a proper change, so that the Universe just has to point
> at the new version?
>
Of course it would be best, but this is a kernel extension, which is
under the control of the release team, not I.

I discovered that, while waiting for such things to to be integrated
into the kernel, I have found myself writing my code to be as generic as
possible instead.

As an example: I find myself writing code which avoids using split/join
until split/join is a generically available feature. This may be a long
wait for it to be added to 3.10, but it will never be added to 3.9, 3.8
or 3.7 so.

If I keep on doing this, it means that all efforts to improve the kernel
are wasted, because even if I write a kernel improvement, I am
conditioned by the working context to not use such extensions until they
are deemed acceptable  by the consensus, which in the case of "Message
eating Null", or Gorans name space improvements is probably never.

This has been bugging me for a while so, I figure the only way I can see
to get around this is to legitimize the idea of a kernel-patch in the
universe (which formalizes which versions the patch is applicable to)
and have it managed properly in mantis, i.e. feedback discussion. new
versions etc.

With this in place I feel that I can then get on and use it without
shame. If it is found that lots of essential packages make use of that
patch then this would be a good case for getting it included by the
release team.

just my 2p

Keith




Reply | Threaded
Open this post in threaded view
|

Re: [Packages] Split-Join in development universe etc

Jason Johnson-5
On 8/7/07, Keith Hodges <[hidden email]> wrote:

Of course it would be best, but this is a kernel extension, which is
under the control of the release team, not I.


Ah right, of course.  *bonk self*.

If I keep on doing this, it means that all efforts to improve the kernel
are wasted, because even if I write a kernel improvement, I am
conditioned by the working context to not use such extensions until they
are deemed acceptable  by the consensus, which in the case of "Message
eating Null", or Gorans name space improvements is probably never.


I was under the impression that now is the best time ever to get needed things into the image.  The "Message eating null" and namespaces are big controversial things that can't be ignored once present.  But this package seems like a "no-brainer" since it's just method adds and they put in something that seems glaringly missing from Squeak at the moment.  If you have tests and things you should still try I would say, there might still be time.
 
This has been bugging me for a while so, I figure the only way I can see
to get around this is to legitimize the idea of a kernel-patch in the
universe (which formalizes which versions the patch is applicable to)
and have it managed properly in mantis, i.e. feedback discussion. new
versions etc.


So another feature in a place it's not expected due to social issues.  :)  But I see where you are coming from.  I think we should first try to get it in this release if there is still time.  Does anyone have an issue with this patch?


Just as an aside, is it not possible to have an MC package that contains only extension methods?


Reply | Threaded
Open this post in threaded view
|

Re: [Packages] Split-Join in development universe etc

Colin Putney

On Aug 7, 2007, at 10:00 PM, Jason Johnson wrote:

> I was under the impression that now is the best time ever to get  
> needed things into the image.  The "Message eating null" and  
> namespaces are big controversial things that can't be ignored once  
> present.  But this package seems like a "no-brainer" since it's  
> just method adds and they put in something that seems glaringly  
> missing from Squeak at the moment.  If you have tests and things  
> you should still try I would say, there might still be time.

I wouldn't call it a no-brainer. In fact, if it was up to me, I  
wouldn't add these methods to the base image, for two reasons:

1. They're not idiomatic Smalltalk. If you need to join a collection  
of strings into a single string with a separator it's easy to do with  
#streamConents: and #do:separatedBy:. If you find you're doing it so  
often that you want something more succinct, that's a code smell.

2. The base image should be getting smaller, not bigger. Split-join  
can live quite well as an external package.

I've been asked about the lack of #join: a few times by people coming  
to Smalltalk from Ruby or Python. They were incredulous that such a  
fundamental thing was missing. But in Smalltalk it's not fundamental  
- Smalltalk is object-oriented, not string-oriented.

Colin


Reply | Threaded
Open this post in threaded view
|

Re: [Packages] Split-Join in development universe etc

Andreas.Raab
Colin Putney wrote:

> I wouldn't call it a no-brainer. In fact, if it was up to me, I wouldn't
> add these methods to the base image, for two reasons:
>
> 1. They're not idiomatic Smalltalk. If you need to join a collection of
> strings into a single string with a separator it's easy to do with
> #streamConents: and #do:separatedBy:. If you find you're doing it so
> often that you want something more succinct, that's a code smell.
>
> 2. The base image should be getting smaller, not bigger. Split-join can
> live quite well as an external package.
>
> I've been asked about the lack of #join: a few times by people coming to
> Smalltalk from Ruby or Python. They were incredulous that such a
> fundamental thing was missing. But in Smalltalk it's not fundamental -
> Smalltalk is object-oriented, not string-oriented.

+1 on all accounts.

Cheers,
   - Andreas

Reply | Threaded
Open this post in threaded view
|

Re: [Packages] Split-Join in development universe etc

keith1y
In reply to this post by Colin Putney

>  were incredulous that such a fundamental thing was missing. But in
> Smalltalk it's not fundamental - Smalltalk is object-oriented, not
> string-oriented.
>
> Colin
>
. This implementation of split/join does not operate on strings, it
operates on collections of objects

. It is no less idiomatic than some of the more esoteric methods in
collection

. The whole point of putting something like this into the kernel is to
raise the level of abstraction a bit. In doing so it is totally possible
that some other code somewhere else can use this more succinct form and
the net image size is reduced.

For example: notice the tidy use of readable smalltalk and typical
idioms in NetNameResolver-readDecimalByteFrom: and #addressFromString:

regards

Keith


Reply | Threaded
Open this post in threaded view
|

Re: [Packages] Split-Join in development universe etc

keith1y
In reply to this post by Jason Johnson-5

> I was under the impression that now is the best time ever to get
> needed things into the image.  The "Message eating null" and
> namespaces are big controversial things that can't be ignored once
> present.
But in actual fact in these two cases they CAN be ignored once present.

However I happen to think that it would be useful if they were present,
Null in particular.

For example I use Object-#log as a handle to a ProcessLocalLog instance
which plugs in to the logging technology of your choice (toothpick
/simple log etc). In moving towards the kernel image ideal, all of the
Transcript stuff in the core could be ripped out and use "self log
kernel: message" instead, the base implementation of which can return
Null if no logging package is loaded.

As an excercise I think that it is interesting that if you cant get two
or three methods of the importance and usefullness of split and join
into the image (and btw unless I am mistaken there is no existing idiom
for split) then you cant get anything in there, unless of course you
happen to be the one in charge.

cheers

Keith

Reply | Threaded
Open this post in threaded view
|

Re: [Packages] Split-Join in development universe etc

Jason Johnson-5
In reply to this post by Colin Putney
On 8/8/07, Colin Putney <[hidden email]> wrote:

I wouldn't call it a no-brainer. In fact, if it was up to me, I
wouldn't add these methods to the base image, for two reasons:

1. They're not idiomatic Smalltalk. If you need to join a collection
of strings into a single string with a separator it's easy to do with
#streamConents: and #do:separatedBy:. If you find you're doing it so
often that you want something more succinct, that's a code smell.


Well, the interesting thing about this package is that it joins any collection with any other collection, it's not just strings.

Wanting code to be concise is code smell?  If you meant adding a method to collections that only joins strings is a code smell then ok, but otherwise.... well I strongly disagree to say the least.

2. The base image should be getting smaller, not bigger. Split-join
can live quite well as an external package.


Well, it's a good point that the image should get smaller, but perhaps by using this reoccurring pattern it would actually get Smaller.  Someone would have to check and see.

I've been asked about the lack of #join: a few times by people coming
to Smalltalk from Ruby or Python. They were incredulous that such a
fundamental thing was missing. But in Smalltalk it's not fundamental
- Smalltalk is object-oriented, not string-oriented.

Colin


Reply | Threaded
Open this post in threaded view
|

Re: [Packages] Split-Join in development universe etc

Jason Johnson-5
In reply to this post by keith1y
On 8/8/07, Keith Hodges <[hidden email]> wrote:

> I was under the impression that now is the best time ever to get
> needed things into the image.  The "Message eating null" and
> namespaces are big controversial things that can't be ignored once
> present.
But in actual fact in these two cases they CAN be ignored once present.


Of course they can't.  We put things in to be used, so once these two things are in people will start using them and then everyone else will run into it while working in the image.

However I happen to think that it would be useful if they were present,
Null in particular.

For example I use Object-#log as a handle to a ProcessLocalLog instance
which plugs in to the logging technology of your choice (toothpick
/simple log etc). In moving towards the kernel image ideal, all of the
Transcript stuff in the core could be ripped out and use "self log
kernel: message" instead, the base implementation of which can return
Null if no logging package is loaded.


And after suggesting we can just ignore these classes, here comes a suggestion to start using it in Object! :)  That's not a bad idea about logging, but in this case I think about what other places do.  In Pier you can have persistence, or you can turn it off by setting NullPersistence.  That is, of course, a "message eating null" class but it is explicit.  If they replaced that with "Null", then things get a little les clear, no?

I'm not yet convinced that this comes up enough to be a kernel class.  Of course one can always code in ways to *make* something come up a lot, but with current usage I can think of about 3 places in the whole image it comes up, and each is made more clear imo by having an explicit class.

As an excercise I think that it is interesting that if you cant get two
or three methods of the importance and usefullness of split and join
into the image (and btw unless I am mistaken there is no existing idiom
for split) then you cant get anything in there, unless of course you
happen to be the one in charge.

cheers

Keith


No need to take it personal, the jury is still out on these things (even the join/split that I thought most people would like).  But saying "oh just put it in, you can totally ignore it once it's in!" is definitely not the way to get votes imo.


Reply | Threaded
Open this post in threaded view
|

Re: [Packages] Split-Join in development universe etc

keith1y
 
>
> And after suggesting we can just ignore these classes, here comes a
> suggestion to start using it in Object! :)
fair point. :-)

> That's not a bad idea about logging, but in this case I think about
> what other places do.  In Pier you can have persistence, or you can
> turn it off by setting NullPersistence.  That is, of course, a
> "message eating null" class but it is explicit.  If they replaced that
> with "Null", then things get a little les clear, no?
In this particular case, it is not appropriate to use Null instead of
NullPersistence, because NullPersistence still does something, well a
lot of things actually. It is not a true Null, its a 'manage your data
but in the image only'  provides the default 'manage your data'
implementation for many functions. When using the
Pier-PersistencyManager to switch between persistency schemes, switching
from PRMagmaPersistency to PRNullPersistency requires actions to pull
the data in from the db into memory in order for NullPersistency to be
selected. In some cases the PRNullPersistency simply reflects back
double dispatch ed requests, whereas its subclasses do something (see
#realizeKernel). PRNullPersistency way of "doing nothing" is to Null's
way of "doing nothing", as a Mirror is in comparison to a Black Hole,
they just dont work the same way.

If we do it the other way around, and implement a "clear", "specific"
NullLogger class, then we have added a class to the image that has only
one use. The next requirement for a Null class has no choice but to
implement its own bespoke solution. If we use Null as the NullLogger
then, we have a choice.
> I'm not yet convinced that this comes up enough to be a kernel class.
I think it could do if you are ripping things out, since it might become
an option for replacing those ripped out things.
I would also like to argue for the inclusion of #askFor: as another aid
for interacting with items that are optionally present.
> Of course one can always code in ways to *make* something come up a
> lot, but with current usage I can think of about 3 places in the whole
> image it comes up, and each is made more clear imo by having an
> explicit class.
>
>     for split) then you cant get anything in there, unless of course you
>     happen to be the one in charge.
>
Just a little dig at the process that has continued to demonstrate that
democracy doesn't seem to work in terms of pushing innovations, but
appears to favour the status quo
> No need to take it personal.
As a suggestion for 3.11+ my proposal is to provide the tool for users
to specify, packages, fixes/changesets, removals. With such a tool, we
ask community members to lay out their own road maps of items they would
like to see in the release. For example: kernel-events-logging-solution,
kernel-streams-replaced-with-nile, nile-streams-backward-compatibility,
openGL-rendering, exupery -support, morphic3, system-editor,
atomic-monticello etc etc.

This encourages forks of 3.10 as each person can design their own idea
of 3.11p (p for personal) and in their working environment develop the
pieces that they wish to contribute.

Ralph and Edgar really didn't like this multiple-forks idea, however the
point I think that was missed is, that if all the forks and pieces of
fork are defined in the same build tool, then they can be designed with
integration in mind. The aim of forking is not to go off to develop your
own squeak, but to be able to manage your branch of innovation in such a
way as to be able to contribute it back into the main stream in the mid
to long term, and to have it potentially visible, and potentially
programmed into the release schedule (via the unstable branch) so that
others in their personal-unstable-build-based-branches can integrate
their pieces with yours.

I tried using a wiki for this tool in order to promote collaborative
working, but people did not seem to take to the idea. So instead I
propose using a monticello package(s) to specify the parts/dependencies
and the build processes. Doing it this way gives us the versioning, and
merging tools of monticello to collaboratively design the release build
processes.

Then we collate a 3.11a, from the contributed roadmap ideas, into a
stable and an unstable build process, and individually we can work on
the pieces, until each piece is in a state that is ready to move from
the unstable build into the stable build. Pieces that are not yet ready
at the end of a given release-time-box, can simply be passed into the
next release unstable build process. When the relase-time-box is
completed for a release 3.11a-stable gets nominated as 3.11b, and only
bug fixes are accepted. Meanwhile 3.12a begins adopting the unused
pieces from the 3.11a-unstable branch into a revised roadmap definition.

Thus bug-fix integration becomes just one piece of the process, rather
than consuming the whole effort as it seems to now. This piece can be
delegated to part of the team, while there are other proactive projects
are in progress.

just a few of my thoughts, and at the moment I have no time to work on
this for at least a month.

best regards

Keith














Reply | Threaded
Open this post in threaded view
|

Re: [Packages] Split-Join in development universe etc

Andreas.Raab
In reply to this post by Jason Johnson-5
Jason Johnson wrote:
> Well, the interesting thing about this package is that it joins any
> collection with any other collection, it's not just strings.

It's really just strings. You're getting confused by the (sorry to say
that) poorly written code. It uses <SequenceableCollection> joinUsing:
<delimiter> which looks very general at first glance but once you dig
into it you'll notice that it really ought to be <delimiter> join:
<Collection> and that really only String is a meaningful delimiter here.
The implementation as it is creates a lot of clutter by doing it the
other way around and then (needlessly) double-dispatching into Character
and String. Besides which the code is very poorly formatted and not
documented at all(there isn't even a single comment anywhere despite
some highly unusual patterns). Not the kind of stuff I like to see in
the kernel.

> Wanting code to be concise is code smell?  If you meant adding a method
> to collections that only joins strings is a code smell then ok, but
> otherwise.... well I strongly disagree to say the least.

Concise can mean different things. If it means a bloated collection
interface to accommodate every single person's pet extensions then I
think that stinks. And that's exactly what we've seen over the last
years - ever-increasing amounts of partially overlapping functionality
none of which is widely used and only makes it more difficult to find
the few truly useful methods. Split for example, is for all practical
purposes completely subsumed by findTokens: so why do we need split in
addition to findTokens?

Cheers,
   - Andreas


Reply | Threaded
Open this post in threaded view
|

Re: [Packages] Split-Join in development universe etc

Göran Krampe
Hi!

[SNIP]

>> Wanting code to be concise is code smell?  If you meant adding a method
>> to collections that only joins strings is a code smell then ok, but
>> otherwise.... well I strongly disagree to say the least.
>
> Concise can mean different things. If it means a bloated collection
> interface to accommodate every single person's pet extensions then I
> think that stinks. And that's exactly what we've seen over the last
> years - ever-increasing amounts of partially overlapping functionality
> none of which is widely used and only makes it more difficult to find
> the few truly useful methods. Split for example, is for all practical
> purposes completely subsumed by findTokens: so why do we need split in
> addition to findTokens?
>
> Cheers,
>    - Andreas

I agree with Andreas here and my only comment is that renaming methods
(and using deprecation procedures of course) to a better name is on the
other hand a good thing to do - my guess is that people often don't find
findTokens: because neither of the two words "find" and "tokens" are
likely to be used when searching in method finder for example.

When it comes to "holy cows" like Collection for example there are a
multitude of aspects to consider:

- Backwards compatibility, worth breaking?
- Deprecation procedure, easy to cope with if we indeed change something?
New names likely to be found etc?
- ANSI and/or similarity with other Smalltalks, worth "doing as the
others" or worth doing it differently?
- Minimalism vs usefulness, keeping the standard protocols small but
powerful and not adding methods that are very seldom used (they can be
kept in extension packages).
- Quality. Changes in these classes need to be rock solid. And yes, if
they don't even have method comments then sorry, I would reject them on
that basis ALONE, because then the author surely hasn't tested or thought
it through enough if he can't bother to even write some small comments.

And while on the subject I still think #removeAll (my own pet Collection
addition that got shot down by some people a few years back) would be
useful :)

And finally - we probably do need a Collection hierarchy
overhaul/cleanup/improvement - but that should be a careful project. I am
not even convinced yet that Traits is a "really useful good thing" (given
discussions I have followed - no personal experience yet though) - I was
as enthusiastic as everyone when Nathanael first did his presentation at
OOPSLA a few years beack - but I (as I presume Andreas too) also would
like to see some solid concincing use of them.

They sound nice in theory, but so does a lot of things. In my experience I
am more and more favouring simpler solutions to problems that involve
fewer components and relations - even if they do indeed break a few
"golden rules" of OO or programming in general (like for example avoiding
redundancy like the plague or not allowing a sinle line of UI code into
domain objects etc).

Oops, this post turned longer than planned - sorry.

regards, Göran



Reply | Threaded
Open this post in threaded view
|

Re: [Packages] Split-Join in development universe etc

Edgar J. De Cleene



El 8/9/07 5:32 AM, "Göran Krampe" <[hidden email]> escribió:

> I still think #removeAll (my own pet Collection
> addition that got shot down by some people a few years back)

Göran :

Nice see you again on list.

If you have Collection additions not in current 3.10, I wish know.
I could consult with Ralph and maybe have into Squeak again.

I bet several masters have nice things on his computers unknown to many of
us, is time to show, discuss and share.


Cheers.

Edgar



12