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

Frank Shearar frank.shearar at gmail.com
Sun Jun 30 18:12:41 UTC 2013


On 30 June 2013 19:01, Chris Muller <asqueaker at gmail.com> wrote:
> 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.

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

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