<?xml version='1.0' encoding='UTF-8' ?>
<rss version="2.0" xml:base="http://www.cincomsmalltalk.com/blog/" 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:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:media="http://search.yahoo.com/mrss/" 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</title>
		<link>http://www.cincomsmalltalk.com/blog/blogView</link>
		<description>Cincom Product Manager</description>
		<webMaster>jrobertson@cincom.com</webMaster>
		<lastBuildDate>Tue, 06 May 2008 14:50:23 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="/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 2007 Cincom Systems, Inc.</dc:rights>
		<dc:date>2008-05-06T14:50:23-04:00</dc:date>
		<icbm:latitude>39.214103</icbm:latitude>
		<icbm:longitude>-76.878807</icbm:longitude>
		<item>
			<title>Newspeak to be Released?</title>
			<link>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;printTitle=Newspeak_to_be_Released&amp;entry=3387538222</link>
			<category>development</category>
			<pubDate>Tue, 06 May 2008 14:50:22 EDT</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">

<p><a href="http://gbracha.blogspot.com/2008/05/future-of-newspeak.html">Gilad Bracha</a> has announced that Newspeak will be released under an open source license (Apache). It should be interesting to learn more at <a href="http://stic.st/stic?content=sts2008">StS 2008.</a></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></p><!-- technorati tags end -->
</div>]]></description>
			<guid isPermaLink="false">3387538222</guid>
			<pingback:server>http://www.cincomsmalltalk.com/blog/servlet/CommentAPIPBServlet?guid=3387538222</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/blog/blogView?guid=3387538222</pingback:target>
			<includedComments:comment-collection></includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/blog/servlet/CommentAPIServlet?guid=3387538222</wfw:comment>
		</item>
		<item>
			<title>Gemstone Making a Ruby Play?</title>
			<link>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;printTitle=Gemstone_Making_a_Ruby_Play&amp;entry=3387045088</link>
			<category>development</category>
			<pubDate>Wed, 30 Apr 2008 21:51:28 EDT</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">

<p>Sounds like Gemstone is building a Ruby environment? <a href="http://www.infoq.com/news/2008/04/maglev-gemstone-builds-ruby">InfoQ</a> has the scoop.</p>
<!-- technorati tags start --><p style="text-align:right;font-size:10px;">Technorati Tags: 
<a href="http://www.technorati.com/tag/ruby" rel="tag">ruby</a>, <a href="http://www.technorati.com/tag/gemstone" rel="tag">gemstone</a>, <a href="http://www.technorati.com/tag/smalltalk" rel="tag">smalltalk</a></p><!-- technorati tags end -->
</div>]]></description>
			<guid isPermaLink="false">3387045088</guid>
			<pingback:server>http://www.cincomsmalltalk.com/blog/servlet/CommentAPIPBServlet?guid=3387045088</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/blog/blogView?guid=3387045088</pingback:target>
			<includedComments:comment-collection></includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/blog/servlet/CommentAPIServlet?guid=3387045088</wfw:comment>
		</item>
		<item>
			<title>Inspired by Code Monkey</title>
			<link>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;printTitle=Inspired_by_Code_Monkey&amp;entry=3386421367</link>
			<category>development</category>
			<pubDate>Wed, 23 Apr 2008 16:36:07 EDT</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">

<p>I was driving to my daughter's school, listening to my iPod, set to shuffle my music, and &quot;<a href="http://www.youtube.com/watch?v=aqTaqVi9J8k">Code Monkey</a>&quot; came up. Imagine my surprise when I had a sudden epiphany on a longstanding bug in the blog server. </p>
<p>I had noticed that whenever I pushed a new post up, if I wanted the category specific feed to update, I needed to manually force that to happen. This was irritating, but I hadn't figured out why it was happening - the order (update the cache, then update the feed) looked right. What I hadn't done was delve into the process of cache updating. Here's what that looked like:</p>

<blockquote>
<p>
<pre>

	...

	self categoryCache add: category.
	[self cache cacheForCategorySearch: aBlog] 
		forkAt: Processor userBackgroundPriority.

	...

</pre>
</p></blockquote>

<p>You might see the problem - the cache update code is forked, and at a lower priority than the active thread. Given the Smalltalk Process Model's operation, that thread is <em>guaranteed</em> to not run before the main thread does - which meant that the category specific feed was getting dropped <em>before</em> the cache got updated. I just made sure that the feed gets dropped within that fork, after the cache update - which solves the problem.</p>

