[squeak-dev] The Inbox: System-cmm.497.mcz

Chris Muller asqueaker at gmail.com
Sun Jun 30 18:01:16 UTC 2013


Hey!

> So other than violent agreement that
> * Utilities must die because it is antimodular
> * we want a real Author, not a collection of class side methods,
> the only thing I see is that noone has actually done the work.

Simply moving a global from one place (Utilities) to another place (a
Singleton named "Author") gives us better modularity but does not,
IMO, give us a "real Author".  There is no new functionality for the
system, it's still just a global for accessing the initials.

Author is a "who" of ANY domain -- very common!  Sure, Environments
can help *developers* get around that, but is it a good deal in
exchange for our glorified-global-String bucket?  Do we want Squeak to
be strictly a "Smalltalk IDE for hard-core developers" or can it also
be a "Personal Computing Environment" accessible to a much wider,
less-technical, audience?  I just don't see that latter group going
into the "meta" of importing/exporting classes, do you?

Until we have more use-cases than simply a "holder for the
authorInitials", I think SystemAuthor, or SqueakAuthor, or Developer,
or CurrentAuthor, or any number of other suggestions would be better.
I know just plain "Author" looks, types, and sounds nicer, but it's
too "grand" for how little value it adds to the system.  We can claim
our desired modularity with something that has no chance of making the
system less-accessible.



