<?xml version='1.0' encoding='UTF-8' ?>
<rss version="2.0" xmlns:admin="http://webns.net/mvcb/" xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:icbm="http://postneo.com/icbm" xmlns:includedComments="http://www.laudably.com/rss2-comments" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/">
	<channel>
		<title>Smalltalk Tidbits, Industry Rants: category: esug2006</title>
		<link>http://www.cincomsmalltalk.com/blog/blogView</link>
		<description>Cincom Product Manager</description>
		<webMaster>jrobertson@cincom.com</webMaster>
		<lastBuildDate>Fri, 08 Sep 2006 06:00:54 EDT</lastBuildDate>
		<image>
			<url>http://www.cincomsmalltalk.com/images/cst_small.jpg</url>
			<title>Smalltalk Tidbits, Industry Rants</title>
			<link>http://www.cincomsmalltalk.com/blog/blogView</link>
			<height>50</height>
			<width>81</width>
		</image>
		<admin:generatorAgent rdf:resource="http://www.cincomsmalltalk.com/CincomSmalltalkWiki/Silt"></admin:generatorAgent>
		<admin:errorReportsTo rdf:resource="mailto:jrobertson@cincom.com"></admin:errorReportsTo>
		<dc:language>en-us</dc:language>
		<dc:creator>James A. Robertson</dc:creator>
		<dc:rights>Copyright 2005 Cincom Systems, Inc.</dc:rights>
		<dc:date>2006-09-08T06:00:54-05:00</dc:date>
		<icbm:latitude>39.214103</icbm:latitude>
		<icbm:longitude>-76.878807</icbm:longitude>
		<item>
			<title>Packaging freeware/small apps in VisualWorks</title>
			<link>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3335148017</link>
			<category>esug2006</category>
			<pubDate>Fri, 08 Sep 2006 06:00:17 EDT</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">

<p>Rob Vens is talking about an interesting topic: building and distributing freeware using VW. I do that - <a href="http://www.cincomsmalltalk.com/BottomFeeder">BottomFeeder</a> :) Rob's first language was Smalltalk, so even though he's not currently working with ST at work, he does shareware/freeware work in it.</p>
<p><img src="http://www.cincomsmalltalk.com/blog/images/esug2006/rob_vens.jpg" title="jarober added a file"/></p>
<p>Rob started doing these kinds of apps by making things he'd built for his own use available (personal finance applications to start with). Problems?</p><ul xmlns="http://www.w3.org/1999/xhtml">
			<li>Small team (just yourself, usually)</li>
		<li>Lack of free time</li><li>High but inconsistent release schedules</li><li>Anonymous user community</li><li>As many platforms as possible</li><li>Bug and feature driven</li><li>Very much depending on user feedback</li></ul><p>I identify strongly with all of those, as I face the same issues in my projects (BottomFeeder and Silt). More issues he encountered:</p><ul xmlns="http://www.w3.org/1999/xhtml">
			<li>Packaging</li>
		<li>Distribution</li><li>Installation</li><li>Platform Compliance</li><li>Versions, bugs, feature requests</li><li>User feedback</li><li>Licensing</li><li>Making some money?</li></ul><p>Tools: VisualStudio (scripting), 7-Zip, Xara3D, Axialis Icon Workshop, ResHacker for Windows exe files. His update scheme involves downloading and replacing the entire deployed image/executable. </p><p>For distribution, he uses his own website - you choose a platform and download. </p><p>Platform Compliance: this is always hard, as are icons, and version/readme file issues. Tracking bugs? User feedback? Not easily tracked, mailing lists didn't work out.</p><!-- technorati tags start --><p style="text-align:right;font-size:10px;">Technorati Tags: 
<a href="http://www.technorati.com/tag/smalltalk" rel="tag">smalltalk</a>, <a href="http://www.technorati.com/tag/esug" rel="tag">esug</a></p><!-- technorati tags end -->
</div>]]></description>
			<guid isPermaLink="false">3335148017</guid>
			<pingback:server>http://www.cincomsmalltalk.com/blog/servlet/CommentAPIPBServlet?guid=3335148017</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/blog/blogView?entry=3335148017</pingback:target>
			<includedComments:comment-collection></includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/blog/blogView/servlet/CommentAPIServlet?guid=3335148017</wfw:comment>
		</item>
		<item>
			<title>Rethink Smalltalk</title>
			<link>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3335144294</link>
			<category>esug2006</category>
			<pubDate>Fri, 08 Sep 2006 04:58:14 EDT</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">

