<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" version="2.0">
  <channel>
    <title>No Fluff Just Stuff</title>
    <link>http://americas.springone.com</link>
    <description>The best value in the Java/Open Source conferencing space hands down</description>
    <item>
      <title>Google Chrome - WebKit update ?</title>
      <link>http://americas.springone.com/blog/matthias__wessendorf_/2008/12/google_chrome__webkit_update_.html?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;div class='snap_preview'&gt;&lt;br /&gt;&lt;p&gt;Today I had to download Google Chrome, to work (verify) a bug. Same issue is present in Safari 3.2.1. Perhaps I should mention that both aren&amp;#8217;t using the latest greatest WebKit as its core&amp;#8230; So, I gave the nightly a shot&amp;#8230; The bug wasn&amp;#8217;t reproducibly with the nightly WebKit. Nice.&lt;/p&gt;
&lt;p&gt;Since there is a huge &lt;strong&gt;G&lt;/strong&gt; in Chrome&amp;#8230; folks want to see fixes in there. Kinda more pressure instead of fixing a &amp;#8220;Safari only&amp;#8221; bug &lt;img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;p&gt;This all is fine, sure. But it is interesting that the Chrome browser uses an older WebKit than Safari 3.2.1&amp;#8230;&lt;/p&gt;
&lt;p&gt;Let&amp;#8217;s hope there is an update out soon, that bundles the G browser with the latest, greatest WebKit.&lt;/p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/matthiaswessendorf.wordpress.com/171/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/matthiaswessendorf.wordpress.com/171/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/matthiaswessendorf.wordpress.com/171/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/matthiaswessendorf.wordpress.com/171/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/matthiaswessendorf.wordpress.com/171/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/matthiaswessendorf.wordpress.com/171/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/matthiaswessendorf.wordpress.com/171/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/matthiaswessendorf.wordpress.com/171/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/matthiaswessendorf.wordpress.com/171/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/matthiaswessendorf.wordpress.com/171/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=matthiaswessendorf.wordpress.com&amp;blog=1129660&amp;post=171&amp;subd=matthiaswessendorf&amp;ref=&amp;feed=1" /&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 03 Dec 2008 16:00:03 CST</pubDate>
      <guid isPermaLink="true">http://matthiaswessendorf.wordpress.com/?p=171</guid>
      <dc:creator>Matthias  Wessendorf</dc:creator>
    </item>
    <item>
      <title>.NET Coffee Break Show on IronRuby and Silverlight</title>
      <link>http://americas.springone.com/blog/josh_holmes/2008/12/_net_coffee_break_show_on_ironruby_and_silverlight.html?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;&lt;img align="left" src="http://www.developers.ie/images/coffeebreak_small.gif" width="150"&gt;&lt;/img&gt;I&#xD;
was just on a cool webcast called the &lt;a href="http://www.developers.ie/Webcasts.aspx"&gt;.NET&#xD;
Coffee Break Show&lt;/a&gt;. I did a short show on getting started with &lt;a href="http://www.ironruby.net/"&gt;IronRuby&lt;/a&gt; and &lt;a href="http://silverlight.net/"&gt;Silverlight&lt;/a&gt;. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Because the show is supposed to be just 30 minutes or so, I didn't get into my usual&#xD;
preaching about the Ruby programming language or why people should use a dynamic language.&#xD;
Instead I just stated the fact that I really like Ruby and I really like Silverlight&#xD;
and I especially like the combination of the two. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
To get started with IronRuby, check out the &lt;a href="http://www.codethinked.com/post/2008/07/Getting-IronRuby-Up-and-Running.aspx"&gt;getting&#xD;
started guide with IronRuby&lt;/a&gt; by &lt;a href="http://www.codethinked.com/"&gt;Justin Etheredge&lt;/a&gt;. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Now, it's not absolutely necessary to go through all of those steps to get started&#xD;
with IronRuby in Silverlight. Instead, just download the &lt;a href="http://www.codeplex.com/sdlsdk"&gt;Silverlight&#xD;
Dynamic Languages SDK&lt;/a&gt;. Under the Releases tab, there are a handful of downloads.&#xD;
The one that you want is the one that has "Everything". This includes the languages,&#xD;
samples, quick start templates and more. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
Steps to get started:&#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
1. Unzip the SDLSDK into a directory. I put mine in my public downloads directory&#xD;
for ease of access. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
2. Open a command prompt, cd to the sdlsdk directory and run the script:&#xD;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&#xD;
script\sl ruby demo&#xD;
&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&#xD;
This will run the template to generate a starter Silverlight application with IronRuby&#xD;
as it's language. You could substitute in python or jscript as well. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
3. cd to the directory demo and run the script&#xD;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&#xD;
..\script\server /b&#xD;
&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&#xD;
This will run Chiron and then launch a new browser window pointing to the directory.&#xD;
Chiron will first package up the dynamic language files into the XAP and then host&#xD;
a simple web server. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
4. Browse to the index.html file. You should see a simple page with "Welcome to Ruby&#xD;
and Silverlight!" displayed in the Silverlight instance. &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.joshholmes.com/content/binary/WindowsLiveWriter/59c.NETCoffeeBreakShowonIronRubyandSilve_B43A/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://www.joshholmes.com/content/binary/WindowsLiveWriter/59c.NETCoffeeBreakShowonIronRubyandSilve_B43A/image_thumb.png" width="425" height="57"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&#xD;
5. Under demo/ruby, open the file app.xaml. Alter it as follows:&#xD;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&#xD;
&amp;lt;UserControl x:Class="System.Windows.Controls.UserControl"&lt;br&gt;&#xD;
    xmlns="&lt;a href="http://schemas.microsoft.com/client/2007&amp;quot;"&gt;http://schemas.microsoft.com/client/2007"&lt;/a&gt;&lt;br&gt;&#xD;
    xmlns:x="&lt;a href="http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;"&gt;http://schemas.microsoft.com/winfx/2006/xaml"&lt;/a&gt;&amp;gt; &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
  &amp;lt;Grid x:Name="layout_root" Background="White"&amp;gt;&lt;br&gt;&#xD;
    &amp;lt;TextBlock x:Name="message" FontSize="30" /&amp;gt;&lt;br&gt;&lt;font color="#ff0000"&gt;    &amp;lt;Button x:Name="button_main" &#xD;
&lt;br&gt;&#xD;
        Height="30" Width="100" &#xD;
&lt;br&gt;&#xD;
        HorizontalAlignment="Right" &#xD;
&lt;br&gt;&#xD;
        VerticalAlignment="Top" &#xD;
&lt;br&gt;&#xD;
        Margin="0,10,10,0" &#xD;
&lt;br&gt;&#xD;
        Content="Click" &#xD;
&lt;br&gt;&#xD;
        /&amp;gt;&lt;br&gt;&lt;/font&gt;  &amp;lt;/Grid&amp;gt; &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
&amp;lt;/UserControl&amp;gt;&#xD;
&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&#xD;
6. open the file app.rb. Alter it as follows:&lt;br&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&#xD;
require "silverlight" &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
class App &amp;lt; SilverlightApplication&lt;br&gt;&#xD;
  use_xaml &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
  def initialize&lt;br&gt;&#xD;
    message.text = "Welcome to Ruby and Silverlight!"&lt;br&gt;&lt;font color="#ff0000"&gt;    button_main.click do |sender, args|&lt;br&gt;&#xD;
        button_main_click&lt;br&gt;&#xD;
    end&lt;br&gt;&lt;/font&gt;  end&lt;br&gt;&lt;font color="#ff0000"&gt;  def button_main_click&lt;br&gt;&#xD;
      message.text = "Hello from the click handler"&lt;br&gt;&#xD;
  end&lt;br&gt;&lt;/font&gt;end &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