> So.
>
> I'd really like to see Author stuff ripped out of Utilities, with
> deprecated Utilities methods delegating to a global current user slot
> containing a decent object encapsulating what an Author is.
>
> Forget namespace clashes. That's what Environments are for!
>
> frank
>
> frank
>
> On 29 June 2013 22:24, Chris Muller <ma.chris.m at gmail.com> wrote:
>> Did you review the discussion from back then?  The problem with this
>> proposal was it doesn't go far enough.  IIRC, by not having a clear
>> picture how we would support multiple Author's, the change ends up
>> being little more than an API change for accessing the global author;
>> a "place to put some methods"; rather than integrating a first-class
>> Author into the system object model.
>>
>> If we are going to rob the global namespace of such a prominent class
>> name like "Author" from all external domains (or else force them to
>> use Environments?), then we cannot half-ass it.  We are not going to
>> trade "Author" for just a global-slot holder.  It needs to become an
>> integral part of the system's object model.
>>
>> On Sat, Jun 29, 2013 at 3:58 PM, Frank Shearar <frank.shearar at gmail.com> wrote:
>>> I would love to see this resuscitated!
>>>
>>> frank
>>>
>>> On 15 September 2012 17:33, Chris Muller <asqueaker at gmail.com> wrote:
>>>> Ok.
>>>>
>>>> On Fri, Sep 14, 2012 at 11:06 PM, Levente Uzonyi <leves at elte.hu> wrote:
>>>>> Two things about the implementation:
>>>>> - using #isOctetCharacter is not good enough. When I wrote ascii, I meant
>>>>> the 7-bit US-ASCII characters. For example $á is both #isOctetCharacter and
>>>>> #isAlphaNumeric, but I don't think it should appear in a method's timestamp.
>>>>> - some methods have Smalltalk123 as author
>>>>>
>>>>>
>>>>> Levente
>>>>>
>>>>>
>>>>> On Fri, 14 Sep 2012, commits at source.squeak.org wrote:
>>>>>
>>>>>> A new version of System was added to project The Inbox:
>>>>>> http://source.squeak.org/inbox/System-cmm.497.mcz
>>>>>>
>>>>>> ==================== Summary ====================
>>>>>>
>>>>>> Name: System-cmm.497
>>>>>> Author: cmm
>>>>>> Time: 14 September 2012, 3:14:45.552 pm
>>>>>> UUID: d55d42e9-1782-4cdd-a0d0-253bf60940f5
>>>>>> Ancestors: System-ul.496
>>>>>>
>>>>>> Updates for the Author proposal:
>>>>>>
>>>>>>         - Completely separate the model from the UI.  Author should be a
>>>>>> "pure domain object."  The PerSe methods are no longer needed.
>>>>>>
>>>>>>         - Instead, let Utilities class take responsibility for employing
>>>>>> Squeak UI-elements to set the current Author attributes, as well as for
>>>>>> being the "convenient" way to access these attributes.
>>>>>>
>>>>>>         - Since we are reifying an Author from a String, it is now treated
>>>>>> as a whole Author object, rather than just a String-holder.  Allow multiple
>>>>>> Author instances to exist and the #current Author can be swapped out with
>>>>>> another Author instance.
>>>>>>
>>>>>> =============== Diff against System-ul.496 ===============
>>>>>>
>>>>>> Item was removed:
>>>>>> - ----- Method: Author class>>changeStamp (in category 'convenience')
>>>>>> -----
>>>>>> - changeStamp
>>>>>> -
>>>>>> -       ^self current changeStamp!
>>>>>>
>>>>>> Item was removed:
>>>>>> - ----- Method: Author class>>changeStampPerSe (in category 'convenience')
>>>>>> -----
>>>>>> - changeStampPerSe
>>>>>> -
>>>>>> -       ^self current changeStampPerSe!
>>>>>>
>>>>>> Item was changed:
>>>>>>  ----- Method: Author class>>current (in category 'instance creation')
>>>>>> -----
>>>>>>  current
>>>>>> +       ^ instance ifNil:
>>>>>> +               [ self current: self new.
>>>>>> +               instance ]!
>>>>>> -
>>>>>> -       ^instance ifNil: [ instance := super new ]!
>>>>>>
>>>>>> Item was added:
>>>>>> + ----- Method: Author class>>current: (in category 'class
>>>>>> initialization') -----
>>>>>> + current: anAuthor
>>>>>> +       instance := anAuthor!
>>>>>>
>>>>>> Item was changed:
>>>>>>  ----- Method: Author class>>fullNamePerSe (in category 'pharo
>>>>>> compatibility') -----
>>>>>>  fullNamePerSe
>>>>>> +       ^ self current initials!
>>>>>> -
>>>>>> -       ^self initialsPerSe!
>>>>>>
>>>>>> Item was removed:
>>>>>> - ----- Method: Author class>>initials (in category 'convenience') -----
>>>>>> - initials
>>>>>> -
>>>>>> -       ^self current initials!
>>>>>>
>>>>>> Item was removed:
>>>>>> - ----- Method: Author class>>initialsPerSe (in category 'convenience')
>>>>>> -----
>>>>>> - initialsPerSe
>>>>>> -
>>>>>> -       ^self current initialsPerSe!
>>>>>>
>>>>>> Item was removed:
>>>>>> - ----- Method: Author class>>new (in category 'instance creation') -----
>>>>>> - new
>>>>>> -
>>>>>> -       self error: 'Use #current'!
>>>>>>
>>>>>> Item was changed:
>>>>>>  ----- Method: Author class>>reset (in category 'instance creation') -----
>>>>>>  reset
>>>>>> +       self current: nil!
>>>>>> -
>>>>>> -       instance := nil!
>>>>>>
>>>>>> Item was changed:
>>>>>>  ----- Method: Author class>>useAuthor:during: (in category 'pharo
>>>>>> compatibility') -----
>>>>>> + useAuthor: aString during: aBlock
>>>>>> +       ^ self current
>>>>>> +               useInitials: aString
>>>>>> +               during: aBlock!
>>>>>> - useAuthor: aString during: aBlock
>>>>>> -
>>>>>> -       ^self useInitials: aString during: aBlock!
>>>>>>
>>>>>> Item was removed:
>>>>>> - ----- Method: Author class>>useInitials:during: (in category
>>>>>> 'convenience') -----
>>>>>> - useInitials: aString during: aBlock
>>>>>> -
>>>>>> -       ^self current useInitials: aString during: aBlock!
>>>>>>
>>>>>> Item was removed:
>>>>>> - ----- Method: Author class>>username (in category 'convenience') -----
>>>>>> - username
>>>>>> -
>>>>>> -       ^self current username!
>>>>>>
>>>>>> Item was removed:
>>>>>> - ----- Method: Author class>>usernamePerSe (in category 'convenience')
>>>>>> -----
>>>>>> - usernamePerSe
>>>>>> -
>>>>>> -       ^self current usernamePerSe!
>>>>>>
>>>>>> Item was changed:
>>>>>>  ----- Method: Author>>changeStamp (in category 'accessing') -----
>>>>>>  changeStamp
>>>>>> +       ^ self changeStampWithInitials: (self initials ifEmpty: [
>>>>>> 'unknown' ])!
>>>>>> -
>>>>>> -       ^self changeStampWithInitials: self initials!
>>>>>>
>>>>>> Item was removed:
>>>>>> - ----- Method: Author>>changeStampPerSe (in category 'accessing') -----
>>>>>> - changeStampPerSe
>>>>>> -
>>>>>> -       ^self changeStampWithInitials: (self initialsPerSe ifEmpty: [ '.'
>>>>>> ])!
>>>>>>
>>>>>> Item was changed:
>>>>>>  ----- Method: Author>>fullName (in category 'pharo compatibility') -----
>>>>>>  fullName
>>>>>> +       ^ self initials!
>>>>>> -
>>>>>> -       ^self initials!
>>>>>>
>>>>>> Item was removed:
>>>>>> - ----- Method: Author>>fullNamePerSe (in category 'pharo compatibility')
>>>>>> -----
>>>>>> - fullNamePerSe
>>>>>> -
>>>>>> -       ^self initialsPerSe!
>>>>>>
>>>>>> Item was changed:
>>>>>>  ----- Method: Author>>initialize (in category 'initialize-release') -----
>>>>>>  initialize
>>>>>> -
>>>>>>         super initialize.
>>>>>> +       initials := username := String empty!
>>>>>> -       initials := String new.
>>>>>> -       username := String new
>>>>>> -       !
>>>>>>
>>>>>> Item was changed:
>>>>>>  ----- Method: Author>>initials (in category 'accessing') -----
>>>>>>  initials
>>>>>> +       ^ initials!
>>>>>> -
>>>>>> -       ^initials ifEmpty: [ self requestAndSetInitials ]!
>>>>>>
>>>>>> Item was removed:
>>>>>> - ----- Method: Author>>initialsPerSe (in category 'accessing') -----
>>>>>> - initialsPerSe
>>>>>> -
>>>>>> -       ^initials!
>>>>>>
>>>>>> Item was removed:
>>>>>> - ----- Method: Author>>requestAndSetInitials (in category 'accessing')
>>>>>> -----
>>>>>> - requestAndSetInitials
>>>>>> -
>>>>>> -       ^initials := (UIManager default
>>>>>> -               request: 'Please type your initials: ' translated
>>>>>> -               initialAnswer: initials) select: [ :each |
>>>>>> -                       #(
>>>>>> -                               ($A $Z)
>>>>>> -                               ($a $z)
>>>>>> -                               ($0 $9)) anySatisfy: [ :range |
>>>>>> -                                       each between: range first and:
>>>>>> range second ] ]!
>>>>>>
>>>>>> Item was removed:
>>>>>> - ----- Method: Author>>requestAndSetUsername (in category 'accessing')
>>>>>> -----
>>>>>> - requestAndSetUsername
>>>>>> -
>>>>>> -       ^username := UIManager default
>>>>>> -               request: 'Please type your name:' translated
>>>>>> -               initialAnswer: (username
>>>>>> -                       ifEmpty: [ 'Your Name' translated ]
>>>>>> -                       ifNotEmpty: [ username ])!
>>>>>>
>>>>>> Item was changed:
>>>>>>  ----- Method: Author>>username (in category 'accessing') -----
>>>>>>  username
>>>>>> +       ^ username!
>>>>>> -
>>>>>> -       ^username ifEmpty: [ self requestAndSetUsername ]!
>>>>>>
>>>>>> Item was removed:
>>>>>> - ----- Method: Author>>usernamePerSe (in category 'accessing') -----
>>>>>> - usernamePerSe
>>>>>> -
>>>>>> -       ^username!
>>>>>>
>>>>>> Item was changed:
>>>>>>  ----- Method: SpaceTally>>spaceTally: (in category 'class analysis')
>>>>>> -----
>>>>>> + spaceTally: classes
>>>>>> - spaceTally: classes
>>>>>>         "Answer a collection of SpaceTallyItems representing the memory
>>>>>> space (in bytes) consumed       by the code and instances of each class in
>>>>>> the system. Note that code sizes do not currently    report memory consumed
>>>>>> by class variables. "
>>>>>> -
>>>>>>         "((SpaceTally new spaceTally: (Array with: TextMorph with: Point))
>>>>>> asSortedCollection: [:a :b | a spaceForInstances > b spaceForInstances])
>>>>>> asArray"
>>>>>> -
>>>>>>         self preAllocateResultsFor: classes.
>>>>>>         Smalltalk garbageCollect.
>>>>>>         self computeSpaceUsage.
>>>>>>         ^ results
>>>>>> +                sort: [ : a : b | a spaceForInstances > b
>>>>>> spaceForInstances ] ;
>>>>>> +                yourself!
>>>>>> - !
>>>>>>
>>>>>> Item was changed:
>>>>>>  ----- Method: Utilities class>>authorInitials (in category
>>>>>> 'identification') -----
>>>>>>  authorInitials
>>>>>> +       "Answer the initials to be used to identify the current code
>>>>>> author."
>>>>>> +       ^ self authorInitialsPerSe ifEmpty:
>>>>>> +               [ self
>>>>>> +                        setAuthorInitials ;
>>>>>> +                        authorInitialsPerSe ]!
>>>>>> -       "Answer the initials to be used to identify the current code
>>>>>> author.  "
>>>>>> -
>>>>>> -       ^Author initials!
>>>>>>
>>>>>> Item was changed:
>>>>>>  ----- Method: Utilities class>>authorInitialsPerSe (in category
>>>>>> 'identification') -----
>>>>>>  authorInitialsPerSe
>>>>>> +       ^ Author current initials!
>>>>>> -       "Answer the currently-prevailing author initials, such as they,
>>>>>> empty or not"
>>>>>> -
>>>>>> -       ^Author initialsPerSe!
>>>>>>
>>>>>> Item was changed:
>>>>>>  ----- Method: Utilities class>>authorName (in category 'identification')
>>>>>> -----
>>>>>>  authorName
>>>>>> +       ^ self authorNamePerSe ifEmpty:
>>>>>> +               [ self
>>>>>> +                        setAuthorName ;
>>>>>> +                        authorNamePerSe ]!
>>>>>> -
>>>>>> -       ^Author username!
>>>>>>
>>>>>> Item was changed:
>>>>>>  ----- Method: Utilities class>>authorNamePerSe (in category
>>>>>> 'identification') -----
>>>>>>  authorNamePerSe
>>>>>> +       ^ Author current username!
>>>>>> -
>>>>>> -       ^Author usernamePerSe!
>>>>>>
>>>>>> Item was changed:
>>>>>>  ----- Method: Utilities class>>changeStamp (in category 'identification')
>>>>>> -----
>>>>>> + changeStamp
>>>>>> +       ^ Author current changeStampWithInitials: self authorInitials!
>>>>>> - changeStamp
>>>>>> -
>>>>>> -       ^Author changeStamp!
>>>>>>
>>>>>> Item was changed:
>>>>>>  ----- Method: Utilities class>>changeStampPerSe (in category
>>>>>> 'identification') -----
>>>>>>  changeStampPerSe
>>>>>> +       ^ Author current changeStamp!
>>>>>> -
>>>>>> -       ^Author changeStampPerSe!
>>>>>>
>>>>>> Item was changed:
>>>>>>  ----- Method: Utilities class>>setAuthorInitials (in category
>>>>>> 'identification') -----
>>>>>>  setAuthorInitials
>>>>>>         "Put up a dialog allowing the user to specify the author's
>>>>>> initials.  "
>>>>>> +       | oldInitials |
>>>>>> +       oldInitials := Author current initials.
>>>>>> +       Author reset.
>>>>>> +       Author current initials:
>>>>>> +               ((UIManager default
>>>>>> +                       request: 'Please type your initials: ' translated
>>>>>> +                       initialAnswer: oldInitials) select: [ : each |
>>>>>> each isOctetCharacter and: [ each isAlphaNumeric ] ])!
>>>>>> -
>>>>>> -       ^Author current requestAndSetInitials!
>>>>>>
>>>>>> Item was changed:
>>>>>>  ----- Method: Utilities class>>setAuthorName (in category
>>>>>> 'identification') -----
>>>>>>  setAuthorName
>>>>>> +       Author current username:
>>>>>> +               (UIManager default
>>>>>> +                       request: 'Please type your name:' translated
>>>>>> +                       initialAnswer: (Author current username ifEmpty: [
>>>>>> 'Your Name' translated ]))!
>>>>>> -
>>>>>> -       Author requestAndSetUsername!
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>


More information about the Squeak-dev mailing list