<p>Mathieu van Echtelt of <a href="http://www.cosmocows.com/">CosmoCows</a> - here's the <a href="http://www.esug.org/conferences/14thinternationalsmalltalkconference2006/conferenceprogram/rethinksmalltalk/">intro</a> to his session. They've created a development environment on top of VisualWorks for building Business Administration systems. </p>
<p><img src="http://www.cincomsmalltalk.com/blog/images/esug2006/mathieu_echtelt.jpg" title="jarober added a file"/></p>
<p>Their systems are mixed, involving Smalltalk, and C, Javascript, HTML. They use Seaside to try and keep those under control - even with the Squeak VM, they use the Slang Smalltalk subset to do modifications. Their goal has been to build along the lines of the original Smalltalk design principles:</p><ul xmlns="http://www.w3.org/1999/xhtml">
			<li>Personal Mastery: &quot;If a system is to serve the creative spirit, it must be entirely comprehensible to a single individual&quot; (Dan Ingalls)</li>
		<li>Storage Management: &quot;To be truly object oriented, a computer system must provide automatic storage management&quot; (Dan Ingalls)</li><li>Reactive Principle: &quot;Every component accessible to the user should be able to present itself in a meaningful way for observation and manipulation&quot; (Dan Ingalls)</li></ul><p>The rest of the session was a live demo </p>
<p style="text-align:right;font-size:10px;">Technorati Tags: 
<a href="http://www.technorati.com/tag/smalltalk" rel="tag">smalltalk</a>, <a href="http://www.technorati.com/tag/esug" rel="tag">esug</a></p></div>]]></description>
			<guid isPermaLink="false">3335144294</guid>
			<pingback:server>http://www.cincomsmalltalk.com/blog/servlet/CommentAPIPBServlet?guid=3335144294</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/blog/blogView?entry=3335144294</pingback:target>
			<includedComments:comment-collection></includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/blog/blogView/servlet/CommentAPIServlet?guid=3335144294</wfw:comment>
		</item>
		<item>
			<title>Gemstone 64</title>
			<link>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3335139666</link>
			<category>esug2006</category>
			<pubDate>Fri, 08 Sep 2006 03:41:06 EDT</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p><table><tr><td><img src="http://www.cincomsmalltalk.com/blog/images/esug2006/norm_green.jpg" title="jarober added a file"/></td>
<td valign="center">First up Friday morning - Norm Green, Smalltalk engineering director at <a href="http://gemstone.com/products/smalltalk/">Gemstone.</a> The main topic: Gemstone/64. Gemstone is a privately held firm, with a very experienced development team - many have been there 10-20 years. </td></tr></table></p>
<p>Brief background: Gemstone is an Object Oriented Database. Objects are stored in object format - there are no relational rows or columns, no O/R mapping. Gemstone supports ACID transactions. Gemstone is also a Smalltalk dialect - it comes with a complete set of kernel classes. The database contains the data and the behavior, which makes it a full multi-client, multi-language application server:</p><ul xmlns="http://www.w3.org/1999/xhtml">
			<li>Smalltalk: VW and VA</li>
		<li>Java</li><li>C/C++</li><li>Unix shell (topaz)</li></ul><p>Why 64 bit? Customers wanted to get past the 4 gb of addressable memory limit:</p><ul xmlns="http://www.w3.org/1999/xhtml">
			<li>2-3 gb page cache limit</li>
		<li>1 billion object limit</li></ul><p>For a 100 gb database, only 2% of the database can be cached, which can lead to issues - you only get 2-3 gb page cache (depends on the platform). They came up with a 2 phase project:</p><ol xmlns="http://www.w3.org/1999/xhtml">
			<li>Phase 1: 64 bit address space</li>
		<li>Phase 2: 64 bit object identifiers</li></ol><p>In phase 1, they improved performance, and addressed some of their garbage collection issues. They can now support very large page (shared) cache: up to 16 TB. That gives you a &quot;database in memory&quot; capability. </p><p>In the old design, old objects sometimes persisted, even when they shouldn't have. That's been addressed. Online backups are now safe, and garbage collection has been parallelized and improved greatly.</p>
