<?xml version='1.0' encoding='UTF-8' ?>
<rss version="2.0" xml:base="http://www.cincomsmalltalk.com/userblogs/knight/" 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>Cincom Smalltalk Stuff: category: Smalltalk</title>
		<link>http://www.cincomsmalltalk.com/userblogs/knight/blogView</link>
		<description>HREF Considered Harmful</description>
		<webMaster>knight@acm.org</webMaster>
		<lastBuildDate>Fri, 21 Nov 2008 11:18:44 EST</lastBuildDate>
		<image>
			<url>/images/why-small.png</url>
			<title>Cincom Smalltalk Stuff</title>
			<link>http://www.cincomsmalltalk.com/userblogsknight/blogView</link>
			<height>50</height>
			<width>81</width>
		</image>
		<admin:generatorAgent rdf:resource="/CincomSmalltalkWiki/Silt"></admin:generatorAgent>
		<admin:errorReportsTo rdf:resource="mailto:knight@acm.org"></admin:errorReportsTo>
		<dc:language>en-us</dc:language>
		<dc:creator>Alan Knight</dc:creator>
		<dc:rights>Copyright 2005 Alan Knight</dc:rights>
		<dc:date>2008-11-21T11:18:44-05:00</dc:date>
		<icbm:latitude>45.316667</icbm:latitude>
		<icbm:longitude>-75.666667</icbm:longitude>
		<item>
			<title>Commodore 64s, Soccer Playing Robots, and Lots and Lots of Meat </title>
			<link>http://www.cincomsmalltalk.com/userblogs/knight/blogView?showComments=true&amp;printTitle=Commodore_64s,_Soccer_Playing_Robots,_and_Lots_and_Lots_of_Meat_&amp;entry=3404719124</link>
			<category>Smalltalk</category>
			<pubDate>Fri, 21 Nov 2008 11:18:44 EST</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p><div xmlns="http://www.w3.org/1999/xhtml">

<p>I just came back earlier this week from the Smalltalks 2008 conference in Buenos Aires, Argentina. This is just the second year of the conference, and I was very impressed, despite not really understanding very much. Not speaking Spanish is a bit of a handicap when that's the predominant language for the talks. Up here in Canada we don't get Spanish in school - we get French. That's helpful - between French and English, you can guess quite a few Spanish words. But it's not like knowing the language. But what was surprising to me was how much it's possible to get out of a talk where you don't understand either the slides or the talking. Hmmm - now he's making a joke about Microsoft and Web Services... now he's saying this is implemented in Dolphin and too bad that Dolphin's dying... 
<img src="http://www.cincomsmalltalk.com/blog/knight/squeakdbx.jpg" title="The SqueakDBX presentation. Even without knowing Spanish, you get the idea. Mariano Peck, Esteban M. Lorenzano and Germ&#225;n F. Palacios."/></p>

<p>And there were some very interesting talks. The prize winner was a very impressive Commodore 64 emulator by Gabriel Honor&#233. It's technically interesting because it reifies many, many aspects of the underlying hardware (at one point it wasn't working, and it was because he'd forgotten to virtually plug it in - it needed a &quot;powerSupply turnOn&quot;). And it was just really cool to watch the graphics and hear the bleeps and bloops just like a real Commodore 64. I'm told by former C64 owners that when you do a &quot;hardware&quot; reset the screen flickers just the right way you'd expect. And the performance was adequate to run at full speed on a reasonable modern laptop.</p><p>But there were a lot of other interesting talks too. I won't go through them all, but some of the ones I particularly enjoyed included some work on medical expert systems, another experiment in reworking the collection hierarchy to use traits, the SqueakDBX database driver project, an &quot;IDE&quot; written in Dolphin to ease the pain of a huge .NET and Web Services project, SqueakNOS (Squeak running directly on the hardware), and a tutorial on soccer playing robots. This last one deserves a bit more explanation. Apparently this is a fairly organized activity, with actual robot soccer leagues (e.g. <a href="http://www.fira.net/">http://www.fira.net</a> ) Unfortunately, they didn't have real robots here, just simulators. But it was still pretty interesting to watch. </p>
<p><img src="http://www.cincomsmalltalk.com/blog/knight/logo.jpg" title="I loved the conference logo - Knights of the Square Brackets meets Bandoleon (a type of accordion). Here it's shown on the screen during Hern&#225;n Wilkinson's introductory talk"</p>

