<?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>Continuous Delivery Experience</title>
    <link>http://continuousdeliveryexperience.com</link>
    <description>The best value in the Java/Open Source conferencing space hands down</description>
    <item>
      <title>ISC StormCast for Tuesday, June 18th 2013 http://isc.sans.edu/podcastdetail.html?id=3374, (Tue, Jun 18th)</title>
      <link>http://continuousdeliveryexperience.com/blog/johannes_ullrich/2013/06/isc_stormcast_for_tuesday_june_18th_2013_http__isc_sans_edu_podcastdetail_html_id_3374__tue_jun_18th_?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>...(more)...</description>
      <pubDate>Tue, 18 Jun 2013 16:00:21 CDT</pubDate>
      <guid isPermaLink="true">http://isc.sans.edu/podcastdetail.html?id=3374</guid>
      <dc:creator>Johannes Ullrich</dc:creator>
    </item>
    <item>
      <title>EMET 4.0 is now available for download, (Tue, Jun 18th)</title>
      <link>http://continuousdeliveryexperience.com/blog/johannes_ullrich/2013/06/emet_4_0_is_now_available_for_download__tue_jun_18th_?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;
	Somewhere I know TJ O&amp;#39;Connor is a very happy analyst. EMET 4 ...(more)...</description>
      <pubDate>Tue, 18 Jun 2013 13:00:19 CDT</pubDate>
      <guid isPermaLink="true">http://isc.sans.edu/diary.html?storyid=16019&amp;rss</guid>
      <dc:creator>Johannes Ullrich</dc:creator>
    </item>
    <item>
      <title>Chess Pieces or Domain Expertise? Your Choice</title>
      <link>http://continuousdeliveryexperience.com/blog/johanna_rothman/2013/06/chess_pieces_or_domain_expertise_your_choice?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;Many years ago, I started a job as a contract manager, and it became clear I had a big problem. I had developers who knew one area of the code well. I had testers who knew not much of any area of the code well, even though they had worked for the organization for many years. Why? They had been shuffled from one project to another almost every month for years.&lt;/p&gt;
