<?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: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</title>
		<link>http://www.cincomsmalltalk.com/userblogs/knight/blogView</link>
		<description>HREF Considered Harmful</description>
		<webMaster>knight@acm.org</webMaster>
		<lastBuildDate>Sat, 22 Dec 2007 04:07:56 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>2007-12-22T04:07:56-05:00</dc:date>
		<icbm:latitude>45.316667</icbm:latitude>
		<icbm:longitude>-75.666667</icbm:longitude>
		<item>
			<title></title>
			<link>http://www.cincomsmalltalk.com/userblogs/knight/blogView?showComments=true&amp;printTitle=&amp;entry=3361533965</link>
			<category>Glorp</category>
			<pubDate>Tue, 10 Jul 2007 15:26:05 EDT</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml"> I feel sure somehow that
I had written about some of the moderately recent changes in Glorp,
but someone asked me about it, and I can't seem to find anything.
So here's a very high level description of the possibly interesting
changes from 0.3.138 to the present, in no particular order. 
<ul> 
<li> Support for proxy actions. You can give a proxy a block that it
will execute when it's instantiated.</li> 
<li> Some APIs are simplified. For example, read: instead of
returningManyOf:. Or you no longer need to implement
constructAllClasses, it'll figure out from the descriptor methods
if they're there.</li> 
<li> GlorpActiveRecord - the ability to have automatic mappings for things that are relatively simple, and to gracefully scale up when they get more complicated. I talked about this in my user conference <a href="http://www.cincomsmalltalk.com/presentations/userConf06/Cincom_Knight_Glorp.pdf">presentation,</a> and the code is in the public repository.</li> 
<li> The ability to have expressions in mappings. This means that
you could make a direct mapping that didn't go to a field, but to a
function of a field. Or to a subselect. Such mappings would likely
have to be read-only, but this is still very valuable.</li> 
<li> Support for a variety of trickier mappings in general,
including a number of improvements for situations when the primary
keys aren't themselves mapped, but are used as part of a
relationship mapping.</li> 
<li> Better support for generated values of different types,
generalizing from just generated primary keys or optimistic locking
versions to allowing things like timestamps for last modification
and more complex generated values.</li> 
<li> Support for reading database metdata using INFORMATION SCHEMA.
This lets us avoid putting in the tables ourselves for the
GlorpActiveRecord above. Currently works only for Oracle and
Postgresql, though it should be fairly easy to adapt. Done in a
nicely recursive way. We have descriptors that map from Glorp's
objects to the INFORMATION SCHEMA tables.</li> 
<li> Glorp now properly handles the case where you delete and
re-insert the same object in the same unit of work.</li> 
<li> Added the ability to have exclusive relationships. These will
delete the target of the relationship when the source is deleted or
the reference to the target goes away.</li> 
<li> Added some tools (in the GlorpAnalysis package) for performance
analysis, keeping track of which sorts of queries were executed,
and how long they took.</li> 
<li> A lot of improvements to the dictionary mapping. It still
doesn't do everything desirable, but, and here is the essential
point, it is better than it was.</li> 
<li> A DirectToManyMapping for collections of simple types.</li> 
<li> A variety of additional functions and things you can do in expressions. This includes the ability to use includes:, <a href="http://www.cincomsmalltalk.com/userblogs/knight/blogView?showComments=true&amp;entry=3302868813">select:</a>, intersect:, count:where:, copyFrom:to: to generate substring expressions,.</li> 
<li> The ability to specify an encoding and have it used for
reading/writing string data.</li> 
<li> Efficient queries for horizontal inheritance, reading all of the subclasses in one (really messy) query. See <a href="http://www.cincomsmalltalk.com/userblogs/knight/blogView?showComments=true&amp;entry=3352557676">here</a></li> 
<li> Basic support for <a href="http://www.cincomsmalltalk.com/userblogs/knight/blogView?showComments=true&amp;entry=3351919422">groupBy:</a> </li> 
<li> A lot of fixups related to types, validation and better error
messages, generation of values, performance, and others, too small
to mention.</li> 
</ul> </div>]]></description>
			<guid isPermaLink="false">3361533965</guid>
			<pingback:server>http://www.cincomsmalltalk.com/userblogs/knight/servlet/CommentAPIPBServlet?guid=3361533965</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/userblogs/knight/blogView?guid=3361533965</pingback:target>
			<includedComments:comment-collection>
				<includedComments:comment>
					<includedComments:guid>blogView?showComments=true&amp;printTitle=&amp;entry=3361533965</includedComments:guid>
					<includedComments:puid>blogView?showComments=true&amp;printTitle=&amp;entry=3361533965</includedComments:puid>
					<includedComments:author>Sherrie Foley</includedComments:author>
					<includedComments:pubDate>2007-12-22T04:07:56-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;knitwear exploratory nonperson interannular benumbed pneumatotactic commemorativeness awesomely
