<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;D0YASXk-eyp7ImA9WhdaFk0.&quot;"><id>tag:blogger.com,1999:blog-8923228888140468740</id><updated>2011-10-26T00:59:08.753-04:00</updated><category term="rest" /><category term="junit" /><category term="google analytics" /><category term="visual c++" /><category term="guice" /><category term="mysql" /><category term="java" /><category term="timezones" /><category term="statelessness" /><title>Where cows roam free...</title><subtitle type="html">One man's ramblings about programming, business and life</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://cowwoc.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://cowwoc.blogspot.com/" /><author><name>Gili</name><uri>http://www.blogger.com/profile/14922549904945062649</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/WhereCowsRoamFree" /><feedburner:info uri="wherecowsroamfree" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;D0YASH87fSp7ImA9WhdaFk0.&quot;"><id>tag:blogger.com,1999:blog-8923228888140468740.post-5858950844685762636</id><published>2011-10-26T00:59:00.001-04:00</published><updated>2011-10-26T00:59:09.105-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-26T00:59:09.105-04:00</app:edited><title>Lessons learned from Mona Lisa (part 2)</title><content type="html">&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; I learned yet another important lesson about why it's extremely
 important to provide the fitness evaluator the exact same image as 
shown to the user.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; If you recall the original problem I reported was that the candidate
 image was being scaled down before evaluation, thereby allowing many 
pixels to avoid detection/correction. Yesterday I enabled anti-aliasing 
for the image shown to the user. I figured so long as the evaluator was 
seeing 100% of the pixels (no scaling going on) I should be safe, but it
 turns out this isn't enough.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Take a look at the following images:&lt;br /&gt;
&lt;br /&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-KR74CCEQzcg/TqeTLLQ0s6I/AAAAAAAAAAU/FaTjNP3A8yA/s1600/antialiasing-on.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="299" src="http://1.bp.blogspot.com/-KR74CCEQzcg/TqeTLLQ0s6I/AAAAAAAAAAU/FaTjNP3A8yA/s320/antialiasing-on.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Anti-aliasing Enabled&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/--o-ECrI7oHE/TqeTKI86txI/AAAAAAAAAAM/FVW2zDGPdhg/s1600/antialiasing-off.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="299" src="http://4.bp.blogspot.com/--o-ECrI7oHE/TqeTKI86txI/AAAAAAAAAAM/FVW2zDGPdhg/s320/antialiasing-off.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Anti-Aliasing Disabled&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
They show the exact same 
candidates with anti-aliasing enabled and disabled. Notice how the 
anti-aliased version has "streaks" of errors across the face, similar to
 the problem I was seeing when the candidate was being scaled. It turns 
out that sometimes the candidates contains polygons that introduce 
errors into the image in the form of "streaks" (polygons rendered with 
sub-pixel precision). The interesting thing is that aliasing suppresses 
these errors so the evaluator function does not see it. Consequently, 
the users sees a whole bunch of errors which the fitness function will 
never fix. Sounds familiar?&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; In conclusion: you should always (always!) pass the fitness function
 the exact same image you display to the user. Better safe than sorry :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8923228888140468740-5858950844685762636?l=cowwoc.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WhereCowsRoamFree/~4/tB3lV2aarXk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cowwoc.blogspot.com/feeds/5858950844685762636/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8923228888140468740&amp;postID=5858950844685762636" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8923228888140468740/posts/default/5858950844685762636?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8923228888140468740/posts/default/5858950844685762636?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/WhereCowsRoamFree/~3/tB3lV2aarXk/lessons-learned-from-mona-lisa-part-2.html" title="Lessons learned from Mona Lisa (part 2)" /><author><name>Gili</name><uri>http://www.blogger.com/profile/14922549904945062649</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-KR74CCEQzcg/TqeTLLQ0s6I/AAAAAAAAAAU/FaTjNP3A8yA/s72-c/antialiasing-on.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://cowwoc.blogspot.com/2011/10/lessons-learned-from-mona-lisa-part-2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkIFQHY6fCp7ImA9WhdaFE8.&quot;"><id>tag:blogger.com,1999:blog-8923228888140468740.post-1682976734840764051</id><published>2011-10-21T01:07:00.003-04:00</published><updated>2011-10-23T21:41:51.814-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-23T21:41:51.814-04:00</app:edited><title>Lessons learned from Mona Lisa</title><content type="html">I've been studying Genetic Algorithms using Roger Alsing's &lt;a href="http://rogeralsing.com/2008/12/07/genetic-programming-evolution-of-mona-lisa/"&gt;Evolution of Mona Lisa&lt;/a&gt; algorithm over the past month and made some interesting discoveries:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Using opaque polygons improves rendering performance (and by extension the performance of the fitness function) by an order of magnitude.&lt;/li&gt;