&lt;p&gt;The writers had more domain expertise than anyone, because they had learned the product from end to end. What was I going to do? This project needed to finish in eight weeks, I needed to hire my replacement, and the people were shell-shocked from one manager after another. I was the fourth Director of Software Development in six months.&lt;/p&gt;
&lt;p&gt;I decided to make a &lt;a href="http://www.jrothman.com/books/manage-your-project-portfolio-increase-your-capacity-and-finish-more-projects/" target="_blank"&gt;project portfolio&lt;/a&gt;, and rank the projects to know which projects were first, second, and third. I knew about this first project, but what was second and third? I was sure we had more crises, waiting.&lt;/p&gt;
&lt;p&gt;Next, I asked people what they wanted to work on. I was sure that people could select their areas of responsibility, and it would work out. This is before we had agile teams. I was using a &lt;a href="http://www.jrothman.com/2008/01/what-lifecycle-selecting-the-right-model-for-your-project/" target="_blank"&gt;staged delivery lifecycle&lt;/a&gt;, so we had cross-functional teams and we worked by feature.&lt;/p&gt;
&lt;p&gt;Next, I asked the teams to develop their deliverables in two-week chunks: what deliverables, as in features, could they deliver in the next two weeks, working as a cross-functional team?&lt;/p&gt;
&lt;p&gt;The teams started to work together. They started to work across the code, not just in one area of the code. It wasn&amp;#8217;t perfect, but it was working. The testers expanded their knowledge, because they were able to focus on the entire product. The developers learned the product end-to-end. The writers were happier, because people answered their questions.&lt;/p&gt;
&lt;p&gt;About three weeks into this, a crisis happened with the second-ranked project. A senior manager wanted to yank a bunch of people off the top-ranked project and put them onto the second ranked project. He told me I had to give him people.&lt;/p&gt;
&lt;p&gt;&amp;#8220;No. I have no one for you.&amp;#8221;&lt;/p&gt;
&lt;p&gt;&amp;#8220;But you work for me.&amp;#8221;&lt;/p&gt;
&lt;p&gt;&amp;#8220;Yes, I work for the organization. But this project, the one that everyone is on, is more important than your project. So, I have no one for you, and I won&amp;#8217;t for another two weeks. Unless I hear from the CEO that your project is more important than this one. In that case, we will stop working on this one, and everyone will work on your project.&lt;/p&gt;
&lt;p&gt;We only have eight people. We can&amp;#8217;t multitask. We can only work on one project at a time. Moving people off and onto projects as if they are chess pieces doesn&amp;#8217;t make sense. This top-ranked project has two more weeks to go, and then it&amp;#8217;s done. When it&amp;#8217;s done, I can assign all eight people to your project, no problem. But assigning them now? Craziness.&amp;#8221;&lt;/p&gt;
&lt;p&gt;Now, should I have called him crazy? That was darn close to a career limiting conversation. Don&amp;#8217;t do that! But the rest of the conversation? Useful.&lt;/p&gt;
&lt;p&gt;And that&amp;#8217;s the topic of this month&amp;#8217;s &lt;a href="http://www.stickyminds.com/s.asp?F=S17987_ART_2" target="_blank"&gt;Management Myth #18: I Can Move People Like Chess Pieces&lt;/a&gt;. When you move people like chess pieces, you deny them the opportunity to learn domain expertise. You don&amp;#8217;t manage the project portfolio, and you decrease the capacity of your organization. It&amp;#8217;s all around bad.&lt;/p&gt;
&lt;p&gt;Did I want to be nice to the senior manager? Of course I did. But, good management is not about being nice to everyone all the time. Much of management is about saying no when you have to. And, I really needed to say no.&lt;/p&gt;
&lt;p&gt;With agile approaches, I would have had more options: I could have used iterations and sequenced the projects differently&amp;#8212;maybe. But that would not have allowed the organization to release the top-ranked project in the next few weeks. It would have made the people feel horrible, as if I&amp;#8217;d yanked the promised dessert away from them. Yes, the project was that close to completion.&lt;/p&gt;
&lt;p&gt;While you &lt;em&gt;can&lt;/em&gt; move people as if they are chess pieces, it&amp;#8217;s rarely a good idea. You want to leave people with project teams, to let them create a solid team&amp;#8212;that&amp;#8217;s the forming, storming, norming part. And, you want to keep people on a product long enough that they develop significant domain expertise in the product. When they become bored and ask to move, then they will tell you in a one-on-one that it&amp;#8217;s time to move.&lt;/p&gt;
&lt;p&gt;In the meantime, don&amp;#8217;t move people as if they are chess pieces. People need to develop mastery over their work. They need the autonomy to select the areas of their work that they will develop domain expertise in. They need to feel as if they have a sense of purpose about the work. Gee, it sounds as if I&amp;#8217;m parroting Dan Pink, in &lt;a href="http://www.amazon.com/gp/product/1594484805/ref=as_li_ss_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=1594484805&amp;amp;linkCode=as2&amp;amp;tag=rothmaconsulg-20&amp;quot;&amp;gt;Drive: The Surprising Truth About What Motivates Us&amp;lt;/a&amp;gt;&amp;lt;img src=&amp;quot;http://www.assoc-amazon.com/e/ir?t=rothmaconsulg-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=1594484805&amp;quot; width=&amp;quot;1&amp;quot; height=&amp;quot;1&amp;quot; border=&amp;quot;0&amp;quot; alt=&amp;quot;&amp;quot; style=&amp;quot;border:none !important; margin:0px !important;&amp;quot; /&amp;gt;" target="_blank"&gt;Drive&lt;/a&gt;. I guess I am. When you commit to project teams, and leave people where they are, so they can learn the product and learn how to work with their teams, and let the work flow through the teams, you create an environment that allows for autonomy, mastery, and purpose. And, that&amp;#8217;s part of what a great manager does.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ManagingProductDevelopment?a=Lubt-6Swzjk:WZnEDxOK_GM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ManagingProductDevelopment?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ManagingProductDevelopment?a=Lubt-6Swzjk:WZnEDxOK_GM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ManagingProductDevelopment?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ManagingProductDevelopment?a=Lubt-6Swzjk:WZnEDxOK_GM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ManagingProductDevelopment?i=Lubt-6Swzjk:WZnEDxOK_GM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ManagingProductDevelopment?a=Lubt-6Swzjk:WZnEDxOK_GM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ManagingProductDevelopment?i=Lubt-6Swzjk:WZnEDxOK_GM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ManagingProductDevelopment?a=Lubt-6Swzjk:WZnEDxOK_GM:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ManagingProductDevelopment?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ManagingProductDevelopment?a=Lubt-6Swzjk:WZnEDxOK_GM:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ManagingProductDevelopment?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ManagingProductDevelopment/~4/Lubt-6Swzjk" height="1" width="1"/&gt;</description>
      <pubDate>Tue, 18 Jun 2013 11:00:32 CDT</pubDate>
      <guid isPermaLink="true">http://www.jrothman.com/blog/mpd/?p=12333</guid>
      <dc:creator>Johanna Rothman</dc:creator>
    </item>
    <item>
      <title>Groovy on instantserver.io thanks to GVM</title>
      <link>http://continuousdeliveryexperience.com/blog/guillaume_laforge/2013/06/groovy_on_instantserver_io_thanks_to_gvm?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description />
      <pubDate>Tue, 18 Jun 2013 08:00:39 CDT</pubDate>
      <guid isPermaLink="true">groovy-on-instantserver-io-thanks-to-gvm</guid>
      <dc:creator>Guillaume LaForge</dc:creator>
    </item>
    <item>
      <title>Deploying Applications to GlassFish Using curl</title>
      <link>http://continuousdeliveryexperience.com/blog/jason_lee1/2013/06/deploying_applications_to_glassfish_using_curl_1?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;div class="paragraph"&gt;  
        &lt;p&gt;Over the past few months, I&amp;#8217;ve been posting tips on how to use the REST interface in GlassFish v3 and later to perform various functions.  My &lt;a href="http://blogs.steeplesoft.com/posts/2010/12/17/glassfish-administration-the-rest-of-the-story-part-ii-deploying-apps-using-scala/"&gt;last post&lt;/a&gt; used Scala.  In this much briefer and far less ambitious post, I thought I&amp;#8217;d share how to deploy an app using curl (from the shell of your choice).  If you&amp;#8217;re familiar with the REST endpoint, there&amp;#8217;s really not just a whole lot new here:
      pass::[more]&lt;/p&gt;
      &lt;/div&gt;&lt;div class="listingblock"&gt;
        &lt;div class="content monospaced"&gt;
          &lt;pre&gt;curl -s -S \
          -H 'Accept: application/json' -X POST \
          -H 'X-Requested-By: dummy' \
          -F id=@/path/to/application.war \
          -F force=true http://localhost:4848/management/domain/applications/application&lt;/pre&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="paragraph"&gt;  
        &lt;p&gt;Remember that the actual archive contents are passed as the value to the parameter &lt;code&gt;id&lt;/code&gt;, so we tell &lt;code&gt;curl&lt;/code&gt; to send the contents of the file using the prefix &lt;code&gt;@&lt;/code&gt;.  The context root and application will be deduced by the system (or can be specified by passing &lt;code&gt;contextroot&lt;/code&gt; and &lt;code&gt;name&lt;/code&gt; parameters).  The &lt;code&gt;force&lt;/code&gt; parameter tells GlassFish to force the deployment even if an application is already deployed under that name (which is effectively a redeployment).
      As an added bonus, to undeploy, you can issue this:&lt;/p&gt;
      &lt;/div&gt;&lt;div class="listingblock"&gt;
        &lt;div class="content monospaced"&gt;
          &lt;pre&gt;curl -s -S \
          -H 'Accept: application/json' \
          -H 'X-Requested-By: dummy' \
          -X DELETE http://localhost:4848/management/domain/applications/application/$APPNAME&lt;/pre&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="paragraph"&gt;  
        &lt;p&gt;It&amp;#8217;s as simple as that.  If you&amp;#8217;re using a shell script, you could always just use asadmin directly, of course.  Using that approach, asadmin must be on the PATH, or you have to specify the full path in your script, so your choice comes down to preference, I think.  Either way, now you know how to do both. :)&lt;/p&gt;
      &lt;/div&gt;</description>
      <pubDate>Mon, 17 Jun 2013 16:00:15 CDT</pubDate>
      <guid isPermaLink="true">http://blogs.steeplesoft.com/posts/2011/02/10/deploying-applications-to-glassfish-using-curl/</guid>
      <dc:creator>Jason Lee</dc:creator>
    </item>
    <item>
      <title>This week in #Scala (17/06/2013)</title>
      <link>http://continuousdeliveryexperience.com/blog/jan_machacek/2013/06/this_week_in_scala_17_06_2013_?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>Welcome to another edition of #ThisWeekInScala. Another Scala Days conference has been and gone.  Unfortunately there&amp;#8217;s no videos yet, but we&amp;#8217;re told they&amp;#8217;re on the way.  Hopefully I&amp;#8217;ll have them for you next week.  In the meantime, here&amp;#8217;s plenty to &amp;#8230; &lt;a href="http://www.cakesolutions.net/teamblogs/2013/06/17/this-week-in-scala-17062013/"&gt;Read more &lt;span class="meta-nav"&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;</description>
      <pubDate>Mon, 17 Jun 2013 13:00:31 CDT</pubDate>
      <guid isPermaLink="true">http://www.cakesolutions.net/teamblogs/?p=3935</guid>
      <dc:creator>Jan Machacek</dc:creator>
    </item>
    <item>
      <title>Type-Safe Web with Kotlin</title>
      <link>http://continuousdeliveryexperience.com/blog/andrey_breslav/2013/06/type_safe_web_with_kotlin?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;&lt;a href="http://blog.jetbrains.com/kotlin/files/2013/06/web1.png"&gt;&lt;img class="alignleft size-medium wp-image-1096" src="http://blog.jetbrains.com/kotlin/files/2013/06/web1-300x225.png" alt="" width="300" height="225" /&gt;&lt;/a&gt;We &lt;a href="http://blog.jetbrains.com/kotlin/2013/01/an-interview-with-andy-selvig-author-of-kara-web-framework/"&gt;told you&lt;/a&gt; about &lt;a href="http://karaframework.com/"&gt;Kara Web Framework&lt;/a&gt; a while ago. It is written in Kotlin and relies on type-safe builders. It doesn&amp;#8217;t have to be the only web framework for Kotlin, but the general principles seem good, so I wrote an article about these principles: &lt;strong&gt;&lt;a href="http://jaxenter.com/type-safe-web-with-kotlin-47395.html"&gt;Type-Safe Web with Kotlin&lt;/a&gt;&lt;/strong&gt;, it gives an overview of the framework design, and then gives many details about builders, extensions and so on.&lt;span id="more-1091"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Examples&lt;/strong&gt; used in this article are available at &lt;a href="https://github.com/abreslav/kara-files/blob/master/src/tutorial.kt"&gt;https://github.com/abreslav/kara-files/blob/master/src/tutorial.kt&lt;/a&gt; and &lt;a href="https://github.com/abreslav/kara-files/blob/master/src/small_builder.kt"&gt;https://github.com/abreslav/kara-files/blob/master/src/small_builder.kt&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Slides&lt;/strong&gt; from my talk given at JPoint in Saint Petersburg are also available &lt;a href="https://prezi.com/hndtabwcfy5h/type-safe-web-with-kotlin-jpoint/"&gt;online&lt;/a&gt;.&lt;br /&gt;
