The Inbox: System-cmm.497.mcz

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

The Inbox: System-cmm.497.mcz

commits-2
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!


Reply | Threaded
Open this post in threaded view
|

Re: The Inbox: System-cmm.497.mcz

Levente Uzonyi-2
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, [hidden email] 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!
>
>
>

Reply | Threaded
Open this post in threaded view
|

Re: The Inbox: System-cmm.497.mcz

Chris Muller-3
Ok.

On Fri, Sep 14, 2012 at 11:06 PM, Levente Uzonyi <[hidden email]> 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, [hidden email] 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!
>>
>>
>
>
>

Reply | Threaded
Open this post in threaded view
|

Re: The Inbox: System-cmm.497.mcz

Frank Shearar-3
I would love to see this resuscitated!

frank

On 15 September 2012 17:33, Chris Muller <[hidden email]> wrote:

> Ok.
>
> On Fri, Sep 14, 2012 at 11:06 PM, Levente Uzonyi <[hidden email]> 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, [hidden email] 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!
>>>
>>>
>>
>>
>>
>

Reply | Threaded
Open this post in threaded view
|

Re: The Inbox: System-cmm.497.mcz

Chris Muller-4
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 <[hidden email]> wrote:

> I would love to see this resuscitated!
>
> frank
>
> On 15 September 2012 17:33, Chris Muller <[hidden email]> wrote:
>> Ok.
>>
>> On Fri, Sep 14, 2012 at 11:06 PM, Levente Uzonyi <[hidden email]> 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, [hidden email] 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!
>>>>
>>>>
>>>
>>>
>>>
>>

Reply | Threaded
Open this post in threaded view
|

Re: The Inbox: System-cmm.497.mcz

Frank Shearar-3
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.

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 <[hidden email]> 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 <[hidden email]> wrote:
>> I would love to see this resuscitated!
>>
>> frank
>>
>> On 15 September 2012 17:33, Chris Muller <[hidden email]> wrote:
>>> Ok.
>>>
>>> On Fri, Sep 14, 2012 at 11:06 PM, Levente Uzonyi <[hidden email]> 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, [hidden email] 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!
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>

Reply | Threaded
Open this post in threaded view
|

Re: The Inbox: System-cmm.497.mcz

Chris Muller-3
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 <[hidden email]> 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 <[hidden email]> wrote:
>>> I would love to see this resuscitated!
>>>
>>> frank
>>>
>>> On 15 September 2012 17:33, Chris Muller <[hidden email]> wrote:
>>>> Ok.
>>>>
>>>> On Fri, Sep 14, 2012 at 11:06 PM, Levente Uzonyi <[hidden email]> 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, [hidden email] 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!
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>

Reply | Threaded
Open this post in threaded view
|

Re: The Inbox: System-cmm.497.mcz

Frank Shearar-3
On 30 June 2013 19:01, Chris Muller <[hidden email]> 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 <[hidden email]> 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 <[hidden email]> wrote:
>>>> I would love to see this resuscitated!
>>>>
>>>> frank
>>>>
>>>> On 15 September 2012 17:33, Chris Muller <[hidden email]> wrote:
>>>>> Ok.
>>>>>
>>>>> On Fri, Sep 14, 2012 at 11:06 PM, Levente Uzonyi <[hidden email]> 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, [hidden email] 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!
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>
>

Reply | Threaded
Open this post in threaded view
|

Re: The Inbox: System-cmm.497.mcz

Chris Muller-3
> 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 <[hidden email]> 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 <[hidden email]> wrote:
>>>>> I would love to see this resuscitated!
>>>>>
>>>>> frank
>>>>>
>>>>> On 15 September 2012 17:33, Chris Muller <[hidden email]> wrote:
>>>>>> Ok.
>>>>>>
>>>>>> On Fri, Sep 14, 2012 at 11:06 PM, Levente Uzonyi <[hidden email]> 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, [hidden email] 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!
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>
>>
>

Reply | Threaded
Open this post in threaded view
|

Re: The Inbox: System-cmm.497.mcz

Frank Shearar-3
On 30 June 2013 20:58, Chris Muller <[hidden email]> wrote:
>> 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

Well, even if SystemAuthor held a single piece of info (and the plan
was to hold both initials and full name), that would be sufficient to
remove two class vars from Utilities. A pair of large nails in its
coffin!

frank

>> 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 <[hidden email]> 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 <[hidden email]> wrote:
>>>>>> I would love to see this resuscitated!
>>>>>>
>>>>>> frank
>>>>>>
>>>>>> On 15 September 2012 17:33, Chris Muller <[hidden email]> wrote:
>>>>>>> Ok.
>>>>>>>
>>>>>>> On Fri, Sep 14, 2012 at 11:06 PM, Levente Uzonyi <[hidden email]> 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, [hidden email] 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!
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>
>>>
>>

Reply | Threaded
Open this post in threaded view
|

Re: The Inbox: System-cmm.497.mcz

Chris Muller-4
>> 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
>
> Well, even if SystemAuthor held a single piece of info (and the plan
> was to hold both initials and full name), that would be sufficient to
> remove two class vars from Utilities. A pair of large nails in its
> coffin!

As it would if we simply moved them to SmalltalkImage.

Either way, fair enough.  Your call.