&lt;li&gt;In all things, favor many small changes over drastic large changes...&lt;/li&gt;
&lt;li&gt;When adding a new polygon, give it a size of 1 pixel instead of assigning it vertexes with random coordinates. This improves its chances of survival.&lt;/li&gt;
&lt;li&gt;When adding a new vertex, instead of dropping it into a random position give it the same position as an existing vertex in the polygon. It won't modify the polygon in any noticeable way, but it will open the door for the "move vertex" mutation to move more vertexes than it could before.&lt;/li&gt;
&lt;li&gt;When moving vertexes, favor many small moves (3-10 pixels at a time) instead of trying to span the entire canvas.&lt;/li&gt;
&lt;li&gt;If you're going to damp mutations over time, damp the amount of change as opposed to the probability of change.&lt;/li&gt;
&lt;li&gt;The effects of damping are minimal. It turns out that if you've followed the above steps (favor small changes) there should be no real need to damp.&lt;/li&gt;
&lt;li&gt;Don't use Crossover mutation. It introduces a high mutation rate which is great early on but very quickly high mutation becomes a liability because an image that is mostly converged will reject all but small mutations.&lt;/li&gt;
&lt;li&gt;Don't scale the image in the fitness evaluator function. This one took me a while to figure out. If your input image is 200x200 but the fitness evaluator scales the image down to 100x100 before generating a fitness score it will result in candidate solutions containing steaks/lines of errors that are invisible to the fitness function but are clearly wrong to the end-user. The fitness function should process the entire image or not at all. A better solution is to scale the target image across-the-board so your fitness function is processing 100% of the pixels. If 100x100 is too small to display on the screen you simply up-scale the image. Now the user can see the image clearly and the fitness function isn't missing a thing.&lt;/li&gt;
&lt;li&gt;Prevent the creation of self-intersecting polygons. They never yield good results so we can substantially speed up the algorithm by preventing mutations from creating them. Implementing the check for self-intersecting polygons was a pain in the ass but it was worth the trouble in the end.&lt;/li&gt;
&lt;li&gt;I've modified the fitness score to remove hidden polygons (purely for performance reasons):&lt;/li&gt;
&lt;pre class="brush:javascript"&gt;fitness += candidate.size();
&lt;/pre&gt;
This means that the fitness score will never hit zero.&lt;br /&gt;
&lt;li&gt;&amp;nbsp;I've increased the maximum number of polygons from 50 to 65535.&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; When I first tried running &lt;a href="http://watchmaker.uncommons.org/"&gt;Watchmaker&lt;/a&gt;'s Mona Lisa example it would run for days and not look anything close to the target image. Roger's algorithm was better but still stagnated after an hour. Using the new algorithm I managed to recreate the target image in less than 15 minutes. The fitness score reads 150,000 but to the naked eye the candidate looks almost identical to the original.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; I put together a diagnostics display that shows me the entire population evolving over time. It also tells me how many unique candidates are active in the population at any given time. A low number indicates a lack of variance. Either the population pressure is too high or the mutation rates are too low. In my experience, a decent population contains at least 50% unique candidates.&lt;br /&gt;
&lt;br /&gt;
I used this diagnostic display to tune the algorithm. Whenever the number of unique candidates was too low, I'd increase the mutation rate. Whenever the algorithm was stagnating too quickly I'd examine what was going on in the population. Very frequently I'd notice that the mutation amount was too high (colors or vertices moving too quickly).&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; I'm glad I spent the past month studying this problem. It's taught me a lot about the nature of GAs. It has a lot more to do with design than code optimization. I've also discovered that it's extremely important to watch the entire population evolve in real time as opposed to only studying the fittest candidate. This allows you to discover fairly quickly which mutations are effective and whether your mutation rate is too low or high.&lt;br /&gt;
&lt;br /&gt;
Genetic Algorithms are a lot of fun. I encourage you to play with them yourself.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8923228888140468740-1682976734840764051?l=cowwoc.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WhereCowsRoamFree/~4/Fbfz0mMBHME" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cowwoc.blogspot.com/feeds/1682976734840764051/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8923228888140468740&amp;postID=1682976734840764051" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8923228888140468740/posts/default/1682976734840764051?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8923228888140468740/posts/default/1682976734840764051?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/WhereCowsRoamFree/~3/Fbfz0mMBHME/lessons-learned-from-mona-lisa.html" title="Lessons learned from Mona Lisa" /><author><name>Gili</name><uri>http://www.blogger.com/profile/14922549904945062649</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://cowwoc.blogspot.com/2011/10/lessons-learned-from-mona-lisa.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQFRX8zfSp7ImA9WxRaFEk.&quot;"><id>tag:blogger.com,1999:blog-8923228888140468740.post-8997692379460236207</id><published>2008-12-16T00:26:00.009-05:00</published><updated>2008-12-16T10:45:14.185-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-16T10:45:14.185-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="timezones" /><category scheme="http://www.blogger.com/atom/ns#" term="mysql" /><title>MySQL dates that work across multiple time-zones</title><content type="html">Wouldn't it be nice if you could store date information in your database that would be correct regardless of your server and client time-zones (that may themselves change over time)?&lt;br /&gt;&lt;br /&gt;One way to do this is to store all date information relative to the GMT time-zone regardless of the server and client time-zones. Whenever a client interacts with a date you simply convert it from GMT to the client's specific time-zone and back as needed.&lt;br /&gt;&lt;br /&gt;Well, after 12 hours of investigation, I finally got this to work ;) Here's how:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;strong style="font-weight: normal;"&gt;Configure the server to use&lt;/strong&gt; the GMT time-zone by inserting &lt;span style="font-weight: bold;"&gt;default-time-zone=UTC&lt;/span&gt; (case sensitive) in my.cnf&lt;/li&gt;&lt;li&gt;Set the &lt;span style="font-weight: bold;"&gt;useLegacyDatetimeCode&lt;/span&gt; MySQL driver parameter to &lt;span style="font-weight: bold;"&gt;false&lt;/span&gt;. This fixes this bug: &lt;a href="http://bugs.mysql.com/bug.php?id=15604"&gt;http://bugs.mysql.com/bug.php?id=15604&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;When reading/writing dates from/to the database always use UTC dates&lt;/li&gt;&lt;/ol&gt;That's it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8923228888140468740-8997692379460236207?l=cowwoc.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WhereCowsRoamFree/~4/qB2eTt6z_Xg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cowwoc.blogspot.com/feeds/8997692379460236207/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8923228888140468740&amp;postID=8997692379460236207" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8923228888140468740/posts/default/8997692379460236207?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8923228888140468740/posts/default/8997692379460236207?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/WhereCowsRoamFree/~3/qB2eTt6z_Xg/mysql-dates-that-will-work-across.html" title="MySQL dates that work across multiple time-zones" /><author><name>Gili</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_dBY7K8znahY/SMaca8UQXMI/AAAAAAAADMw/aAgD3GvxnZU/S220/pic_0024.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://cowwoc.blogspot.com/2008/12/mysql-dates-that-will-work-across.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUNRnk-cSp7ImA9WhdaEUo.&quot;"><id>tag:blogger.com,1999:blog-8923228888140468740.post-315944450193119186</id><published>2008-12-03T01:18:00.023-05:00</published><updated>2011-10-21T01:01:37.759-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-21T01:01:37.759-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="google analytics" /><title>Tracking Java Versions using Google Analytics (part 2)</title><content type="html">&lt;span style="font-weight: bold;"&gt;Update&lt;/span&gt;: I just posted (December 4th, 2008) a version that will allow you to differentiate between 1.6.0* the family versus 1.6.0 the version.&lt;br /&gt;&lt;br /&gt;I'm experimenting with a new script for tracking Java versions. To use the new code simply add the following two lines after your Google Analytics script:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:javascript"&gt;&lt;br /&gt;&amp;lt;script src="http://java.com/js/deployJava.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script src="http://jre-analytics.googlecode.com/svn/trunk/jre-analytics.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;I encourage you to sign up to the mailing list to follow future discussions on this topic: &lt;a href="http://code.google.com/p/jre-analytics/"&gt;http://code.google.com/p/jre-analytics/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Benefits of new script&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Easier, auto-updating installation&lt;/span&gt;&lt;span&gt;. Linking to my external script means that you get the benefit of future updates without any effort on your part.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Does not conflict with other scripts&lt;/span&gt;. The old code uses &lt;span style="font-style: italic;"&gt;_setVar()&lt;/span&gt; which records at most one variable across an entire user session. Different scripts compete for exclusive access to this variable. The new code uses &lt;span style="font-style: italic;"&gt;_trackEvent()&lt;/span&gt; which allows multiple values to be recorded in separate namespaces, so different scripts do not interfere with each other's data collection.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Records multiple JRE versions per user&lt;/span&gt;. The old script was supposed to do this but the limitations of &lt;span style="font-style: italic;"&gt;_setVar()&lt;/span&gt; meant it only recorded the latest JRE version.&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;br /&gt;Details&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;About 48 hours after you install the script you should see new data under &lt;span style="font-weight: bold;"&gt;Content&lt;/span&gt; -&gt; &lt;span style="font-weight: bold;"&gt;Event Tracking&lt;/span&gt;. Please note that the &lt;b&gt;Event Tracking&lt;/b&gt; menu will not show up until you collect enough data.&lt;br /&gt;&lt;br /&gt;Please let me know the statistics reported for your site. Post this at &lt;a href="http://forums.java.net/jive/thread.jspa?messageID=317425"&gt;http://forums.java.net/jive/thread.jspa?messageID=317425&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The new script will record two kinds of events:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;detected&lt;/span&gt;: indicates whether Java was detected on the user's machine.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;version&lt;/span&gt;: indicates the specific Java version detected on the user's machine.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;This should give you a much better overview of what's really going on. I look forward to your feedback!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Warning&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;According to &lt;a href="http://code.google.com/apis/analytics/docs/eventTrackerGuide.html"&gt;http://code.google.com/apis/analytics/docs/eventTrackerGuide.html&lt;/a&gt; both the old and new script will cause your page's "bounce rate" to incorrectly get reported as zero. This is a limitation of how &lt;span style="font-style: italic;"&gt;_setVar()&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;_trackEvent()&lt;/span&gt; are implemented and there doesn't seem to be anything I can do about it. Sorry :(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8923228888140468740-315944450193119186?l=cowwoc.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WhereCowsRoamFree/~4/KcjSl2mPGrE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cowwoc.blogspot.com/feeds/315944450193119186/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8923228888140468740&amp;postID=315944450193119186" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8923228888140468740/posts/default/315944450193119186?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8923228888140468740/posts/default/315944450193119186?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/WhereCowsRoamFree/~3/KcjSl2mPGrE/tracking-java-versions-using-google.html" title="Tracking Java Versions using Google Analytics (part 2)" /><author><name>Gili</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_dBY7K8znahY/SMaca8UQXMI/AAAAAAAADMw/aAgD3GvxnZU/S220/pic_0024.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://cowwoc.blogspot.com/2008/12/tracking-java-versions-using-google.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUMQH87cCp7ImA9WhdaEUo.&quot;"><id>tag:blogger.com,1999:blog-8923228888140468740.post-2277784858695599020</id><published>2008-11-08T15:03:00.031-05:00</published><updated>2011-10-21T01:01:21.108-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-21T01:01:21.108-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="google analytics" /><title>Tracking Java Versions using Google Analytics</title><content type="html">&lt;span style="color: black; font-weight: bold;"&gt;Update&lt;/span&gt;&lt;span style="color: black;"&gt;: This code does not work as expected (it will only report the newest JRE version). Please see the newer version &lt;a href="http://cowwoc.blogspot.com/2008/12/tracking-java-versions-using-google.html"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Ever wonder what Java version your website visitors have installed? Here's how you can leverage Google Analytics to find out:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Locate the Google Analytics script in your HTML page (you must be using the new "ga.js" version). Here is what mine looks like:&lt;br /&gt;&lt;pre class="brush:javascript"&gt;
&amp;lt;script type="text/javascript"&amp;gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&amp;lt;/script&amp;gt;
&amp;lt;script type="text/javascript"&amp;gt;
var pageTracker = _gat._getTracker("UA-XXXXX-X");
pageTracker._initData();
pageTracker._trackPageview();
&amp;lt;/script&amp;gt;&lt;/pre&gt;
&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Insert the following code after that script:&lt;br /&gt;&lt;pre class="brush:javascript"&gt;
&amp;lt;script src='http://java.com/js/deployJava.js' type='text/javascript'&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type='text/javascript'&amp;gt;
var jreVersions = deployJava.getJREs();
if (jreVersions.length==0)
pageTracker._setVar("Java: none");
for (var i=0; i&amp;lt;jreVersions.length; ++i)
pageTracker._setVar("Java: " + jreVersions[i]);
&amp;lt;/script&amp;gt;&lt;/pre&gt;
&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Please note, if you are using Blogger you will need to encode the &lt;span style="font-weight: bold;"&gt;'&amp;lt;'&lt;/span&gt; character as &lt;b&gt;"&amp;amp;lt;"&lt;/b&gt;. Open up Error Console in your browser to double-check that the script is not generating any errors.&lt;/li&gt;
&lt;li&gt;Wait 24 hours for Google to update the report.&lt;/li&gt;
&lt;li&gt;View the updated data at Google Analytics -&amp;gt; Visitors -&amp;gt; User Defined.&lt;/li&gt;
&lt;li&gt;There are two ways to drill-down based on user-defined values:&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;Advanced Segments -&amp;gt; New -&amp;gt; Dimensions -&amp;gt; Visitors -&amp;gt; User Defined. For example:&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;Track users without Java: &lt;span style="font-weight: bold;"&gt;Matches Exactly: "Java: none"&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Track users with Java: &lt;span style="font-weight: bold;"&gt;Starts With: "Java:"&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;Does Not Match Exactly: "Java: none"&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Track users with Java 1.6&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;: &lt;/span&gt;&lt;/span&gt;Starts With: "Java: 1.6"&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;You can then check how many Flash users also had Java installed. Or how many Windows users had Java 1.6 installed. Or the connection speed of Java users.&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;Visitors -&amp;gt; User Defined -&amp;gt; [Pick One] -&amp;gt; Dimension. For example, you can now click on &lt;span style="font-weight: bold;"&gt;Java: 1.6.0 -&amp;gt; Dimension -&amp;gt; Browser&lt;/span&gt; to find out what browsers visitors with Java 1.6.0 were using.&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;Publish your results here: &lt;a href="http://forums.java.net/jive/thread.jspa?messageID=317425"&gt;http://forums.java.net/jive/thread.jspa?messageID=317425&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8923228888140468740-2277784858695599020?l=cowwoc.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WhereCowsRoamFree/~4/2bUyB0tT-Vs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cowwoc.blogspot.com/feeds/2277784858695599020/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8923228888140468740&amp;postID=2277784858695599020" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8923228888140468740/posts/default/2277784858695599020?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8923228888140468740/posts/default/2277784858695599020?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/WhereCowsRoamFree/~3/2bUyB0tT-Vs/tracking-java-versions-using-google.html" title="Tracking Java Versions using Google Analytics" /><author><name>Gili</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_dBY7K8znahY/SMaca8UQXMI/AAAAAAAADMw/aAgD3GvxnZU/S220/pic_0024.jpg" /></author><thr:total>7</thr:total><feedburner:origLink>http://cowwoc.blogspot.com/2008/11/tracking-java-versions-using-google.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcCQ3c7fip7ImA9WhdaEUo.&quot;"><id>tag:blogger.com,1999:blog-8923228888140468740.post-6484868819215031030</id><published>2008-10-26T00:47:00.015-04:00</published><updated>2011-10-21T00:57:42.906-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-21T00:57:42.906-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="guice" /><category scheme="http://www.blogger.com/atom/ns#" term="junit" /><title>Integrating Google Guice into JUnit4 tests</title><content type="html">You can integrate Guice into your JUnit 4 tests with three simple steps:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Add the following class to your classpath:&lt;br /&gt;&lt;pre class="brush:java"&gt;package com.google.inject.junit;