The talk was given in Russian, video accessible is &lt;a href="http://javapoint.ru/talks/12/"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/kotlin/~4/KVnLELob02o" height="1" width="1"/&gt;</description>
      <pubDate>Mon, 17 Jun 2013 11:00:35 CDT</pubDate>
      <guid isPermaLink="true">http://blog.jetbrains.com/kotlin/?p=1091</guid>
      <dc:creator>Andrey Breslav</dc:creator>
    </item>
    <item>
      <title>Oracle Java pre-announcement: Upcoming JRE patch will plug 37 remotely exploitable holes. See http://www.oracle.com/technetwork/topics/security/javacpujun2013-1899847.html, (Mon, Jun 17th)</title>
      <link>http://continuousdeliveryexperience.com/blog/johannes_ullrich/2013/06/oracle_java_pre_announcement_upcoming_jre_patch_will_plug_37_remotely_exploitable_holes_see_http__www_oracle_com_technetwork_topics_security_javacpujun2013_1899847_html__mon_jun_17th_?u</link>
      <description>...(more)...</description>
      <pubDate>Mon, 17 Jun 2013 08:00:38 CDT</pubDate>
      <guid isPermaLink="true">http://isc.sans.edu/diary.html?storyid=16013&amp;rss</guid>
      <dc:creator>Johannes Ullrich</dc:creator>
    </item>
    <item>
      <title>A scan is a scan is a scan, (Sun, Jun 16th)</title>
      <link>http://continuousdeliveryexperience.com/blog/johannes_ullrich/2013/06/a_scan_is_a_scan_is_a_scan__sun_jun_16th_?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p dir="ltr" id="docs-internal-guid-76a33df1-4d50-7907-e59c-badc35f1c306" style="line-height:1.15;ma ...(more)...</description>
      <pubDate>Sun, 16 Jun 2013 11:00:37 CDT</pubDate>
      <guid isPermaLink="true">http://isc.sans.edu/diary.html?storyid=16004&amp;rss</guid>
      <dc:creator>Johannes Ullrich</dc:creator>
    </item>
    <item>
      <title>Drop-in migration from MySQL to Percona DB in two minutes</title>
      <link>http://continuousdeliveryexperience.com/blog/lincoln_baxter_iii/2013/06/drop_in_migration_from_mysql_to_percona_db_in_two_minutes?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;Percona DB is a drop-in replacement for the MySQL database, and as you&amp;#8217;d hope for a business model based on providing out-of-box performance enhancements, the install is a complete breeze. &lt;span id="more-24189"&gt;&lt;/span&gt;

&lt;h2&gt;Install Percona on Debian/Ubuntu&lt;/h2&gt;

&lt;p&gt;First step, get the software:

&lt;div class='command alert'&gt; &lt;pre&gt;gpg --keyserver  hkp://keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A
gpg -a --export CD2EFD2A | sudo apt-key add -&lt;/pre&gt; &lt;/div&gt;

&lt;p&gt;Next, add the following entries to &lt;code&gt;/etc/apt/sources.list&lt;/code&gt;, replacing &amp;#8220;VERSION&amp;#8221; with the name of your distribution:

&lt;div class='snippit'&gt;&lt;pre lang='' class='prettyprint'&gt;deb http://repo.percona.com/apt VERSION main
deb-src http://repo.percona.com/apt VERSION main&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Once this is done, you are ready to install, but since it&amp;#8217;s probably a good idea to back up the database first, you should probably run a few more commands, for safety&amp;#8217;s sake:

&lt;div class='command alert'&gt; &lt;pre&gt;cp -Rf /var/lib/mysql /var/lib/mysql-old
cp /etc/my.cnf /etc/my.cnf-old&lt;/pre&gt; &lt;/div&gt;

&lt;p&gt;Now, we&amp;#8217;re ready to run install the Percona packages, which will take care of automatically stopping, removing, and replacing any existing MySQL packages:

&lt;div class='command alert'&gt; &lt;pre&gt;apt-get update
apt-get install percona-server-server-5.5 percona-server-client-5.5&lt;/pre&gt; &lt;/div&gt;

&lt;p&gt;Once this completes, you&amp;#8217;ll want to verify that everything works as expected, and that your existing sites are running normally. If all goes well, you should notice a marked performance improvement in your database layer.

&lt;h2&gt;Install Percona on Red Hat, Fedora, and CentOS&lt;/h2&gt;

&lt;p&gt;First step, set up the software sources and verify that the repository configuration was successful:

&lt;div class='command alert'&gt; &lt;pre&gt;rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm
yum list | grep percona


// You should see the output similar to the following:
percona-release.x86_64                     0.0-1                       installed
...
Percona-Server-client-51.x86_64            5.1.47-rel11.1.51.rhel5     percona
Percona-Server-devel-51.x86_64             5.1.47-rel11.1.51.rhel5     percona
Percona-Server-server-51.x86_64            5.1.47-rel11.1.51.rhel5     percona
Percona-Server-shared-51.x86_64            5.1.47-rel11.1.51.rhel5     percona
Percona-Server-test-51.x86_64              5.1.47-rel11.1.51.rhel5     percona
...
xtrabackup.x86_64                          1.2-22.rhel5                percona&lt;/pre&gt; &lt;/div&gt;