<p>So what does it say about me that I came up with this during that song :)</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></p><!-- technorati tags end -->
</div>]]></description>
			<guid isPermaLink="false">3386421367</guid>
			<pingback:server>http://www.cincomsmalltalk.com/blog/servlet/CommentAPIPBServlet?guid=3386421367</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/blog/blogView?guid=3386421367</pingback:target>
			<includedComments:comment-collection>
				<includedComments:comment>
					<includedComments:guid>blogView?showComments=true&amp;printTitle=Inspired_by_Code_Monkey&amp;entry=3386421367</includedComments:guid>
					<includedComments:puid>blogView?showComments=true&amp;printTitle=Inspired_by_Code_Monkey&amp;entry=3386421367</includedComments:puid>
					<includedComments:author></includedComments:author>
					<includedComments:pubDate>2008-04-24T01:42:49-04:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;Rats... now I had to play that song for the first time in months...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;"... his code not function or elegant ..."&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Did you see &lt;a href="http://youtube.com/watch?v=v4Wy7gRGgeA"&gt;the WoW video&lt;/a&gt; for this? Hilarious.&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title></includedComments:title>
				</includedComments:comment>
			</includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/blog/servlet/CommentAPIServlet?guid=3386421367</wfw:comment>
		</item>
		<item>
			<title>Python just got more popular</title>
			<link>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;printTitle=Python_just_got_more_popular&amp;entry=3385089118</link>
			<category>development</category>
			<pubDate>Tue, 08 Apr 2008 06:31:58 EDT</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">