&lt;a href= http://www.airportcarcentre.co.uk/ &gt;Airport Car Centre&lt;/a&gt;
 http://www.jasons.co.nz/1853,NZL,NI,AUCKLAND,PAKIRI,ACCOM,1,00046450:F8B9B5CE646EC9DF78763553C49320E9.mel#scroll_00046450:F8B9B5CE646EC9DF78763553C49320E9 

&lt;/p&gt;&lt;/div&gt;</includedComments:content>
					<includedComments:title>Robbie Hayden</includedComments:title>
				</includedComments:comment>
			</includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/userblogs/knight/servlet/CommentAPIServlet?guid=3361533965</wfw:comment>
		</item>
		<item>
			<title>Reads for Horizontal Inheritance</title>
			<link>http://www.cincomsmalltalk.com/userblogs/knight/blogView?showComments=true&amp;printTitle=Reads_for_Horizontal_Inheritance&amp;entry=3352557676</link>
			<category>Glorp</category>
			<pubDate>Wed, 28 Mar 2007 18:01:16 EST</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">

<p>One of the things that I've been background working on for a while is improvements to horizontal inheritance. OK, mostly that's because a couple of people have been pestering me about it until I did something just to make them stop &lt;grin&gt;. The old mechanism is that if you used horizontal inheritance, and wanted to do a query on the superclass, you'd end up doing a separate query for each subclass. That's not particularly efficient, but the question is, how to do it better? </p><p>What I came up with is essentially UNIONing all those separate queries together. But you can't just union them, because they're bringing back different data (if they weren't, there'd be no point not just putting them all in the same table). So what you end up doing is making a query that has columns for every column the result can contain, knows how to build the appropriate object of each subclass type using some subset of those columns, and has nulls for the ones it doesn't want. That probably works better with an example </p><p>(SELECT t1.ID, t1.NAME, NULL, NULL FROM t1 TABLE1) UNION ALL (SELECT NULL, NULL, t2.FOO, t2.BAR FROM t2 TABLE2). </p><p>Of course it's more complicated because on some databases you'll actually have to write (CAST NULL AS theTypeForThisColumn) instead of just NULL. This seems to work pretty well. There are a number of other complications as well, and I had to create a special class VariableJoin that knows it's one of several different joins, depending on the circumstances. And relationships are interesting. But so far it's working significantly better than before, and people have (mostly) stopped bugging me about it...</p>
</div>]]></description>
			<guid isPermaLink="false">3352557676</guid>
			<pingback:server>http://www.cincomsmalltalk.com/userblogs/knight/servlet/CommentAPIPBServlet?guid=3352557676</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/userblogs/knight/blogView?guid=3352557676</pingback:target>
			<includedComments:comment-collection></includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/userblogs/knight/servlet/CommentAPIServlet?guid=3352557676</wfw:comment>
		</item>
		<item>
			<title>Minimal "group by" support</title>
			<link>http://www.cincomsmalltalk.com/userblogs/knight/blogView?showComments=true&amp;printTitle=Minimal_group_by_support&amp;entry=3351919422</link>
			<category>Glorp</category>
			<pubDate>Wed, 21 Mar 2007 08:43:42 EST</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">

<p>One of the things I've resisted doing in Glorp is support for &quot;group by&quot; clauses. Partly out of laziness, but partly from wanting to get the concepts clear in my head for how that works with object-level expressions. It hasn't come clear yet, but the issue has come up often enough that I decided maybe I better just do a basic version without it making sense. Maarten Mostert was asking in the Glorp list about how to do a query that retrieves customers by some criteria along with a count of their transactions, and that's exactly the sort of thing you want groupBy for.</p>
<p>So, because it's first thing in the morning and I haven't gotten intimidated by my to-do list yet, I did up a completely minimal version of support for it. The API is, using the Store schema as an example</p><pre>q := Query read: StoreBundle where: [:each |
   (each name asUppercase like: 'G%')].