<p>The biggest thing they did in phase 1 was a major change to the VM design (which is how the stuff above was accomplished). Norm has benchmarks for the improvements in performance. The entire rewrite took 15 months. The new VM is in use by customers in production. </p>
<p><img src="http://www.cincomsmalltalk.com/blog/images/esug2006/norm_benchmarks.jpg" title="jarober added a file"/></p>
<p>In phase 2, they increased the possible size of databases - up to 32 TB in size. They further improved VM performance - 30-50 percent VM speed performance. By moving SmallIntegers to 2^60 from 2^29, they were able to add additional bytecodes. Doing more in a single bytecode improves performance. Additional extensions (new class: SmallDouble) are compatible with the 64 bit work being done on VisualWorks. </p>
<p>How do you upgrade? You need to be on Gemstone 6.1.5 or later. When they deployed to a major shipping client, performance improvements (DB side) of 30-50 percent were seen in the field, although there was an increase in the network load (larger bytecodes). The VW client runs slower (30-50 percent) because 64 bit ids become LargePositiveInteger objects. They are working on that, but it should also improve with 64 bit VW client (on their roadmap). </p><p>They currently support Solaris and HP - adding AIX and Linux (64) shortly. Their roadmap has a number of items for future performance improvements on it.</p><!-- technorati tags start --><p style="text-align:right;font-size:10px;">Technorati Tags: 
<a href="http://www.technorati.com/tag/smalltalk" rel="tag">smalltalk</a>, <a href="http://www.technorati.com/tag/gemstone" rel="tag">gemstone</a>, <a href="http://www.technorati.com/tag/esug" rel="tag">esug</a></p><!-- technorati tags end -->
</div>]]></description>
			<guid isPermaLink="false">3335139666</guid>
			<pingback:server>http://www.cincomsmalltalk.com/blog/servlet/CommentAPIPBServlet?guid=3335139666</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/blog/blogView?entry=3335139666</pingback:target>
			<includedComments:comment-collection></includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/blog/blogView/servlet/CommentAPIServlet?guid=3335139666</wfw:comment>
		</item>
		<item>
			<title>ESUG 2006 Pictures</title>
			<link>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3335076068</link>
			<category>esug2006</category>
			<pubDate>Thu, 07 Sep 2006 10:01:08 EDT</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">

<p>Wondering what ESUG 2006 in Prague looked like this year? Check out <a href="http://vdg38bis.xs4all.nl/index.html?esug2006/index.php">Adriaan van Os'</a> pictures. </p>
<!-- technorati tags start --><p style="text-align:right;font-size:10px;">Technorati Tags: 
<a href="http://www.technorati.com/tag/esug" rel="tag">esug</a>, <a href="http://www.technorati.com/tag/Prague" rel="tag">Prague</a>, <a href="http://www.technorati.com/tag/smalltalk" rel="tag">smalltalk</a></p><!-- technorati tags end -->
</div>]]></description>
			<guid isPermaLink="false">3335076068</guid>
			<pingback:server>http://www.cincomsmalltalk.com/blog/servlet/CommentAPIPBServlet?guid=3335076068</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/blog/blogView?entry=3335076068</pingback:target>
			<includedComments:comment-collection></includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/blog/blogView/servlet/CommentAPIServlet?guid=3335076068</wfw:comment>
		</item>
		<item>
			<title>Scrum in Practice</title>
			<link>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3335075871</link>
			<category>esug2006</category>
			<pubDate>Thu, 07 Sep 2006 09:57:51 EDT</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">

<p><table cellpadding="2"><tr>
<td><img src="http://www.cincomsmalltalk.com/blog/images/esug2006/rowan_bunning.jpg" title="jarober added a file"/></td>
<td valign="center">The next session is <a href="http://www.cincomsmalltalk.com/userblogs/rowanb/blogView">Rowan Bunning</a> talking about <a href="http://www.controlchaos.com/">Scrum</a> - Rowan's the Product Manager for <a href="http://www.softwarewithstyle.com">SwS,</a> so methodology is something he'd be interested in. </td>
</tr></table>
</p>
<p>Rowan started with Wizard (from which SwS was spawned). They've been a Smalltalk shop for the last decade, and he's been in the Information Services group (one of 5 there). They made a move from bespoke applications to products awhile back. </p><p>He learned about Scrum from <a href="http://www.ambysoft.com/">Scott Ambler's</a> presentation at the <a href="http://www.cincomsmalltalk.com/blog/blogView?searchCategory=StS">2003 Smalltalk Solutions</a> - he's become a Scrum Master and Mentor since. Scrum is used extensively at Wizard and Software with Style now. Why?</p>
<p>Scrum has executive backing at Wizard, and it delivers positive reinforcement to the developers. Smalltalk works really well for rapid development, which makes it even better. </p><p>Scrum uses a defined process - you try to make reality follow an upfront plan. It's also empirical - you continually adapt and adjust based on how things are going.</p><p><center><strong>&quot;Slice it like Sashimi&quot;</strong></center></p><p>There are three Scrum roles:</p><ul xmlns="http://www.w3.org/1999/xhtml">
			<li>Product Owner - represents customer, users</li>
		<li>Scrum Master - guides process</li><li>Scrum Team - 5- 10 people - multi-disciplinary, builds product - self organizing</li></ul><p>At Wizard:</p><ul xmlns="http://www.w3.org/1999/xhtml">
			<li>2 Week Sprints</li>
		<li>2-4 hour reviews and meetings</li><li>retrospectives integrated into review</li><li>task allocation often left open</li><li>testing on development server - bug reports from tool</li><li>transition to QA server - formal change tracking</li></ul><p>The rest of this session was a walk through of how they might take a task and move it through the cycle. An excellent point made: <em>Avoid Critical Risk Tasks at the End of a Project.</em> Words to live by in product development :)</p><!-- technorati tags start --><p style="text-align:right;font-size:10px;">Technorati Tags: 
