<?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>Juixe Techknow &#187; Java</title>
	<atom:link href="http://juixe.com/techknow/index.php/category/techknow/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://juixe.com/techknow</link>
	<description>Break Coders Block!</description>
	<lastBuildDate>Sat, 17 Jul 2010 15:38:50 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Top Worst Java Errors</title>
		<link>http://juixe.com/techknow/index.php/2010/03/08/top-worst-java-errors/</link>
		<comments>http://juixe.com/techknow/index.php/2010/03/08/top-worst-java-errors/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 06:26:07 +0000</pubDate>
		<dc:creator>TechKnow</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[TechKnow]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[code smell]]></category>
		<category><![CDATA[common errors]]></category>
		<category><![CDATA[hashmap]]></category>
		<category><![CDATA[mkdir]]></category>

		<guid isPermaLink="false">http://juixe.com/techknow/?p=1012</guid>
		<description><![CDATA[I&#8217;ve had my fair share of Java bugs.  There is a stage in a programmer&#8217;s career that he or she either knows that they rather manage a convenience store or that they can debug common Java errors just by the way the code smells.  Here are my list of worst common Java bugs [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve had my fair share of Java bugs.  There is a stage in a programmer&#8217;s career that he or she either knows that they rather manage a convenience store or that they can debug common Java errors just by the way the <a href="http://en.wikipedia.org/wiki/Code_smell">code smells</a>.  Here are my list of worst common Java bugs I have been frustrated to solve.  These issues have come up more than once, most often in code that I inherited, and had to fix under a time crunch or tight deadline.</p>
<p><b>mkdir</b><br />
I&#8217;ve had to fix a few bugs related to the mkdir() method in the File class.  The mkdir() method creates or makes a new directory.  The mkdir() method only creates one directory.  But in many situations, especially if the end user is supplying the path of the directory to be created, you will need to crate a whole new directory hierarchy.  Often times you will create a directory and subdirectories at one time.  In these situations, you want to use the mkdirs() method instead.  </p>
<p><b>Index Of</b><br />
Most software bugs are caused by assumptions made by the programmer.  One common assumption I see developers making is that file names have only one period to separate the file name from the file extension.  It is common to see code that finds the first period and everything after that period is assumed to be the extension.  Other assumptions regarding file names include that extensions are three characters long or that the file name does not have special characters.  The following code snippet is a dramatization of code I have seen in the field, which incorrectly tries parse the file extension.</p>
<pre class="brush: java;">
String filename = &quot;a.file.path.ext&quot;;
int index = filename.indexOf(&quot;.&quot;);
String extension = filename.substring(index);
</pre>
<p>A different approach, which would have the desired result is to use the lastIndexOf() instead.</p>
<p><b>Null Equals</b><br />
I&#8217;ve seen a whole slew of null pointer exceptions due to this sort of Java bug where a possibly null object reference will be used to check the equality of a hard coded constant.  Here is the code snippet of what I mean.</p>
<pre class="brush: java;">
boolean equals = maybeNullObjectReference.equals(&quot;CONSTANT&quot;);
</pre>
<p>The object reference may be null, so you need to check for null values.  I found that if you switch your thinking, you can write less code and still achieve a better solution that having to constantly check if the object is null.  A safe approach is to use a object that you know is not null, the constant value.</p>
<pre class="brush: java;">
boolean equals = &quot;CONSTANT&quot;.equals(maybeNullObjectReference);
</pre>
<p><b>Equals</b><br />
Yet another Java bug that can be easy to miss is the use of the Java equals operator instead of the equals() method.  The equals operator returns true if the two object references you are testing point to the same object instance.  The equals operator compares the equality of the object references, not the object values but since it reads the same it is easy to overlook.</p>
<p><b>Map Key</b><br />
The worst Java bug that I had to ever deal with involved the use of mutable objects as keys in hash maps.  The implementation of the Java HashMap is really simple, the hash code of the key is used to locate the bucket in which to store the map entry, which consists of the key/value pair.  Once you put a key/value pair in a hash map you should not change the value of the key, ever, in any way that changes the hash code.  If the key is changed where it generates a new hash code, you will not be able to locate the correct bucket in the HashMap that contains the key/value pair.  I had a scenario where key/value pairs were stored in a HashMap, then the keys where updated generating a new hash code, and there after the value was not able to located.</p>
]]></content:encoded>
			<wfw:commentRss>http://juixe.com/techknow/index.php/2010/03/08/top-worst-java-errors/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t Turn a Code Review Into a Code Rant</title>
		<link>http://juixe.com/techknow/index.php/2009/07/22/dont-turn-a-code-review-into-a-code-rant/</link>
		<comments>http://juixe.com/techknow/index.php/2009/07/22/dont-turn-a-code-review-into-a-code-rant/#comments</comments>
		<pubDate>Wed, 22 Jul 2009 20:54:48 +0000</pubDate>
		<dc:creator>TechKnow</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[TechKnow]]></category>

		<guid isPermaLink="false">http://www.juixe.com/techknow/?p=719</guid>
		<description><![CDATA[In programming circles and when talking about code, I&#8217;ve often hear mentioned the Perl slogan &#8220;There&#8217;s more than one way to do it.&#8221;  Thinking about the many ways we do it, whatever feature &#8216;it&#8217; represents, I believe that the root cause of many of the software bugs we encounter are because engineers implement the [...]]]></description>
			<content:encoded><![CDATA[<p>In programming circles and when talking about code, I&#8217;ve often hear mentioned the Perl slogan &#8220;There&#8217;s more than one way to do it.&#8221;  Thinking about the many ways we do it, whatever feature &#8216;it&#8217; represents, I believe that the root cause of many of the software bugs we encounter are because engineers implement the feature in more than one way, then refactor it down the line, then add new conditions, then forgot how it did what it did.  This often occurs because programming is like fashion, each season brings about a set of new best practices and technologies.  We update the implementation to adapt to the current best practices, new technologies, and new features and don&#8217;t remove old bit rotten code.</p>
<p>Recently I a debate with a fellow engineer whose code I reviewed.  As it is often the case, we had some existing functionality which we wanted to update with a feature.  Most of the code review revolved around one existing method whose existing code looked something like the following.</p>
<pre class="brush: java;">
public void setValue(DataRow dr) throws DataException {
  dataHelper.setValue(dr, false, true);
}
</pre>
<p>For the sake of this example, imagine that DataRow is a map of data that represents a row of data from a database and contains the meta-data of the columns it contains.  The new functionality need to support a DataRow with a less number of meta-data, columns, than normally expected.  We called this new feature partial value and so it was initially implemented as follows.</p>
<pre class="brush: java;">
public void setValue(DataRow dr) throws DataException {
  dataHelper.setValue(dr, false, true);
}

public void setPartialValue(DataRow dr) throws DataException {
  setPartial(true);
  setValue(qube);
  setPartial(false);
}
</pre>
<p>Believe it or not, I had a very difficult and long drawnout debate with the engineer that implemented the above code.  In my mind, there is no debate, the above code can be made to improve.  In the engineer&#8217;s mind, this was good enough for this feature for the time allotted for the the current specifications for this release and for whatever other reason he counjured up.</p>
<p>One of the concerns I originally brought up with the initial implementation of setPartialValue was that if the setValue method throws an exception after having set the partial state to true, then the code will break out of both methods leaving an improper partial state behind.  This will cause problems because the partial boolean field will have an invalid state which will caused problems if you the setValue method is called at a later point.  Another problem, with this sort of style of programming, is the following scenario.  Imagine that instead of a simple primitive boolean the partial property required an object reference that retained a lot of memory and you had the same exception, the memory for that field might not be garbage collected.</p>
<p>The sort of bugs that can be caused by the above implementation lead me to the following rule of thumb: Avoid instance fields.  Always question the need for instance property.  Try to be a team player and pass the object reference as a parameter down the stack.  If you only need this little bit of state information for a method call, pass it as a parameter!</p>
<p>I couldn&#8217;t believe we had this much disagreement over three lines.  At that moment I felt that code reviews are another form of micromanagement, but then I remembered who is the one that gets called if there is a bug in the system&#8230;.  Yeah, me!  The approach I was advocating did not require a object instance to keep the state of a boolean, which was only used within the context of the setPartialValue method call.  In my approach the set/getPartial methods are not needed and it could have been refactored to the following.</p>
<pre class="brush: java;">
public void setValue(DataRow dr) {
  setValue(dr, false);
}

private void setValue(DataRow dr, boolean partial) {
  dataHelper.setValue(dr, false, true, partial);
}

public void setPartialValue(DataRow dr) {
  setValue(dr, true);
}
</pre>
<p>The engineer countered that it &#8220;does not look nice&#8221; aesthetically to have a method call with to many parameters, and that we can&#8217;t just add parameters to methods whenever we need to pass another value.  Touché.  To this I responded that four parameters is not a big deal.   Even though four parameter will not negatively affect a method signature, lets imagine that a method signature grew to 10 parameters, this can be solved by encapsulating all these parameters to one object.  Programming languages such as Ruby use map literal for optional parameters and long parameter method signatures.  </p>
<p>In the end, I won the debate but it didn&#8217;t feel like a victory.  I doubted myself for pushing so strongly for what I know is right, in the end he was doing all the heavy lifting and this was just one small aspect of the feature as a whole.  There is a line that if crossed you will be considered a micromanaging standard fascist, but that if you do not enforce you will inherit unmaintainable code.  Coding standards goes beyond naming convention and third party libraries.  There is a fine line, and you need to walk the line.</p>
]]></content:encoded>
			<wfw:commentRss>http://juixe.com/techknow/index.php/2009/07/22/dont-turn-a-code-review-into-a-code-rant/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Top Griffon Tutorials and Resources</title>
		<link>http://juixe.com/techknow/index.php/2009/06/16/top-griffon-tutorials-and-resources/</link>
		<comments>http://juixe.com/techknow/index.php/2009/06/16/top-griffon-tutorials-and-resources/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 17:09:47 +0000</pubDate>
		<dc:creator>TechKnow</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[TechKnow]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.juixe.com/techknow/?p=663</guid>
		<description><![CDATA[Griffon is the rapid desktop development equivalent to Grails or Ruby on Rails. Griffon is a desktop application framework written in Groovy, a scripting language that runs on the Java Virtual Machine. Just like Grails or Rails, Griffon is very DRY and opinionated, comes with generators, and separates your models from your controllers from your [...]]]></description>
			<content:encoded><![CDATA[<p>Griffon is the rapid desktop development equivalent to Grails or Ruby on Rails. Griffon is a desktop application framework written in Groovy, a scripting language that runs on the Java Virtual Machine. Just like Grails or Rails, Griffon is very DRY and opinionated, comes with generators, and separates your models from your controllers from your views.</p>
<p>Griffon is a new project with the most recent release clocking in at version 0.1.1.  Even though Griffon is new, it is based mainstay libraries such as Groovy, Swing Builders, and SwingX.  Even with a version number of 0.1.1, Griffon provides enough features to develop functional and complex UIs.  To help getting started with Griffon, here is a collection of Griffon tutorials and resources that I have found insightful and helpful.</p>
<ul>
<li><a href="http://griffon.codehaus.org/">Griffon</a></li>
<li><a href="http://groovy.codehaus.org/Griffon+Quick+Start">Griffon Quick Start</a></li>
<li><a href="http://docs.codehaus.org/display/GROOVY/Griffon">Griffon Docs</a></li>
<li><a href="http://code.google.com/p/griffoninaction/">Griffon in Action Source Code</a></li>
<li><a href="http://www.juixe.com/techknow/index.php/2009/06/09/grinding-griffon-the-setup/">Grinding Griffon: The Setup</a></li>
<li><a href="http://www.juixe.com/techknow/index.php/2009/06/09/grinding-griffon-the-hit/">Grinding Griffon: The Hit</a></li>
<li><a href="http://www.jroller.com/aalmiray/entry/styling_a_griffon_application">Styling a Griffon application</a></li>
<li><a href="http://www.transentia.com.au/flatpress/?x=entry:entry090603-111307">Riding The Griffon</a></li>
<li><a href="http://www.slideshare.net/jshingler/griffon-in-front-grails-in-back-presentation">Griffon In Front Grails In Back</a></li>
<li><a href="http://blogs.sun.com/geertjan/entry/griffon_pre_alpha_netbeans_plugin">Griffon Pre-Alpha NetBeans Plugin Demoed at the NetBeans Booth</a></li>
<li><a href="http://jameswilliams.be/blog/entry/142">GriffonCast Simple Video Player</a></li>
<li><a href="http://www.kellyrob99.com/blog/2009/04/05/swingx-busy-label-demo-in-griffon/">SwingX busy label demo in Griffon and Groovy</a></li>
<li><a href="http://mikusa.blogspot.com/2009/04/griffon-applications.html">Griffon Applications</a></li>
<li><a href="http://josh-in-antarctica.blogspot.com/2008/09/my-first-griffon-app.html">My First Griffon App</a></li>
<li><a href="http://java.dzone.com/news/hello-griffon">Getting Started with Swing MVC Development on Griffon</a></li>
<li><a href="http://java.dzone.com/news/flying-with-griffon">Flying with Griffon</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://juixe.com/techknow/index.php/2009/06/16/top-griffon-tutorials-and-resources/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Google IO 2009: Mobile</title>
		<link>http://juixe.com/techknow/index.php/2009/06/07/google-io-2009-mobile/</link>
		<comments>http://juixe.com/techknow/index.php/2009/06/07/google-io-2009-mobile/#comments</comments>
		<pubDate>Sun, 07 Jun 2009 05:31:57 +0000</pubDate>
		<dc:creator>TechKnow</dc:creator>
				<category><![CDATA[Conference]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[TechKnow]]></category>

		<guid isPermaLink="false">http://www.juixe.com/techknow/?p=669</guid>
		<description><![CDATA[I, like many 10-5 developers not working directly with ajaxified web 2.0 applications, was not able to go to the Google I/O conference.  I don&#8217;t feel so bad not going since Google has just released video recordings of over 80+ technical presentations from Google I/0.  Most of the technical presentations are pushing Google&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>I, like many 10-5 developers not working directly with ajaxified web 2.0 applications, was not able to go to the <a href="http://code.google.com/events/io/">Google I/O</a> conference.  I don&#8217;t feel so bad not going since Google has just released video recordings of over <a href="http://code.google.com/events/io/sessions.html">80+ technical presentations</a> from Google I/0.  Most of the technical presentations are pushing Google&#8217;s APIs such as Android, Google App Engine, GWT, and Open Social.</p>
<p>As an aid for myself, and maybe other GWT developers, I have organized the pertinent Android and mobile talks as follows&#8230;</p>
<p><b><a href="http://www.youtube.com/watch?v=N6YdwzAvwOA">Turbo-charge your UI: How to Make your Android UI Fast and Efficient</a></b><br />
Learn practical tips, techniques and tricks for making your Android applications fast and responsive. This session will focus on optimizations recommended by the Android framework team to make the best use of the UI toolkit.</p>
<p><b><a href="http://www.youtube.com/watch?v=PAMtKVO2ch8">Supporting Multiple Devices with One Binary</a></b><br />
The Android platform is designed to run on a wide variety of hardware configurations. Learn how to take advantage of the application framework to make your application run on a wide variety of devices without having to build a custom version for each.</p>
<p><b><a href="http://www.youtube.com/watch?v=OUemfrKe65c">Coding for Life &#8212; Battery Life, That Is</a></b><br />
The three most important considerations for mobile applications are, in order: battery life, battery life, and battery life. After all, if the battery is dead, no one can use your application. In this session, Android engineer Jeffrey Sharkey will reveal the myriad ways &#8212; many unexpected &#8212; that your application can guzzle power and irritate users. You&#8217;ll learn about how networking affects battery life, the right and wrong ways to use Android-specific features such as wake locks, why you can&#8217;t assume that it&#8217;s okay to trade memory for time, and more.</p>
<p><b><a href="http://www.youtube.com/watch?v=aQ9w--W4J6U">A General-purpose Caching Architecture for Offline-capable Web Applications with HTML 5 Databases or Gears</a></b><br />
Puzzled by all the new architectural choices possible when trying to build an offline-capable web application? So were we until we decided to design the newly launched Gmail Mobile Web for iPhone and Android&#8217;s offline capabilities by analogy with microprocessor caches: offline via a portable write-through caching layer running on either HTML 5 or Gears databases.</p>
<p><b><a href="http://www.youtube.com/watch?v=-0UmSQeWsJc">Mastering the Android Media Framework</a></b><br />
Some monks might take a vow of silence, but Android certainly hasn&#8217;t. Attend this session, and help your app find its voice. Android engineer David Sparks will explore the multimedia capabilities of the Android platform, lifting the covers on the infrastructure to show you how it works and the right (and wrong!) ways to use it. You&#8217;ll learn how things work under the hood, how to dodge the common media-related developer pitfalls, and how to write secure and battery-efficient media code.</p>
]]></content:encoded>
			<wfw:commentRss>http://juixe.com/techknow/index.php/2009/06/07/google-io-2009-mobile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lookup Pattern and Java Generics</title>
		<link>http://juixe.com/techknow/index.php/2009/05/14/lookup-pattern-and-java-generics/</link>
		<comments>http://juixe.com/techknow/index.php/2009/05/14/lookup-pattern-and-java-generics/#comments</comments>
		<pubDate>Thu, 14 May 2009 14:34:52 +0000</pubDate>
		<dc:creator>TechKnow</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[TechKnow]]></category>

		<guid isPermaLink="false">http://www.juixe.com/techknow/index.php/2009/05/14/lookup-pattern-and-java-generics/</guid>
		<description><![CDATA[In some situations I dislike the verbosity of declaring Java generics.

Map&#60;Key&#60;String, Integer&#62;, List&#60;Item&#62;&#62; m = getItemsMap();

But using Java generics reduces other forms of tedious class casting common when using List and Map objects.  For example, in my current project their we use a Lookup pattern, used to locate concrete implementation to certain key services. [...]]]></description>
			<content:encoded><![CDATA[<p>In some situations I dislike the verbosity of declaring Java generics.</p>
<pre class="brush: java;">
Map&lt;Key&lt;String, Integer&gt;, List&lt;Item&gt;&gt; m = getItemsMap();
</pre>
<p>But using Java generics reduces other forms of tedious class casting common when using List and Map objects.  For example, in my current project their we use a Lookup pattern, used to locate concrete implementation to certain key services.  For example, to read and write application data we use a FileService which we can get via the Lookup class.</p>
<pre class="brush: java;">
FileService fs = (FileService)Lookup.lookup(FileService.class)
</pre>
<p>These services we lookup are stateless and we can switch the underlying implementation by modifying some configuration file.  In terms of this discussion, I wanted to note that casting.  Using Java generics that cast is not required if you use parameterized types.  Notice that the key of the lookup is a Java type, in our application it is an interface which the underlying implementation class needs to implement.  As you can imagine, the implmenation of the lookup method can be simplified to the following&#8230;</p>
<pre class="brush: java;">
public static Object lookup(final Class type) {
    // compoments is a map of implementation service
    Object comp = components.get(type);
    return comp;
}
</pre>
<p>Using Java genetics we can use the class information in the parameter to cast the return type correctly.  We can remove the required class cast by updating the code that locates the required concrete class for the service requested.  Here is a simplified version of the lookup method which removes the need to cast.</p>
<pre class="brush: java;">
public static &lt;t&gt; T lookup(final Class&lt;t&gt; type) {
    T comp = (T)components.get(type);
    return comp;
}
</pre>
<p>Now, using this updated lookup method and employing Java generics our lookup can be of the following form.</p>
<pre class="brush: java;">
FileService fs = Lookup.lookup(FileService.class);
</pre>
]]></content:encoded>
			<wfw:commentRss>http://juixe.com/techknow/index.php/2009/05/14/lookup-pattern-and-java-generics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google App Engine for Java</title>
		<link>http://juixe.com/techknow/index.php/2009/04/08/google-app-engine-for-java/</link>
		<comments>http://juixe.com/techknow/index.php/2009/04/08/google-app-engine-for-java/#comments</comments>
		<pubDate>Wed, 08 Apr 2009 17:47:38 +0000</pubDate>
		<dc:creator>TechKnow</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[TechKnow]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.juixe.com/techknow/index.php/2009/04/08/google-app-engine-for-java/</guid>
		<description><![CDATA[Google App Engine was originally released, in Google beta, a year ago.  Google App Engine originally had programming support for the Python programming language, but today, on the one year anniversary of its beta release Google has added Java support.  Building Java support into Google App Engine means that they have built it [...]]]></description>
			<content:encoded><![CDATA[<p>Google App Engine was originally released, in Google beta, a year ago.  Google App Engine originally had programming support for the Python programming language, but today, on the one year anniversary of its beta release Google has added Java support.  Building Java support into Google App Engine means that they have built it for JRuby, Groovy, JavaScript, and all those languages that run on the JVM.</p>
<p>You can request access to Google App Engine for Java via this <a href="http://appengine.google.com/promo/java_runtime">sign up</a>.  I am sure there will be a more news, documentation, and tutorials at Google I/O Developer Conference in May.  In the mean time here are plenty of resources to get you started.</p>
<p><b>Google App Engine for Java</b></p>
<ul>
<li><a href="http://googleappengine.blogspot.com/2009/04/seriously-this-time-new-language-on-app.html">Seriously this time, the new language on App Engine: Java</a></li>
<li><a href="http://code.google.com/appengine/docs/java/gettingstarted/">Google App Engine Getting Started: Java</a></li>
<li><a href="http://code.google.com/appengine/docs/java/overview.html">App Engine Java Overview</a></li>
<li><a href="http://code.google.com/appengine/docs/java/tools/eclipse.html">Using the Google Plugin for Eclipse</a></li>
<li><a href="http://groups.google.com/group/google-appengine-java">Google App Engine for Java Discussion Group</a></li>
<li><a href="http://code.google.com/eclipse/">Google Plugin for Eclipse</a></li>
<li><a href="http://blog.springsource.com/2009/04/07/write-your-google-app-engine-applications-in-groovy/">Write your Google App Engine applications in Groovy</a></li>
<li><a href="http://java.dzone.com/news/java-google-app-engine-time">Java on Google App Engine &#8211; Time To Play In The Cloud</a></li>
<li><a href="http://olabini.com/blog/2009/04/java-on-google-app-engine/">Java on Google App Engine</a></li>
<li><a href="http://olabini.com/blog/2009/04/dynamic-languages-on-google-app-engine-an-overview/">Dynamic languages on Google App Engine &#8211; an overview</a></li>
<li><a href="http://olabini.com/blog/2009/04/jruby-on-rails-on-google-app-engine/">JRuby on Rails on Google App Engine</a></li>
<li><a href="http://blog.bigcurl.de/2009/04/running-sinatra-apps-on-google.html">Running Sinatra apps on Google AppEngine (Java)</a></li>
<li><a href="http://code.google.com/appengine/docs/java/jrewhitelist.html">The JRE Class White List</a></li>
<li><a href="http://groups.google.com/group/google-appengine-java/web/will-it-play-in-app-engine">Will it play in App Engine   </a></li>
<li><a href="http://www.gridshore.nl/2009/04/08/java-on-google-app-engine-with-intellij/">Java on Google app engine with intelliJ</a></li>
<li><a href="http://www.infoq.com/news/2009/04/gae">Google Brings App Engine&#8217;s Pros and Cons to Java </a></li>
<li><a href="http://dev.helma.org/ng/Running+Rhino+and+Helma+NG+on+Google+App+Engine/">Running Rhino and Helma NG on Google App Engine</a></li>
<li><a href="http://broadcast.oreilly.com/2009/04/java-for-google-appengine-fina.html">Java for Google AppEngine, finally!</a></li>
<li><a href="http://fragmental.tw/2009/04/08/clojure-on-google-app-engine/">Getting Cloudy: Clojure on Google App Engine</a></li>
<li><a href="http://maxheapsize.com/2009/04/08/a-quick-look-at-google-app-engine-for-java/">A Quick Look at Google App Engine for Java</a></li>
<li><a href="http://www.byteonic.com/2009/nine-things-you-cannot-do-using-java-in-google-app-engine/">What you cannot do using Java in Google App Engine</a></li>
<li><a href="http://newfoo.net/2009/04/08/google-app-engine-will-change-java-web-development.html">Google App Engine Will Change Java Web Development</a></li>
<li><a href="http://stronglytypedblog.blogspot.com/2009/04/wicket-on-google-app-engine.html">Wicket on Google App Engine</a></li>
<li><a href="http://www.riffraff.info/2009/4/9/using-scala-with-google-app-engine">Using Scala with Google App Engine</a></li>
<li><a href="http://blog.nicksieger.com/articles/2009/04/11/jruby-on-google-appengine-first-impressions">JRuby on Google AppEngine: First Impressions</a></li>
<li><a href="http://www.vineetmanohar.com/2009/04/11/writing-java-hello-world-for-google-app-engine/">Writing Java Hello World for Google app engine</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://juixe.com/techknow/index.php/2009/04/08/google-app-engine-for-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java Web Service with HTTPS</title>
		<link>http://juixe.com/techknow/index.php/2009/04/07/java-web-service-with-https/</link>
		<comments>http://juixe.com/techknow/index.php/2009/04/07/java-web-service-with-https/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 22:51:18 +0000</pubDate>
		<dc:creator>TechKnow</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[TechKnow]]></category>

		<guid isPermaLink="false">http://www.juixe.com/techknow/index.php/2009/04/07/java-web-service-with-https/</guid>
		<description><![CDATA[I recently had to write a small Java client that calls out to a Java Web Service that was sitting behind HTTP over SSL (HTTPS).  From what I could tell, they had an expired or self signed certificate because calling the Web Service would throw an nested SSLHandshakeException, ValidatorException, and SunCertPathBuilderException that read something [...]]]></description>
			<content:encoded><![CDATA[<p>I recently had to write a small Java client that calls out to a Java Web Service that was sitting behind HTTP over SSL (HTTPS).  From what I could tell, they had an expired or self signed certificate because calling the Web Service would throw an nested SSLHandshakeException, ValidatorException, and SunCertPathBuilderException that read something like the following</p>
<blockquote><p>
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
</p></blockquote>
<p>After searching around I found a 2006 article from Andreas Sterbenz describing the solution to the <a href="http://blogs.sun.com/andreas/entry/no_more_unable_to_find">unable to find valid certification</a> problem I was encountering.  The article went into to much detail as far as I am concern but it did provide the right solution.</p>
<p>The gist of the solution is to download and compile this Java class that <a href="http://blogs.sun.com/andreas/resource/InstallCert.java">saves the certificates</a> from a particular domain to a file.  This program will save a keystore with the certificates called <b>jssecacerts</b> in the local directory where you run the Java class.</p>
<p>This keystore needs to be used from the client application that is connecting to a SSL service.  You can start the client Java process with the following Java system property: -Djavax.net.ssl.trustStore=&lt;PATH TO KEYSTORE&gt;  &#8230; or you can replace the the <b>cacerts</b> file under jre\lib\security for the JVM you are using with the jssecacerts keystore file created from the aforementioned Java program.</p>
<p>Using the keystore file correctly should fix the <b>unable to find valid certifiction</b> exception.</p>
]]></content:encoded>
			<wfw:commentRss>http://juixe.com/techknow/index.php/2009/04/07/java-web-service-with-https/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Top Programmers on Twitter to Follow</title>
		<link>http://juixe.com/techknow/index.php/2008/12/07/top-programmers-on-twitter-to-follow/</link>
		<comments>http://juixe.com/techknow/index.php/2008/12/07/top-programmers-on-twitter-to-follow/#comments</comments>
		<pubDate>Sun, 07 Dec 2008 05:57:32 +0000</pubDate>
		<dc:creator>TechKnow</dc:creator>
				<category><![CDATA[DotNET]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[TechKnow]]></category>

		<guid isPermaLink="false">http://www.juixe.com/techknow/index.php/2008/12/07/top-programmers-on-twitter-to-follow/</guid>
		<description><![CDATA[Earlier this year I created a short list of top rubyist to follow on Twitter.  At that time, that list was the first list of programming twitterers I had come across.  Since then many other folks have created lists of programmers that are on twitter to follow.  No matter how long the [...]]]></description>
			<content:encoded><![CDATA[<p>Earlier this year I created a short list of top rubyist to follow on Twitter.  At that time, that list was the first list of programming twitterers I had come across.  Since then many other folks have created lists of programmers that are on twitter to follow.  No matter how long the list of twitterers to follow is, you will always miss someone.  So instead of coming up with yet another list of programmers to follow on twitter, I came up with a list of list of favorite .net, ruby, java, and technologist to follow on twitter.</p>
<ul>
<li><a href="http://www.juixe.com/techknow/index.php/2008/04/30/ruby-on-twitter/">Rubyist on Twitter</a></li>
<li><a href="http://www.noop.nl/2008/12/top-50-twitterers-to-follow-for-developers.html">Top 50 Twitterers to Follow for Developers</a></li>
<li><a href="http://www.dogaoztuzun.com/post/Use-Twitter-to-Stay-On-Top-of-NET-Programming-News.aspx">Use Twitter to Stay On Top of .NET Programming News</a></li>
<li><a href="http://webdevdotnet.blogspot.com/2008/12/20-people-net-developers-should-follow.html">20 People .NET Developers Should Follow on Twitter</a></li>
<li><a href="http://webdevdotnet.blogspot.com/2008/12/next-top-20-net-developers-you-should.html">The Next 20 People .NET Developers Should Follow on Twitter</a></li>
<li><a href="http://www.kevinwilliampang.com/post/Best-ASPNET-Twitterers.aspx">Best ASP.NET Twitterers</a></li>
<li><a href="http://www.serpentine.com/blog/2008/12/05/functional-programmers-on-twitter/">Functional programmers on Twitter</a></li>
<li><a href="http://www.groovymag.com/blog.entry/001/2008/12/Groovy_tweeple_you_should_follow_00015.html">Groovy/Grails people you should follow on Twitter</a></li>
<li><a href="http://justtweetit.com/web-developers/">Web Developers Directory</a></li>
<li><a href="http://justtweetit.com/computer-programmers/">Computer Programmers Directory</a></li>
<li><a href="http://twitterholic.com/">Twitterholic Top 100</a></li>
</ul>
<p>If you like you can follow <a href="http://twitter.com/techknow">me</a> too.</p>
]]></content:encoded>
			<wfw:commentRss>http://juixe.com/techknow/index.php/2008/12/07/top-programmers-on-twitter-to-follow/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Silicon Valley Codecamp 2008</title>
		<link>http://juixe.com/techknow/index.php/2008/11/14/silicon-valley-codecamp-2008/</link>
		<comments>http://juixe.com/techknow/index.php/2008/11/14/silicon-valley-codecamp-2008/#comments</comments>
		<pubDate>Sat, 15 Nov 2008 01:35:58 +0000</pubDate>
		<dc:creator>TechKnow</dc:creator>
				<category><![CDATA[Conference]]></category>
		<category><![CDATA[DotNET]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[TechKnow]]></category>

		<guid isPermaLink="false">http://www.juixe.com/techknow/index.php/2008/11/14/silicon-valley-codecamp-2008/</guid>
		<description><![CDATA[There was a large contingent of Microsoft evangelist at this years Silicon Valley Codecamp 2008 pushing Microsoft Azure, XNA, and Silverlight technologies.  I was able to see Microsoft Surface in action.  Surface is an interactive table top, it reminds me of a large iPhone made into a coffee table.  Just like the [...]]]></description>
			<content:encoded><![CDATA[<p>There was a large contingent of Microsoft evangelist at this years <a href="http://www.juixe.com/techknow/index.php/2008/10/28/silicon-valley-code-camp-08/">Silicon Valley Codecamp 2008</a> pushing Microsoft Azure, XNA, and Silverlight technologies.  I was able to see Microsoft Surface in action.  Surface is an interactive table top, it reminds me of a large iPhone made into a coffee table.  Just like the iPhone, you gesture at the Surface screen to manipulate objects.  Java, Groovy, and Flex also had a good showing.  Below are conference notes from each of the sessions I was able to attend.</p>
<ul>
<li><a href="http://www.juixe.com/techknow/index.php/2008/11/09/java-2d-and-groovy-a-perfect-match/">Java 2D and Groovy</a></li>
<li><a href="http://www.juixe.com/techknow/index.php/2008/11/09/silverlight-20-it-just-keeps-getting-better/">Silverlight 2.0: It Just Keeps Getting Better</a></li>
<li><a href="http://www.juixe.com/techknow/index.php/2008/11/09/windows-azure/">Windows Azure</a></li>
<li><a href="http://www.juixe.com/techknow/index.php/2008/11/10/component-based-java-web-development-with-apache-wicket/">Component Based Java Web Development with Apache Wicket</a></li>
<li><a href="http://www.juixe.com/techknow/index.php/2008/11/10/silverlight-20-made-easy/">Silverlight 2.0 Made Easy</a></li>
<li><a href="http://www.juixe.com/techknow/index.php/2008/11/11/destroying-the-universe-with-xna/">Destroying the Universe with XNA</a><a></a></li>
<li><a href="http://www.juixe.com/techknow/index.php/2008/11/11/flex-and-3d-ui-for-games-and-more/">Flex and 3D UI: For Games and More</a><a></a></li>
</ul>
<p><span id="more-527"></span><br />
<img src='http://www.juixe.com/techknow/wp-content/uploads/2008/11/surface.jpg' alt='Microsoft Surface' /><br />
Microsoft Surface</p>
<p><img src='http://www.juixe.com/techknow/wp-content/uploads/2008/11/campus.jpg' alt='Foothill College' /><br />
Foothill College</p>
<p><img src='http://www.juixe.com/techknow/wp-content/uploads/2008/11/pizza.jpg' alt='Pizza Party' /><br />
Pizza Party</p>
<p>Technorati Tags: <a href="http://technorati.com/tag/sv" rel="tag">sv</a>, <a href="http://technorati.com/tag/codecamp" rel="tag"> codecamp</a>, <a href="http://technorati.com/tag/ms" rel="tag"> ms</a>, <a href="http://technorati.com/tag/azure" rel="tag"> azure</a>, <a href="http://technorati.com/tag/silverlight" rel="tag"> silverlight</a>, <a href="http://technorati.com/tag/xna" rel="tag"> xna</a>, <a href="http://technorati.com/tag/flex" rel="tag"> flex</a>, <a href="http://technorati.com/tag/flash" rel="tag"> flash</a>, <a href="http://technorati.com/tag/groovy" rel="tag"> groovy</a>, <a href="http://technorati.com/tag/java" rel="tag"> java</a>, <a href="http://technorati.com/tag/ria" rel="tag"> ria</a>, <a href="http://technorati.com/tag/javafx" rel="tag"> javafx</a>, <a href="http://technorati.com/tag/ui" rel="tag"> ui</a>, <a href="http://technorati.com/tag/3d" rel="tag"> 3d</a>, <a href="http://technorati.com/tag/iphone" rel="tag"> iphone</a></p>
]]></content:encoded>
			<wfw:commentRss>http://juixe.com/techknow/index.php/2008/11/14/silicon-valley-codecamp-2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Component Based Java Web Development with Apache Wicket</title>
		<link>http://juixe.com/techknow/index.php/2008/11/10/component-based-java-web-development-with-apache-wicket/</link>
		<comments>http://juixe.com/techknow/index.php/2008/11/10/component-based-java-web-development-with-apache-wicket/#comments</comments>
		<pubDate>Mon, 10 Nov 2008 07:45:30 +0000</pubDate>
		<dc:creator>TechKnow</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Conference]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[TechKnow]]></category>

		<guid isPermaLink="false">http://www.juixe.com/techknow/index.php/2008/11/10/component-based-java-web-development-with-apache-wicket/</guid>
		<description><![CDATA[Karthik Gurumurthy was at the Silicon Valley Codecamp 2008 to talk about Apache Wicket.  Wicket is yet another Java based web framework.  Wicket has a real nice separation between markup and code and consists of plain old java and plain old HTML.  Unlike the other Java frameworks, Wicket has minimum configuration, zero [...]]]></description>
			<content:encoded><![CDATA[<p>Karthik Gurumurthy was at the <b>Silicon Valley Codecamp 2008</b> to talk about <a href="http://wicket.apache.org/">Apache Wicket</a>.  Wicket is yet another Java based web framework.  Wicket has a real nice separation between markup and code and consists of plain old java and plain old HTML.  Unlike the other Java frameworks, Wicket has minimum configuration, zero XML files and no annotations.  Even though Wicket is yet another Java based web development framework it does not introduce yet another expression language.  Wicket templates are the most designer friendly web development view technology that I have seen, it essence they are pure HTML except for a wicket:id attribute that is added to tags for which you are interested in.  The Wicket Java component for a HTML form has the same familiar feel as Swing.  You first create a an instance of a Wicket page, then form object and add components to the HTML form elements such as text fields, password fields, etc, just as you would add JComponents to a JPanel.</p>
<p>Wicket is a relatively new framework compared with Struts, Grails, Spring MVC, Tapestry, GWT, WebWork, etc but it is getting traction.  Currently there are three books dedicated to web development with Apache Wicket.</p>
<ul>
<li><a href="http://www.amazon.com/dp/1590597222?tag=xeli-20">Pro Wicket</a></li>
<li><a href="http://www.amazon.com/dp/1932394982?tag=xeli-20">Wicket in Action</a></li>
<li><a href="http://www.amazon.com/dp/999379290X?tag=xeli-20">Enjoying Web Development with Wicket</a></li>
</ul>
<p>Technorati Tags: <a href="http://technorati.com/tag/wicket" rel="tag">wicket</a>, <a href="http://technorati.com/tag/apache" rel="tag"> apache</a>, <a href="http://technorati.com/tag/webdev" rel="tag"> webdev</a>, <a href="http://technorati.com/tag/java" rel="tag"> java</a>, <a href="http://technorati.com/tag/html" rel="tag"> html</a>, <a href="http://technorati.com/tag/component" rel="tag"> component</a></p>
]]></content:encoded>
			<wfw:commentRss>http://juixe.com/techknow/index.php/2008/11/10/component-based-java-web-development-with-apache-wicket/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
