<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>(gem)Stone Soup</title>
	<atom:link href="http://gemstonesoup.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://gemstonesoup.wordpress.com</link>
	<description>tips and techniques for using GemStone/S and Seaside</description>
	<lastBuildDate>Fri, 12 Jun 2009 04:01:11 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<image>
		<url>http://www.gravatar.com/blavatar/41df98b73d9cb0fc116ed7252536061e?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>(gem)Stone Soup</title>
		<link>http://gemstonesoup.wordpress.com</link>
	</image>
			<item>
		<title>Deep SIXX with XMLPullParser</title>
		<link>http://gemstonesoup.wordpress.com/2009/06/01/deep-sixx-with-xmlpullparser/</link>
		<comments>http://gemstonesoup.wordpress.com/2009/06/01/deep-sixx-with-xmlpullparser/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 02:30:00 +0000</pubDate>
		<dc:creator>Dale Henrichs</dc:creator>
				<category><![CDATA[GLASS]]></category>
		<category><![CDATA[Gemstone]]></category>
		<category><![CDATA[porting]]></category>

		<guid isPermaLink="false">http://gemstonesoup.wordpress.com/?p=1971</guid>
		<description><![CDATA[
Ken Treis has post up called Deep SIXX with XMLPullParser about how he and the folks at his company use SIXX to transfer objects between GemStone and Pharo.
Ken ported Antony Blakey&#8217;s XMLPullParser from VisualWorks to Squeak in a (successful) attempt to reduce the amount of memory consumed while copying large object graphs using SIXX.
If you [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gemstonesoup.wordpress.com&blog=1067048&post=1971&subd=gemstonesoup&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a title="Free Immersion" href="http://www.flickr.com/photos/jayhem/442375664/in/photostream/"><img class="alignleft" style="border:2px solid #000000;" src="http://farm1.static.flickr.com/210/442375664_1a8136fa65.jpg" alt="" width="140" height="210" /></a></p>
<p><a href="http://kentreis.wordpress.com/">Ken Treis</a> has post up called <a href="http://kentreis.wordpress.com/2009/06/01/deep-sixx-with-xml-pull-parser/">Deep SIXX with XMLPullParser</a> about how he and the folks at his company use <a href="http://www.mars.dti.ne.jp/~umejava/smalltalk/sixx/index.html">SIXX</a> to transfer objects between <a href="http://seaside.gemstone.com/">GemStone</a> and <a href="http://www.pharo-project.org/">Pharo</a>.</p>
<p>Ken ported <a href="http://www.cincomsmalltalk.com/userblogs/antony/blogView">Antony Blakey&#8217;s</a> <a href="http://www.cincomsmalltalk.com/userblogs/antony/blogView?entry=3368495147">XMLPullParser</a> from <a href="http://www.cincomsmalltalk.com/userblogs/cincom/blogView?content=vwfactsheet">VisualWorks</a> to <a href="http://www.squeak.org/">Squeak</a> in a (successful) attempt to reduce the amount of memory consumed while copying large object graphs using SIXX.</p>
<p>If you are developing in Squeak/Pharo and deploying in GemStone, then you should check out Ken&#8217;s <a href="http://kentreis.wordpress.com/2009/06/01/deep-sixx-with-xml-pull-parser/">work</a>.</p>
<p style="clear:left;">Photo by <a title="jayhem" href="http://www.flickr.com/photos/jayhem/442375664/in/photostream/">jayhem</a> (<a title="Creative Commons" href="http://creativecommons.org/licenses/by/2.0/deed.en">Creative Commons</a>).</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gemstonesoup.wordpress.com/1971/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gemstonesoup.wordpress.com/1971/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gemstonesoup.wordpress.com/1971/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gemstonesoup.wordpress.com/1971/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gemstonesoup.wordpress.com/1971/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gemstonesoup.wordpress.com/1971/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gemstonesoup.wordpress.com/1971/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gemstonesoup.wordpress.com/1971/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gemstonesoup.wordpress.com/1971/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gemstonesoup.wordpress.com/1971/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gemstonesoup.wordpress.com&blog=1067048&post=1971&subd=gemstonesoup&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gemstonesoup.wordpress.com/2009/06/01/deep-sixx-with-xmlpullparser/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e046bfe0f8659efad7946c4085762b58?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">daleh</media:title>
		</media:content>

		<media:content url="http://farm1.static.flickr.com/210/442375664_1a8136fa65.jpg" medium="image" />
	</item>
		<item>
		<title>ICE named 2009 Exchange of the Year</title>
		<link>http://gemstonesoup.wordpress.com/2009/05/22/ice-named-2009-exchange-of-the-year/</link>
		<comments>http://gemstonesoup.wordpress.com/2009/05/22/ice-named-2009-exchange-of-the-year/#comments</comments>
		<pubDate>Fri, 22 May 2009 21:15:03 +0000</pubDate>
		<dc:creator>Dale Henrichs</dc:creator>
				<category><![CDATA[Gemstone]]></category>
		<category><![CDATA[Success Stories]]></category>

		<guid isPermaLink="false">http://gemstonesoup.wordpress.com/?p=1962</guid>
		<description><![CDATA[Longtime GemStone customer Intercontinental Exchange has been named 2009 Exchange of the Year by Energy Risk magazine.
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gemstonesoup.wordpress.com&blog=1067048&post=1962&subd=gemstonesoup&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><img class="alignleft size-full wp-image-1960" title="logo_iceWhiteBg" src="http://gemstonesoup.files.wordpress.com/2009/05/logo_icewhitebg.gif?w=51&#038;h=50" alt="logo_iceWhiteBg" width="51" height="50" />Longtime <a href="http://www.gemstone.com/">GemStone</a> customer <a href="https://www.theice.com/homepage.jhtml">Intercontinental Exchange</a> has been <a href="http://www.automatedtrader.net/algo-trading-news-11083.xhtm">named 2009 Exchange of the Year</a> by <a href="http://www.energyrisk.com/public/showPage.html?page=erisk_index">Energy Risk</a> magazine.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gemstonesoup.wordpress.com/1962/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gemstonesoup.wordpress.com/1962/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gemstonesoup.wordpress.com/1962/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gemstonesoup.wordpress.com/1962/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gemstonesoup.wordpress.com/1962/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gemstonesoup.wordpress.com/1962/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gemstonesoup.wordpress.com/1962/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gemstonesoup.wordpress.com/1962/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gemstonesoup.wordpress.com/1962/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gemstonesoup.wordpress.com/1962/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gemstonesoup.wordpress.com&blog=1067048&post=1962&subd=gemstonesoup&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gemstonesoup.wordpress.com/2009/05/22/ice-named-2009-exchange-of-the-year/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e046bfe0f8659efad7946c4085762b58?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">daleh</media:title>
		</media:content>

		<media:content url="http://gemstonesoup.files.wordpress.com/2009/05/logo_icewhitebg.gif" medium="image">
			<media:title type="html">logo_iceWhiteBg</media:title>
		</media:content>
	</item>
		<item>
		<title>GemStone 101: Making the Leap from RDBMS to Persistent Objects</title>
		<link>http://gemstonesoup.wordpress.com/2009/05/19/gemstone-101-making-the-leap-from-rdbms-to-persistent-objects/</link>
		<comments>http://gemstonesoup.wordpress.com/2009/05/19/gemstone-101-making-the-leap-from-rdbms-to-persistent-objects/#comments</comments>
		<pubDate>Tue, 19 May 2009 23:44:41 +0000</pubDate>
		<dc:creator>Dale Henrichs</dc:creator>
				<category><![CDATA[Gemstone]]></category>

		<guid isPermaLink="false">http://gemstonesoup.wordpress.com/?p=1949</guid>
		<description><![CDATA[(c) Rick Harrison
Earlier today, Ramon Leon posted a very good response to a Pat Maddox question How do you handle constraints on persisted collections?:
I&#8217;m trying to make the leap from RDBMS/ORM thinking to pure objects,
and am running into some problems.  The first is how to handle
constraints on collections, when the objects inside of that [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gemstonesoup.wordpress.com&blog=1067048&post=1949&subd=gemstonesoup&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a title="jump sequence" href="http://www.flickr.com/photos/sovietuk/488949072/"><img class="alignnone" style="border:2px solid #000000;" src="http://farm1.static.flickr.com/231/488949072_be64bfb8da.jpg" alt="" width="350" height="195" /></a><a href="http://creativecommons.org/licenses/by-nc-sa/2.0/deed.en">(c)</a> <a href="http://www.flickr.com/photos/sovietuk">Rick Harrison</a></p>
<p>Earlier today, <a href="http://onsmalltalk.com/">Ramon Leon</a> posted a <a href="http://lists.squeakfoundation.org/pipermail/seaside/2009-May/020694.html">very good response</a> to a <a href="http://www.patmaddox.com/">Pat Maddox</a> question <a href="http://lists.squeakfoundation.org/pipermail/seaside/2009-May/020688.html">How do you handle constraints on persisted collections?</a>:</p>
<p style="padding-left:30px;background-color:#F5F5DC;">I&#8217;m trying to make the leap from RDBMS/ORM thinking to pure objects,<br />
and am running into some problems.  The first is how to handle<br />
constraints on collections, when the objects inside of that collection<br />
are mutable.  Quick example, ensuring that only one user exists with a<br />
certain username.  It&#8217;s trivial to check that a username is available<br />
before adding the user to a UserRepository.  If a user can update his<br />
own username though, it&#8217;ll bypass any check on the UserRepository and<br />
invalidate that constraint.  A couple options&#8230;</p>
<p style="padding-left:30px;background-color:#F5F5DC;">1. Have a ChangeUsername command that reserves that username in the<br />
repo, tells the user object to change its username, and then tells the<br />
repo to free the original username<br />
2. When user username: is called, publish a UsernameChanged event that<br />
the repository subscribes to.  The repo can choose to reject the<br />
change if it would violate the repo&#8217;s constraints.</p>
<p style="padding-left:30px;background-color:#F5F5DC;">The first is just a bit ugly and procedural.  The second requires the<br />
User object to publish events whenever something happens &#8211; which is<br />
easy to forget to do, or you&#8217;re left with determining which method<br />
calls warrant the publishing of events.  Also you&#8217;d have to roll back<br />
the change if the event is rejected.</p>
<p style="padding-left:30px;background-color:#F5F5DC;">You could handle that stuff by writing some framework code to manage<br />
the tedious stuff&#8230;I don&#8217;t love either approach though.  How do you<br />
guys tackle this sort of problem?
</p>
<p style="padding-left:30px;background-color:#F5F5DC;">Pat</p>
<p>And I thought that I would reproduce Ramon&#8217;s <a href="http://lists.squeakfoundation.org/pipermail/seaside/2009-May/020694.html">answer</a> here, because I think it helps folks coming from a relational world to start thinking in terms of persistent objects:</p>
<p style="padding-left:30px;background-color:#F5F5DC;">The short answer is you don&#8217;t.</p>
<p style="padding-left:30px;background-color:#F5F5DC;">The longer answer is you&#8217;re still thinking relationally; thinking in sets.<br />
OODB&#8217;s and RDBM&#8217;s are different paradigms and have vastly different strength<br />
and weaknesses.  RDBM&#8217;s are much better at guaranteeing data integrity<br />
through things such as constraints and keys rather than collections and<br />
pointers, there&#8217;s a theoretical foundation for this, but OODB&#8217;s have no such<br />
mathematical rigor.  This is a weakness of the OODB.  There is no one<br />
provable right way to do it.</p>
<p style="padding-left:30px;background-color:#F5F5DC;">On the other hand, RDBM&#8217;s have to force everything into a single fixed<br />
schema data structure to accomplish this.  The problem is this isn&#8217;t the<br />
data structure most programs actually use.  RDBM&#8217;s don&#8217;t speak objects, the<br />
primary method programs actually use to model their domain, and every<br />
attempt to bridge that layer by automatically mapping objects to tables<br />
leads to very serious constraints on the object model.  It becomes infected<br />
with compromises to performance or compromises to the flexibility of the<br />
model in order to make it fit.  Last but not least you&#8217;re stuck with a whole<br />
new layer of code to maintain, the mapping layer, that wouldn&#8217;t even be<br />
necessary with an OODB and prior to Rails was often more code than the<br />
domain model itself.  If you really enjoy programming with objects,<br />
relational databases will never quite fit right, there&#8217;s just an impendence<br />
mismatch that as far as I know no one has ever solved cleanly.</p>
<p style="padding-left:30px;background-color:#F5F5DC;">So for a query optimizer, declarative constraints and indexing, you have to<br />
do a whole lot more programming.  A fair trade to some for the rigor they<br />
require, but for those who choose the OODB, they&#8217;re willing to trade the<br />
rigor for the pragmatism of doing a ton less work and actually getting<br />
things done that just work good enough.  I can&#8217;t tell you how many RDBM&#8217;s<br />
I&#8217;ve run across that in production that didn&#8217;t have a single foreign key in<br />
place or use constraints at all (often for performance reasons) and chug<br />
along just fine making plenty of money for the gold owner.  You&#8217;re<br />
experienced with Rails, so you&#8217;re aware that most Rails apps don&#8217;t use<br />
foreign keys at all.  Rails treats the db like a big persistent hash table<br />
preferring to keep the logic in the model.  This is a very object way of<br />
doing things.  It&#8217;s not perfect, but it works well enough in practice.</p>
<p style="padding-left:30px;background-color:#F5F5DC;">Look at what Rails has to do to try and fake polymorphic collections,<br />
something that is so utterly trivial in an OODBMs that you don&#8217;t even<br />
realize it&#8217;s anything special to do.  Toss a bunch of object into a<br />
collection and commit; done.  The flexibility you gain in modeling things<br />
any way you wish using any data structure you want more than makes up for<br />
the things you lose, i.e. simple declarative constraints and a query<br />
optimizer that lets you just slap on indexes after the fact.</p>
<p style="padding-left:30px;background-color:#F5F5DC;">With an OODB you have to think more up front and structure you domain in<br />
such a way that your primary use cases are primarily handled by pointer<br />
navigation.  If you&#8217;re building a blog, you index the posts by the URL in a<br />
dictionary, you put the comments into a collection in the post.  Maybe you<br />
hang the posts off the user who wrote them as well.  When it&#8217;s all setup,<br />
there&#8217;s very little if any querying going on.  Now OODB&#8217;s do support indexed<br />
collections when you need queries but if you&#8217;re writing a behavioral app<br />
rather than a reporting engine, more often than not you don&#8217;t want queries<br />
you want tree&#8217;s of related objects that actually do things.</p>
<p style="padding-left:30px;background-color:#F5F5DC;">If you need to use some special high performance custom written collection<br />
to index your model just the way you want it, an OODB lets you, it&#8217;s just<br />
another object after all.  If you need collections of objects where every<br />
instance could have wildly different data because you allow the user to add<br />
custom fields, the OODB has no problem with this.  It doesn&#8217;t care about the<br />
structure of your objects.  The price you pay for that flexibility is you&#8217;re<br />
on your own, no declarative constraints or query optimizer.  On the other<br />
hand, you&#8217;re not limited in what you want to do.  A relational db just can&#8217;t<br />
do user generated fields without converting those fields into rows and<br />
losing its queryability and performance.</p>
<p style="padding-left:30px;background-color:#F5F5DC;">Sorry, that turned into a longer post than I&#8217;d intended and I&#8217;m sure you<br />
already know much of if not all of this, but others who are considering<br />
OODBs might find this useful.  It&#8217;s a different paradigm and requires a<br />
different style of thinking but pragmatically has a lot of benefits if being<br />
productive is the goal.</p>
<p style="padding-left:30px;background-color:#F5F5DC;">Anyway, my approach to your particular issue would be to simply make the<br />
name field immutable after being set the first time.  A simple guard clause<br />
in the accessor that threw an exception if someone tried to set the field if<br />
it already had a value and the new value was different would protect any<br />
unintended aliasing bugs.  After all, an object should encapsulate its own<br />
business rules and if the field were unique I&#8217;d have modeled that by hashing<br />
it in a dictionary by that fields value.  It&#8217;s not the rigorous guarantee<br />
that a constraint on a set is, but objects aren&#8217;t about sets, they&#8217;re about<br />
instances and in any real program it&#8217;s pragmatic enough to get the job done.</p>
<p style="padding-left:30px;background-color:#F5F5DC;">Ramon Leon<br />
http://onsmalltalk.com</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gemstonesoup.wordpress.com/1949/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gemstonesoup.wordpress.com/1949/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gemstonesoup.wordpress.com/1949/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gemstonesoup.wordpress.com/1949/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gemstonesoup.wordpress.com/1949/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gemstonesoup.wordpress.com/1949/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gemstonesoup.wordpress.com/1949/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gemstonesoup.wordpress.com/1949/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gemstonesoup.wordpress.com/1949/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gemstonesoup.wordpress.com/1949/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gemstonesoup.wordpress.com&blog=1067048&post=1949&subd=gemstonesoup&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gemstonesoup.wordpress.com/2009/05/19/gemstone-101-making-the-leap-from-rdbms-to-persistent-objects/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e046bfe0f8659efad7946c4085762b58?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">daleh</media:title>
		</media:content>

		<media:content url="http://farm1.static.flickr.com/231/488949072_be64bfb8da.jpg" medium="image" />
	</item>
		<item>
		<title>GLASS Beta Update: Fixin&#8217; Some Bugs (Preview)</title>
		<link>http://gemstonesoup.wordpress.com/2009/05/12/glass-beta-update-fixin-some-bugs-preview/</link>
		<comments>http://gemstonesoup.wordpress.com/2009/05/12/glass-beta-update-fixin-some-bugs-preview/#comments</comments>
		<pubDate>Tue, 12 May 2009 23:10:40 +0000</pubDate>
		<dc:creator>Dale Henrichs</dc:creator>
				<category><![CDATA[GLASS]]></category>
		<category><![CDATA[beta update]]></category>

		<guid isPermaLink="false">http://gemstonesoup.wordpress.com/?p=1926</guid>
		<description><![CDATA[[1]
In the month since the last beta update, I&#8217;ve been mostly heads down working on Metacello a version control/configuration managements framework. Metacello isn&#8217;t ready for public consumption yet, when it is, you will hear about it here. [Update later that day] Metacello is not a Monticello replacement, it is a Monticello enhancement.
Besides Metacello there have [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gemstonesoup.wordpress.com&blog=1067048&post=1926&subd=gemstonesoup&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a title="Watchmaker" href="http://www.flickr.com/photos/dashananda/310662720/"><img class="alignnone" style="border:2px solid #000000;" src="http://farm1.static.flickr.com/115/310662720_5fce28b6b6.jpg" alt="" width="400" height="300" /></a><a href="#photo36">[1]</a></p>
<p>In the month since the <a href="http://gemstonesoup.wordpress.com/2009/04/15/glass-beta-update-working-with-soap-preview/">last beta update</a>, I&#8217;ve been mostly heads down working on Metacello a version control/configuration managements framework. Metacello isn&#8217;t ready for public consumption yet, when it is, you will hear about it here. <strong>[Update later that day]</strong> Metacello is not a Monticello replacement, it is a Monticello enhancement.</p>
<p>Besides Metacello there have been a handful of bugfixes that are worth packaging up. The most important of which gets rid of potential infinite recursion in ExceptionA&gt;&gt;description.</p>
<h2>GemStone-dkh.467</h2>
<p>No GemTools changes. Added <strong>GLASS.230-dkh.231</strong> to update list as an alpha release.</p>
<h2>GLASS.230-dkh.231</h2>
<p>GLASS bugfixes and additions:</p>
<ul>
<li>fix for ExceptionA&gt;&gt;description infinite recursion problem reported by Dario</li>
<li>non-recursive MCAncestry&gt;&gt;ancestorsDoWhileTrue:</li>
<li>added methods to be able to cleanUp MethodVersionHistory instances (thanks Gerhard)</li>
<li>fix problem with recompile:, where method hasn&#8217;t been loaded because of other issues</li>
<li>bugfix 39932 &#8211; Url decoding not decoding &#8216;+&#8217; in url</li>
<li>fix a problem reading an MCZ reported by Dario &#8230; turns out we needed a &#8216;null&#8217; Error handler:)</li>
<li>incorporate Squeak protocol additions from <a href="http://onsmalltalk.com/">Ramon Leon</a>.</li>
</ul>
<h2>Update Process</h2>
<p>To update an existing installation to <strong>GemStone-dkh.467</strong> and <strong>GLASS.230-dkh.231</strong>, follow these <a href="../2009/03/16/terse-guide-to-the-new-glass-tools/#updatesteps">instructions</a>. If you have recently downloaded an <a href="http://gemstonesoup.wordpress.com/2007/09/07/glass-a-seaside-appliance/">appliance</a> or installed <a href="http://gemstonesoup.wordpress.com/2008/12/12/gemstones-64-version-231-is-shipping/">GemStone/S 64 2.3.1</a>, then follow these <a href="http://gemstonesoup.wordpress.com/2009/03/16/terse-guide-to-the-new-glass-tools/#update">instructions</a> telling you how to get a recent GemTools client vm.</p>
<p>If you update to <strong>GLASS.230-dkh.231</strong> from a version prior to <strong>GLASS.230-dkh.231</strong>, a <em>Warning</em> dialog will pop up – proceed through the warning.</p>
<p>&#8212;&#8211;<br />
<a title="photo" name="photo36">[1]</a> Photo by <a title="dashananda" href="http://www.flickr.com/photos/dashananda/310662720/">dashananda</a> (<a title="Creative Commons" href="http://creativecommons.org/licenses/by-nc-nd/2.0/deed.en">Creative Commons</a>).</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gemstonesoup.wordpress.com/1926/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gemstonesoup.wordpress.com/1926/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gemstonesoup.wordpress.com/1926/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gemstonesoup.wordpress.com/1926/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gemstonesoup.wordpress.com/1926/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gemstonesoup.wordpress.com/1926/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gemstonesoup.wordpress.com/1926/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gemstonesoup.wordpress.com/1926/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gemstonesoup.wordpress.com/1926/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gemstonesoup.wordpress.com/1926/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gemstonesoup.wordpress.com&blog=1067048&post=1926&subd=gemstonesoup&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gemstonesoup.wordpress.com/2009/05/12/glass-beta-update-fixin-some-bugs-preview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e046bfe0f8659efad7946c4085762b58?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">daleh</media:title>
		</media:content>

		<media:content url="http://farm1.static.flickr.com/115/310662720_5fce28b6b6.jpg" medium="image" />
	</item>
		<item>
		<title>Easy Remote GemStone</title>
		<link>http://gemstonesoup.wordpress.com/2009/05/11/easy-remote-gemstone/</link>
		<comments>http://gemstonesoup.wordpress.com/2009/05/11/easy-remote-gemstone/#comments</comments>
		<pubDate>Mon, 11 May 2009 22:35:55 +0000</pubDate>
		<dc:creator>Dale Henrichs</dc:creator>
				<category><![CDATA[GLASS]]></category>
		<category><![CDATA[Gemstone]]></category>

		<guid isPermaLink="false">http://gemstonesoup.wordpress.com/?p=1916</guid>
		<description><![CDATA[Norbert Hartl just published Easy remote gemstone, an article outlining the steps for setting up a linux host for remote access by the GemTools. Norbert details the steps for either poking holes in your firewall or using an ssh tunnel.
Photo by extratony (Creative Commons).
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gemstonesoup.wordpress.com&blog=1067048&post=1916&subd=gemstonesoup&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a title="Vex Remote Control" href="http://www.flickr.com/photos/extratony/117827141/in/photostream/"><img class="alignleft" style="border:2px solid #000000;" src="http://farm1.static.flickr.com/41/117827141_1b9a92d14c.jpg" alt="" width="150" height="112" /></a><a href="http://selfish.org">Norbert Hartl</a> just published <a href="http://selfish.org/blog/easy+remote+gemstone">Easy remote gemstone</a>, an article outlining the steps for setting up a linux host for remote access by the <a href="http://gemstonesoup.wordpress.com/2009/03/16/terse-guide-to-the-new-glass-tools/">GemTools</a>. Norbert details the steps for either poking holes in your firewall or using an ssh tunnel.</p>
<p style="clear:left;">Photo by <a title="extratony" href="http://www.flickr.com/photos/extratony/117827141/in/photostream/">extratony</a> (<a title="Creative Commons" href="http://creativecommons.org/licenses/by-nc-sa/2.0/deed.en">Creative Commons</a>).</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gemstonesoup.wordpress.com/1916/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gemstonesoup.wordpress.com/1916/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gemstonesoup.wordpress.com/1916/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gemstonesoup.wordpress.com/1916/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gemstonesoup.wordpress.com/1916/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gemstonesoup.wordpress.com/1916/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gemstonesoup.wordpress.com/1916/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gemstonesoup.wordpress.com/1916/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gemstonesoup.wordpress.com/1916/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gemstonesoup.wordpress.com/1916/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gemstonesoup.wordpress.com&blog=1067048&post=1916&subd=gemstonesoup&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gemstonesoup.wordpress.com/2009/05/11/easy-remote-gemstone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e046bfe0f8659efad7946c4085762b58?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">daleh</media:title>
		</media:content>

		<media:content url="http://farm1.static.flickr.com/41/117827141_1b9a92d14c.jpg" medium="image" />
	</item>
		<item>
		<title>Seaside/GLASS Success Story</title>
		<link>http://gemstonesoup.wordpress.com/2009/05/08/seasideglass-success-story/</link>
		<comments>http://gemstonesoup.wordpress.com/2009/05/08/seasideglass-success-story/#comments</comments>
		<pubDate>Fri, 08 May 2009 17:37:43 +0000</pubDate>
		<dc:creator>Dale Henrichs</dc:creator>
				<category><![CDATA[GLASS]]></category>
		<category><![CDATA[Seaside]]></category>
		<category><![CDATA[Success Stories]]></category>

		<guid isPermaLink="false">http://gemstonesoup.wordpress.com/?p=1906</guid>
		<description><![CDATA[Andreas Brodbeck published Seaside project is live! a report on his successful use of GLASS and Seaside for a course management tool application.
Andreas shares some of his tips for doing development in Squeak/Pharo and deploying in GemStone/S.
Photo by gorgeoux (Creative Commons).
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gemstonesoup.wordpress.com&blog=1067048&post=1906&subd=gemstonesoup&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a title="crystal clear" href="http://www.flickr.com/photos/gorgeoux/631381080/"><img class="alignleft" style="border:2px solid #000000;" src="http://farm2.static.flickr.com/1056/631381080_b252479991.jpg" alt="" width="150" height="113" /></a><a href="http://andreas.mindclue.ch">Andreas Brodbeck</a> published <a href="http://andreas.mindclue.ch/blog/seaside+project+live">Seaside project is live!</a> a report on his successful use of <a href="http://seaside.gemstone.com/">GLASS</a> and <a href="http://www.seaside.st/">Seaside</a> for a course management tool application.</p>
<p>Andreas shares some of his tips for doing development in <a href="http://www.squeak.org/">Squeak</a>/<a href="http://www.pharo-project.org/">Pharo</a> and deploying in <a href="http://www.gemstone.com/products/smalltalk/">GemStone/S</a>.</p>
<p style="clear:left;">Photo by <a title="gorgeoux" href="http://www.flickr.com/photos/gorgeoux/631381080/">gorgeoux</a> (<a title="Creative Commons" href="http://creativecommons.org/licenses/by-nc-sa/2.0/deed.en">Creative Commons</a>).</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gemstonesoup.wordpress.com/1906/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gemstonesoup.wordpress.com/1906/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gemstonesoup.wordpress.com/1906/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gemstonesoup.wordpress.com/1906/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gemstonesoup.wordpress.com/1906/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gemstonesoup.wordpress.com/1906/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gemstonesoup.wordpress.com/1906/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gemstonesoup.wordpress.com/1906/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gemstonesoup.wordpress.com/1906/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gemstonesoup.wordpress.com/1906/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gemstonesoup.wordpress.com&blog=1067048&post=1906&subd=gemstonesoup&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gemstonesoup.wordpress.com/2009/05/08/seasideglass-success-story/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e046bfe0f8659efad7946c4085762b58?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">daleh</media:title>
		</media:content>

		<media:content url="http://farm2.static.flickr.com/1056/631381080_b252479991.jpg" medium="image" />
	</item>
		<item>
		<title>GemStone Performance and Advanced System Management Course</title>
		<link>http://gemstonesoup.wordpress.com/2009/05/07/gemstone-performance-and-advanced-system-management-course/</link>
		<comments>http://gemstonesoup.wordpress.com/2009/05/07/gemstone-performance-and-advanced-system-management-course/#comments</comments>
		<pubDate>Thu, 07 May 2009 21:59:19 +0000</pubDate>
		<dc:creator>Dale Henrichs</dc:creator>
				<category><![CDATA[Gemstone]]></category>

		<guid isPermaLink="false">http://gemstonesoup.wordpress.com/?p=1900</guid>
		<description><![CDATA[[1]
Norm Green has announced open enrollment for the following course:
Course: GemStone Performance and Advanced System Management
Dates: June 8 &#8211; 10, 2009
Location: Beaverton, Oregon, USA
Cost: $2300 per student.
Registration: send email to training at gemstone dot com

Description:
This three-day course builds on the concepts introduced in GemStone&#8217;s
Fundamentals of GemStone/S course. Students gain an understanding of
advanced concepts and issues [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gemstonesoup.wordpress.com&blog=1067048&post=1900&subd=gemstonesoup&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a title="Gasworks Calisthenics" href="http://www.flickr.com/photos/jblucher/1135001630/"><img class="alignnone" style="border:2px solid #000000;" src="http://farm2.static.flickr.com/1046/1135001630_9b74bcf0f4.jpg" alt="" width="400" height="286" /></a><a href="#photo35">[1]</a></p>
<p>Norm Green has announced open enrollment for the following course:</p>
<p style="padding-left:30px;">Course: GemStone Performance and Advanced System Management<br />
Dates: June 8 &#8211; 10, 2009<br />
Location: Beaverton, Oregon, USA<br />
Cost: $2300 per student.<br />
Registration: send email to training at gemstone dot com
</p>
<p style="padding-left:30px;">Description:</p>
<p style="padding-left:30px;">This three-day course builds on the concepts introduced in GemStone&#8217;s<br />
Fundamentals of GemStone/S course. Students gain an understanding of<br />
advanced concepts and issues associated with the performance and<br />
tuning of GemStone’s object server. The instruction format consists of<br />
lectures and guided explorations through actual examples providing<br />
each student with real-world experience.
</p>
<p style="padding-left:30px;">You Should Take This Course If You</p>
<ul style="padding-left:30px;">
<li>Want to enhance the performance of GemStone with tuning techniques</li>
<li>May have some responsibility or interaction with administering a GemStone system</li>
<li>Seek a deep understanding of the GemStone object server</li>
</ul>
<p style="padding-left:30px;">Your Recommended Prerequisites For This Course Are</p>
<ul style="padding-left:30px;">
<li>&#8220;Fundamentals of GemStone/S&#8221; course</li>
</ul>
<p style="padding-left:30px;">This Course Will Teach You About</p>
<p style="padding-left:30px;">Concepts</p>
<ul style="padding-left:30px;">
<li>How a functioning GemStone system behaves</li>
<li>Fundamental and advanced concepts of GemStone’s architecture</li>
<li>Sophisticated monitoring and troubleshooting techniques</li>
<li>How to obtain and apply numerous significant server statistics</li>
<li>Tuning a GemStone server for performance</li>
</ul>
<p style="padding-left:30px;">&#8212;&#8211;<br />
<a title="photo" name="photo35">[1]</a> Photo by <a title="Jeff Blucher" href="http://www.flickr.com/photos/jblucher/1135001630/">Jeff Blucher</a> (<a title="Creative Commons" href="http://creativecommons.org/licenses/by-nc-sa/2.0/deed.en">Creative Commons</a>).</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gemstonesoup.wordpress.com/1900/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gemstonesoup.wordpress.com/1900/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gemstonesoup.wordpress.com/1900/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gemstonesoup.wordpress.com/1900/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gemstonesoup.wordpress.com/1900/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gemstonesoup.wordpress.com/1900/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gemstonesoup.wordpress.com/1900/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gemstonesoup.wordpress.com/1900/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gemstonesoup.wordpress.com/1900/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gemstonesoup.wordpress.com/1900/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gemstonesoup.wordpress.com&blog=1067048&post=1900&subd=gemstonesoup&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gemstonesoup.wordpress.com/2009/05/07/gemstone-performance-and-advanced-system-management-course/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e046bfe0f8659efad7946c4085762b58?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">daleh</media:title>
		</media:content>

		<media:content url="http://farm2.static.flickr.com/1046/1135001630_9b74bcf0f4.jpg" medium="image" />
	</item>
		<item>
		<title>GLASS Beta Update: Working with SOAP (Preview)</title>
		<link>http://gemstonesoup.wordpress.com/2009/04/15/glass-beta-update-working-with-soap-preview/</link>
		<comments>http://gemstonesoup.wordpress.com/2009/04/15/glass-beta-update-working-with-soap-preview/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 22:22:18 +0000</pubDate>
		<dc:creator>Dale Henrichs</dc:creator>
				<category><![CDATA[GLASS]]></category>
		<category><![CDATA[beta update]]></category>

		<guid isPermaLink="false">http://gemstonesoup.wordpress.com/?p=1776</guid>
		<description><![CDATA[[1]
If you find yourself wishing that you could work with SOAP and GLASS, you don&#8217;t need to head out to the shed and drag out the old bucket and squeegee. All you need to do is load up the latest preview GLASS version and you&#8217;ll be ready to go!
HTTP Server and Client
Before getting started with [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gemstonesoup.wordpress.com&blog=1067048&post=1776&subd=gemstonesoup&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a title="Windows Vista" href="http://www.flickr.com/photos/sea-turtle/3388096008/"><img class="alignnone" style="border:2px solid #000000;" src="http://farm4.static.flickr.com/3567/3388096008_e8826775cb.jpg" alt="" width="400" height="300" /></a><a href="#photo33">[1]</a></p>
<p>If you find yourself wishing that you could work with <a href="http://www.w3schools.com/SOAP/soap_intro.asp">SOAP</a> and <a href="http://seaside.gemstone.com/">GLASS</a>, you don&#8217;t need to head out to the shed and drag out the old bucket and squeegee. All you need to do is load up the latest preview GLASS version and you&#8217;ll be ready to go!</p>
<h2>HTTP Server and Client</h2>
<p>Before getting started with SOAP, we need to talk a little bit about Hyper. SOAP needs an HTTP client to access services and an HTTP server to provide services. While there are a number of good Smalltalk-based HTTP server implementations floating around out there, there aren&#8217;t very many good HTTP Clients!</p>
<p>Fortunately,  <a href="http://openskills.blogspot.com/">Bruce Badger</a> has been continuously updating his <a href="http://www.cincomsmalltalk.com/userblogs/badger/blogView?showComments=true&amp;printTitle=An_HTTP_server_named_Hyper&amp;entry=3326126388">Hyper</a> HTTP server and last fall he released a version of Hyper with a very nice HTTP Client implementation. <a href="http://gemstonesoup.wordpress.com/2008/12/11/glass-beta-update-a-perfect-storm-glass230-dkh177/#GLASS.231">In November</a>, I used the Hyper HTTP Client in a port of <a href="http://www.mars.dti.ne.jp/~umejava/smalltalk/soapOpera/soapCore.html">Masashi Umezawa&#8217;s SoapCore</a> and created a GLASS.231 branch. I needed to create a branch, because the new Hyper was incompatible with the version of Swazoo that I was using for <a href="http://seaside.st/">Seaside</a>.</p>
<p>Recently I&#8217;ve received a number of requests for SOAP support in GLASS, so I bit the bullet last week and tackled the Seaside/Swazoo/Hyper issue. After a couple of days working through various solutions, I decided to ditch Swazoo and write a simple service class for gluing together Hyper and Seaside. See the section on <a href="#Hyper">Using Hyper</a> for details.</p>
<h2>AIDA</h2>
<p>To be fair, the Swazoo code used in GLASS was several years old (at least). <a href="http://www.eranova.si/">Janko Mivšek</a> has a newer version of Swazoo (<a href="http://seaside.gemstone.com/ss/swazoo2.html">Swazoo 2</a>) ported to GLASS, but for SOAP support I need an HTTP Client and the latest Hyper is the ticket. To use <a href="http://www.aidaweb.si/">Aida</a> with GLASS going forward, you should probably unload the Hyper package, before following Janko&#8217;s instructions for <a href="http://www.aidaweb.si/gemstone-glass.html">running Aida/Web on GLASS</a>.</p>
<h2>SOAP</h2>
<p>Back in November, I was able to find 3 SOAP servers in the wild that were still up and running (<a href="http://soap.4s4c.com/">4s4c</a>, <a href="http://www.mssoapinterop.org/">Microsoft Soap Interop Server</a> and <a href="http://easysoap.sourceforge.net/">EasySoap++</a> &#8211; as of this writing 4s4c appears to be MIA). The servers were built based on the <a href="http://www.whitemesa.com/interop/proposal2.html">ROUND 2 SOAP Interoperability Tests Specification</a> a (proposed) SOAP service interface that can be implemented by SOAP implementations as part of an interoperability testing process. This <a href="http://easysoap.sourceforge.net/">page</a> is the best resource for information about the Interoperability Tests and this <a href="http://easysoap.sourceforge.net/interop/interop2a.html">page</a> has the results of the Interoperability Tests as of November 2001. The tests were arranged by the <a href="http://groups.yahoo.com/group/soapbuilders">SOAP Builders</a> Yahoo group and <a href="http://tech.groups.yahoo.com/group/soapbuilders/message/4">this</a> looks like the message that kicked things off.</p>
<p>I was happy to find a set of servers out there that were still alive, since the servers for the original interop tests built into SoapCore were no longer available! I then built a client and server on top of SoapCore (<em>SoapInteropClient</em> and <em>SoapInteropServiceImpl</em>) and a set of TestCases (SoapInteropTestCase) so that I could test the GLASS SoapCore implementation against the 3 external services and an internal service. By default the test cases for the external services are disabled (see SoapInteropTestCase class&gt;&gt;skipInteropTesting: for information about enabling the tests against the external services).</p>
<p>If you find that you need to use SOAP with a project start by looking at the interop examples. Also read the sections <a href="#GsProcesses">GemStone Processes and GCI</a> and <a href="#soaphttpdev">SOAP/HTTP Server Development Tips</a> for information on doing SOAP development in GLASS.</p>
<h2>SOAP Server Transactions</h2>
<p>I have not done any work to add <em>transparent persistence</em> to the SOAP server, but I would imagine that the approach used by <em>FastCGISeaside&gt;&gt;answerResponderRoleCheckingLock:</em> and <em>SeasideHTTPService&gt;&gt;answerToCheckingLock:</em> will work for SOAP. The same rules apply:</p>
<ul>
<li>Perform an abort before handling the SOAP request and perform a commit before returning the SOAP response. If no persistent objects were modified while serving the request (a read only request for example), the final commit is no more expensive than an abort.</li>
<li>One concurrent transaction per gem. Add more gems for handling concurrent requests (presumably <a href="http://httpd.apache.org/">Apache</a> or <a href="http://www.lighttpd.net/">lighttpd</a> can be used to round robin the SOAP requests).</li>
<li>On a denied lock or transaction conflicts abort and retry the request a short while later.</li>
</ul>
<p>If anyone is interested in adding transactions to a SOAP server let me know and I&#8217;ll whip out a prototype. Right now I assume that the primary interest in SOAP is as a client.</p>
<h2>WSDL</h2>
<p>Paul DeBruicker attended the <a href="http://programminggems.wordpress.com/2009/03/06/santafe/">GLASS Workshop in Santa Fe</a> earlier this month and recently Paul <a href="http://seaside.gemstone.com/mailman/private/beta/2009-April/001804.html">announced</a> (<a href="http://seaside.gemstone.com/mailman/listinfo/beta">beta mailing list</a> subscription required) his desire to port the <a href="http://www.dolphinharbor.org/dh/projects/spray/index.html">Spray client</a> from Dolphin to GemStone/S. Spray is a <a href="http://www.object-arts.com/">Dolphin</a>-based package written by <a href="http://www.stevewaring.net/blog/home/index.html">Steve Waring</a> that adds <a href="http://en.wikipedia.org/wiki/Web_Services_Description_Language">WSDL</a> support to SoapCore.</p>
<p>Nice timing.</p>
<p><a href="http://www.linkedin.com/in/hernanwilkinson">Hernan Wilkinson</a> has offered to work on the <a href="http://seaside.gemstone.com/ss/WSDLClient.html">project</a> along with Paul and I&#8217;m sure if anyone else interested in SOAP/WSDL support for GLASS, that your help would be appreciated. When it comes to web servers, I&#8217;m sure that the more players involved in interoperability testing the better the final product. Join and send mail to the <a href="http://seaside.gemstone.com/mailman/listinfo/beta">beta mailing list</a> if you would like to participate.</p>
<h2><a title="Hyper" name="Hyper">Using Hyper: SeasideSite replaced by SeasideHTTPService</a></h2>
<p>&#8220;Ditching Swazoo&#8221; is not quite as bad as it sounds. Anyone using <a href="http://www.fastcgi.com/drupal/">FastCGI</a> will not be affected and the new version of Hyper looks to be an improved version.</p>
<p>If you use Hyper in production, then I would recommend that you move forward cautiously. I haven&#8217;t put the new Hyper under stress for this preview release. I intend to do so before making a beta release. Hopefully the next beta release (non-preview) will be the last beta release, so I plan to subject the system to some heavy load for both FastCGI and Hyper. As it currently stands, Hyper passes the unit tests and I&#8217;ve done limited manual testing.</p>
<p>If you are using $GEMSTONE/seaside/bin/startSeaside_Hyper, then you need to edit the file and replace the chunk of code that looks like this:</p>
<pre style="padding-left:30px;background-color:lightgray;"><span style="color:#808080;"><strong><em>server</em></strong></span> := <strong>SwazooServer</strong> <strong><span style="color:#0000ff;">singleton</span></strong>.
<span style="color:#808080;"><em><strong>server</strong></em></span> <span style="color:#0000ff;"><strong>initialize</strong></span>.

<span style="color:#808080;"><em><strong>site</strong></em></span> := (<strong>SeasideSite</strong> <span style="color:#0000ff;"><strong>new</strong></span>)
    <strong><span style="color:#0000ff;">name</span></strong>: <strong><span style="color:#800080;">'Seaside'</span></strong>;
    <strong><span style="color:#0000ff;">initialize</span></strong>;
    <span style="color:#0000ff;"><strong>host</strong></span>: <strong>GsSocket</strong> <span style="color:#0000ff;"><strong>getLocalHostName</strong></span>
        <span style="color:#0000ff;"><strong>ip</strong></span>: (<strong>GsSocket</strong> <span style="color:#0000ff;"><strong>getHostAddressByName</strong></span>: <strong>GsSocket</strong> <span style="color:#0000ff;"><strong>getLocalHostName</strong></span>)
        <span style="color:#0000ff;"><strong>port</strong></span>: <strong><span style="color:#339966;">$1</span></strong>;
    <span style="color:#0000ff;"><strong>initializeResourceFromUriPattern</strong></span>: <span style="color:#800080;"><strong>'/'</strong></span>, <span style="color:#800080;"><strong>'seaside'</strong></span>.

<span style="color:#808080;"><em><strong>server</strong></em></span> <span style="color:#0000ff;"><strong>addSite</strong></span>: <span style="color:#808080;"><em><strong>site</strong></em></span>.

<strong>GsFile</strong> <strong><span style="color:#0000ff;">gciLogServer</span></strong>: <span style="color:#800080;"><strong>'Hyper Server started on port '</strong></span>, <strong><span style="color:#339966;">$1</span></strong> <span style="color:#0000ff;"><strong>printString</strong></span>.
<strong>SwazooServer</strong> <span style="color:#0000ff;"><strong>startSite</strong></span>: <span style="color:#800080;"><strong>'Seaside'</strong></span>.
<span style="color:#339966;">"does not return, unless there's an error"</span></pre>
<p>with a chunk of code that looks like this:</p>
<pre style="padding-left:30px;background-color:lightgray;"><span style="color:#808080;"><strong><em>server</em></strong></span> := <strong>SeasideHTTPService</strong> <span style="color:#0000ff;"><strong>onPort</strong></span>: <strong><span style="color:#339966;">$1</span></strong> <span style="color:#0000ff;"><strong>acceptInForeground</strong></span>: <span style="color:#ff6600;"><strong>true</strong></span> <span style="color:#0000ff;"><strong>multiThreading</strong></span>: <strong><span style="color:#ff6600;">true</span></strong>.
<strong>GsFile</strong> <strong><span style="color:#0000ff;">gciLogServer</span></strong>: <span style="color:#800080;"><strong>'Hyper Server started on port '</strong></span>, <strong><span style="color:#339966;">$1</span></strong> <span style="color:#0000ff;"><strong>printString</strong></span>.
<span style="color:#808080;"><strong><em>server </em><span style="color:#0000ff;">start</span></strong><strong><em>.
</em></strong></span><span style="color:#339966;"><strong><em>"does not return, unless there's an error"</em></strong></span></pre>
<p>If you have been using <span style="background-color:lightgray;"><strong>SeasideSite</strong> <strong><span style="color:#0000ff;">launchSeaside</span></strong>: <strong><span style="color:#ff6600;">9765</span></strong></span> to run Hyper using a <strong>GemTools Client</strong>, then you should use <span style="background-color:lightgray;"><strong>SeasideHTTPService</strong> <strong><span style="color:#0000ff;">startServiceOnPort</span></strong>: <strong><span style="color:#ff6600;">9765</span></strong></span> instead.</p>
<p>Finally don&#8217;t skip the sections <a href="#GsProcesses">GemStone Processes and GCI</a> and <a href="#soaphttpdev">SOAP/HTTP Server Development Tips</a>, since they contain valuable information on doing Hyper development in a <strong>GemTools Client</strong>.</p>
<h2><a title="GsProcesses" name="GsProcesses">GemStone Processes and GCI</a></h2>
<p>When you do a login from a <strong>GemTools Client</strong>, a separate <a href="http://gemstonesoup.wordpress.com/glossary/">Gem</a> process is started on the stone&#8217;s machine. The client Smalltalk image and the Gem process communicate via <a href="http://gemstonesoup.wordpress.com/glossary/">GCI</a> using a relatively simple protocol:</p>
<ul>
<li>Commands are initiated by the client (most often sending a message to to an object or executing code in a string). When a GCI command is executed in the Gem a new <em>GsProcess</em> is created and the command is run within the context of that new process.</li>
<li>While the command is executing in the Gem, the client is blocked waiting for a response (there is a non-blocking mode for GCI which we use for in the <strong>GemTools Client</strong>, however, the operation is still blocking as far as the end user is concerned, because the GCI API is not thread safe).</li>
<li>If you hit <strong>ALT-.</strong> in your <a href="http://www.squeak.org/">Squeak</a>/<a href="http://www.pharo-project.org">Pharo</a> image, we catch the client-side interrupt and use the GCI to send a <em><strong>Hard</strong></em><strong><em> Break</em></strong> to the GsProcess running in the Gem. This results in a <a href="http://gemstonesoup.wordpress.com/2009/03/16/terse-guide-to-the-new-glass-tools/#debugger">GemStone debugger</a> being opened. If you close the debugger the <em>GsProcess</em> is terminated. If you <em>Proceed</em>, the GCI API is used to resume execution of the interrupted <em>GsProcess</em>.</li>
<li>Unhandled Errors that occur during execution on the Gem are passed over the GCI to the client where we arrange to bring up a GemStone debugger. Note: if you use the <a href="#usepopupondebug"><strong>[unset|set] UsePopUpOnDebug</strong> command</a> on the <a href="http://gemstonesoup.wordpress.com/2009/03/16/terse-guide-to-the-new-glass-tools/#admin">Admin&#8230; menu</a> you can arrange to open a Squeak/Pharo debugger on the client-side<em> Process</em>.</li>
<li>A command finishes when the GsProcess created to run the command &#8216;falls off the end&#8217; (like a <em>doIt</em>) or there is an explicit return in the executed code. In either case the result of the command is returned across the wire to the client.</li>
<li>Execution of code in the <em><strong>Gem blocks</strong></em> until another GCI command is received.</li>
</ul>
<p>The <em><strong>Gem blocks</strong></em> when a command finishes execution. If you execute a command like:</p>
<pre style="padding-left:30px;background-color:lightgray;">[[ <strong><span style="color:#ff6600;">true</span></strong> ] <strong><span style="color:#0000ff;">whileTrue</span></strong>: [ (<strong>Delay</strong> <span style="color:#0000ff;"><strong>forSeconds</strong></span>: <span style="color:#ff6600;"><strong>10</strong></span>) <span style="color:#0000ff;"><strong>wait</strong></span> ]] <span style="color:#0000ff;"><strong>fork</strong></span>.</pre>
<p>The command will return immediately and the <em><strong>Gem blocks</strong></em> until you execute another GCI command.</p>
<p>For normal development activities, this doesn&#8217;t make too much difference, but if you are trying to debug a web server or a SOAP server, then you need be aware that unless you have explicitly given the Gem control (via a GCI call), your Gem threads will be <em><strong>blocked</strong></em>.</p>
<h2><a title="soaphttpdev" name="soaphttpdev">SOAP/HTTP Server Development Tips</a></h2>
<p>A lot of issues can be fleshed out using unit tests, but occasionally you hit an issue that only appears when the system is running as a server. For <a href="http://seaside.st/">Seaside</a> applications we&#8217;ve arranged for continuations to be used for the <a href="http://gemstonesoup.wordpress.com/2008/02/13/remote-seaside-debugging-with-persistent-continuations/">remote debugging</a> of application errors.</p>
<p>I have not added continuation-based debugging to the SOAP server (could be done if there is interest), so in order to debug a SOAP server, you&#8217;ll need to run your development vm as a server. You need to do the same thing if you want to debug internal server errors for Hyper or FastCGI.</p>
<p>Given that you understand that your <strong>Gem threads are blocked</strong>:) while your <strong>GemTools Client</strong> is active and given that you&#8217;ve opened a <a href="http://gemstonesoup.wordpress.com/2009/03/16/terse-guide-to-the-new-glass-tools/#processbrowser">Process Browser</a> you are ready to do server-side development. At the end of this section, I provide instructions for running <a href="#soapserverrun">SOAP</a>/<a href="#hyperserverrun">Hyper</a>/<a href="#fastcgiserverrun">FastCGI</a> servers within your development vm.</p>
<p>For the purposes of discussion, I&#8217;ll assume that you&#8217;ve started a Hyper server and that you&#8217;ve navigated to the <em>WAErrorTest</em> page (click on the image for full size view):</p>
<p><a href="http://gemstonesoup.files.wordpress.com/2009/04/errorpage.png"><img class="size-medium wp-image-1869 alignnone" title="errorpage" src="http://gemstonesoup.files.wordpress.com/2009/04/errorpage.png?w=300&#038;h=242" alt="errorpage" width="300" height="242" /></a></p>
<p>Click on the <strong>Raise error</strong> <strong>link</strong> and click on the <strong>Debug link</strong> and the <a href="http://gemstonesoup.wordpress.com/2009/03/16/terse-guide-to-the-new-glass-tools/#debugger">debugger</a> will pop up in the <strong>GemTools Client</strong>:</p>
<p><a href="http://gemstonesoup.files.wordpress.com/2009/04/pbanddebugger.png"><img class="alignnone size-medium wp-image-1870" title="pbanddebugger" src="http://gemstonesoup.files.wordpress.com/2009/04/pbanddebugger.png?w=300&#038;h=188" alt="pbanddebugger" width="300" height="188" /></a></p>
<p>The third process involved is the main hyper thread that is listening on port 9765:</p>
<p><a href="http://gemstonesoup.files.wordpress.com/2009/04/hypermain.png"><img class="alignnone size-medium wp-image-1872" title="hypermain" src="http://gemstonesoup.files.wordpress.com/2009/04/hypermain.png?w=300&#038;h=280" alt="hypermain" width="300" height="280" /></a></p>
<p>So we&#8217;ve got three processes of interest: the main accept connection loop for Hyper, a thread forked off by Hyper to service the browser connection, and the a thread forked off by Seaside to service the Seaside request. We&#8217;ve got a debugger open on the the third thread and since we signaled an <em>Error</em>, the exception isn&#8217;t resumable. If we close the debugger control will be maintained by the client and the Gem execution is <strong>blocked</strong>.</p>
<p>Once the debugger is closed you can do a couple of things:</p>
<ul>
<li>Select each of the other two process and use the <strong>terminate</strong> menu item to terminate the process. If you go this route, you&#8217;ll (obviously) need to restart the Hyper server to serve HTTP requests.</li>
<li>Select the process that is <em>waiting on a Semaphore</em> and terminate it. If you go this route, you simply need to the use the <strong>yield forever</strong> menu item on the <a href="http://gemstonesoup.wordpress.com/2009/03/16/terse-guide-to-the-new-glass-tools/#processbrowser">Process Browser</a> to return contol to the Gem and allow the processes to run freely.</li>
<li>You should also be able to simply use <strong>yield forever</strong> without terminating any process &#8211; if you <a href="http://gemstonesoup.files.wordpress.com/2009/04/pbanddebugger.png">look closely</a> you&#8217;ll see that the process in the debugger has an <strong>#ensure:</strong> block that should <strong>#signal</strong> the semapore that the other process is waiting on. Unfortunately, that doesn&#8217;t correctly at the moment. The fact that we&#8217;re bringing up a debugger with a hard break, is a special case and I&#8217;ll be looking at this bug more closely.</li>
</ul>
<p>If you hit <strong>Alt-.</strong> while the server has control, control will be returned to the client, however, you can&#8217;t determine which process will be interrupted &#8211; the process that is running when the vm detects the interrupt will have the debugger brought up on it.</p>
<p>For all of the server variants, internal server errors are logged in the <a href="http://gemstonesoup.wordpress.com/2008/02/21/glass-beta-update-glass-dkh88/">Object Log</a> &#8211; commits are needed in the Soap server to make the log entries persistent. Take a look at the object log after running the Soap unit tests, for examples.</p>
<p>The following three sections provide specific information for debugging server code.</p>
<h4><a title="soapserverrun" name="soapserverrun">Soap Server</a></h4>
<p>The following expression starts an HTTPServer listening on port 8823 that is ready to serve SOAP requests from the <a href="http://www.whitemesa.com/interop/proposal2.html">ROUND 2 SOAP Interoperability Tests Specification</a>:</p>
<pre style="padding-left:30px;background-color:lightgray;"><strong>SoapInteropServiceImpl</strong> <strong><span style="color:#0000ff;">registerAllServices</span><span style="color:#0000ff;"><span style="color:#000000;">.</span>
(<span style="color:#000000;">Delay</span> forMilliseconds</span></strong><span style="color:#000000;">:</span><strong><span style="color:#0000ff;"> <span style="color:#ff6600;">100</span>) wait</span></strong><span style="color:#000000;">.</span></pre>
<p>The Soap service is started in the background. so the Delay is necessary to allow the server thread to make enough progress to be ready to service client requests. This setup is aimed at convenience for running tests. For a production server, you should arrange for the <em>HTTPServer</em> to be started running in the foreground (see <em>SoapHTTPService class&gt;&gt;named:onPort:</em>).</p>
<p>If you are trying to debug a Soap server error, here are a couple of useful methods to set <a href="http://gemstonesoup.wordpress.com/2009/03/16/terse-guide-to-the-new-glass-tools/#breakpoint">breakpoints</a> in:</p>
<ul>
<li><em>SoapHttpConnector&gt;&gt;send:to:with:</em> in the <em>SoapHttpGenericError</em> handler.</li>
<li><em>SoapEnvelopeBuilder&gt;&gt;buildSoapEnvelopeFromXmlString:</em> in the <em>Error</em> handler.</li>
<li><em>SoapServiceHandler&gt;&gt;dispatch:with:</em> in the <em>Error</em> handler.</li>
<li><em>HTTPConnection&gt;&gt;internalErrorHandler</em>.</li>
</ul>
<h4><a title="hyperserverrun" name="hyperserverrun">Hyper Server</a></h4>
<p>The following expression starts an HTTPServer listening for HTTP requests on port 9765:</p>
<pre style="padding-left:30px;background-color:lightgray;"><strong>SeasideHTTPService</strong> <strong><span style="color:#0000ff;">startServiceOnPort</span></strong>: <strong><span style="color:#ff6600;">9765</span></strong></pre>
<p>If you are trying to debug a Hyper server error, here are a couple of useful methods to set <a href="http://gemstonesoup.wordpress.com/2009/03/16/terse-guide-to-the-new-glass-tools/#breakpoint">breakpoints</a> in:</p>
<ul>
<li><em>SeasideHTTPService&gt;&gt;internalServerMalfunction:</em></li>
<li><em>HTTPConnection&gt;&gt;internalErrorHandler</em>.</li>
</ul>
<h4><a title="fastcgiserverrun" name="fastcgiserverrun">FastCGI Server</a></h4>
<p>For FastCGI you need to edit your <a href="http://httpd.apache.org/">Apache</a> (or <a href="http://www.lighttpd.net/">lighttpd</a>) config to route all requests to a single server. You also need to stop any FastCGI gems that may be running (you can use the <strong>Stop Seaside gems</strong> command on the <a href="http://gemstonesoup.wordpress.com/2009/03/16/terse-guide-to-the-new-glass-tools/#admin">Admin&#8230; menu</a>). Then run the following expression to start a FastCGI server listening on port 9001 in your development vm:</p>
<pre style="padding-left:30px;background-color:lightgray;"><strong>FSSeasideHandler <span style="color:#0000ff;">startUp</span>: <span style="color:#ff6600;">9001</span></strong><strong><span style="color:#0000ff;"><span style="color:#000000;">.</span></span></strong></pre>
<p>If you are trying to debug a FastCGI server error, here are a couple of useful methods to set <a href="http://gemstonesoup.wordpress.com/2009/03/16/terse-guide-to-the-new-glass-tools/#breakpoint">breakpoints</a> in:</p>
<ul>
<li><em>FsSeasideHandler&gt;&gt;internalServerMalfunction:</em></li>
<li><em>FSConnection&gt;&gt;handleError:</em></li>
<li><em>FSConnection&gt;&gt;handleFSError:<br />
</em></li>
</ul>
<h2>GemStone-dkh.466</h2>
<p>A number of commands were added to the <a href="http://gemstonesoup.wordpress.com/2009/03/16/terse-guide-to-the-new-glass-tools/#newlauncher">GemTools Launcher</a>.</p>
<ul>
<li><strong><a title="usepopupondebug" name="usepopupondebug">[unset|set] UsePopUpOnDebug</a></strong> command added to <a href="http://gemstonesoup.wordpress.com/2009/03/16/terse-guide-to-the-new-glass-tools/#admin">Admin&#8230; menu</a>. If you consistently get an out-of-memory error it may be caused by a recursive error. Setting <strong>UsePopUpOnDebug </strong>causes a pre-debugger window popup to appear. If the pop-up appears instread of an out-of-memory notifier, select the <strong>Debug Squeak stack</strong> option and send the Squeak stack as a Bug Report to the <a href="http://seaside.gemstone.com/mailman/listinfo/beta">beta mailing list</a> for analysis. If you choose <strong>Debug GemStone stack</strong> the normal GemStone debugger will be opened (although in an out-of-memory situation, it is likely that there is an error opening the GemStone debugger).</li>
<li><strong>System Browser</strong> command added to <a href="http://gemstonesoup.wordpress.com/2009/03/16/terse-guide-to-the-new-glass-tools/#tools">Tools&#8230; menu</a>.</li>
<li><strong>Mark For Collection</strong> command added to <a href="http://gemstonesoup.wordpress.com/2009/03/16/terse-guide-to-the-new-glass-tools/#admin">Admin&#8230; menu</a>.</li>
<li><strong>Browser Preferences</strong> submenu to <a href="http://gemstonesoup.wordpress.com/2009/03/16/terse-guide-to-the-new-glass-tools/#admin">Admin&#8230; menu</a> which allows you to set preferences directly on server instead of inheriting from client (which might require an logout/login sequence).</li>
<li>Override FFI&gt;&gt;finalize with a bugfix that eliminates that annoying finalize error that occasionally pops up.</li>
<li><em>JadeServer</em> class moved to server-side for faster logins. A version of JadServer still exists on the <strong>GemTools Client</strong> for backwards compatibility with older server versions.</li>
</ul>
<p>Take a look at the <a href="http://gemstonesoup.wordpress.com/glass-101/glass-change-logs/gemstone-dkh449-to-gemstone-dkh463/">GemTools change log</a> for a complete history of changes since <a href="http://gemstonesoup.wordpress.com/2009/03/25/glass-beta-update-reducing-round-trips-preview/">GemStone-dkh.449</a>.</p>
<h2>GLASS.230-dkh.229</h2>
<p>In addition to the Hyper overhaul and addition of SOAP support:</p>
<ul>
<li>finish fixing Bug39828 &#8211; fastcgi and uploadfile problems (thanks Dario)</li>
<li><strong>suspend</strong>, <strong>terminate</strong>, <strong>yield 5</strong>, and <strong>yield forever</strong> commands were added to the <strong>Process Browser</strong>.</li>
<li>Several packages have been  removed from the GLASS package during the preview process. Normally these orphaned packages remain in your repository unless you explicitly unload them. However, with GLASS.230-dkh.220 I decided that the following 5 packages needed to be explicitly removed (via preDoIt): <strong>SwazooSeaside</strong>, <strong>Swazoo</strong>, <strong>SqueakSource</strong>, <strong>MonticelloConfigurations</strong>, <strong>TinyWiki</strong>. If these packages are not explicitly unloaded, the unit tests will not pass.</li>
<li><em>JadeServer</em> class moved to server-side for faster logins.</li>
<li>The package GemStone-Scaffolding was added to GLASS. See <a href="http://programminggems.wordpress.com/">James Foster&#8217;s</a> <a href="http://vimeo.com/2231019">Scaffolding for GemStone screencast</a> for more information.</li>
<li>The <strong>#defaultAction</strong> for <em>Warning</em> has been changed to bring up a confirmation window which will permit you to continue or bring up a debugger. This means that you&#8217;ll start seeing warning messages during Monticello operations that were silent before.</li>
</ul>
<p>Take a look at the <a href="http://gemstonesoup.wordpress.com/glass-101/glass-change-logs/glass230-dkh216-to-glass230-dkh224/">GLASS change log</a> for a complete history of changes since <a href="http://gemstonesoup.wordpress.com/2009/03/25/glass-beta-update-reducing-round-trips-preview/">GLASS.230-dkh.216</a>.</p>
<h2>Update Process</h2>
<p>To update an existing installation to <strong>GemStone-dkh.466</strong> and <strong>GLASS.230-dkh.229</strong>, follow these <a href="http://gemstonesoup.wordpress.com/2009/03/16/terse-guide-to-the-new-glass-tools/#updatesteps">instructions</a>. While it is possible to use the <a href="http://gemstonesoup.wordpress.com/2009/03/16/terse-guide-to-the-new-glass-tools/#monticello">Monticello Browser</a> for upating, I am now recommending that you use the <strong>Update Client</strong> and <strong>Update GLASS</strong> menu items on the <a href="../2009/03/16/terse-guide-to-the-new-glass-tools/#updateclient">Update… menu</a> to avoid issues that may be introduced by UI changes.</p>
<p>When you update to <strong>GLASS.230-dkh.229</strong> a <em>Warning</em> dialog will pop up (due to the changes in the <strong>#defaultAction</strong> for <em>Warning</em>) &#8211; proceed through warning.</p>
<p>&#8212;&#8211;</p>
<p><a title="photo" name="photo33">[1]</a> Photo by <a title="sea turtle" href="http://www.flickr.com/photos/sea-turtle/">sea turtle</a> (<a title="Creative Commons" href="http://creativecommons.org/licenses/by-nc-nd/2.0/deed.en">Creative Commons</a>).</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gemstonesoup.wordpress.com/1776/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gemstonesoup.wordpress.com/1776/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gemstonesoup.wordpress.com/1776/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gemstonesoup.wordpress.com/1776/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gemstonesoup.wordpress.com/1776/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gemstonesoup.wordpress.com/1776/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gemstonesoup.wordpress.com/1776/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gemstonesoup.wordpress.com/1776/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gemstonesoup.wordpress.com/1776/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gemstonesoup.wordpress.com/1776/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gemstonesoup.wordpress.com&blog=1067048&post=1776&subd=gemstonesoup&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gemstonesoup.wordpress.com/2009/04/15/glass-beta-update-working-with-soap-preview/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e046bfe0f8659efad7946c4085762b58?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">daleh</media:title>
		</media:content>

		<media:content url="http://farm4.static.flickr.com/3567/3388096008_e8826775cb.jpg" medium="image" />

		<media:content url="http://gemstonesoup.files.wordpress.com/2009/04/errorpage.png?w=300" medium="image">
			<media:title type="html">errorpage</media:title>
		</media:content>

		<media:content url="http://gemstonesoup.files.wordpress.com/2009/04/pbanddebugger.png?w=300" medium="image">
			<media:title type="html">pbanddebugger</media:title>
		</media:content>

		<media:content url="http://gemstonesoup.files.wordpress.com/2009/04/hypermain.png?w=300" medium="image">
			<media:title type="html">hypermain</media:title>
		</media:content>
	</item>
		<item>
		<title>Learning Web Development with Seaside</title>
		<link>http://gemstonesoup.wordpress.com/2009/04/15/learning-web-development-with-seaside/</link>
		<comments>http://gemstonesoup.wordpress.com/2009/04/15/learning-web-development-with-seaside/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 19:48:03 +0000</pubDate>
		<dc:creator>Dale Henrichs</dc:creator>
				<category><![CDATA[GLASS]]></category>
		<category><![CDATA[Seaside]]></category>

		<guid isPermaLink="false">http://gemstonesoup.wordpress.com/?p=1878</guid>
		<description><![CDATA[James Foster has just announced the availability of the Seaside tutorial Learning Web Development with Seaside, that he has been developing for several months. The tutorial is the basis of his popular Weaving a GLASS Web workshop and his SoCal tour.
The tutorial is being made available under the Creative Commons Attribution-Noncommercial-Share Alike 3.0 License.
If you [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gemstonesoup.wordpress.com&blog=1067048&post=1878&subd=gemstonesoup&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a title="School Room" href="http://www.flickr.com/photos/rcsj/2915797223/"><img class="alignleft" style="border:2px solid #000000;" src="http://farm4.static.flickr.com/3249/2915797223_066d44fc7a.jpg" alt="" width="105" height="150" /></a><a href="http://programminggems.wordpress.com/">James Foster</a> has just <a href="http://programminggems.wordpress.com/2009/04/14/tutorial/">announced</a> the availability of the <a href="http://www.seaside.st/">Seaside</a> tutorial <a href="http://seaside.gemstone.com/tutorial.html">Learning Web Development with Seaside</a>, that he has been developing for several months. The tutorial is the basis of his <a href="http://twitter.com/sfcomplex/status/1419983989">popular</a> <a href="http://sfcomplex.org/wordpress/2009/03/glass">Weaving a GLASS Web</a> workshop and his <a href="http://programminggems.wordpress.com/2009/02/24/socal-3/">SoCal tour</a>.</p>
<p>The tutorial is being made available under the <a href="http://creativecommons.org/licenses/by-nc-sa/3.0/us/">Creative Commons Attribution-Noncommercial-Share Alike 3.0 License</a>.</p>
<p>If you are interested in having a Seaside tutorial/workshop in your area, please contact James at James dot Foster at GemStone dot com.</p>
<p style="clear:left;">Photo by <a title="Rob Shenk" href="http://www.flickr.com/photos/rcsj/2915797223/">Rob Shenk</a> (<a title="Creative Commons" href="http://creativecommons.org/licenses/by-sa/2.0/deed.en">Creative Commons</a>).</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gemstonesoup.wordpress.com/1878/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gemstonesoup.wordpress.com/1878/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gemstonesoup.wordpress.com/1878/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gemstonesoup.wordpress.com/1878/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gemstonesoup.wordpress.com/1878/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gemstonesoup.wordpress.com/1878/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gemstonesoup.wordpress.com/1878/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gemstonesoup.wordpress.com/1878/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gemstonesoup.wordpress.com/1878/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gemstonesoup.wordpress.com/1878/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gemstonesoup.wordpress.com&blog=1067048&post=1878&subd=gemstonesoup&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gemstonesoup.wordpress.com/2009/04/15/learning-web-development-with-seaside/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e046bfe0f8659efad7946c4085762b58?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">daleh</media:title>
		</media:content>

		<media:content url="http://farm4.static.flickr.com/3249/2915797223_066d44fc7a.jpg" medium="image" />
	</item>
		<item>
		<title>Version Mismatch (preview)</title>
		<link>http://gemstonesoup.wordpress.com/2009/04/10/version-mismatch-preview/</link>
		<comments>http://gemstonesoup.wordpress.com/2009/04/10/version-mismatch-preview/#comments</comments>
		<pubDate>Sat, 11 Apr 2009 04:58:01 +0000</pubDate>
		<dc:creator>Dale Henrichs</dc:creator>
				<category><![CDATA[GLASS]]></category>
		<category><![CDATA[beta update]]></category>

		<guid isPermaLink="false">http://gemstonesoup.wordpress.com/?p=1826</guid>
		<description><![CDATA[[1]
A couple of weeks ago we published a one-click GemTools 2.4 download. We named the file 2.4 to differentiate it from the 2.3.1 GemTools client download, but we inadvertently included 2.4 gci files in the download &#8211; we haven&#8217;t released 2.4 yet.
We&#8217;ve now made two one-click GemTools preview downloads available on the download page:

GemTools 2.3.0-preview [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gemstonesoup.wordpress.com&blog=1067048&post=1826&subd=gemstonesoup&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a title="Day 84" href="http://www.flickr.com/photos/ieatwaffles/2481416932/"><img class="alignnone" style="border:2px solid #000000;" src="http://farm3.static.flickr.com/2392/2481416932_7373b8abcd.jpg" alt="" width="350" height="263" /></a><a href="#photo34">[1]</a></p>
<p>A couple of weeks ago we <a href="http://gemstonesoup.wordpress.com/2009/03/22/terse-guide-update-one-click-gemtools-download-available/">published</a> a one-click GemTools 2.4 download. We named the file 2.4 to differentiate it from the 2.3.1 GemTools client download, but we inadvertently included 2.4 gci files in the download &#8211; we haven&#8217;t released 2.4 yet.</p>
<p>We&#8217;ve now made two one-click GemTools preview downloads available on the <a href="http://seaside.gemstone.com/downloads.html">download page</a>:</p>
<ul>
<li>GemTools 2.3.0-preview for all platforms (for use with version 2.3.0 of GemStone/S, like the <a href="http://gemstonesoup.wordpress.com/2008/10/11/glass-appliance-10beta11-is-available/">1.0beta11 appliance</a>)</li>
<li>GemTools 2.3.1-preview for all platforms (for use with version 2.3.1 of GemStone/S)</li>
</ul>
<p>If you are using the GemTools 2.4 download and have experienced problems then you should definitely download and use the one-click file that matches your stone version.</p>
<p>&#8212;&#8211;<br />
<a title="photo" name="photo34">[1]</a> Photo by <a title="Nessa Land" href="http://www.flickr.com/photos/ieatwaffles/2481416932/">Nessa Land</a> (<a title="Creative Commons" href="http://creativecommons.org/licenses/by/2.0/deed.en">Creative Commons</a>).</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gemstonesoup.wordpress.com/1826/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gemstonesoup.wordpress.com/1826/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gemstonesoup.wordpress.com/1826/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gemstonesoup.wordpress.com/1826/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gemstonesoup.wordpress.com/1826/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gemstonesoup.wordpress.com/1826/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gemstonesoup.wordpress.com/1826/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gemstonesoup.wordpress.com/1826/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gemstonesoup.wordpress.com/1826/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gemstonesoup.wordpress.com/1826/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gemstonesoup.wordpress.com&blog=1067048&post=1826&subd=gemstonesoup&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gemstonesoup.wordpress.com/2009/04/10/version-mismatch-preview/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e046bfe0f8659efad7946c4085762b58?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">daleh</media:title>
		</media:content>

		<media:content url="http://farm3.static.flickr.com/2392/2481416932_7373b8abcd.jpg" medium="image" />
	</item>
	</channel>
</rss>