<a href="http://www.technorati.com/tag/scrum" rel="tag">scrum</a>, <a href="http://www.technorati.com/tag/agile" rel="tag">agile</a>, <a href="http://www.technorati.com/tag/smalltalk" rel="tag">smalltalk</a>, <a href="http://www.technorati.com/tag/esug" rel="tag">esug</a></p><!-- technorati tags end -->
</div>]]></description>
			<guid isPermaLink="false">3335075871</guid>
			<pingback:server>http://www.cincomsmalltalk.com/blog/servlet/CommentAPIPBServlet?guid=3335075871</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/blog/blogView?entry=3335075871</pingback:target>
			<includedComments:comment-collection></includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/blog/blogView/servlet/CommentAPIServlet?guid=3335075871</wfw:comment>
		</item>
		<item>
			<title>Seaside for Web 2.0</title>
			<link>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3335069459</link>
			<category>esug2006</category>
			<pubDate>Thu, 07 Sep 2006 08:10:59 EDT</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> 
<p> 
<table> 
<tr> 
<td> 
<img src="http://www.cincomsmalltalk.com/blog/images/esug2006/web20_lukas.jpg" title="jarober added a file"/> 
</td> 
<td valign="center"> Lukas Renggli is up again, this time talking
about Seaside and how it fits with the &quot;Web 2.0&quot; meme. So Seaside
does a lot of things out of the box: 
<ul xmlns="http://www.w3.org/1999/xhtml"> 
<li> XHTML</li> 
<li> CSS</li> 
<li> RSS</li> 
<li> AJAX</li> 
</ul> </td> 
</tr> 
</table> 
<p> Heh. He said I'd get on their case for bad RSS. Lol :)</p> 
<p> This talk is about Seaside's use of AJAX, which gives you client
level interactivity.</p> 
<p> You want to concentrate on your web app, not on browser issues
(especially browser incompatibilities). Seaside masks that by using
Javascript [ed: Depending on how well your browser handles
Javascript: see TinyMCE, for instance...].</p> 
<p> The integration is via the Scriptaculous Javascript library. It
handles things like drag and drop, in place editing, etc. The
important thing is, you can express all of this in Smalltalk -
Seaside has APIs for that.</p> 
<p> Here's a small example of something interesting: shared state
across multiple browser instances:</p> 
<p> 
<img src="http://www.cincomsmalltalk.com/blog/images/esug2006/seaside_three.jpg" title="jarober added a file"/> 
</p> 
<p> Example:</p> 
<p> 
<pre> 
 

html effect
	id: 'hint';
	shake.

becomes:

new Effect.Shake('hint');


</pre> 
</p> 
<p> You integrate this the same way we saw in the 
<a href="http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3334897483"> 
short example 2 days ago.</a> </p> 
</p> 
<p> The kind of code you can write:</p> 
<p> 
<pre> 

html (updater | periodical | request | evaluator)
	[OPTIONS]; *
	[HANDLER]; *
	[TRIGGER]; *
	[CALLBACK]; *


</pre> 
</p> 
<p><strong>Note:</strong> I don't guarantee that the code examples are perfect :)</p>
<pre> 

&quot;in place editor&quot;
html span
	script: (html inPlaceEditor
	       triggerInPlaceEditor: [:v | anItem title];
	       callback: [:r | r render: anItem];
	with: anItem title.

&quot;drag &amp; drop&quot;
html form id: 'checkboxes'; with: [
html div
	id: 'items';
	script: (html sortable
	       tag: 'div';
	       onUpdate: (html request
	               triggerSortable: 'items'
	               callback: [:v | self model item: v]));
	class: 'items';
	with: [self renderItemsOn: html]]


</pre> 
<p>For debugging, you can usually debug in the Smalltalk debugger. If you have issues at the Javascript level, use Firefox and the FireBug extension that gives you some Javascript debugging capability. And see <a href="http://scriptaculous.seasidehosting.st">scriptaculous.seasidehosting.st.</a></p><!-- technorati tags start --><p style="text-align:right;font-size:10px;">Technorati Tags: 
<a href="http://www.technorati.com/tag/esug" rel="tag">esug</a>, <a href="http://www.technorati.com/tag/smalltalk" rel="tag">smalltalk</a>, <a href="http://www.technorati.com/tag/seaside" rel="tag">seaside</a>, <a href="http://www.technorati.com/tag/web2.0" rel="tag">web2.0</a></p><!-- technorati tags end -->
</div>]]></description>
			<guid isPermaLink="false">3335069459</guid>
			<pingback:server>http://www.cincomsmalltalk.com/blog/servlet/CommentAPIPBServlet?guid=3335069459</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/blog/blogView?entry=3335069459</pingback:target>
			<includedComments:comment-collection></includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/blog/blogView/servlet/CommentAPIServlet?guid=3335069459</wfw:comment>
		</item>
		<item>
			<title>Erlang</title>
			<link>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3335060964</link>
			<category>esug2006</category>
			<pubDate>Thu, 07 Sep 2006 05:49:24 EDT</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> 