<p>Google has <a href="http://www.news.com/8301-10784_3-9913631-7.html?part=rss&amp;subj=news&amp;tag=2547-1_3-0-5">announced their application platform,</a> and their hook to get you started is that it's free up to a certain level of usage - that usage level is restricted for the beta period (first 10,000 signups). Here's the detail on that:</p>
<blockquote>Google's App Engine initially will have limits of 500MB of storage, 10GB of daily data transfer bandwidth, and 200 million daily cycles of processor use. That should be enough to power a Web site with about 5 million page views per month, Koomen said.</blockquote><p>Once they get out of beta, that usage level will be free, with anything beyond that charged on a pay as you go basis. The interesting thing is this: the development environment for it is Python. So much for Sun's theory about what you need to scale in the Enterprise. </p><p>That provides an interesting counterpoint to what Amazon is offering though. With Google, small scale use is free, but your toolset is limited. With Amazon, you pay as you go from the start (not a lot), but you can use whatever tools you want. </p><p>Bottom line, developers just got more choices for building out web apps.</p><!-- technorati tags start --><p style="text-align:right;font-size:10px;">Technorati Tags: 
<a href="http://www.technorati.com/tag/cloud computing" rel="tag">cloud computing</a></p><!-- technorati tags end -->
</div>]]></description>
			<guid isPermaLink="false">3385089118</guid>
			<pingback:server>http://www.cincomsmalltalk.com/blog/servlet/CommentAPIPBServlet?guid=3385089118</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/blog/blogView?guid=3385089118</pingback:target>
			<includedComments:comment-collection>
				<includedComments:comment>
					<includedComments:guid>blogView?showComments=true&amp;printTitle=Python_just_got_more_popular&amp;entry=3385089118</includedComments:guid>
					<includedComments:puid>blogView?showComments=true&amp;printTitle=Python_just_got_more_popular&amp;entry=3385089118</includedComments:puid>
					<includedComments:author>murphee (http://jroller.com/page/murphee)</includedComments:author>
					<includedComments:pubDate>2008-04-08T16:25:50-04:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;Actually, what Google AppEngine provides is a new way for vendor lock-in, in this case Google. You're pretty much stuck using whatever Google API you need (User management, that Data management system, etc) - and since those rely on Google mechanisms (Bigtable, etc)... well... you're left with two choices:
 - stick with Google (through thick and thin)
 - replicate the whole AppEngine API before you can even think about moving.

&lt;/p&gt;
&lt;p&gt;I'd say... this thing is actually an argument &lt;u&gt;for&lt;/u&gt; Amazon's EC2/S3...
&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Well..</includedComments:title>
				</includedComments:comment>
			</includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/blog/servlet/CommentAPIServlet?guid=3385089118</wfw:comment>
		</item>
		<item>
			<title>Earth to Sun</title>
			<link>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;printTitle=Earth_to_Sun&amp;entry=3384074930</link>
			<category>development</category>
			<pubDate>Thu, 27 Mar 2008 12:48:50 EST</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">

<p>I love those <a href="http://www.infoworld.com/article/08/03/26/java-speed_1.html">Java guys at Sun</a> - they're kind of cute when they try to talk smack:</p>
<blockquote>Java also enjoys a 10-times performance advantage over interpreted scripting languages like JavaScript, Perl and Python, he said. &quot;The scripting languages aren't JIT-ted yet,&quot; he said. </blockquote><blockquote>Scripting languages are ideal for smaller programs but Java is the choice for larger programs, he said. &quot;As your program grows in size, the lack of strong typing basically kills your ability to handle a very large program and so you don't find the million-line Perl program,&quot; he said. One-million-line Java programs are plentiful, Click said. Strong typing refers to the capability of knowing the type of memory objects. </blockquote><p>First, most million line programs are a <em>mistake.</em> The fact that Java has lots of them says nothing good about the language; the fact that it takes that much code to achieve something useful says something else entirely. Second, most of the large applications they are talking about are database bound - meaning that the <em>raw execution speed of the code is mostly irrelevant.</em></p><p>Take a live example of a big app written in one of the languages these guys are throwing rocks at - Twitter. Everyone knows they had initial scaling problems, but those have gone away - and the app is still written in Ruby. Gee, why do you suppose that is? Could it be that they went and tuned the database layer, and got their load balancing situation under control? I Rather suspect that a Twitter on J2EE wouldn't exist yet, because some of the <em>million lines of code required would still be being written.</em></p><p>Here's another small clue for those guys - most of the containers floating around the planet are shipped with Smalltalk code. A large proportion (possibly a majority) of the chips being built are in factories controlled in large measure by Smalltalk systems. A ton of the more profitable trading on Wall Street, by one of the most prestigious (and <a href="http://www.cincom.com/common/success-stories/profiles/jpmorgan.html">successful</a>) firms there is done in Smalltalk. The firms that haven't been able to catch them? Yeah, those guys use J2EE, mores the pity.</p><p>Micro-benchmarks are pretty irrelevant, and you would think Sun's big honchos would know that. However, when you realize that J2EE is a huge pile of steaming manure weighing down the people unfortunate enough to be using it, I guess it makes sense to shout &quot;but our arithmetic is really fast!&quot;.</p><!-- technorati tags start --><p style="text-align:right;font-size:10px;">Technorati Tags: 
<a href="http://www.technorati.com/tag/java" rel="tag">java</a>, <a href="http://www.technorati.com/tag/j2ee" rel="tag">j2ee</a>, <a href="http://www.technorati.com/tag/smalltalk" rel="tag">smalltalk</a>, <a href="http://www.technorati.com/tag/scripting languages" rel="tag">scripting languages</a>, <a href="http://www.technorati.com/tag/ruby" rel="tag">ruby</a></p><!-- technorati tags end -->
</div>]]></description>
			<guid isPermaLink="false">3384074930</guid>
			<pingback:server>http://www.cincomsmalltalk.com/blog/servlet/CommentAPIPBServlet?guid=3384074930</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/blog/blogView?guid=3384074930</pingback:target>
			<includedComments:comment-collection>
				<includedComments:comment>
					<includedComments:guid>blogView?showComments=true&amp;printTitle=Earth_to_Sun&amp;entry=3384074930</includedComments:guid>
					<includedComments:puid>blogView?showComments=true&amp;printTitle=Earth_to_Sun&amp;entry=3384074930</includedComments:puid>
					<includedComments:author>Randal L. Schwartz</includedComments:author>
					<includedComments:pubDate>2008-03-27T14:38:57-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;Sure, if all you show is math crunching, Java wins over Perl, because Perl prefers string wrangling to numbers. &amp;nbsp;But I've heard that Perl is on par, if not faster sometimes, than Java for most basic webapp stuff.&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>ten times?  are you kidding?</includedComments:title>
				</includedComments:comment>
				<includedComments:comment>
					<includedComments:guid>blogView?showComments=true&amp;printTitle=Earth_to_Sun&amp;entry=3384074930</includedComments:guid>
					<includedComments:puid>blogView?showComments=true&amp;printTitle=Earth_to_Sun&amp;entry=3384074930</includedComments:puid>
					<includedComments:author>Claus</includedComments:author>
					<includedComments:pubDate>2008-03-28T04:23:03-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;You are right on one thing: Database performance (or heck, a useful database layout) is very important.&lt;/p&gt;
