<?xml version="1.0" encoding="UTF-8"?>







<rss version="2.0">
<channel>
  <title>JavaRanch Radio</title>
  <link>http://radio.javaranch.com/</link>
  <description>Channels from the JavaRanch Staff</description>
  <language>en</language>
  <copyright>Various</copyright>
  <lastBuildDate>Fri, 04 Jul 2008 05:57:05 GMT</lastBuildDate>
  <generator>Pebble</generator>
  <docs>http://backend.userland.com/rss</docs>
  <image>
    <url>http://pebble.sourceforge.net/common/images/powered-by-pebble.gif</url>
    <title>JavaRanch Radio</title>
    <link>http://radio.javaranch.com/</link>
  </image>
  
  <item>
    <title>New forums for Groovy and Scala</title>
    <link>http://radio.javaranch.com/news/2008/07/03/1215151025188.html</link>
    
      
        <description>
          &lt;p&gt;
Recognizing the interest in alternative languages for the Java VM, we&#039;ve started a new discussion section for Other Languages. For starters, it contains the following forums:
&lt;/p&gt;&lt;p&gt;
&lt;a href=&#034;http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=forum&amp;f=60&#034;&gt;Other Languages&lt;/a&gt; (this is the old &#034;Object Oriented Scripting&#034; forum with a new name)
&lt;/p&gt;&lt;p&gt;
&lt;a href=&#034;http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=forum&amp;f=90&#034;&gt;Groovy&lt;/a&gt;
&lt;/p&gt;&lt;p&gt;
&lt;a href=&#034;http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=forum&amp;f=91&#034;&gt;Scala&lt;/a&gt;
&lt;/p&gt;&lt;p&gt;
Obviously we&#039;re interested in people using these to discuss their favorite languages (or in asking questions so that they have a chance to make these their favorite languages), so you can help us in spreading the word about them.
&lt;/p&gt;&lt;p&gt;
We&#039;re also open to suggestions for other languages, if people feel that there&#039;s no good place to discuss them in a friendly setting. JRuby? Jython? Heck, &lt;a href=&#034;http://www.is-research.de/info/vmlanguages/&#034;&gt;there are so many&lt;/a&gt; that we may not even have heard about them.
&lt;/p&gt;&lt;p&gt;
We welcome your feedback in &lt;a href=&#034;http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&amp;f=10&amp;t=003157&#034;&gt;this discussion&lt;/a&gt;.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>Big Moose Saloon</category>
    
    <comments>http://radio.javaranch.com/news/2008/07/03/1215151025188.html#comments</comments>
    <guid isPermaLink="true">http://radio.javaranch.com/news/2008/07/03/1215151025188.html</guid>
    <pubDate>Fri, 04 Jul 2008 05:57:05 GMT</pubDate>
  </item>
  
  <item>
    <title>Keep a Sense of Wonder!</title>
    <link>http://radio.javaranch.com/ilja/2008/06/26/1214506993463.html</link>
    
      
      
        <description>
          &lt;p&gt;
I&#039;m currently reading the book &#034;The 9 Disciplines of a Facilitator&#034;, which I find to be highly insightful. It discusses nine complementary ways of building self-mastery for facilitative leaders.
&lt;/p&gt;
&lt;p&gt;
One of those ways the authors call &#034;Sense of Wonder&#034;. It is about appreciating the unknown, about deciding that it&#039;s worth for the learning experience alone, and - in my understanding - about expecting to be surprised. That principle rang true for me from the first time I read about it. I still had some trouble really connecting to it, though - until recently...&lt;/p&gt;
          &lt;p&gt;&lt;a href="http://radio.javaranch.com/ilja/2008/06/26/1214506993463.html"&gt;Read more...&lt;/a&gt;&lt;/p&gt;
        </description>
      
    
    
    
    <comments>http://radio.javaranch.com/ilja/2008/06/26/1214506993463.html#comments</comments>
    <guid isPermaLink="true">http://radio.javaranch.com/ilja/2008/06/26/1214506993463.html</guid>
    <pubDate>Thu, 26 Jun 2008 19:03:13 GMT</pubDate>
  </item>
  
  <item>
    <title>Unemployed sheriff is moving out of town </title>
    <link>http://radio.javaranch.com/map/2008/06/25/1214431936918.html</link>
    
      
      
        <description>
          &lt;p&gt;June 23 I left JavaRanch, following Jim Yingst and Max Habibi. The place has changed, and I can&#039;t justify my presence there any more. &lt;/p&gt;

