Very bad about Squeak in blogosfere

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

Re: Very bad about Squeak in blogosfere

stephane ducasse
Concretely who is willing to do something?
I said that I'm ready to help and now?
else of course we can continue to send emails around....

Stef

Reply | Threaded
Open this post in threaded view
|

RE: Very bad about Squeak in blogosfere

Ivan Tomek
In reply to this post by Blake-5
RE: Very bad about Squeak in blogosfere

Tim/Blake,

Correct me if I am wrong, but the original was not about the people who were developing Squeak. It was about Squeak as such, not the good or bad will of the people who selflessly work on it. Criticism of Squeak is the issue that should be addressed and corrected or confirmed - and some of the contributions did just that.

Ivan

> -----Original Message-----
> From: [hidden email]
> [[hidden email]] On
> Behalf Of Blake
> Sent: Monday, August 13, 2007 2:30 AM
> To: The general-purpose Squeak developers list
> Subject: Re: Very bad about Squeak in blogosfere
>
> tim wrote:
>
> > Gosh we must be such nasty people. I'm amazed anyone has
> anything to
> > do with Squeak  under such awful circumstances. Clearly we must all
> > give up earning a living in order to satisfy this nice
> persons demands.
> >
> > It may have escaped the notice of some people out there that a
> > significant proportion of the major contributors to Squeak actually
> > earn their daily crust by working for the net benefit of the
> > community. That tends to mean that said people have precious little
> > time left over to work on giving away free stuff not
> related to their
> > work. "Free Software" does not mean "free to tell me what
> to do with my time".
>
> This deserves to be re-quoted in full.
>
> There's nothing you can't give away for free that won't turn
> some people into greedy whiners.
>
> Fortunately, I think in most cases we get stone soup.
>
>



Reply | Threaded
Open this post in threaded view
|

Re: An idea, crazy or not? (Re: Very bad about Squeak in blogosfere)

Juan Vuletich-4
In reply to this post by Göran Krampe
Hi Goran,

I'd love to have such a tool! The only thing I'd like to stress is that
in order to be usable by all the forks, it should not rely on too new or
advanced features. And those requeriments should be well understood. For
me to be able to use it, it should not require Monticello, Traits or any
of the advanced browsers. If it turns out to be incompatible with
Morphic 3.0 I'd be glad to adapt or rewrite the UI.

Maybe other forks could have some other restrictions. For example, can
Croquet run Morphic UIs (besides Tweak)?

Cheers,
Juan Vuletich
www.jvuletich.org

[hidden email] wrote:

> Hi all!
>
> (long post, sorry!)
>
> Andreas Raab <[hidden email]> wrote:
>  
>> Colin Putney wrote:
>>    
>>> It's stated a bit harshly, but yeah, that sounds basically accurate. The
>>> amazing thing is that, in spite of all that, Squeak is still such a
>>> wonderful platform to work with. I do use Squeak in production, and
>>> there are very few things I would trade it for.
>>>      
>> Well, yes, but you can't deny that the guy's got a point. The
>> frustration he's expressing is something that everyone has felt over the
>> years. And while there are various plain invalid points in his post
>> (like the fact that Squeak has bugs - I'm *shocked* to hear that of
>> course and would have never started three products if I'd known that ;-)
>> the main emerging point is valid: The lack of quality and maintenance.
>> The problems he cites are all known, some of them even have fixes but
>> there isn't enough traction in the community to make this all come
>>    
> ...
>  
>> together. And of course the forks don't exactly help because we still
>> haven't figured out how to share code across the forks and consequently
>>    
>
> And Andreas continues to describe the problem that I have been thinking
> a bit about during my vacation.
>
> Last night I wrote it up and intended to bounce it around "privately"
> first on selected people, but reading this thread it is so inviting to
> share the idea so what the hell :) Forgive me if this post is long - but
> I want to paint my picture as best I can.
>
> IMO these are our major problems today (we have lots of minor ones too
> and the problems intermix):
>
> 1. More or less anarchy when it comes to leadership of Squeak-dev. The
> board is not taking charge, for a whole range of possible reasons. One
> obvious reason is that the guys elected are really good developers who
> tend to be very busy. Another reason may be that we have different
> expectations on what they should/could be doing. IMPORTANT: I am *not*
> placing any blame though - we are all in this together.
>
> 2. We are now "de facto" living in a highly forked world (Croquet,
> Sophie, Squeak-dev, Spoon, Squeakland, OLPC, yaddayadda...) but we don't
> have tools that support such a world!
>
> 3. The core Squeak is not evolving properly mainly due to the fact that
> most of the core codebase is "abandoned" - or in other words, noone
> feels responsible and/or authoritive to bring it forward.
>
> In short we have "leadership paralysis", a "forked world" and a largely
> "abandoned core". Other problems I missed? Of course! ...but lets ignore
> those for this post.
>
>
> Considering a few measures then:
>
> - Make a new fork with a strong leadership? Hmmm, could help with #1 and
> #3 above but does nothing to improve #2 and would probably be tons of
> work to succeed, and I personally don't have the required time to spend.
> Plus I am a hard core "squeak-dev" member - I don't *want* to fork. :)
>
> - Reshape the organisation of Squeak-dev? Nah, I am sick and tired of
> pulling such work, done just too much of that stuff already over the
> years, and it would possibly help with #1 and #3 (strong leadership) but
> again would not help at all with #2.
>
> So ok, forking is out and reshaping the organisation from the inside is
> out, even though I really would want much more initiative from the board
> in the future - no doubt about that.
>
>
> Hmmm. But what could be done then? Well, after seeing over and over
> again how really good TOOLS can change the way we interact in our
> community (Monticello, SqueakMap, SqueakSource, Universes etc) I tried
> to imagine a new infrastructure that would help with the three problems
> above, in a *natural* way.
>
> Let's look at #1 - the anarchy problem. If we don't try to solve it but
> instead try to *live with it* - what could that mean? The piece that
> suffers mostly from the anarchy is of course the base image. All our
> external packages prosper just fine anyway (kinda). So could we put some
> kind of "supertool" in place to maintain the base image that could be
> made to work *without* strong leadership? I think we can.
>
> What about #2 - the forking problem? Well, imagine this "supertool"
> being written in such a way that it can be used in all major forks - if
> its good and easy to adapt/install it would most probably also *be*
> used. Monticello has already showed this can be done.
>
> So instead of trying *not* to fork, we try to make it very easy to fork
> - or rather *easy to live* in a forked world of Squeak
> images/communities.
>
> But #3 - the rotting core problem? Again, if it was very easy to fix
> stuff in the core, publish these changes without having to ask anyone
> for permission and very easy to cherry-pick such fixes from other people
> - then hopefully the core would again start moving forward. As Andreas
> notes - fixes are sitting inside Croquet and my bet is that they are
> mainly sitting there because it is a bit "too much work" to push them
> out. I am aware of fixes sitting in Gjallar (at least a few) just
> because I didn't feel I had time to fix/prepare them sufficiently etc.
>
>
> So my "daft" idea is:
>
> Let's pull together a good team and make a Supertool that is written to
> be used in all forks that... well, what will it actually *do*? :)
>
>
> 1. Introduce a new kind of source unit - let's call it a Delta. The guys
> working with MC2/Monticello may have lots of noteworthy stuff to share
> about how this kind of thing could look, but I simply want a "changeset"
> for the 21st century. A patch. But a smarter one! The philosophy here
> being that changesets are nice given their simplicity and malleability -
> but they are not so nice in many other respects. But the concept of
> communicating with other developers using the natural "work unit" - a
> "commit" - is quite nice. In MC at least I tend to make too large
> snapshots because let's face it - MC is too slow for small commits -
> given how it works. We just don't suffer because it is so darn slick at
> merging :)
>
> 2. Create the notion of "delta streams". Yes, we had the update stream
> earlier - a sequential flow of changesets. It was kinda nifty, but
> imagine having tons of these streams originating both from larger
> cooperative projects (Croquet, Sophie, Seaside, Gjallar etc) and from
> individual developers ("Andreas Raab's kernel fixes", "Juan's
> refactorings of Morphic" etc). A Delta could appear in several streams
> so Croquet could have a single stream for each release AND multiple
> streams for different kinds of Deltas, like "base image fixes for
> Hedgehog" etc).
>
> 3. Make an efficient but simple storage model for deltas and delta
> streams. Here I am thinking KISS. If a delta could be represented as a
> single gzipped file (enabling dumb servers just like MC does) and a
> stream can be represented by file naming conventions (by a number
> suffix) - then a stream is just a directory or a zip of a bunch of delta
> files. Yes, very similar to gzipped changesets and the update stream. :)
> This enables us to use all "vanilla" tools available for dealing with
> files (http servers, ftp, rsync, email etc).
>
> 4. Make a simple but efficient transport. Let's say we set up a public
> server that syncs such directories of delta files (streams) from tons of
> places. And then offers it to all of us as a simple rsync. Each
> developer (or team) could then use rsync to mirror that mega tree of
> delta files onto our laptops/servers and the tool inside Squeak would
> just need to bother with reading the local filesystem - which makes it
> much more portable across Squeak dialects (and possibly even Smalltalk
> dialects - but let's not go there just yet). This also means we don't
> suffer from servers being down.
>
> 4. Make a simple model of Delta and DeltaStream in Squeak and let it
> mirror the filesystem. Add a simple API to the model á la Keith's
> Installer. Or hey, just enable Installer work with this model.
>
> 5. Make a great Morphic tool to work with them. Perhaps we could even
> rework the changesorter family of tools thus superceding changesets?
>
>
> Ok, imagine this supertool in your image. Imagine that all public
> streams are listed directly in the tool and new ones just "pop up" as
> they are added. Imagine that you can add your own private streams just
> like you can add repositories to sources.list in apt-get (you Debian
> people know what I mean). You can have purely private local streams on
> your harddrive or streams on a shared fileserver in your company/dev
> group, etc.
>
> Now you have this huge flood of Deltas in hundreds of streams at your
> fingertips. How would you use it?
>
> 1. Subscribe to some major streams and configure it to automatically
> load deltas whenever they appear when you press "update".
>
> 2. Set some rules that govern if the tool should just try to load - or
> ask for confirmation based on characteristics of the delta.
>
> 3. Autosubscribe to categories of streams. For example, if a new bug-fix
> stream appears for a package you use a lot - you might want to get it
> autosusbcribed - or again, have the tool ask you.
>
> 4. Of course, easily publish your own streams. We are talking single
> button, no getting permissions etc.
>
> 5. Push fixes to other people's packages as deltas onto a personal
> public fixes-stream. This means it does not matter what package you are
> bug fixing - you can *always* push the fix to your personal public
> fixes-stream and don't need to bother with getting permissions on
> SqueakSource or wherever it came from. This is a very IMPORTANT feature
> and should hopefully put an end to "lost fixes" or "fixes sitting inside
> images".
>
> We have too many fixes out there that just never get published because
> of the "hassle", and sure, someone says "it is very easy to upload to
> Mantis!" - but fixes on Mantis sets expectations on quality,
> documentation, follow up etc. A personal fixes stream like above sets no
> such expectations - it is there for the taking - but that is all.
>
> 6. Pull deltas. Selective cherry picking etc.
>
>
> Important features of Deltas:
>
> - Atomic load of a Delta. Either it loads cleanly or it does not load at
> all, and it ensures this by checking FIRST that everything is in place
> for it to be able to apply cleanly. This should prevent "failed loads"
> and broken images. The actual low level atomicity is another story but
> SystemEditor from MC2 perhaps? I dunno.
>
> - Revertable, if *possible*. A delta can be analyzed to see if it is
> revertable. If it includes doits or class initializations it is in
> theory not revertable, it may be in practice though! It can also be
> marked as DefinitelyNonRevertable.
>
> - A Delta is declarative. Another class should be responsible for
> actually applying them.
>
> - When a Delta is applied to an image we generate a reverse Delta which
> (when applied) will reverse the effects. Since the image may be in
> different states this reverse Delta needs to be constructed when the
> Delta is applied!
>
>
> A Delta contains:
>
> - A Preamble similar to ChangeSets with info fields
> - Developer (name, id, signature etc whatever)
> - Original stream (URL)
> - UUID
> - DefinitelyNotRevertable flag
> - Test doit (a non destructive, non interactive doit that should throw
> an exception in order to prevent loading!)
> - An ordered sequence of Actions, see below.
>
> An example list of different types of Actions are:
>
> - Change method (class name, old method src, new method src)
> - Add method (class name, method src, category name)
> - Remove method (class name, method src, category name)
> - Categorize method (class name, method name, old category name, new
> category name)
>
> - Create class (class name, super class name, definition, category)
> - Delete class (class name)
> - Change superclass of class (class name, old super class name, new
> super class name)
> - Rename class (old class name, new class name)
> - Categorize class (class name, old category name, new category name)
> - Change definition (class name, new definition, old definition)
> - Class comment change (new comment, old comment)
>
> - Class initialization
> - Doit (marked as revertable or not by author!)
>
> Note how these Actions contain "more" info than a ChangeSet - it
> contains information about what it was "before" in the image it
> originates from! The idea is to make Deltas "rich" with info so that we
> can apply them with more smarts.
>
> When applied to an image the Delta is copied to a directory with the
> same name as the image followed by "-applied-deltas". It is also logged
> in changesfile. If the Delta can not be cleanly reverted (based solely
> on its own contents) we generate reverse Deltas and store them in the
> same directory prefixed with "reverse-".
>
> Applying a Delta:
>
> 1. Verify that it can be applied (or signal CanNotApplyException). Do
> this by analyzing Actions and running any Test and see if it throws an
> Exception.
> - It can not be applied *cleanly* if something is "different" from
> expected.
> - It can be applied *dirty* if all changes can be applied in "some
> fashion". For example, a delete operation and the thing to delete is
> already deleted. The reverse Delta will then show this so that a revert
> will not put the thing back in.
> - It can be applied *partially* if just a subset of Actions are applied
> (by choice or since some just can't be applied). The reverse Delta will
> then show what was applied or not.
>
> 2. Verify that it can be reverted cleanly (or signal
> CanNotRevertCleanlyException). Do this by analyzing Actions.
>
> 3. Apply and generate the reverse Delta if needed.
>
> 4. Copy delta and any reverse delta to applied dir.
>
> 5. Log to changes file.
>
> 6. Report package touched (for running unit tests afterward!)
>
>
> What about merging then? Well, the concept here is to be much more
> "loose" when it comes to merging compared to say MC. It was inspired by
> something I read about git (Linus' SCM tool) - it doesn't try to be
> smart - it just tries to do the right thing when it is obvious. In other
> situations it just asks the developer. I think I like this approach. The
> Delta model should be easy enough for all developers to understand. It
> is "just" a changeset/patch after all.
>
> So if I am trying to apply a Delta (or several) and the "before state"
> is not as the Delta expects - we can either cop out, or let it be
> "smart", or just ask the user to decide what to do. BUT... I am not an
> SCM implementor - the MC/MC2 guys can clearly explain to me why/how this
> will not work or amend the idea so that it can work. I gladly admit my
> ignorance. ;)
>
>
> ...ok, enough blabbering. :) Does this sound plausible, useful or just
> plain dumb? Is MC2 already this and much more?
>
> ciao, Göran
>
>
>  


Reply | Threaded
Open this post in threaded view
|

re: that zany blogosphere thing

ccrraaiigg
In reply to this post by Ivan Tomek

Hi Ivan--

> Correct me if I am wrong, but the original was not about the people
> who were developing Squeak. It was about Squeak as such, not the good
> or bad will of the people who selflessly work on it.

     Actually, I think the comment that "the maintainer of the main VM
code publically stated he will do shit unless someone pays him" is
pretty clearly a personal attack.


-C

--
Craig Latta
improvisational musical informaticist
www.netjam.org
Smalltalkers do: [:it | All with: Class, (And love: it)]


Reply | Threaded
Open this post in threaded view
|

RE: that zany blogosphere thing

Ivan Tomek
Hi Craig,

You are right; I didn't have the text in front of me and remembered only
the part. Although I still think that Squeak was the main point, I stand
corrected and understand the feelings expressed in the reactions.

Ivan

-----Original Message-----
From: [hidden email]
[mailto:[hidden email]] On Behalf Of
Craig Latta
Sent: Monday, August 13, 2007 4:15 PM
To: [hidden email]
Subject: re: that zany blogosphere thing


Hi Ivan--

> Correct me if I am wrong, but the original was not about the people
> who were developing Squeak. It was about Squeak as such, not the good
> or bad will of the people who selflessly work on it.

     Actually, I think the comment that "the maintainer of the main VM
code publically stated he will do shit unless someone pays him" is
pretty clearly a personal attack.


-C

--
Craig Latta
improvisational musical informaticist
www.netjam.org
Smalltalkers do: [:it | All with: Class, (And love: it)]



Reply | Threaded
Open this post in threaded view
|

Re: An idea, crazy or not? (Re: Very bad about Squeak in blogosfere)

Jason Johnson-5
In reply to this post by Edgar J. De Cleene
Actually I thought we were already working on this Edgar. :)