q retrieve: [:each | each primaryKey].
q retrieve: [:each | each packages countStar].
q groupBy: [:each | each primaryKey]. 
session execute: q.
 </pre><p>So what this will do is read back, for all the bundles in the Store database whose name starts with the letter &quot;g&quot;, the primary key of the bundle and the number of packages it contains. Note that there are lots of limitations on what you can retrieve in conjunction with the aggregate count. For example, you can't retrieve the actual bundle objects, because SQL doesn't want to bring back anything in conjunction with the aggregate except things that the aggregate is grouped by. Also, you have to group by something that maps to a field, so you have to specify the primaryKey field, not just the object. There is only one level of groupBy supported. But it enables a bunch of useful queries. This is in the 0.4.121 version of Glorp published in the <a href="http://www.cincomsmalltalk.com/CincomSmalltalkWiki/PostgreSQL+Access+Page">public store repository</a>.</p></div>]]></description>
			<guid isPermaLink="false">3351919422</guid>
			<pingback:server>http://www.cincomsmalltalk.com/userblogs/knight/servlet/CommentAPIPBServlet?guid=3351919422</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/userblogs/knight/blogView?guid=3351919422</pingback:target>
			<includedComments:comment-collection>
				<includedComments:comment>
					<includedComments:guid>blogView?showComments=true&amp;printTitle=Minimal_group_by_support&amp;entry=3351919422</includedComments:guid>
					<includedComments:puid>blogView?showComments=true&amp;printTitle=Minimal_group_by_support&amp;entry=3351919422</includedComments:puid>
					<includedComments:author>Robert Brewer</includedComments:author>
					<includedComments:pubDate>2007-03-21T14:01:06-05:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;Oddly enough, I&amp;#39;m hip-deep in adding &amp;quot;GROUP BY&amp;quot; support to Dejavu/&lt;a href="http://projects.amor.org/geniusql/timeline"&gt;Geniusql&lt;/a&gt;, which you can think of as the Python version of GLORP (in the sense that queries are mostly native lang, not SQL). The new groupby support isn&amp;#39;t beautiful yet, but it&amp;#39;s getting there.&lt;br /&gt; &lt;/p&gt;&lt;p&gt;One of the decisions I just made was to implicitly determine the contents of the GROUP BY clause as opposed to having the user repeat themselves (by specifying the same columns in the &amp;#39;retrieve&amp;#39; expression and the &amp;#39;groupBy&amp;#39; expression). Most RDBMS&amp;#39;s enforce this policy already. The query automatically adds the GROUP BY clause when you include one of the aggregate functions in the expression for the field list.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Another idea I&amp;#39;m working on is using implicit builtins for aggregate (and other) functions, so the user doesn&amp;#39;t have to type &amp;quot;geniusql.logicfuncs.count&amp;quot; but can instead just write &amp;quot;count&amp;quot;.&lt;/p&gt;&lt;p&gt;Good luck with your effort!&lt;br /&gt;&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Trying to simplify group by</includedComments:title>
				</includedComments:comment>
			</includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/userblogs/knight/servlet/CommentAPIServlet?guid=3351919422</wfw:comment>
		</item>
		<item>
			<title>Glorp in the blogosphere</title>
			<link>http://www.cincomsmalltalk.com/userblogs/knight/blogView?showComments=true&amp;printTitle=Glorp_in_the_blogosphere&amp;entry=3346651382</link>
			<category>Glorp</category>
			<pubDate>Fri, 19 Jan 2007 09:23:02 EST</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">

<p>A couple of nicely complimentary posts about Glorp from Todd Blanchard's blog. <a href="http://www.blackbagops.net/?p=94">Here</a> and <a href="http://www.blackbagops.net/?p=93">here.</a></p>
<p>Also some very cool stuff from Ramon Leon on <a href="http://onsmalltalk.com/programming/smalltalk/seaside/making-a-connection-pool-for-glorp-in-seaside/">connection pooling</a>, and <a href="http://onsmalltalk.com/programming/smalltalk/a-smalltalk-activerecord-using-magritte-seaside-and-glorp/">using Magritte to provide the metadata for the class models and to generate the schema</a></p></div>]]></description>
			<guid isPermaLink="false">3346651382</guid>
			<pingback:server>http://www.cincomsmalltalk.com/userblogs/knight/servlet/CommentAPIPBServlet?guid=3346651382</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/userblogs/knight/blogView?guid=3346651382</pingback:target>
			<includedComments:comment-collection></includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/userblogs/knight/servlet/CommentAPIServlet?guid=3346651382</wfw:comment>
		</item>
		<item>
			<title>Glorp Wikis</title>
			<link>http://www.cincomsmalltalk.com/userblogs/knight/blogView?showComments=true&amp;printTitle=Glorp_Wikis&amp;entry=3343456803</link>
			<category>Glorp</category>
			<pubDate>Wed, 13 Dec 2006 10:00:03 EST</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">