&lt;p&gt;But it also depends a bit on what has to be done with the data. If you have complex algorithms, then raw speed of the code can definitely help. Also, with old-fashioned GUIs, Java does (yet) have one advantage: Drawing directly on the video card memory instead of going through GDI or openGL (or DirectX). However, I also think those GUIs are slowly being replaced by browser applications and Seaside definitely is a forerunner there, although more people need to realize that yet.&lt;/p&gt;
&lt;p&gt;Clau&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Database performance</includedComments:title>
				</includedComments:comment>
				<includedComments:comment>
					<includedComments:guid>blogView?showComments=true&amp;printTitle=Earth_to_Sun&amp;entry=3384074930</includedComments:guid>
					<includedComments:puid>blogView?showComments=true&amp;printTitle=Earth_to_Sun&amp;entry=3384074930</includedComments:puid>
					<includedComments:author>chuck</includedComments:author>
					<includedComments:pubDate>2008-03-28T07:48:10-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;So, we know what you think of J2EE by now... :D&amp;nbsp; Do you think JEE5 has improved the situation any for those poor huddled masses in Javania?&amp;nbsp; Just curious.&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>jee5?</includedComments:title>
				</includedComments:comment>
				<includedComments:comment>
					<includedComments:guid>blogView?showComments=true&amp;printTitle=Earth_to_Sun&amp;entry=3384074930</includedComments:guid>
					<includedComments:puid>blogView?showComments=true&amp;printTitle=Earth_to_Sun&amp;entry=3384074930</includedComments:puid>
					<includedComments:author>
James Robertson</includedComments:author>
					<includedComments:pubDate>2008-03-28T08:08:40-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;If you like your steaming pile with even more baroqueness, sure :)&lt;/p&gt;
&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>
More Complexity...</includedComments:title>
				</includedComments:comment>
				<includedComments:comment>
					<includedComments:guid>blogView?showComments=true&amp;printTitle=Earth_to_Sun&amp;entry=3384074930</includedComments:guid>
					<includedComments:puid>blogView?showComments=true&amp;printTitle=Earth_to_Sun&amp;entry=3384074930</includedComments:puid>
					<includedComments:author>Mark Miller</includedComments:author>
					<includedComments:pubDate>2008-03-28T14:44:05-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;I know you've complained about this before, but so often when people are quoted about dynamic languages they always talk about Ruby and Python, which are interpreted, to the best of my knowledge. Smalltalk and Lisp are generally compiled languages. So there's a difference. Smalltalk, Lisp, Scheme, Haskell, etc.&amp;nbsp;don't get talked about in these comparisons because they're considered outliers.&lt;/p&gt;