<p> 
<table cellpadding="2"> 
<tr> 
<td> 
<img src="http://www.cincomsmalltalk.com/blog/images/esug2006/erlang.jpg" title="jarober added a file"/> 
</td> 
<td valign="center"> Now we have Joe Armstrong - an invited speaker
to talk to us about <a href="http://www.erlang.org/">Erlang</a>.
I've always been curious about Erlang - 
<a href="http://patricklogan.blogspot.com"> Patrick Logan</a> has
said good things about it, for instance. He's worked in Smaltalk,
and likes it. His work has been in telephony, and Smalltalk was a
bit slow for their purposes (this is way back). Ordered a Tektronix
Smalltalk machine (that's how far back :) ) - but there was a two
month wait for it.</td> 
</tr> 
</table> 
</p> 
<p> In the interim, he fell into Prolog by accident. By the time the
Smalltalk machine arrived, he was more interested in working with
Prolog. He gave the Smalltalk machine away, and Objectory came out
of that donation. In further experimentation, he added concurrency
to Prolog - and this is where Erlang was born - Joe is the inventor
of Erlang. He's curently a senior system architect at Ericsson
AB.</p> 
<p> One thing that Erlang is very good at is creating large numbers
of processes. In Java, for instance, processes map down to the OS
(threads) - and that takes away predictable behavior. So what you
want is:</p> 
<ul xmlns="http://www.w3.org/1999/xhtml"> 
<li> create large numbers of processes</li> 
<li> work the same on different OS's</li> 
<li> are garbage collected</li> 
<li> are location transparent</li> 
<li> cannot damage other processes</li> 
<li> are 
<em> defined in the language</em> </li> 
<li> creating and destroying processes should be lightweight</li> 
</ul> 
<p> Niall Dalton: Erlang is Smalltalk the way Alan Kay wanted it to
be - this got a nice laugh from the audience :)</p> 
<p> 
<strong> Assertion:</strong> To make a fault tolerant system, you
need at least two computers. That means that you are doing
distributed programming. To simplify the problems, have:</p> 
<ul xmlns="http://www.w3.org/1999/xhtml"> 
<li> No sharing</li> 
<li> pure message passing</li> 
<li> no locks</li> 
</ul> 
<p> Sharing gets in the way of fault tolerance. This gives us
Concurrency Oriented Programming:</p> 
<ul xmlns="http://www.w3.org/1999/xhtml"> 
<li> A style where concurrency is used to structure the
programming</li> 
<li> large number of processes</li> 
<li> complete isolation of processes</li> 
<li> no sharing of data</li> 
<li> location transparency</li> 
<li> pure message passing</li> 
</ul> 
<p> So the design rules:</p> 
<ul xmlns="http://www.w3.org/1999/xhtml"> 
<li> Identify the concurrent operations in the problem</li> 
<li> identify the message channels</li> 
<li> write down the set of messages seen on each channel</li> 
<li> write down the protocols</li> 
<li> write down the code</li> 
</ul> 
<p> Try to make the design isomorphic to the problem - i.e., a 1:1
correspondence between process/message structure in the model and
the problem.</p> 
<p> In 1998, Erlang got banned at Ericsson, due to a &quot;we must use
standard languages&quot; wave (sounds familiar). The upshot was, Erlang
got open sourced, and the Erlang folks formed Bluetail. Bluetail
was later acquired.</p> 
<p> The basic concept here: systems should be black boxes that can
communicate - failures in one black box should not crash another
black box. This leads to making all communication asynchronous. The
problem domain:</p> 
<ul xmlns="http://www.w3.org/1999/xhtml"> 
<li> Highly concurrent - hundreds of thousands of parallel
activities</li> 
<li> Real time</li> 
<li> Distributed</li> 
<li> High Availability - down times of minutes/year - never
down</li> 
<li> Complex Software - millions of lines of code</li> 
<li> Continuous Operation - years</li> 
<li> Continuous Evolution</li> 
<li> In service upgrade</li> 
</ul> 
<p> So to get this:</p> 
<p> 
<table border="1" cellpadding="2"> 
<tr> 
<td> Concurrency</td> 
<td> processes</td> 
</tr> 
<tr> 
<td> Error encapsulation</td> 
<td> isolation</td> 
</tr> 
<tr> 
<td> fault detection</td> 
<td> what failed</td> 
</tr> 
<tr> 
<td> Fault identification</td> 
<td> why it failed</td> 
</tr> 
<tr> 
<td> Live code upgrade</td> 
<td> evolving systems (multiple versions at same time)</td> 
</tr> 
<tr> 
<td> Stable storage</td> 
<td> crash recovery</td> 
</tr> 
</table> 
</p> 
<p> Isolation is key here: It's why hardware components are easier
to build. Erlang is designed to operate concurrently via message
passing, with isolation. So:</p> 
<p> Processes have 
<em> share nothing semantics</em> and data must be copied. Message passing is the only way to exchange data. Message passing is asynchronous. <em>My program should not be able to crash your program.</em></p> 
<p>Programming for Errors: If you can't do what you want to do, try and do something simpler :) Using these techniques, they've built a 9 nine's reliable GPRS system in Europe. </p><!-- technorati tags start --><p style="text-align:right;font-size:10px;">Technorati Tags: 
<a href="http://www.technorati.com/tag/esug" rel="tag">esug</a>, <a href="http://www.technorati.com/tag/smalltalk" rel="tag">smalltalk</a>, <a href="http://www.technorati.com/tag/erlang" rel="tag">erlang</a></p><!-- technorati tags end -->
</div>]]></description>
			<guid isPermaLink="false">3335060964</guid>
			<pingback:server>http://www.cincomsmalltalk.com/blog/servlet/CommentAPIPBServlet?guid=3335060964</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/blog/blogView?entry=3335060964</pingback:target>
			<includedComments:comment-collection>
				<includedComments:comment>
					<includedComments:guid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3335060964</includedComments:guid>
					<includedComments:puid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3335060964</includedComments:puid>
					<includedComments:author>Isaac Gouy</includedComments:author>
					<includedComments:pubDate>2006-09-07T13:58:08-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;James &lt;em&gt;I've always been curious about Erlang&lt;/em&gt;&lt;br/&gt;