$app = App.new&#xD;
&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&#xD;
The "do" in this case is wiring up a .NET delegate as the event handler for click&#xD;
event. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
7. refresh the browser (or relaunch via Chiron per step 3 if you closed the browser). &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.joshholmes.com/content/binary/WindowsLiveWriter/59c.NETCoffeeBreakShowonIronRubyandSilve_B43A/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://www.joshholmes.com/content/binary/WindowsLiveWriter/59c.NETCoffeeBreakShowonIronRubyandSilve_B43A/image_thumb_1.png" width="628" height="53"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&#xD;
There are a lot of other samples that are out there as well. Check out the ones under&#xD;
the sdlsdk/samples directory. Right now there's a &lt;a href="http://silverlight.net/samples/sl2/ruby-clock/index.html"&gt;simple&#xD;
clock&lt;/a&gt; and a &lt;a href="http://silverlight.net/samples/sl2/photoviewer/index.html"&gt;Flickr&#xD;
photoviewer&lt;/a&gt; that shows a lot of DOM and JavaScript integration. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
You can also find samples at: &#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://silverline.schementi.com/"&gt;http://silverline.schementi.com/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&#xD;
If you want to play with IronRuby or IronPython you can get started playing in the&#xD;
DLRConsole found at &lt;a title="http://silverlight.net/samples/sl2/dlrconsole/index.html" href="http://silverlight.net/samples/sl2/dlrconsole/index.html"&gt;http://silverlight.net/samples/sl2/dlrconsole/index.html&lt;/a&gt;.&#xD;
All the source for that is under the SDLSDK samples as well. &#xD;
&lt;/p&gt;&lt;p&gt;&#xD;
I'll update the post once they put up the recording - &lt;a href="http://www.developers.ie/Webcasts.aspx"&gt;.NET&#xD;
Coffee Break Show&lt;/a&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://www.joshholmes.com/aggbug.ashx?id=ba000329-ede8-4e4d-a557-8f78eb7cbc41"&gt;&lt;/img&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/JoshHolmes?a=aBoaO"&gt;&lt;img src="http://feeds.feedburner.com/~f/JoshHolmes?i=aBoaO" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/JoshHolmes?a=z6FXo"&gt;&lt;img src="http://feeds.feedburner.com/~f/JoshHolmes?i=z6FXo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/JoshHolmes?a=NlVuo"&gt;&lt;img src="http://feeds.feedburner.com/~f/JoshHolmes?i=NlVuo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/JoshHolmes?a=9qe9O"&gt;&lt;img src="http://feeds.feedburner.com/~f/JoshHolmes?i=9qe9O" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/JoshHolmes?a=8eMNo"&gt;&lt;img src="http://feeds.feedburner.com/~f/JoshHolmes?i=8eMNo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoshHolmes/~4/473824706" height="1" width="1"/&gt;</description>
      <pubDate>Wed, 03 Dec 2008 13:00:07 CST</pubDate>
      <guid isPermaLink="true">http://www.joshholmes.com/PermaLink,guid,ba000329-ede8-4e4d-a557-8f78eb7cbc41.aspx</guid>
      <dc:creator>Josh Holmes</dc:creator>
    </item>
    <item>
      <title>How Evo can help Scrum</title>
      <link>http://americas.springone.com/blog/ryan_shriver/2008/12/how_evo_can_help_scrum.html?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;a href="http://www.theagileengineer.com/public/Home/Entries/2008/12/3_How_Evo_can_help_Scrum_files/1379202875_1583bb73f0.jpg"&gt;&lt;img src="http://www.theagileengineer.com/public/Home/Media/1379202875_1583bb73f0_1.jpg" style="float:left; padding-right:10px; padding-bottom:10px; width:158px; height:105px;"/&gt;&lt;/a&gt;As you may know, I’m a fan of the principles and practices of the &lt;a href="http://www.gilb.com/"&gt;Evo method&lt;/a&gt; and Tom Gilb’s work. I got started with &lt;a href="http://www.extremeprogramming.org/what.html"&gt;XP&lt;/a&gt; in 2000, discovered Evo in 2005 and &lt;a href="http://www.scrumalliance.org/"&gt;Scrum&lt;/a&gt; in the same year. Living in the USA, where Scrum is king, when I get calls to help companies “go agile” or help them “fix agile” because they’re struggling, it’s Scrum we’re talking about.&lt;br/&gt;&lt;br/&gt;I like Scrum. I really do. I’ve got my CSM from &lt;a href="http://www.mountaingoatsoftware.com/"&gt;Cohn&lt;/a&gt; and &lt;a href="http://www.controlchaos.com/"&gt;Schwaber&lt;/a&gt; and teach the method to my clients. From a project management perspective, I think it’s better than XP. This is primarily due to better defined roles and responsibilities. It does have some areas that I think could be improved, such as business value, requirements, design and development practices. It is purposefully silent on these areas, letting teams “inspect and adapt” and figure things out on their own. In my experience, while some teams can figure things out and thrive, others struggle and need more direction.&lt;br/&gt;&lt;br/&gt;Working with the &lt;a href="http://www.gilb.com/About"&gt;Tom and Kai&lt;/a&gt; for the last 3 years, I’m gradually convincing them that Evo + Scrum is much more marketable and realistic than marketing Evo as an alternative to Scrum. Scrum has a large market share, an extensive training network and companies have spent hundreds of millions of dollars on Scrum adoption. Scrum isn’t going away anytime soon. Evo can’t beat ‘em, it might as well join ‘em.&lt;br/&gt;&lt;br/&gt;With that said, I do believe that Scrum could benefit from Evo principles and practices and the two can work well together. Tom recently asked me to put together a set of Evo practices that could benefit Scrum and here are my Top 3. I think these could be added to the Scrum method, without fundamentally changing it, and benefit the Scrum community. These practices address specific issues I’ve seen in practice with the Scrum teams and organizations I’ve coached.&lt;br/&gt;&lt;br/&gt;So, what do you think? Would these help or not?&lt;br/&gt;&lt;br/&gt;1. Solving the Right Problem&lt;br/&gt;Evo can help organizations focus on solving the “right problem” and not just solving the “problem right”. Scrum makes an assumption that the product/project you’re working on is the right for the organization to do now. It doesn’t validate this assumption within the methodology; it just focuses on building features in the right order and assumes a business case was done in advance.&lt;br/&gt;Benefits: If Scrum were to adopt Evo’s approach to identifying and prioritizing stakeholder objectives, and quantifying these before starting projects, then Scrum projects could:&lt;br/&gt;1.	Ensure they’re focused on solving the right business problem now&lt;br/&gt;2.	Measure progress towards achieving business objectives, as defined by stakeholders&lt;br/&gt;3.	Ensure resources are being spent on projects with the best ROI (using &lt;a href="../Tools/Entries/2008/9/23_Impact_Estimation_for_Measurable_Business_Value.html"&gt;impact estimation&lt;/a&gt; to guide this process).&lt;br/&gt;&lt;br/&gt;2. Measurable Business Value&lt;br/&gt;Evo can help organizations define value through the use of &lt;a href="../Presentations/Entries/2008/9/23_Measurable_Business_Value_with_Agile.html"&gt;measurable business objectives&lt;/a&gt;. Scrum makes the assumption that more “stories” or “features” equals more value. CHAOS report says that ~60% of all features are rarely or never used, so a feature-centric approach to software systems is fundamentally flawed. If Scrum wants to measure “value to the organization”, it needs to rise above the feature-level and figure out how to measure the value it is delivering to organizations. The Scrum world is desperate for a way to measure value (an &lt;a href="http://agile2008.org/stage-customer.html"&gt;entire track at Agile 2008&lt;/a&gt; was dedicated to this topic). The agile community can’t agree upon a way to do it and Evo can help.&lt;br/&gt;Benefits: If Scrum had a defined way to measure value using Evo practices it could:&lt;br/&gt;1.	Show “progress to objectives” to the business in units other than velocity (pace of team) and number of features built. It could also show value with respect to resources consumed using &lt;a href="../Tools/Entries/2008/9/23_Impact_Estimation_for_Measurable_Business_Value.html"&gt;impact estimation&lt;/a&gt;.&lt;br/&gt;2.	Help business better spend resources due to incremental funding based on real business results, not just features built. Value could be measured each Sprint (every 2-4 weeks) and stakeholders could make funding decisions based on this.&lt;br/&gt;3.	Get teams to focus on satisfying the &lt;a href="Entries/2008/7/10_Miller_Heiman,_meet_Evo.html"&gt;top stakeholders who are paying for the system&lt;/a&gt;, not just the user interface features of the people who use the system to do their job.&lt;br/&gt;4.	Help organizations compare Scrum projects in terms of value delivered. Currently there’s no way of comparing Scrum projects to see which one delivered the most value. This could enable better portfolio management.&lt;br/&gt;&lt;br/&gt;3. Measurable System Qualities&lt;br/&gt;Evo can help Scrum teams identify and quantify system qualities and document these using &lt;a href="http://www.btt-research.com/rich%252520requirements%252520specs.htm"&gt;Planguage&lt;/a&gt;. It can also help teams identify design ideas and use &lt;a href="../Tools/Entries/2008/11/17_Impact_Estimation_for_Agile_Engineering.html"&gt;impact estimation&lt;/a&gt; to assess how design ideas impact system qualities. Scrum has no mechanism for identifying, specifying and &lt;a href="../Presentations/Entries/2008/11/17_Agile_Engineering_for_Architects.html"&gt;measuring system qualities&lt;/a&gt;. User stories handle functional requirements and have testable acceptance criteria, so theoretically we could specify qualities as acceptance criteria. The issue is this level is too low and doesn’t raise qualities to the level of stakeholders who must pay for qualities but rarely review user stories. Qualities like Availability and Recoverability have far-reaching impacts to costs, schedules and the architecture of the system and need attention at the highest levels - they can’t be buried in acceptance criteria of user stories.&lt;br/&gt;Benefits: If Scrum had a way to quantify system qualities using Evo practices it could:&lt;br/&gt;1. Be more adaptable to very large and complex systems (thousands of stories)&lt;br/&gt;Help the analysts, architects and testers think about and negotiate system qualities early in the process, not just focus on building features&lt;br/&gt;Save organizations resources and reduce delivery risk because qualities could be designed in from the start, as opposed to refactored in later when teams “discover” the system doesn’t meet these.</description>
      <pubDate>Wed, 03 Dec 2008 11:00:08 CST</pubDate>
      <guid isPermaLink="true">eac401a6-4b44-4c62-b6d9-19f9aa288d75</guid>
      <dc:creator>Ryan Shriver</dc:creator>
    </item>
    <item>
      <title>SpringOne - Days 1 and 2</title>
      <link>http://americas.springone.com/blog/greg_turnquist/2008/12/springone__days_1_and_2.html?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;I finally found some time to post updates. Whew! It has been busy!&lt;/p&gt;