<p>Unfortunately, this was a real lightning trip for me. I arrived Wednesday morning after an overnight flight, with the conference running Tuesday-Saturday, and then I flew back Sunday night. This didn't leave a lot of time to explore Buenos Aires, but I did get some opportunity to walk around the city and some time talking to people at the conference We had a social evening at a restaurant, served the traditional Argentinian dish of <a href="http://en.wikipedia.org/wiki/Asado">Asado</a> - the short summary of that is lots and lots of barbequed meat. The following evening I had dinner (Asado) with the group doing the SqueakDBX project, talking about how to make Glorp use that driver cleanly without interfering with the other, incompatible drivers in Squeak. And on Sunday, the organizers took a few of us out to Tigre, by a river delta north of the city, and we rowed out to an island for a barbeque (guess what). So lots and lots of Asado, although a bit different each time. Overall, it was a great trip, and many thanks to everyone involved. I had a wonderful time throughout, and will definitely try to get back to Argentina again, and make a proper stay of it.
<img src="http://www.cincomsmalltalk.com/blog/knight/rowing.jpg? title="(nearest to furthest) James Foster (Gemstone), Victor Koosh and Leandro Caniglia (Caesar Systems) and Andres Valloud (Cincom) taking us to the airport></p></div>
</p>
</div>]]></description>
			<guid isPermaLink="false">3404719124</guid>
			<pingback:server>http://www.cincomsmalltalk.com/userblogs/knight/servlet/CommentAPIPBServlet?guid=3404719124</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/userblogs/knight/blogView?guid=3404719124</pingback:target>
			<includedComments:comment-collection></includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/userblogs/knight/servlet/CommentAPIServlet?guid=3404719124</wfw:comment>
		</item>
		<item>
			<title>Ruby and Smalltalk Idioms</title>
			<link>http://www.cincomsmalltalk.com/userblogs/knight/blogView?showComments=true&amp;printTitle=Ruby_and_Smalltalk_Idioms&amp;entry=3366872588</link>
			<category>Smalltalk</category>
			<pubDate>Mon, 10 Sep 2007 10:23:08 EDT</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p><div xmlns="http://www.w3.org/1999/xhtml">

<p>This is a comment on the <a href = "http://www.cincomsmalltalk.com/blog/blogView?showComments=true&entry=3366525548">"Inconceivable"</a> entry in Jim Robertson's blog, which I tried to post on the weekend, but apparently it was too late, so I'm just posting it here. See also the comment by <a href="http://www.vanderburg.org/">Glenn Vandenburg</a> and the original <a href="http://memeagora.blogspot.com/2007/09/ruby-matters-place-to-put-your-stuff.html">post</a> Jim refers to.</p>
<p>
OK, I think I see more of what you're getting at, and where you see the Smalltalk community doing things differently, although it's always dangerous to generalize about diverse communities.</p>

<p> I think the biggest difference is in the expectations people would have of the source code they're seeing. Smalltalk programmers would generally expect to be able to see the list of instance variables and the methods that access them. If they can't see them, but they exist, they'd find that confusing, and they wouldn't think of the presence of the instance variable and accessor methods to be cluttering up the source code. From your comments, it sounds like Ruby programmers would. Perhaps that's also related to tools, because Smalltalk has tools that help organize the source code. There's also perhaps an encapsulation point that people don't automatically put accessors for all variables.</p>

<p>So in Smalltalk, people wouldn't tend to think of having a method somewhere that declares the existence of a number of instance variable that are related in some way and also two accessors for each. They'd expect to see those things, and would probably prefer to do something like annotate the class definition, or the accessor methods, to distinguish those things that are to-many relationships.</p>

<p>In fact, when you talked about generating code, I assumed you were talking about more complicated methods for managing persistence, and being aware of the fact that the variable is a collection, not just accessor methods.  The more complicated methods are the sort of thing that Smalltalk people would think of as cluttering up code, and would be likely to do by reflective mechanisms of one sort or another.</p>