So what did you and others in the audience think of it? How does it compare to Cincom ST?
&lt;/p&gt;&lt;/div&gt;</includedComments:content>
					<includedComments:title>opinions? audience questions?</includedComments:title>
				</includedComments:comment>
				<includedComments:comment>
					<includedComments:guid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3335060964</includedComments:guid>
					<includedComments:puid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3335060964</includedComments:puid>
					<includedComments:author>
James Robertson</includedComments:author>
					<includedComments:pubDate>2006-09-07T14:51:48-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;Comment by 
James Robertson&lt;/p&gt;

&lt;p&gt;


&lt;p&gt;He got a good reception here. Erlang sounds like the tool you want to use if you are solving the kinds of problems that come up in telecom systems. Smalltalk could be built for that, but it's not that way now. Ultimately, I'd say it boils down to &amp;quot;pick the right tool for the job&amp;quot;. &lt;/p&gt;
&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>
Re: Erlang</includedComments:title>
				</includedComments:comment>
				<includedComments:comment>
					<includedComments:guid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3335060964</includedComments:guid>
					<includedComments:puid>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3335060964</includedComments:puid>
					<includedComments:author>Isaac Gouy</includedComments:author>
					<includedComments:pubDate>2006-09-07T15:12:21-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;So Erlang should be useful outside of telecom where high reliability is a key requirement, where the heart of the application is &lt;em&gt;switching&lt;/em&gt; ... &lt;a href="http://www.erlang.se/euc/03/proceedings/1100Danie.ppt"&gt;Erlang in Banking and Financial Switching (ppt)&lt;/a&gt;


&lt;/p&gt;&lt;/div&gt;</includedComments:content>
					<includedComments:title>solving the kinds of problems</includedComments:title>
				</includedComments:comment>
			</includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/blog/blogView/servlet/CommentAPIServlet?guid=3335060964</wfw:comment>
		</item>
		<item>
			<title>Georg Heeg: Integrating Smalltalk Systems</title>
			<link>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;entry=3335055379</link>
			<category>esug2006</category>
			<pubDate>Thu, 07 Sep 2006 04:16:19 EDT</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">