&lt;p&gt;Day 1&lt;br /&gt;
================================&lt;br /&gt;
On Monday, I hooked up with the SpringSource guys. It seems everyone had something to work on. I wanted to get 0.9.0 completed and working before giving my demo of PetClinic on Thursday. Just about anyone I spoke to was polishing up their slides. It is truly fantastic to be chatting with the guys at SpringSource.&lt;/p&gt;

&lt;p&gt;Rod Johnson gave the keynote addresss, focusing on the target goal of SpringSource in reducing the complexity of application development. Complexity means more development, more risk, and in turn, more cost. SpringSource's overarching goal of reducing complexity must be working, because he had several metrics showing how much has been adopted in some degree by the industry.&lt;/p&gt;

&lt;p&gt;After the keynote, I was finally able to meet up with Keith Donald. We have been playing email tag for some time, and I was surprised to find out his office is probably 10 minutes away from mine. Hopefully we can get together soon after the conference. It was also great to meet Mark Pollack, Chris Beams, Ben Alex, and of course, Rod Johnson himself. While I enjoy reading their blog entries and source code, there is no substitute for meeting the real person.&lt;/p&gt;

&lt;p&gt;Day 2&lt;br /&gt;
================================&lt;br /&gt;
In the morning, I attended the Grail presentation. That was awesome. Grahame demonstrated building a twitter-like site using Grails in 40 minutes. Okay, he promised 40 minutes, and took 45 minutes, but only because he started adding extra functionality not found at the actual twitter site. In the process, I was realizing the value Grails places on plugins. Grails is good at creating a skeleton application, and then letting you flesh it out. I was starting to get the idea that Spring Python could use a command line utility with plugins to generate a skeleton CherryPy app, Django app, or anything else developed by a plugin. Well, I went to the next session, "Intro to Spring Security 2.5", opened my laptop, and started coding. I managed to write a static skeleton app, and then began working on a command-line utility to dynamically generate this. That is still in progress.&lt;/p&gt;

&lt;p&gt;I admit I was only listening with one ear to Ben's presentation. Sorry Ben! 1) I am already somewhat familiar with Spring Security, 2) most of it is geared towards web apps which I don't write, and 3) I was really stoked at the idea of a command-line tool that download Spring Python plugins from a network location. I did catch his question, "who here is NOT writing web apps?" I was the only person in the room who raised a hand to that. When asked what I was using, I answered "Swing desktop apps." That plugged Ben's point that Spring Security uses the same tactics.&lt;/p&gt;

&lt;p&gt;After lunch, I attend two sessions about Spring Integration. This is channel based messaging, which is sort of like JMS on steroids in my book. They interface with JMS, but also with other things like file-based systems, web services, RMI, anything. And it is easy to plug in your non-message based service to a chain of processing. This is wiring your app in a different, more decoupled way. I sure could have used this about five years ago.&lt;/p&gt;

&lt;p&gt;Later that evening, Russ and I got together to work on his Spring Extensions presentation. Russ is planning to talk about the process Spring has set up to better manage new code, and wanted to compare the process with real life, and Spring Python is his choice target. If you are at SpringOne and can read this before Thursday, I highly suggest you attend that presentation. It will definitely be entertaining (shameless plug).&lt;/p&gt;&lt;div class="item_footer"&gt;&lt;p&gt;&lt;small&gt;&lt;a href="http://blog.springpython.webfactional.com/index.php/2008/12/03/springone-days-1-and-2"&gt;Original post&lt;/a&gt; blogged on &lt;a href="http://blog.springpython.webfactional.com"&gt;Spring Python's blog site&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 03 Dec 2008 08:00:09 CST</pubDate>
      <guid isPermaLink="true">45@http://blog.springpython.webfactional.com/</guid>
      <dc:creator>Greg Turnquist</dc:creator>
    </item>
    <item>
      <title>Rich editor is coming to RichFaces</title>
      <link>http://americas.springone.com/blog/max_katz/2008/12/rich_editor_is_coming_to_richfaces.html?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;&lt;a href="http://www.jboss.org/community/docs/DOC-12943" target="new"&gt;rich:editor&lt;/a&gt; is one of the new components in RichFaces 3.3.0 (December 2009) . It&amp;#8217;s based on &lt;a href="http://tinymce.moxiecode.com/" target="new"&gt;tinyMCE&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Tue, 02 Dec 2008 16:00:04 CST</pubDate>
      <guid isPermaLink="true">http://mkblog.exadel.com/?p=190</guid>
      <dc:creator>Max Katz</dc:creator>
    </item>
    <item>
      <title>GroovyMag #2 is out</title>
      <link>http://americas.springone.com/blog/andres_almiray/2008/12/groovymag_2_is_out.html?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>Issue #2 of &lt;a href="http://www.groovymag.com/"&gt;GroovyMag&lt;/a&gt; is out, go get your copy! &lt;img src="http://www.jroller.com/images/smileys/grin.gif" class="smiley" alt=":-D" title=":-D" /&gt;&lt;br/&gt;&lt;br/&gt;&lt;center&gt;&lt;a href="http://www.groovymag.com/main.issues.description/id=4/"&gt;&lt;img src="http://www.groovymag.com/images/gm2_125.jpg"&gt;&lt;/a&gt;&lt;/center&gt;&lt;br/&gt;&lt;br/&gt;On this issue&lt;ul&gt;
&lt;li&gt;Christopher Judd guides you through iPhone app development with Grails and the iUI plugin.&lt;/li&gt;
&lt;li&gt;Shawn Harstock writes about GORM's architecture and its possibilities.&lt;/li&gt;
&lt;li&gt;Dave Klein gives the scoop on recent Groovy/Grails news, also demonstrates the new batch of Grails' testing facilities.&lt;/li&gt;
&lt;li&gt;Michael Kimsal delivers another interview with a live Grails customer in the wild.&lt;/li&gt;
&lt;li&gt;Yours truly continues the Building Rich Applications with Groovy series, laying the ground for Griffon.&lt;/li&gt;
&lt;li&gt;and more!&lt;/li&gt;
&lt;/ul&gt;Keep on Groovying!</description>
      <pubDate>Tue, 02 Dec 2008 13:00:07 CST</pubDate>
      <guid isPermaLink="true">http://www.jroller.com/aalmiray/entry/groovymag_2_is_out</guid>
      <dc:creator>Andres Almiray</dc:creator>
    </item>
    <item>
      <title>Tweeting SpringOne</title>
      <link>http://americas.springone.com/blog/craig_walls/2008/12/tweeting_springone.html?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;I'm tweeting what I hear/see at SpringOne at http://twitter.com/habuma. Follow along if you like.&lt;/p&gt;

&lt;p&gt;Note that I'm not tweeting a lot, but not everything...I'm afraid I could overload the Twitter servers if I were to tweet everything. So, I'll follow up in a few days or when I have time with blog coverage here.&lt;/p&gt;</description>
      <pubDate>Tue, 02 Dec 2008 11:00:09 CST</pubDate>
      <guid isPermaLink="true">http://www.jroller.com/habuma/entry/tweeting_springone</guid>
      <dc:creator>Craig Walls</dc:creator>
    </item>
    <item>
      <title>What is Spring Extensions' place in the Spring Portfolio?</title>
      <link>http://americas.springone.com/blog/russell_miles/2008/12/what_is_spring_extensions_place_in_the_spring_portfolio_.html?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;After my talk at Spring in Finance on Spring Extensions and Spring for .NET, Jan and I got together to have a quick chat about the relationship between Spring Extensions and the rest of the Spring Portfolio.&lt;/p&gt;