&lt;p&gt;Once this is complete, you can now proceed to run the install, which will take care of automatically stopping, removing, and replacing any existing MySQL packages:

&lt;div class='command alert'&gt; &lt;pre&gt;yum install Percona-Server-client-55 Percona-Server-server-55&lt;/pre&gt; &lt;/div&gt;

&lt;p&gt;Once this completes, you&amp;#8217;ll want to verify that everything works as expected, and that your existing sites are running normally. If all goes well, you should notice a marked performance improvement in your database layer.

&lt;h2&gt;Additional Resources&lt;/h2&gt;

For additional resources, check out the Percona documentation:
&lt;a href="http://www.percona.com/doc/percona-server/5.5/installation.html?id=percona-server:installation:from-repositories" target="_blank"&gt;&lt;/a&gt;&lt;a name="lincoln"&gt;&lt;/a&gt;&lt;div class="author"&gt;

&lt;img class="author-photo" src="http://ocpsoft.com/wp-content/uploads/2012/02/IMG_8886_modified1.jpg" alt="Lincoln Baxter, III" title="Lincoln Baxter, III" /&gt;

&lt;h3&gt;About the author:&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://twitter.com/lincolnthree" target="_blank"&gt; Lincoln Baxter, III&lt;/a&gt; is a Senior Software Engineer at &lt;a href="http://redhat.com" target="_blank"&gt;Red Hat&lt;/a&gt;, working on &lt;a href="http://jboss.org" target="_blank"&gt;JBoss&lt;/a&gt; open-source projects; most notably as project lead for &lt;a href="http://jboss.org/forge"&gt;JBoss Forge&lt;/a&gt;. This blog represents his personal thoughts and perspectives, not necessarily those of his employer.&lt;/p&gt;

&lt;p&gt;He is a founder of &lt;a href="http://twitter.com/ocpsoft" target="_blank" title="Simple Software"&gt;OCPsoft&lt;/a&gt;, the author of &lt;a href="http://ocpsoft.org/prettyfaces/"  title="URLRewriteFilter | Java | JSF | JSF2 | Pretty URL | REST"&gt;PrettyFaces&lt;/a&gt; and &lt;a href="http://ocpsoft.org/rewrite/" title="URLRewriteFilter | Java | Servlet | Pretty URL | REST"&gt;Rewrite&lt;/a&gt;, the leading URL-rewriting extensions for Servlet, Java EE, and Java web frameworks; he is also the author of &lt;a href="http://ocpsoft.org/prettytime/"  title="Java Timestamp | Format | Elapsed | Social Time"&gt;PrettyTime&lt;/a&gt;, social-style date and timestamp formatting for Java. When he is not swimming, running, or playing Ultimate Frisbee, Lincoln is focused on promoting open-source software and making web-applications more accessible for small businesses, individuals.&lt;/p&gt;

&lt;/div&gt;</description>
      <pubDate>Sat, 15 Jun 2013 08:00:38 CDT</pubDate>
      <guid isPermaLink="true">http://ocpsoft.org/?p=24189</guid>
      <dc:creator>Lincoln Baxter III</dc:creator>
    </item>
    <item>
      <title>Grails for the Wicked Smaht</title>
      <link>http://continuousdeliveryexperience.com/blog/brian_kotek/2013/06/grails_for_the_wicked_smaht?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;Grails for the Wicked Smaht&lt;/p&gt;
&lt;p&gt;Something I like about Groovy/Grails is that I seem to get 90% of my work done with 10% of the language/framework. Here&amp;#8217;s a guide to the 10%, intended for folks who already know what they&amp;#8217;re doing with Web technologies.&lt;/p&gt;
&lt;p&gt;Pretty much every entry in here has multiple pages (or even chapters) of documentation on the Groovy or Grails homepage, and is probably covered in-depth in a book. This is not that documentation or book.&lt;/p&gt;
&lt;p&gt;Some things may seem restrictive, like &amp;#8220;a controller method assumes a like-named view.&amp;#8221; That&amp;#8217;s just a convention, and I haven&amp;#8217;t hit a Grails convention yet that won&amp;#8217;t allow you to override it, whether it&amp;#8217;s view names or complicated model-to-database table mappings.&lt;/p&gt;
&lt;h1&gt;Groovy&lt;/h1&gt;
&lt;h2&gt;Language&lt;/h2&gt;
&lt;p&gt;It compiles to .class, so you can use it from Java or use anything Java from Groovy.&lt;/p&gt;
&lt;h3&gt;Everything&amp;#8217;s an Object&lt;/h3&gt;
&lt;p&gt;Declare an int, you get an Integer. This means boxing. Drop to Java for fast math.&lt;/p&gt;
&lt;h3&gt;Strings&lt;/h3&gt;
&lt;p&gt;Strings in single quotes are literals. String in double quotes are &amp;#8220;GStrings&amp;#8221; (chuckle), and lazily evaluate anything inside of ${}.&lt;/p&gt;
&lt;script src="https://gist.github.com/3911330.js?file=Strings.groovy"&gt;&lt;/script&gt;&lt;noscript&gt;&lt;pre&gt;&lt;code class="language-groovy groovy"&gt;def literal = 'John'
def gString = &amp;quot;The name is ${literal}&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/noscript&gt;
&lt;h3&gt;(Hash)Maps and (Array)Lists are simple, replacing Arrays and such.&lt;/h3&gt;
&lt;p&gt;Declare them a lot like JSON, but with square brackets.&lt;/p&gt;
&lt;script src="https://gist.github.com/3911192.js?file=MapsAndLists.groovy"&gt;&lt;/script&gt;&lt;noscript&gt;&lt;pre&gt;&lt;code class="language-groovy groovy"&gt;def someList = [&amp;quot;One&amp;quot;, &amp;quot;Two&amp;quot;, &amp;quot;Three&amp;quot;, &amp;quot;Four&amp;quot;]
def someMap = [ keyOne : 1, keyTwo: 2 ]&lt;/code&gt;&lt;/pre&gt;&lt;/noscript&gt;
&lt;h3&gt;Closures may be new to you.&lt;/h3&gt;
&lt;p&gt;They&amp;#8217;re anonymous function that can be assigned to variables, passed, etc. They have access to the scope around them.&lt;/p&gt;
&lt;script src="https://gist.github.com/3911192.js?file=Closure.groovy"&gt;&lt;/script&gt;&lt;noscript&gt;&lt;pre&gt;&lt;code class="language-groovy groovy"&gt;def outerVariable = &amp;quot;foo&amp;quot;

def closure = { closureArgument -&amp;gt;
  println &amp;quot;$closureArgument $outerVariable&amp;quot;
}