<p>And, as Avi points out, if we did generate code, we probably wouldn't do it in such a way as to throw away the intention of the original annotation. But again, that's a bit confusing. If all we're talking about is accessors and a variable declaration, then there are no additional semantics to be taken into account in the generated code. All we've said is that there's an instance variable, we just haven't said it in the normal spot. The fact that it's a collection is irrelevant to the accessor methods or the declaration. You do say that you have the accessors doing a bunch of additional very nice stuff, so maybe they do take that into account, but then we start to get into details.</p>

<p>As far as how hasMany works in the Glorp Active Record stuff that I did, it's just an annotation, so the reflective code takes it into account. So, if you put in that annotation, it's expected that you have a variable by that name (the accessors are optional). It doesn't generate it for you. Reading, writing, and querying against the object works via API's that know about that annotation and take it into account, but which don't generate any code (unless you count SQL). One reason I wouldn't want to rely on extra code in getters and setters is just it's more complicated to make them work if people get the collection and modify it directly. Glorp works by just remembering what the object's state was previously and seeing what's changed, regardless of the mechanism. Of course, other people have done things differently in different frameworks.</p>

<p>For the meta-tricks in general, I'd agree that many of the tricks are very similar. The kinds of things that Ruby and Rails do with reflection are exactly the sorts of things Smalltalkers do with them, and the idioms are very recognizeable.</p>

</div></p>
</div>]]></description>
			<guid isPermaLink="false">3366872588</guid>
			<pingback:server>http://www.cincomsmalltalk.com/userblogs/knight/servlet/CommentAPIPBServlet?guid=3366872588</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/userblogs/knight/blogView?guid=3366872588</pingback:target>
			<includedComments:comment-collection></includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/userblogs/knight/servlet/CommentAPIServlet?guid=3366872588</wfw:comment>
		</item>
		<item>
			<title>Scripting Support</title>
			<link>http://www.cincomsmalltalk.com/userblogs/knight/blogView?showComments=true&amp;printTitle=Scripting_Support&amp;entry=3363439175</link>
			<category>Smalltalk</category>
			<pubDate>Wed, 01 Aug 2007 16:39:35 EDT</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> 
<p> One of the things people have talked about a bunch recently is
better support for scripting using Smalltalk. With that in mind,
I'd like to point out a bit of work on helping to do that, in the
suitably named package &quot;Scripting Support&quot; in the public Store.
This includes a number of different things. It's fairly
experimental - we want to see if this is what's actually
needed/useful. So feedback is definitely appreciated. I note that the term &quot;scripting&quot; is somewhat vague. To clarify what we mean, this doesn't
do anything to help you, say,  write entire programs in files without
having to use &quot;chunk&quot; or XML format. Rather it lets you control the
environment from the command line better. 
<p> There are already some ways to run code from the command line in
VisualWorks, e.g. -doit, -evaluate, but they don't entirely do what
you want. So this adds the ability to just run a file from the
command line, e.g.</p> 
<p> vm scripting.im dostuff.st</p> or, if you have command line
arguments, you can do them before the program, and put a -- option
to indicate the program file. The program can also treat the rest
of the line after it as arguments, which will show up in a variable
named &quot;arguments&quot;.</p> 
<P></p>
<p> There's also a &quot;-e&quot; option that just runs its (single-line)
argument as a doit. You can have several of these. This is a lot
like -doit, except that it (and providing a script file) will
automatically quit the image after running, and the environment in
which they run. (If you're curious, I just looked at what Ruby had for command-line arguments, because I had it installed on the laptop at th time) </p> All scripts are run in a ScriptRunner which lets
them run in a workspace-like environment in which all namespaces
are visible by default. Ambiguous names will resolve to using one
of the names and continuing, rather than causing an exception.
Undeclared variables will be declared in the script runner's
namespace. And exceptions will dump a short stack and quit that
particular script, but run other commands if there are any. 
<p></p>
<p>There's also an interactive console, of sorts. So invoking the image with -i will give you a command-prompt, and you can type Smalltalk expressions to be run as scripts. You can even use \ to continue on to the next line. And to get out of it, you just type ObjectMemory quit. Note that one limitation of this that we have to fix is that while it's waiting for input at the prompt, the VM is blocked. This is a problem if you want to do complicated background processing, but is surprisingly not that noticeable for basic use. We think we have a fix for that, but it requires some validation.</p>
<p> The ScriptRunner also provides a couple of convenience methods
for use in scripts. 
<br/>  #include: runs the named script by filing it in 
<br/>  #use: parcelName makes sure that the parcel is loaded. 
<br/>  #print: prints its argument to the output of the script
(normally standard out) 
<p> Finally, this package adds &amp; as a concatention operator.
This is just playing around with possibilities, but a number of the
collection operations in Smalltalk are quite awkward to type out in
scripts. So this tries to do some of the collection building stuff
in more of a Do What I Mean kind of way. So, e.g.</p> 
<br/>  1  &amp; 2 ==&gt; #( 1 2) 
<br/>  #( 1 2 ) &amp; 3 ==&gt; #( 1 2 3) 
<p></p>
<p> and other interesting stuff.</p> </p> </div>]]></description>
			<guid isPermaLink="false">3363439175</guid>
			<pingback:server>http://www.cincomsmalltalk.com/userblogs/knight/servlet/CommentAPIPBServlet?guid=3363439175</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/userblogs/knight/blogView?guid=3363439175</pingback:target>
			<includedComments:comment-collection></includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/userblogs/knight/servlet/CommentAPIServlet?guid=3363439175</wfw:comment>
		</item>
		<item>
			<title>Re-attaching body parts</title>
			<link>http://www.cincomsmalltalk.com/userblogs/knight/blogView?showComments=true&amp;printTitle=Re-attaching_body_parts&amp;entry=3351872123</link>
			<category>Smalltalk</category>
			<pubDate>Tue, 20 Mar 2007 19:35:23 EST</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">