<p>Marco Qualizza has graciously done the legwork and set up a wiki for Glorp on the sourceforge site, using their built-in facilities (which is why it's in PHP, not Smalltalk :-). The main <a href="http://glorp.sourceforge.net">Sourceforge page</a> now points to that.</p>
<p>In addition, Martin Laubach has started a Wiki for Glorp documentation at <a href="http://www2.laubach.at/kwiki/">http://www2.laubach.at/kwiki/</a></p><p>Many thanks to both of them.</p></div>]]></description>
			<guid isPermaLink="false">3343456803</guid>
			<pingback:server>http://www.cincomsmalltalk.com/userblogs/knight/servlet/CommentAPIPBServlet?guid=3343456803</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/userblogs/knight/blogView?guid=3343456803</pingback:target>
			<includedComments:comment-collection></includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/userblogs/knight/servlet/CommentAPIServlet?guid=3343456803</wfw:comment>
		</item>
		<item>
			<title>Cincom User Conference Talk on Glorp</title>
			<link>http://www.cincomsmalltalk.com/userblogs/knight/blogView?showComments=true&amp;printTitle=Cincom_User_Conference_Talk_on_Glorp&amp;entry=3341743263</link>
			<category>Glorp</category>
			<pubDate>Thu, 23 Nov 2006 14:01:03 EST</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">

<p>And as long as I'm actually blogging, I'll mention an item of Glorp news, that on December 6th, at 4:00 pm, I'll be speaking at the <a href="http://www.cincomsmalltalk.com/userblogs/cincom/blogView?content=userconference">Cincom Smalltalk User Conference</a> in Frankfurt Germany, on &quot;Advanced Object-Relational Mapping with Glorp&quot;. Here's the abstract:</p>
<blockquote>Glorp is an open-source library for mapping Smalltalk objects to and from relational databases. It includes a number of powerful features. This talk will give a brief overview of Glorp's architecture and then explore some of these advanced features. Topics will include the use of functions and subselects in queries and in mappings, mappings to collections of simple types and to dictionaries, query optimizations, dynamically reading and manipulating database schema and descriptor information, and mapping to schemas that are not well-matched to the object model.</blockquote><p>I've been playing around with doing an ActiveRecord-like persistence mechanism using Glorp. What I mean by that is using convention-based mechanisms to automatically create descriptors and mappings when the classes and tables match up nicely. At the same time, I'd like to be able to gracefully move towards more complex mappings. That is, if you start having more complex mappings, you shouldn't have to abandon the automatic piece, but should be able to specify only the parts that can't be built automatically. A lot of the talk will be about that, and the technical underpinnings of that, including the GlorpMetadataDescriptorSystem for reading schema from the database. What I've done so far is published in GlorpActiveRecord and GlorpActiveRecordTest packages in the public Store</p><p>I'll also be doing a talk on Upcoming Store Developments.</p><p>Hope to see you there!</p></div>]]></description>
			<guid isPermaLink="false">3341743263</guid>
			<pingback:server>http://www.cincomsmalltalk.com/userblogs/knight/servlet/CommentAPIPBServlet?guid=3341743263</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/userblogs/knight/blogView?guid=3341743263</pingback:target>
			<includedComments:comment-collection></includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/userblogs/knight/servlet/CommentAPIServlet?guid=3341743263</wfw:comment>
		</item>
		<item>
			<title>select:</title>
			<link>http://www.cincomsmalltalk.com/userblogs/knight/blogView?showComments=true&amp;printTitle=select:&amp;entry=3302868813</link>
			<category>Glorp</category>
			<pubDate>Tue, 30 Aug 2005 15:33:33 EDT</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p><p><p>I recently added an interesting new capability for doing subselects. A user was trying to do some 
reasonably complicated subselects. The general syntax for subselects is to use a query object. So
 </p></p><pre>  ...where: [:each | each something in: aQuery]</pre></p><p>This is very general, but can be quite verbose to write out. Also, it does have limitations. Consider the
case of a library application where we want to find all the borrowers who have at least 3 overdue books. We could write something like
<pre>  ...where: [:each | 
      q := Query count: Book where: [:book | 
         book borrower = each AND: (book dueDate &lt; Date today)].
      (each getConstant: 3) &lt;= q].
</pre></p><p>
Aside: The getConstant: there is one limitation, because of the way expressions are built. They're expected to be based
on the block argument, because that's how we build up the tree. So if we had 3=q, or q=3, neither side is actually 
based on the argument, so we need a way to introduce it.</p>

<p><p>But the big limitation there is that we have to ask the book who its borrower is. That does a join that we might
otherwise be able to avoid, and it does it across a relationship that might not exist. Do books really 
need to know who their borrowers are?</p>

</p>
<p><p>There are a number of places in Glorp where we construct these kind of backwards relationships automatically,
even if they don't exist in the model. For example, in filtered reads. So we can apply the same trick here. 
The obvious syntax to use is the Smalltalk-like select:. So,
</p><pre>
   ...where: [:each |
      (each books select: [:book |
          book dueDate &lt; Date today]) sqlCount &gt;= 3].
</pre></p><p>
It's shorter, it's more expressive, it's more like the normal Smalltalk, and it avoids the annoying getConstant:.
I'm even considering whether I might be able to replace #sqlCount with the more natural #size, but I'm a 
little bit worried about pathological polymorphism with the system method size, which is used quite pervasively.</p>
<p>By the way, the SQL that it generates will be of the form</p>
<pre>SELECT ...
 FROM Borrower t1
 WHERE ((SELECT  COUNT(*)
 FROM Book s1t1, Borrower s1t2, Book_Borrower_Link s1t3
 WHERE ((s1t2.primaryKey = t1.primaryKey) AND
    ((s1t3.borrower_id = s1t2.primaryKey) AND 
       dueDate &lt; (someDateValue)) AND 
          (s1t1.primaryKey = s1t3.Book_id))))) &gt;= 3)