<p>It's Thursday morning, and <a href="http://www.heeg.de">Georg Heeg</a> is up to talk about the ObjectStudio 8 project. The Heeg company was founded in 1987, and has been involved in Smalltalk since that time.</p>
<p><strong>OST and VisualWorks:</strong></p><ul xmlns="http://www.w3.org/1999/xhtml">
			<li>ObjectStudio and VW are Smalltalk systems</li>
		<li>Both owned by Cincom</li><li>VW is descended from the same source as Squeak (ST-80, Xerox PARC) </li><li>ObjectStudio was developed under the name Enfin, and was originally designed as an &quot;Enterprise OO Development Environment&quot;</li></ul><p><strong>Enfin</strong></p><ul xmlns="http://www.w3.org/1999/xhtml">
			<li>Ease of use</li>
		<li>Enterprise integration</li></ul><p><strong>VisualWorks</strong></p><ul xmlns="http://www.w3.org/1999/xhtml">
			<li>Execution speed</li>
		<li>Sophisticated meta-model</li></ul><p>Customers want both, but don't often know that they need the meta-model. So - why is Cincom doing this, given the sad history of product integration (across the industry). There was an HPS2OS project that did not succeed. However, Georg points out that Smalltalk is all about modeling - so we should be able to model one system in another. </p><p>So ObjectStudio 8: Model ObjectStudio using VisualWorks meta-modeling. It uses reflection capabilities:</p><ul xmlns="http://www.w3.org/1999/xhtml">
			<li>Compiler</li>
		<li>Debugger</li><li>Namespaces</li></ul><p>There were significant differences, including such things as the process model. Both OST and VW live in the same image. They share the same Smalltalk kernel and most of the same base classes. Both base OST and base VW code work (mostly) unchanged from previous releases. </p><p>The idea for this was originally Georg's - he had vocal chord surgery in 2004, and couldn't speak for 2 weeks - he started this project then, and it's become a full project inside the Cincom Smalltalk team. After that time, he could load the OST codebase - didn't all work, but it did load.</p><p>After that, he hired a new team member, Jorg, who had worked on the Windows CE VM as an intern. He's been doing much of the DLL integration for ObjectStudio 8, as well as primitive migration. That started at a rate of one primitive per day (there are 450!). That's where things went to making the OST C/C++ codebase into a VW callable DLL. He started that in February of 2005. He got a basic version completed by JUne of 2005. </p><p>At that point, compatibility testing started in earnest. If a component didn't work right, they wer either fixed, or replaced. For instance, ObjectStreams have been replaced by BOSS. This took much longer than originally anticipated :)</p><p>The original strategy was to not modify the VW VM at all. Some bugs did need to be fixed, and the Event system had to be changed somewhat - but that was it. The goal for ObjectStudio 8 on the Smalltalk side was to make VW namespaces invisible. Classes live in namespace ObjectStudio, globals live in ObjectStudio.Globals. Here's Georg in front of a (not clear in the picture) architecture diagram:</p><p><img src="http://www.cincomsmalltalk.com/blog/images/esug2006/georg_ost8.jpg" title="jarober added a file"/></p>
<p>And here's a capture of the image Georg sent me afterwards:</p>
<p><img src="http://www.cincomsmalltalk.com/blog/images/esug2006/os8_arch.jpg" title="OS 8 Architecture Diagram"/></p>
<p>Another set of issues came up in the way code is stored. ObjectStudio uses a different chunk format, and also stores code in CLS files (one class per file) - with additional complexity in secondary files (somewhat like the .NET partial class files, actually). The answer was a new compiler for ObjectStudio, with a new parser (both written in VW, at the Smalltalk level). </p><p>There were also some syntax differences - in OST, you can use:</p><p>{ [&quot;code here&quot;] [&quot;code here] }</p><p>to define an array of blocks. The VW compiler didn't do that, so they created code transformations that changed that kind of code over. As well, in ObjectStudio, you can assign to a method parameter. Again, transformations were defined to generate temp variables. Finally, there were some semantic differences - here are a few examples:</p>