&lt;p&gt;Even though I've heard Squeak is slower than VW, Squeak easily outperforms Ruby in one benchmark I've seen. I know you defended Ruby in the case of Twitter, but everyone I've heard from who has presumably been an RoR developer has said "Ruby is slow". In&amp;nbsp;the case&amp;nbsp;of Twitter I imagine they've been able to "throw sufficient hardware at it" to make it&amp;nbsp;go fast enough. Another example is YouTube, which I believe was originally implemented in Python. I can remember when there were times it ran slow and glitchy. Now it's nicer, but I think they ported it to C++ and Perl after Google bought it. Not that Python couldn't have worked. It would've required a different solution.&lt;/p&gt;
&lt;p&gt;In any case, it's not surprising to me that people would be saying that Java runs faster than Ruby and Python. I'm sure it does. Java has been approaching the speed of C for a few years now.&amp;nbsp;As you were saying, what they neglect is the programmer productivity, which often gets neglected. I've discussed this with others, and it sounds like this has more to do with current accounting practices. I forget what the exact conclusion was, but programmer productivity is not expensed the same as, say, software or hardware purchases. It may be that programmer time is just considered a "cost of doing business", whereas a software/hardware purchase is considered an outlay.&lt;/p&gt;
&lt;p&gt;Here's the thing. So long as it seems like everyone else is just as "efficient" as you are, people think "this is how it goes." They don't know any better. Even though large businesses use Smalltalk it doesn't get talked about the way&amp;nbsp;Java does. Maybe it's the same reason COBOL (though I would NEVER equate the two) didn't get much publicity after a couple decades either. It just wasn't considered "exciting" anymore. Maybe Java will suffer the same fate of oblivion from the press&amp;nbsp;after a couple more decades. One can hope...&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Be careful comparing apples and oranges</includedComments:title>
				</includedComments:comment>
				<includedComments:comment>
					<includedComments:guid>blogView?showComments=true&amp;printTitle=Earth_to_Sun&amp;entry=3384074930</includedComments:guid>
					<includedComments:puid>blogView?showComments=true&amp;printTitle=Earth_to_Sun&amp;entry=3384074930</includedComments:puid>
					<includedComments:author></includedComments:author>
					<includedComments:pubDate>2008-03-29T10:24:03-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;Interesting that you talk about large programs/systems.&amp;nbsp; It is very hard to to build large systems in Smalltalk.&lt;/p&gt;
&lt;p&gt;It lacks componentization (or at least it is very weak).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Everytime I get another UHE report from the field, I certainly wish for a bit more typing BTW.&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title></includedComments:title>
				</includedComments:comment>
			</includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/blog/servlet/CommentAPIServlet?guid=3384074930</wfw:comment>
		</item>
		<item>
			<title>Thinking about MonkeyPatching</title>
			<link>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;printTitle=Thinking_about_MonkeyPatching&amp;entry=3383967998</link>
			<category>development</category>
			<pubDate>Wed, 26 Mar 2008 07:06:38 EST</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">

<p>As it happens, I ran across a situation requiring a &quot;monkey patch&quot; just this morning. A <a href="http://www.cincomsmalltalk.com/BottomFeeder">BottomFeeder</a> user reported an issue reading this feed:</p>
<p><a href="http://community.devexpress.com/blogs/alansplace/rss.aspx">http://community.devexpress.com/blogs/alansplace/rss.aspx</a></p><p>I fired up an image, and tried this code, to make sure that the problem wasn't some silly thing I was doing in my own code:</p>

<p>

<pre>HttpClient new get: 'http://community.devexpress.com/blogs/alansplace/rss.aspx'</pre></p><p>Sure enough, there was a problem in the base network code in the system - something about parsing headers. Now, the correct answer here would be to go to the root of the problem, figure out the parsing error, and fix that. I could also just decide this - in the world of feed readers, cookies simply aren't that critical. So, I overrode the inherited method and did this (and yes, it's a hack):</p>

<p>

<pre>

parse: rfc822Stream
&quot;Override to handle errors&quot;

	self source: rfc822Stream asStream.
	value := [self doParse: rfc822Stream]
		on: Error
		do: [:ex | nil].

</pre>
</p>

<p>However, from a patching perspective, even a full fix by me would still be a patch on library code. Either way, I have to deliver a work-around to deployed clients. So what would the <a href="http://gbracha.blogspot.com/2008/03/monkey-patching.html">purist</a> suggest in this case? Tell people in the field that they have to wait? Derive a secondary network library in order to avoid patching system code? My solution seems more pragmatic, especially since it's versioned in its own package, and - like other such patches in the past - will disappear as soon as a proper update comes from Cincom engineering.</p><!-- technorati tags start --><p style="text-align:right;font-size:10px;">Technorati Tags: 
<a href="http://www.technorati.com/tag/code overrides" rel="tag">code overrides</a>, <a href="http://www.technorati.com/tag/smalltalk" rel="tag">smalltalk</a>, <a href="http://www.technorati.com/tag/dynamic language" rel="tag">dynamic language</a>, <a href="http://www.technorati.com/tag/monkey patching" rel="tag">monkey patching</a></p><!-- technorati tags end -->
</div>]]></description>
			<guid isPermaLink="false">3383967998</guid>
			<pingback:server>http://www.cincomsmalltalk.com/blog/servlet/CommentAPIPBServlet?guid=3383967998</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/blog/blogView?guid=3383967998</pingback:target>
			<includedComments:comment-collection>
				<includedComments:comment>
					<includedComments:guid>blogView?showComments=true&amp;printTitle=Thinking_about_MonkeyPatching&amp;entry=3383967998</includedComments:guid>
					<includedComments:puid>blogView?showComments=true&amp;printTitle=Thinking_about_MonkeyPatching&amp;entry=3383967998</includedComments:puid>
					<includedComments:author>