On 8/13/07, Edgar J. De Cleene <[hidden email]> wrote:

>
>
>
> El 8/13/07 5:47 AM, "[hidden email]" <[hidden email]> escribió:
>
> > Hi all!
> >
> > (long post, sorry!)
>
> Gorän:
> I cut you post for not doing more long.
> I read and re-read carefully and you put very clear my own in the works
> ideas about the problems you describe and give a possible solution.
>
> Only I wish you know I ready for work with you or any masters joining to the
> Supertool quest.
>
> Awaiting orders !
>
> Cheers.
>
> Edgar
>
>
>
>

Reply | Threaded
Open this post in threaded view
|

RE: that zany blogosphere thing

Ron Teitelbaum
In reply to this post by ccrraaiigg
At some point during the election I made a joke of the gazillion dollar
comments.  I did that because I thought it was funny, and never did I
believe that it was a serious comment.  I do think that we could use more
corporate sponsorship and would like to see some contributors paid for their
work.  (We do see that now with some of the development in Croquet, Sophie
and OLPC ...)  If I added to the fire by my joke and if anyone took that as
serious criticism I apologize.  We have a terrific community and our members
deserve many accolades to go with the gazillion dollars I wish we had to
show our thanks.

Ron Teitelbaum

> -----Original Message-----
> From: Craig Latta
>
>
> Hi Ivan--
>
> > Correct me if I am wrong, but the original was not about the people
> > who were developing Squeak. It was about Squeak as such, not the good
> > or bad will of the people who selflessly work on it.
>
>      Actually, I think the comment that "the maintainer of the main VM
> code publically stated he will do shit unless someone pays him" is
> pretty clearly a personal attack.
>
>
> -C
>
> --
> Craig Latta
> improvisational musical informaticist
> www.netjam.org
> Smalltalkers do: [:it | All with: Class, (And love: it)]
>



Reply | Threaded
Open this post in threaded view
|

re: that zany blogosphere thing

ccrraaiigg

Hi Ron--

     I think your comments were fine (for what it's worth). And that
blogger could have said something very similar and constructive without
being offensive... it was the use of obscenity that was the dead
giveaway. :)


-C

--
Craig Latta
improvisational musical informaticist
www.netjam.org
Smalltalkers do: [:it | All with: Class, (And love: it)]


Reply | Threaded
Open this post in threaded view
|

Re: An idea, crazy or not? (Re: Very bad about Squeak in blogosfere)

Jason Johnson-5
In reply to this post by Juan Vuletich-4
I would urge people thinking about this to look at Darcs [1], [2].
Now, there are 2 things about Darcs that make it nice: (1) cherry
picking and (2) smart dependency mapping.  Smalltalk already has 1
(almost) by way of the change sorter.  And keep in mind that it can
have 2 better then Darcs can because we can ask our system things
Darcs can't because it has to work for things it doesn't understand.

The problem we have with MC imo is that it tries to be a bit too
smart.  A system can be viewed (as Darcs does) as the sum of applying
all it's patches.  When taking this view, coupled with a good
dependency system it is easy for the system to figure out what patches
"stand alone" (e.g. bug fixes).

[1] http://darcs.net/
[2] http://wiki.darcs.net/DarcsWiki/WhyYouWantPatchTheory


On 8/13/07, Juan Vuletich <[hidden email]> wrote:

> Hi Goran,
>
> I'd love to have such a tool! The only thing I'd like to stress is that
> in order to be usable by all the forks, it should not rely on too new or
> advanced features. And those requeriments should be well understood. For
> me to be able to use it, it should not require Monticello, Traits or any
> of the advanced browsers. If it turns out to be incompatible with
> Morphic 3.0 I'd be glad to adapt or rewrite the UI.
>
> Maybe other forks could have some other restrictions. For example, can
> Croquet run Morphic UIs (besides Tweak)?
>
> Cheers,
> Juan Vuletich
> www.jvuletich.org
>
> [hidden email] wrote:
> > Hi all!
> >
> > (long post, sorry!)
> >
> > Andreas Raab <[hidden email]> wrote:
> >
> >> Colin Putney wrote:
> >>
> >>> It's stated a bit harshly, but yeah, that sounds basically accurate. The
> >>> amazing thing is that, in spite of all that, Squeak is still such a
> >>> wonderful platform to work with. I do use Squeak in production, and
> >>> there are very few things I would trade it for.
> >>>
> >> Well, yes, but you can't deny that the guy's got a point. The
> >> frustration he's expressing is something that everyone has felt over the
> >> years. And while there are various plain invalid points in his post
> >> (like the fact that Squeak has bugs - I'm *shocked* to hear that of
> >> course and would have never started three products if I'd known that ;-)
> >> the main emerging point is valid: The lack of quality and maintenance.
> >> The problems he cites are all known, some of them even have fixes but
> >> there isn't enough traction in the community to make this all come
> >>
> > ...
> >
> >> together. And of course the forks don't exactly help because we still
> >> haven't figured out how to share code across the forks and consequently
> >>
> >
> > And Andreas continues to describe the problem that I have been thinking
> > a bit about during my vacation.
> >
> > Last night I wrote it up and intended to bounce it around "privately"
> > first on selected people, but reading this thread it is so inviting to
> > share the idea so what the hell :) Forgive me if this post is long - but
> > I want to paint my picture as best I can.
> >
> > IMO these are our major problems today (we have lots of minor ones too
> > and the problems intermix):
> >
> > 1. More or less anarchy when it comes to leadership of Squeak-dev. The
> > board is not taking charge, for a whole range of possible reasons. One
> > obvious reason is that the guys elected are really good developers who
> > tend to be very busy. Another reason may be that we have different
> > expectations on what they should/could be doing. IMPORTANT: I am *not*
> > placing any blame though - we are all in this together.
> >
> > 2. We are now "de facto" living in a highly forked world (Croquet,
> > Sophie, Squeak-dev, Spoon, Squeakland, OLPC, yaddayadda...) but we don't
> > have tools that support such a world!
> >
> > 3. The core Squeak is not evolving properly mainly due to the fact that
> > most of the core codebase is "abandoned" - or in other words, noone
> > feels responsible and/or authoritive to bring it forward.
> >
> > In short we have "leadership paralysis", a "forked world" and a largely
> > "abandoned core". Other problems I missed? Of course! ...but lets ignore
> > those for this post.
> >
> >
> > Considering a few measures then:
> >
> > - Make a new fork with a strong leadership? Hmmm, could help with #1 and
> > #3 above but does nothing to improve #2 and would probably be tons of
> > work to succeed, and I personally don't have the required time to spend.
> > Plus I am a hard core "squeak-dev" member - I don't *want* to fork. :)
> >
> > - Reshape the organisation of Squeak-dev? Nah, I am sick and tired of
> > pulling such work, done just too much of that stuff already over the
> > years, and it would possibly help with #1 and #3 (strong leadership) but
> > again would not help at all with #2.
> >
> > So ok, forking is out and reshaping the organisation from the inside is
> > out, even though I really would want much more initiative from the board
> > in the future - no doubt about that.
> >
> >
> > Hmmm. But what could be done then? Well, after seeing over and over
> > again how really good TOOLS can change the way we interact in our
> > community (Monticello, SqueakMap, SqueakSource, Universes etc) I tried
> > to imagine a new infrastructure that would help with the three problems
> > above, in a *natural* way.
> >
> > Let's look at #1 - the anarchy problem. If we don't try to solve it but
> > instead try to *live with it* - what could that mean? The piece that
> > suffers mostly from the anarchy is of course the base image. All our
> > external packages prosper just fine anyway (kinda). So could we put some
> > kind of "supertool" in place to maintain the base image that could be
> > made to work *without* strong leadership? I think we can.
> >
> > What about #2 - the forking problem? Well, imagine this "supertool"
> > being written in such a way that it can be used in all major forks - if
> > its good and easy to adapt/install it would most probably also *be*
> > used. Monticello has already showed this can be done.
> >
> > So instead of trying *not* to fork, we try to make it very easy to fork
> > - or rather *easy to live* in a forked world of Squeak
> > images/communities.
> >
> > But #3 - the rotting core problem? Again, if it was very easy to fix
> > stuff in the core, publish these changes without having to ask anyone
> > for permission and very easy to cherry-pick such fixes from other people
> > - then hopefully the core would again start moving forward. As Andreas
> > notes - fixes are sitting inside Croquet and my bet is that they are
> > mainly sitting there because it is a bit "too much work" to push them
> > out. I am aware of fixes sitting in Gjallar (at least a few) just
> > because I didn't feel I had time to fix/prepare them sufficiently etc.
> >
> >
> > So my "daft" idea is:
> >
> > Let's pull together a good team and make a Supertool that is written to
> > be used in all forks that... well, what will it actually *do*? :)
> >
> >
> > 1. Introduce a new kind of source unit - let's call it a Delta. The guys
> > working with MC2/Monticello may have lots of noteworthy stuff to share
> > about how this kind of thing could look, but I simply want a "changeset"
> > for the 21st century. A patch. But a smarter one! The philosophy here
> > being that changesets are nice given their simplicity and malleability -
> > but they are not so nice in many other respects. But the concept of
> > communicating with other developers using the natural "work unit" - a
> > "commit" - is quite nice. In MC at least I tend to make too large
> > snapshots because let's face it - MC is too slow for small commits -
> > given how it works. We just don't suffer because it is so darn slick at
> > merging :)
> >
> > 2. Create the notion of "delta streams". Yes, we had the update stream
> > earlier - a sequential flow of changesets. It was kinda nifty, but
> > imagine having tons of these streams originating both from larger
> > cooperative projects (Croquet, Sophie, Seaside, Gjallar etc) and from
> > individual developers ("Andreas Raab's kernel fixes", "Juan's
> > refactorings of Morphic" etc). A Delta could appear in several streams
> > so Croquet could have a single stream for each release AND multiple
> > streams for different kinds of Deltas, like "base image fixes for
> > Hedgehog" etc).
> >
> > 3. Make an efficient but simple storage model for deltas and delta
> > streams. Here I am thinking KISS. If a delta could be represented as a
> > single gzipped file (enabling dumb servers just like MC does) and a
> > stream can be represented by file naming conventions (by a number
> > suffix) - then a stream is just a directory or a zip of a bunch of delta
> > files. Yes, very similar to gzipped changesets and the update stream. :)
> > This enables us to use all "vanilla" tools available for dealing with
> > files (http servers, ftp, rsync, email etc).
> >
> > 4. Make a simple but efficient transport. Let's say we set up a public
> > server that syncs such directories of delta files (streams) from tons of
> > places. And then offers it to all of us as a simple rsync. Each
> > developer (or team) could then use rsync to mirror that mega tree of
> > delta files onto our laptops/servers and the tool inside Squeak would
> > just need to bother with reading the local filesystem - which makes it
> > much more portable across Squeak dialects (and possibly even Smalltalk
> > dialects - but let's not go there just yet). This also means we don't
> > suffer from servers being down.
> >
> > 4. Make a simple model of Delta and DeltaStream in Squeak and let it
> > mirror the filesystem. Add a simple API to the model á la Keith's
> > Installer. Or hey, just enable Installer work with this model.
> >
> > 5. Make a great Morphic tool to work with them. Perhaps we could even
> > rework the changesorter family of tools thus superceding changesets?
> >
> >
> > Ok, imagine this supertool in your image. Imagine that all public
> > streams are listed directly in the tool and new ones just "pop up" as
> > they are added. Imagine that you can add your own private streams just
> > like you can add repositories to sources.list in apt-get (you Debian
> > people know what I mean). You can have purely private local streams on
> > your harddrive or streams on a shared fileserver in your company/dev
> > group, etc.
> >
> > Now you have this huge flood of Deltas in hundreds of streams at your
> > fingertips. How would you use it?
> >
> > 1. Subscribe to some major streams and configure it to automatically
> > load deltas whenever they appear when you press "update".
> >
> > 2. Set some rules that govern if the tool should just try to load - or
> > ask for confirmation based on characteristics of the delta.
> >
> > 3. Autosubscribe to categories of streams. For example, if a new bug-fix
> > stream appears for a package you use a lot - you might want to get it
> > autosusbcribed - or again, have the tool ask you.
> >
> > 4. Of course, easily publish your own streams. We are talking single
> > button, no getting permissions etc.
> >
> > 5. Push fixes to other people's packages as deltas onto a personal
> > public fixes-stream. This means it does not matter what package you are
> > bug fixing - you can *always* push the fix to your personal public
> > fixes-stream and don't need to bother with getting permissions on
> > SqueakSource or wherever it came from. This is a very IMPORTANT feature
> > and should hopefully put an end to "lost fixes" or "fixes sitting inside
> > images".
> >
> > We have too many fixes out there that just never get published because
> > of the "hassle", and sure, someone says "it is very easy to upload to
> > Mantis!" - but fixes on Mantis sets expectations on quality,
> > documentation, follow up etc. A personal fixes stream like above sets no
> > such expectations - it is there for the taking - but that is all.
> >
> > 6. Pull deltas. Selective cherry picking etc.
> >
> >
> > Important features of Deltas:
> >
> > - Atomic load of a Delta. Either it loads cleanly or it does not load at
> > all, and it ensures this by checking FIRST that everything is in place
> > for it to be able to apply cleanly. This should prevent "failed loads"
> > and broken images. The actual low level atomicity is another story but
> > SystemEditor from MC2 perhaps? I dunno.
> >
> > - Revertable, if *possible*. A delta can be analyzed to see if it is
> > revertable. If it includes doits or class initializations it is in
> > theory not revertable, it may be in practice though! It can also be
> > marked as DefinitelyNonRevertable.
> >
> > - A Delta is declarative. Another class should be responsible for
> > actually applying them.
> >
> > - When a Delta is applied to an image we generate a reverse Delta which
> > (when applied) will reverse the effects. Since the image may be in
> > different states this reverse Delta needs to be constructed when the
> > Delta is applied!
> >
> >
> > A Delta contains:
> >
> > - A Preamble similar to ChangeSets with info fields
> >       - Developer (name, id, signature etc whatever)
> >       - Original stream (URL)
> >       - UUID
> >       - DefinitelyNotRevertable flag
> >       - Test doit (a non destructive, non interactive doit that should throw
> > an exception in order to prevent loading!)
> > - An ordered sequence of Actions, see below.
> >
> > An example list of different types of Actions are:
> >
> > - Change method (class name, old method src, new method src)
> > - Add method (class name, method src, category name)
> > - Remove method (class name, method src, category name)
> > - Categorize method (class name, method name, old category name, new
> > category name)
> >
> > - Create class (class name, super class name, definition, category)
> > - Delete class (class name)
> > - Change superclass of class (class name, old super class name, new
> > super class name)
> > - Rename class (old class name, new class name)
> > - Categorize class (class name, old category name, new category name)
> > - Change definition (class name, new definition, old definition)
> > - Class comment change (new comment, old comment)
> >
> > - Class initialization
> > - Doit (marked as revertable or not by author!)
> >
> > Note how these Actions contain "more" info than a ChangeSet - it
> > contains information about what it was "before" in the image it
> > originates from! The idea is to make Deltas "rich" with info so that we
> > can apply them with more smarts.
> >
> > When applied to an image the Delta is copied to a directory with the
> > same name as the image followed by "-applied-deltas". It is also logged
> > in changesfile. If the Delta can not be cleanly reverted (based solely
> > on its own contents) we generate reverse Deltas and store them in the
> > same directory prefixed with "reverse-".
> >
> > Applying a Delta:
> >
> > 1. Verify that it can be applied (or signal CanNotApplyException). Do
> > this by analyzing Actions and running any Test and see if it throws an
> > Exception.
> >       - It can not be applied *cleanly* if something is "different" from
> > expected.
> >       - It can be applied *dirty* if all changes can be applied in "some
> > fashion". For example, a delete operation and the thing to delete is
> > already deleted. The reverse Delta will then show this so that a revert
> > will not put the thing back in.
> >       - It can be applied *partially* if just a subset of Actions are applied
> > (by choice or since some just can't be applied). The reverse Delta will
> > then show what was applied or not.
> >
> > 2. Verify that it can be reverted cleanly (or signal
> > CanNotRevertCleanlyException). Do this by analyzing Actions.
> >
> > 3. Apply and generate the reverse Delta if needed.
> >
> > 4. Copy delta and any reverse delta to applied dir.
> >
> > 5. Log to changes file.
> >
> > 6. Report package touched (for running unit tests afterward!)
> >
> >
> > What about merging then? Well, the concept here is to be much more
> > "loose" when it comes to merging compared to say MC. It was inspired by
> > something I read about git (Linus' SCM tool) - it doesn't try to be
> > smart - it just tries to do the right thing when it is obvious. In other
> > situations it just asks the developer. I think I like this approach. The
> > Delta model should be easy enough for all developers to understand. It
> > is "just" a changeset/patch after all.
> >
> > So if I am trying to apply a Delta (or several) and the "before state"
> > is not as the Delta expects - we can either cop out, or let it be
> > "smart", or just ask the user to decide what to do. BUT... I am not an
> > SCM implementor - the MC/MC2 guys can clearly explain to me why/how this
> > will not work or amend the idea so that it can work. I gladly admit my
> > ignorance. ;)
> >
> >
> > ...ok, enough blabbering. :) Does this sound plausible, useful or just
> > plain dumb? Is MC2 already this and much more?
> >
> > ciao, Göran
> >
> >
> >
>
>
>

Reply | Threaded
Open this post in threaded view
|

Re: An idea, crazy or not? (Re: Very bad about Squeak in blogosfere)

Edgar J. De Cleene
In reply to this post by Jason Johnson-5



El 8/13/07 4:31 PM, "Jason Johnson" <[hidden email]> escribió:

> Actually I thought we were already working on this Edgar. :)

