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

Chris Muller asqueaker at gmail.com
Sun Jun 30 19:58:10 UTC 2013


> I'm not fussed about the name. I'm fussed about the modularity issues.

Cool, me too.

If we discover some responsibilities we want for our SystemAuthor
besides its #initials, I'll welcome it.  Until then, I'd be happy
enough with:

   Smalltalk authorInitials



>
> Eventually, when Environments are done and dusted, and embedded
> everywhere, I'd like to see an image ship with a personalised
> Environment, and you have to jump through a hoop to even access the
> global Environment, the thing we're currently hacking in. We're not
> there yet though.
>
> frank
>
>>> 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