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

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

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

Edgar J. De Cleene
Aca va la idea de la SuperHerramienta, a la sueca

------ Mensaje reenviado

> De: <[hidden email]>
> Responder a: The general-purpose Squeak developers list
> <[hidden email]>
> Fecha: Mon, 13 Aug 2007 10:47:04 +0200
> Para: The general-purpose Squeak developers list
> <[hidden email]>
> Asunto: An idea, crazy or not? (Re: Very bad about Squeak in blogosfere)
>
> 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
>

------ Fin del mensaje reenviado