(1..10).each{ i -&amp;gt;
  closure.call( i )  //prints &amp;quot;1 foo&amp;quot;, &amp;quot;2 foo&amp;quot;, etc.
}&lt;/code&gt;&lt;/pre&gt;&lt;/noscript&gt;
&lt;h3&gt;Loop with Closures&lt;/h3&gt;
&lt;p&gt;&amp;#8220;For&amp;#8221; and such exist, but closures own loops. Each, EachWithIndex, Collect&amp;#8230;there&amp;#8217;s a lot of things you can do with them.&lt;/p&gt;
&lt;script src="https://gist.github.com/3911192.js?file=EachLoop.groovy"&gt;&lt;/script&gt;&lt;noscript&gt;&lt;pre&gt;&lt;code class="language-groovy groovy"&gt;[1, 2, 3, 4].each{ i -&amp;gt;
  println i
}&lt;/code&gt;&lt;/pre&gt;&lt;/noscript&gt;
&lt;h3&gt;Truthiness&lt;/h3&gt;
&lt;p&gt;Null is false. Empty collections are false. Empty strings are false. Empty iterators/vectors or those at their end are false. Common sense, really.&lt;/p&gt;
&lt;h2&gt;Classes and Beans&lt;/h2&gt;
&lt;h3&gt;Getters/Setters are Implied&lt;/h3&gt;
&lt;p&gt;Here&amp;#8217;s a Person bean. Java code would see getFirstname() and such.&lt;/p&gt;
&lt;script src="https://gist.github.com/3911192.js?file=Person.groovy"&gt;&lt;/script&gt;&lt;noscript&gt;&lt;pre&gt;&lt;code class="language-groovy groovy"&gt;class Person {
  String firstname
  String lastname
  Integer age
}&lt;/code&gt;&lt;/pre&gt;&lt;/noscript&gt;
&lt;h3&gt;Constructors take maps&lt;/h3&gt;
&lt;div&gt;Could not embed GitHub Gist 5751490: API Rate Limit Exceeded for 178.63.146.0&lt;/div&gt;
&lt;h3&gt;Access via properties or dynamically.&lt;/h3&gt;
&lt;p&gt;All valid:&lt;/p&gt;
&lt;script src="https://gist.github.com/3911192.js?file=PersonAccess.groovy"&gt;&lt;/script&gt;&lt;noscript&gt;&lt;pre&gt;&lt;code class="language-groovy groovy"&gt;println person.firstname
println person[ &amp;quot;firstname&amp;quot; ]
println person.getFirstname()&lt;/code&gt;&lt;/pre&gt;&lt;/noscript&gt;
&lt;h3&gt;You can write your own getter/setter to override.&lt;/h3&gt;
&lt;script src="https://gist.github.com/3911330.js?file=PersonSetter.groovy"&gt;&lt;/script&gt;&lt;noscript&gt;&lt;pre&gt;&lt;code class="language-groovy groovy"&gt;class Person {
  String firstname
  String lastname
  Integer age

  void setFirstname( String firstname ) {
    println &amp;quot;Setting firstname to ${firstname}&amp;quot;
    this.firstname = firstname
  }

}&lt;/code&gt;&lt;/pre&gt;&lt;/noscript&gt;
&lt;h1&gt;Grails&lt;/h1&gt;
&lt;p&gt;Grails is MVC with Spring and Hibernate (or MongoDB or whatnot) already hooked up and simplified. You can pretty much do anything possible in raw Java+Spring+Hibernate, but Grails simplifies the way 95% of folks did 95% of their tasks.&lt;/p&gt;
&lt;h2&gt;Installing&lt;/h2&gt;
&lt;p&gt;Download Grails and set a GRAILS_HOME environment variable to the unzipped directory. Add GRAILS_HOME/bin to your path. Done.&lt;/p&gt;
&lt;h2&gt;Creating an application&lt;/h2&gt;
&lt;p&gt;Navigate to the desired parent directory and do &amp;#8220;grails create-application MyApplication&amp;#8221;.&lt;/p&gt;
&lt;h2&gt;Application directory structure&lt;/h2&gt;
&lt;p&gt;It&amp;#8217;s pretty straightforward. Directories are named what they contain. Grails-app contains your application, and grails-app/controller contains controllers. This pattern persists throughout.&lt;/p&gt;
&lt;h2&gt;Running your application&lt;/h2&gt;
&lt;p&gt;Go to your application&amp;#8217;s directory and type &amp;#8220;grails&amp;#8221;. This&amp;#8217;ll start the &amp;#8220;interactive shell.&amp;#8221; Now, type run-app and it&amp;#8217;ll run and tell you the URL, like http://localhost:8080/MyApplication.&lt;/p&gt;
&lt;h2&gt;Model&lt;/h2&gt;
&lt;h3&gt;Saveable Domain Models&lt;/h3&gt;
&lt;p&gt;The &amp;#8220;Person&amp;#8221; we already wrote is all we need. Grails will infer an autoincrementing &amp;#8220;id&amp;#8221; property and optimistic locking in a &amp;#8220;version&amp;#8221; property, adding them on the fly.&lt;/p&gt;
&lt;h3&gt;Data access, finders, and such&lt;/h3&gt;
&lt;p&gt;Anything that&amp;#8217;s a Grails domain model can save, read, list, and generally CRUD. You can use dynamically-created methods, HQL, or criteria.&lt;/p&gt;
&lt;script src="https://gist.github.com/3911330.js?file=DataAccess.groovy"&gt;&lt;/script&gt;&lt;noscript&gt;&lt;pre&gt;&lt;code class="language-groovy groovy"&gt;def company = new Company( &amp;quot;Acme&amp;quot; )
def person = new Person( firstname : &amp;quot;Bob&amp;quot;, lastname : &amp;quot;Bobbyson&amp;quot;, age : 80 )

company.addToPeople( person )
company.save()

person.findByFirstName( &amp;quot;Bob&amp;quot; ) // finds all &amp;quot;Bob&amp;quot;s

person.findAll( &amp;quot;from Person where Company = :company&amp;quot;, [ company: company ] )

company.delete()&lt;/code&gt;&lt;/pre&gt;&lt;/noscript&gt;
&lt;h3&gt;Relating Entities&lt;/h3&gt;
&lt;h4&gt;Many-To-One&lt;/h4&gt;
&lt;p&gt;Add a property and say the child &amp;#8220;belongsTo&amp;#8221; the parent to enable cascading.&lt;/p&gt;
&lt;div&gt;Could not embed GitHub Gist 3911192: API Rate Limit Exceeded for 178.63.146.0&lt;/div&gt;
&lt;h4&gt;One-To-Many&lt;/h4&gt;
&lt;p&gt;Add a static &amp;#8220;hasMany&amp;#8221; and declare a property if you want a collection type other than Set:&lt;/p&gt;
&lt;div&gt;Could not embed GitHub Gist 3911192: API Rate Limit Exceeded for 178.63.146.0&lt;/div&gt;
&lt;h4&gt;Add to &amp;#8220;one to manys&amp;#8221; on the &amp;#8220;parent&amp;#8221; side with generated methods&lt;/h4&gt;
&lt;script src="https://gist.github.com/3911192.js?file=ManagePeople.groovy"&gt;&lt;/script&gt;&lt;noscript&gt;&lt;pre&gt;&lt;code class="language-groovy groovy"&gt;def company = new Company()
def person = new Person()

company.addToPeople( person )
company.removeFromPeople( person )

