Widgets and Books for Squeak

John_Gardner at dmr.ca John_Gardner at dmr.ca
Fri Mar 24 16:17:24 UTC 2000

Thanks Bob,

I'll run with your code when I've hit the competence level on the Squeak
learning curve. I'm sure this could become the basis for a flexible,
configurable "packaging" tool.

Your response does seem to imply something. Does the entire Squeak community
believe that MVC is a waste of time and that the default UI should be Morphic?

Am I wasting my time investigating the extension of MVC to include a set of
Widgets? Should I instead focus my energies upon Morphic and collaborating on
developing the aforementioned "packaging" tool?

I apologize for sounding so Newbie-ish about all this, but time is an issue for
me. My heart wants to convert to Squeak, but my mind is cautious. I believe that
Squeak is architecturally superior and more cost effective than Java, but there
are some holes.

I sense that the Squeak community wants Squeak to become to languages what Linux
is to operating systems. To do this, packaging, Squeak-to-Squeak communication,
XML support and documentation are 4 key areas to be addressed.

We're not there yet. Unfortunately, Java still has some advantages over Squeak.



Bob Arning <arning at charm.net> on 03/24/2000 10:44:46 AM

Please respond to squeak at cs.uiuc.edu

To:   squeak at cs.uiuc.edu
cc:    (bcc: John Gardner/DMR/CA)
Subject:  Re: Widgets and Books for Squeak

On Fri, 24 Mar 2000 09:00:14 -0500 John_Gardner at dmr.ca wrote:
>1. I am not dissing Morphic.
>It is truly incredible and extensible. It is an excellent UI. However, it is
>and somewhat slower than MVC. While the speed issue may be resolved through
>tuning, size is still an issue. Perhaps the bytecode compiler could be extended
>to provide information to a "discard..." method which would remove all
>unnecessary classes. This would be an option, of course, and it would only work
>at the system category (application) level. The context here is creating
>applications for end users.


If you are interested in exploring size reductions in Morphic for particular
applications, I have enclosed a changeset that will help. It reports the size of
Morphic divided into two groups - classes to keep and classes to delete. You can
play with the exclusion criteria to manually adjust the keep group to what your
app would need and see how much space would be saved. The output could easily be
input to a method to remove the unwanted parts of Morphic as part of a shrink
prior to deployment.


'From Squeak2.8alpha of 13 January 2000 [latest update: #1919] on 24 March 2000
at 10:36:25 am'!
"Change Set:        morphicSpace
Date:               24 March 2000
Author:             Bob Arning


     Smalltalk computeMorphicSizePartitioned

to get a report that shows the size of code of Morphic-related classes broken
down into two groups: those one might keep for a Morphic Lite application and
those one might omit. The grouping is determined by a list in the method and is
rather subjective. I removed a number of the larger classes that would still
leave a rather healthy (MVC++) UI capability. More could obviously be pruned and
some of the pruned ones might be of interest in a particular application. As it
stands, it shows the keep category at 400K and the remove at 340K. I'm sure this
could be reduced quite a bit more, depending on the type of application"!

!SystemDictionary methodsFor: 'shrinking' stamp: 'RAA 3/24/2000 10:28'!
computeMorphicSizePartitioned   "Smalltalk computeMorphicSizePartitioned"

     | allClasses possibleDeletes a1 a2 |

     allClasses _ Morph withAllSubclasses.
     #('User Objects' 'Experimental-*' 'Balloon-*' 'Morphic-*' 'TrueType-*'
               'Graphics-Transformations' 'Alice2.0-*' 'MM-Flash-*') do: [
:partialCat |
          (SystemOrganization categories select: [:c | partialCat match: c]) do:
[ :cat |
               (SystemOrganization listAtCategoryNamed: cat) do: [ :classSymbol
                    allClasses add: (Smalltalk at: classSymbol)
     possibleDeletes _ #(
          PlayingCard FlashFileReader PostscriptCanvas StandardScriptingSystem
          FlashFileStream FlashCodec
          TrashCanMorph BookMorph ScriptEditorMorph SketchEditorMorph
          FlapTab HaloMorph EnvelopeEditorMorph TileMorph WaveEditor
          FlashPlayerMorph ScorePlayerMorph TabbedPalette EventRecorderMorph
          CategoryViewer FreeCell FatBitsPaint PlayingCardDeck
          PhraseTileMorph MidiInputMorph WonderlandCameraMorph ColorPickerMorph
          SpectrumAnalyzerMorph WonderlandMorph FlashCharacterMorph
          LipsMorph SameGameBoard KeyboardMorphForInput FlashButtonMorph
          SameGame IRCMorph FlashMorph ReferenceMorph FlashSpriteMorph PinMorph
          MoviePlayerMorph GraphicalDictionaryMenu BlobMorph HeadMorph
          GraphMorph StandardViewer MovieMorph TilePadMorph CompoundTileMorph
          JoystickMorph ScreeningMorph RecordingControlsMorph IndexTabs
          BookPageThumbnailMorph PartsWindow MagnifierMorph WiWPasteUpMorph
          BooklikeMorph PianoRollNoteMorph BouncingAtomsMorph FaceMorph
          KlattFrameMorph TetrisBoard FlashSorterMorph FishEyeMorph Tetris
          MultiuserTinyPaint ViewerEntry RemoteHandMorph PlayingCardMorph
          SoundLoopMorph FlashPlayerWindow WonderlandActorData SpeakerMorph
          Viewer TabSorterMorph FunctionComponent GraphicalMenu
          BookPageSorterMorph HeadingMorph SoundDemoMorph LedDigitMorph EyeMorph
          MIDIPianoKeyboardMorph PaintBoxColorPicker WonderlandCameraControls
     a1 _ self reportSizeOfClasses: (allClasses reject: [ :each |
possibleDeletes includes: each name]).
     a2 _ self reportSizeOfClasses: (allClasses select: [ :each |
possibleDeletes includes: each name]).

     StringHolder new
          contents: 'Keep these


And remove these

          openLabel: 'Possible Morphic Lite Configuration'.

! !

!SystemDictionary methodsFor: 'shrinking' stamp: 'RAA 3/24/2000 10:22'!
reportSizeOfClasses: someClasses
Morph spaceUsedWithSubclasses
     | data answer total |
     data _ someClasses asArray collect: [ :each | {each name. each spaceUsed}].
     data _ data asSortedCollection: [ :a :b | a second >= b second].

     answer _ String streamContents: [ :strm |
          total _ 0.
          data do: [ :each |
               strm nextPutAll: (each second printString padded: #left to: 8
with: $ ),' - ',
                    each first; cr.
               total _ total + each second.
          strm cr; nextPutAll: (total printString padded: #left to: 8 with: $
),' - TOTAL'; cr; cr.

! !

More information about the Squeak-dev mailing list