&lt;p&gt;You can check out the full video below:&lt;/p&gt;
&lt;p&gt;&lt;embed id="VideoPlayback" src="http://video.google.com/googleplayer.swf?docid=-7845753430304418984&amp;hl=nl&amp;fs=true" style="width:400px;height:326px" allowFullScreen="true" allowScriptAccess="always" type="application/x-shockwave-flash"&gt; &lt;/embed&gt;&lt;/p&gt;</description>
      <pubDate>Tue, 02 Dec 2008 08:00:11 CST</pubDate>
      <guid isPermaLink="true">http://www.russmiles.com/home/2008/12/2/what-is-spring-extensions-place-in-the-spring-portfolio.html</guid>
      <dc:creator>Russell Miles</dc:creator>
    </item>
    <item>
      <title>Spring Python 0.9.0 is released</title>
      <link>http://americas.springone.com/blog/greg_turnquist/2008/12/spring_python_0_9_0_is_released.html?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;Spring Python has just released 0.9.0. This release includes a key update to springpython.security.web module, where authorization has been patched to support CherryPy 3.1. Sylvain helped by providing key patches to integrate Spring Wiki with CherryPy 3.1, and I adapted these to support the PetClinic app. This valuable feature will help demonstrate all the various features of Spring Python during the "Introduction to Spring Python" demo scheduled later this week during the SpringOne conference.&lt;br /&gt;
==============================================================================&lt;br /&gt;
        Release Notes - Spring Python - Version 0.9&lt;br /&gt;
        &lt;/p&gt;
&lt;h2&gt;        Bug
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;[&lt;a href='http://jira.springframework.org/browse/SESPRINGPYTHONPY-81'&gt;SESPRINGPYTHONPY-81&lt;/a&gt;] -         Fix AccessDecisionManager based on CherryPy 3 upgrade
&lt;/li&gt;
&lt;/ul&gt;
                
&lt;h2&gt;        Task
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;[&lt;a href='http://jira.springframework.org/browse/SESPRINGPYTHONPY-76'&gt;SESPRINGPYTHONPY-76&lt;/a&gt;] -         Convert sample applications to new XMLConfig format.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;==============================================================================&lt;br /&gt;
Links:&lt;/p&gt;

&lt;p&gt;    * For more information, please visit the website at &lt;a href="http://springpython.webfactional.com"&gt;http://springpython.webfactional.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;    * To download the 0.9.0 release, or an archived release, and for access to sample applications use &lt;a href="http://www.springsource.com/download/community?project=Spring%20Extensions"&gt;http://www.springsource.com/download/community?project=Spring%20Extensions&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Key Features of Spring Python include:&lt;/p&gt;

&lt;p&gt;    * Inversion Of Control - The idea is to decouple two classes at the interface level. This lets you build many reusable parts in your software, and your whole application becomes more pluggable. You can use either the XmlApplicationContext or the DecoratorBasedApplicationContext.&lt;/p&gt;

&lt;p&gt;    * Aspect-oriented Programming - Spring Python provides great ways to wrap advice around objects. It is utilized for remoting. Another use is for debug tracers and performance tracing.&lt;/p&gt;

&lt;p&gt;    * DatabaseTemplate - Reading from the database requires a monotonous cycle of opening cursors, reading rows, and closing cursors, along with exception handlers. With this template class, all you need is the SQL query and row-handling function. Spring Python does the rest.&lt;/p&gt;

&lt;p&gt;    * Database Transactions - Wrapping multiple database calls with transactions can make your code hard to read. This module provides multiple ways to define transactions without making things complicated.&lt;/p&gt;

&lt;p&gt;    * Security - Plugin security interceptors to lock down access to your methods, utilizing both authentication and domain authorization.&lt;/p&gt;

&lt;p&gt;    * Remoting - It is easy to convert your local application into a distributed one. If you have already built your client and server pieces using the IoC container, then going from local to distributed is just a configuration change.&lt;/p&gt;

&lt;p&gt;    * Samples - to help demonstrate various features of Spring Python, some sample applications have been created:&lt;br /&gt;
          o PetClinic - Everybody's favorite Spring sample application has been rebuilt from the ground up using various web containers including: CherryPy. Go check it out for an example of how to use this framework.&lt;br /&gt;
          o Spring Wiki - Wikis are powerful ways to store and manage content, so we created a simple one as a demo!&lt;br /&gt;
          o Spring Bot - Use Spring Python to build a tiny bot to manage the IRC channel of your open source project.&lt;/p&gt;&lt;div class="item_footer"&gt;&lt;p&gt;&lt;small&gt;&lt;a href="http://blog.springpython.webfactional.com/index.php/2008/12/01/spring-python-0-9-0-is-released"&gt;Original post&lt;/a&gt; blogged on &lt;a href="http://blog.springpython.webfactional.com"&gt;Spring Python's blog site&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
      <pubDate>Mon, 01 Dec 2008 16:00:04 CST</pubDate>
      <guid isPermaLink="true">44@http://blog.springpython.webfactional.com/</guid>
      <dc:creator>Greg Turnquist</dc:creator>
    </item>
    <item>
      <title>The importance of scaling in units or pods</title>
      <link>http://americas.springone.com/blog/billy_newport/2008/12/the_importance_of_scaling_in_units_or_pods.html?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;As some of you have probably heard me say, we have tested Extreme Scale to over a thousand JVMs. Cool, and everyone runs out to build their applications to deploy single grids on lots and lots of boxes.&lt;/p&gt;&lt;p&gt;Now, while you could do this, we don't recommend it. Why? First issue is testing. How will your testing environment fully test a 1000 server grid? The answer is it won't. It'll test a much smaller grid because of budget, noone is going to buy twice the hardware, especially 1000 servers. Plus, what if you need to concurrently test multiple versions of your application. Requiring a 1000 boxes for each testing thread is not practical. This clearly is risky because you aren't testing the same thing as production. &lt;/p&gt;&lt;p&gt;Next issue is risk. Running a database on a single hard drive is risky. Any problem with the hard drive and you're losing data. Running a growing application on a single grid is similar. While we strive for very high quality it's inevitable that bugs will slip out and there will also, of course, be application bugs. Putting all your eggs in one basket is a risky move that almost never pays off. Splitting the application grid in to pods makes a lot of sense. A pod is a group of servers running a homogenous application stack. Pods might be 20 boxes in size. Rather than having 500 boxes in a single grid, now we'd have 25 pods of 20 boxes instead. A single version of the application stack runs on a pod but different pods may be on different versions of the application stack. The application stack is&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Operating system level&lt;/li&gt;