import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Module;
import java.util.List;
import org.junit.runners.BlockJUnit4ClassRunner;
import org.junit.runners.model.InitializationError;

/**
 * Uses Guice to inject JUnit4 tests.
 *
 * @author Gili Tzabari
 */
public class GuiceTestRunner extends BlockJUnit4ClassRunner
{
  private final Injector injector;

  /**
   * Creates a new GuiceTestRunner.
   *
   * @param classToRun the test class to run
   * @param modules the Guice modules
   * @throws InitializationError if the test class is malformed
   */
  public GuiceTestRunner(final Class&amp;lt;?&amp;gt; classToRun, Module... modules) throws InitializationError
  {
    super(classToRun);
    this.injector = Guice.createInjector(modules);
  }

  @Override
  public Object createTest()
  {
    return injector.getInstance(getTestClass().getJavaClass());
  }

  @Override
  protected void validateZeroArgConstructor(List&amp;lt;Throwable&amp;gt; errors)
  {
    // Guice can inject constructors with parameters so we don't want this method to trigger an error
  }

  /**
   * Returns the Guice injector.
   *
   * @return the Guice injector
   */
  protected Injector getInjector()
  {
    return injector;
  }
}&lt;/pre&gt;
&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;Customize GuiceTestRunner for your specific project by subclassing it. For example:&lt;br /&gt;&lt;pre class="brush:java"&gt;package myproject;