&lt;a href="http://www.cincomsmalltalk.com/userblogs/troy/blogView"&gt;Troy Brumley&lt;/a&gt;</includedComments:author>
					<includedComments:pubDate>2008-03-26T09:06:18-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;Comment by 
&lt;a href="http://www.cincomsmalltalk.com/userblogs/troy/blogView"&gt;Troy Brumley&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;


&lt;p&gt;Who find bugs that illustrate the power of fixing things in Smalltalk :) Thanks for the fix.&lt;/p&gt;
&lt;p&gt;Another key point here that you gloss over is that you just fired up an image and typed in a simple command in a workspace. That's pretty close to REPL. Over in .NET or Java land I need to write a small program to test this sort of thign.&lt;/p&gt;&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>
we also serve</includedComments:title>
				</includedComments:comment>
			</includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/blog/servlet/CommentAPIServlet?guid=3383967998</wfw:comment>
		</item>
		<item>
			<title>On Monkey Patching</title>
			<link>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;printTitle=On_Monkey_Patching&amp;entry=3383764038</link>
			<category>development</category>
			<pubDate>Sun, 23 Mar 2008 22:27:18 EST</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">

<p><a href="http://gbracha.blogspot.com/2008/03/monkey-patching.html">Gilad Bracha</a> on extending system code:</p>
<blockquote>One way of achieving this would be to actually go and add the necessary methods to the class Symbol, so that symbols could behave like parsers. I know otherwise intelligent people who are prepared to argue for this approach. As I said, Smalltalkers would call these additions extension methods, but I find the more informal term monkey patching conveys a better intuition.</blockquote><blockquote>Typically, one wants to deliver a set of such methods as a unit, to be installed when a certain class or library gets loaded. So these changes are often provided as a patch that is applied dynamically. Not a problem in Smalltalk or Ruby or Python (though I gathered from the Pythoners in Krakow that they, to their credit, frown on the practice).</blockquote><blockquote>Apparently, there is a need to explain why monkey patching is a really bad idea. For starters, the methods in one monkey&acirc;&#128;&#153;s patch might conflict with those in some other monkey&acirc;&#128;&#153;s patch. In our example, the sequencing operator for parsers conflicts with that for symbols.</blockquote><p>Hmm. First, version control systems exist partly for that reason - to let developers look at exactly those kinds of conflicts. Second, would Bracha rather see developers in Smalltalk (et. al.) use the same kind of &quot;support class&quot; nonsense that Java developers have been locked into for years? </p><p>Sure, you can get in trouble with conflicting extensions - in BottomFeeder, I ran into exactly that problem when I started using Antony Blakey's improved Look and Feel policy. Here's the thing though: I spoke to Antony, and, after we talked a bit, we dealt with the problem. So let me see: my solution involved more and better communication between developers. Bracha's involves &quot;just say no&quot;. </p><p>Call me crazy, but I think my approach seems far more practical in the real world. At the end of the day, his approach comes from the school of thought I like to call &quot;the library developer is god&quot;. </p><p>Hat tip <a href="http://patricklogan.blogspot.com/2008/03/gilad-bracha-anti-monkeypatcher.html">Patrick Logan</a></p>
<!-- technorati tags start --><p style="text-align:right;font-size:10px;">Technorati Tags: 
<a href="http://www.technorati.com/tag/monkey%20patching" rel="tag">monkey patching</a>, <a href="http://www.technorati.com/tag/smalltalk" rel="tag">smalltalk</a></p><!-- technorati tags end -->
</div>]]></description>
			<guid isPermaLink="false">3383764038</guid>
			<pingback:server>http://www.cincomsmalltalk.com/blog/servlet/CommentAPIPBServlet?guid=3383764038</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/blog/blogView?guid=3383764038</pingback:target>
			<includedComments:comment-collection>
				<includedComments:comment>
					<includedComments:guid>blogView?showComments=true&amp;printTitle=On_Monkey_Patching&amp;entry=3383764038</includedComments:guid>
					<includedComments:puid>blogView?showComments=true&amp;printTitle=On_Monkey_Patching&amp;entry=3383764038</includedComments:puid>
					<includedComments:author>Mark Miller</includedComments:author>
					<includedComments:pubDate>2008-03-23T23:05:55-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;I've been hearing about this term lately. If I have this right, what it means is doing the same thing in Ruby or Python as Smalltalkers have been free to do, which is add onto or modify the behavior of a system class. Am I right? If so, I can see the consternation about it, because the change is never permanent in Ruby and Python. It only appears at runtime. The reason being that the system class has default properties and behaviors that are immutable between runs. They always come back to the way they were, unless they're changed by code at runtime. This makes it difficult to examine the behavior, because it changes&amp;nbsp;when it goes from&amp;nbsp;dormant to&amp;nbsp;"live"&amp;nbsp;state. The only way to make these behaviors&amp;nbsp;permanent would be to dig into the guts and modify C code. I think the move to monkey patching should serve as a call to the Ruby&amp;nbsp;community to get "Ruby written in Ruby"&amp;nbsp;done ASAP, because then this will become less of an issue. There's still the issue of changing predictable behavior, but at least those changes can be examined in a predictable way.&lt;/p&gt;
