Packaging the programming tools

stéphane ducasse ducasse at iam.unibe.ch
Mon Jul 18 19:28:33 UTC 2005


On 18 juil. 05, at 19:58, Andreas Raab wrote:

>>> [*1] Try browsing the sender of some message or a class - you  
>>> will  very quickly notice why I don't like the usage of  
>>> "AppRegistry  default" since it raises completely needless errors  
>>> when for  example trying to browse a class -- compare this with  
>>> the notifier  you get when trying to browse a selector which uses  
>>> ToolSet's  interpretation of "proper" AppRegistry behavior.
>>>
>> So we will have to fix that.
>>
>
> Actually, the above note related to a message that I sent to Squeak- 
> dev about the general use of AppRegistry but it seems like the list  
> is dead for now. I'm attaching it for reference.

There are too much other lists. I would prefer to have only one  
mailing-list instead of packages,.... because it gives a wrong  
feeling that nothing is happening.

>
>
>>>   http://www.impara.de/~andreas/iSqueak/3.8/PlusTools-ar.16.mcz  
>>> [300k]
>>>
>> Ok so you already did it ;). So I would suggest that we only use  
>> this  one. :)
>>
>
> Well, there are a few things missing and originally I needed the  
> PlusTools to figure out how to go about unloading and dealing with  
> the regular tools. The PlusTools *definitely* need some more work,  
> what I've done covers the basics but there are plenty of things  
> that still need to be fixed.
>
>
>> I thought that there was a version of MC UI was relying on  
>> ToolBuilder.
>>
>
> Yes, there is. I'm planning to use it for Tweak.
>
>
>>> * Refactoring of ChangeSet and ChangeSorter - all of the actual
>>>
>> I do not have the time right now to look at it but did you change  
>> the  notification mechanism? I'm curious to see how the decoupling  
>> offered  by the notification mechanism helps.
>>
>
> I simply separated the functionality of dealing with changes from  
> the user interface (ChangeSorter). Mostly it meant moving class  
> methods from ChangeSorter to ChangeSet and then fix patterns like  
> "ChangeSorter changeSetNamed: ..." to use "ChangeSet named: ...".
>
> Cheers,
>   - Andreas
>
> From: Andreas Raab <andreas.raab at gmx.de>
> Date: 17 juillet 2005 19:31:35 GMT+02:00
> To: The general-purpose Squeak developers list <squeak- 
> dev at lists.squeakfoundation.org>
> Subject: On AppRegistry and its use
>
>
> Folks,
>
> I have started to use AppRegistry for a significantly sized project  
> and found and stumbled across a few odditities which I'd like to  
> see addressed.
>
> Most importantly, AppRegistry typically does not provide a user  
> with even a hint about the interface that's expected. If you look  
> at MailSender you can see its interface but for most of the others  
> this is not true. That's problematic since we cannot simply create  
> a new kind of app but rather need to find the original and  
> faithfully copy its interface. If the original's interface changes  
> (such as just happened for MailSender) it breaks other apps  
> (MAPIClient for example) without even so much as a hint that the  
> expected interface for that app has changed.
>
> Secondly, AppRegistry has an obnoxiuous habit of telling the user  
> every time anyone asks that there are "no applications registered".  
> It is possible to ask for the default without that but then the  
> client needs to handle the default choice itself. Thus instead of
>
>     (WebBrowser default ifNil: [^self]) doSomething.
>
> (resulting in the obnoxious "no webbrowsers registered") one would  
> need to write:
>
>     (WebBrowser defaultOrNil == nil and:[WebBrowser  
> registeredClasses isEmpty]) ifTrue:[^self].
>     WebBrowser default doSomething.
>
> It seems to me that AppRegistry would be more useful if it weren't  
> used at all with the above "AppRegistry default" pattern but rather  
> by, e.g.,
>
>     AppRegistry doSomething.
>
> (without the "default") This serves the following purposes:
>
> a) We are required to state the expected protocol for the app so if  
> anyone else wants to implement a new kind of app she knows what is  
> expected.
>
> b) An application can implement the action appropriately depending  
> on what is specifically requested in one of the following ways:
>
>    - silently substitute a suitable default if possible, e.g.,
>
>    WebBrowser class>>openOn: url
>       self default ifNil:[
>         ^(StringHolder new contents: url retrieveContents)
>            openLabel: url asString.
>       ].
>       self default openOn: url.
>
>    - Give the user information about the fact it is missing, e.g.,
>
>    WebBrowser class>>openOn: url
>       self default ifNil:[^self inform: 'No WebBrowser present'].
>       self default openOn: url.
>
>    - raise an error if the requested service is crucial
>
>    WebBrowser class>>openUn: url
>       self default ifNil:[^self error: 'Where is the web browser'].
>       self default openOn: url.
>
> c) There is no reason for AppRegistry>>default to give any warning  
> whatsoever. Client code can use "AppRegistry default" to bypass the  
> error handling provided the specific application and therefore the  
> user need not be bothered with all of these notifications.
>
> I had the need for pretty much all of the above and would like to  
> see AppRegistry fixed in the way described above.
>
> Comments?
>
> Cheers,
>   - Andreas
>
>
>
>




More information about the Packages mailing list