&lt;li&gt;Hardware level (bios, firmware)&lt;/li&gt;
&lt;li&gt;JVM level&lt;/li&gt;
&lt;li&gt;Extreme Scale level&lt;/li&gt;
&lt;li&gt;Application level&lt;/li&gt;
&lt;li&gt;anything else your application needs to work.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br/&gt;Pods are a nicely sized deployment unit for testing. It's easy to imagine QA having 20 servers to test. It's highly unlikely they would have 500. It also means they are testing the same configuration as production. Production uses grids with a maximum size of 20 servers, i.e. a pod. You can stress test a single pod and know what the capacity is, number of users, amount of data, transaction throughput. This makes planning easy and follows the Extreme Scale mantra of predictable scaling at predictable cost. Does a pod have to be 20 servers? No, this is just a number. It can be any number that makes sense. It should be small enough that if a pod has an issue in production, the fraction of impacted transactions is one that the customer is comfortable with until it's resolved. The bigger the fraction is then the less comfortable customers usually are...&lt;/p&gt;&lt;p&gt;A bug will hopefully only impact a single pod. This in the above example only impacts 4% of the application transactions rather than 100%. Upgrades are easier as they can be rolled out a pod at a time. This is just common sense. If an upgrade to a pod goes wrong then switch the pod back to the old level. Upgrades include application and system updates, any change to the application stack. Upgrades should as a rule only change a single element of the stack at once. This makes problem determination much easier. This isn't possible in all cases but should be strived for as a general principle.&lt;/p&gt;&lt;p&gt;You need a routing layer on top of the pods which needs to be forwards and backwards compatible as pods get software upgrades. A directory is needed to locate which pod has some data. Another Extreme Scale grid can be used for this with a database behind it maybe using write behind. This gives us a two tier solution. Tier 1 is the directory and is used to locate which pod handles a specific transaction. Tier 2 are the pods. Once tier 1 identifies a pod then normal Extreme scale routing routes the transaction to the correct server in the pod, this is usually the server holding the partition for the data used by the transaction. Near caches on the tier 1 can be used to lower the impact of the pod look up step.&lt;/p&gt;&lt;p&gt;This looks a little more complex than having a single grid but the operational, testing and reliability improvements will make it worth while.&lt;/p&gt;&lt;p&gt;This blog post doesn't discuss scalability in the normal sense, i.e. does Extreme Scale scale out to a 1000 or more JVMs. It discusses scalability in terms of operations, planning, risk management. These are usually MORE important than product scalability and unfortunately ignored frequently. Buildling highly available systems requires both. You need a reliable product and you need a reliable process for deploying your application.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/dev/websphere/~4/471493324" height="1" width="1"/&gt;</description>
      <pubDate>Mon, 01 Dec 2008 13:00:10 CST</pubDate>
      <guid isPermaLink="true">tag:typepad.com,2003:post-59301636</guid>
      <dc:creator>Billy Newport</dc:creator>
    </item>
    <item>
      <title>JSF 2.0 Public Review is online</title>
      <link>http://americas.springone.com/blog/jason_lee1/2008/12/jsf_2_0_public_review_is_online.html?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description />
      <pubDate>Mon, 01 Dec 2008 11:00:06 CST</pubDate>
      <guid isPermaLink="true">http://blogs.steeplesoft.com/?p=160</guid>
      <dc:creator>Jason Lee</dc:creator>
    </item>
    <item>
      <title>Welcome to SpringOne</title>
      <link>http://americas.springone.com/blog/greg_turnquist/2008/12/welcome_to_springone.html?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;Day 0&lt;br /&gt;
========================&lt;br /&gt;
Well, I'm happy to report I got in last night and was able to meet up with a handful of people. Russ texted me to join them at the bar. After getting settled in the nice Westin Diplomat, I managed to find him along with a few others, despite my phone not having international support. Since the conference doesn't start until Monday evening, I call this Day 0. Russ and I made followup plans. Previously, we were scheduled to speak in parallel during the same time slot, but that now we are scheduled serially. That is definitely a relief. Russ is giving his presentation on Spring Extensions before my Introduction to Spring Python, and there is some possibility of me providing a little "live" feedback during his presentation. We need to hammer out what that is exactly.&lt;/p&gt;

&lt;p&gt;I spent time getting my laptop together this past weekend before traveling down here so that I can give a demo of PetClinic. I wanted to be sure I had a copy of the trunk checked out with the handful of Spring Python's dependencies installed so I could run the regression test suite as well as PetClinic. It is all working, and now I can comfortably make this blog entry from my hotel room. Stay tuned!&lt;/p&gt;&lt;div class="item_footer"&gt;&lt;p&gt;&lt;small&gt;&lt;a href="http://blog.springpython.webfactional.com/index.php/2008/12/01/welcome-to-springone"&gt;Original post&lt;/a&gt; blogged on &lt;a href="http://blog.springpython.webfactional.com"&gt;Spring Python's blog site&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
      <pubDate>Mon, 01 Dec 2008 08:00:07 CST</pubDate>
      <guid isPermaLink="true">43@http://blog.springpython.webfactional.com/</guid>
      <dc:creator>Greg Turnquist</dc:creator>
    </item>
    <item>
      <title>SpringOne 2.2.1 Release Available</title>
      <link>http://americas.springone.com/blog/christian_dupuis/2008/11/springone_2_2_1_release_available.html?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;Just in time for this year&amp;#8217;s &lt;a href="http://springide.org/blog/wp-content/plugins/feed-statistics.php?url=aHR0cDovL2FtZXJpY2FzLnNwcmluZ29uZS5jb20=" class=""&gt;SpringOne Americas&lt;/a&gt; I released Spring IDE 2.2.1 to the update site at Amazon S3. This version is mainly a bug fix and maintenance release, but there are three changes that I&amp;#8217;d like to highlight in this post.&lt;/p&gt;
&lt;p&gt;But before I go into detail here are the usual download links:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Update site: &lt;a href="http://springide.org/blog/wp-content/plugins/feed-statistics.php?url=aHR0cDovL2Rpc3Quc3ByaW5nZnJhbWV3b3JrLm9yZy9yZWxlYXNlL0lERQ==" class=""&gt;http://dist.springframework.org/release/IDE&lt;/a&gt; (this link does not work in a browser, but in your Eclipse update manager!)&lt;/li&gt;
&lt;li&gt;Archived update site: &lt;a href="http://springide.org/blog/wp-content/plugins/feed-statistics.php?url=aHR0cDovL2Rpc3Quc3ByaW5nZnJhbWV3b3JrLm9yZy9yZWxlYXNlL0lERS9zcHJpbmctaWRlX3VwZGF0ZXNpdGVfMi4yLjFfdjIwMDgxMTI4MTgwMC56aXA=" class=""&gt;spring-ide_updatesite_2.2.1_v200811281800.zip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Changelog: &lt;a href="http://springide.org/blog/wp-content/plugins/feed-statistics.php?url=aHR0cDovL2ppcmEuc3ByaW5nZnJhbWV3b3JrLm9yZy9zZWN1cmUvUmVsZWFzZU5vdGUuanNwYT9wcm9qZWN0SWQ9MTAxMjAmYW1wO3N0eWxlTmFtZT1IdG1sJmFtcDt2ZXJzaW9uPTExMTA5" class=""&gt;Release 2.2.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Support for Workspace external configuration files&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Since early versions Spring IDE wasn&amp;#8217;t able to recognize XML configuration files from workspace external resources like JARs from classpath containers. Only JARs that were sitting inside a project could be searched for configuration files. This limitation is due to the fact that the Eclipse resource abstraction has no knowledge of external resources and provides no access to those. But Spring IDE heavily relies on this abstraction like so many other Eclipse plug-ins.&lt;/p&gt;
&lt;p&gt;I finally ended up implementing a thin layer to integrate JARs from external locations into the resource abstraction to make Spring IDE able to open and parse those files.
&lt;p style="text-align: center"&gt;&lt;a href="http://springide.org/blog/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3NwcmluZ2lkZS5vcmcvYmxvZy93cC1jb250ZW50L3VwbG9hZHMvMjAwOC8xMS9mdWxsLXNjcmVlbnNob3QucG5n" rel=\"lightbox[imports]\" title=\"External Configuration Files\"&gt;&lt;img src="http://springide.org/blog/wp-content/uploads/2008/11/external-resources-screenshot.png" alt="External Configuration Files" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ignore missing NamespaceHandler warning&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Although Spring IDE can easily be extended to support custom namespaces, there are a lot of frameworks out there that don&amp;#8217;t ship or provide an integration. Normally that would &lt;a href="http://springide.org/blog/wp-content/plugins/feed-statistics.php?url=aHR0cDovL2ZvcnVtLnNwcmluZ2ZyYW1ld29yay5vcmcvc2hvd3RocmVhZC5waHA/dD02MTkwNCZhbXA7aGlnaGxpZ2h0PXVuYWJsZStmaW5k" class=""&gt;end up&lt;/a&gt; in a &amp;#8220;&lt;code&gt;Unable to locate Spring NamespaceHandler for element 'node name' of schema namespace 'uri'&lt;/code&gt;&amp;#8221; warning in Eclipse or the SpringSource Tool Suite.&lt;/p&gt;
&lt;p&gt;There is now a setting to disable this warning on the Project properties dialog.
&lt;p style="text-align: center"&gt;&lt;a href="http://springide.org/blog/wp-content/plugins/feed-statistics.php?url=aHR0cDovL3NwcmluZ2lkZS5vcmcvYmxvZy93cC1jb250ZW50L3VwbG9hZHMvMjAwOC8xMS9mdWxsLXNjcmVlbnNob3QucG5n" rel=\"lightbox[importss]\" title=\"Ignore missing NamespaceHandler warning\"&gt;&lt;img src="http://springide.org/blog/wp-content/uploads/2008/11/namespacehandler-screenshot2.png" alt="namespacehandler-screenshot2.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Refactoring of Content Assist Infrastructure&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you are already in the business of extending Spring IDE&amp;#8217;s namespace support you might want to take a closer look at the work that has been done for making the implementations of the IContentAssistCalculator more reusable. This refactoring will most likely break your extension depending on the extension approach you choose.&lt;/p&gt;
&lt;p&gt;Making your extension compatible with the new API is not hard and should not involve a lot of changes. Please let me know if you run into any problem or need advice on how to migrate.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Compatibility with SpringSource Tool Suite&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;SpringSource Tool Suite 1.1.1 is not yet compatible with the 2.2.1 release of Spring IDE. Please don&amp;#8217;t update!. We will release an updated version of STS shortly after SpringOne that will come with recent Spring IDE and will also feature lots of new Spring-related tooling. &lt;img src="http://springide.org/blog/wp-content/plugins/feed-statistics.php?view=1&amp;#038;post_id=129" width="1" height="1" style="display: none;" /&gt;&lt;/p&gt;</description>
      <pubDate>Sun, 30 Nov 2008 08:00:05 CST</pubDate>
      <guid isPermaLink="true">http://springide.org/blog/2008/11/30/springone-221-release-available/</guid>
      <dc:creator>Christian Dupuis</dc:creator>
    </item>
    <item>
      <title>Get Comfortable Being Uncomfortable</title>
      <link>http://americas.springone.com/blog/scott_leberknight/2008/11/get_comfortable_being_uncomfortable.html?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;&lt;a href="http://www.renaebair.com/"&gt;Renae Bair's&lt;/a&gt; post on &lt;a href="http://www.renaebair.com/2008/11/24/the-ranting-rubyists/"&gt;The Ranting Rubyists&lt;/a&gt; hits a lot of nails on the head. I will freely admit to being a developer who is interested in continually learning new technologies - perhaps even at the expense of the ones I currently develop in - and I try to contribute a little back by blogging and speaking at conferences like &lt;a href="http://www.nofluffjuststuff.com/"&gt;No Fluff Just Stuff&lt;/a&gt; on a semi-frequent basis. But Renae's point is that many people in the development world seem to be all about the New, New Thing and ready to dismiss the old things without a second thought. My feeling is that the old things don't go away, often we just end up piling more things on top. (&lt;a href="http://en.wikipedia.org/wiki/Turtles_all_the_way_down"&gt;It's new technologies all the way down.&lt;/a&gt;) Sometimes there certainly is wholesale replacement, but from what I've experienced usually you just mix in the new things and things become that much more heterogeneous.&lt;/p&gt;

