You are currently browsing the monthly archive for March 2009.
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):
| Configuration Files |
topaz> set user SystemUser pass swordfish
Warning: GemStone is clearing the previous GemStone password.
[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
topaz 1> method: ClientForwarder
self _primitiveFailed: #asOop
topaz 1> 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.
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
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.
Announcement from theComplex:
Building sophisticated multi-media, intensely interactive, Web applications is a significant challenge requiring mastery of multiple technologies. The Complex’s own Prof. West hosts a hands-on seminar for anyone with basic programming and web skill who wants to develop that mastery. From March 30 – April 3.
GLASS referes to Gemstone, Linux, Apache, Seaside and Smalltalk, a suite of software applications that provides a single environment, and language, for developing desktop-like Web applications. This workshop will provide a GLASS overview and tutorial followed by a combination of hands-on projects and in-depth coverage of special topics (e.g. the incorporation of Sun’s Lively Kernel technology into GLASS). Informal discussions, explorations, and hacking are likely to take place each evening
James Foster of Gemstone will lead the workshop. You will also have the opportunity to work with prominent members of the Santa Fe Complex on projects. Sessions run from 8:30 – 4:00 from Monday, March 30 – Thursday, April 2 and from 8:30 – noon on Friday, April 3. Lunch and breaks are included in the $375 fee. For more information, e-mail Dr. Dave West at firstname.lastname@example.org or phone him at 505-231-7233.
Terse Guide to the (new) GLASS Tools post has been updated.
Thanks to James, there is a one-click GemTools 2.4 download are two one-click GemTools preview downloads available based on Pharo. Use the 2.3.0 preview with version 2.3.0 of GemStone/S (like the 1.0beta11 appliance) and the 2.3.1 preview with version 2.3.1 of GemStone/S. [Updated 4/10/2009: see Version Mismatch (preview) for details]
Coming from the Rails world, I clearly see that there is yet missing some proven best practices for the hosting of a Gemstone powered seaside application server. Progress on GemTools is moving fast, that’s super fantastic! And I always felt that there should be a bare access to the deployment, a more basic direct access from the shell, too.
In the world of Rails there is a solid tool called capistrano, which you can use as a deployment servant.
Andreas makes a good point, the production deployment and stone management tools for GLASS leave a lot to be desired. Just ask Danie Roux. Not long ago, he blogged about using Rake to manage multiple GemStone database instances.
I haven’t had a chance to look at either of these tools in detail, but I am glad that the community is stepping in to fill a void.
At this point in time, I think that the GemTools Launcher (GemStone-dkh.441) and the OmniBrowser tools are stable enough that you no longer need to be Brave and/or Curious to take the new tools and GLASS.230-dkh.209 for a spin. In fact the tools are probably in better shape now than they’ve ever been (I haven’t seen the MNU storms that would periodically appear in the old client for quite awhile). If you’re reluctant to upgrade, check out the new Backup/Restore commands. Being able to backup/restore your repository from the GemTools Client should ease your mind.
I still have between 50 and 100 issues that I want to address (mainly on the server-side) before the next beta release. In the mean time, I am all but done with the UI changes and I would like feedback from folks on the new commands. If you haven’t already, join the beta mailing list and send mail with your comments and suggestions.
If you run into (gasp!) a bug, use the new Bug Report commands to report the bug. Honestly, I would rather have people report 100 duplicate bugs than miss 1 valid bug report – don’t assume that I know about the problem!
There have been a significant number of changes to the GemTools Client since the last preview release, so many that I decided to update the old Terse Guide to the GLASS Tools with a new post: Terse Guide to the (new) GLASS Tools. All of the menu items for the GemTools Launcher are documented.
If you haven’t already created a new GemTools client smalltalk image, then follow these instructions.
If you’ve already updated to a preview release, then you’ve already got a new Squeak/Pharo image and all you need to do is to update to the latest version of the GemTools Client, using these instructions.
Take a look at the GemTools change log for a complete history of the changes made between GemStone-dkh.355 and GemStone-dkh.441.
In addition to the support needed for the GemTools Launcher a number of bugs were fixed:
- Bug39820 – packages dirtied unnecessarily when recompiling subclasses
- Bug38105 – HTTPSocketError not correctly loaded
- Bug38794 – Subclass creation method leaves instance creation disabled
- Bug39838 – ExceptionA class>>hasFixFor39741 breaks some things
- Bug38146 – unload class and remove method should clean up undeclared sybmols
- Bug39798 – UndefinedSymbols is not maintained correctly
- Bug39850 – MCPackageBrowser doesn’t update when package dirtied
- Bug39345 – ‘Squeak browser tools need move-to-category button’
- Bug39578 – ‘”revert to version” in “Versions of” method browser does not autocommit’
- Bug39303 – sorting of change list in Monticello brower is strange
- Bug39823 – missing OSkSocketReadStream>>upToEnd
- Bug39800 – SeasideTesting has probably decayed…
- Bug39777 – Cannot ‘browse’ ProtoObject without a walkbalk
- Bug39772 – Class>>allSubInstancesDo: always fails
- Bug39582 – lots of key-not-found errors using Vocabulary browser
- Bug38140 – ‘highlight inspect’ feature for debugger
- Bug38274 – need visual separation between ancestors in MCWorkingCopy>>summary
- Bug38304 – CTL-i on a String or Smallinteger ends up with Squeak inspector
- Bug39662 – Inspecting a float in GLASS results in a ‘Float out of Range’ error in Squeak
- Bug39827 – missing base method for GLASS
- Bug39795 – MAPriorityContainer>>remove: fails unexpectedly
Other highlights include:
- A belated update to Seaside2.8.3.
- Update to Pier 1.1.1.
- Improved Debugger, Inspector, and Chasing Inspector.
The following packages have bee removed from the GLASS package:
These packages are not automatically removed by the update process. If you aren’t using them, then you should manually unload them using the Monitcello Browser. If you don’t remove them you may see test failures for the UndefinedSymbolsTest and SentButNotImplementedTest. After removing the above packages the tests should run clean (4182 run, 4182 passed, 0 failed, 0 errors).
Once you’ve updated to the latest version of the GemTools Client, follow these instructions to update the GLASS server software to GLASS.230-dkh.209.
Take a look at the GLASS change log for a complete history of the changes made between GLASS.230-dkh.187 and GLASS.230-dkh.209.
This post started out as a beta update post, but as I added more and more material I realized that it deserved to be a reincarnation of the Terse Guide to the GLASS Tools. It’s been a year since I wrote the original Terse Guide and there have been significant changes to the whole GLASS tool set, so a new version has been long overdue. However, I do have an announcement post to finish (and it depends upon the information in the Terse Guide), so rather than delay the announcement of the preview release, I decided to publish the Terse Guide before it was complete.
I have completed all of the sections that describe the new functionality of the GemTools Launcher, including a section on installing the GemTools Client in a fresh image. Over the next week, I plan to finish the Terse Guide.
Over time as new features are added I intend to revisit and revise this post. To that end, I’ve created a little update section, where I’ll record information about the updates I make over time:
- current as of GemStone-dkh.441 and GLASS.230-dkh.209 (March 12, 2009)
- one-click GemTools download available, based on Pharo0.1 update 10243 (March 22, 2009)
- Process Browser section updated as of GemStone-dkh.465 and GLASS.230-dkh.228 – Philippe how do you like the fonts? (April 14, 2009)
All of the screen shots in this post were taken using a Pharo image. The GemTools Client runs in both Squeak and Pharo images (see Installation and Update Steps for instructions on setting up an image).
You can click on the screen shots in this post to see full size images.
Today Norbert Hartl wrote a message to the GemStone Mailing list entitled “Evolution of an (un)successful project”, where he describes the ups and downs of a project that he’s been working for the last 3 years. The project was started in Squeak and has been recently ported to GLASS:
I just want to let you know how much I like gemstone at the
moment. It is something that I have wished for a long time.
I’m working on my long term smalltalk project. I started this
with some friends in October 2006. My knowledge in smalltalk
was not too solid. I quickly discovered a lot of things like
seaside, magritte, announcements and such. Quite overwhelming
but my own history shows I tend to such constructs :)
The funny thing is that I did the first version using the GOODS
database. So somehow I was already there. But GOODS was not
active anymore and I doubted its use. So I switched to magma and
learned something about OODBs. At this time everything was just
an installation on my notebook.
Then there were investors and plans. And often you fear the
success way too early. Having big plans in mind I had the fear
that magma wouldn’t be performant enough to cope with our goals.
At this time I ported the (still small) application to Glorp.
Having dealt with O/R Mapping before (in java) I loved Glorp from
the start. It is a very good and flexible piece of software that
deals well with the topic. And it is maintained by a very caring
person that always gets you the answer you need to proceed.
At the end of 2007 the investors vanished in the mist and the
project was near its end. We fought a few months. In this time
the Glorp turned against me. The refactoring rate was high and I
spent 80% of my time with databases and Glorp in order not to have
any impediments for my fellow programmers. This was the time
I started to doubt the usefulness of O/R mapping. The restriction
of directions of references and the rather complex constructs to
deal with real inheritance features is time consuming. And while
having not that much users I noticed performance things already.
The code rested approximately 8 months before I started again. The
announcements of gemstone months before were reason enough for me
to change the very basic groundwork of the application. The application
is somewhat between 30 and 40 thousand lines of code. so the biggest
problem was to find replacements for all the convenient methods in
squeak while porting. Ok to be honest the biggest problem was me
knowing nothing about gemstone.
But after 2 days I had the first page displayed again with one
component active. That was a big motivation. Well it took me
another 3 months to reach the status quo of the old application.
There were lot of things going wrong but with a good debugger it
is just a matter of time. And 3 months sounds much but I have a
full time job so I spent maybe 1-2 full days per week. One of
this success factors is the terrific support from the gemstone
guys. I might say that is one of the best parts in developing.
The status quo is overtaken and the fun started to come back.
Especially this weekend I needed to change a lot of the ground
structure of my model. Sitting on a workspace that is remotely
connected and change everything in your model with a few lines
of code is just as it should be and what you usually never get.
Finally yesterday I had the best experience. As every web site
you also have a register page. And usually you choose your country
in such page. That were only a handful strings. Then I decided
I want to have real country objects. There were 2 hours left
until I had a date for going to the cinema. I researched the web
for country names and codes. Then I hacked a quick perl script
to combine everything in a csv like format. Having the file it
took only minutes to implement the object, write a parser for
the file (workspace), read the file to objects. Then I just
changed the magritte description for country and…
… it worked!!! That was really a big thing. Not because it is
a big thing but only because in every other technology you have
at least to break your leg before you get it imported, managed and
persisted. That was so quick that I connected to the remote/
live image and repeated it there. It just worked. That was
such a good feeling and I was 20 minutes early for cinema. So
relaxing and good I should have known it means the movie will
be bad :) But that is a different story.
Just to let you know that I like gemstone and I appreciate
the support on this list. And I hope we will make our site
public in the next couple of months.
Well, then everything it needs is to support more languages
than german :))
keep the good work, your fan