</pre>
</div>]]></description>
			<guid isPermaLink="false">3302868813</guid>
			<pingback:server>http://www.cincomsmalltalk.com/userblogs/knight/servlet/CommentAPIPBServlet?guid=3302868813</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/userblogs/knight/blogView?guid=3302868813</pingback:target>
			<includedComments:comment-collection></includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/userblogs/knight/servlet/CommentAPIServlet?guid=3302868813</wfw:comment>
		</item>
		<item>
			<title>Re: The Lost Tribes of Smalltalk</title>
			<link>http://www.cincomsmalltalk.com/userblogs/knight/blogView?showComments=true&amp;printTitle=Re:_The_Lost_Tribes_of_Smalltalk&amp;entry=3302867364</link>
			<category>Glorp</category>
			<pubDate>Tue, 30 Aug 2005 15:09:24 EDT</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p><p>Bruce Badger talks about <a href=" http://www.cincomsmalltalk.com/userblogs/badger/blogView?showComments=true&entry=3302458634">finding Smalltalkers </a>, and I like the idea of using OpenSkills for that.

</p>


<p>It also made me think about the issue of skills. Perhaps it would be helpful to focus on generalized skills than on the narrower issue of technologies.
Smalltalkers tend to have been around a while - a lot of them learned Smalltalk during its peak period of use in the
early to mid 90's. As such, they tend to be at a more advanced point in their careers, commanding 
higher salaries. Employers are often looking for younger (i.e. cheaper) developers, and there are comparatively
fewer of those.

</p>


<p>But there are lots of developers out there nowadays who have used dynamic languages, and experience with any dynamic language is probably a
close second to actual Smalltalk experience. The hard part to learning Smalltalk is not the language
syntax or the specific class libraries, but the common patterns, ways of working and the aesthetics. Other dynamic languages have many of these things in common with Smalltalk, and many developers,  particularly younger ones have experience with dynamic languages like Ruby and Python. They aren't quite the same as Smalltalk, but there are enough similarities that I would expect
a Ruby developer to pick up Smalltalk much more quickly than, say, a VB or Java developer who has not
been exposed to dynamic languages. LISP users, of course, are easy.

</p>


<p>So if you're someone looking for Smalltalk developers, consider broadening the search to those with related experience.

</p>


<p>Unfortunately, I'm afraid that the fatal flaw in this may be HR departments, with their tendency to require 
5 years experience with exactly the technology in question (even if the technology in question has only
existed for 18 months). The idea of looking for people with related skills might be beyond them.
</p></p>
</div>]]></description>
			<guid isPermaLink="false">3302867364</guid>
			<pingback:server>http://www.cincomsmalltalk.com/userblogs/knight/servlet/CommentAPIPBServlet?guid=3302867364</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/userblogs/knight/blogView?guid=3302867364</pingback:target>
			<includedComments:comment-collection></includedComments:comment-collection>
			<wfw:comment>http://www.cincomsmalltalk.com/userblogs/knight/servlet/CommentAPIServlet?guid=3302867364</wfw:comment>
		</item>
	</channel>
</rss>