<p>
<table border="1" cellpadding="2"><tr>
<td><strong>Code</strong></td><td><strong>VisualWorks</strong></td><td><strong>ObjectStudio</strong></td></tr>
<tr><td>1=0 ifTrue: [1]</td><td>nil</td><td>false</td></tr>
<tr><td>[:n | ] value: 1</td><td>1</td><td>nil</td></tr>
<tr><td>Array new add: 1</td><td>Error</td><td>#(1)</td></tr>
<tr><td>(Array  new: 1) at: 1 put: 7</td><td>7</td><td>#(7)</td></tr>
</table>
</p>
<p>The team defined a set of substitutions in order to execute ObjectStudio versions of messages that are like the examples above - i.e., where OST specific behavior should be preserved.</p><p>There were also mappings for the ObjectStudio chunk formats, so that OST 8 can read and write the classic OST file formats. In ObjectStudio, there is a very string integration between Smalltalk and C: there are numerous cases where the image and the VM call back and forth. OST has always been intepreted, so optimizing this callback scheme made sense. So there are five ways to call C:</p><ul xmlns="http://www.w3.org/1999/xhtml">
			<li>Direct Primitives</li>
		<li>Numbered Primitives - &lt;primitive: 123&gt;</li><li>Named Primitives - &lt;osprim: MFC openWindow&gt;</li><li>Module/EnfinModule</li><li>ExternalProcedures</li></ul><p>To handle this, a wrapper DLL was created using DLLCC. It uses __oop as a parameter and return type. It calls ObjectStudio primitives using a simulated ObjectStudio stack. </p><p>Another issue: In OST, object pointers never move - and this assumption gets used (for instance, in Windows API calls). In VW, the garbage collector moves object pointers all the time. The solution was to make OST OPTR objects into a C++ wrapper class, which handles this. Primitives either map directly to VW primitives, or got replaced by auto-generated replacement code, which goes into the wrapped DLL. </p><p>In ObjectStudio 8, Unicode capabilities are available, period. No more variant VMs and images. </p><p>Finally, the process model differences.</p><p><strong>VisualWorks</strong></p><ul xmlns="http://www.w3.org/1999/xhtml">
			<li>Processes run at different priorities</li>
		<li>Windows Events are handled (almost) any time</li><li>Shared queues move events to the target processes</li><li>Implemented in C</li></ul><p><strong>ObjectStudio</strong></p><ul xmlns="http://www.w3.org/1999/xhtml">
			<li>The caller of all execution is the Windows event model</li>
		<li>All message sends in the ASendQueue are executed when the Windows Event is empty</li><li>Implemented in C++</li></ul><p>This is where some modifications to VW event handling had to be made. There are specific subclasses now that communicate directly with the Windows Event system, rather than a generic cross platform wrapper. </p><p>ObjectStudio also has some interesting features missing from VW: for instance, class proxies. It has the same name as a missing class, and handles DNU by loading the missing class/application. This gives ObjectStudio lazy loading. In VW, you have parcels, but they don't do lazy loading. </p><p>A few Performance Issues:</p>

<ul xmlns="http://www.w3.org/1999/xhtml">
			<li>In OST, Smalltalk message sending is slow, while calling C is &quot;free&quot;</li>
		<li>In VW, message sends are fast, while calling C is expensive</li><li>This has driven different optimization schemes :)</li></ul><p>Another issue: file-in some .st code in VW:</p><ul xmlns="http://www.w3.org/1999/xhtml">
			<li>If a load takes 1000 seconds</li>
			<ul>
				<li>900 are refreshing the RB</li>
				<li>Of 100 seconds</li>
				<ul>
					<li>90 are repeatedly relinking the system</li>
					<li>Of 10 seconds</li>
					<ul>
						<li>9 are disk flush</li>
						<li>1 second compiling</li>
					</ul>
				</ul>
			</ul>
</ul><p>This has been optimized. A pleasant side effect is, it helps both VW and OST. New stuff for ObjectStudio: Store, the RB, the debugger, the inspector, related tools (code critic, etc). <strong>Note:</strong> <em>ObjectStudio developers do not need to migrate to Store.</em> They can continue to use the same source code control tools they use with their current ObjectStudio code.</p><p>Where are we? We have been working closely with a customer for feedback and porting data. We intend to have a first preview (beta) ready for general customers to see in the winter. Some known incompatibilities:</p><ul xmlns="http://www.w3.org/1999/xhtml">
			<li>Immutability</li>
		<li>Declare pool dictionaries</li><li>In the modeling tool, export in ASCII (binary format is incompatible)</li></ul><p>Georg's parting question: Integration of Smalltalk systems is possible. So, are there other systems that should be integrated? Squak, VA, VSE? Smalltalk-X, Dolphin, Gemstone? What about other languages, like Ruby, Java? </p><p style="text-align:right;font-size:10px;">Technorati Tags: 
<a href="http://www.technorati.com/tag/smalltalk" rel="tag">smalltalk</a>, <a href="http://www.technorati.com/tag/esug" rel="tag">esug</a></p>
</div>]]></description>
			<guid isPermaLink="false">3335055379</guid>
			<pingback:server>http://www.cincomsmalltalk.com/blog/servlet/CommentAPIPBServlet?guid=3335055379</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/blog/blogView?entry=3335055379</pingback:target>
			<includedComments:comment-collection></includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/blog/blogView/servlet/CommentAPIServlet?guid=3335055379</wfw:comment>
		</item>
	</channel>
</rss>