&lt;p&gt;I need to move this blog, so I am looking for what software/hosting is available. If you have any suggestions, please comment here or drop me a line at mapraputa and then usual gmail stuff. :)&lt;/p&gt;
          &lt;p&gt;&lt;a href="http://radio.javaranch.com/map/2008/06/25/1214431936918.html"&gt;Read more...&lt;/a&gt;&lt;/p&gt;
        </description>
      
    
    
    
    <category>Life</category>
    
    <comments>http://radio.javaranch.com/map/2008/06/25/1214431936918.html#comments</comments>
    <guid isPermaLink="true">http://radio.javaranch.com/map/2008/06/25/1214431936918.html</guid>
    <pubDate>Wed, 25 Jun 2008 22:12:16 GMT</pubDate>
  </item>
  
  <item>
    <title>Fix &#034;version `GCC_4.2.0&#039; not found&#034; for VMware 1.0.6 SErver and Ubuntu</title>
    <link>http://radio.javaranch.com/davo/2008/06/18/1213791596327.html</link>
    
      
        <description>
          &lt;p&gt;
Not sure if this will be useful, but I&#039;ll throw it out there for prosperity...
&lt;/p&gt;
&lt;p&gt;After updating to VMware Server 1.0.6, I was getting the following why trying to start vmware:&lt;/p&gt;
&lt;pre&gt;
david@david-ubuntu:/usr/local/lib$ vmware
/usr/lib/vmware/bin/vmware: /usr/lib/vmware/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_3.4&#039; not found (required by /usr/lib/libcairo.so.2)
/usr/lib/vmware/bin/vmware: /usr/lib/vmware/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_4.2.0&#039; not found (required by /usr/lib/libstdc++.so.6)
/usr/lib/vmware/bin/vmware: /usr/lib/vmware/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_3.4&#039; not found (required by /usr/lib/libcairo.so.2)
/usr/lib/vmware/bin/vmware: /usr/lib/vmware/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_4.2.0&#039; not found (required by /usr/lib/libstdc++.so.6)
/usr/lib/vmware/bin/vmware: /usr/lib/vmware/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_3.4&#039; not found (required by /usr/lib/libcairo.so.2)
/usr/lib/vmware/bin/vmware: /usr/lib/vmware/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_4.2.0&#039; not found (required by /usr/lib/libstdc++.so.6)
&lt;/pre&gt;
&lt;p&gt;I didn&#039;t find an exact match on the net, but similar hits recommended moving the offending library out of the way:&lt;/p&gt;
&lt;pre&gt;
david@david-ubuntu:~$ cd /usr/lib/vmware/lib
david@david-ubuntu:/usr/lib/vmware/lib$ sudo mkdir bak
david@david-ubuntu:/usr/lib/vmware/lib$ sudo mv libgcc_s.so.1/libgcc_s.so.1 bak/
&lt;/pre&gt;
&lt;p&gt;... and now I&#039;m back :)&lt;/p&gt;
        </description>
      
      
    
    
    
    <comments>http://radio.javaranch.com/davo/2008/06/18/1213791596327.html#comments</comments>
    <guid isPermaLink="true">http://radio.javaranch.com/davo/2008/06/18/1213791596327.html</guid>
    <pubDate>Wed, 18 Jun 2008 12:19:56 GMT</pubDate>
  </item>
  
  <item>
    <title>Ways to split user stories</title>
    <link>http://radio.javaranch.com/lasse/2008/06/13/1213375107328.html</link>
    
      
        <description>
          &lt;style&gt;