Yes, but don't tell.
I have enormous respect for Goran and all win if he leads.
Maybe you should contact he off list ....


Very fun I trying to have 3.10 without Monticello , only with MCMczReader
(maybe modifying) for people could load any flavor of Monticello they like.

Or none...

Edgar



Reply | Threaded
Open this post in threaded view
|

Re: Very bad about Squeak in blogosfere

Bakki Kudva
In reply to this post by Klaus D. Witzel
On 8/11/07, Klaus D. Witzel <[hidden email]> wrote:
> Hi Janko,


> something exiting with Squeak :)

Was that a Freudian slip? :)

-bakki

Reply | Threaded
Open this post in threaded view
|

Re: An idea, crazy or not? (Re: Very bad about Squeak in blogosfere)

keith1y
In reply to this post by Juan Vuletich-4
Juan Vuletich wrote:
> Hi Goran,
>
> I'd love to have such a tool! The only thing I'd like to stress is
> that in order to be usable by all the forks, it should not rely on too
> new or advanced features. And those requeriments should be well
> understood. For me to be able to use it, it should not
My immediate thoughts on this is that System Editor could be very useful
for this tool.

It is a standalone piece of code which models changes to the system, be
it adding, removing methods instvars.

When you have it populated you say #commit and it atomically loads the
changes in.

I also think that a populated SystemEditor instance would be capable of
generating its equivalent undo-SystemEditor, before committing.

Ok so it is new technology, but I think it could really give us what we
are looking for, without re-writing something with method definitions,
class definitions etc all over again.

Keith

 

Reply | Threaded
Open this post in threaded view
|

Re: An idea, crazy or not? (Re: Very bad about Squeak in blogosfere)

Brad Fuller-2
In reply to this post by Göran Krampe
Göran,

I'm surprised with the lack of response to your post. Maybe people are letting
it sink in. I think it's a great idea. FMPOV, the tool would be a clean way
for the developer and user to accept bug fixes into his image. Why not make
bug fixes easily available to everyone? It's also a nice way to put a method
around all the fixes just lying there in various forms and places. And, it
seems a nice way to update released images on ftp.squeak.org with proper
fixes - at least the fairly new ones.

The concept and high-level usage is a no-brainer. The tough part is getting it
done.  Since a lot of the work is creating the tool description, and you have
a great handle on that already, I wouldn't be surprised if you've already
started coding.

brad

Reply | Threaded
Open this post in threaded view
|

RE: An idea, crazy or not? (Re: Very bad about Squeak in blogosfere)

Ron Teitelbaum
Hi Brad,

It's not just sinking in that is an issue.  I'm also considering the
practical aspects.  Also I'm not exactly sure how this all fits with
Andreas' suggestion of managing packages outside the context of an official
image.

I can't help seeing the down side to all of this, and I wonder what the
impact will be for those starting out with Squeak.