company.save() // cascades
&lt;/code&gt;&lt;/pre&gt;&lt;/noscript&gt;
&lt;h3&gt;Validation&lt;/h3&gt;
&lt;p&gt;Add constraints to a model and it&amp;#8217;ll runtime validate (using Spring validation) and manage database constraints for you. You can write custom validations. &amp;#8220;nullable: false&amp;#8221; is implied for EVERYTHING, and must be set to true to override.&lt;/p&gt;
&lt;div&gt;Could not embed GitHub Gist 3911330: API Rate Limit Exceeded for 178.63.146.0&lt;/div&gt;
&lt;h2&gt;Controller&lt;/h2&gt;
&lt;p&gt;A Grails controller defines methods that equate to URLs.&lt;/p&gt;
&lt;h3&gt;Controller Methods&lt;/h3&gt;
&lt;p&gt;This&amp;#8217;ll define /person/show, allowing /person/show?personId=2. URL/form values go into a &amp;#8216;params&amp;#8217; map. A map returned by the method contains values available in the view.&lt;/p&gt;
&lt;div&gt;Could not embed GitHub Gist 3911330: API Rate Limit Exceeded for 178.63.146.0&lt;/div&gt;
&lt;h2&gt;Views&lt;/h2&gt;
&lt;p&gt;A method assumes a like-named view. If one doesn&amp;#8217;t exist, and you don&amp;#8217;t explicitly do a render() or redirect() in your controller&amp;#8217;s method, you get a 404. Therefore, here&amp;#8217;s /view/person/show.gsp:&lt;/p&gt;
&lt;script src="https://gist.github.com/3911330.js?file=show.gsp"&gt;&lt;/script&gt;&lt;noscript&gt;&lt;pre&gt;&lt;code class="language-gosu gosu"&gt;You just loaded ${person.firstname} ${person.lastname}.
&lt;/code&gt;&lt;/pre&gt;&lt;/noscript&gt;
&lt;h3&gt;Grails tags&lt;/h3&gt;
&lt;p&gt;Grails defines a bunch of tags, like,and so on. I&amp;#8217;d read up on what&amp;#8217;s available and make use them.&lt;/p&gt;
&lt;h3&gt;JSON/Ajax/XML&lt;/h3&gt;
&lt;p&gt;Use &amp;#8220;as JSON&amp;#8221; or &amp;#8220;as XML&amp;#8221; to render something in place of a .gsp view:&lt;/p&gt;
&lt;script src="https://gist.github.com/3911330.js?file=ajaxShow.groovy"&gt;&lt;/script&gt;&lt;noscript&gt;&lt;pre&gt;&lt;code class="language-groovy groovy"&gt;def ajaxShow() {
	render Person.get( params.personId ) as JSON
}
&lt;/code&gt;&lt;/pre&gt;&lt;/noscript&gt;
&lt;p&gt;This works on lists, maps, whatever.&lt;/p&gt;
&lt;h2&gt;Services&lt;/h2&gt;
&lt;p&gt;Your controllers shouldn&amp;#8217;t really do anything except marshal form/URL input onto models and control application flow (where a user goes and when). Heavy lifting should be deferred to services. Every method in a service is wrapped in a transaction. This can be turned off.&lt;/p&gt;
&lt;h1&gt;Going Further&lt;/h1&gt;
&lt;p&gt;I&amp;#8217;ve described the 2% of Groovy and Grails I use constantly, and ignored 98% of what they can do. I&amp;#8217;ve done full-bore integration of x509 authenticated JEE applications using JPA annotations into Grails, Spring-Security work, Web Services, all that jazz. All of JEE is there, and it can all be configured however you need. HTML5 and JavaScript frameworks are easy to integrate. A huge library of community-driven plugins exists to take care of common stuff, like e-mail integration or security.&lt;/p&gt;
&lt;p&gt;Groovy and Grails just reduce the amount of BS involved, letting you focus on what&amp;#8217;s actually important to your application and its users rather than 5,000 XML files that contain tweaked boilerplate pasted from documentation.&lt;/p&gt;</description>
      <pubDate>Fri, 14 Jun 2013 16:00:30 CDT</pubDate>
      <guid isPermaLink="true">http://compiledammit.com/?p=794</guid>
      <dc:creator>Brian Kotek</dc:creator>
    </item>
    <item>
      <title>When Hotel Alarms Sound, (Fri, Jun 14th)</title>
      <link>http://continuousdeliveryexperience.com/blog/johannes_ullrich/2013/06/when_hotel_alarms_sound__fri_jun_14th_?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;
	I often wondered what an &amp;#39;average&amp;#39; reaction would be to a fire alarm sounding in a hot ...(more)...</description>
      <pubDate>Fri, 14 Jun 2013 13:02:05 CDT</pubDate>
      <guid isPermaLink="true">http://isc.sans.edu/diary.html?storyid=15998&amp;rss</guid>
      <dc:creator>Johannes Ullrich</dc:creator>
    </item>
    <item>
      <title>It’s Déjà vu All Over Again</title>
      <link>http://continuousdeliveryexperience.com/blog/alan_shalloway/2013/06/it_s_d_j_vu_all_over_again?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;div class="field field-name-body field-type-text-with-summary field-label-hidden"&gt;&lt;div class="field-items"&gt;&lt;div class="field-item even"&gt; &lt;p&gt;Several years ago I tried to discuss the need for Lean when Scrum was being used on projects with more than one team.  Ken Schwaber didn’t want to hear this and eventually threw me off the Scrum Development Yahoo discussions group.  I admit, I was talking outside the domain of what he wanted – the pretense was that Scrum wasn’t Lean and the Scrum Development group wasn’t the place to talk about Lean.&lt;/p&gt;