.userstory { margin-top: 10px; margin-bottom: 10px; margin-left: 40px; margin-right: 60px; padding: 10px 10px 10px 10px; border: 1pt solid black; background: #dddddd; }
&lt;/style&gt;
&lt;p&gt;
I&#039;m sitting in the hallway in Limerick, Ireland, attending the XP2008 conference, downloading something from the company server to my laptop, eavesdropping on an &lt;a href=&#034;http://www.flickr.com/photos/angel_medinilla/2573927204/&#034;&gt;open space session&lt;/a&gt; hosted by &lt;a href=&#034;http://jbrains.ca/&#034;&gt;J.B.&lt;/a&gt;. He&#039;s talking about user stories and roughly 4 minutes ago he mentioned he&#039;s got a &lt;a href=&#034;http://jbrains.ca/permalink/5&#034;&gt;blog post&lt;/a&gt; up on his website that shows an example of four ways to split a story.
&lt;/p&gt;
&lt;p&gt;
&lt;span style=&#034;text-decoration:line-through;&#034;&gt;Since I&#039;m so &lt;i&gt;Web 2.0&lt;/i&gt;, I&#039;m blogging about this while they&#039;re having their open space session two meters from where I&#039;m sitting.&lt;/span&gt; I tried to be Web 2.0 and blog this while they were running their open space session but I&#039;m so darn slow and old school that it took me 2 days to get this written! Hardly enough to blog about it as it happens. I should&#039;ve recorded a podcast, I guess.
&lt;/p&gt;
&lt;p&gt;
I digress.
&lt;/p&gt;
&lt;p&gt;
I&#039;ll first reproduce Joe&#039;s list of four ways to split:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;splitting stories along process lines&lt;/li&gt;
&lt;li&gt;splitting stories along architectural lines&lt;/li&gt;
&lt;li&gt;splitting stories along procedural lines&lt;/li&gt;
&lt;li&gt;splitting stories into smaller stories&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
What Joe is saying in his blog post (among other things) is that teams often progress through this list, starting from the worse way to split down stories and (hopefully) ending up with splitting stories smaller so that they&#039;re still &#034;self-contained increments of value.&#034;
&lt;/p&gt;
&lt;p&gt;
Great. I&#039;ve seen this pattern.
&lt;/p&gt;
&lt;p&gt;
Now, having seen this pattern and having found that people find it difficult to split in any other way than what they&#039;ve done so far unless they can look at examples. And now I thought I should share what I teach about splitting user stories.
&lt;/p&gt;
&lt;p&gt;
Let&#039;s start with &lt;i&gt;my&lt;/i&gt; list of ways to split user stories (not in any specific order):
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;by implementation (Joe&#039;s first two bullets)&lt;/li&gt;
&lt;li&gt;by quality&lt;/li&gt;
&lt;li&gt;by data/details&lt;/li&gt;
&lt;li&gt;by operations (CRUD)&lt;/li&gt;
&lt;li&gt;by major effort&lt;/li&gt;
&lt;li&gt;by role&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Let me explain what I mean by these, along with an example of each.
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Splitting by implementation&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;
First of all, this should be your last option. It&#039;s very intuitive for an engineer but you should only do this if you honestly can&#039;t think of another way to split it down. Only then you should consider looking at the technical tasks you need to carry out in order to make the original story come to life in the software or split along the lines of architectural boundaries, components, or another technical boundary.
&lt;/p&gt;
&lt;p&gt;Once you&#039;re done splitting it down like this, you call your mother to apologize, check Google Maps for the shortest route to a nearby Catholic church for a confession during the lunch hour, and pick up a new brush from Walmart on your way home. You&#039;ll need the brush while sitting in the corner of your shower, scrubbing your back violently, chanting &#034;I feel dirty.&#034; That&#039;s how bad way this is to split stories.
&lt;/p&gt;
&lt;p&gt;
Now for the example I promised. Let&#039;s imagine we&#039;re building an online retail system like Amazon.com and we&#039;ve got a user story like this:
&lt;div class=&#034;userstory&#034;&gt;
As a potential buyer I want to see available multi-item discounts involving the product Iâm currently looking at.
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;
If this is too big for us, how could we split it further by implementation? We could, for example, split into two stories - the original and a smaller story that&#039;s a dependency for the original:
&lt;/p&gt;
&lt;div class=&#034;userstory&#034;&gt;
As a product owner I want the discount subsystem to support multi-item campaigns so that I can deliver value to the user in a later iteration.
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;
See? With this split down story we&#039;re not delivering any value to the end user because it&#039;s a technical split. To emphasize this, I&#039;ve expressed the story in a form that makes it explicit that we&#039;re doing this in order to enable a later value-delivering story.
&lt;/p&gt;
&lt;p&gt;
Now that we&#039;re over the evil implementation split, let&#039;s look at some more useful ways to split stories.
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Splitting by quality&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;
When I think about the goodness of a user interface, I divide the question into two: &lt;i&gt;utility&lt;/i&gt; and &lt;i&gt;usability&lt;/i&gt;. Utility is about whether the user can achieve the goals he has with the system. Usability is about how easy it is for the user to reach that goal. This dual model can help us split down user stories because the two aspects - utility and usability - can be valuable as such and have different priorities.
&lt;/p&gt;
&lt;p&gt;
Let&#039;s look at an example from an online store selling photography equipment:
&lt;/p&gt;
&lt;div class=&#034;userstory&#034;&gt;
As a beginning photographer I want to get recommended a camera kit to buy so that I donât need to spend hours reading reviews to figure out which camera would suit me well.
&lt;/div&gt;
&lt;p&gt;
Now how would we split this story along the lines of quality, separating the concerns of usability from pure utility?
&lt;/p&gt;
&lt;p&gt;
Well, the utility aspect - the goal - is for the user to be able to figure out which camera to buy. This would be a lot easier if the system could make a smart recommendation. That recommendation might, however, be too difficult to implement right now, making the story too big. With that said, we can support the user&#039;s goal (utility) with less quality (usability) through, for example, a split to these two smaller user stories:
&lt;/p&gt;
&lt;div class=&#034;userstory&#034;&gt;
As a beginning photographer I want to see a numeric sales rank so that I can better decide which camera to buy by comparing the sales of my alternatives.
&lt;/div&gt;
&lt;div class=&#034;userstory&#034;&gt;
As a beginning photographer I want to see a numeric sales rank grouped by buyer expertise level so that I can better decide which camera to buy by comparing the sales of my alternatives.
&lt;/div&gt;
&lt;p&gt;
These two stories aren&#039;t quite as valuable to the user as getting a clear recommendation but they are valuable in that they help the user make that buying decision. They&#039;re the cobblestone road solution that&#039;s not quite the asphalt highway we&#039;d eventually want but it&#039;s already better than no road at all or a bumpy dirt road.
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Splitting by data/details&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;
One of the easy ways to split down user stories is by data and details. The classic example is searching:
&lt;/p&gt;
&lt;div class=&#034;userstory&#034;&gt;
As a user looking for camera accessories I want to search for products so that I can avoid browsing through the whole product catalog.
&lt;/div&gt;
&lt;p&gt;
Now, let&#039;s say that it&#039;s too much work for us to implement the search facility in all of the function and polish we&#039;d eventually like to have. We can, however, implement a subset of that fully-featured search by splitting along the kinds of data and details we support. For example:
&lt;/p&gt;
&lt;div class=&#034;userstory&#034;&gt;
As a user looking for camera accessories I want to search for products by their &lt;i&gt;name&lt;/i&gt; and &lt;i&gt;description&lt;/i&gt; so that I can avoid browsing through the whole product catalog.
&lt;/div&gt;
&lt;div class=&#034;userstory&#034;&gt;
As a user looking for camera accessories I want to search for products by their &lt;i&gt;price&lt;/i&gt; and &lt;i&gt;availability&lt;/i&gt; so that I can avoid browsing through items I wouldnât buy anyway.
&lt;/div&gt;
&lt;p&gt;
In other words, we might first implement a search that only looks for matches in the name and description of a product. In the next iteration, we might follow up with extending the search to other data fields such as price and availability.
&lt;/p&gt;
&lt;p&gt;
In some cases the difference between supporting 2 or 4 data fields can be negligible and therefore splitting along these lines might not make much sense. However, it could be that the &lt;i&gt;type&lt;/i&gt; of data in question makes that difference significant enough that splitting actually does produce multiple significantly smaller stories than the original. In our example above, we&#039;re not really going to match the exact price but rather a price range. Similarly, we might want to search for availability in a specific location rather than a simple &#034;yes, we have it&#034; match.
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Splitting by operations&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;
Another intuitive way to split down user stories is along the lines of operations and procedures. An archetypal example of this could be a CRUD (create-read-update-delete) scenario of managing products in a database:
&lt;/p&gt;
&lt;div class=&#034;userstory&#034;&gt;
As a shop keeper I want to manage the products being sold in my online store so that I can sell what people want to buy.
&lt;/div&gt;
&lt;p&gt;
If this is too big for us, we might split along the lines of the CRUD operations like this: 
&lt;/p&gt;
&lt;div class=&#034;userstory&#034;&gt;
As a shop keeper I want to &lt;i&gt;add and remove products&lt;/i&gt; from my online store so that I can sell what people want to buy.
&lt;/div&gt;
&lt;div class=&#034;userstory&#034;&gt;
As a shop keeper I want to &lt;i&gt;edit product details&lt;/i&gt; in my online store so that I can avoid recreating a product to fix a typo etc.
&lt;/div&gt;
&lt;p&gt;
These are both valuable stories. We could just implement the first story and, for now, deal with updating product details by removing and recreating the same product in the system with the new details. We could just implement the latter story and accept that we need to add new products into the system with raw SQL.
&lt;/p&gt;
&lt;p&gt;
Usable? No. Doable? Yes. Acceptable? Depends.
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Splitting by major effort&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;
Yet another way to split down too big user stories is by identifying where the effort would go. Let&#039;s use the classic credit card example:
&lt;/p&gt;
&lt;div class=&#034;userstory&#034;&gt;
As a buyer I want to be able to pay with a VISA, Mastercard, Diners Club, or American Express credit card.
&lt;/div&gt;
&lt;p&gt;
Now, our first thought might be to split along the lines of data and details - the different credit cards we support - but that would give us four user stories (one for each card type) with identical, conditional effort estimates. Why? Because implementing support for any one card takes at least as long as adding support for all the rest. Recognizing that this is how the effort is divided, we might split the above story into these two smaller user stories:
&lt;/p&gt;
&lt;div class=&#034;userstory&#034;&gt;
As a buyer I want to be able to pay with a credit card (one of VISA, Mastercard, Diners Club, American Express).
&lt;/div&gt;
&lt;div class=&#034;userstory&#034;&gt;
As a buyer I want to be able to pay with four types of credit cards (VISA, Mastercard, Diners Club, American Express).
&lt;/div&gt;
&lt;p&gt;
There is a dependency (the first story must be implemented before the latter) but we might have small enough stories, provided that building the necessary plumbing for credit card processing isn&#039;t &lt;i&gt;too&lt;/i&gt; dominant in the overall effort.
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Splitting by role&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;
Last but not least, we could think about the user story at hand from the perspective of different users and the value to those users.
&lt;/p&gt;
&lt;p&gt;
Let&#039;s say we&#039;ve got this universal story about error handling:
&lt;/p&gt;
&lt;div class=&#034;userstory&#034;&gt;
Error handling.&lt;br/&gt;
&lt;ul&gt;&lt;li&gt;user friendly error messages&lt;/li&gt;&lt;li&gt;detailed stack trace in log file&lt;/li&gt;&lt;li&gt;unique error code displayed to user and in log file&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;
Now, getting an error message that the user can understand probably doesn&#039;t make him happy but certainly reduces the degree of frustration if his understanding of the situation improves.
&lt;/p&gt;
&lt;p&gt;
The detailed stack trace and unique error code on the other hand aren&#039;t really something the user would specifically appreciate. Their value is for the programmer who wants to be able to locate the source of an error as fast and easily as possible.
&lt;/p&gt;
&lt;p&gt;
In other words, there&#039;s two distinct users involved in this ambiguous, two-word &#034;user story&#034; - the user and the programmer. Splitting along this division, we might get the following three smaller user stories:
&lt;/p&gt;
&lt;div class=&#034;userstory&#034;&gt;
As a user I want to see an error message I can understand when something goes wrong.
&lt;/div&gt;
&lt;div class=&#034;userstory&#034;&gt;
As a programmer I want to see the full stack trace in the log file for any exception thrown during runtime so that I can better debug error situations.
&lt;/div&gt;
&lt;div class=&#034;userstory&#034;&gt;
As a programmer I want to show the user a unique error situation identifier so that I can locate the relevant portion of the log file faster and more reliably.
&lt;/div&gt;
&lt;p&gt;
Each of these stories is valuable as such and independent of each other, which is nice. This example also nicely illustrates the value of the explicit &#034;as a &lt;i&gt;role&lt;/i&gt; I want &lt;i&gt;something&lt;/i&gt; so that &lt;i&gt;benefit&lt;/i&gt;&#034; template. If we would&#039;ve tried to write the original user story using the template, it would&#039;ve been obvious that we&#039;re talking about things that are valuable to two distinct roles - a clear hint at the chance of a split.
&lt;/p&gt;
&lt;p&gt;
Another cue that we&#039;re seeing in the original story is the bullet list. Sometimes you can simply look at a story and identify a log-hanging &lt;span style=&#034;text-decoration:line-through;&#034;&gt;fruit&lt;/span&gt;split by scanning for keywords such as &#034;and&#034;, &#034;or&#034;, periods and other kinds of separators.
&lt;/p&gt;
&lt;p&gt;
I&#039;ll stop writing now. It took me a lot longer than I thought to get all of this out of my head but I hope it&#039;s useful. Perhaps needless to say but I&#039;d appreciate any feedback, suggestions, pointers, etc.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <comments>http://radio.javaranch.com/lasse/2008/06/13/1213375107328.html#comments</comments>
    <guid isPermaLink="true">http://radio.javaranch.com/lasse/2008/06/13/1213375107328.html</guid>
    <pubDate>Fri, 13 Jun 2008 16:38:27 GMT</pubDate>
  </item>
  
  <item>
    <title>New DZone &#034;RefCard&#034;: jQuery Selectors</title>
    <link>http://radio.javaranch.com/bear/2008/06/09/1213031402070.html</link>
    
      
        <description>
          &lt;img src=&#034;http://refcardz.dzone.com/sites/all/files/refcardz/covers/3088.png&#034; style=&#034;float:left&#034; hspace=&#034;32&#034;&gt;
&lt;p&gt;
  This week&#039;s &lt;a href=&#034;http://www.dzone.com/links/index.html&#034; target=&#034;_blank&#034;&gt;DZone&lt;/a&gt; RefCard is one that Yehuda and I put together describing the jQuery Selectors.
&lt;/p&gt;
&lt;p&gt;
For anyone using jQuery, or even contemplating using it, this &#034;RefCard&#034; is a handy reference to keep at your desk (virtual or otherwise) to look up the syntax of the jQuery selectors and the methods that manage the jQuery wrapped set.
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#034;http://refcardz.dzone.com/&#034; target=&#034;_blank&#034;&gt;DZone RefCardz Page&lt;/a&gt;
&lt;/p&gt;&lt;p&gt;
&lt;a href=&#034;http://refcardz.dzone.com/refcardz/jquery-selectors&#034; target=&#034;_blank&#034;&gt;jQuery Selectors Refcard&lt;/a&gt;
&lt;/p&gt;
&lt;div style=&#034;clear:both&#034;&gt;&amp;nbsp;&lt;/div&gt;
        </description>
      
      
    
    
    
    <category>Java and Technology</category>
    
    <comments>http://radio.javaranch.com/bear/2008/06/09/1213031402070.html#comments</comments>
    <guid isPermaLink="true">http://radio.javaranch.com/bear/2008/06/09/1213031402070.html</guid>
    <pubDate>Mon, 09 Jun 2008 17:10:02 GMT</pubDate>
  </item>
  
  <item>
    <title>An Expect Oration</title>
    <link>http://radio.javaranch.com/michael/2008/06/04/1212620040035.html</link>
    
      
      
        <description>
          I&#039;ve been asking myself why, without success, I would bother to &lt;a href=&#034;http://www.amazon.com/Exploring-Expect-Tcl-based-Automating-Interactive/dp/1565920902/ref=cm_pdp_review_teaser_product&#034;&gt;critcize a book like Exploring Expect&lt;/a&gt;, a title printed 15 years ago, amended with only minor corrections a year later, never to be touched again, and still reprinted every so often to what must be the great glee of its publisher, O&#039;Reilly, and its author, Don Libes. That&#039;s a successful title, and over a long run. Who am I to sound off against it?
          &lt;p&gt;&lt;a href="http://radio.javaranch.com/michael/2008/06/04/1212620040035.html"&gt;Read more...&lt;/a&gt;&lt;/p&gt;
        </description>
      
    
    
    
    <comments>http://radio.javaranch.com/michael/2008/06/04/1212620040035.html#comments</comments>
    <guid isPermaLink="true">http://radio.javaranch.com/michael/2008/06/04/1212620040035.html</guid>
    <pubDate>Wed, 04 Jun 2008 22:54:00 GMT</pubDate>
  </item>
  
  <item>
    <title>Spot the bug #2: Taming dynamic languages</title>
    <link>http://radio.javaranch.com/val/2008/05/20/1211288287711.html</link>
    
      
        <description>
          &lt;p&gt;
It is commonly admitted that dynamic languages are usually more flexible and permissible than static ones. On the other hand, another recognized fact about dynamic languages is that they provide more ways for you to write buggy software if you don&#039;t pay enough attention and don&#039;t play by the rules.
&lt;/p&gt;

&lt;p&gt;
For instance, I recently came across a nice bug in a web application making heavy use of Spring 2.0.2, JSP 2.0 and JSTL. Here is a piece of code that closely resembles the original code.
&lt;/p&gt;

&lt;pre style=&#034;background-color:#CACACA;padding:10px;&#034;&gt;
...

&amp;lt;%@ taglib prefix=&#039;c&#039; uri=&#039;http://java.sun.com/jsp/jstl/core&#039; %&amp;gt;
&amp;lt;%@ taglib prefix=&#039;spring&#039; uri=&#039;http://www.springframework.org/tags&#039; %&amp;gt;

...

&amp;lt;ul&amp;gt;
&amp;lt;c:forEach items=&#034;${someValues}&#034; var=&#034;value&#034; varStatus=&#034;status&#034;&amp;gt;
	&amp;lt;li&amp;gt;${status.index}. ${value}&amp;lt;/li&amp;gt;
&amp;lt;/c:forEach&amp;gt;
&amp;lt;/ul&amp;gt;

...

&amp;lt;spring:bind path=&#034;address.zip&#034;&amp;gt;
	&amp;lt;c:if test=&#034;status.error&#034;&amp;gt;
		&amp;lt;c:out value=&#034;The ZIP code is not properly formatted.&#034; /&amp;gt;
	&amp;lt;/c:if&amp;gt;
&amp;lt;/spring:bind&amp;gt;

...
&lt;/pre&gt;

&lt;p&gt;
Can you spot it? Ok, it might not be immediately clear what the problem is, but remember that the JSP Expression Language is a dynamic language, and thus, variables are weakly typed. The problem lies around is the &lt;code&gt;status&lt;/code&gt; variable&lt;b&gt;s&lt;/b&gt; and here is why. In the JSTL &lt;code&gt;forEach&lt;/code&gt; loop, we are defining a page-scoped variable named &lt;code&gt;status&lt;/code&gt; that will keep track of the loop iterations and provide some useful information about each iteration, such as the iteration index, whether it is the first or last iteration, etc. At the bottom, we are using the &lt;code&gt;bind&lt;/code&gt; tag of the Spring tag library, which allows to detect whether the value of the property identified by the &lt;code&gt;path&lt;/code&gt; attribute (i.e., &lt;code&gt;address.zip&lt;/code&gt;) could not be validated properly.
&lt;/p&gt;

&lt;p&gt;
Now the thing is that the &lt;code&gt;bind&lt;/code&gt; tag implicitely defines a new page-scoped variable, named... &lt;code&gt;status&lt;/code&gt;, too, which provides some information about the validation of the property, such as whether the validation failed for instance (using the &lt;code&gt;status.error&lt;/code&gt; property, etc). The error that we were seeing in the browser was along the lines of:
&lt;/p&gt;

&lt;pre style=&#034;background-color:#CACACA;padding:10px;&#034;&gt;
javax.servlet.jsp.JspException: javax.servlet.jsp.jstl.core.LoopTagSupport$1Status
&lt;/pre&gt;

&lt;p&gt;
Very explicit as anyone can judge. In the end, the problem was that the first &lt;code&gt;status&lt;/code&gt; variable is of type &lt;code&gt;javax.servlet.jsp.jstl.core.LoopTagSupport$1Status&lt;/code&gt;, while the second is of type &lt;code&gt;org.springframework.web.servlet.support.BindStatus&lt;/code&gt; and those two types share nothing in common. After careful debugging, we could see that the cause of that &lt;code&gt;JSPException&lt;/code&gt; was a &lt;code&gt;ClassCastException&lt;/code&gt;, which is a typical exception raised when a weakly typed language (i.e., the JSP expression language) is being transformed into a strongly typed language (i.e., Java). So one solution here consists of renaming the first &lt;code&gt;status&lt;/code&gt; variable using another identifier, because there is no way to override the name of the second &lt;code&gt;status&lt;/code&gt; variable provided by &lt;code&gt;spring:bind&lt;/code&gt;, probably one of the few thing you cannot customize in Spring ;)
&lt;/p&gt;

&lt;p&gt;
For the record, the Spring 1.2.2 codebase used to explicitly cast the &lt;code&gt;status&lt;/code&gt; variable to the &lt;code&gt;org.springframework.web.servlet.support.BindStatus&lt;/code&gt; type, which would cause unavoidable &lt;code&gt;ClassCastException&lt;/code&gt;s being raised (see &lt;a href=&#034;http://jira.springframework.org/browse/SPR-1140&#034; target=&#034;new&#034;&gt;SPR-1140&lt;/a&gt; for more info). This has been fixed in Spring 1.2.3 and starting from release 2.0.4, any &lt;code&gt;status&lt;/code&gt; variable available in the page or request scope is saved and re-exposed after the tag body has been evaluated (&lt;a href=&#034;http://fisheye1.atlassian.com/changelog/springframework?cs=MAIN:jhoeller:20070318170155&#034; target=&#034;new&#034;&gt;more info&lt;/a&gt;)
&lt;/p&gt;

&lt;p&gt;
I hope this post will help other people not fall into the same nasty trap.
&lt;/p&gt;




        </description>
      
      
    
    
    
    <category>JavaScript</category>
    
    <category>Java</category>
    
    <category>Spot the bug</category>
    
    <comments>http://radio.javaranch.com/val/2008/05/20/1211288287711.html#comments</comments>
    <guid isPermaLink="true">http://radio.javaranch.com/val/2008/05/20/1211288287711.html</guid>
    <pubDate>Tue, 20 May 2008 12:58:07 GMT</pubDate>
  </item>
  
  <item>
    <title>Book Review: Adobe AIR for Javascript Developers </title>
    <link>http://radio.javaranch.com/balajidl/2008/05/06/1210058108248.html</link>
    
      
      
        <description>
          &lt;p&gt;I was trying to learn Adobe AIR and was looking for some good set of learning resources. I found the book &#034;&lt;a href=&#034;http://www.oreilly.com/catalog/9780596518370/index.html&#034;&gt;Adobe AIR for Javascript Developers&lt;/a&gt;&#034; from &lt;a href=&#034;&#034;&gt;Oreilly&lt;/a&gt; by and started reading it online. A cool book, the authors have done great job on presenting the topics as an easilit readable pocket guide.  Soon after reading this book, i felt i got the right resource i want for now.
          &lt;p&gt;&lt;a href="http://radio.javaranch.com/balajidl/2008/05/06/1210058108248.html"&gt;Read more...&lt;/a&gt;&lt;/p&gt;
        </description>
      
    
    
    
    <category>Software Development</category>
    
    <comments>http://radio.javaranch.com/balajidl/2008/05/06/1210058108248.html#comments</comments>
    <guid isPermaLink="true">http://radio.javaranch.com/balajidl/2008/05/06/1210058108248.html</guid>
    <pubDate>Tue, 06 May 2008 07:15:08 GMT</pubDate>
  </item>
  
  <item>
    <title>A tour de force</title>
    <link>http://radio.javaranch.com/ejfried/2008/04/19/1208611209437.html</link>
    
      
        <description>
          &lt;p&gt;
This is one of the best technical books I&#039;ve read in a long time. If you dabble in web development at all, you need to have a look at this book.
&lt;/p&gt;
&lt;p&gt;
jQuery is a Javascript framework that aims to let you think structurally and conceptually, rather than worrying about syntax and other details. In that largely succeeds, and so does this remarkable book.&lt;/p&gt;

&lt;p&gt;Every technical book should be like this one; having written a few myself, I know that&#039;s a tall order. &#034;jQuery in Action&#034; is concise but clear, humorous but not silly, and answers all the questions it raises, quickly. The reader is never left wondering &#034;But what about...&#034; for more than a sentence or two. The authors clearly gave a lot of thought to pedagogy, because things are explained in a clear way which progresses naturally from chapter to chapter. Factor in the extremely readable style and the handsome diagrams, and it&#039;s easy to see why reading this book is a sheer joy.&lt;/p&gt;

&lt;p&gt;For each major feature of jQuery, this book provides a &#034;Laboratory page&#034;, a kind of interactive HTML playground where you can try the feature out using different options. The remarkable flexibility of these pages is a testament to both the power of jQuery and to the imagination and creativity of the authors.&lt;/p&gt;

&lt;p&gt;Perhaps the most commendable feature of &#034;jQuery in Action&#034; is, however, its unflinching honesty. All too often authors are interested in selling you on an approach or a product, and they tend to gloss over the rough spots to win you over. These authors refuse to do that. They present their topic just as it is, describe its merits, and let the reader decide. You should, of course, decide to buy this book!&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>JavaRanch</category>
    
    <category>Books</category>
    
    <comments>http://radio.javaranch.com/ejfried/2008/04/19/1208611209437.html#comments</comments>
    <guid isPermaLink="true">http://radio.javaranch.com/ejfried/2008/04/19/1208611209437.html</guid>
    <pubDate>Sat, 19 Apr 2008 13:20:09 GMT</pubDate>
  </item>
  
  </channel>
</rss>