The issue with too much freedom is that anyone is allowed to break things.
We have enough trouble as it is with class clutter.  Even I tried
(unsuccessfully) to add to Collection.  

So let's say we go with this path and anyone can start a stream.  How does a
user decide which stream to use?  If we have two very good streams (like
Sophie and Croquet) which are changing classes in an incompatible way then
someone's changes are still lost.

I like the idea of making it easier for people to contribute.  Our
discussions earlier about commenting code is really hampered by how
difficult it is to add comments and have those comments included somewhere.


I like the idea of passing the streams or having stream managers, or
something like that, so that there is one official stream per package.  But
of course this really just brings us back to squeak map and away from a
change stream.  I like Andreas' suggestion that we try to support standard
packages for multiple images.

So I guess I was no help but still we need to consider if we have a Ron's
collection stream and nobody hears it does it still make a sound?  

How can we move from what we have now to a place where it is easy for
someone to push quality changes or new code into production?  Can we really
support a free for all collection of change streams, or do we need to stick
with standard packages?  If we agree we need standard packages what do we
gain from a change stream?

Ron Teitelbaum

> -----Original Message-----
> From: Brad Fuller
>
> Göran,
>
> I'm surprised with the lack of response to your post. Maybe people are
> letting
> it sink in. I think it's a great idea. FMPOV, the tool would be a clean
> way
> for the developer and user to accept bug fixes into his image. Why not
> make
> bug fixes easily available to everyone? It's also a nice way to put a
> method
> around all the fixes just lying there in various forms and places. And, it
> seems a nice way to update released images on ftp.squeak.org with proper
> fixes - at least the fairly new ones.
>
> The concept and high-level usage is a no-brainer. The tough part is
> getting it
> done.  Since a lot of the work is creating the tool description, and you
> have
> a great handle on that already, I wouldn't be surprised if you've already
> started coding.
>
> brad



Reply | Threaded
Open this post in threaded view
|

Re: An idea, crazy or not? (Re: Very bad about Squeak in blogosfere)

Igor Stasenko
On 14/08/07, Ron Teitelbaum <[hidden email]> wrote:

> Hi Brad,
>
> It's not just sinking in that is an issue.  I'm also considering the
> practical aspects.  Also I'm not exactly sure how this all fits with
> Andreas' suggestion of managing packages outside the context of an official
> image.
>
> I can't help seeing the down side to all of this, and I wonder what the
> impact will be for those starting out with Squeak.
>
> The issue with too much freedom is that anyone is allowed to break things.
> We have enough trouble as it is with class clutter.  Even I tried
> (unsuccessfully) to add to Collection.
>
> So let's say we go with this path and anyone can start a stream.  How does a
> user decide which stream to use?  If we have two very good streams (like
> Sophie and Croquet) which are changing classes in an incompatible way then
> someone's changes are still lost.
>

The only way then is to remove global system dictionary and make each
package contain own set of globals. So, different versions of classes
with same name can be used for different packages. I see no harm in
this from VM point of view. From dev-s point of view we need to change
dev-tools to support new global values semantics.

A system dictionary is the root of many evil things. I wonder, how
long the community stay victim of this concept, which totally not
suitable for islands/forks development?
A strong decision needed to get rid of it, but once we do this,  then
we freed from many current issues.


--
Best regards,
Igor Stasenko AKA sig.

Reply | Threaded
Open this post in threaded view
|

Re: An idea, crazy or not? (Re: Very bad about Squeak in blogosfere)

Jason Johnson-5
In reply to this post by Ron Teitelbaum
On 8/14/07, Ron Teitelbaum <[hidden email]> wrote:
> Hi Brad,
>
> The issue with too much freedom is that anyone is allowed to break things.
> We have enough trouble as it is with class clutter.  Even I tried
> (unsuccessfully) to add to Collection.

What changes did you make? (if you just want to point me to the thread
about it, that's cool as well)

Thanks,
Jason

Reply | Threaded
Open this post in threaded view
|

Re: An idea, crazy or not?

Colin Putney
In reply to this post by Göran Krampe

On Aug 13, 2007, at 1:47 AM, [hidden email] wrote:

> ..ok, enough blabbering. :) Does this sound plausible, useful or just
> plain dumb? Is MC2 already this and much more?

I won't get into the details, because there's a lot to this proposal  
and I haven't fully absorbed it yet. I will say this though: MC2 is  
meant to be a versioning substrate that can accomodate several styles  
of collaboration on top of it. In it's current state, it (almost)  
provides that substrate, but there's nothing yet built on top of it.  
A more-efficient version of Monticello1 is one thing that could go on  
top of the substrate, but a better update-stream non-unlike what you  
describe is another thing that could be built on the same substrate.

I'm a little wary of trying to create a technical solution to a  
social problem, but I think buy your theory that part of the problem  
is that it's too hard to cross-pollinate between Squeak  
distributions. I suspect that we want to end up more like the BSD  
world than Linux. The different distributions have separate code-
bases, different foci and distinct communities. But ideas and code  
seem to flow between them pretty freely to the benefit of all.

I need to think about this a bit more.

Colin

Reply | Threaded
Open this post in threaded view
|

Re: An idea, crazy or not? (Re: Very bad about Squeak in blogosfere)

Andreas.Raab
In reply to this post by Göran Krampe
Hi Goran -

I love it. Where do I sign up? I always thought that mixing the speed
and versatility of change sets with a more structured approach like PIs
and MC is ultimately the way to go. Couple of things I'd like to see:

* Keeping it simple. You've already pointed that out but I'd like to
emphasize it even more. It'll grow regardless as time goes by, so
keeping it to the point initially is important.

* Making it work with MC. I'm not sure what exactly that means but
having a complete declarative versioned representation of source code is
extremely useful. The goal would be that I can specify version x.y.z of
something and have that be a well-defined set of code and meta-data.

* Some tie-in with package/library versioning. The biggest problem with
change sets is that they don't tie into any versioning mechanism other
than the global image version (via update number). Being able to
describe which deltas (version) I have and which one another person has
will be important. (this problem may very well just be a slight
reformulation of the previous point because it is also one of the
advantages of MC)

* Keeping it simple. In case I hadn't mentioned that before.

Although I do think that a tool can't solve all the social problems
around Squeak (in particular not the one about absence of direction) I
think that such a tool would make the practical side of collaboration
via cherry picking from delta streams a *lot* simpler. That alone would
be worth it - if you've tried to go through 50 or so versions in
Monticello you know what I mean ;-)

Cheers,
   - Andreas


[hidden email] wrote:

> Hi all!
>
> (long post, sorry!)
>
> Andreas Raab <[hidden email]> wrote:
>> Colin Putney wrote:
>>> It's stated a bit harshly, but yeah, that sounds basically accurate. The
>>> amazing thing is that, in spite of all that, Squeak is still such a
>>> wonderful platform to work with. I do use Squeak in production, and
>>> there are very few things I would trade it for.
>> Well, yes, but you can't deny that the guy's got a point. The
>> frustration he's expressing is something that everyone has felt over the
>> years. And while there are various plain invalid points in his post
>> (like the fact that Squeak has bugs - I'm *shocked* to hear that of
>> course and would have never started three products if I'd known that ;-)
>> the main emerging point is valid: The lack of quality and maintenance.
>> The problems he cites are all known, some of them even have fixes but
>> there isn't enough traction in the community to make this all come
> ...
>> together. And of course the forks don't exactly help because we still
>> haven't figured out how to share code across the forks and consequently
>
> And Andreas continues to describe the problem that I have been thinking
> a bit about during my vacation.
>
> Last night I wrote it up and intended to bounce it around "privately"
> first on selected people, but reading this thread it is so inviting to
> share the idea so what the hell :) Forgive me if this post is long - but
> I want to paint my picture as best I can.
>
> IMO these are our major problems today (we have lots of minor ones too
> and the problems intermix):
>
> 1. More or less anarchy when it comes to leadership of Squeak-dev. The
> board is not taking charge, for a whole range of possible reasons. One
> obvious reason is that the guys elected are really good developers who
> tend to be very busy. Another reason may be that we have different
> expectations on what they should/could be doing. IMPORTANT: I am *not*
> placing any blame though - we are all in this together.
>
> 2. We are now "de facto" living in a highly forked world (Croquet,
> Sophie, Squeak-dev, Spoon, Squeakland, OLPC, yaddayadda...) but we don't
> have tools that support such a world!
>
> 3. The core Squeak is not evolving properly mainly due to the fact that
> most of the core codebase is "abandoned" - or in other words, noone
> feels responsible and/or authoritive to bring it forward.
>
> In short we have "leadership paralysis", a "forked world" and a largely
> "abandoned core". Other problems I missed? Of course! ...but lets ignore
> those for this post.
>
>
> Considering a few measures then:
>
> - Make a new fork with a strong leadership? Hmmm, could help with #1 and
> #3 above but does nothing to improve #2 and would probably be tons of
> work to succeed, and I personally don't have the required time to spend.
> Plus I am a hard core "squeak-dev" member - I don't *want* to fork. :)
>
> - Reshape the organisation of Squeak-dev? Nah, I am sick and tired of
> pulling such work, done just too much of that stuff already over the
> years, and it would possibly help with #1 and #3 (strong leadership) but
> again would not help at all with #2.
>
> So ok, forking is out and reshaping the organisation from the inside is
> out, even though I really would want much more initiative from the board
> in the future - no doubt about that.
>
>
> Hmmm. But what could be done then? Well, after seeing over and over
> again how really good TOOLS can change the way we interact in our
> community (Monticello, SqueakMap, SqueakSource, Universes etc) I tried
> to imagine a new infrastructure that would help with the three problems
> above, in a *natural* way.
>
> Let's look at #1 - the anarchy problem. If we don't try to solve it but
> instead try to *live with it* - what could that mean? The piece that
> suffers mostly from the anarchy is of course the base image. All our
> external packages prosper just fine anyway (kinda). So could we put some
> kind of "supertool" in place to maintain the base image that could be
> made to work *without* strong leadership? I think we can.
>
> What about #2 - the forking problem? Well, imagine this "supertool"
> being written in such a way that it can be used in all major forks - if
> its good and easy to adapt/install it would most probably also *be*
> used. Monticello has already showed this can be done.
>
> So instead of trying *not* to fork, we try to make it very easy to fork
> - or rather *easy to live* in a forked world of Squeak
> images/communities.
>
> But #3 - the rotting core problem? Again, if it was very easy to fix
> stuff in the core, publish these changes without having to ask anyone
> for permission and very easy to cherry-pick such fixes from other people
> - then hopefully the core would again start moving forward. As Andreas
> notes - fixes are sitting inside Croquet and my bet is that they are
> mainly sitting there because it is a bit "too much work" to push them
> out. I am aware of fixes sitting in Gjallar (at least a few) just
> because I didn't feel I had time to fix/prepare them sufficiently etc.
>
>
> So my "daft" idea is:
>
> Let's pull together a good team and make a Supertool that is written to
> be used in all forks that... well, what will it actually *do*? :)
>
>
> 1. Introduce a new kind of source unit - let's call it a Delta. The guys
> working with MC2/Monticello may have lots of noteworthy stuff to share
> about how this kind of thing could look, but I simply want a "changeset"
> for the 21st century. A patch. But a smarter one! The philosophy here
> being that changesets are nice given their simplicity and malleability -
> but they are not so nice in many other respects. But the concept of
> communicating with other developers using the natural "work unit" - a
> "commit" - is quite nice. In MC at least I tend to make too large
> snapshots because let's face it - MC is too slow for small commits -
> given how it works. We just don't suffer because it is so darn slick at
> merging :)
>
> 2. Create the notion of "delta streams". Yes, we had the update stream
> earlier - a sequential flow of changesets. It was kinda nifty, but
> imagine having tons of these streams originating both from larger
> cooperative projects (Croquet, Sophie, Seaside, Gjallar etc) and from
> individual developers ("Andreas Raab's kernel fixes", "Juan's
> refactorings of Morphic" etc). A Delta could appear in several streams
> so Croquet could have a single stream for each release AND multiple
> streams for different kinds of Deltas, like "base image fixes for
> Hedgehog" etc).
>
> 3. Make an efficient but simple storage model for deltas and delta
> streams. Here I am thinking KISS. If a delta could be represented as a
> single gzipped file (enabling dumb servers just like MC does) and a
> stream can be represented by file naming conventions (by a number
> suffix) - then a stream is just a directory or a zip of a bunch of delta
> files. Yes, very similar to gzipped changesets and the update stream. :)
> This enables us to use all "vanilla" tools available for dealing with
> files (http servers, ftp, rsync, email etc).
>
> 4. Make a simple but efficient transport. Let's say we set up a public
> server that syncs such directories of delta files (streams) from tons of
> places. And then offers it to all of us as a simple rsync. Each
> developer (or team) could then use rsync to mirror that mega tree of
> delta files onto our laptops/servers and the tool inside Squeak would
> just need to bother with reading the local filesystem - which makes it
> much more portable across Squeak dialects (and possibly even Smalltalk
> dialects - but let's not go there just yet). This also means we don't
> suffer from servers being down.
>
> 4. Make a simple model of Delta and DeltaStream in Squeak and let it
> mirror the filesystem. Add a simple API to the model á la Keith's
> Installer. Or hey, just enable Installer work with this model.
>
> 5. Make a great Morphic tool to work with them. Perhaps we could even
> rework the changesorter family of tools thus superceding changesets?
>
>
> Ok, imagine this supertool in your image. Imagine that all public
> streams are listed directly in the tool and new ones just "pop up" as
> they are added. Imagine that you can add your own private streams just
> like you can add repositories to sources.list in apt-get (you Debian
> people know what I mean). You can have purely private local streams on
> your harddrive or streams on a shared fileserver in your company/dev
> group, etc.
>
> Now you have this huge flood of Deltas in hundreds of streams at your
> fingertips. How would you use it?
>
> 1. Subscribe to some major streams and configure it to automatically
> load deltas whenever they appear when you press "update".
>
> 2. Set some rules that govern if the tool should just try to load - or
> ask for confirmation based on characteristics of the delta.
>
> 3. Autosubscribe to categories of streams. For example, if a new bug-fix
> stream appears for a package you use a lot - you might want to get it
> autosusbcribed - or again, have the tool ask you.
>
> 4. Of course, easily publish your own streams. We are talking single
> button, no getting permissions etc.
>
> 5. Push fixes to other people's packages as deltas onto a personal
> public fixes-stream. This means it does not matter what package you are
> bug fixing - you can *always* push the fix to your personal public
> fixes-stream and don't need to bother with getting permissions on
> SqueakSource or wherever it came from. This is a very IMPORTANT feature
> and should hopefully put an end to "lost fixes" or "fixes sitting inside
> images".
>
> We have too many fixes out there that just never get published because
> of the "hassle", and sure, someone says "it is very easy to upload to
> Mantis!" - but fixes on Mantis sets expectations on quality,
> documentation, follow up etc. A personal fixes stream like above sets no
> such expectations - it is there for the taking - but that is all.
>
> 6. Pull deltas. Selective cherry picking etc.
>
>
> Important features of Deltas:
>
> - Atomic load of a Delta. Either it loads cleanly or it does not load at
> all, and it ensures this by checking FIRST that everything is in place
> for it to be able to apply cleanly. This should prevent "failed loads"
> and broken images. The actual low level atomicity is another story but
> SystemEditor from MC2 perhaps? I dunno.
>
> - Revertable, if *possible*. A delta can be analyzed to see if it is
> revertable. If it includes doits or class initializations it is in
> theory not revertable, it may be in practice though! It can also be
> marked as DefinitelyNonRevertable.
>
> - A Delta is declarative. Another class should be responsible for
> actually applying them.
>
> - When a Delta is applied to an image we generate a reverse Delta which
> (when applied) will reverse the effects. Since the image may be in
> different states this reverse Delta needs to be constructed when the
> Delta is applied!
>
>
> A Delta contains:
>
> - A Preamble similar to ChangeSets with info fields
> - Developer (name, id, signature etc whatever)
> - Original stream (URL)
> - UUID
> - DefinitelyNotRevertable flag
> - Test doit (a non destructive, non interactive doit that should throw
> an exception in order to prevent loading!)
> - An ordered sequence of Actions, see below.
>
> An example list of different types of Actions are:
>
> - Change method (class name, old method src, new method src)
> - Add method (class name, method src, category name)
> - Remove method (class name, method src, category name)
> - Categorize method (class name, method name, old category name, new
> category name)
>
> - Create class (class name, super class name, definition, category)
> - Delete class (class name)
> - Change superclass of class (class name, old super class name, new
> super class name)
> - Rename class (old class name, new class name)
> - Categorize class (class name, old category name, new category name)
> - Change definition (class name, new definition, old definition)
> - Class comment change (new comment, old comment)
>
> - Class initialization
> - Doit (marked as revertable or not by author!)
>
> Note how these Actions contain "more" info than a ChangeSet - it
> contains information about what it was "before" in the image it
> originates from! The idea is to make Deltas "rich" with info so that we
> can apply them with more smarts.
>
> When applied to an image the Delta is copied to a directory with the
> same name as the image followed by "-applied-deltas". It is also logged
> in changesfile. If the Delta can not be cleanly reverted (based solely
> on its own contents) we generate reverse Deltas and store them in the
> same directory prefixed with "reverse-".
>
> Applying a Delta:
>
> 1. Verify that it can be applied (or signal CanNotApplyException). Do
> this by analyzing Actions and running any Test and see if it throws an
> Exception.
> - It can not be applied *cleanly* if something is "different" from
> expected.
> - It can be applied *dirty* if all changes can be applied in "some
> fashion". For example, a delete operation and the thing to delete is
> already deleted. The reverse Delta will then show this so that a revert
> will not put the thing back in.
> - It can be applied *partially* if just a subset of Actions are applied
> (by choice or since some just can't be applied). The reverse Delta will
> then show what was applied or not.
>
> 2. Verify that it can be reverted cleanly (or signal
> CanNotRevertCleanlyException). Do this by analyzing Actions.
>
> 3. Apply and generate the reverse Delta if needed.
>
> 4. Copy delta and any reverse delta to applied dir.
>
> 5. Log to changes file.
>
> 6. Report package touched (for running unit tests afterward!)
>
>
> What about merging then? Well, the concept here is to be much more
> "loose" when it comes to merging compared to say MC. It was inspired by
> something I read about git (Linus' SCM tool) - it doesn't try to be
> smart - it just tries to do the right thing when it is obvious. In other
> situations it just asks the developer. I think I like this approach. The
> Delta model should be easy enough for all developers to understand. It
> is "just" a changeset/patch after all.
>
> So if I am trying to apply a Delta (or several) and the "before state"
> is not as the Delta expects - we can either cop out, or let it be
> "smart", or just ask the user to decide what to do. BUT... I am not an
> SCM implementor - the MC/MC2 guys can clearly explain to me why/how this
> will not work or amend the idea so that it can work. I gladly admit my
> ignorance. ;)
>
>
> ...ok, enough blabbering. :) Does this sound plausible, useful or just
> plain dumb? Is MC2 already this and much more?
>
> ciao, Göran
>
>


Reply | Threaded
Open this post in threaded view
|

Re: An idea, crazy or not? (Re: Very bad about Squeak in blogosfere)

Andreas.Raab
In reply to this post by Ron Teitelbaum
Ron Teitelbaum wrote:
> It's not just sinking in that is an issue.  I'm also considering the
> practical aspects.  Also I'm not exactly sure how this all fits with
> Andreas' suggestion of managing packages outside the context of an official
> image.

 From my perspective Goran's proposal actually provides a solution. Part
of the problem with the current setup is that it's plain impossible to
go through all of the versions that were generated by the 3.10 team and
try to figure out which ones contain fixes that apply to Croquet and
which ones don't. MCZs are simply to heavy-weight for this process.
Delta streams (assuming they tie in with versions) would solve the
problem nicely.

> I can't help seeing the down side to all of this, and I wonder what the
> impact will be for those starting out with Squeak.

There will be almost no impact. Users will find one or two subscriptions
in their image (those for the current version they are on and maybe an
optional one for the next alpha version) and that's it. Much like the
update stream. The magic is upstream, by having the release stream
aggregate fixes from various inputs and provide those in a consistent
manner to the downstream consumers.

> So let's say we go with this path and anyone can start a stream.  How does a
> user decide which stream to use?  If we have two very good streams (like
> Sophie and Croquet) which are changing classes in an incompatible way then
> someone's changes are still lost.

Indeed. A tool can't solve the social problems. If you have inherently
incompatible changes then you need to make a decision which path to
follow. However, contrary to the past you should still be able to very
quickly follow changes on the path not taken and adapt deltas coming
that way for whatever you need.

So that, for example Croquet can listen to the delta stream of Squeak
3.10 and quickly filter out those changes that are relevant to its
packages and vice versa. Both are independent but the interplay is
simplified because it is possible to quickly screen a concise set of
changes. Consumers of either one don't usually even get to see the other
stream but they may subscribe directly to an upstream package stream in
which they are interested in.

In the end what happens is that you start out with a single stream for
your image version, moderated by whoever provides that stream. As you
progress, you may subscribe to further upstream packages (or individual
contributors) to get the changes you are interested in.

> I like the idea of passing the streams or having stream managers, or
> something like that, so that there is one official stream per package.  But
> of course this really just brings us back to squeak map and away from a
> change stream.  I like Andreas' suggestion that we try to support standard
> packages for multiple images.

Which can be done in addition to and independent from Goran's proposal.

> How can we move from what we have now to a place where it is easy for
> someone to push quality changes or new code into production?  Can we really
> support a free for all collection of change streams, or do we need to stick
> with standard packages?  If we agree we need standard packages what do we
> gain from a change stream?

Delta streams won't replace a release team. That's for sure. What they
should offer is the ability to very quickly pick out what changes are
relevant to a particular fork from some set of updates. This may
actually lead to competition and more forks but like Goran said, part of
this proposal is to embrace change.

Cheers,
   - Andreas

Reply | Threaded
Open this post in threaded view
|

Re: An idea, crazy or not? (Re: Very bad about Squeak in blogosfere)

keith1y
In reply to this post by Andreas.Raab

>  simpler. That alone would be worth it - if you've tried to go through
> 50 or so versions in Monticello you know what I mean ;-)
>
I do know what you mean, in MC1.5 there is a dual changes comparison
tool. This allows you to see the changes between any two versions. For
speed these can be loaded into an in-memory repository.

Keith
 

123