&lt;p&gt;I think it's fine to continually push "forward" to newer and better technologies that help you do the same thing in half the time, or in half the code, or allow things to execute on twice the processors, or scale twice as much. But at the same time it is simply not cool or very intelligent to dismiss the very tools that get you paid and perhaps got you where you are today. Sometimes the intent is just that; to dismiss the old in favor of the new for the purpose of making money. Sometimes the intent is merely the &lt;i&gt;intellectual curiosity&lt;/i&gt; the best developers usually possess, and in fact the best people in any field possess. A few years ago I told a &lt;a href="http://sixty4bit.com/wp/?p=365"&gt;friend&lt;/a&gt; "Get Comfortable Being Uncomfortable." What I meant was to learn new things and push yourself to think about doing things better and more efficiently than you currently are doing them. Sometimes this means switching or advocating a new tool; sometimes it means using your existing tools more effectively. And always it means you can't rest on your laurels and you are always challenging the status quo. Many people don't like this. Well, too bad, because reality is that things change and &lt;a href="http://en.wikipedia.org/wiki/Resistance_is_futile"&gt;Resistance is futile&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;My day job is still mainly Java and web applications, though I also have managed to squeeze Ruby, Groovy, and Python in there (and of course realized the power of JavaScript) over time. I speak on mostly Java-related stuff like Hibernate and Spring and Groovy a bit. And currently I'm learning about new things (to me anyway) like functional languages such as Lisp and Clojure and Scala. Not because I think I'm going to rewrite the application I'm currently working on in a different language and/or framework, but because over time I feel learning new and different things makes me a better developer, architect, designer, etc. I know that the Java code I write today, while still crap, is &lt;i&gt;way&lt;/i&gt; better than the crap I wrote several years ago, and has been influenced by learning Python and Ruby and Groovy and others. While it is still Java, I don't try to write overly generic, overly engineered things like I used to (well, perhaps not as much as I used to anyway). I just try to get the tasks I need to get done, done. If I need to make something more generic later, I can do it. But in addition to the power of just learning new things, I think the more well-rounded you are the better off you are and the better equipped you are to solve new problems. And maybe you'll find a much better way to solve them because you have a more diverse knowledge "portfolio" at your disposal.&lt;/p&gt;

&lt;p&gt;So, getting back to Renae's &lt;a href="http://www.renaebair.com/2008/11/24/the-ranting-rubyists/"&gt;post&lt;/a&gt;, I think it's a great idea to continue learning new things and pushing better ways of doing things, if for no other reason than to ensure your own relevance and marketability as a developer but hopefully because you enjoy it! But while it's OK to voice your opinion and seek new and better things, don't just rip to shreds the things that got you to where you are. In the past I've made comments to people like "Java sucks" and "I'd rather be doing &lt;a href="http://www.paulgraham.com/avg.html"&gt;Blub&lt;/a&gt; programming" and I've tried to curb that and realize that things change, we know more today than yesterday, and to just "Get Comfortable Being Uncomfortable." You might not always get to program in &lt;a href="http://en.wikipedia.org/wiki/Blub"&gt;Blub&lt;/a&gt; but that shouldn't stop you from expanding what you know, and by the way the sphere of your knowledge should include more than just technical knowledge and probably should include things like economics, finance, culture, art, literature, sports, etc. Whatever. Just make yourself more well-rounded and you'll be better for it, in all aspects of life.&lt;/p&gt;</description>
      <pubDate>Sat, 29 Nov 2008 16:00:02 CST</pubDate>
      <guid isPermaLink="true">http://www.sleberknight.com/blog/sleberkn/entry/get_comfortable_being_uncomfortable</guid>
      <dc:creator>Scott Leberknight</dc:creator>
    </item>
    <item>
      <title>350k transactions/sec for fault tolerant stock price quote service on 2 commodity boxes.</title>
      <link>http://americas.springone.com/blog/billy_newport/2008/10/350k_transactions_sec_for_fault_tolerant_stock_price_quote_service_on_2_commodity_boxes__1.html?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;I'm helping develop an order quote service for a customer in financial markets using WebSphere Extreme Scale (ObjectGrid). The application simply pulls the current quote for a particular stock from a feed and maintains the current price and the 20 minute history in memory for each stock. The price updates arrive at 200k/sec(!!) so it's quite a pace. There is a lot of data as there is 230k stocks to keep the quotes with history for. Clients can request the current live price for a stock or the 20 minute delayed price for a stock if they haven't paid for the live service.&lt;/p&gt;

&lt;p&gt;The application is currently running on a pair of older dual socket quad core Intel servers connected with Gb ethernet. Thats 8 cores each or 16 cores in total. The two boxes are currently handling this service at 350k/sec price updates in total, 175K per server. All updates are asynchronously replicated for high availability. Scaling up is a matter of running the application on more hardware. 4 such boxes would deliver 700k/sec, 8 such boxes 1.4m/sec and so on. With no replication then I'm getting well over a million per box but no surprise there, if you do nothing then it goes real fast :)&lt;/p&gt;

&lt;p&gt;Anyway, just thought I'd share. If anyone wants the application we provided as a sample then please email me.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/dev/websphere/~4/407673515" height="1" width="1"/&gt;</description>
      <pubDate>Sat, 29 Nov 2008 13:00:08 CST</pubDate>
      <guid isPermaLink="true">tag:typepad.com,2003:post-56350521</guid>
      <dc:creator>Billy Newport</dc:creator>
    </item>
    <item>
      <title>JMM and final field freeze</title>
      <link>http://americas.springone.com/blog/alex_miller/2008/11/jmm_and_final_field_freeze.html?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;Internally, someone had this question yesterday:&lt;/p&gt;