&lt;p&gt;Times have changes – &lt;em&gt;a little.&lt;/em&gt;  We now hear how Scrum &lt;em&gt;is&lt;/em&gt; based on Lean but I have heard little acknowledgement that Lean-thinking, used explicitly, is an essential ingredient for Scrum teams.  At the Scrum gathering I heard of a successful Scrum implementation of a company that had 150-200 folks in it.  I can validate that myself.  Because I had been in there myself, &lt;em&gt;before they were successful with Scrum across the enterprise.&lt;/em&gt;  True, it didn’t take much to get them from successful &lt;em&gt;team&lt;/em&gt; Scrum to successful &lt;em&gt;enterprise&lt;/em&gt; Scrum, but it did take Lean-thinking, value stream mapping and an understanding of Lean-flow to get them there.  While Scrum is a great team process I still contend it is rarely successful at scale because the framework itself does not provide the insights needed to extend it.  If that’s the case, part of the Scrum discussion should be about &lt;em&gt;what is needed to include in the framework.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;For the last few years I have been promoting Kanban, both team-Kanban and the Kanban Method, a transition management method across the entire value stream.  Team-Kanban is best used within a full-value stream view as well, but it doesn’t require the Kanban-Method’s approach.   It is unfortunate that the term Kanban has been so overloaded (see &lt;a href="http://www.netobjectives.com/files/resources/articles/Demystifying-Kanban.pdf"&gt;De-Mystifying Kanban&lt;/a&gt; for a description of all the types of Kanban).   &lt;/p&gt;
&lt;p&gt;Net Objectives is not attached to any one method.  I believe we are the only company that promotes Scrum, XP, Team-Kanban, Kanban Method, SAFe, and Lean, along with technical practices.    Our approach is to see where people are, what their culture is, how much discipline they need, the extent they can form teams, amongst other things.  If you missed our webinar, &lt;a href="http://www.netobjectives.com/business-and-agile-webinar-series"&gt;Beginning an Agile Transformation&lt;/a&gt;, you might want to watch it for a full list of what to look for.&lt;/p&gt;
&lt;p&gt;Our experience enables us to cull the best approach from all of these methods to suit our clients’ needs. Sorry, I’m not trying to make this a sales pitch, anyone can take this approach.  Unfortunately, relatively few consultants do.  I’ll admit I'm writing this blog for practitioners and my advice is &lt;em&gt;don’t decide between methods, learn from each of them&lt;/em&gt;.  In other words, it’s not Scrum Vs Kanban, it’s how do we take the best approach for the needs at hand. This requires understanding the strengths and limitations, particularly where they best apply, of both.&lt;/p&gt;
&lt;p&gt;Since the Lean-Kanban community has been forefront in bringing new methods to the Agile space, I had thought it would behave a bit different from my experience in the Scrum community. Unfortunately, apparently not.  Because Net Objectives uses both Scrum and the Kanban Method, we’ve learned a lot from both.  While the Kanban Method facilitates the creation of effective value streams when true teams can’t be created we’ve seen that teams are truly valuable (see &lt;a href="http://www.netobjectives.com/blogs/day-19-100-know-power-teams"&gt;Know the Power of Teams&lt;/a&gt;). &lt;/p&gt;
&lt;p&gt;I started discussing the value of teams on the Kanban Development board and essentially ran into the same attitude as I had years ago.  First it was – “teams are orthogonal to the method.”  Then it was “let’s not discuss this.”  Then it was “you (meaning me) are not behaving professionally.”  This time I left before getting moderated or thrown off.  But it’s a bit distressing to see the same attitude – &lt;em&gt;“our method is correct, let’s not discuss things that aren’t defined in it.”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Tragic.&lt;/p&gt;
&lt;p&gt;Practitioners – please don’t fall into this trap.  There are many consultants out there not attached to any one method.  Because of this, they often don’t have an accreditation from either the Scrum Alliance or the Lean-Kanban University.  Don’t take that as a negative – it might be a plus.&lt;/p&gt;
&lt;p&gt;Al Shalloway&lt;br /&gt;CEO, Net Objectives&lt;/p&gt;
 &lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="field field-name-field-staff-member field-type-user-reference field-label-above"&gt;&lt;div class="field-label"&gt;Author:&amp;nbsp;&lt;/div&gt;&lt;div class="field-items"&gt;&lt;div class="field-item even"&gt;&lt;a href="/users/al-shalloway"&gt;alshall&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NetObjectivesThoughtsBlog/~4/v4XVKqbgwWE" height="1" width="1"/&gt;</description>
      <pubDate>Fri, 14 Jun 2013 11:05:39 CDT</pubDate>
      <guid isPermaLink="true">1106 at http://www.netobjectives.com</guid>
      <dc:creator>Alan Shalloway</dc:creator>
    </item>
    <item>
      <title>ISC StormCast for Friday, June 14th 2013 http://isc.sans.edu/podcastdetail.html?id=3368, (Fri, Jun 14th)</title>
      <link>http://continuousdeliveryexperience.com/blog/johannes_ullrich/2013/06/isc_stormcast_for_friday_june_14th_2013_http__isc_sans_edu_podcastdetail_html_id_3368__fri_jun_14th_?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>...(more)...</description>
      <pubDate>Fri, 14 Jun 2013 08:04:11 CDT</pubDate>
      <guid isPermaLink="true">http://isc.sans.edu/podcastdetail.html?id=3368</guid>
      <dc:creator>Johannes Ullrich</dc:creator>
    </item>
    <item>
      <title>Thoughts On A Job Done</title>
      <link>http://continuousdeliveryexperience.com/blog/alex_russell/2013/06/thoughts_on_a_job_done?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;Most of the time, when a bit of software you work on floats out of your life and into the collective past, there&amp;#8217;s a sense of mourning. But that&amp;#8217;s not how I feel about Chrome Frame.&lt;/p&gt;