<p>A line that came up recently at a team meeting in Cincinnati - You can still shoot yourself in the foot with Smalltalk, but the cool thing is that after you've done it you can inspect the foot, see what you did, and re-attach it.</p>
</div>]]></description>
			<guid isPermaLink="false">3351872123</guid>
			<pingback:server>http://www.cincomsmalltalk.com/userblogs/knight/servlet/CommentAPIPBServlet?guid=3351872123</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/userblogs/knight/blogView?guid=3351872123</pingback:target>
			<includedComments:comment-collection>
				<includedComments:comment>
					<includedComments:guid>blogView?showComments=true&amp;printTitle=Re-attaching_body_parts&amp;entry=3351872123</includedComments:guid>
					<includedComments:puid>blogView?showComments=true&amp;printTitle=Re-attaching_body_parts&amp;entry=3351872123</includedComments:puid>
					<includedComments:author>
David Buck</includedComments:author>
					<includedComments:pubDate>2007-03-21T05:02:01-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;Comment by 
David Buck&lt;/p&gt;

&lt;p&gt;


&lt;p&gt;So Smalltalk programming isn't so much brain surgery but rather foot surgery.&lt;/p&gt;
&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>
Foot surgery</includedComments:title>
				</includedComments:comment>
			</includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/userblogs/knight/servlet/CommentAPIServlet?guid=3351872123</wfw:comment>
		</item>
		<item>
			<title>Off the the user conference</title>
			<link>http://www.cincomsmalltalk.com/userblogs/knight/blogView?showComments=true&amp;printTitle=Off_the_the_user_conference&amp;entry=3342516532</link>
			<category>Smalltalk</category>
			<pubDate>Sat, 02 Dec 2006 12:48:52 EST</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"><p> I'm off to the Cincom User Conference tomorrow. Should be fun. Now I just hope the weather doesn't turn ugly again and cause flight problems.</p></div>]]></description>
			<guid isPermaLink="false">3342516532</guid>
			<pingback:server>http://www.cincomsmalltalk.com/userblogs/knight/servlet/CommentAPIPBServlet?guid=3342516532</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/userblogs/knight/blogView?guid=3342516532</pingback:target>
			<includedComments:comment-collection></includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/userblogs/knight/servlet/CommentAPIServlet?guid=3342516532</wfw:comment>
		</item>
		<item>
			<title>Patches, overrides, and versions</title>
			<link>http://www.cincomsmalltalk.com/userblogs/knight/blogView?showComments=true&amp;printTitle=Patches,_overrides,_and_versions&amp;entry=3342516436</link>
			<category>Smalltalk</category>
			<pubDate>Sat, 02 Dec 2006 12:47:16 EST</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">