&lt;p&gt;Actually, I had a bit of a monkey patching experience myself. I was fooling around with CLISP and redefined the meaning of the "+" operator. It was predefined (optimized) in C code, but I was able to make it use my definition. I've been told that the Common Lisp spec. leaves the results you get from monkey patching as "undefined". So it's not portable, but it was neat to try something I used to be told was possible.&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Monkey patching</includedComments:title>
				</includedComments:comment>
				<includedComments:comment>
					<includedComments:guid>blogView?showComments=true&amp;printTitle=On_Monkey_Patching&amp;entry=3383764038</includedComments:guid>
					<includedComments:puid>blogView?showComments=true&amp;printTitle=On_Monkey_Patching&amp;entry=3383764038</includedComments:puid>
					<includedComments:author>Patrick Logan</includedComments:author>
					<includedComments:pubDate>2008-03-24T00:06:38-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;I think a language that is aimed at keeping the programmer out of all trouble is a language one should avoid at all costs. I fear for the future of programming.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Fear and Loathing</includedComments:title>
				</includedComments:comment>
				<includedComments:comment>
					<includedComments:guid>blogView?showComments=true&amp;printTitle=On_Monkey_Patching&amp;entry=3383764038</includedComments:guid>
					<includedComments:puid>blogView?showComments=true&amp;printTitle=On_Monkey_Patching&amp;entry=3383764038</includedComments:puid>
					<includedComments:author>
&lt;a href="http://www.cincomsmalltalk.com/userblogs/troy/blogView"&gt;Troy Brumley&lt;/a&gt;</includedComments:author>
					<includedComments:pubDate>2008-03-24T14:20:54-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;Comment by 
&lt;a href="http://www.cincomsmalltalk.com/userblogs/troy/blogView"&gt;Troy Brumley&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;


&lt;p&gt;VB9 and C# 3 (I guess that's the version) offer Extension Methods, which allows the developer to extend system classes (at last) without using wrappers and the inordinate drag they introduce. They also group this with lambda expressions, which I haven't cracked into yet but view as something that will let me begin to do some of the things I can do with blocks in Smalltalk.&lt;/p&gt;
&lt;p&gt;I think arguments can be made pro and con for any of the approaches described in this thread. I prefer fewer things to slow me down as I code, but I don't mind the lack of a safety net. Not all programmers are as comfortable as operating in that mode as Smalltalkers are.&lt;/p&gt;&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>
extension methods</includedComments:title>
				</includedComments:comment>
				<includedComments:comment>
					<includedComments:guid>blogView?showComments=true&amp;printTitle=On_Monkey_Patching&amp;entry=3383764038</includedComments:guid>
					<includedComments:puid>blogView?showComments=true&amp;printTitle=On_Monkey_Patching&amp;entry=3383764038</includedComments:puid>
					<includedComments:author>George Paci</includedComments:author>
					<includedComments:pubDate>2008-03-25T09:50:15-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;I think something that's gotten muddled in this debate is the distinction between:&lt;/p&gt;
