<?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>CertPal &#187; CertPal</title>
	<atom:link href="http://www.certpal.com/blogs/author/certpal/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.certpal.com/blogs</link>
	<description>Technology and certifications</description>
	<lastBuildDate>Sun, 07 Mar 2010 02:43:07 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Linux for java development</title>
		<link>http://www.certpal.com/blogs/2010/03/linux-for-java-development/</link>
		<comments>http://www.certpal.com/blogs/2010/03/linux-for-java-development/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 02:43:07 +0000</pubDate>
		<dc:creator>CertPal</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[suse]]></category>

		<guid isPermaLink="false">http://www.certpal.com/blogs/?p=588</guid>
		<description><![CDATA[If you are considering to move your java development from Windows to Linux, here are a few pointers to take in mind. The move can be made easily and you can still do everything that you did in Windows. Linux is much from flexible and if you are willing to scale the learning curve, you have it made.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F03%2Flinux-for-java-development%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F03%2Flinux-for-java-development%2F" height="61" width="51" /></a></div><p style="text-align: center;"><a href="http://www.certpal.com/blogs/wp-content/uploads/win-to-linux.png"><img class="aligncenter size-full wp-image-589" style="border: 1px dashed #4281FF;" title="win-to-linux" src="http://www.certpal.com/blogs/wp-content/uploads/win-to-linux.png" alt="" width="531" height="264" /></a></p>
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">I have been wanting to move to a linux based environment for java development for quite a while now. Many PROD servers I deploy to run on a linux distro. So testing configuration / code changes becomes easier when you have multiple DEV environments. I deploy to CentOS among other linux flavors. I have settled on the Open  Suse 11.2 desktop. Here are some things I liked</p>
<ol>
<li>Open Suse managed to detect my Nvidia driver with Yast. I guess they teamed up with Nvidia to host a repository for linux drivers. I didnt have to download kernel sources or devels to enable dual monitor support (Which is otherwise required). Nice !</li>
<li>PPP over internet setup was pretty easy. Kinternet and the Yast configuration settings together let me connect to the net with ease.</li>
<li>Community support seems good. The Suse forums are alive and kicking.</li>
<li>In general there was software by default on the desktop that turned out to be very useful. I didn&#8217;t have to download extra components unless it was specific to my hardware, like a specialized driver.  ksnapshot for example is a cool way to capture screenshots.</li>
</ol>
<p>I am yet to try out Ubuntu. For some reason it does not detect all my hardware so it fails to install <img src='http://www.certpal.com/blogs/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  If you are still using windows to develop in java here are a few reasons you should switch</p>
<ol>
<li>Looks good on your resume. Learning to work with another OS / Desktop can broaden your perspective on getting things done.</li>
<li>Not as many viruses.</li>
<li>No IE <img src='http://www.certpal.com/blogs/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li>If you are someone that loves the command line client, you will enjoy getting things done quickly with the shell console.</li>
<li>Firewall configuration is pretty flexible and can be bent into any shape you want provided you know what you are doing.</li>
<li>Automatic updates managed by a package manager</li>
<li>You can switch to multiple workspaces to manage your windows.</li>
<li>etc etc.</li>
</ol>
<p>That said I did find some minor annoyances.</p>
<ol>
<li>No IE. Whether I like it or not some users still use IE to access some of my apps. So my selenuim based RC test cases will not fire the IE window anymore. I have to use tools like BrowserShots or Adobe&#8217;s BrowserLab to get things done.</li>
<li>Some applications require me to run a .exe file as a plugin. This is very rare but can be overcome by simulating programs on Wine.</li>
<li>Learning new shortcuts can be a pain. So if you feel frustrated dont give up. Remember that you had to do the same with windows when you started out. So it will ease with time.</li>
</ol>
<p>I am able to do everything that I used to do with windows and there are free tools  that support just about any software function you can think of.  Not being able to find the tools / software you need is just a myth. Almost any function you can think of that you are currently using in windows, is supported under linux. Make the switch and enjoy the stability of linux. Use another distro besides Open Suse ? Feel free to leave a comment.</p>
<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F03%2Flinux-for-java-development%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F03%2Flinux-for-java-development%2F" height="61" width="51" /></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.certpal.com/blogs/2010/03/linux-for-java-development/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SCJP Plus makes a comeback &#8211; Not</title>
		<link>http://www.certpal.com/blogs/2010/03/scjp-plus-second-delay/</link>
		<comments>http://www.certpal.com/blogs/2010/03/scjp-plus-second-delay/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 12:23:38 +0000</pubDate>
		<dc:creator>CertPal</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[certification]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[sun]]></category>

		<guid isPermaLink="false">http://www.certpal.com/blogs/?p=583</guid>
		<description><![CDATA[Sun has missed the dead line for launching the new SCJP plus certification. This is the second time the launch has failed to meet the dates.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F03%2Fscjp-plus-second-delay%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F03%2Fscjp-plus-second-delay%2F" height="61" width="51" /></a></div><p><a href="http://www.certpal.com/blogs/wp-content/uploads/nocert.png"><img class="alignright size-full wp-image-585" title="nocert" src="http://www.certpal.com/blogs/wp-content/uploads/nocert.png" alt="" width="108" height="131" /></a>Once again Sun has managed to miss the dead line for the SCJP Pus Beta certification. Last year Sun made an attempt to launch <a href="http://www.sun.com/training/certification/beta_scjp_plus.xml" target="_blank">SCJP Plus</a> but decided to delay it until JDK7 was launched. The SCJP plus BETA page has hence been changed to reflect the new BETA dates.</p>
<p>The new certification was supposed to change the way candidates took the exam by allowing them to code their way into earning their certificate. No more would the exam be served as one that has 100% multiple choice questions. Had the launch been a success candidates would have been confronted with coding problems, drag and drop questions and a reduced number of multiple choice questions.</p>
<p>The dead line to pick the candidates was February the 15th. That has been missed since none of the candidates were sent an email telling them about the status of their BETA exam. The exam was supposed to be launched by March 1st. This date has also been missed.</p>
<p>The BETA page was updated since last year to include more details. The BETA exam contains 9 coding problems and several drag and drop questions sprinkled with some multiple choice questions. The time allocated to finish the entire thing is 6 hours <img src='http://www.certpal.com/blogs/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Of course the real exam would not have 9 problems and allocate each candidate 6 hours. BETA exams try to drill candidates and then decide how easy / tough the exam is based on how much everyone scores. The pass % is also decided based on the BETA test.</p>
<p>Given that BETA exams are underway for some <a href="http://blogs.oracle.com/certification/2010/02/0180.html" target="_blank">Oracle certifications</a> it is unclear why Sun is lagging behind. Previous BETAs held by Sun have not dragged on for this long and the dates were always honored.</p>
<p>Whatever the reasons for the delay, I hope Sun / Oracle manage to launch the updated training / certification agenda successfully next time.</p>
<p><script type="text/javascript">// <![CDATA[
 var dzone_url = 'http://www.certpal.com/blogs/2010/03/scjp-plus-second-delay/';
// ]]&gt;</script><br />
<script type="text/javascript">// <![CDATA[
 var dzone_title = 'SCJP Plus makes a comeback - Not';
// ]]&gt;</script><br />
<script type="text/javascript">// <![CDATA[
 var dzone_blurb = 'Sun has missed the dead line for launching the new SCJP plus certification. This is the second time the launch has failed to meet the dates.';
// ]]&gt;</script><br />
<script type="text/javascript">// <![CDATA[
 var dzone_style = '2';
// ]]&gt;</script><br />
<script src="http://widgets.dzone.com/links/widgets/zoneit.js"></script></p>
<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F03%2Fscjp-plus-second-delay%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F03%2Fscjp-plus-second-delay%2F" height="61" width="51" /></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.certpal.com/blogs/2010/03/scjp-plus-second-delay/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle reveals plans for Sun certifications</title>
		<link>http://www.certpal.com/blogs/2010/02/oracle-sun-cert/</link>
		<comments>http://www.certpal.com/blogs/2010/02/oracle-sun-cert/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 10:06:38 +0000</pubDate>
		<dc:creator>CertPal</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[certification]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[sun]]></category>

		<guid isPermaLink="false">http://www.certpal.com/blogs/?p=576</guid>
		<description><![CDATA[Oracle reveals plans for changing / branding Sun certifications. The FAQ on the Oracle blog details the way things are headed]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F02%2Foracle-sun-cert%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F02%2Foracle-sun-cert%2F" height="61" width="51" /></a></div><p><a href="http://blogs.oracle.com/certification/2010/02/0200.html"><img class="alignright size-full wp-image-577" title="certificate" src="http://www.certpal.com/blogs/wp-content/uploads/certificate.png" alt="" width="81" height="107" /></a>Oracle is now slowly beginning to re-brand Sun certifications. The <a href="http://www.certpal.com/blogs/2010/01/sun-certification-jee-6/" target="_blank">certification hierarchy for EE 6 </a>now aligns more with Oracle&#8217;s vision of certifications by introducing sub categories and clubbed certification packages ( you become a master when you complete all the certifications in a package ).</p>
<p>A <a href="http://blogs.oracle.com/certification/2010/02/0200.html" target="_blank">detailed FAQ </a>is now available on the Oracle blog about what changes are taking place and why. The things to look out for are</p>
<ul>
<li>Sun&#8217;s retake promotions</li>
</ul>
<ul>
<li> The Sun brand of certification</li>
</ul>
<ul>
<li> Procedure to buy exam vouchers</li>
</ul>
<ul>
<li> Changes to certification objectives</li>
</ul>
<ul>
<li> Changes to the procedure used to certify</li>
</ul>
<ul>
<li> Contacts</li>
</ul>
<p>The FAQ covers some of the points mentioned above. If you are preparing for an existing certification, there is no point waiting for changes. Like the fate of all Sun related projects, certifications will also evolve and time will tell what it looks like a few months from now.</p>
<p><script type="text/javascript">// <![CDATA[
var dzone_url = 'http://www.certpal.com/blogs/2010/02/oracle-sun-cert/';
// ]]&gt;</script><br />
<script type="text/javascript">// <![CDATA[
var dzone_title = 'Oracle reveals plans for Sun certifications';
// ]]&gt;</script><br />
<script type="text/javascript">// <![CDATA[
var dzone_blurb = 'Oracle reveals plans for changing / branding Sun certifications. The FAQ on the Oracle blog details the way things are headed';
// ]]&gt;</script><br />
<script type="text/javascript">// <![CDATA[
var dzone_style = '2';
// ]]&gt;</script><br />
<script src="http://widgets.dzone.com/links/widgets/zoneit.js"></script></p>
<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F02%2Foracle-sun-cert%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F02%2Foracle-sun-cert%2F" height="61" width="51" /></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.certpal.com/blogs/2010/02/oracle-sun-cert/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nautilus SVN moves to RabbitVCS</title>
		<link>http://www.certpal.com/blogs/2010/02/nautilus-svn-rabbitvcs/</link>
		<comments>http://www.certpal.com/blogs/2010/02/nautilus-svn-rabbitvcs/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 04:33:22 +0000</pubDate>
		<dc:creator>CertPal</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://www.certpal.com/blogs/?p=569</guid>
		<description><![CDATA[Nautilus SVN moves to the RabbitVCS project. Some developers have reported better load times with the new project. If you are using SVN to manage your projects on linux, give this software a try]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F02%2Fnautilus-svn-rabbitvcs%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F02%2Fnautilus-svn-rabbitvcs%2F" height="61" width="51" /></a></div><p><a href="http://www.certpal.com/blogs/wp-content/uploads/rabbitvcs-rabbit.png"><img class="alignright size-full wp-image-572" title="rabbitvcs-rabbit" src="http://www.certpal.com/blogs/wp-content/uploads/rabbitvcs-rabbit.png" alt="" width="64" height="94" /></a>Nautilus SVN, the SVN client for linux had moved to <a href="http://rabbitvcs.org/" target="_blank">RabbitVCS </a> a few months back. From what I have read so far, the new client, while plugging into the old Nautilus manager, performs much better and does not hang up when the number of files to manage is on the rise. </p>
<p>RabbitVCS differs from Nautilus by attempting to have a pluggable interface for many types of source control systems. So SVN is just the beginning. You can check out the <a href="http://wiki.rabbitvcs.org/wiki/about/screenshots " target="_blank">screenshots</a> and install it on your favorite linux distro.  Here are a few teasers</p>
<p><strong>RabbitVCS:</strong></p>
<p><a href="http://www.certpal.com/blogs/wp-content/uploads/rabbitvcs-1.png"><img class="aligncenter size-full wp-image-570" title="rabbitvcs-1" src="http://www.certpal.com/blogs/wp-content/uploads/rabbitvcs-1.png" alt="" width="412" height="552" /></a></p>
<p><strong>Commit with the Rabbit:</strong></p>
<p><a href="http://www.certpal.com/blogs/wp-content/uploads/rabbitvcs-2.png"><img class="aligncenter size-full wp-image-571" title="rabbitvcs-2" src="http://www.certpal.com/blogs/wp-content/uploads/rabbitvcs-2.png" alt="" width="655" height="653" /></a><br />
<script type="text/javascript">var dzone_url = 'http://www.certpal.com/blogs/2010/02/nautilus-svn-rabbitvcs/';</script><br />
<script type="text/javascript">var dzone_title = 'Nautilus SVN moves to RabbitVCS';</script><br />
<script type="text/javascript">var dzone_blurb = 'Nautilus SVN moves to the RabbitVCS project. Some developers have reported better load times with the new project. If you are using SVN to manage your projects on linux, give this software a try';</script><br />
<script type="text/javascript">var dzone_style = '2';</script><br />
<script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"></script> </p>
<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F02%2Fnautilus-svn-rabbitvcs%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F02%2Fnautilus-svn-rabbitvcs%2F" height="61" width="51" /></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.certpal.com/blogs/2010/02/nautilus-svn-rabbitvcs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to turn off google buzz</title>
		<link>http://www.certpal.com/blogs/2010/02/how-to-turn-off-google-buzz/</link>
		<comments>http://www.certpal.com/blogs/2010/02/how-to-turn-off-google-buzz/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 06:06:00 +0000</pubDate>
		<dc:creator>CertPal</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[buzz]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://www.certpal.com/blogs/?p=564</guid>
		<description><![CDATA[How to turn off google buzz. Buzz integrates with your Gmail inbox and you can get rid of it if you want to.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F02%2Fhow-to-turn-off-google-buzz%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F02%2Fhow-to-turn-off-google-buzz%2F" height="61" width="51" /></a></div><p><a href="http://www.certpal.com/blogs/wp-content/uploads/no.png"><img class="alignright size-full wp-image-565" title="no" src="http://www.certpal.com/blogs/wp-content/uploads/no.png" alt="" width="65" height="65" /></a>I logged into a gmail inbox today, surprised to find &#8216;Google Buzz&#8217; asking me if I wanted in. I clearly said &#8216;No&#8217;. Not yet another social network. pfft. So after I said &#8216;No&#8217; there it was sitting comfortably on the navigation bar and telling me people were following me and I could follow them.</p>
<p>There is a small link on the bottom of your Gmail page that says &#8216;<strong>turn off buzz</strong>&#8216;. Click on that and you get disconnected from the social network. I wonder what google plans for Orkut.</p>
<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F02%2Fhow-to-turn-off-google-buzz%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F02%2Fhow-to-turn-off-google-buzz%2F" height="61" width="51" /></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.certpal.com/blogs/2010/02/how-to-turn-off-google-buzz/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle apologizes about kenai.com</title>
		<link>http://www.certpal.com/blogs/2010/02/oracle-kenai-com/</link>
		<comments>http://www.certpal.com/blogs/2010/02/oracle-kenai-com/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 05:44:16 +0000</pubDate>
		<dc:creator>CertPal</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[kenai]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[sun]]></category>

		<guid isPermaLink="false">http://www.certpal.com/blogs/?p=557</guid>
		<description><![CDATA[Oracle apologizes for its communication about kenai.com's future by saying that the future of kenai projects are secure at java.net]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F02%2Foracle-kenai-com%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F02%2Foracle-kenai-com%2F" height="61" width="51" /></a></div><p>After project owners were asked to move out of kenai.com, Oracle now admits that it did a poor job at communicating its plans for the project. An <a href="http://blogs.sun.com/projectkenai/entry/the_future_of_kenai_com" target="_blank">updated post</a> from Oracle says that the future of kenai.com projects is secure. Those projects will be migrated to java.net and continued as is. Here is an extract from the post</p>
<blockquote><p>We don&#8217;t believe it makes sense to continue investing in multiple hosted development sites that are basically doing the same thing. Our plan is to shut down kenai.com and focus our efforts on java.net as the hosted development community. We are in the process of migrating java.net to the kenai technology. This means that any project currently hosted on kenai.com will be able to continue as you are on java.net. We are still working out the technical details, but the goal is to make this migration as seamless as possible for the current kenai.com projects</p></blockquote>
<p>Most developers seem to be <a href="http://eriwen.com/tools/moving-to-github/">moving out of kenai.com</a> after being asked to leave. For those of you that do not want to move, there may still be hope <img src='http://www.certpal.com/blogs/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><script type="text/javascript">// <![CDATA[
var dzone_url = 'http://www.certpal.com/blogs/2010/02/oracle-kenai-com/';
// ]]&gt;</script><br />
<script type="text/javascript">// <![CDATA[
var dzone_title = 'Oracle apologizes about kenai.com';
// ]]&gt;</script><br />
<script type="text/javascript">// <![CDATA[
var dzone_blurb = '[description]';
// ]]&gt;</script><br />
<script type="text/javascript">// <![CDATA[
var dzone_style = '2';
// ]]&gt;</script><br />
<script src="http://widgets.dzone.com/links/widgets/zoneit.js"></script></p>
<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F02%2Foracle-kenai-com%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F02%2Foracle-kenai-com%2F" height="61" width="51" /></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.certpal.com/blogs/2010/02/oracle-kenai-com/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Error: ORA-01418: specified index does not exist</title>
		<link>http://www.certpal.com/blogs/2010/02/ora-01418-specified-index-does-not-exist/</link>
		<comments>http://www.certpal.com/blogs/2010/02/ora-01418-specified-index-does-not-exist/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 05:09:31 +0000</pubDate>
		<dc:creator>CertPal</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://www.certpal.com/blogs/?p=550</guid>
		<description><![CDATA[A look at the "Error: ORA-01418: specified index does not exist" problem and how it can be solved. The error is misleading at times and does not always mean that the specified index does not exist. You might simply not have the privilege to execute index related queries.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F02%2Fora-01418-specified-index-does-not-exist%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F02%2Fora-01418-specified-index-does-not-exist%2F" height="61" width="51" /></a></div><p>I ran into a weird little error while trying to tune the performance of a query in the oracle database. A table had an index on a VARCHAR2 column. After a fair number of inserts were made the population of this table grew to 1.5 million records. A query that did an join on the VARCHAR2 column was talking ages to get the results. Well, it was taking 900ms actually but the SLA for the API call is way below that.</p>
<p>An &#8220;explain plan for QUERY&#8221; statement was run followed by a select from plan_details. It turns out the index is never used and a full table scan was used to get the data. Hence the problem.</p>
<p>So all I have to do is find out why the index is not being picked up. It probably has to do with statistics, and a rebuild on the index might help I thought. Or may be I need to analyze the index. So I went about trying to do some of these things. There were no DBAs around so I had to experiment a little.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="sql" style="font-family:monospace;">analyze <span style="color: #993333; font-weight: bold;">INDEX</span> YOUR_INDEX_NAME validate structure;
&nbsp;
Error: ORA<span style="color: #66cc66;">-</span>01418: specified <span style="color: #993333; font-weight: bold;">INDEX</span> does <span style="color: #993333; font-weight: bold;">NOT</span> exist
&nbsp;
SQLState:  <span style="color: #cc66cc;">72000</span>
ErrorCode: <span style="color: #cc66cc;">1418</span></pre></td></tr></table></div>

<p>This was totally weird. I knew that the index did exist and the name was correct. To double check I ran this query</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> all_indexes <span style="color: #993333; font-weight: bold;">WHERE</span> INDEX_NAME<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'YOUR_INDEX_NAME'</span></pre></td></tr></table></div>

<p>And it did return my index correctly. After trying several other commands related to indexes they all returned the same thing. I tried to prefix the SCHEMA name and that did not help.</p>
<p>So it turns out, I do not have permissions to create indexes or do any operations related to them and that is what throws this error. The error is pretty misleading since there already exists an error code for insufficient prvileges for performing a given operation &#8211; Error: ORA-00990: missing or invalid privilege.</p>
<p>I passed the index related queries on to a DBA and the performance of my application queries were back on track. I hope this saves a developer the time I lost trying to find out why the index did not exist.</p>
<p>PS: Oracle 11 also has an index visibility option which can be verified with</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> INDEX_NAME<span style="color: #66cc66;">,</span>VISIBILITY <span style="color: #993333; font-weight: bold;">FROM</span> USER_INDEXES <span style="color: #993333; font-weight: bold;">WHERE</span> INDEX_NAME<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'YOUR_INDEX_NAME'</span>;</pre></td></tr></table></div>

<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F02%2Fora-01418-specified-index-does-not-exist%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F02%2Fora-01418-specified-index-does-not-exist%2F" height="61" width="51" /></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.certpal.com/blogs/2010/02/ora-01418-specified-index-does-not-exist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sun certification java ee 6 updates</title>
		<link>http://www.certpal.com/blogs/2010/01/sun-certification-jee-6/</link>
		<comments>http://www.certpal.com/blogs/2010/01/sun-certification-jee-6/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 16:28:45 +0000</pubDate>
		<dc:creator>CertPal</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[certification]]></category>
		<category><![CDATA[javaee]]></category>

		<guid isPermaLink="false">http://www.certpal.com/blogs/?p=539</guid>
		<description><![CDATA[A brief look at the certifications that Sun has planned to bring forward after the release of JEE6. Prepare yourself with this certification roadmap if you are gearing towards updating your certification or earning new ones.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F01%2Fsun-certification-jee-6%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F01%2Fsun-certification-jee-6%2F" height="61" width="51" /></a></div><p>Sun has a wide range of certifications to offer. Ever since java EE6 was released, changes have been made to the certification hierarchy and content to reflect the new specifications. Sun is also offering a discount of 10% to those that register for training / certification updates by Jan 31st 2010. Here is a comparison of the certification hierarchies</p>
<p><strong>Old hierarchy:</strong></p>
<p><a href="http://www.certpal.com/blogs/wp-content/uploads/sun_cert_hierarchy_old.png"><img class="aligncenter size-full wp-image-541" title="sun_cert_hierarchy_old" src="http://www.certpal.com/blogs/wp-content/uploads/sun_cert_hierarchy_old.png" alt="" width="608" height="203" /></a></p>
<p><strong>New hierarchy:</strong></p>
<p><a href="http://www.certpal.com/blogs/wp-content/uploads/sun_cert_hierarchy_new.png"><img class="aligncenter size-full wp-image-542" title="sun_cert_hierarchy_new" src="http://www.certpal.com/blogs/wp-content/uploads/sun_cert_hierarchy_new.png" alt="" width="609" height="558" /></a></p>
<p>The new hierarchy provides paths that are more specialized than the ones before. For example you can be a JSF expert. Web service + security is another specialization. Combining these certifications together can also earn you the title of a &#8220;<strong>Master</strong>&#8220;.</p>
<p>Apart from these changes, the core java certification &#8211; SCJP &#8211; is supposed to undergo an overhaul after the release of JDK7. Candidates are expected to code their way into passing an exam instead of selecting multiple choice questions. The exam is supposed to be renamed as SCJP plus. It was delayed after an <a href="http://www.selikoff.net/2009/08/27/scjp-java-programmer-plus-certification-delayed/" target="_blank">earlier attempt to launch it was unsuccessful</a> due to the JDK7 project taking higher priority. Whether we will see &#8220;plus&#8221; versions of developing web pages / invoking web services etc etc is yet to be seen.</p>
<p>Sun is about to provide an update to all its existing certifications. If you are interested in registering for training/notifications, you can <a href="http://www.sun.com/training/upcoming_java_ee_6.html" target="_blank">do so here</a>. At the time of this writing, there are 3 days left to register / get notifications.</p>
<p><script type="text/javascript">// <![CDATA[
 var dzone_url = 'http://www.certpal.com/blogs/2010/01/sun-certification-jee-6/';
// ]]&gt;</script><br />
<script type="text/javascript">// <![CDATA[
 var dzone_title = 'Sun certification java ee 6 updates';
// ]]&gt;</script><br />
<script type="text/javascript">// <![CDATA[
 var dzone_blurb = 'A brief look at the certifications that Sun has planned to bring forward after the release of JEE6. Prepare yourself with this certification roadmap if you are gearing towards updating your certification or earning new ones.';
// ]]&gt;</script><br />
<script type="text/javascript">// <![CDATA[
 var dzone_style = '2';
// ]]&gt;</script><br />
<script src="http://widgets.dzone.com/links/widgets/zoneit.js"></script></p>
<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F01%2Fsun-certification-jee-6%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F01%2Fsun-certification-jee-6%2F" height="61" width="51" /></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.certpal.com/blogs/2010/01/sun-certification-jee-6/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Will you continue to use Sun projects ?</title>
		<link>http://www.certpal.com/blogs/2010/01/sun-projects-poll/</link>
		<comments>http://www.certpal.com/blogs/2010/01/sun-projects-poll/#comments</comments>
		<pubDate>Sun, 24 Jan 2010 11:50:44 +0000</pubDate>
		<dc:creator>CertPal</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[poll]]></category>
		<category><![CDATA[project]]></category>
		<category><![CDATA[sun]]></category>

		<guid isPermaLink="false">http://www.certpal.com/blogs/?p=524</guid>
		<description><![CDATA[A poll to scratch the surface of the question 'Will Sun projects continue to be used in development and production environments around the world'. ]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F01%2Fsun-projects-poll%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F01%2Fsun-projects-poll%2F" height="61" width="51" /></a></div><p>A few days ago the EU had approved the takeover of Sun microsystems by Oracle. This brings to an end the long awaited acquisition. There have been several blog entries about the fate of the open source projects that Sun currently supports. I have read some of the arguments put forward about why developers should move away from / use certain projects.</p>
<p>However I also find myself in a dilemma. I installed GlassFish and deployed a few apps on it recently. I found it interesting and was impressed with it within a few minutes of using it. MySql is also a great open source project. There are many tools built around the database and it competes well with PostGresql. Netbeans is also a great IDE and supports glassfish.</p>
<p>I am very tempted to continue using these projects for the development of new pet projects and to learn new specs. Right now I expect the support for these projects to continue for a few years, and I do not really expect to see great innovation of any sort. The best case scenario is that Oracle leverages the usefulness of these projects and decides to keep them alive while giving them healthy financial support. One is allowed to dream <img src='http://www.certpal.com/blogs/wp-includes/images/smilies/icon_mrgreen.gif' alt=':mrgreen:' class='wp-smiley' /> </p>
<p>So it boils down to the following question. &#8220;<strong>Will you as a developer / architect / &lt;Insert technical position here&gt; continue to use projects like GlassFish, Netbeans, MySql etc ?</strong>&#8221; Or are you looking to move away to other open source projects immediately ? Voice your thoughts through this poll</p>
<p>Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.<br />
<script type="text/javascript">// <![CDATA[
var dzone_url = 'http://www.certpal.com/blogs/2010/01/sun-projects-poll/';
// ]]&gt;</script><br />
<script type="text/javascript">// <![CDATA[
var dzone_title = 'Will you continue to use Sun projects ?';
// ]]&gt;</script><br />
<script type="text/javascript">// <![CDATA[
var dzone_blurb = 'A poll to scratch the surface of the question 'Will Sun projects continue to be used in development and production environments around the world'. ';
// ]]&gt;</script><br />
<script type="text/javascript">// <![CDATA[
var dzone_style = '2';
// ]]&gt;</script><br />
<script src="http://widgets.dzone.com/links/widgets/zoneit.js"></script></p>
<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F01%2Fsun-projects-poll%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F01%2Fsun-projects-poll%2F" height="61" width="51" /></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.certpal.com/blogs/2010/01/sun-projects-poll/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Problems in production</title>
		<link>http://www.certpal.com/blogs/2010/01/problems-in-production/</link>
		<comments>http://www.certpal.com/blogs/2010/01/problems-in-production/#comments</comments>
		<pubDate>Thu, 14 Jan 2010 11:21:47 +0000</pubDate>
		<dc:creator>CertPal</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[problem]]></category>
		<category><![CDATA[prod]]></category>

		<guid isPermaLink="false">http://www.certpal.com/blogs/?p=514</guid>
		<description><![CDATA[Three anecdotes about problems that I encountered in various live environments recently. The variety of problems just goes to show that you can still encounter unexpected things after several hours of testing.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F01%2Fproblems-in-production%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F01%2Fproblems-in-production%2F" height="61" width="51" /></a></div><p><img class="alignright size-full wp-image-515" title="prod-burn" src="http://www.certpal.com/blogs/wp-content/uploads/prod-burn.PNG" alt="prod-burn" width="100" height="127" />I have been a tad busy fixing some weird little bugs lately. They helped me appreciate the multitude of things that can go wrong in a live environment and served as a gentle reminder that you should always be on your heels.</p>
<p>Here they are</p>
<p><strong>1. </strong><strong>LDAP and the user</strong></p>
<p>A web application product was configured to use an LDAP directory structure. The directory was segregated into roles / groups / OUs, the usual. One of the users had trouble logging into the product. This was weird because this person was a valid user and Outlook seemed to recognize him. Outlook uses the same LDAP tree. So I dug into it. The easiest way to check what is going on is to use a LDAP directory browser. I use the one provided by <a href="http://www.novell.com/coolsolutions/tools/13765.html" target="_blank">Novell for free</a>. The LDAP<strong>s</strong> support is not great but it will do for basic lookups.</p>
<p>So as I dug into the tree, it turns out this user was mapped as a group. Yes a group. The product was configured so that only the &#8220;user accounts&#8221; LDAP directory was looked into for valid users. So since this user was, ummm a group, the application was unable to find him. My only thought was &#8216;wow ! how did this go under the radar for so long ?&#8217;. The mistake was understandable though since groups and users are under a similar looking structure. The LDAP admin must have had too many doughnuts at lunch and probably dozed through when configuring the user into the system <img src='http://www.certpal.com/blogs/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><strong>2. Authentication failure</strong></p>
<p>This one involves the LDAP too. We built a web app recently that was supposed to check for users under a specific tree node. The logic was to bind to the LDAP and if that is successfull then it must mean that the user exists. Unfortunately the negative scenario to this logic was not tested all that well. The API did not throw an exception when the Bind failed. So this meant that I could login to the application without a password. This also meant I could use any user name I wanted to and login. Even one that does not exist. I was tempted to do some operations as MrBunnyRabbit76 but fixed the bug instead.</p>
<p><strong>3. FTP and the CPU</strong></p>
<p>Now comes this little gem. A FTP process had been scheduled in CRON to run every 10 minutes or so. Its job is to ensure that a local folder and a remote FTP folder are in sync with each other. The program used to do this is lftp with the R switch (for reverse). It so happens that the FTP account gets locked because it ran out of space. The account is unlocked the next day. However the lftp processes did not terminate for some reason when the account was locked.</p>
<p>I come back to check on a web application on the server and it gives a 503 error. hmm&#8230; weird I thought. Everything is fine, tomcat is up, apache is up and yet a 503. The problem was that the lftp processes that did not terminate caused the CPU to be overloaded. All other processes were begging for some CPU time. The lftp processes were sitting quietly and drinking up precious CPU power for almost 2 days. Once the processes were killed things went back to normal.</p>
<p>Weird things happen in PROD whether it is your fault or not. No matter how much you test, it always pays to be on your watch <img src='http://www.certpal.com/blogs/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F01%2Fproblems-in-production%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2010%2F01%2Fproblems-in-production%2F" height="61" width="51" /></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.certpal.com/blogs/2010/01/problems-in-production/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debugging HTTPS traffic</title>
		<link>http://www.certpal.com/blogs/2009/12/debugging-https-traffic/</link>
		<comments>http://www.certpal.com/blogs/2009/12/debugging-https-traffic/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 05:49:11 +0000</pubDate>
		<dc:creator>CertPal</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.certpal.com/blogs/?p=495</guid>
		<description><![CDATA[If you have to deal with HTTPS traffic and sniff it, it is possible. Learn a trick that debugging proxies use to analyze secure data and how they work around it. There are some drawbacks however, but developers can work around them.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2009%2F12%2Fdebugging-https-traffic%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2009%2F12%2Fdebugging-https-traffic%2F" height="61" width="51" /></a></div><p><img class="alignright size-full wp-image-503" title="security_lock" src="http://www.certpal.com/blogs/wp-content/uploads/security_lock.png" alt="security_lock" width="79" height="104" />There are times when you work with SSL traffic. Your website might be protected with a certificate so that traffic between you and the client is secure. At times like this, being a developer is troublesome. Browser cache settings need to be analyzed by looking at the HTTP headers. Encoding / Content type may need to be analyzed to ensure that a particular page is displayed correctly. These things cannot be looked into if the traffic is secure. There are situations under which the environment is secure but you must still sniff the data. So how do you manage this ?</p>
<p>Tools like <a href="http://www.charlesproxy.com/" target="_blank">Charles </a>(A debugging proxy) help you do this. Charles allows you to proxy to a secure connection over a protocol like HTTPS and still read the traffic. So how does it do this ? Lets have a look.</p>
<p>Your environment probably has a self signed certificate like the one issued below, using keytool.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">keytool <span style="color: #339933;">-</span>genkey <span style="color: #339933;">-</span>keyalg RSA <span style="color: #339933;">-</span>keysize <span style="color: #cc66cc;">1024</span> <span style="color: #339933;">-</span>alias example.<span style="color: #006633;">com</span> <span style="color: #339933;">-</span>keystore mystore.<span style="color: #006633;">ks</span> <span style="color: #339933;">-</span>validity <span style="color: #cc66cc;">9999</span>
&nbsp;
keytool <span style="color: #339933;">-</span>list <span style="color: #339933;">-</span>keystore .<span style="color: #339933;">/</span>mystore.<span style="color: #006633;">ks</span> <span style="color: #339933;">-</span>v
&nbsp;
Enter keystore password<span style="color: #339933;">:</span>  changeit
&nbsp;
Keystore type<span style="color: #339933;">:</span> jks
Keystore provider<span style="color: #339933;">:</span> SUN
&nbsp;
Your keystore contains <span style="color: #cc66cc;">1</span> entry
&nbsp;
Alias name<span style="color: #339933;">:</span> example.<span style="color: #006633;">com</span>
Creation date<span style="color: #339933;">:</span> Dec <span style="color: #cc66cc;">21</span>, <span style="color: #cc66cc;">2009</span>
Entry type<span style="color: #339933;">:</span> keyEntry
<span style="color: #003399;">Certificate</span> chain length<span style="color: #339933;">:</span> <span style="color: #cc66cc;">1</span>
<span style="color: #003399;">Certificate</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">:</span>
<span style="color: #003399;">Owner</span><span style="color: #339933;">:</span> CN<span style="color: #339933;">=</span>www.<span style="color: #006633;">org</span>.<span style="color: #006633;">com</span>, OU<span style="color: #339933;">=</span>Org, O<span style="color: #339933;">=</span>SomeCompany, L<span style="color: #339933;">=</span>Somewhere, ST<span style="color: #339933;">=</span>Someplace, C<span style="color: #339933;">=</span>US
Issuer<span style="color: #339933;">:</span> CN<span style="color: #339933;">=</span>www.<span style="color: #006633;">org</span>.<span style="color: #006633;">com</span>, OU<span style="color: #339933;">=</span>Org, O<span style="color: #339933;">=</span>SomeCompany, L<span style="color: #339933;">=</span>Somewhere, ST<span style="color: #339933;">=</span>Someplace, C<span style="color: #339933;">=</span>US
Serial number<span style="color: #339933;">:</span> 4b2ef9e0
Valid from<span style="color: #339933;">:</span> Mon Dec <span style="color: #cc66cc;">21</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">:</span>00<span style="color: #339933;">:</span><span style="color: #cc66cc;">24</span> GMT<span style="color: #339933;">+</span>05<span style="color: #339933;">:</span><span style="color: #cc66cc;">30</span> <span style="color: #cc66cc;">2009</span> until<span style="color: #339933;">:</span> Thu May 07 <span style="color: #cc66cc;">10</span><span style="color: #339933;">:</span>00<span style="color: #339933;">:</span><span style="color: #cc66cc;">24</span> GMT<span style="color: #339933;">+</span>05<span style="color: #339933;">:</span><span style="color: #cc66cc;">30</span> <span style="color: #cc66cc;">2037</span>
<span style="color: #003399;">Certificate</span> fingerprints<span style="color: #339933;">:</span>
MD5<span style="color: #339933;">:</span>  XX<span style="color: #339933;">:</span>XX<span style="color: #339933;">:</span>XX...
<span style="color: #006633;">SHA1</span><span style="color: #339933;">:</span> XX<span style="color: #339933;">:</span>XX<span style="color: #339933;">:</span>XX...
&nbsp;
<span style="color: #339933;">*******************************************</span>
<span style="color: #339933;">*******************************************</span></pre></td></tr></table></div>

<p>When a certificate like this one is presented to a web browser, it will look like so. Let&#8217;s extract the certificate and open it up.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">keytool <span style="color: #339933;">-</span>export <span style="color: #339933;">-</span>keystore .<span style="color: #339933;">/</span>mystore.<span style="color: #006633;">ks</span> <span style="color: #339933;">-</span>file .<span style="color: #339933;">/</span>testtex.<span style="color: #006633;">crt</span> <span style="color: #339933;">-</span>alias example.<span style="color: #006633;">com</span></pre></td></tr></table></div>

<p><strong>Untrusted self signed certificate:</strong></p>
<p><img class="aligncenter size-full wp-image-496" title="cert_not_trusted" src="http://www.certpal.com/blogs/wp-content/uploads/cert_not_trusted.png" alt="cert_not_trusted" width="345" height="355" /></p>
<p>Our certificate is obviously not trusted since it is self signed. A certificate signed by a CA will not exhibit a security warning. Like the one presented by google for the gmail login page, which is shown below</p>
<p><strong>Trusted certificate from google.com:</strong></p>
<p><img class="aligncenter size-full wp-image-498" title="google_cert_hierarchy" src="http://www.certpal.com/blogs/wp-content/uploads/google_cert_hierarchy.png" alt="google_cert_hierarchy" width="511" height="361" /></p>
<p>When you start a proxy that has HTTPS support, say charles for instance, it does the magic by inserting its own certificate into the certificate hierarchy. The Charles CA Certificate, now becomes the root certificate in this hierarchy, allowing it to decrypt the information that is sent between the client and server.</p>
<p><strong>Modified certificate hierarchy:</strong></p>
<p><img class="aligncenter size-full wp-image-499" title="charles_google_cert" src="http://www.certpal.com/blogs/wp-content/uploads/charles_google_cert.png" alt="charles_google_cert" width="520" height="611" /></p>
<p>Charles signs the certificate that google presents, so it will now be able to decrypt the information that is sent by the server. However the side effect is that your browser will no longer trust this certificate since the root CA is not in your trusted store.</p>
<p><strong>Untrusted connection due to modified hierarchy:</strong></p>
<p><img class="aligncenter size-full wp-image-500" title="charles_connection_not_trusted" src="http://www.certpal.com/blogs/wp-content/uploads/charles_connection_not_trusted.png" alt="charles_connection_not_trusted" width="574" height="308" /></p>
<p>You can get over the problem by importing the certificate or installing it into the MS trust store. This is one technique that proxies use to debug traffic. Know of another method / proxy software ?  Leave a comment. Happy debugging <img src='http://www.certpal.com/blogs/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<script type="text/javascript">var dzone_url = 'http://www.certpal.com/blogs/2009/12/debugging-https-traffic/';</script><br />
<script type="text/javascript">var dzone_title = 'Debugging HTTPS traffic';</script><br />
<script type="text/javascript">var dzone_blurb = '[description]';</script><br />
<script type="text/javascript">var dzone_style = '2';</script><br />
<script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"></script> </p>
<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2009%2F12%2Fdebugging-https-traffic%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2009%2F12%2Fdebugging-https-traffic%2F" height="61" width="51" /></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.certpal.com/blogs/2009/12/debugging-https-traffic/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Do you really need that design pattern ?</title>
		<link>http://www.certpal.com/blogs/2009/12/do-you-really-need-that-design-pattern/</link>
		<comments>http://www.certpal.com/blogs/2009/12/do-you-really-need-that-design-pattern/#comments</comments>
		<pubDate>Wed, 02 Dec 2009 15:25:16 +0000</pubDate>
		<dc:creator>CertPal</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[design]]></category>

		<guid isPermaLink="false">http://www.certpal.com/blogs/?p=481</guid>
		<description><![CDATA[Using design patterns where they do not belong can lead to over engineered code. Use patterns only when you really need to. Trivial code that is easy to maintain will always triumph over a complicated design pattern. In short, HelloWorld does not need a design pattern]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2009%2F12%2Fdo-you-really-need-that-design-pattern%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2009%2F12%2Fdo-you-really-need-that-design-pattern%2F" height="61" width="51" /></a></div><p>I chanced upon <a href="http://blogs.microsoft.co.il/blogs/gilf/archive/2009/11/22/applying-strategy-pattern-instead-of-using-switch-statements.aspx " target="_blank">a post </a>a while back about how a switch statement should be replaced with the strategy pattern. If you have not had a chance to go through it, please do. The post is not very long.  I found myself disagreeing very strongly with the author of the post and I was surprised to find that people thought this was a good idea.</p>
<p>The gist of the post was that using the Strategy pattern was better than using switch statements to determine which logic to execute. Here is why I think the idea used there was bad</p>
<ol>
<li>The introduction of the Strategy pattern, in the example, introduces three new classes. So for every case in a switch statement, we should go about replacing the corresponding code with a new class ? This could easily lead to an explosion in the number of classes.</li>
<li> Distributing logic across classes makes it harder for a developer to follow. When I traverse 2 / 3 links down a code path I might lose track of where I started.</li>
<li> Introducing a new case means I have to introduce one more class, remember to add that as a strategy and switch to that strategy correctly when the case is presented.</li>
<li>Introducing a new class to handle a &#8216;case&#8217; might not make sense. Classes are supposed to cohesively carry out a function. Introducing a new class for every function that a class is supposed to perform, dilutes the purpose of the class.</li>
<li>The code that was supposed to perform the switch case is simply done else where and called a strategy.</li>
</ol>
<p>Applying patterns where they do not belong, can be an anti pattern by itself. I can relate with what the author is trying to do. When I finished the &#8216;Head first design patterns&#8217; book I was racing to implement a pattern for everything that was around me. The book stopped me right there and warned &#8216;HelloWorld does not need a design pattern&#8217;. And they are absolutely right. For a design pattern to succeed, you need</p>
<ol>
<li>The right problem to apply the pattern.</li>
<li>Correct implementation of the pattern to solve the problem.</li>
<li>Knowledge and relevant documentation if necessary, to let the maintenance developer down the line know that this is how you used the pattern.</li>
</ol>
<p>Patterns are meant to solve common design problems but trying to use them everywhere can lead to overly engineered code that is hard to read and maintain. Use patterns only when they are necessary and help you solve the problem.</p>
<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2009%2F12%2Fdo-you-really-need-that-design-pattern%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2009%2F12%2Fdo-you-really-need-that-design-pattern%2F" height="61" width="51" /></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.certpal.com/blogs/2009/12/do-you-really-need-that-design-pattern/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wave needs a decent client</title>
		<link>http://www.certpal.com/blogs/2009/11/wave-needs-a-decent-client/</link>
		<comments>http://www.certpal.com/blogs/2009/11/wave-needs-a-decent-client/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 14:23:05 +0000</pubDate>
		<dc:creator>CertPal</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[wave]]></category>

		<guid isPermaLink="false">http://www.certpal.com/blogs/?p=469</guid>
		<description><![CDATA[A wave client is the need of the hour for google wave. The wave server has been open sourced and pretty much any one can host their own wave. However good clients are hard to come by. The best one that is open sourced hardly has any of the features that the GWT client of google has.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2009%2F11%2Fwave-needs-a-decent-client%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2009%2F11%2Fwave-needs-a-decent-client%2F" height="61" width="51" /></a></div><p>I successfully installed a wave (google) server on a windows box a few days earlier. It was a great feeling. Here are the components that made up the server</p>
<ul>
<li> Open fire XMPP server</li>
</ul>
<ul>
<li> Postgres database to be used by XFire.</li>
</ul>
<ul>
<li> Wave related server jar which runs the server</li>
</ul>
<ul>
<li> Wave command line client that runs the simplistic console client.</li>
</ul>
<p>I started the console client and typed in a few commands to go through the waves. New, open, view waves were some commands that the command line console allowed you to execute. This client was a simple RI provided by google. If you would like to install a server on your own, take a look at the <a href="http://code.google.com/p/wave-protocol/wiki/Installation" target="_blank">installation instructions</a>.</p>
<p><strong>Wave console client:</strong></p>
<p><img class="aligncenter size-medium wp-image-475" title="wave-console-client" src="http://www.certpal.com/blogs/wp-content/uploads/wave-console-client-300x179.PNG" alt="wave-console-client" width="300" height="179" /></p>
<p>I also had the option of federating this server with wavesandbox.com but I held back. I wanted to test out the features of my wave server first. So, I went about hunting for a client. The GWT client that google showcased in its IO Dev preview was impressive. So surely they have an open source implementation of a decent wave client that can be installed somewhere ? It seems not.</p>
<p>I was a little disappointed with this. The best UI I could find that would integrate with a wave server <a href="http://github.com/Thomas101/GUI-client-for-google-Wave" target="_blank">was here</a>. This was a java client with very minimal functionality. That said you have to thank the author for providing it. Its about the only decent looking client that can talk with a wave server.</p>
<p>There are other clients out there. One written in adobe AIR called <a href="http://www.adobe.com/cfusion/marketplace/index.cfm?event=marketplace.offering&amp;offeringid=16581&amp;marketplaceid=1 " target="_blank">Waver</a> can be used as a desktop client for waves. However it only integrates with google wave, not other waves. Another one called <a href="http://www.getwaveboard.com/" target="_blank">WaveBoard</a> also seems to target google wave and Macs. I don&#8217;t own a Mac so I could not check it out.</p>
<p>This seems like the need of the hour to me. A good wave client. Not a &#8220;google wave&#8221; client but a &#8220;wave client&#8221;. Adoption of the wave will be much better if we had a good client to go with it. How many times have you seen blog posts about google wave with comments that go like &#8216;Oh boy I wish I had a google wave invite right now&#8217;. These people need not wait for an invite. You can download and install a working wave server. If you had a cool looking client, people all around the world could be using wave right now without a google invite at all. Lack of a good wave client seems to be a bottle neck to wave usage. We need tools like Outlook / Thunderbird / &lt;Your favorite mail client goes here&gt; that help us access email, do the same for wave.</p>
<p>So how desperate are people to get google wave invites ? Invites are being auctioned off at ebay for anywhere between 1-15$ ! That is how desperate they are.(Search for &#8216;google wave&#8217; in ebay) Now if only we had a cool looking client, these people could be waving away in another server much like google&#8217;s wave. May be there is a client out there right now and I am yet to find it. If you know of one, do feel free to comment. If there is none, a few programmers will have to get together and make a good looking one with all the features that the GWT google client has.</p>
<p><strong>Wave invites at ebay:</strong></p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-471" style="border: 1px solid black;" title="google-eave-invite-ebay" src="http://www.certpal.com/blogs/wp-content/uploads/google-eave-invite-ebay.PNG" alt="google-eave-invite-ebay" width="447" height="190" /></p>
<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2009%2F11%2Fwave-needs-a-decent-client%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2009%2F11%2Fwave-needs-a-decent-client%2F" height="61" width="51" /></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.certpal.com/blogs/2009/11/wave-needs-a-decent-client/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Coding with JDK7</title>
		<link>http://www.certpal.com/blogs/2009/11/coding-with-jdk7/</link>
		<comments>http://www.certpal.com/blogs/2009/11/coding-with-jdk7/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 16:21:02 +0000</pubDate>
		<dc:creator>CertPal</dc:creator>
				<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.certpal.com/blogs/?p=456</guid>
		<description><![CDATA[A brief look at the new syntax and semantics that govern the JDK 7 milestone 5 release. These changes will make developers code a little differently in java. ]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2009%2F11%2Fcoding-with-jdk7%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2009%2F11%2Fcoding-with-jdk7%2F" height="61" width="51" /></a></div><p><img class="alignright size-full wp-image-462" title="jdk7_code" src="http://www.certpal.com/blogs/wp-content/uploads/jdk7_code.PNG" alt="jdk7 code" width="103" height="141" />The JDK7 milestone 5 update is <a href="http://blogs.sun.com/mr/entry/jdk7_m5" target="_blank">available for download</a>. Developers now have a chance to try coding with the new language semantics and see for themselves what it is like. The 4 major changes that affect the way one codes in java as of JDK 7 are</p>
<ul>
<li>Using underscores in numerals.</li>
</ul>
<ul>
<li> Diamond syntax used to work with collections + generics.</li>
</ul>
<ul>
<li> Using Strings in switch statements.</li>
</ul>
<ul>
<li> Making use of binary literals</li>
</ul>
<p>Here is a short code sample that you can use to check the new features out. Use a plain text editor and your old friends javac and java, to test it out. IDEs will not support the new syntax and will most likely complain.</p>
<p><strong>Sample JDK 7 Code:</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Jdk7Tests <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        Jdk7Tests jdk7Tests <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Jdk7Tests<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        jdk7Tests.<span style="color: #006633;">integersWithUnderscores</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        jdk7Tests.<span style="color: #006633;">stringSwitch</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        jdk7Tests.<span style="color: #006633;">binaryLiteral</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        jdk7Tests.<span style="color: #006633;">diamond</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> integersWithUnderscores<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span>_2<span style="color: #339933;">;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        i<span style="color: #339933;">*=</span><span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">int</span> j<span style="color: #339933;">=</span><span style="color: #cc66cc;">2</span>_0<span style="color: #339933;">;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">-</span>j<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>       
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> stringSwitch<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">String</span> key <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;akey&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">switch</span> <span style="color: #009900;">&#40;</span>key<span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">case</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">:</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Nothing&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">case</span> <span style="color: #0000ff;">&quot;akey&quot;</span><span style="color: #339933;">:</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Matched akey&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000000; font-weight: bold;">default</span><span style="color: #339933;">:</span>
        <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> binaryLiteral<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">byte</span> aByte <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0b001<span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">short</span> aShort <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">short</span><span style="color: #009900;">&#41;</span>0b010<span style="color: #339933;">;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>aByte <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; &quot;</span> <span style="color: #339933;">+</span> aShort<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> diamond<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        Set<span style="color: #339933;">&lt;</span>String<span style="color: #339933;">&gt;</span> set <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> TreeSet<span style="color: #339933;">&lt;&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        set.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;c&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        set.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;b&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        set.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;a&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> val <span style="color: #339933;">:</span> set<span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>val<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p><strong>Underscores and numerals: </strong></p>
<p>This feature will be great to process SSNs / phone numbers. No more putting the data into a String, parsing it, stripping it off underscores, and then putting it into an integer. But confusion arises when you try to do some arithmetic with the numeral. What is 1_2 * 2 ? The JVM strips the underscores when processing the operation as can be seen from the code example above. Thus 1_2 * 10 = 120 and 120 &#8211; 2_0 = 100. Simple</p>
<p><strong>Diamond:</strong></p>
<p>This should simplify instantiating collections. Time to update my auto complete code templates in anticipation of JDK 7. It is a little easier to read the code inside the diamond() method, in my opinion. Nothing more to the syntax though.</p>
<p><strong>Switch with strings:</strong></p>
<p>This is a pretty neat feature. You can now switch using Strings besides int, etc etc. Code that used to assign int variables to their corresponding String counterparts can now use this feature to simplify their code. Often code that contains call back methods in several places might set a int variable in one place, indicating that a particular String was found and then process this at a later point in time, using a switch construct. Some developers use this technique to write code that processes XML with SAX. They should be able to chop a few lines off that code using this feature.</p>
<p><strong>Binary literals:</strong></p>
<p>You can now use a binary literal representation and have that converted to a data type, say a byte or short, with very little code. I am not able to think of a scenario where I would use this regularly. But some of those coding practice problems that involve bits should be easier to write up <img src='http://www.certpal.com/blogs/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Other features of interest that do not necessarily affect programming, involve better algorithm implementations and performance improvements. These improvements are said to bring a many fold increase to performance in some applications. Test them out if you have the time.<br />
<script type="text/javascript">var dzone_url = 'http://www.certpal.com/blogs/2009/11/coding-with-jdk7/';</script><br />
<script type="text/javascript">var dzone_title = 'Coding with JDK7';</script><br />
<script type="text/javascript">var dzone_blurb = 'A brief look at the new syntax and semantics that govern the JDK 7 milestone 5 release. These changes will make developers code a little differently in java. ';</script><br />
<script type="text/javascript">var dzone_style = '2';</script><br />
<script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"></script> </p>
<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2009%2F11%2Fcoding-with-jdk7%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2009%2F11%2Fcoding-with-jdk7%2F" height="61" width="51" /></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.certpal.com/blogs/2009/11/coding-with-jdk7/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Interview filter question</title>
		<link>http://www.certpal.com/blogs/2009/11/interview-filter-question/</link>
		<comments>http://www.certpal.com/blogs/2009/11/interview-filter-question/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 16:10:01 +0000</pubDate>
		<dc:creator>CertPal</dc:creator>
				<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.certpal.com/blogs/?p=342</guid>
		<description><![CDATA[Some java interview filter questions that are asked in many interviews. The questions are real easy, but if you get them wrong it is curtains for you.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2009%2F11%2Finterview-filter-question%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2009%2F11%2Finterview-filter-question%2F" height="61" width="51" /></a></div><p>Developers interview candidates every now and then. There are days when you need to interview 4 candidates, and finish your work too. Then there are times you go to work on a Saturday to support an interview drive. Whatever the case, it really pays to have a few filter questions that should tell you whether a candidate is full of gas or if they are worth their salt. These questions can be a real time saver. Here are 2 questions that many developers use.</p>
<p><strong>1. Class hierarchy:</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> A
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> doSomething<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;A&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> B <span style="color: #000000; font-weight: bold;">extends</span> A
<span style="color: #009900;">&#123;</span>
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> doSomething<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;B&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Give a candidate a class hierarchy like the one above and ask them something like, &#8216;How should you instantiate these objects so the output is &#8216;A&#8217; / &#8216;B&#8221;. The you can drill down and ask them about the different instantiation combination. Anyone that says B b = new A(); will instantiate, is out of here.</p>
<p><strong>2. Name them: </strong></p>
<p>This is my favorite. It has helped me filter a lot of candidates and has saved me so much time.</p>
<blockquote><p>What is System, out and println in System.out.println()</p></blockquote>
<p>There are many wrong answers that I have heard. Some one once said &#8216;System.out&#8217; is a package. Another said &#8216;The entire thing is a method&#8217;. Now I do not expect a candidate to tell me out is a PrintStream object, but at the very least I would like them to identify that System is a class and println() is a method. Many candidates fail to do this. There are some with 6+ years of experience that get this wrong and some of them turn hostile when asked this question, saying they should not be expected to know the answer after spending so many years coding.</p>
<p>For candidates with a little more experience you can ask questions that test knowledge of Concurrent object modification and how they are related to Collections, questions about Threads etc. After developing a few of these &#8216;litmus test&#8217; questions, I also found how not to ask questions.</p>
<ul>
<li>Avoid asking questions that may confuse the candidate. Be very clear and concise when asking the question.</li>
</ul>
<ul>
<li>Do not ask trick questions. If the question is twisted, most candidates will get it wrong.</li>
</ul>
<ul>
<li>Using design level questions to filter candidates can be hard. Two designs are almost never the same.</li>
</ul>
<ul>
<li>If a candidate gets one of these questions wrong, do not assume immediately that they answered incorrectly. Sometimes when I reiterate a point or explain a question more clearly the candidate says &#8216;Ohh I thought you meant Y instead of X&#8217;.</li>
</ul>
<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2009%2F11%2Finterview-filter-question%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.certpal.com%2Fblogs%2F2009%2F11%2Finterview-filter-question%2F" height="61" width="51" /></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.certpal.com/blogs/2009/11/interview-filter-question/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