<p>Andres Valloud has an <a href="http://blogten.blogspot.com/2006/11/to-publish-or-not-to-publish-of-love.html">interesting entry </a> about whether to publish system tweaks as overrides or by publishing a new version of the original package. I left the following as a comment there, but I thought I'd put it here as well.</p><p>One of the things I keep meaning to write is something that can easily convert between the two forms. That is, given a published version of something (or even a group of somethings), generate a &quot;patch&quot; package out of the changes, that will contain the added/changed methods as overrides. Similarly, given such a package, take the methods and distribute them into the appropriate packages. There are a couple of possible issues with determining &quot;appropriate&quot;, but I suspect it could easily do a good job for most cases, and require limited manual intervention for the others. One could even annotate the generated patch with version information about the versions of the original package. I think this would make it significantly easier to deal with some of these issues. Now if I could just get around to actually doing it... </p>
</div>]]></description>
			<guid isPermaLink="false">3342516436</guid>
			<pingback:server>http://www.cincomsmalltalk.com/userblogs/knight/servlet/CommentAPIPBServlet?guid=3342516436</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/userblogs/knight/blogView?guid=3342516436</pingback:target>
			<includedComments:comment-collection>
				<includedComments:comment>
					<includedComments:guid>blogView?showComments=true&amp;printTitle=Patches,_overrides,_and_versions&amp;entry=3342516436</includedComments:guid>
					<includedComments:puid>blogView?showComments=true&amp;printTitle=Patches,_overrides,_and_versions&amp;entry=3342516436</includedComments:puid>
					<includedComments:author>Robert</includedComments:author>
					<includedComments:pubDate>2006-12-03T15:56:55-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;Our Belgian friends may have a grad or post-doc student who could look to leverage SOUL and LiCoR which are already in our Store repository ... I have been making notes on a config strategy in this regard 
&lt;/p&gt;&lt;/div&gt;</includedComments:content>
					<includedComments:title>leveraging SOUL and LiCoR for Store override logic</includedComments:title>
				</includedComments:comment>
			</includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/userblogs/knight/servlet/CommentAPIServlet?guid=3342516436</wfw:comment>
		</item>
		<item>
			<title>Functional languages discover class extensions</title>
			<link>http://www.cincomsmalltalk.com/userblogs/knight/blogView?showComments=true&amp;printTitle=Functional_languages_discover_class_extensions&amp;entry=3324391555</link>
			<category>Smalltalk</category>
			<pubDate>Sat, 06 May 2006 18:05:55 EDT</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">

<p>Lambda the ultimate <a href="http://lambda-the-ultimate.org/node/1453">points out a paper</a> describing what sounds an awful lot like class extensions for Haskell.</p>
</div>]]></description>
			<guid isPermaLink="false">3324391555</guid>
			<pingback:server>http://www.cincomsmalltalk.com/userblogs/knight/servlet/CommentAPIPBServlet?guid=3324391555</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/userblogs/knight/blogView?guid=3324391555</pingback:target>
			<includedComments:comment-collection></includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/userblogs/knight/servlet/CommentAPIServlet?guid=3324391555</wfw:comment>
		</item>
		<item>
			<title>Smalltalk Solutions 2006</title>
			<link>http://www.cincomsmalltalk.com/userblogs/knight/blogView?showComments=true&amp;printTitle=Smalltalk_Solutions_2006&amp;entry=3323947834</link>
			<category>Smalltalk</category>
			<pubDate>Mon, 01 May 2006 14:50:34 EDT</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">

<p>Well, Smalltalk Solutions 2006 is over, and I've nearly recovered. Many thanks to all those who participated and helped make the conference a success. This was the first year that we were combined with a larger conference, the Linux World/Network World show, and while there were some growing pains, on the whole I think it was very positive. We had a lot of great talks, great social interaction, and people working the booths got to explain what exactly this &quot;Smalltalk&quot; thing was to an awful lot of people. I'm looking forward to next year's show, and everyone else should too. If you start thinking about what you're going to present now, you're more likely to have it ready when the time comes :-)</p>
</div>]]></description>
			<guid isPermaLink="false">3323947834</guid>
			<pingback:server>http://www.cincomsmalltalk.com/userblogs/knight/servlet/CommentAPIPBServlet?guid=3323947834</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/userblogs/knight/blogView?guid=3323947834</pingback:target>
			<includedComments:comment-collection></includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/userblogs/knight/servlet/CommentAPIServlet?guid=3323947834</wfw:comment>
		</item>
	</channel>
</rss>