&lt;textarea name="code" class="java:nocontrols:nogutter" cols="60" rows="10"&gt;
public SomeClass {
  private final LinkedHashMap map = new LinkedHashMap();

  public SomeClass() {
    init();
  }

  private void init() {
    // just create objects and map.put() - 
    // no tricks here, no this escaping, etc
  }

  // A read method
  public Object get(Object key) {
    return map.get(key);
  }

  // etc...
}
&lt;/textarea&gt;
&lt;p&gt;And the question is:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;The map is never mutated after construction.  The field is declared final. Are the read methods thread-safe and guaranteed to show you the map with all values?  If not, is an additional memory barrier required to guarantee this?&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I think pretty much everyone agreed that readers are guaranteed to see the map instance but there was some question about whether the puts to the map during init() can be reordered such that they are not thread-safe with respect to the get()s.  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;After many folks weighed in, the consensus is that yes, the reads are definitely thread-safe &lt;em&gt;even in the absence of an additional memory barrier&lt;/em&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;One goal of &lt;a href="http://jcp.org/en/jsr/detail?id=133"&gt;JSR 133&lt;/a&gt; (which defines the &lt;a href="http://www.cs.umd.edu/~pugh/java/memoryModel/"&gt;Java Memory Model&lt;/a&gt;) is to preserve &lt;strong&gt;initialization safety&lt;/strong&gt;.  The &lt;a href="http://www.cs.umd.edu/users/pugh/java/memoryModel/jsr-133-faq.html"&gt;JSR 133 FAQ&lt;/a&gt; says:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;If an object is properly constructed (which means that references to it do not escape during construction), then all threads which see a reference to that object will also see the values for its final fields that were set in the constructor, without the need for synchronization. &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I think that&amp;#8217;s a pretty good summary of the intent.  The concept of whether changes to final fields are visible at end of construction is explicitly talked about in the &lt;a href="http://www.cs.umd.edu/~pugh/java/memoryModel/semantics.pdf"&gt;memory model semantics&lt;/a&gt; paper as well in the section on &amp;#8220;informal semantics of final fields&amp;#8221;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;F1&lt;/strong&gt; When a ﬁnal ﬁeld is read, the value read is the value assigned in the constructor.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;F2&lt;/strong&gt; Assume thread T1 assigns a value to a ﬁnal ﬁeld f of ob ject X deﬁned in class C. Assume that T1 does not allow any other thread to load a reference to X until after the C constructor for X has terminated. Thread T2 then reads ﬁeld f of X. Any writes done by T1 before the class C constructor for ob ject X terminates are guaranteed to be ordered before and visible to any&lt;br /&gt;
reads done by T2 that are derived from the read of f.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://javaconcurrencyinpractice.com"&gt;Java Concurrency in Practice&lt;/a&gt; also mentions this in section 16.3:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Initialization safety guarantees that for *properly constructed* objects, all threads will see the correct values of final fields that were set by the constructor, regardless of how the object is published.  Further, any variables that can be *reached* through a final field of a properly constructed object (such as the elements of a final array or the contents of a HashMap referenced by a final field) are also guaranteed to be visible to other threads.&lt;/p&gt;
&lt;p&gt;For objects with final fields, initialization safety prohibits reordering any part of construction with the initial load of a reference to that object.  All writes to final fields made by the constructor, as well as to any variables reachable through those fields, become &amp;#8220;frozen&amp;#8221; when the constructor completes, and any thread that obtains a reference to that object is guaranteed to see a value that is at least as up to date as the frozen value.  Writes that initialize variables reachable through final fields are not reordered with operations following the post-construction freeze.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I find the formal definition of the final field freeze semantics to be fairly impenetrable, so I&amp;#8217;ll just trust that they say formally what is stated informally above.&lt;/p&gt;
&lt;p&gt;Final fields are ever so important and useful.  Whenever possible, strive to make your fields final.  One tip for this is to enable a Save Action in Eclipse (or your IDE of choice) that automatically attempts to make fields final if possible so you can&amp;#8217;t forget!&lt;/p&gt;</description>
      <pubDate>Sat, 29 Nov 2008 11:00:09 CST</pubDate>
      <guid isPermaLink="true">http://tech.puredanger.com/2008/11/26/jmm-and-final-field-freeze/</guid>
      <dc:creator>Alex Miller</dc:creator>
    </item>
    <item>
      <title>NetBeans 6.5, Python Support, and Mac OS X</title>
      <link>http://americas.springone.com/blog/jason_lee1/2008/11/netbeans_6_5_python_support_and_mac_os_x.html?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description />
      <pubDate>Sat, 29 Nov 2008 08:00:08 CST</pubDate>
      <guid isPermaLink="true">http://blogs.steeplesoft.com/netbeans-65-python-support-and-mac-os-x/</guid>
      <dc:creator>Jason Lee</dc:creator>
    </item>
    <item>
      <title>RichFaces - filtering with custom function</title>
      <link>http://americas.springone.com/blog/max_katz/2008/11/richfaces__filtering_with_custom_function.html?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;In my previous &lt;a href="http://mkblog.exadel.com/?p=181"&gt;post&lt;/a&gt;, I have shown how to use built-in filtering in RichFaces. The basic filtering uses startsWith() method to filter. This is fine but you might have a situation where you need to write your own custom filtering method.&lt;/p&gt;
&lt;p&gt;To keep things simple, let&amp;#8217;s apply custom filtering to Name column only. For Location column we will keep the standard filtering.&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="xml xml" style="font-family:monospace;"&gt;&lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;h:form&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
   &lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;rich:dataTable&lt;/span&gt; &lt;span style="color: #000066;"&gt;value&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;#{wondersBean.sevenNewWonders}&amp;quot;&lt;/span&gt; &lt;span style="color: #000066;"&gt;var&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;wonder&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;      &lt;span style="color: #000066;"&gt;id&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;table&amp;quot;&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
      &lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;rich:column&lt;/span&gt; &lt;span style="color: #000066;"&gt;filterMethod&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;#{wondersBean.filterWonders}&amp;quot;&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
         &lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;f:facet&lt;/span&gt; &lt;span style="color: #000066;"&gt;name&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;header&amp;quot;&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
            Name
	     &lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;h:panelGroup&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
	        &lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;h:outputText&lt;/span&gt; &lt;span style="color: #000066;"&gt;value&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;br&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;h:inputText&lt;/span&gt; &lt;span style="color: #000066;"&gt;value&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;#{wondersBean.filterValue}&amp;quot;&lt;/span&gt; &lt;span style="color: #000066;"&gt;id&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;input&amp;quot;&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
		   &lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;a4j:support&lt;/span&gt; &lt;span style="color: #000066;"&gt;event&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;onkeyup&amp;quot;&lt;/span&gt; &lt;span style="color: #000066;"&gt;ignoreDupResponses&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;			 &lt;span style="color: #000066;"&gt;requestDelay&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;700&amp;quot;&lt;/span&gt; &lt;span style="color: #000066;"&gt;reRender&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;table&amp;quot;&lt;/span&gt; &lt;span style="color: #000066;"&gt;focus&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;input&amp;quot;&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;/h:inputText&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
	     &lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;/h:panelGroup&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
	 &lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;/f:facet&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
	 &lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;h:outputText&lt;/span&gt; &lt;span style="color: #000066;"&gt;value&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;#{wonder.name}&amp;quot;&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
      &lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;/rich:column&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
      &lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;rich:column&lt;/span&gt; &lt;span style="color: #000066;"&gt;filterBy&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;#{wonder.location}&amp;quot;&lt;/span&gt; &lt;span style="color: #000066;"&gt;filterEvent&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;onblur&amp;quot;&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
          &lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;f:facet&lt;/span&gt; &lt;span style="color: #000066;"&gt;name&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;header&amp;quot;&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;Location&lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;/f:facet&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
	  &lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;h:outputText&lt;/span&gt; &lt;span style="color: #000066;"&gt;value&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;#{wonder.location}&amp;quot;&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
       &lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;/rich:column&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
       &lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;rich:column&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
	   &lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;f:facet&lt;/span&gt; &lt;span style="color: #000066;"&gt;name&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;header&amp;quot;&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;Image&lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;/f:facet&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
	   &lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;h:graphicImage&lt;/span&gt; &lt;span style="color: #000066;"&gt;url&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;#{wonder.imageUrl}&amp;quot;&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
       &lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;/rich:column&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
   &lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;/rich:dataTable&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;/h:form&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Most of the stuff happening inside the first rich:column tag starting at line #4. First I define the actual custom filtering method via filterMethod attribute. I will come back to is shortly. The rest is just an input field with a4j:support with onkeyup event. One the filtering is done, we return the focus to input field with focus attribute. &lt;/p&gt;
&lt;p&gt;The changes to managed bean are minor. We have to add the filtering method and the filterValue property (this property holds the value we enter on the page).&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="java java" style="font-family:monospace;"&gt;...
&lt;span style="color: #000000; font-weight: bold;"&gt;private&lt;/span&gt; &lt;span style="color: #003399;"&gt;String&lt;/span&gt; filterValue &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;
&lt;span style="color: #666666; font-style: italic;"&gt;// getter and setter method for filterValue&lt;/span&gt;
&amp;nbsp;
&lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;boolean&lt;/span&gt; filterWonders&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #003399;"&gt;Object&lt;/span&gt; current&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt;
   Wonder currentWonder &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;Wonder&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;current;
   &lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;filterValue.&lt;span style="color: #006633;"&gt;length&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;==&lt;/span&gt;0&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt;
      &lt;span style="color: #000000; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;true&lt;/span&gt;;
   &lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;
   &lt;span style="color: #000000; font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;currentWonder.&lt;span style="color: #006633;"&gt;getName&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;.&lt;span style="color: #006633;"&gt;startsWith&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;filterValue&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt;
      &lt;span style="color: #000000; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;true&lt;/span&gt;;
   &lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt; 
   &lt;span style="color: #000000; font-weight: bold;"&gt;else&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt;
	&lt;span style="color: #000000; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;false&lt;/span&gt;; 
   &lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;
