As much fun as round trips can be, when those roundtrips are over the WAN using GemTools, it can get a bit tiring.

A little over a month ago (GLASS.230-dkh.194) I added the class OBUpdateConcentrator to GLASS. The job of the concentrator is to collect OB-related #update: messages sent to Morphic widgets on the client from the server and ship them across the wire in one roundtrip instead of n roundtrips (see this section for more info). The net effect is that the number of roundtrips for browser interactions is reduced by about 50%.

I didn’t turn on the concentrator for the latest preview, because there were some apparent update problems (they may have been transient Pharo problems). After announcing the preview, I realized that folks who need to connect over the WAN probably wouldn’t mind a few update problems in return for better UI performance. So I decided to make another preview drop primarily aimed at providing relief for roundtrip sufferers.

In order to turn on the concentrator, the method ClientForwarder>>_asOop needs to be implemented. the method contains a primitive call and you need to be SystemUser to compile the method, so you need to use topaz (your input highlighted in gray):

foos:c_gss64bit_230>topaz -l
|                             Configuration Files                             |
|                                                                             |
topaz> set user SystemUser pass swordfish
Warning: GemStone is clearing the previous GemStone password.
topaz> login
[Info]: LNK client/gem GCI levels = 830/830
[Info]: User ID: SystemUser
[Info]: Repository: c_gs64stone_230
[Info]: Session ID: 2
[Info]: GCI Client Host: <Linked>
[Info]: Page server PID: -1
[Info]: Login Time: 03/25/09 13:46:51.706 PDT
gci login: currSession 1 rpc gem processId -1
successful login
topaz 1> method: ClientForwarder
<primitive: 86>
self _primitiveFailed: #asOop

topaz 1> commit
Successful commit
topaz 1> logout

After defining the method and committing, it is  worth turning off some of the optional UI features (in the Preferences Browser under the browsing category), namely: annotationPanels, mercuryPanel, optionalButtons, and syntaxHighlightingAsYouType. These OB options, while useful, consume additional roundtrips for each refresh of the browser. Yes, the preferences you set in your client (either Squeak or Pharo) will be propogated to the server…

Last night I ran some tests from home running against a stone on my office desktop machine and got a 3x performance boost (3 seconds per click versuse 10 seconds per click). I  started doing some development tasks to make sure that all of the browsers were functional when  optionalButtons is disabled (it turned out that the Test Runner wasn’t the first time around) and while I wasn’t doing intense development (I was keeping an eye on the Utah/Rockets game), the performance was good enough that I forgot that I was working on a stone in the office.


There have been no major changes in the GemTools since the last preview release other than a new Find… Menu command was added called Case Sensitive String…, which searches through all method source doing a case sensitive search.

Take a look at the GemTools change log for a complete history of changes since GemStone-dkh.441.


In addition to the roundtrip performance improvements, a number of bugs have been fixed:

  • fix Bug39828 – fastcgi and uploadfile problems
  • fix Bug39766 – WAGsWalkbackErrorHandler is not subclassable
  • fix Bug39778 – Collection should include #ifNotEmpty:ifEmpty:
  • fix Bug39810 – Can’t use DateTimes in SIXX
  • fix Bug39869 – Unicode and debugging
  • fix Bug38428 – a collection of glass shards in the browser
  • fix Bug38458 – Monticello Browser – Viewing history has impact on repository pane
  • fix Bug39369 – MCReader(C)>>readerClassForFileNamed: needs more error checks
  • fix Bug39552 – case-sensitive methods containing search
  • fix Bug38320 – SystemBrowser update problem
  • fix Bug38389 – WB, trying to load a package that had it’s working copy deleted
  • fix Bug38436 – Nothing happens on Repository Browser:”refresh”
  • fix Bug38438 – Browse Monticello package needed
  • fix Bug39756 – need to implment String>>restoreFromSnapshot:
  • fix Bug39763 – Date>>+ has bugs
  • fix Bug39579 – confusing warning from Monticello save after a merge
  • fix Bug38424 – Need way to propogate compiler warnings to tools
  • fix Bug39755 – MC1 should raise errors when there are unloaded classes methods
  • fix Bug39767 – possible stack overflow during FileDirectory>>forceNewDirectoryNamed:
  • fix Bug38550 – Confirmation for Monticello unl;oad package

Take a look at the GLASS change log for a complete history of changes since GLASS.230-dkh.209.


If you are already using a preview GemTools client, you only need to follow these instructions. If you are using a version of the GemTools Client earlier than GemStone-dkh.441, then you should follow these instructions.

[1] Photo by BenJTsunami (Creative Commons).