<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Managed Chaos &#187; Tips</title>
	<atom:link href="http://blogs.agilefaqs.com/category/tips/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogs.agilefaqs.com</link>
	<description>Naresh Jain&#039;s Random Thoughts on Software Development and Adventure Sports</description>
	<lastBuildDate>Sat, 21 Jan 2012 11:54:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Introducing Churn</title>
		<link>http://blogs.agilefaqs.com/2011/10/22/introducing-churn/</link>
		<comments>http://blogs.agilefaqs.com/2011/10/22/introducing-churn/#comments</comments>
		<pubDate>Sat, 22 Oct 2011 12:21:48 +0000</pubDate>
		<dc:creator>Naresh Jain</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Coaching]]></category>
		<category><![CDATA[Metrics]]></category>
		<category><![CDATA[Organizational]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[anti-patterns]]></category>
		<category><![CDATA[churn]]></category>
		<category><![CDATA[Estimation]]></category>
		<category><![CDATA[heavy dependecies]]></category>

		<guid isPermaLink="false">http://blogs.agilefaqs.com/?p=1833</guid>
		<description><![CDATA[How to destroy a team by introducing various forms of churn? Have the Product Management change high-level vision and priority frequently. Stop the teams from collaborating with other teams, Architects and important stakeholders. Make sure testing and integration is done late in the cycle. As soon as a team member gains enough experience on the [...]]]></description>
			<content:encoded><![CDATA[<p>How to destroy a team by introducing various forms of churn?</p>
<ul>
<li>Have the Product Management <span style="text-decoration: underline; color: #333333;">change high-level vision and priority frequently</span>.</li>
<li>Stop the teams from <span style="text-decoration: underline; color: #333333;">collaborating</span> with other teams, Architects and important stakeholders.</li>
<li>Make sure <span style="text-decoration: underline; color: #333333;">testing and integration</span> is done <span style="text-decoration: underline; color: #333333;"><span style="text-decoration: underline;">late in the cycle</span></span>.</li>
<li>As soon as a team member gains enough experience on the team <span style="text-decoration: underline; color: #333333;"><span style="text-decoration: underline;">move</span></span> him/her out of the team to play other roles.</li>
<li>In critical areas of the system, force the team to produce a <span style="text-decoration: underline; color: #333333;">poor implementation</span>.</li>
<li>Structure the teams <span style="text-decoration: underline; color: #333333;">architecturally</span> to ensure there is <span style="text-decoration: underline; color: #333333;">heavy inter-dependencies</span> between them.</li>
<li>Very closely monitor team&#8217;s <span style="text-decoration: underline; color: #333333;">commitment</span> and ensure they feel <span style="text-decoration: underline; color: #333333;">embarrassed</span> for estimating wrongly.</li>
<li>Ensure the <span style="text-decoration: underline; color: #333333;">first 15-30 mins</span> of every <span style="text-decoration: underline; color: #333333;">meeting</span> is spent on <span style="text-decoration: underline; color: #333333;">useless talk</span>, before getting to the crux of the matter.</li>
<li><span style="text-decoration: underline; color: #333333;"><span style="text-decoration: underline;">Measure</span> Churn</span> and put clear process in place to minimize churn <img src='http://blogs.agilefaqs.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blogs.agilefaqs.com/2011/10/22/introducing-churn/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Pharma Hack: Spammy Links visible to only Search Engine Bots in WordPress, CMS Made Simple and TikiWiki</title>
		<link>http://blogs.agilefaqs.com/2011/04/10/pharma-hack-spammy-links-visible-to-only-search-engine-bots-in-wordpress-cms-made-simple-and-tikiwiki/</link>
		<comments>http://blogs.agilefaqs.com/2011/04/10/pharma-hack-spammy-links-visible-to-only-search-engine-bots-in-wordpress-cms-made-simple-and-tikiwiki/#comments</comments>
		<pubDate>Sun, 10 Apr 2011 10:37:11 +0000</pubDate>
		<dc:creator>Naresh Jain</dc:creator>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Hosting]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Backlinks]]></category>
		<category><![CDATA[CMS Made Simple]]></category>
		<category><![CDATA[eval]]></category>
		<category><![CDATA[Google Alerts]]></category>
		<category><![CDATA[Google Cache]]></category>
		<category><![CDATA[gzdeflate]]></category>
		<category><![CDATA[MIME base64]]></category>
		<category><![CDATA[mysqldump]]></category>
		<category><![CDATA[Page Rank]]></category>
		<category><![CDATA[Pharma Hack]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Search Engine]]></category>
		<category><![CDATA[Spammy Links]]></category>
		<category><![CDATA[tikiwiki]]></category>
		<category><![CDATA[User Agent Switcher]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blogs.agilefaqs.com/?p=1629</guid>
		<description><![CDATA[Over the last 6 months, I&#8217;ve been blessed with various pharma hacks on almost all my site. (http://agilefaqs.com, http://agileindia.org, http://sdtconf.com, http://freesetglobal.com, http://agilecoachcamp.org, to name a few.) This is one of the most clever hacks I&#8217;ve seen. As a normal user, if you visit the site, you won&#8217;t see any difference. Except when search engine bots [...]]]></description>
			<content:encoded><![CDATA[<p>Over the last 6 months, I&#8217;ve been blessed with various pharma hacks on almost all my site.</p>
<p>(<a href="http://agilefaqs.com">http://agilefaqs.com</a>, <a href="http://agileindia.org">http://agileindia.org</a>, <a href="http://sdtconf.com">http://sdtconf.com</a>, <a href="http://freesetglobal.com">http://freesetglobal.com</a>, <a href="http://agilecoachcamp.org">http://agilecoachcamp.org</a>, to name a few.)</p>
<p>This is one of the most clever hacks I&#8217;ve seen. As a normal user, if you visit the site, you won&#8217;t see any difference. Except when search engine bots visit the page, the page shows up with a whole bunch of spammy links, either at the top of the page or in the footer. Sample below:</p>
<p><a href="http://blogs.agilefaqs.com/wp-content/uploads/2011/04/hack.jpg"><img class="aligncenter size-full wp-image-1630" title="hack" src="http://blogs.agilefaqs.com/wp-content/uploads/2011/04/hack.jpg" alt="" width="264" height="464" /></a></p>
<p>Clearly the hacker is after search engine ranking via backlinks. But in the process suddenly you&#8217;ve become a major pharma pimp.</p>
<p>There are many interesting things about this hack:</p>
<ul>
<li>1. It affects all php sites. <a href="http://wordpress.org/">WordPress</a> tops the list. Others like <a href="http://www.cmsmadesimple.org/">CMS Made Simple</a> and <a href="http://info.tiki.org/Tiki+Wiki+CMS+Groupware">TikiWiki</a> are also attacked by this hack.</li>
<li>2. If you search for pharma keywords on your server (both files and database) you won&#8217;t find anything. The spammy content is first encoded with <em>MIME base64</em> and then deflated using <em>gzdeflate</em>. And at run time the content is eval&#8217;ed in PHP.</li>
</ul>
<p>This is how the hacked PHP code looks like:</p>
<p><a href="http://blogs.agilefaqs.com/wp-content/uploads/2011/04/evalcode.png"><img class="aligncenter size-medium wp-image-1632" title="evalcode" src="http://blogs.agilefaqs.com/wp-content/uploads/2011/04/evalcode-300x40.png" alt="" width="300" height="40" /></a></p>
<p>If you inflate and decode this code it looks like:</p>
<p><a href="http://blogs.agilefaqs.com/wp-content/uploads/2011/04/1.png"><img class="aligncenter size-medium wp-image-1637" title="1" src="http://blogs.agilefaqs.com/wp-content/uploads/2011/04/1-300x296.png" alt="" width="300" height="296" /></a></p>
<p><a href="http://blogs.agilefaqs.com/wp-content/uploads/2011/04/2.png"><img class="aligncenter size-medium wp-image-1636" title="2" src="http://blogs.agilefaqs.com/wp-content/uploads/2011/04/2-300x245.png" alt="" width="300" height="245" /></a></p>
<p><a href="http://blogs.agilefaqs.com/wp-content/uploads/2011/04/3.png"><img class="aligncenter size-medium wp-image-1635" title="3" src="http://blogs.agilefaqs.com/wp-content/uploads/2011/04/3-300x211.png" alt="" width="300" height="211" /></a></p>
<ul>
<li>3. Well documented and mostly self descriptive code.</li>
<li>4. Different PHP frameworks have been hacked using slightly different approach:
<ul>
<li>In <strong>WordPress</strong>, the hackers created a new file called <span style="color: #0000ff;"><em>wp-login.php</em></span> inside the wp-includes folder containing some spammy code. They then modified the <span style="color: #0000ff;"><em>wp-config.php</em></span> file to include(&#8216;wp-includes/wp-login.php&#8217;). Inside the wp-login.php code they further include actually spammy links from a folder inside <em><span style="color: #0000ff;">wp-content/themes/mytheme/images/out/&#8217;.$dir&#8217;</span></em></li>
<li>In <strong>TikiWiki</strong>, the hackers modified the <span style="color: #0000ff;"><em>/lib/structures/structlib.php</em></span> to directly include the spammy code</li>
<li>In <strong>CMS Made Simple</strong>, the hackers created a new file called <span style="color: #0000ff;"><em>modules/mod-last_visitor.php</em></span> to directly include the spammy code.<br />
Again the interesting part here is, when you do <em>ls -al</em> you see:&nbsp;</p>
<p>-rwxr-xr-x  1 username groupname  1551   2008-07-10 06:46 mod-last_tracker_items.php</p>
<p>-rwxr-xr-x  1 username groupname 44357 <span style="color: #0000ff;"><strong><em>1969-12-31 16:00 mod-last_visitor.php</em></strong></span></p>
<p>-rwxr-xr-x  1 username groupname   668    2008-03-30 13:06 mod-last_visitors.php</p>
<p>In case of WordPress the newly created file had the same time stamp as the rest of the files in that folder</li>
</ul>
</li>
</ul>
<h3>How do you find out if your site is hacked?</h3>
<ul>
<li>1. After searching for your site in Google, check if the Cached version of your site contains anything unexpected.</li>
</ul>
<p><a href="http://blogs.agilefaqs.com/wp-content/uploads/2011/04/google.png"><img class="aligncenter size-medium wp-image-1642" title="google" src="http://blogs.agilefaqs.com/wp-content/uploads/2011/04/google-300x104.png" alt="" width="300" height="104" /></a></p>
<ul>
<li>2. Using <a href="http://chrispederick.com/work/user-agent-switcher/">User Agent Switcher</a>, a Firefox extension, you can view your site as it appears to Search Engine bot. Again look for anything suspicious.</li>
</ul>
<p><a href="http://blogs.agilefaqs.com/wp-content/uploads/2011/04/useragent.png"><img class="aligncenter size-medium wp-image-1643" title="useragent" src="http://blogs.agilefaqs.com/wp-content/uploads/2011/04/useragent-300x130.png" alt="" width="300" height="130" /></a></p>
<ul>
<li>3. Set up Google Alerts on your site to get notification when something you don&#8217;t expect to show up on your site, shows up.</li>
</ul>
<p><a href="http://blogs.agilefaqs.com/wp-content/uploads/2011/04/googlealerts.png"><img class="aligncenter size-full wp-image-1644" title="googlealerts" src="http://blogs.agilefaqs.com/wp-content/uploads/2011/04/googlealerts.png" alt="" width="389" height="300" /></a></p>
<ul>
<li>4. Set up a cron job on your server to run the following commands at the top-level web directory every night and email you the results:
<ul>
<li><em><span style="color: #0000ff;">mysqldump</span></em> your_db into a file and run</li>
<li><span style="color: #0000ff;"><em><strong>find . | xargs grep &#8220;eval(gzinflate(base64_decode(&#8220;</strong></em></span></li>
</ul>
</li>
</ul>
<p>If the grep command finds a match, take the encoded content and check what it means using the following site: <a href="http://www.tareeinternet.com/scripts/decrypt.php">http://www.tareeinternet.com/scripts/decrypt.php</a></p>
<p>If it looks suspicious, clean up the file and all its references.</p>
<p>Also there are many other blogs explaining similar, but different attacks:</p>
<p><!-- p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica} --></p>
<ul>
<li><a href="http://www.htmlcenter.com/blog/check-your-sites-with-google/">Check Your Sites With Google</a></li>
<li><a href="http://www.htmlcenter.com/blog/webshell-hack-an-update/">WebShell Hack – An Update</a></li>
<li><a href="http://blog.sucuri.net/2010/07/understanding-and-cleaning-the-pharma-hack-on-wordpress.html">Understanding and cleaning the Pharma hack on WordPress</a></li>
<li><a href="http://linux.byexamples.com/archives/397/wordpress-exploit-we-been-hit-by-hidden-spam-link-injection/">WordPress Exploit: We Been Hit By Hidden Spam Link Injection</a></li>
<li><a href="http://digwp.com/2009/06/spam-link-injection-hacked/">Spam Link Injection Hacked (and How I Hopefully Fixed It)</a></li>
<li><a href="http://wpblogger.com/google-cloacking-wordpress-hack.php">Google Cloaking Hack Targeting WordPress &amp; How to Fix It</a></li>
<li><a href="http://www.pearsonified.com/2010/04/wordpress-pharma-hack.php">How to Diagnose and Remove the WordPress Pharma Hack</a></li>
</ul>
<p>Hope you don&#8217;t have to deal with this mess.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.agilefaqs.com/2011/04/10/pharma-hack-spammy-links-visible-to-only-search-engine-bots-in-wordpress-cms-made-simple-and-tikiwiki/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ordering Imported Agile/Computer Science Books in India</title>
		<link>http://blogs.agilefaqs.com/2011/01/30/ordering-imported-agilecomputer-science-books-in-india/</link>
		<comments>http://blogs.agilefaqs.com/2011/01/30/ordering-imported-agilecomputer-science-books-in-india/#comments</comments>
		<pubDate>Sun, 30 Jan 2011 15:56:28 +0000</pubDate>
		<dc:creator>Naresh Jain</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[flipkart]]></category>
		<category><![CDATA[shroff publishers]]></category>

		<guid isPermaLink="false">http://blogs.agilefaqs.com/?p=1561</guid>
		<description><![CDATA[If you are looking for some popular computer books in India and don&#8217;t find them easily in Low Price Edition, then you should check the following site: http://www.shroffpublishers.com/ They have a huge number of books at a very good price. You can talk to one of their Distributors or Retailers depending on how many books [...]]]></description>
			<content:encoded><![CDATA[<p>If you are looking for some popular computer books in India and don&#8217;t find them easily in Low Price Edition, then you should check the following site:</p>
<p><a rel="nofollow" href="http://www.shroffpublishers.com/" target="_blank">http://www.shroffpublishers.com/</a></p>
<p>They have a huge number of books at a very good price. You can talk to one of their <a href="http://www.shroffpublishers.com/ourcontacts.aspx?view=1" target="_blank">Distributors</a> or <a href="http://www.shroffpublishers.com/ourcontacts.aspx?view=2" target="_blank">Retailers</a> depending on how many books you need.</p>
<p>If you don&#8217;t find the book you are looking for, then your next best option is: <a href="http://www.flipkart.com/" target="_blank">http://www.flipkart.com/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.agilefaqs.com/2011/01/30/ordering-imported-agilecomputer-science-books-in-india/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Basics of making Webpages Search Engine Friendly</title>
		<link>http://blogs.agilefaqs.com/2011/01/25/basics-of-making-webpages-search-engine-friendly/</link>
		<comments>http://blogs.agilefaqs.com/2011/01/25/basics-of-making-webpages-search-engine-friendly/#comments</comments>
		<pubDate>Mon, 24 Jan 2011 20:34:39 +0000</pubDate>
		<dc:creator>Naresh Jain</dc:creator>
				<category><![CDATA[Hosting]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[AboutUs]]></category>
		<category><![CDATA[Backlinks]]></category>
		<category><![CDATA[keywords]]></category>
		<category><![CDATA[metatags]]></category>
		<category><![CDATA[onpage optimization]]></category>
		<category><![CDATA[Social media distribution]]></category>

		<guid isPermaLink="false">http://blogs.agilefaqs.com/?p=1551</guid>
		<description><![CDATA[I&#8217;m just learning the basics of how to make webpages easily searchable. Search Engine Optimization (SEO) is a vast topics, in this blog, I won&#8217;t even touch the surface. Following are some simple things I learned today that are considered to be some basic, website hygiene stuff: Titles: The title of a web page appears [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m just learning the basics of how to make webpages easily searchable. Search Engine Optimization (SEO) is a vast topics, in this blog, I won&#8217;t even touch the surface.</p>
<p>Following are some simple things I learned today that are considered to be some basic, website hygiene stuff:</p>
<ul>
<li><strong>Titles</strong>: The title of a web page appears as a clickable link in search results and bookmarks. A descriptive, compelling page title with relevant keywords can increase the number of people visiting your site. Search engines view the text of the title tag as a strong indication of what the page is about. Accurate keywords in the title tag can help the page rank better in search results. A title tag should have fewer than 70 characters, including spaces. Major search engines won&#8217;t display more than that.</li>
<li><strong>Description Meta-tags</strong>: The description meta-tag should tell searchers what a web page is about. It is often displayed below the title in search results, and helps people decide if they want to visit that website. Search engines will read 200 to 250 characters, but usually display only 150, including spaces. The first 150 characters of the meta description should contain the most important keywords for that web page.</li>
<li><strong>H1 Heading</strong>: The H1 heading is an important sentence or phrase on a web page that quickly and clearly tells people and search engines what they can expect to find there. The H1 heading for a page should be different from its title. Each can target different important keywords for better SEO.</li>
<li><strong>Outbound Links</strong>: Outbound links tell search engines which websites you find valuable and relevant. Including links to relevant sites is good for your website&#8217;s standing with search engines. Outbound links also help search engines classify your site in relationship to others.</li>
<li><strong>Inbound Links</strong>: More number of website linking to your site is always better. Most search engines look at the reputation of the sites linking to your site. They also consider the anchor text (keywords) used to link to your site.
<ul>
<li><strong>Self Links</strong>: Link back to your archives frequently when creating new content. Make sure your webpages are all well connected with proper anchor text (keywords) used to link back.</li>
</ul>
</li>
<li><strong>Create a sitemap</strong>: A site map (or sitemap) is a list of pages of you web site accessible to crawlers or users. The fewer clicks necessary to get to a page on your website, the better.</li>
<li><strong>Pretty URLs</strong>: Easy to understand URLs, esp. the ones that contain the correct keywords are more search engine friendly compared to cryptic URLs with many request parameters. Favor mysite.com/ablum/track/page over mysite.com/process?albumname=album&amp;trackname=track&amp;page=name</li>
<li><strong>Avoid non-Linkable Content</strong>: Some things might look pretty, but it might not good from SEO point of view. For example some flash based content or some javascript based content to which you can&#8217;t link.</li>
<li><strong>Image descriptions</strong>: AKA alt text &#8211; is the best way to describe images to search engines and to visitors using screen readers. Describing images on a web page with alt text can help the page rank higher in search results if you include important and relevant keywords.</li>
<li><strong>Keywords Meta-tag</strong>: Search engines don&#8217;t use the keyword meta-tag to determine what the page is about. Search engines detect keywords by looking at how often each word or phrase occurs on the page, and where it occurs. The words that appear most often and prominently are judged to be keywords. If the meta keywords and detected keywords match, that means the desired keywords appear frequently enough, and in the right places.</li>
<li><strong>First 250 words</strong>: The first 250 words of on a web page are the most important. They tell people and search engines what the page is about. The two to three most important keywords for any web page should appear about five times each in the first 250 words of web page copy. They should appear two to three times each for every additional 250 words on the page.</li>
<li><strong>Robots.txt file</strong>: A website&#8217;s robots.txt file is used to let search engines know which pages or sections of the site shouldn&#8217;t be indexed.</li>
<li><strong>Canonical URL</strong>: A canonical URL is the standard URL for a web page. Because there are many ways a URL can be written, it&#8217;s possible for the same web page content to live at several different addresses, or URLs. This becomes a problem when you&#8217;re trying to enhance the visibility of a web page in search results. One factor that makes a web page rank higher in search results is the number and quality of other websites that link to it. If a web page is useful enough that lots of people create links to it, you don&#8217;t want to dilute the value of those links by having them spread across two or more URLs. Use a 301 redirect on any other version of that web page to get people &#8211; and search engines &#8211; to the standard version. Some common mistake people do:
<ul>
<li>Leave both www.mysite.com and mysite.com in place.</li>
<li>Leave default documents directly accessible. (mysite.com/ and mysite.com/index.html) More details: <a href="http://www.aboutus.org/Learn/Twin-Home-Pages:-Classic-SEO-Mistake" target="_blank">Twin Home Pages: Classic SEO Mistake</a></li>
</ul>
</li>
<li><strong>Web Presence</strong>: Having as much information and links about your website on the web as possible is key. Let it me other people&#8217;s website, news sharing and community sites, various social media sites or any other site which many people refer to. <a href="http://www.alexa.com/" target="_blank">Alexa</a> and <a href="http://siteanalytics.compete.com/" target="_blank">Compete</a> are two companies which give you a pretty good analysis of your web presence.</li>
<li><strong>Fresh Content</strong>:  The best sites for users, and consequently for search engines, are full of often-updated, useful information about a given service, product, topic or discipline. Social media distribution via Blogs, Microblog (Twitter), Discussion forums, User Comments, etc. are great in this regard.</li>
</ul>
<p>Big thanks to <a href="http://www.aboutus.org/" target="_blank">AboutUs.org</a> for helping me understand these basic concepts.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.agilefaqs.com/2011/01/25/basics-of-making-webpages-search-engine-friendly/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Change WordPress Table Prefix using SQL Scripts</title>
		<link>http://blogs.agilefaqs.com/2010/09/07/change-wordpress-table-prefix-using-sql-scripts/</link>
		<comments>http://blogs.agilefaqs.com/2010/09/07/change-wordpress-table-prefix-using-sql-scripts/#comments</comments>
		<pubDate>Tue, 07 Sep 2010 16:47:30 +0000</pubDate>
		<dc:creator>Naresh Jain</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Hosting]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[database permissions]]></category>
		<category><![CDATA[Word Press]]></category>
		<category><![CDATA[WP Security Scan]]></category>

		<guid isPermaLink="false">http://blogs.agilefaqs.com/?p=1488</guid>
		<description><![CDATA[WP Security Scan Plugin suggests that wordpress users should rename the default wordpress table prefix of wp_ to something else. When I try to do so, I get the following error: Your User which is used to access your WordPress Tables/Database, hasn&#8217;t enough rights( is missing ALTER-right) to alter your Tablestructure. Please visit the plugin [...]]]></description>
			<content:encoded><![CDATA[<p>WP Security Scan Plugin suggests that wordpress users should rename the default wordpress table prefix of wp_ to something else. When I try to do so, I get the following error:</p>
<blockquote><p>Your User which is used to access your WordPress Tables/Database, hasn&#8217;t enough rights( is missing ALTER-right) to alter your Tablestructure. Please visit the plugin documentation for more information. If you believe you have alter rights, please contact the plugin author for assistance.</p></blockquote>
<p>Even though the database user has all the required permissions, I was not successful.</p>
<p>Then I stumbled across <a href="http://tdot-blog.com/wordpress/6-simple-steps-to-change-your-table-prefix-in-wordpress" target="_blank">this blog</a> which shows how to manually update the table prefix.</p>
<p>Inspired by this blog I came up with the following steps to change wordpress table prefix using SQL Scripts.</p>
<p>1- Take a backup</p>
<p>You are about to change your WordPress table structure, it&#8217;s recommend you take a backup first.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">mysqldump -uuser_name <span style="color: #660033;">-ppassword</span> <span style="color: #660033;">-h</span> host db_name <span style="color: #000000; font-weight: bold;">&gt;</span> dbname_backup_date.sql</pre></div></div>

<p>2- Edit your wp-config.php file and change</p>
<blockquote><p>$table_prefix = ‘wp_’;</p></blockquote>
<p>to something like</p>
<blockquote><p>$table_prefix = ‘your_prefix_’;</p></blockquote>
<p>3- Change all your WordPress table names</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;">$mysql <span style="color: #66cc66;">-</span>uuser_name <span style="color: #66cc66;">-</span>ppassword <span style="color: #66cc66;">-</span>h host db_name
&nbsp;
<span style="color: #993333; font-weight: bold;">RENAME</span> <span style="color: #993333; font-weight: bold;">TABLE</span> wp_blc_filters <span style="color: #993333; font-weight: bold;">TO</span> your_prefix_blc_filters;
<span style="color: #993333; font-weight: bold;">RENAME</span> <span style="color: #993333; font-weight: bold;">TABLE</span> wp_blc_instances <span style="color: #993333; font-weight: bold;">TO</span> your_prefix_blc_instances;
<span style="color: #993333; font-weight: bold;">RENAME</span> <span style="color: #993333; font-weight: bold;">TABLE</span> wp_blc_links <span style="color: #993333; font-weight: bold;">TO</span> your_prefix_blc_links;
<span style="color: #993333; font-weight: bold;">RENAME</span> <span style="color: #993333; font-weight: bold;">TABLE</span> wp_blc_synch <span style="color: #993333; font-weight: bold;">TO</span> your_prefix_blc_synch;
<span style="color: #993333; font-weight: bold;">RENAME</span> <span style="color: #993333; font-weight: bold;">TABLE</span> wp_captcha_keys <span style="color: #993333; font-weight: bold;">TO</span> your_prefix_captcha_keys ;
<span style="color: #993333; font-weight: bold;">RENAME</span> <span style="color: #993333; font-weight: bold;">TABLE</span> wp_commentmeta <span style="color: #993333; font-weight: bold;">TO</span> your_prefix_commentmeta;
<span style="color: #993333; font-weight: bold;">RENAME</span> <span style="color: #993333; font-weight: bold;">TABLE</span> wp_comments <span style="color: #993333; font-weight: bold;">TO</span> your_prefix_comments ;
<span style="color: #993333; font-weight: bold;">RENAME</span> <span style="color: #993333; font-weight: bold;">TABLE</span> wp_links <span style="color: #993333; font-weight: bold;">TO</span> your_prefix_links;
<span style="color: #993333; font-weight: bold;">RENAME</span> <span style="color: #993333; font-weight: bold;">TABLE</span> wp_options <span style="color: #993333; font-weight: bold;">TO</span> your_prefix_options;
<span style="color: #993333; font-weight: bold;">RENAME</span> <span style="color: #993333; font-weight: bold;">TABLE</span> wp_postmeta <span style="color: #993333; font-weight: bold;">TO</span> your_prefix_postmeta ;
<span style="color: #993333; font-weight: bold;">RENAME</span> <span style="color: #993333; font-weight: bold;">TABLE</span> wp_posts <span style="color: #993333; font-weight: bold;">TO</span> your_prefix_posts;
<span style="color: #993333; font-weight: bold;">RENAME</span> <span style="color: #993333; font-weight: bold;">TABLE</span> wp_shorturls <span style="color: #993333; font-weight: bold;">TO</span> your_prefix_shorturls;
<span style="color: #993333; font-weight: bold;">RENAME</span> <span style="color: #993333; font-weight: bold;">TABLE</span> wp_sk2_logs <span style="color: #993333; font-weight: bold;">TO</span> your_prefix_sk2_logs ;
<span style="color: #993333; font-weight: bold;">RENAME</span> <span style="color: #993333; font-weight: bold;">TABLE</span> wp_sk2_spams <span style="color: #993333; font-weight: bold;">TO</span> your_prefix_sk2_spams;
<span style="color: #993333; font-weight: bold;">RENAME</span> <span style="color: #993333; font-weight: bold;">TABLE</span> wp_term_relationships <span style="color: #993333; font-weight: bold;">TO</span> your_prefix_term_relationships ;
<span style="color: #993333; font-weight: bold;">RENAME</span> <span style="color: #993333; font-weight: bold;">TABLE</span> wp_term_taxonomy <span style="color: #993333; font-weight: bold;">TO</span> your_prefix_term_taxonomy;
<span style="color: #993333; font-weight: bold;">RENAME</span> <span style="color: #993333; font-weight: bold;">TABLE</span> wp_terms <span style="color: #993333; font-weight: bold;">TO</span> your_prefix_terms;
<span style="color: #993333; font-weight: bold;">RENAME</span> <span style="color: #993333; font-weight: bold;">TABLE</span> wp_ts_favorites <span style="color: #993333; font-weight: bold;">TO</span> your_prefix_ts_favorites ;
<span style="color: #993333; font-weight: bold;">RENAME</span> <span style="color: #993333; font-weight: bold;">TABLE</span> wp_ts_mine <span style="color: #993333; font-weight: bold;">TO</span> your_prefix_ts_mine;
<span style="color: #993333; font-weight: bold;">RENAME</span> <span style="color: #993333; font-weight: bold;">TABLE</span> wp_tweetbacks <span style="color: #993333; font-weight: bold;">TO</span> your_prefix_tweetbacks ;
<span style="color: #993333; font-weight: bold;">RENAME</span> <span style="color: #993333; font-weight: bold;">TABLE</span> wp_usermeta <span style="color: #993333; font-weight: bold;">TO</span> your_prefix_usermeta ;
<span style="color: #993333; font-weight: bold;">RENAME</span> <span style="color: #993333; font-weight: bold;">TABLE</span> wp_users <span style="color: #993333; font-weight: bold;">TO</span> your_prefix_users;
<span style="color: #993333; font-weight: bold;">RENAME</span> <span style="color: #993333; font-weight: bold;">TABLE</span> wp_yarpp_keyword_cache <span style="color: #993333; font-weight: bold;">TO</span> your_prefix_yarpp_keyword_cache;
<span style="color: #993333; font-weight: bold;">RENAME</span> <span style="color: #993333; font-weight: bold;">TABLE</span> wp_yarpp_related_cache <span style="color: #993333; font-weight: bold;">TO</span> your_prefix_yarpp_related_cache;</pre></div></div>

<p>4- Edit wp_options table</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">UPDATE</span> your_prefix_options <span style="color: #993333; font-weight: bold;">SET</span> option_name<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'your_prefix_user_roles'</span> <span style="color: #993333; font-weight: bold;">WHERE</span> option_name<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'wp_user_roles'</span>;</pre></div></div>

<p>5- Edit wp_usermeta</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">UPDATE</span> your_prefix_usermeta <span style="color: #993333; font-weight: bold;">SET</span> meta_key<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'your_prefix_autosave_draft_ids'</span> <span style="color: #993333; font-weight: bold;">WHERE</span> meta_key<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'wp_autosave_draft_ids'</span>;                 
<span style="color: #993333; font-weight: bold;">UPDATE</span> your_prefix_usermeta <span style="color: #993333; font-weight: bold;">SET</span> meta_key<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'your_prefix_capabilities'</span> <span style="color: #993333; font-weight: bold;">WHERE</span> meta_key<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'wp_capabilities'</span>;                       
<span style="color: #993333; font-weight: bold;">UPDATE</span> your_prefix_usermeta <span style="color: #993333; font-weight: bold;">SET</span> meta_key<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'your_prefix_dashboard_quick_press_last_post_id'</span> <span style="color: #993333; font-weight: bold;">WHERE</span> meta_key<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'wp_dashboard_quick_press_last_post_id'</span>; 
<span style="color: #993333; font-weight: bold;">UPDATE</span> your_prefix_usermeta <span style="color: #993333; font-weight: bold;">SET</span> meta_key<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'your_prefix_user-settings'</span> <span style="color: #993333; font-weight: bold;">WHERE</span> meta_key<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'wp_user-settings'</span>;                      
<span style="color: #993333; font-weight: bold;">UPDATE</span> your_prefix_usermeta <span style="color: #993333; font-weight: bold;">SET</span> meta_key<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'your_prefix_user-settings-time'</span> <span style="color: #993333; font-weight: bold;">WHERE</span> meta_key<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'wp_user-settings-time'</span>;                 
<span style="color: #993333; font-weight: bold;">UPDATE</span> your_prefix_usermeta <span style="color: #993333; font-weight: bold;">SET</span> meta_key<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'your_prefix_usersettings'</span> <span style="color: #993333; font-weight: bold;">WHERE</span> meta_key<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'wp_usersettings'</span>;                       
<span style="color: #993333; font-weight: bold;">UPDATE</span> your_prefix_usermeta <span style="color: #993333; font-weight: bold;">SET</span> meta_key<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'your_prefix_usersettingstime'</span> <span style="color: #993333; font-weight: bold;">WHERE</span> meta_key<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'wp_usersettingstime'</span>;</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://blogs.agilefaqs.com/2010/09/07/change-wordpress-table-prefix-using-sql-scripts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile India 2010 Conference: Panel and Lightning Talks</title>
		<link>http://blogs.agilefaqs.com/2010/07/05/agile-india-2010-conference-panel-and-lightning-talks/</link>
		<comments>http://blogs.agilefaqs.com/2010/07/05/agile-india-2010-conference-panel-and-lightning-talks/#comments</comments>
		<pubDate>Mon, 05 Jul 2010 07:35:03 +0000</pubDate>
		<dc:creator>Naresh Jain</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[agile india]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Conference]]></category>
		<category><![CDATA[post modern agile]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[agile bengaluru 2010]]></category>
		<category><![CDATA[agile mumbai 2010]]></category>
		<category><![CDATA[ASCI]]></category>
		<category><![CDATA[Industrial Logic]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://blogs.agilefaqs.com/?p=1421</guid>
		<description><![CDATA[Agile Mumbai 2010 &#8211; Lightning Talks Agile Mumbai 2010 &#8211; Panel Agile Bengaluru 2010 &#8211; Panel]]></description>
			<content:encoded><![CDATA[<div align="center" style="margin-bottom: 1em;">
Agile Mumbai 2010 &#8211; Lightning Talks<br />
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="480" height="312" id="viddlerplayer-4dc62a73"><param name="movie" value="http://www.viddler.com/player/4dc62a73/" /><param name="autoplay" value="f" /><param name="disablebranding" value="f" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /><param name="name" value="viddlerplayer-4dc62a73" /><embed src="http://www.viddler.com/player/4dc62a73/" width="480" height="312" type="application/x-shockwave-flash" allowScriptAccess="always" allowFullScreen="true" flashvars="autoplay=f&#038;disablebranding=f" name="viddlerplayer-4dc62a73" ></embed></object>
</div>
<div align="center" style="margin-bottom: 1em;">
Agile Mumbai 2010 &#8211; Panel<br />
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="480" height="426" id="viddlerplayer-21715636"><param name="movie" value="http://www.viddler.com/player/21715636/" /><param name="autoplay" value="f" /><param name="disablebranding" value="f" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /><param name="name" value="viddlerplayer-21715636" /><embed src="http://www.viddler.com/player/21715636/" width="480" height="426" type="application/x-shockwave-flash" allowScriptAccess="always" allowFullScreen="true" flashvars="autoplay=f&#038;disablebranding=f" name="viddlerplayer-21715636" ></embed></object>
</div>
<div align="center" style="margin-bottom: 1em;">
Agile Bengaluru 2010 &#8211; Panel<br />
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="480" height="426" id="viddlerplayer-9b8a1e4e"><param name="movie" value="http://www.viddler.com/player/9b8a1e4e/" /><param name="autoplay" value="f" /><param name="disablebranding" value="f" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /><param name="name" value="viddlerplayer-9b8a1e4e" /><embed src="http://www.viddler.com/player/9b8a1e4e/" width="480" height="426" type="application/x-shockwave-flash" allowScriptAccess="always" allowFullScreen="true" flashvars="autoplay=f&#038;disablebranding=f" name="viddlerplayer-9b8a1e4e" ></embed></object>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blogs.agilefaqs.com/2010/07/05/agile-india-2010-conference-panel-and-lightning-talks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Message from Captain Planet</title>
		<link>http://blogs.agilefaqs.com/2010/07/05/a-message-from-captain-planet/</link>
		<comments>http://blogs.agilefaqs.com/2010/07/05/a-message-from-captain-planet/#comments</comments>
		<pubDate>Mon, 05 Jul 2010 06:56:03 +0000</pubDate>
		<dc:creator>Naresh Jain</dc:creator>
				<category><![CDATA[agile india]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Green]]></category>
		<category><![CDATA[Random Thoughts]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[ASCI]]></category>
		<category><![CDATA[global warming]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://blogs.agilefaqs.com/?p=1406</guid>
		<description><![CDATA[A message from Captain Planet (aka Saurabh Arora) showing the effect of global warming and how we can take small steps everyday to avoid further worsening the situation. Agile Bengaluru 2010 Conference Agile Mumbai 2010 Conference]]></description>
			<content:encoded><![CDATA[<p>A message from Captain Planet (aka Saurabh Arora) showing the effect of global warming and how we can take small steps everyday to avoid further worsening the situation.</p>
<div align="center" style="margin-bottom: 1em;">
<div style="width:480px;text-align:left" id="__ss_3020557"><object style="margin:0px" width="480" height="385"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=joiningthedots-100129022553-phpapp02&#038;stripped_title=joining-the-dots" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=joiningthedots-100129022553-phpapp02&#038;stripped_title=joining-the-dots" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></div>
</div>
<div align="center" style="margin-bottom: 1em;">
Agile Bengaluru 2010 Conference<br />
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="480" height="426" id="viddlerplayer-7955097e"><param name="movie" value="http://www.viddler.com/player/7955097e/" /><param name="autoplay" value="f" /><param name="disablebranding" value="f" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /><param name="name" value="viddlerplayer-7955097e" /><embed src="http://www.viddler.com/player/7955097e/" width="480" height="426" type="application/x-shockwave-flash" allowScriptAccess="always" allowFullScreen="true" flashvars="autoplay=f&#038;disablebranding=f" name="viddlerplayer-7955097e" ></embed></object>
</div>
<div align="center" style="margin-bottom: 1em;">
Agile Mumbai 2010 Conference<br />
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="480" height="426" id="viddlerplayer-7790cdd6"><param name="movie" value="http://www.viddler.com/player/7790cdd6/" /><param name="autoplay" value="f" /><param name="disablebranding" value="f" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /><param name="name" value="viddlerplayer-7790cdd6" /><embed src="http://www.viddler.com/player/7790cdd6/" width="480" height="426" type="application/x-shockwave-flash" allowScriptAccess="always" allowFullScreen="true" flashvars="autoplay=f&#038;disablebranding=f" name="viddlerplayer-7790cdd6" ></embed></object>
</div>
<div align="center" style="margin-bottom: 1em;">
<object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/P_9mjBUSDng&#038;hl=en_US&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/P_9mjBUSDng&#038;hl=en_US&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blogs.agilefaqs.com/2010/07/05/a-message-from-captain-planet/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Visualizing your Programming Sessions: New Product From Industrial Logic</title>
		<link>http://blogs.agilefaqs.com/2010/06/17/visualizing-your-programming-sessions-new-product-from-industrial-logic/</link>
		<comments>http://blogs.agilefaqs.com/2010/06/17/visualizing-your-programming-sessions-new-product-from-industrial-logic/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 15:18:48 +0000</pubDate>
		<dc:creator>Naresh Jain</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Conference]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[compilation rash]]></category>
		<category><![CDATA[Critique]]></category>
		<category><![CDATA[EAP]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Green]]></category>
		<category><![CDATA[IL]]></category>
		<category><![CDATA[Limited Red Society]]></category>
		<category><![CDATA[Pink]]></category>
		<category><![CDATA[Red]]></category>
		<category><![CDATA[safe refactorings]]></category>
		<category><![CDATA[Session]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Visualize]]></category>
		<category><![CDATA[White]]></category>

		<guid isPermaLink="false">http://blogs.agilefaqs.com/?p=1308</guid>
		<description><![CDATA[This post is moved to Industrial Logic&#8217;s Blogic.]]></description>
			<content:encoded><![CDATA[<p>This post is moved to <a href="https://elearning.industriallogic.com/gh/submit?Action=PageAction&amp;album=blog2009&amp;path=blog2009/2010/sessions&amp;devLanguage=Java" target="_self">Industrial Logic&#8217;s Blogic</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.agilefaqs.com/2010/06/17/visualizing-your-programming-sessions-new-product-from-industrial-logic/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Craftsmanship in designing Error Messages</title>
		<link>http://blogs.agilefaqs.com/2010/01/29/craftsmanship-in-designing-error-messages/</link>
		<comments>http://blogs.agilefaqs.com/2010/01/29/craftsmanship-in-designing-error-messages/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 04:44:49 +0000</pubDate>
		<dc:creator>Naresh Jain</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[error messages]]></category>
		<category><![CDATA[express intent]]></category>
		<category><![CDATA[intent revealing]]></category>

		<guid isPermaLink="false">http://blogs.agilefaqs.com/?p=1160</guid>
		<description><![CDATA[Also if you see their URL: http://www.mailchimp.com/maintenance_in_progress/we_are_down.phtml Very intent revealing. Great thinking has gone behind this. Now this is what I call craftsmanship.]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://blogs.agilefaqs.com/wp-content/uploads/2010/01/errormessage.png"><img class="aligncenter size-full wp-image-1161" title="errormessage" src="http://blogs.agilefaqs.com/wp-content/uploads/2010/01/errormessage.png" alt="errormessage" width="457" height="281" /></a></p>
<p>Also if you see their URL: <a href="http://www.mailchimp.com/maintenance_in_progress/we_are_down.phtml" target="_blank">http://www.mailchimp.com/maintenance_in_progress/we_are_down.phtml</a></p>
<p>Very intent revealing. Great thinking has gone behind this. Now this is what I call craftsmanship.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.agilefaqs.com/2010/01/29/craftsmanship-in-designing-error-messages/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Could not inspect JDBC autocommit mode</title>
		<link>http://blogs.agilefaqs.com/2010/01/09/could-not-inspect-jdbc-autocommit-mode/</link>
		<comments>http://blogs.agilefaqs.com/2010/01/09/could-not-inspect-jdbc-autocommit-mode/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 20:48:04 +0000</pubDate>
		<dc:creator>Naresh Jain</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Connection]]></category>
		<category><![CDATA[DBCP]]></category>
		<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[JDBC]]></category>
		<category><![CDATA[tomcat]]></category>
		<category><![CDATA[validationQuery]]></category>

		<guid isPermaLink="false">http://blogs.agilefaqs.com/?p=1147</guid>
		<description><![CDATA[After switching to the DBCP (Database Connection Pool) drivers that comes bundled with Tomcat 5+, we started seeing a weird exception on our web app. If we leave our server idle for a long time (5-6 hrs) or if we put our laptop to sleep and 5-6+ hrs later when we bring up the laptop [...]]]></description>
			<content:encoded><![CDATA[<p>After switching to the DBCP (Database Connection Pool) drivers that comes bundled with Tomcat 5+, we started seeing a weird exception on our web app. If we leave our server idle for a long time (5-6 hrs) or if we put our laptop to sleep and 5-6+ hrs later when we bring up the laptop and try to access any page on our web app, we get the following error on the web page:</p>
<p>(The error was &#8220;could not inspect JDBC autocommit mode&#8221;)</p>
<p>When we see our logs, we find the following exception:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #cc66cc;">18</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">26</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">34</span>,<span style="color: #cc66cc;">845</span> ERROR JDBCExceptionReporter<span style="color: #339933;">:</span><span style="color: #cc66cc;">72</span> <span style="color: #339933;">-</span> <span style="color: #003399;">Connection</span> com.<span style="color: #006633;">mysql</span>.<span style="color: #006633;">jdbc</span>.<span style="color: #006633;">JDBC4Connection</span>@36fbe6ab is closed.
<span style="color: #006633;">SEVERE</span><span style="color: #339933;">:</span> could not inspect JDBC autocommit mode
org.<span style="color: #006633;">hibernate</span>.<span style="color: #006633;">exception</span>.<span style="color: #006633;">GenericJDBCException</span><span style="color: #339933;">:</span> could not inspect JDBC autocommit mode
	at org.<span style="color: #006633;">hibernate</span>.<span style="color: #006633;">exception</span>.<span style="color: #006633;">SQLStateConverter</span>.<span style="color: #006633;">handledNonSpecificException</span><span style="color: #009900;">&#40;</span>SQLStateConverter.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">103</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">hibernate</span>.<span style="color: #006633;">exception</span>.<span style="color: #006633;">SQLStateConverter</span>.<span style="color: #006633;">convert</span><span style="color: #009900;">&#40;</span>SQLStateConverter.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">91</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">hibernate</span>.<span style="color: #006633;">exception</span>.<span style="color: #006633;">JDBCExceptionHelper</span>.<span style="color: #006633;">convert</span><span style="color: #009900;">&#40;</span>JDBCExceptionHelper.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">43</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">hibernate</span>.<span style="color: #006633;">exception</span>.<span style="color: #006633;">JDBCExceptionHelper</span>.<span style="color: #006633;">convert</span><span style="color: #009900;">&#40;</span>JDBCExceptionHelper.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">29</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">hibernate</span>.<span style="color: #006633;">jdbc</span>.<span style="color: #006633;">JDBCContext</span>.<span style="color: #006633;">afterNontransactionalQuery</span><span style="color: #009900;">&#40;</span>JDBCContext.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">248</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">hibernate</span>.<span style="color: #006633;">impl</span>.<span style="color: #006633;">SessionImpl</span>.<span style="color: #006633;">afterOperation</span><span style="color: #009900;">&#40;</span>SessionImpl.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">417</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">hibernate</span>.<span style="color: #006633;">impl</span>.<span style="color: #006633;">SessionImpl</span>.<span style="color: #006633;">list</span><span style="color: #009900;">&#40;</span>SessionImpl.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">1577</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">hibernate</span>.<span style="color: #006633;">impl</span>.<span style="color: #006633;">CriteriaImpl</span>.<span style="color: #006633;">list</span><span style="color: #009900;">&#40;</span>CriteriaImpl.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">283</span><span style="color: #009900;">&#41;</span>
	...
	<span style="color: #006633;">at</span> javax.<span style="color: #006633;">servlet</span>.<span style="color: #006633;">http</span>.<span style="color: #006633;">HttpServlet</span>.<span style="color: #006633;">service</span><span style="color: #009900;">&#40;</span>HttpServlet.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">617</span><span style="color: #009900;">&#41;</span>
	at javax.<span style="color: #006633;">servlet</span>.<span style="color: #006633;">http</span>.<span style="color: #006633;">HttpServlet</span>.<span style="color: #006633;">service</span><span style="color: #009900;">&#40;</span>HttpServlet.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">717</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">core</span>.<span style="color: #006633;">ApplicationFilterChain</span>.<span style="color: #006633;">internalDoFilter</span><span style="color: #009900;">&#40;</span>ApplicationFilterChain.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">290</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">core</span>.<span style="color: #006633;">ApplicationFilterChain</span>.<span style="color: #006633;">doFilter</span><span style="color: #009900;">&#40;</span>ApplicationFilterChain.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">206</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">core</span>.<span style="color: #006633;">StandardWrapperValve</span>.<span style="color: #006633;">invoke</span><span style="color: #009900;">&#40;</span>StandardWrapperValve.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">233</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">core</span>.<span style="color: #006633;">StandardContextValve</span>.<span style="color: #006633;">invoke</span><span style="color: #009900;">&#40;</span>StandardContextValve.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">191</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">core</span>.<span style="color: #006633;">StandardHostValve</span>.<span style="color: #006633;">invoke</span><span style="color: #009900;">&#40;</span>StandardHostValve.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">128</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">valves</span>.<span style="color: #006633;">ErrorReportValve</span>.<span style="color: #006633;">invoke</span><span style="color: #009900;">&#40;</span>ErrorReportValve.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">102</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">core</span>.<span style="color: #006633;">StandardEngineValve</span>.<span style="color: #006633;">invoke</span><span style="color: #009900;">&#40;</span>StandardEngineValve.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">109</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">ha</span>.<span style="color: #006633;">tcp</span>.<span style="color: #006633;">ReplicationValve</span>.<span style="color: #006633;">invoke</span><span style="color: #009900;">&#40;</span>ReplicationValve.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">347</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">connector</span>.<span style="color: #006633;">CoyoteAdapter</span>.<span style="color: #006633;">service</span><span style="color: #009900;">&#40;</span>CoyoteAdapter.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">286</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">coyote</span>.<span style="color: #006633;">http11</span>.<span style="color: #006633;">Http11Processor</span>.<span style="color: #006633;">process</span><span style="color: #009900;">&#40;</span>Http11Processor.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">845</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">coyote</span>.<span style="color: #006633;">http11</span>.<span style="color: #006633;">Http11Protocol</span>$Http11ConnectionHandler.<span style="color: #006633;">process</span><span style="color: #009900;">&#40;</span>Http11Protocol.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">583</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">tomcat</span>.<span style="color: #006633;">util</span>.<span style="color: #006633;">net</span>.<span style="color: #006633;">JIoEndpoint</span>$Worker.<span style="color: #006633;">run</span><span style="color: #009900;">&#40;</span>JIoEndpoint.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">447</span><span style="color: #009900;">&#41;</span>
	at java.<span style="color: #006633;">lang</span>.<span style="color: #003399;">Thread</span>.<span style="color: #006633;">run</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Thread</span>.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">637</span><span style="color: #009900;">&#41;</span>
Caused by<span style="color: #339933;">:</span> java.<span style="color: #006633;">sql</span>.<span style="color: #003399;">SQLException</span><span style="color: #339933;">:</span> <span style="color: #003399;">Connection</span> com.<span style="color: #006633;">mysql</span>.<span style="color: #006633;">jdbc</span>.<span style="color: #006633;">JDBC4Connection</span>@36fbe6ab is closed.
	<span style="color: #006633;">at</span> org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">tomcat</span>.<span style="color: #006633;">dbcp</span>.<span style="color: #006633;">dbcp</span>.<span style="color: #006633;">DelegatingConnection</span>.<span style="color: #006633;">checkOpen</span><span style="color: #009900;">&#40;</span>DelegatingConnection.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">354</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">tomcat</span>.<span style="color: #006633;">dbcp</span>.<span style="color: #006633;">dbcp</span>.<span style="color: #006633;">DelegatingConnection</span>.<span style="color: #006633;">getAutoCommit</span><span style="color: #009900;">&#40;</span>DelegatingConnection.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">304</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">tomcat</span>.<span style="color: #006633;">dbcp</span>.<span style="color: #006633;">dbcp</span>.<span style="color: #006633;">PoolingDataSource</span>$PoolGuardConnectionWrapper.<span style="color: #006633;">getAutoCommit</span><span style="color: #009900;">&#40;</span>PoolingDataSource.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">224</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">hibernate</span>.<span style="color: #006633;">jdbc</span>.<span style="color: #006633;">ConnectionManager</span>.<span style="color: #006633;">isAutoCommit</span><span style="color: #009900;">&#40;</span>ConnectionManager.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">185</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">hibernate</span>.<span style="color: #006633;">jdbc</span>.<span style="color: #006633;">JDBCContext</span>.<span style="color: #006633;">afterNontransactionalQuery</span><span style="color: #009900;">&#40;</span>JDBCContext.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">239</span><span style="color: #009900;">&#41;</span>
	... <span style="color: #cc66cc;">29</span> more</pre></div></div>

<p>On carefully looking at the exception, we find:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">Caused by<span style="color: #339933;">:</span> java.<span style="color: #006633;">sql</span>.<span style="color: #003399;">SQLException</span><span style="color: #339933;">:</span> <span style="color: #003399;">Connection</span> com.<span style="color: #006633;">mysql</span>.<span style="color: #006633;">jdbc</span>.<span style="color: #006633;">JDBC4Connection</span>@36fbe6ab is closed.</pre></div></div>

<p>From the exception its clear that the reason for this exception is that the db connection is closed. Which is in sync with our finding so far, idle server causes this problem.</p>
<p>What happens is, the Database closes the connections since they are inactive. But DBCP &amp; hence hibernate still thinks those connections are active and tries to execute some command on them. This is when an exception is thrown.</p>
<p>We can easily simulate this exception. When everything is running fine, restart your DB and you&#8217;ll see the same exception when you try to access any dynamic page on your site.</p>
<p>On reading <a href="http://commons.apache.org/dbcp/configuration.html" target="_blank">DBCP configuration</a>, I found:</p>
<table>
<tr>
<th class="first">Parameter</th>
<th>Default</th>
<th class="last">Description</th>
</tr>
<tr class="a">
<td>validationQuery</td>
<td></td>
<td>
The SQL query that will be used to validate connections from this pool<br />
before returning them to the caller.  If specified, this query<br />
<strong>MUST</strong> be an SQL SELECT statement that returns at least<br />
one row.
   </td>
</tr>
<tr class="b">
<td>testOnBorrow</td>
<td>true</td>
<td>
      The indication of whether objects will be validated before being<br />
      borrowed from the pool.  If the object fails to validate, it will be<br />
      dropped from the pool, and we will attempt to borrow another.<br />
<strong>NOTE</strong> &#8211; for a <code>true</code> value to have any effect,<br />
      the <code>validationQuery</code> parameter must be set to a non-null<br />
      string.
   </td>
</tr>
</table>
<p>Basically testOnBorrow is true by default, which means DBCP will test if the connection is valid (alive) before returning. But to test it, it needs a query using which it would validate the connection. Since in our case we did not specify any value, when hibernate would ask DBCP for a connection, it would just return a connection without testing if its a valid connection before returning. And then the stale connection throws an exception when we try to perform any operation on it. But if the validation query is specified, then DBCP will drop the connection and give us another valid connection. This avoiding this problem.</p>
<p>So the simple solution to this problem is to add a validationQuery to the connection pooling configuration (in our case it was the context.xml file).</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">validationQuery<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;select version();&quot;</span></pre></div></div>

<p>Q.E.D</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.agilefaqs.com/2010/01/09/could-not-inspect-jdbc-autocommit-mode/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Towards Continuous Deployment: Zero Downtime WebApp Deployment</title>
		<link>http://blogs.agilefaqs.com/2009/11/24/towards-continuous-deployment-zero-downtime-webapp-deployment/</link>
		<comments>http://blogs.agilefaqs.com/2009/11/24/towards-continuous-deployment-zero-downtime-webapp-deployment/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 12:30:36 +0000</pubDate>
		<dc:creator>Naresh Jain</dc:creator>
				<category><![CDATA[Continuous Deployment]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Reverse Proxy]]></category>
		<category><![CDATA[session replication]]></category>
		<category><![CDATA[SSH Tunnel]]></category>
		<category><![CDATA[Web Application]]></category>
		<category><![CDATA[Web Server Cluster]]></category>
		<category><![CDATA[Zero-Downtime Database Deployment]]></category>

		<guid isPermaLink="false">http://blogs.agilefaqs.com/?p=1121</guid>
		<description><![CDATA[Lets assume you have a simple web application which runs on a web server like tomcat, jetty, IIS or mongrel and is backed by a database. Also lets say you have only one instance of your application running  (non-clustered) in production. Now you want to deploy your application several times a week. The single biggest [...]]]></description>
			<content:encoded><![CDATA[<p>Lets assume you have a simple web application which runs on a web server like tomcat, jetty, IIS or mongrel and is backed by a database. Also lets say you have only one instance of your application running  (non-clustered) in production.</p>
<p>Now you want to deploy your application several times a week. The single biggest issue that gets in the way of continuous deployment is, every time you deploy a new version of your application, you don&#8217;t want a downtime (destroy your user&#8217;s session). In this blog, I&#8217;ll describe how to deploy your applications without interrupting the user.</p>
<p>First time set-up steps:</p>
<ul>
<li>On your local machine set up a web server cluster for session replication and ensure your application works fine in a clustered environment. (Tips on <a href="http://blogs.agilefaqs.com/2009/11/09/setting-up-tomcat-cluster-for-session-replication/" target="_self">setting up a tomcat cluster of session replication</a>). You might want to look at all the objects you are storing in you session and whether they are serializable or not.</li>
<li>On your production server, set up another web server instance. We&#8217;ll call this temp_webserver. Make sure the temp_webserver runs on  a different port than your production server. (In tomcat update the ports in the tomcat/config/server.xml file). Also for now, don&#8217;t enable clustering yet.</li>
<li>In your browser access the temp_webserver (different port) and make sure everything is working as expected. Usually both the port on which the production web server and the temp_webserver is running should be blocked and not accessible directly from any other machine. In such cases, set up an SSH-tunnel on the specified port to access the webapp in your browser. (ssh -L 3333:your.domain.com:web_server_port username@server_ip_or_name). Alternatively you could SSH to the production box and use <a href="http://en.wikipedia.org/wiki/Lynx_%28web_browser%29" target="_blank">Lynx</a> (text browser) to test your webapp.</li>
<li>Now enable clustering on both web servers, start them and make sure the session is replicated. To test session replication, bring up one webserver instance, login, then bring up the other instance, now bring down the first instance and make sure your app does not prompt you to login again. Wait a sec! When you brought down the first server, you get a 404 Page not found. Of course, even though clustering might be working fine, your browser has no way to know about the other instance of web server, which is running on a different port. It expects a webserver on the production server&#8217;s port.</li>
<li>To solve this problem, we&#8217;ll have to set up a <a href="http://en.wikipedia.org/wiki/Reverse_proxy" target="_blank">reverse-proxy server</a> like <a href="http://wiki.nginx.org/Main" target="_blank">Nginx</a> on your production box or any of your other publically accessible server. You will have to configure the reverse proxy server to run on the port on which your web server was running and change your webserver to run on a different (more secure) port. The reverse proxy server will listen on the required port and proxy all web requests to your server. (<a href="http://blogs.agilefaqs.com/wp-content/uploads/2009/11/nginx.conf">sample Nginx Configuration</a>). This will help us start and stop one of our webservers without the user noticing it. Also notice that its a good practice to let your reverse proxy server serve all static content. Its usually a magnitude faster.</li>
<li>After setting up a round robin reverse proxy, you should be able to test your application in a clustered environment.</li>
<li>Once you know your webapp works fine in a clustered env in production, you can change the reverse-proxy configuration to direct all traffic to just your actual production webserver. You can comment out the temp_webserver line to ensure only production webserver is getting all requests. (Every time you make a change to your reverse proxy setting, you&#8217;ll have to reload the configuration or restart the reverse proxy server. Which usually takes a fraction of a second.)</li>
<li>Now un-deploy the application on the temp_webserver and stop the temp_webserver. Everything should continue working as before.</li>
<li>* At each step of this process, its handy to run a battery of functional tests (Selenium or Sahi) to make sure that your application is actually work the way you expect it. Manual testing is not sustainable and scalable.</li>
</ul>
<p>This concludes our initial set-up. We have enabled ourselves to do continuous deployment without interrupting the user.</p>
<p>Note: Even though our web-server is clustered for session replication, we are still using the same database on both instances.</p>
<p>Now lets see what steps we need to take when we want to deploy a new version of our application.</p>
<ul>
<li>FTP the latest web app archive (war) to the production server.</li>
<li>If you have made any Database changes follow Owen&#8217;s advice on <a href="http://exortech.com/blog/2009/02/01/weekly-release-blog-11-zero-downtime-database-deployment/" target="_blank">Zero-Downtime Database Deployment</a>. This will help you upgrade the DB without affecting the existing, running production app.</li>
<li>Next bring up the temp_webserver and deploy the latest web application. In most cases, its just a matter of dropping the web archive in the web apps folder.</li>
<li>Set up a SSH-Proxy from your machine to access the temp_webserver. Run all your smoke tests to make sure the new version of the web-app works fine.</li>
<li>Go back into your reverse proxy configuration and comment out the production webserver line and uncomment the temp_webserver line. Reload/Restart your reverse proxy, now all request should be redirected to temp_webserver. Since your reverse proxy does not hold any state, reloading/restarting it should not make any difference. Also since your sessions are replicated in the cluster, users should see no difference, except that now they are working on the latest version of your web app.</li>
<li>Now undeploy the old version and deploy the latest version of your web app on the production webserver. Bring it up and test it using a SSH_proxy from your local machine.</li>
<li>Once you know the production web-server is up and running on the latest version of your app, comment out the temp_webserver and uncomment the production webserver in the reverse proxy setting . Reload the configuration or restart the reverse proxy. Now all traffic should get redirected to your production web server.</li>
<li>At this point the temp_webserver has done its job. Its time to undeploy the application and stop the temp_webserver.</li>
</ul>
<p>Congrats, you have just upgraded your web application to the latest version without interrupting your users.</p>
<p>Note: All the above steps are very trivial to automate using a script. Because of the speed and accuracy, I would bet all my money on the automated script.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.agilefaqs.com/2009/11/24/towards-continuous-deployment-zero-downtime-webapp-deployment/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cannot create JDBC driver of class &#8221; for connect URL &#8216;null&#8217;</title>
		<link>http://blogs.agilefaqs.com/2009/11/23/cannot-create-jdbc-driver-of-class-for-connect-url-null/</link>
		<comments>http://blogs.agilefaqs.com/2009/11/23/cannot-create-jdbc-driver-of-class-for-connect-url-null/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 05:30:52 +0000</pubDate>
		<dc:creator>Naresh Jain</dc:creator>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[context.xml]]></category>
		<category><![CDATA[Data source]]></category>
		<category><![CDATA[NullPointerException]]></category>
		<category><![CDATA[permission issue]]></category>
		<category><![CDATA[tomcat]]></category>

		<guid isPermaLink="false">http://blogs.agilefaqs.com/?p=1116</guid>
		<description><![CDATA[On, one of our tomcat boxes in production, we kept getting the following exception when trying to start the server: 17:06:30,823 ERROR SchemaUpdate:134 - could not get database metadata org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null' at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource&#40;BasicDataSource.java:1150&#41; at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection&#40;BasicDataSource.java:880&#41; at org.hibernate.connection.DatasourceConnectionProvider.getConnection&#40;DatasourceConnectionProvider.java:69&#41; at org.hibernate.tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.prepare&#40;SuppliedConnectionProviderConnectionHelper.java:27&#41; at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute&#40;SchemaUpdate.java:127&#41; at org.hibernate.impl.SessionFactoryImpl.&#40;SessionFactoryImpl.java:314&#41; at org.hibernate.cfg.Configuration.buildSessionFactory&#40;Configuration.java:1218&#41; [...]]]></description>
			<content:encoded><![CDATA[<p>On, one of our tomcat boxes in production, we kept getting the following exception when trying to start the server:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #cc66cc;">17</span><span style="color: #339933;">:</span>06<span style="color: #339933;">:</span><span style="color: #cc66cc;">30</span>,<span style="color: #cc66cc;">823</span> ERROR SchemaUpdate<span style="color: #339933;">:</span><span style="color: #cc66cc;">134</span> <span style="color: #339933;">-</span> could not get database metadata
org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">tomcat</span>.<span style="color: #006633;">dbcp</span>.<span style="color: #006633;">dbcp</span>.<span style="color: #006633;">SQLNestedException</span><span style="color: #339933;">:</span> Cannot create JDBC driver of <span style="color: #000000; font-weight: bold;">class</span> <span style="color: #0000ff;">''</span> <span style="color: #000000; font-weight: bold;">for</span> connect <span style="color: #003399;">URL</span> <span style="color: #0000ff;">'null'</span>
        at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">tomcat</span>.<span style="color: #006633;">dbcp</span>.<span style="color: #006633;">dbcp</span>.<span style="color: #006633;">BasicDataSource</span>.<span style="color: #006633;">createDataSource</span><span style="color: #009900;">&#40;</span>BasicDataSource.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">1150</span><span style="color: #009900;">&#41;</span>
        at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">tomcat</span>.<span style="color: #006633;">dbcp</span>.<span style="color: #006633;">dbcp</span>.<span style="color: #006633;">BasicDataSource</span>.<span style="color: #006633;">getConnection</span><span style="color: #009900;">&#40;</span>BasicDataSource.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">880</span><span style="color: #009900;">&#41;</span>
        at org.<span style="color: #006633;">hibernate</span>.<span style="color: #006633;">connection</span>.<span style="color: #006633;">DatasourceConnectionProvider</span>.<span style="color: #006633;">getConnection</span><span style="color: #009900;">&#40;</span>DatasourceConnectionProvider.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">69</span><span style="color: #009900;">&#41;</span>
        at org.<span style="color: #006633;">hibernate</span>.<span style="color: #006633;">tool</span>.<span style="color: #006633;">hbm2ddl</span>.<span style="color: #006633;">SuppliedConnectionProviderConnectionHelper</span>.<span style="color: #006633;">prepare</span><span style="color: #009900;">&#40;</span>SuppliedConnectionProviderConnectionHelper.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">27</span><span style="color: #009900;">&#41;</span>        at org.<span style="color: #006633;">hibernate</span>.<span style="color: #006633;">tool</span>.<span style="color: #006633;">hbm2ddl</span>.<span style="color: #006633;">SchemaUpdate</span>.<span style="color: #006633;">execute</span><span style="color: #009900;">&#40;</span>SchemaUpdate.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">127</span><span style="color: #009900;">&#41;</span>
        at org.<span style="color: #006633;">hibernate</span>.<span style="color: #006633;">impl</span>.<span style="color: #006633;">SessionFactoryImpl</span>.<span style="color: #009900;">&#40;</span>SessionFactoryImpl.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">314</span><span style="color: #009900;">&#41;</span>
        at org.<span style="color: #006633;">hibernate</span>.<span style="color: #006633;">cfg</span>.<span style="color: #006633;">Configuration</span>.<span style="color: #006633;">buildSessionFactory</span><span style="color: #009900;">&#40;</span>Configuration.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">1218</span><span style="color: #009900;">&#41;</span>
        at javax.<span style="color: #006633;">servlet</span>.<span style="color: #006633;">GenericServlet</span>.<span style="color: #006633;">init</span><span style="color: #009900;">&#40;</span>GenericServlet.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">212</span><span style="color: #009900;">&#41;</span>
        at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">core</span>.<span style="color: #006633;">StandardWrapper</span>.<span style="color: #006633;">loadServlet</span><span style="color: #009900;">&#40;</span>StandardWrapper.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">1172</span><span style="color: #009900;">&#41;</span>
        at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">core</span>.<span style="color: #006633;">StandardWrapper</span>.<span style="color: #006633;">allocate</span><span style="color: #009900;">&#40;</span>StandardWrapper.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">808</span><span style="color: #009900;">&#41;</span>
        at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">core</span>.<span style="color: #006633;">StandardWrapperValve</span>.<span style="color: #006633;">invoke</span><span style="color: #009900;">&#40;</span>StandardWrapperValve.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">129</span><span style="color: #009900;">&#41;</span>
        at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">core</span>.<span style="color: #006633;">StandardContextValve</span>.<span style="color: #006633;">invoke</span><span style="color: #009900;">&#40;</span>StandardContextValve.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">191</span><span style="color: #009900;">&#41;</span>
        at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">core</span>.<span style="color: #006633;">StandardHostValve</span>.<span style="color: #006633;">invoke</span><span style="color: #009900;">&#40;</span>StandardHostValve.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">128</span><span style="color: #009900;">&#41;</span>
        at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">valves</span>.<span style="color: #006633;">ErrorReportValve</span>.<span style="color: #006633;">invoke</span><span style="color: #009900;">&#40;</span>ErrorReportValve.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">102</span><span style="color: #009900;">&#41;</span>
        at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">core</span>.<span style="color: #006633;">StandardEngineValve</span>.<span style="color: #006633;">invoke</span><span style="color: #009900;">&#40;</span>StandardEngineValve.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">109</span><span style="color: #009900;">&#41;</span>
        at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">ha</span>.<span style="color: #006633;">tcp</span>.<span style="color: #006633;">ReplicationValve</span>.<span style="color: #006633;">invoke</span><span style="color: #009900;">&#40;</span>ReplicationValve.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">347</span><span style="color: #009900;">&#41;</span>
        at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">connector</span>.<span style="color: #006633;">CoyoteAdapter</span>.<span style="color: #006633;">service</span><span style="color: #009900;">&#40;</span>CoyoteAdapter.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">286</span><span style="color: #009900;">&#41;</span>
        at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">coyote</span>.<span style="color: #006633;">http11</span>.<span style="color: #006633;">Http11Processor</span>.<span style="color: #006633;">process</span><span style="color: #009900;">&#40;</span>Http11Processor.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">845</span><span style="color: #009900;">&#41;</span>
        at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">coyote</span>.<span style="color: #006633;">http11</span>.<span style="color: #006633;">Http11Protocol</span>$Http11ConnectionHandler.<span style="color: #006633;">process</span><span style="color: #009900;">&#40;</span>Http11Protocol.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">583</span><span style="color: #009900;">&#41;</span>
        at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">tomcat</span>.<span style="color: #006633;">util</span>.<span style="color: #006633;">net</span>.<span style="color: #006633;">JIoEndpoint</span>$Worker.<span style="color: #006633;">run</span><span style="color: #009900;">&#40;</span>JIoEndpoint.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">447</span><span style="color: #009900;">&#41;</span>
        at java.<span style="color: #006633;">lang</span>.<span style="color: #003399;">Thread</span>.<span style="color: #006633;">run</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Thread</span>.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">619</span><span style="color: #009900;">&#41;</span>
Caused by<span style="color: #339933;">:</span> java.<span style="color: #006633;">lang</span>.<span style="color: #003399;">NullPointerException</span>
        at sun.<span style="color: #006633;">jdbc</span>.<span style="color: #006633;">odbc</span>.<span style="color: #006633;">JdbcOdbcDriver</span>.<span style="color: #006633;">getProtocol</span><span style="color: #009900;">&#40;</span>JdbcOdbcDriver.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">507</span><span style="color: #009900;">&#41;</span>
        at sun.<span style="color: #006633;">jdbc</span>.<span style="color: #006633;">odbc</span>.<span style="color: #006633;">JdbcOdbcDriver</span>.<span style="color: #006633;">knownURL</span><span style="color: #009900;">&#40;</span>JdbcOdbcDriver.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">476</span><span style="color: #009900;">&#41;</span>
        at sun.<span style="color: #006633;">jdbc</span>.<span style="color: #006633;">odbc</span>.<span style="color: #006633;">JdbcOdbcDriver</span>.<span style="color: #006633;">acceptsURL</span><span style="color: #009900;">&#40;</span>JdbcOdbcDriver.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">307</span><span style="color: #009900;">&#41;</span>
        at java.<span style="color: #006633;">sql</span>.<span style="color: #003399;">DriverManager</span>.<span style="color: #006633;">getDriver</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">DriverManager</span>.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">253</span><span style="color: #009900;">&#41;</span>
        at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">tomcat</span>.<span style="color: #006633;">dbcp</span>.<span style="color: #006633;">dbcp</span>.<span style="color: #006633;">BasicDataSource</span>.<span style="color: #006633;">createDataSource</span><span style="color: #009900;">&#40;</span>BasicDataSource.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">1143</span><span style="color: #009900;">&#41;</span>
        ... <span style="color: #cc66cc;">22</span> more</pre></div></div>

<p>Googling for it, only kept suggesting to check our context.xml file, which appeared to be correct. In fact the same war works fine on other instances of tomcat.</p>
<p>All we were doing in our context.xml file is that we&#8217;re defining a Data Source Resource. Which gets referred in our Web.xml. Pretty straight forward.</p>
<p>Looking back at the exception, particularly the following part:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">tomcat</span>.<span style="color: #006633;">dbcp</span>.<span style="color: #006633;">dbcp</span>.<span style="color: #006633;">SQLNestedException</span><span style="color: #339933;">:</span> 
Cannot create JDBC driver of <span style="color: #000000; font-weight: bold;">class</span> <span style="color: #0000ff;">''</span> <span style="color: #000000; font-weight: bold;">for</span> connect <span style="color: #003399;">URL</span> <span style="color: #0000ff;">'null'</span></pre></div></div>

<p>suggests that tomcat was not able to find the Data Source definition which is of course defined in our context.xml file. So certainly there was something to do with Context.xml causing the failure.</p>
<p>On comparing this web app with the other, working tomcat instances, I found Context.xml file was present on both instance in the webapp/&lt;web_app_name&gt;/META-INF dir. Which is fine. But on the working tomcat instance I found another file called &lt;web_app_name&gt;.xml (with the same contents as Context.xml) file under the tomcat/conf/Catalina/localhost folder. This &lt;web_app_name&gt;.xml file was missing on the tomcat instance.</p>
<p><span style="text-decoration: underline;"><em>Solution</em></span>: Copy the Context.xml file to tomcat/conf/Catalina/localhost folder and renaming it to &lt;web_app_name&gt;.xml got rid of the exception. This made it clear why tomcat was throwing this exception and failing to start.</p>
<p>Something was stopping tomcat from creating this file. And of course it turned out to be a tomcat user permission issue. The user under which tomcat was running did not have permission to write to these folders. So we changed the group ownership of tomcat and /etc/tomcat folder to the same group to which the tomcat user belonged and magically everything started working as before.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.agilefaqs.com/2009/11/23/cannot-create-jdbc-driver-of-class-for-connect-url-null/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Simple Regression Testing for Static Web Sites</title>
		<link>http://blogs.agilefaqs.com/2009/11/18/simple-regression-testing-for-static-web-sites/</link>
		<comments>http://blogs.agilefaqs.com/2009/11/18/simple-regression-testing-for-static-web-sites/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 13:56:49 +0000</pubDate>
		<dc:creator>Naresh Jain</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[curl]]></category>
		<category><![CDATA[diff]]></category>
		<category><![CDATA[Do the Simplest thing that could Possibly work]]></category>
		<category><![CDATA[Freeset]]></category>
		<category><![CDATA[Industriallogic]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[Regression Testing]]></category>
		<category><![CDATA[sed]]></category>
		<category><![CDATA[Selenium]]></category>
		<category><![CDATA[wget]]></category>

		<guid isPermaLink="false">http://blogs.agilefaqs.com/?p=1114</guid>
		<description><![CDATA[For Freeset, I&#8217;ve always been in the quest of Simplest Thing that Could Possibly Work. In a previous post, I explained how we&#8217;ve embraced an ultra-light process (call it lean, if you like) to build their e-commerce site. In that post, I&#8217;ve talked about our wish to create a Selenium test suite for regression testing. [...]]]></description>
			<content:encoded><![CDATA[<p>For <a href="http://freesetglobal.com" target="_blank">Freeset</a>, I&#8217;ve always been in the quest of Simplest Thing that Could Possibly Work. In a previous post, I explained how we&#8217;ve embraced <a href="http://blogs.agilefaqs.com/2009/10/26/ultra-light-development-and-deployment-example/" target="_self">an ultra-light process</a> (call it lean, if you like) to build their e-commerce site.</p>
<p>In that post, I&#8217;ve talked about our wish to create a <a href="http://seleniumhq.org/" target="_blank">Selenium test suite</a> for regression testing. But it never got high enough on our priority list. (esp. coz we mostly have static content served from a CMS as of now).</p>
<p>While that is something I wanted to tackle, last night, when I was moving <a href="http://industriallogic.om" target="_blank">Industrial Logic</a> and <a href="http://industrialxp.com" target="_blank">Industrial XP</a>&#8216;s site over to a new server hardware, I wanted some quick way to test if all the pages were correctly displayed after the move. This was important since we switched from <a href="http://httpd.apache.org/" target="_blank">Apache</a> to <a href="http://wiki.nginx.org/Main" target="_blank">Nginx</a>. Nginx has slightly different way to handle secure pages, etc.</p>
<p>So I asked on <a href="http://twitter.com/nashjain/status/5802009524" target="_blank">Twitter</a>, if anyone knew of a tool that could compare 2 deployments of the same website. Few people responding saying I could use <a href="http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man1/curl.1.html" target="_blank">curl</a>/<a href="http://www.gnu.org/software/wget/" target="_blank">wget</a> with <a href="http://ss64.com/bash/diff.html" target="_blank">diff</a> recursively. That seemed like the simplest thing that could work for now. So this morning I wrote a script.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-Rf</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">&amp;</span>amp;<span style="color: #000000; font-weight: bold;">&amp;</span>amp; <span style="color: #c20cb9; font-weight: bold;">mkdir</span> live <span style="color: #000000; font-weight: bold;">&amp;</span>amp;<span style="color: #000000; font-weight: bold;">&amp;</span>amp; <span style="color: #7a0874; font-weight: bold;">cd</span> live <span style="color: #000000; font-weight: bold;">&amp;</span>amp;<span style="color: #000000; font-weight: bold;">&amp;</span>amp; <span style="color: #c20cb9; font-weight: bold;">wget</span> <span style="color: #660033;">-rkp</span> <span style="color: #660033;">-l5</span> <span style="color: #660033;">-q</span> <span style="color: #660033;">-np</span> <span style="color: #660033;">-nH</span> http:<span style="color: #000000; font-weight: bold;">//</span>freesetglobal.com <span style="color: #000000; font-weight: bold;">&amp;</span>amp;<span style="color: #000000; font-weight: bold;">&amp;</span>amp; <span style="color: #7a0874; font-weight: bold;">cd</span> .. <span style="color: #000000; font-weight: bold;">&amp;</span>amp;<span style="color: #000000; font-weight: bold;">&amp;</span>amp; <span style="color: #c20cb9; font-weight: bold;">mkdir</span> dev <span style="color: #000000; font-weight: bold;">&amp;</span>amp;<span style="color: #000000; font-weight: bold;">&amp;</span>amp; <span style="color: #7a0874; font-weight: bold;">cd</span> dev <span style="color: #000000; font-weight: bold;">&amp;</span>amp;<span style="color: #000000; font-weight: bold;">&amp;</span>amp; <span style="color: #c20cb9; font-weight: bold;">wget</span> <span style="color: #660033;">-rkp</span> <span style="color: #660033;">-l5</span> <span style="color: #660033;">-q</span> <span style="color: #660033;">-np</span> <span style="color: #660033;">-nH</span> http:<span style="color: #000000; font-weight: bold;">//</span>dev.freesetglobal.com <span style="color: #000000; font-weight: bold;">&amp;</span>amp;<span style="color: #000000; font-weight: bold;">&amp;</span>amp; <span style="color: #7a0874; font-weight: bold;">cd</span> .. <span style="color: #000000; font-weight: bold;">&amp;</span>amp;<span style="color: #000000; font-weight: bold;">&amp;</span>amp; <span style="color: #000000; font-weight: bold;">for</span> i <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #660033;">-l</span> dev.freesetglobal.com \<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">find</span> .<span style="color: #000000; font-weight: bold;">/</span>dev <span style="color: #660033;">-name</span> <span style="color: #ff0000;">'*'</span>\<span style="color: #000000; font-weight: bold;">``</span> ; <span style="color: #000000; font-weight: bold;">do</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'s/dev.freesetglobal.com/freesetglobal.com/g'</span> <span style="color: #007800;">$i</span> <span style="color: #000000; font-weight: bold;">&amp;</span>gt; <span style="color: #007800;">$i</span>.xx <span style="color: #000000; font-weight: bold;">&amp;</span>amp;<span style="color: #000000; font-weight: bold;">&amp;</span>amp; <span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #007800;">$i</span>.xx <span style="color: #007800;">$i</span>; <span style="color: #000000; font-weight: bold;">done</span> <span style="color: #000000; font-weight: bold;">&amp;</span>amp;<span style="color: #000000; font-weight: bold;">&amp;</span>amp; <span style="color: #c20cb9; font-weight: bold;">diff</span> <span style="color: #660033;">-r</span> <span style="color: #660033;">-y</span> <span style="color: #660033;">--suppress-common-lines</span> <span style="color: #660033;">-w</span> <span style="color: #660033;">-I</span> <span style="color: #ff0000;">'^.*'</span> dev live</pre></div></div>

<p>I&#8217;m planning to use this script to do simple regression test of our Freeset site. We have a live and a dev environment. We make changes on dev and frequently sync it up with live. I&#8217;m thinking before we sync up, we can check if we&#8217;ve made the correct changes to the intended pages. If some other pages show up in this diff that we did not expect, it&#8217;s a good way to catch such issue before the sync.</p>
<p>Note: One could also use diff with -q option, if all they are interested to know is which pages changes. Also note that under Mac, the sed command&#8217;s -i (inline edit) option is broken. It simply does not work as explained. If you give sed -i -e &#8230;., it ends up creating backup files with -e extension. #fail.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.agilefaqs.com/2009/11/18/simple-regression-testing-for-static-web-sites/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Where is the real innovation happening?</title>
		<link>http://blogs.agilefaqs.com/2009/10/18/where-is-the-real-innovation-happening/</link>
		<comments>http://blogs.agilefaqs.com/2009/10/18/where-is-the-real-innovation-happening/#comments</comments>
		<pubDate>Sun, 18 Oct 2009 09:09:22 +0000</pubDate>
		<dc:creator>Naresh Jain</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Conference]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Code Genie]]></category>
		<category><![CDATA[Code Harvesting]]></category>
		<category><![CDATA[Complex Adaptive Systems]]></category>
		<category><![CDATA[Continuous Deployment]]></category>
		<category><![CDATA[Could Computing]]></category>
		<category><![CDATA[Distributed Development]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[Dynamic Languages]]></category>
		<category><![CDATA[eLearning]]></category>
		<category><![CDATA[Functional Langugaes]]></category>
		<category><![CDATA[Google Apps]]></category>
		<category><![CDATA[innovation]]></category>
		<category><![CDATA[Parallel Computing]]></category>
		<category><![CDATA[SDTConf]]></category>
		<category><![CDATA[Social Networking]]></category>
		<category><![CDATA[Virtualization]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false">http://blogs.agilefaqs.com/?p=1023</guid>
		<description><![CDATA[It appears to me that the Agile Community is falling behind the innovation curve. At conferences, user groups, mailing list, etc, we see the same old same old stuff (may be I&#8217;m missing something). So where is the real innovation happening? What space should I be watching? These were the questions I posed to the [...]]]></description>
			<content:encoded><![CDATA[<p>It appears to me that the Agile Community is falling behind the innovation curve. At conferences, user groups, mailing list, etc, we see the same old same old stuff (may be I&#8217;m missing something). So where is the real innovation happening? What space should I be watching?</p>
<p>These were the questions I posed to the group @ the <a href="http://sdtconf.com/wiki/tiki-index.php?page=ScheduleForFall2009" target="_blank">SDTConf 2009</a>. Later, during our discussion at the conference we tried answering them. After a wonderful discussion we come up with some suggestions:</p>
<ul>
<li> Web 2.0
<ul>
<li> Highly Scalability, Performance and Operations space</li>
<li> <a href="http://en.wikipedia.org/wiki/Nosql" target="_blank">No SQL</a></li>
<li> Continuous Deployment and Monitoring space &#8211; <a href="http://www.slideshare.net/exortech/releasing-to-production-every-week-india" target="_blank">Owen&#8217;s Slides</a> are a good starting point</li>
<li> Watch out for conferences like <a href="http://en.oreilly.com/velocity2009" target="_blank">O&#8217;Reilly&#8217;s Velocity</a></li>
</ul>
</li>
<li> Alternative Language (non-mainstream languages) space. Lot of interesting experiments going on in
<ul>
<li> Dynamic language space</li>
<li> Functional language space</li>
<li> Hybrid language space</li>
</ul>
</li>
<li> Domain Specific Language space</li>
<li> Could Computing, Parallel Computing (Grid Computing), Virtualization space</li>
<li> Code Harvesting Space &#8211; Check out <a href="http://sourcerer.ics.uci.edu/codegenie/" target="_blank">Test Driven Code Search and Code Genie</a> as a starting point</li>
<li> Complex Adaptive Systems and its implication on our social interactions space. <a href="http://www.cognitive-edge.com/blogs/dave/" target="_blank">Dave Snowden&#8217;s</a> work is a good starting point</li>
<li> eLearning and visual assessments (feedback) of a programming session. Check out <a href="https://elearning.industriallogic.com/gh/submit?Action=PageAction&amp;album=blog2009&amp;path=blog2009/may/analysis&amp;devLanguage=Java" target="_blank">Visualizing Proficiency</a></li>
<li> Polyglot Programming space</li>
<li> With Google Apps, people are able to build 100s of Apps each month and get instant feedback on their ideas</li>
<li> Social Networking and Second Life space</li>
<li> Conference: Lot of interesting experiments are been conducted in the conference space. Conferences have evolved to something very different from before.</li>
<li> Distributed Development and Remote Pairing space</li>
</ul>
<p>If you would like to contribute to this list, please add your point on the <a href="http://sdtconf.com/wiki/tiki-index.php?page=Where+is+the+innovation+happening" target="_blank">SDTConf Wiki</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.agilefaqs.com/2009/10/18/where-is-the-real-innovation-happening/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Setting up Huawei Mobile Connect on Snow Leopard</title>
		<link>http://blogs.agilefaqs.com/2009/09/21/setting-up-huawei-mobile-connect-on-snow-leopard/</link>
		<comments>http://blogs.agilefaqs.com/2009/09/21/setting-up-huawei-mobile-connect-on-snow-leopard/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 17:32:13 +0000</pubDate>
		<dc:creator>Naresh Jain</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[modem]]></category>
		<category><![CDATA[Snow Leopard]]></category>
		<category><![CDATA[Tata Indicom Photon]]></category>

		<guid isPermaLink="false">http://blogs.agilefaqs.com/?p=948</guid>
		<description><![CDATA[Recently I upgraded to Snow Leopard and found my Huawei Modem (Model: EC168C) which came with Tata Indicom Photon+ does not work any more. On Huawei&#8217;s user forums they claim that these modems are not tested with Snow Leopard. I tried to manually set up the modem in my network settings under System Preferences and [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I upgraded to <a href="http://www.apple.com/macosx/" target="_blank">Snow Leopard</a> and found my Huawei Modem (Model: EC168C) which came with <a href="http://www.tataindicom.com/HSIA-photon-usb.aspx" target="_blank">Tata Indicom Photon+</a> does not work any more. On Huawei&#8217;s user forums they claim that these modems are not tested with Snow Leopard.</p>
<p>I tried to manually set up the modem in my network settings under System Preferences and it seems to work. Following are the steps I took to set up a new network service:</p>
<p><a href="http://blogs.agilefaqs.com/wp-content/uploads/2009/09/1_add.png"><img class="aligncenter size-medium wp-image-941" title="Add New Network Service" src="http://blogs.agilefaqs.com/wp-content/uploads/2009/09/1_add-300x260.png" alt="Add New Network Service" width="300" height="260" /></a></p>
<p>Once we click on the + button, select</p>
<p><a href="http://blogs.agilefaqs.com/wp-content/uploads/2009/09/2_selectinterface.png"><img class="aligncenter size-medium wp-image-942" title="Select Huawei Modem Interface" src="http://blogs.agilefaqs.com/wp-content/uploads/2009/09/2_selectinterface-300x245.png" alt="Select Huawei Modem Interface" width="300" height="245" /></a></p>
<p>Once you select the Huawei Modem, you will need to fill the following info</p>
<p><a href="http://blogs.agilefaqs.com/wp-content/uploads/2009/09/3_configure_modem.png"><img class="aligncenter size-medium wp-image-943" title="Configure Modem Settings" src="http://blogs.agilefaqs.com/wp-content/uploads/2009/09/3_configure_modem-300x260.png" alt="Configure Modem Settings" width="300" height="260" /></a></p>
<p>Please fill in the exact same info as shown in the image above. Note that password is &#8220;internet&#8221;. Make sure the &#8220;Show modem status in menu bar&#8221; check box is checked. You&#8217;ll see later, we use this from the menu bar to connect to the internet.</p>
<p>Once you have entered the data as shown above, clicking on the Advanced&#8230; button will show:</p>
<p><a href="http://blogs.agilefaqs.com/wp-content/uploads/2009/09/4_advanced.png"><img class="aligncenter size-medium wp-image-944" title="Advanced Settings" src="http://blogs.agilefaqs.com/wp-content/uploads/2009/09/4_advanced-300x233.png" alt="Advanced Settings" width="300" height="233" /></a></p>
<p>Make sure to select &#8220;Sierra Wireless&#8221; as the Vendor (even though you are using Tata Indicom).</p>
<p>If you are using Photon Plus, then select &#8220;au by KDDI&#8221; as the Vendor. Sierra won&#8217;t work.</p>
<p>Click OK and then Apply.</p>
<p>Now you are all set to connect to the internet using your Photon account. Insert your USB modem, do not use the MobileConnect.app; instead use the Menu Bar to connect:</p>
<p><a href="http://blogs.agilefaqs.com/wp-content/uploads/2009/09/connect_meubar.png"><img class="aligncenter size-medium wp-image-951" title="Connectin to the Internet from Menu Bar" src="http://blogs.agilefaqs.com/wp-content/uploads/2009/09/connect_meubar-300x100.png" alt="Connectin to the Internet from Menu Bar" width="300" height="100" /></a></p>
<p>Hopefully this explains the step by step set-up process to get our Huawei Modem to work on  Snow Leopard.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.agilefaqs.com/2009/09/21/setting-up-huawei-mobile-connect-on-snow-leopard/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