import com.google.inject.junit.GuiceTestRunner;
import com.wideplay.warp.persist.PersistenceService;
import myproject.GuiceModule;
import org.junit.runners.model.InitializationError;

/**
 * JUnit4 runner customized for our Guice module.
 *
 * @author Gili Tzabari
 */
public class GuiceIntegration extends GuiceTestRunner
{
  /**
   * Creates a new GuiceIntegration.
   *
   * @param classToRun the test class to run
   * @throws InitializationError if the test class is malformed
   */
  public GuiceIntegration(Class classToRun) throws InitializationError
  {
    super(classToRun, new GuiceModule());
  }
}&lt;/pre&gt;
&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;Add @RunWith to all your JUnit test classes. For example:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:java"&gt;@RunWith(GuiceIntegration.class)
public class MyTest
{
  @Inject
  public MyTest(SomeDependency foo)
  {
    ...
  }
}&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
That's it! Guice will now inject your test classes.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;EDIT:&lt;/span&gt; I'm a convert :) I now use &lt;a href="http://code.google.com/p/atunit/"&gt;AtUnit&lt;/a&gt; to integrate Guice into JUnit.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8923228888140468740-6484868819215031030?l=cowwoc.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WhereCowsRoamFree/~4/eDqhMqPprGc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cowwoc.blogspot.com/feeds/6484868819215031030/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8923228888140468740&amp;postID=6484868819215031030" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8923228888140468740/posts/default/6484868819215031030?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8923228888140468740/posts/default/6484868819215031030?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/WhereCowsRoamFree/~3/eDqhMqPprGc/integrating-google-guice-into-junit4.html" title="Integrating Google Guice into JUnit4 tests" /><author><name>Gili</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_dBY7K8znahY/SMaca8UQXMI/AAAAAAAADMw/aAgD3GvxnZU/S220/pic_0024.jpg" /></author><thr:total>6</thr:total><feedburner:origLink>http://cowwoc.blogspot.com/2008/10/integrating-google-guice-into-junit4.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMAQn48eSp7ImA9WxRXE0U.&quot;"><id>tag:blogger.com,1999:blog-8923228888140468740.post-4676208766871275852</id><published>2008-10-18T22:09:00.004-04:00</published><updated>2008-10-18T22:14:03.071-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-18T22:14:03.071-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="rest" /><category scheme="http://www.blogger.com/atom/ns#" term="statelessness" /><title>RESTful Dynamic Forms</title><content type="html">&lt;p&gt;One of the key characteristics of RESTful web services is (application) "statelessness". That is, all application state should be stored on the client-end and send over with every request.&lt;/p&gt;&lt;p&gt;Sometimes clients are asked to manipulate forms dynamically, adding or removing elements, before submitting it to the server. Typically the client uses "sessionId" to manipulate the page across multiple requests.&lt;/p&gt;  &lt;p&gt;If you take a step back, however, you will realize that this application state doesn't belong on the server at all. The server doesn't really care about the intermediate page states, which is why it doesn't persist them to the database in the first place. It only cares about the initial page state (which it sends to the client) and the final page state (which it saves to the database). The server manipulates the page state on behalf of the client because it's easier to implement business logic in modern programming languages than it is to implement them in Javascript on the client. Ideally the client should download the page, manipulate it on its end, and submit the result to the server.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8923228888140468740-4676208766871275852?l=cowwoc.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WhereCowsRoamFree/~4/gLAWIFV6774" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cowwoc.blogspot.com/feeds/4676208766871275852/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8923228888140468740&amp;postID=4676208766871275852" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8923228888140468740/posts/default/4676208766871275852?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8923228888140468740/posts/default/4676208766871275852?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/WhereCowsRoamFree/~3/gLAWIFV6774/restful-dynamic-forms.html" title="RESTful Dynamic Forms" /><author><name>Gili</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_dBY7K8znahY/SMaca8UQXMI/AAAAAAAADMw/aAgD3GvxnZU/S220/pic_0024.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://cowwoc.blogspot.com/2008/10/restful-dynamic-forms.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04CSH86cCp7ImA9WxRTGUo.&quot;"><id>tag:blogger.com,1999:blog-8923228888140468740.post-7205276667328158452</id><published>2008-09-08T23:51:00.001-04:00</published><updated>2008-09-09T11:59:29.118-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-09T11:59:29.118-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="visual c++" /><title>Fixing Visual Studio Run-Time Error R6034</title><content type="html">&lt;span style="color: rgb(0, 0, 0);font-size:180%;" &gt;THE PROBLEM&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As of Visual Studio 2005, you are required to associate a manifest with any DLL having implicit dependencies. If you do not, LoadLibrary() will throw a runtime error R6034.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);font-size:180%;" &gt;DEPENDENCIES&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Implicit&lt;/span&gt;&lt;b&gt; &lt;/b&gt;dependencies are any dynamic libraries that must be loaded before your EXE or DLL (henceforth known as "module") may load. For example, if you link against the Runtime DLLs (msvcr*.dll, msvcp*.dll) then your module is implicitly dependant on them. If you specify any libraries in "Linker -&gt; Input" then your module is implicitly dependant on them. Your module's manifest must specify the names and versions of all these implicit dependencies.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-style: italic;"&gt;Explicit&lt;/span&gt;&lt;b&gt; &lt;/b&gt;dependencies, loaded by your explicit calls to LoadLibrary(), do not have to show up in the module's manifest.&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);font-size:180%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 0);font-size:180%;" &gt;HOW DOES THIS AFFECT JAVA?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When you invoke System.loadLibrary(), Java invokes LoadLibrary() under the hood. java.exe is linked statically against the runtime libraries, so it doesn't need a manifest, but any libraries it loads do&lt;b&gt; &lt;/b&gt;need one. To reiterate, &lt;b&gt;all JNI libraries must have a manifest for their implicit dependencies&lt;/b&gt;.&lt;/p&gt;  &lt;p&gt;There are two kinds of manifests: internal or external. &lt;span style="font-style: italic;"&gt;External&lt;/span&gt; manifest files sit alongside your library. &lt;span style="font-style: italic;"&gt;Internal&lt;/span&gt; manifests are embedded as resources directly in your module. Manifests describe the location and version of &lt;span style="font-style: italic;"&gt;assemblies&lt;/span&gt; (group of libraries). Private assemblies reside in the application directory (similar to a private JRE) while public assemblies are shared by multiple applications (similar to a public JRE).&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:180%;"&gt;PRIVATE ASSEMBLIES&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Installing shared assemblies requires administrator privileges so I'll discuss private assemblies first. Here is how it works...&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Pick a directory under "C:\Program Files\Microsoft Visual Studio 9.0\VC\redist". In my case this is "x86\Microsoft.VC90.CRT" (32-bit, runtime libraries)&lt;/li&gt;&lt;li&gt;Copy any implicit dependencies along with the manifest file into your application directory. In my case I copy msvcr90.dll, msvcp90.dll and Microsoft.VC90.CRT.manifest&lt;/li&gt;&lt;li&gt;You're done&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;When your module invokes LoadLibrary("foo.dll") it will look for an embedded manifest in the DLL. If none is found, it will look for an external file "foo.dll.manifest". The manifest will detail any implicit dependencies, such as msvcr90.dll. Your module manifest contains an implicit dependency on the Microsoft CRT manifest file, so &lt;span style="font-weight: bold;"&gt;do not remove it&lt;/span&gt;. I haven't yet found a way to ship private assemblies without this manifest file, which seems to be the only way that Webstart applications can work (aside from static linking).&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:180%;"&gt;SHARED ASSEMBLIES&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Download shared assemblies for &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&amp;amp;displaylang=en"&gt;x86&lt;/a&gt;, &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=BD2A6171-E2D6-4230-B809-9A8D7548C1B6&amp;amp;displaylang=en"&gt;x64&lt;/a&gt; or &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=461f404b-d0a9-4c69-8086-30c604f885f5&amp;amp;displaylang=en"&gt;IA64&lt;/a&gt; onto the user's machine&lt;/li&gt;&lt;li&gt;Run the installer interactively or &lt;a href="http://blogs.msdn.com/astebner/archive/2007/02/07/update-regarding-silent-install-of-the-vc-8-0-runtime-vcredist-packages.aspx"&gt;silently&lt;/a&gt;&lt;/li&gt;&lt;li&gt;You're done&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;If you want to get fancy, check whether the user already has a manifest installed before step 1 to avoid unnecessary downloads.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);font-size:180%;" &gt;REFERENCES&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms235560%28VS.80%29.aspx" class="jive-link-external"&gt;C Run-Time Error R6034&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms235624%28VS.80%29.aspx" class="jive-link-external"&gt;Visual C++ Libraries as Shared Side-by-Side Assemblies&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms235291.aspx" class="jive-link-external"&gt;How to: Deploy using XCopy&lt;/a&gt;&lt;br /&gt;&lt;a href="http://forums.sun.com/thread.jspa?threadID=713950" class="jive-link-thread"&gt;Impossible to use VS2005 with Java?&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8923228888140468740-7205276667328158452?l=cowwoc.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WhereCowsRoamFree/~4/eyOpM6ZIX-U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://cowwoc.blogspot.com/feeds/7205276667328158452/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8923228888140468740&amp;postID=7205276667328158452" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8923228888140468740/posts/default/7205276667328158452?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8923228888140468740/posts/default/7205276667328158452?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/WhereCowsRoamFree/~3/eyOpM6ZIX-U/fixing-visual-studio-run-time-error.html" title="Fixing Visual Studio Run-Time Error R6034" /><author><name>Gili</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_dBY7K8znahY/SMaca8UQXMI/AAAAAAAADMw/aAgD3GvxnZU/S220/pic_0024.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://cowwoc.blogspot.com/2008/09/fixing-visual-studio-run-time-error.html</feedburner:origLink></entry></feed>