&lt;p&gt;1) Having the power to monkey-patch is good.&lt;/p&gt;
&lt;p&gt;and&lt;/p&gt;
&lt;p&gt;2) You should monkey-patch with wild abandon.&lt;/p&gt;
&lt;p&gt;I think anyone who uses a dynamic language agrees on (1): that is, nobody wants to see the programmer banned from monkey-patching.&amp;nbsp; (If you want that ban, you vote with your feet and head for Java/C#/C++/Cobol.)&lt;/p&gt;
&lt;p&gt;What I think Ian Bicking is getting at is that (2) is a bad idea.&amp;nbsp; There's usually more than one way to solve a programming problem, and monkey-patching is rarely absolutely necessary.&amp;nbsp; Like global variables, monkey-patching tends to be annoyingly non-local, and can cause hard-to-predict interactions with some far-off part of the system.&lt;/p&gt;
&lt;p&gt;So yes, keep monkey-patching in your toolbox, but treat it more like a monkey-wrench than like the proverbial hammer: be aware of the trade-offs involved in using it, and keep in mind there are usually alternative approaches.&lt;/p&gt;
&lt;p&gt;(Of course, advice like that isn't going to get anyone many page hits....)&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Can vs. Should</includedComments:title>
				</includedComments:comment>
				<includedComments:comment>
					<includedComments:guid>blogView?showComments=true&amp;printTitle=On_Monkey_Patching&amp;entry=3383764038</includedComments:guid>
					<includedComments:puid>blogView?showComments=true&amp;printTitle=On_Monkey_Patching&amp;entry=3383764038</includedComments:puid>
					<includedComments:author>Eric Larson</includedComments:author>
					<includedComments:pubDate>2008-03-25T20:01:53-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;I see your point regarding forcing communication to fix the problems caused by something like monkey patching. Yet, the problem is when you can't communicate. It can be easy to find the developer who wrote the library, discuss the approaches and find a solution. It can also be extremely difficult to find that library was in conflict, approach the developer with the problem and prove your case is necessary for not only your product/project, but the community as a whole. When you start to consider this in light of low level libraries and not something such as an extension to application layer tool, the abillity to change the API becomes a very dangerous thing. Personally, I agree with Gilad's main point. If you feel the need to monkey patch, then there really is a good chance the design could use some work. After all, it is rare that in a dynamic language such as Smalltalk, Python, Ruby, Javascript, etc., there is not some feature of the language that could help provide a better design along side healthy use of the language features.&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Not the best example</includedComments:title>
				</includedComments:comment>
			</includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/blog/servlet/CommentAPIServlet?guid=3383764038</wfw:comment>
		</item>
		<item>
			<title>Real Tools</title>
			<link>http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;printTitle=Real_Tools&amp;entry=3383579438</link>
			<category>development</category>
			<pubDate>Fri, 21 Mar 2008 19:10:38 EST</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">

<p><a href="http://patricklogan.blogspot.com/2008/03/another-dynamic-tools-topic-are-you.html">Patrick Logan</a> makes a good point: dynamic languages are productive, but they are even more so if you have good tools. Adding class extensions stop being &quot;monkeypatching&quot; if you have tools that support the idea:</p>

<blockquote> People developing large systems in dynamic languages, and people providing dynamic languages being used to build large systems have to also realize this: </blockquote><blockquote>You are no longer working with a &quot;scripting&quot; language. You need to demand and provide really good tools. Examples can be found on the internets, read about the Smalltalk and Lisp environments from way back when. Someday you can become as smug as we are, or maybe as brilliant as the people who made them for us. </blockquote>

<!-- technorati tags start --><p style="text-align:right;font-size:10px;">Technorati Tags: 
<a href="http://www.technorati.com/tag/dynamic languages" rel="tag">dynamic languages</a>, <a href="http://www.technorati.com/tag/smalltalk" rel="tag">smalltalk</a></p><!-- technorati tags end -->
</div>]]></description>
			<guid isPermaLink="false">3383579438</guid>
			<pingback:server>http://www.cincomsmalltalk.com/blog/servlet/CommentAPIPBServlet?guid=3383579438</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/blog/blogView?guid=3383579438</pingback:target>
			<includedComments:comment-collection></includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/blog/servlet/CommentAPIServlet?guid=3383579438</wfw:comment>
		</item>
	</channel>
</rss>