...&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The method returns boolean value. The value entered from the page is checked against each value in the list. Value of true means include the current object in the filtering result. The filterWonders is not much different from using the built-in starsWith() method, however, you are free to add more interesting filtering in this method as you see fit. One thing different is that the method requires exact case. In other words, entering &amp;#8216;A&amp;#8217; or &amp;#8216;a&amp;#8217; is not the same. This is just to show you to get setup custom filtering. &lt;/p&gt;
&lt;p&gt;An alternative approach is to use filterExpression instead of filterMethod. It basically works the same way. It has to evaluate to either true or false. true means the value is included in the filtering result.&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="xml xml" style="font-family:monospace;"&gt;&lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;rich:column&lt;/span&gt; &lt;span style="color: #000066;"&gt;filterExpression&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;#{..}&amp;quot;&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
...
&lt;span style="color: #009900;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;/rich:column&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Fri, 28 Nov 2008 16:00:04 CST</pubDate>
      <guid isPermaLink="true">http://mkblog.exadel.com/?p=187</guid>
      <dc:creator>Max Katz</dc:creator>
    </item>
    <item>
      <title>What's Next</title>
      <link>http://americas.springone.com/blog/matt_raible/2008/11/what_s_next.html?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>It's been three weeks since &lt;a href="http://raibledesigns.com/rd/entry/linkedin_cuts_10_a_k"&gt;I joined the realm of the unemployed&lt;/a&gt;. Fortunately, I didn't stay unemployed for long. In fact, after writing the aforementioned post, I received 5 offers the next day. Of the opportunities I received, the most interesting ones were those from companies interested in hiring the whole team. Not only that, but LinkedIn hired me back as a contractor through the end of the year. The goal of the LinkedIn contract: finish up projects that my team had started in the previous months.
&lt;/p&gt;
&lt;p&gt;
At the end of the first week after the LinkedIn layoffs, we all had individual opportunities, but we also had two team opportunities. The following week (last week), I flew to NYC to meet with one potential client while the other potential client flew to Denver to meet with the rest of the team. After flying to NYC, I traveled to Mountain View to do some on-site work at LinkedIn. At the end of the week, it seemed like most of the remaining tasks at LinkedIn could be done by someone else. I told them I thought it was best that I move onto other things, while staying available for support questions. On the way to the airport, I spoke with both our team opportunities. Following those conversations, I was very pumped about both projects and confident about pending offers. You can imagine my disappointment when &lt;a href="http://twitter.com/mraible/status/1017350051"&gt;my flight was delayed&lt;/a&gt; for &lt;a href="http://twitter.com/mraible/status/1017519455"&gt;5 hours&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
After a fun weekend with Abbie, Jack and friends, I woke up Monday morning without a job and it felt great. However, &lt;a href="http://twitter.com/mraible/status/1021306397"&gt;things changed quickly&lt;/a&gt;. Monday morning many opportunities landed in my inbox: a 3-day gig this week (helping write open-source training), a 1-week gig in December (evaluating how well Tapestry 5, Wicket and Struts 2 integrate with Dojo/Comet for a client in Europe), a 1-week training gig in Europe next year and a 3-month gig for the whole team. I accepted all these opportunities and am very happy I'll get to work with Jimbo, Country and Scotty again next year. The 3-month gig should be a lot of fun. We're helping build a SOFEA-based architecture that leverages appropriate client technologies (to be determined) to build a kick-ass web application. I look forward to talking about the technologies we use and things we learn along the way.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.flickr.com/photos/rmisek/3059809175/" title="Costa Rica, courtesy of Rob Misek"&gt;&lt;img src="http://farm4.static.flickr.com/3054/3059809175_9cac54fbba_m.jpg" class="picture" width="240" height="160" alt="Costa Rica, courtesy of Rob Misek" /&gt;&lt;/a&gt;
So the good news is I've entered &lt;em&gt;The Golden Period&lt;/em&gt;. The Golden Period is when you don't have a job, but you do have a start date. Unemployment is absolutely blissful during this time. The Golden Period exists a couple times for me over the next 6 weeks. 
&lt;/p&gt;
&lt;p&gt;
I'll be traveling to Costa Rica tomorrow for a best friend's wedding. I'm leaving both my laptop and my iPhone at home. Next week, I'll be loving life with my parents in Costa Rica and Panama. The following week, I'll be working on AppFuse all week and hope to make great progress on developing &lt;a href="http://appfuse.org/display/APF/Roadmap#Roadmap-AppFuse2.1"&gt;2.1&lt;/a&gt;. Then I have the 1-week Web Framework Analysis gig, followed by 2 weeks of vacation in Oregon. My Golden Period begins this afternoon (for 3 weeks) and happens again over Christmas (for 2 weeks).
&lt;/p&gt;
&lt;p&gt;Yeah, life is good. Damn good. &lt;img src="http://raibledesigns.com/images/smileys/grin.gif" class="smiley" alt=":-D" title=":-D" /&gt;</description>
      <pubDate>Fri, 28 Nov 2008 13:00:10 CST</pubDate>
      <guid isPermaLink="true">http://raibledesigns.com/rd/entry/what_s_next</guid>
      <dc:creator>Matt Raible</dc:creator>
    </item>
    <item>
      <title>Avoiding “Open Source” with JSF and Facelets</title>
      <link>http://americas.springone.com/blog/matthias__wessendorf_/2008/11/avoiding_open_source_with_jsf_and_facelets.html?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;div class='snap_preview'&gt;&lt;br /&gt;&lt;p&gt;When using Facelets it is normal to use XHTML files to describe the view. Also in your web.xml configuration mostly you find a mapping of the FacesServlet to something like &amp;#8220;/faces/*&amp;#8221; or &amp;#8220;*.faces&amp;#8221;, so that you have URLs like:&lt;/p&gt;
&lt;p&gt;http://myserver:port/context/coolPage.faces (or .jsf)&lt;/p&gt;
&lt;p&gt;Now, it is easy to view the source code of the page, when the application is written with Facelets&amp;#8217; XHTML files. Just do the following:&lt;/p&gt;
&lt;p&gt;http://myserver:port/context/coolPage.xhtml&lt;/p&gt;
&lt;p&gt;You now see the page structure, what libraries are used etc. This type of &amp;#8220;Open source&amp;#8221; you definitely want to avoid, when using Facelets. You could write a security filter or something similar, but the soultion could be really really simple.&lt;/p&gt;
&lt;p&gt;Use the following servlet-mapping in your web.xml:&lt;/p&gt;
&lt;pre name="code" class="xml"&gt;

...
  &amp;lt;servlet-mapping&amp;gt;
    &amp;lt;servlet-name&amp;gt;faces&amp;lt;/servlet-name&amp;gt;
    &amp;lt;url-pattern&amp;gt;*.xhtml&amp;lt;/url-pattern&amp;gt;
  &amp;lt;/servlet-mapping&amp;gt;
...
&lt;/pre&gt;
&lt;p&gt;No more &amp;#8220;Open Source&amp;#8221; of your Facelets application &lt;img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /&gt; &lt;/p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/matthiaswessendorf.wordpress.com/167/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/matthiaswessendorf.wordpress.com/167/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/matthiaswessendorf.wordpress.com/167/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/matthiaswessendorf.wordpress.com/167/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/matthiaswessendorf.wordpress.com/167/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/matthiaswessendorf.wordpress.com/167/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/matthiaswessendorf.wordpress.com/167/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/matthiaswessendorf.wordpress.com/167/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/matthiaswessendorf.wordpress.com/167/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/matthiaswessendorf.wordpress.com/167/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=matthiaswessendorf.wordpress.com&amp;blog=1129660&amp;post=167&amp;subd=matthiaswessendorf&amp;ref=&amp;feed=1" /&gt;&lt;/div&gt;</description>
      <pubDate>Fri, 28 Nov 2008 11:00:03 CST</pubDate>
      <guid isPermaLink="true">http://matthiaswessendorf.wordpress.com/?p=167</guid>
      <dc:creator>Matthias  Wessendorf</dc:creator>
    </item>
  </channel>
</rss>