&lt;p&gt;The anodyne &lt;a href="http://blog.chromium.org/2013/06/retiring-chrome-frame.html"&gt;official blog post&lt;/a&gt; noting the retirement six months hence isn&amp;#8217;t the end of something good, it&amp;#8217;s the acknowledgment that we&amp;#8217;re where we wanted to be. Maybe not all of us, but enough to credibly say that the tide has turned. The &lt;a href="http://gs.statcounter.com/#browser_version-ww-monthly-201205-201305"&gt;trend lines are more than hopeful&lt;/a&gt;, and in 6 months any lingering controversy over this looks like it&amp;#8217;ll be moot. Windows XP is dying, IE 6 &amp;amp; 7 are echoes of their former menace, and IE 8 is going the same way. At the front of the pack, which is now most of the world&amp;#8217;s users, new browser releases are reliably being delivered to users without friction. The evergreen bit of the web is expanding, and the whole platform is now improving as a result. This is the world we hoped to enable when Chrome Frame was first taking form.&lt;/p&gt;
&lt;p&gt;I joined Google in December &amp;#8217;08 &lt;em&gt;expressly&lt;/em&gt; because it&amp;#8217;s the sort of company that could do something like Chrome Frame and not screw it up by making it an attention hogging nuisance of a toolbar or a trojan-horse for some other, more &amp;#8220;on brand&amp;#8221; product. GCF has never been that, not because that instinct is somehow missing from people that make it through the hiring process; no, GCF always was a loss-maker and a poor brand ambassador because management accepted that what is good for the web is good for Google and was given the freedom to act in that long-term interest.&lt;/p&gt;
&lt;p&gt;Truth be told, we weren&amp;#8217;t the right folks for the job. MSFT &lt;em&gt;has the freaking source code&lt;/em&gt; for IE. There was always grim joking on the team that they could have put GCF together in a weekend, whereas it took us more than a year and change to make it truly stable. Honestly, if I thought MSFT was the sort of place that would have done something like GCF, I probably would have applied there instead. But in &amp;#8217;08, the odds of that looked slim.&lt;/p&gt;
&lt;p&gt;Having run the idea for something like Chrome Frame past one of the core IE team engineers at MIX that year, the response I got was &amp;#8220;oh, you&amp;#8217;re some kind of a dreamer&amp;#8230;a visionary&amp;#8221;. I automatically associate the word &amp;#8220;visionary&amp;#8221; with &amp;#8220;time-wasting wanker&amp;#8221;, so that was 0 for 2 on the positive adjective front. And discussions with others were roughly on par. Worse, &lt;a href="http://alistapart.com/article/beyonddoctype"&gt;when the IE team &lt;em&gt;did&lt;/em&gt; want to enable a cleaner break with legacy via the &lt;code&gt;X-UA-Compatible&lt;/code&gt; flag&lt;/a&gt;, the web standards community &lt;a href="http://adactio.com/journal/1402/"&gt;flipped out&lt;/a&gt; in a bout of mind-blowing shortsightedness&amp;#8230;and MSFT capitulated. Score 1 for standards, -1 for progress.&lt;/p&gt;
&lt;p&gt;For me, personally, this has never been about browsers and vendors and all the politics wrapped up in those words: it has been about making the web platform better. To do that means reckoning with the problem from the web-developer perspective: any single vendor only ships a &lt;em&gt;part&lt;/em&gt; of the platform that webdevs perceive.&lt;/p&gt;
&lt;p&gt;Web developers don&amp;#8217;t view a single browser version that&amp;#8217;s on hudreds of millions of devices as their platform they way they would view an OS like iOS or Android (which might have much smaller penetration) a &amp;#8220;platforms&amp;#8221;. The promise of the web has always been universal access to content, and web developers don&amp;#8217;t view any leading browser as their platform, they view the full set of browsers that make up the majority of use as their platform. That virtue that both makes the web the survivable, accessible, universal platform that can&amp;#8217;t be replaced as well as the frustrating, slow, uneven development experience that so many complain about.&lt;/p&gt;
&lt;p&gt;The only way to ensure that web developers see the platform improving is to make sure that the trailing edge is moving forward as fast as the leading edge. Just as the oldest cars and power plants are exponentially worse polluters than the most modern ones, browsers encode the same dynamic; if you want to do the most for the world, get the clunkers off the road and put scrubbers on those powerplants. Getting clunkers off the road is what upgrade campaigns are, and GCF has been a scrubber.&lt;/p&gt;
&lt;p&gt;All power plants, no matter how well scrubbed, must eventually be retired. The trend is now clear: the job coming to a close. Most of the world&amp;#8217;s desktop users are now on evergreen browsers, and with the final death of WindowsXP in sight, the rest are on the way out. Webdevs no longer face a single continuous slope of pain. We can consider legacy browsers as the sort of thing we should be building fallback experiences for, not first-class participants in our development process. The goal of making content universally accessible doesn&amp;#8217;t require serving the &lt;em&gt;exact same&lt;/em&gt; experience to everyone. That&amp;#8217;s what has always made the web great, and now&amp;#8217;s the time for non-evergreen browsers to take their place in the fallback bucket, no longer looming large as our biggest collective worry.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m proud to be a small part of the team that made Chrome Frame happen, and I&amp;#8217;m grateful to Google for having given me the chance to do something truly good for the web.&lt;/p&gt;</description>
      <pubDate>Thu, 13 Jun 2013 16:04:15 CDT</pubDate>
      <guid isPermaLink="true">http://infrequently.org/?p=2090</guid>
      <dc:creator>Alex Russell</dc:creator>
    </item>
    <item>
      <title>First milestone of Spring Data release train Babbage arrived</title>
      <link>http://continuousdeliveryexperience.com/blog/oliver_gierke/2013/06/first_milestone_of_spring_data_release_train_babbage_arrived?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>I am pleased to announce the first service milestone release for the Spring Data release train named Babbage. It includes the following modules: Spring Data Commons 1.6 M1 &amp;#8211; Changelog Spring Data JPA 1.4 M1 &amp;#8211; Changelog Spring Data MongoDB 1.3 M1 &amp;#8211; Changelog Spring Data Neo4j 2.3 M1 &amp;#8211; Changelog The first milestone includes  &lt;a href="http://blog.springsource.org/2013/06/10/first-milestone-of-spring-data-release-train-babbage-arrived/"&gt;&lt;em&gt;Read more...&lt;/em&gt;&lt;/a&gt;</description>
      <pubDate>Thu, 13 Jun 2013 13:02:28 CDT</pubDate>
      <guid isPermaLink="true">http://blog.springsource.org/?p=13514</guid>
      <dc:creator>Oliver Gierke</dc:creator>
    </item>
    <item>
      <title>Stupid Little IPv6 Tricks, (Wed, Jun 12th)</title>
      <link>http://continuousdeliveryexperience.com/blog/johannes_ullrich/2013/06/stupid_little_ipv6_tricks__wed_jun_12th_?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;
	With the IPv6 Summit on Friday, various IPv6 related topics are of course on my mind. So I fig ...(more)...</description>
      <pubDate>Thu, 13 Jun 2013 11:00:26 CDT</pubDate>
      <guid isPermaLink="true">http://isc.sans.edu/diary.html?storyid=15992&amp;rss</guid>
      <dc:creator>Johannes Ullrich</dc:creator>
    </item>
    <item>
      <title>ISC StormCast for Thursday, June 13th 2013 http://isc.sans.edu/podcastdetail.html?id=3365, (Thu, Jun 13th)</title>
      <link>http://continuousdeliveryexperience.com/blog/johannes_ullrich/2013/06/isc_stormcast_for_thursday_june_13th_2013_http__isc_sans_edu_podcastdetail_html_id_3365__thu_jun_13th_?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>...(more)...</description>
      <pubDate>Thu, 13 Jun 2013 08:00:41 CDT</pubDate>
      <guid isPermaLink="true">http://isc.sans.edu/podcastdetail.html?id=3365</guid>
      <dc:creator>Johannes Ullrich</dc:creator>
    </item>
    <item>
      <title>Microsoft June 2013 Black Tuesday Overview, (Tue, Jun 11th)</title>
      <link>http://continuousdeliveryexperience.com/blog/johannes_ullrich/2013/06/microsoft_june_2013_black_tuesday_overview__tue_jun_11th_?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;
	Overview of the &lt;a href="http://technet.microsoft ...(more)...</description>
      <pubDate>Wed, 12 Jun 2013 16:16:13 CDT</pubDate>
      <guid isPermaLink="true">http://isc.sans.edu/diary.html?storyid=15977&amp;rss</guid>
      <dc:creator>Johannes Ullrich</dc:creator>
    </item>
    <item>
      <title>Other Microsoft Black Tuesday News, (Tue, Jun 11th)</title>
      <link>http://continuousdeliveryexperience.com/blog/johannes_ullrich/2013/06/other_microsoft_black_tuesday_news__tue_jun_11th_?utm_source=blogitem&amp;utm_medium=rss&amp;utm_campaign=blogrss</link>
      <description>&lt;p&gt;
	Microsoft &lt;a href="http://technet.microsoft ...(more)...</description>
      <pubDate>Wed, 12 Jun 2013 13:03:10 CDT</pubDate>
      <guid isPermaLink="true">http://isc.sans.edu/diary.html?storyid=15983&amp;rss</guid>
      <dc:creator>Johannes Ullrich</dc:creator>
    </item>
  </channel>
</rss>

