<?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/"
	xmlns:series="http://unfoldingneurons.com/"
	>

<channel>
	<title>Jason E. Shao</title>
	<atom:link href="http://jay.shao.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://jay.shao.org</link>
	<description>Thoughts and Ruminations, where I write about personal things, work, eLearning, Jasig, uPortal, Sakai, Portlets, and other topics or commentary as it takes my fancy.</description>
	<lastBuildDate>Mon, 19 Jul 2010 04:49:14 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Follow the $: Verizon iPhone != LTE</title>
		<link>http://jay.shao.org/2010/07/19/follow-the-verizon-iphone-lte/</link>
		<comments>http://jay.shao.org/2010/07/19/follow-the-verizon-iphone-lte/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 04:49:14 +0000</pubDate>
		<dc:creator>jayshao</dc:creator>
				<category><![CDATA[Commentary]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[verizon]]></category>

		<guid isPermaLink="false">http://jay.shao.org/?p=816</guid>
		<description><![CDATA[
			
				
			
		The perennial Verizon iphone rumors keep ticking by, with speculation about contract dates, terms, projections, and the usual interview of some guy in line at the apple store who says &#8220;I&#8217;d switch today&#8221;.

A recent thread seems to be in a lot of these stories: &#8220;Verizon iPhone will use LTE (4G)&#8221;. While I have just as [...]]]></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%2Fjay.shao.org%2F2010%2F07%2F19%2Ffollow-the-verizon-iphone-lte%2F">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fjay.shao.org%2F2010%2F07%2F19%2Ffollow-the-verizon-iphone-lte%2F&amp;source=jayshao&amp;style=normal&amp;service=bit.ly&amp;hashtags=apple,iphone,verizon" height="61" width="50" />
			</a>
		</div><p>The perennial Verizon iphone rumors keep ticking by, with speculation about contract dates, terms, projections, and the usual interview of some guy in line at the apple store who says &#8220;I&#8217;d switch today&#8221;.</p>

<p>A recent thread seems to be in a lot of these stories: &#8220;Verizon iPhone will use LTE (4G)&#8221;. While I have just as little actual information as most of these analysts, I think it&#8217;s unlikely based on Apple&#8217;s core competencies and past behavior, and market/situational facts.</p>

<p><span id="more-816"></span></p>

<p>Let&#8217;s start with Apple&#8217;s culture and history:</p>

<ol>
    <li>Apple&#8217;s core strength in phones is software/hardware design (primarily UE/industrial). This is the area Apple has passion for, invests effort in, and chooses to differentiate itself. *Not* wireless technology (that&#8217;s more a Nokia/Motorola tack), especially in terms of standards/protocols.</li>
    <li>Battery-life seems to be one of Apple&#8217;s biggest targets for improvement &#8211; adding yet another radio (for a hybrid LTE/3G/1G device) seems unlikely to be up their priority list</li>
    <li>Apple rolled out the iPhone w/o a 3G radio &#8211; despite other contemporary phones having 3G (e.g. Nokia N-series) and many analysts saying web browsing &#8211; perhaps the iPhone&#8217;s greatest must-have feature requiring it. Having already played that hand, I think it likely they&#8217;ll make a similar timing decision this go around.</li>
    <li>Apple cares about names &#8211; I suspect if a iPhone 4G were really around the corner, they would have named the current phone something else &#8211; perhaps another play on 3gs &#8211; like 3g extreme &#8211; to save 4 for an LTE device.</li>
</ol>

<p>Let&#8217;s look at the broader market:</p>

<ol>
    <li>Given consumers clear willingness to switch providers (even if begrudgingly) to use the iPhone, Verizon&#8217;s marketshare/coverage is the single greatest likely asset for expanding iPhone use. From that perspective, launching on Verizon, with a technology in limited deployment seems to blunt the impact of a big partnership.</li>
    <li>Since Verizon &amp; AT&amp;T are both targeting LTE, it&#8217;s probably on Apple&#8217;s roadmap, but the timing seems unlikely to be tied to Verizon &#8211; given the potential market size, it&#8217;s hard to believe that technology platform is what&#8217;s blocking a deal.</li>
</ol>

<p>While the points above are what originally got me thinking along this track, some further reflection put together the point that I feel is most compelling &#8211; 4G doesn&#8217;t align with Apple&#8217;s evolving strategy for making $$$ off the iPhone. <strong>I think the iPhone/Touch/iPad represent a strategic shift in Apple&#8217;s revenue stream, with Apple moving away from a stream based on hardware purchases, and towards a stream based on hardware usage.</strong> Admittedly, that&#8217;s a pretty big statement, and contrary to Apple&#8217;s strategy with the Mac and iPod (where services like iLife, iTunes exist to drive hardware sales, and are subsidized by margins from purchase of Apple products, but I think some things have changed.</p>

<ol>
    <li>iAds &#8211; Apple now has a platform to generate a revenue stream based on engagement time, not purchases. We&#8217;ve seen Apple already de-emphasize hardware specs, pushing functionality and features, features that generate more and more interaction with the device (apps, communications, video editing, etc.) An in-app advertising platform where apple takes a % allows Apple to make money not just on how many units they ship, but how much the units get used &#8211; a stat where iPhone owners hours logged on device is orders of magnitude higher than most other platforms &#8211; even attached-to-the-hip-Blackberry owners.</li>
    <li>iTunes &#8211; micro-payments has always been the barrier to usage-based payment, and even advertising based models have had trouble fitting all the pieces together. Apps, iAds, etc. though now give Apple a user-base and platform for funneling payments around, and even billing and upsells &#8211; all within Apple&#8217;s walled-garden.</li>
    <li>Battery life &#8211; well, if my revenue is now being impacted by how long people use my device, how long they *can* use it without plugging in becomes not just a feature, but a bottom-line driver.</li>
    <li>An increasing trend towards delivering functionality in software &#8211; while new hardware comes out, much of the advance in the last few years in the iPhone experience has been software driven &#8211; this aligns revenue with that development.</li>
</ol>

<p>Given the assumption above, if Apple&#8217;s not using tech specs to differentiate their products, and further their ongoing revenue stream starts to be based on usage of the device, why do 4G until you have to? Especially as opposed to investing in something that will increase usage time &#8211; witness the kind of features that Facebook prioritizes and develops as an example.</p>

<p>4G is critical for the carriers &#8211; both to push wireless data as a replacement for wired data (like mobile is killing POTS) and as a transition point away from flat-rate pricing to variable usage. Also, since their revenue is based on transferring bits around, faster easier bits is a net plus, and helping to ease current capacity crunches is just icing. I increasingly wonder if Apple is playing off the same page though, and since it&#8217;s clear who&#8217;s driving the direction and evolution of the iPhone, for me that leads to the conclusion that: <strong>the Verizon iPhone probably won&#8217;t have 4G</strong>, or at the least, there&#8217;s no compelling reason for Apple to tie the launch of the one, with the other.<strong> </strong></p>
]]></content:encoded>
			<wfw:commentRss>http://jay.shao.org/2010/07/19/follow-the-verizon-iphone-lte/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Perf4j+Maven+AspectJ CTW</title>
		<link>http://jay.shao.org/2010/06/29/perf4jmavenaspectj-ctw/</link>
		<comments>http://jay.shao.org/2010/06/29/perf4jmavenaspectj-ctw/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 18:02:37 +0000</pubDate>
		<dc:creator>jayshao</dc:creator>
				<category><![CDATA[Commentary]]></category>

		<guid isPermaLink="false">http://jay.shao.org/?p=813</guid>
		<description><![CDATA[
			
				
			
		Recently I&#8217;ve incorporated Perf4j for runtime performance statistics on a number of projects, combined with our in-house counters and other standard libs (actually I quite like the annotation-style logging of perf-stats, and the tag-name rollup conventions, and will probably retrofit both into our existing collection tools). I had a bit of difficulay initially getting AspectJ [...]]]></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%2Fjay.shao.org%2F2010%2F06%2F29%2Fperf4jmavenaspectj-ctw%2F">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fjay.shao.org%2F2010%2F06%2F29%2Fperf4jmavenaspectj-ctw%2F&amp;source=jayshao&amp;style=normal&amp;service=bit.ly" height="61" width="50" />
			</a>
		</div><p>Recently I&#8217;ve incorporated Perf4j for runtime performance statistics on a number of projects, combined with our in-house counters and other standard libs (actually I quite like the annotation-style logging of perf-stats, and the tag-name rollup conventions, and will probably retrofit both into our existing collection tools). I had a bit of difficulay initially getting AspectJ to do CTW for the collection (and in retrospect, very much want to investivate the agent-based LTW approach, since it&#8217;d give us the ability to flip on/off recording, while it should be basically just as fast except on object creation &#8211; which for Spring/Singleton instantiated services (most of our performance code) is not significant.</p>

<p>Anyhow, the meat, plugin config below:</p>

<div class="codecolorer-container xml default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:400px;height:300px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>org.codehaus.mojo<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>aspectj-maven-plugin<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>1.3<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;showWeaveInfo<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>true<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/showWeaveInfo<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;source<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>1.6<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/source<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;weaveDependencies<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>org.perf4j<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>perf4j<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/weaveDependencies<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;executions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;execution<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;goals<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;goal<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>compile<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/goal<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">&lt;!-- use this goal to weave all your main classes --&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;goal<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>test-compile<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/goal<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">&lt;!-- use this goal to weave all your test classes --&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/goals<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/execution<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/executions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>

<p>Also dependencies (we use Log4j, though we&#8217;re looking at Logback as well):</p>

<div class="codecolorer-container xml default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:400px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>org.aspectj<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>aspectjrt<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>1.6.7<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>org.perf4j<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>perf4j<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>0.9.13<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;classifier<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>log4jonly<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/classifier<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>commons-jexl<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>commons-jexl<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>1.1<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>

<p>Performance note: We did some unit testing of methods which were instrumented/non-instrumented (our unit test basically spewed out a couple thousand garbage string+ints in a loop, which was instrumented or not)</p>

<p>We saw something like 3x the number of minor GCs (though GC was still fast) &#8211; no additional major GCs after adding Perf4j. Overall execution time was higher as well, though not by the same degree.</p>
]]></content:encoded>
			<wfw:commentRss>http://jay.shao.org/2010/06/29/perf4jmavenaspectj-ctw/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Facebook -&gt; Chainletter NG</title>
		<link>http://jay.shao.org/2010/06/29/facebook-chainletter-ng/</link>
		<comments>http://jay.shao.org/2010/06/29/facebook-chainletter-ng/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 17:44:10 +0000</pubDate>
		<dc:creator>jayshao</dc:creator>
				<category><![CDATA[Commentary]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[Identity]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[spoofing]]></category>

		<guid isPermaLink="false">http://jay.shao.org/?p=810</guid>
		<description><![CDATA[
			
				
			
		Looking through my friends streams &#8211; I saw a big blurb for:

http://www.subwayfootlongspromo.com/ (notice the comment box isn&#8217;t real&#8230;)

Which convinces me &#8211; Facebook Like Pages are the new Chainletter. And, even better than Chainletter (costs a lot) or Chainletter 2.0 (fills up email boxes), Chainletter NG allows you to check the progression of your meme in [...]]]></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%2Fjay.shao.org%2F2010%2F06%2F29%2Ffacebook-chainletter-ng%2F">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fjay.shao.org%2F2010%2F06%2F29%2Ffacebook-chainletter-ng%2F&amp;source=jayshao&amp;style=normal&amp;service=bit.ly&amp;hashtags=facebook,Identity,security,spoofing" height="61" width="50" />
			</a>
		</div><p>Looking through my friends streams &#8211; I saw a big blurb for:</p>

<p>http://www.subwayfootlongspromo.com/ (notice the comment box isn&#8217;t real&#8230;)</p>

<p>Which convinces me &#8211; Facebook Like Pages are the new Chainletter. And, even better than Chainletter (costs a lot) or Chainletter 2.0 (fills up email boxes), Chainletter NG allows you to check the progression of your meme in real-time, using all the tooling provided by Facebook. As the Facebook comment and like boxes become even more recognizeable, I&#8217;d expect this situation will action only increase.</p>

<p>This does seem to help make the case for verifiable identity for widgets &#8211; e.g. how do I socially, recognizably mark my widget as genuine for users when they can&#8217;t just check the URL bar to see what site they&#8217;re on? Unfortunately, it&#8217;s hard to come up with some pattern that&#8217;s not going to involve browser support, though what the banks have been doing with personalized site access images, and the social networks w/gravatar/avatar style repetition might be helpful (e.g. train users to only submit if they see <em>their</em> picture, and if you don&#8217;t know what you look like ask the guy next to you&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://jay.shao.org/2010/06/29/facebook-chainletter-ng/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Neat Intellij Tricks</title>
		<link>http://jay.shao.org/2010/06/28/neat-intellij-tricks/</link>
		<comments>http://jay.shao.org/2010/06/28/neat-intellij-tricks/#comments</comments>
		<pubDate>Mon, 28 Jun 2010 05:45:57 +0000</pubDate>
		<dc:creator>jayshao</dc:creator>
				<category><![CDATA[Commentary]]></category>

		<guid isPermaLink="false">http://jay.shao.org/?p=806</guid>
		<description><![CDATA[
			
				
			
		So, after a few months of working almost exclusively in Intellij, I have to say I think it is a better IDE, and I miss it when I go back to Eclipse. There&#8217;s significant talk about us adopting it, though the usual questions about retraining, etc. rear their ugly head. Neat tidbits that have come [...]]]></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%2Fjay.shao.org%2F2010%2F06%2F28%2Fneat-intellij-tricks%2F">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fjay.shao.org%2F2010%2F06%2F28%2Fneat-intellij-tricks%2F&amp;source=jayshao&amp;style=normal&amp;service=bit.ly" height="61" width="50" />
			</a>
		</div><p>So, after a few months of working almost exclusively in Intellij, I have to say I think it <em>is</em> a better IDE, and I miss it when I go back to Eclipse. There&#8217;s significant talk about us adopting it, though the usual questions about retraining, etc. rear their ugly head. Neat tidbits that have come up:</p>

<ul>
    <li>Automatic, pre-commit static code-analysis &#8211; including your own bug definitions: http://jetbrains.dzone.com/articles/find-your-very-own-bugs</li>
    <li>Great SVN change-list support for keeping multiple flows of changes sorted out &#8211; even shows up properly in svn status</li>
    <li>One-click threadlocal refactor: <a rel="nofollow" href="http://blogs.jetbrains.com/idea/2009/10/threadlocal-in-one-click/">http://blogs.jetbrains.com/idea/2009/10/threadlocal-in-one-click/</a></li>
    <li>Settings sync online w/IDEA Server Plugin</li>
    <li>Glassfish integration works, deploy &amp; really nice console mapping (e.g. tail arbitrary log files) &#8211; have to leave username/password blank</li>
    <li>Maven support: true main vs. test scope isolation, hierarchical module support</li>
    <li>Language Injection: specify that certain methods take SQL, Groovy, REGEX, CSS, JS, and get working sytax completion, etc.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://jay.shao.org/2010/06/28/neat-intellij-tricks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<series:name><![CDATA[Eclipse2Intellij]]></series:name>
	</item>
		<item>
		<title>OutOfMemory PermGen Errors</title>
		<link>http://jay.shao.org/2010/06/23/outofmemory-permgen-errors-doesnt-seem-to-be-an-answer/</link>
		<comments>http://jay.shao.org/2010/06/23/outofmemory-permgen-errors-doesnt-seem-to-be-an-answer/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 16:23:15 +0000</pubDate>
		<dc:creator>jayshao</dc:creator>
				<category><![CDATA[Commentary]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jvm]]></category>
		<category><![CDATA[permgen]]></category>

		<guid isPermaLink="false">http://jay.shao.org/?p=799</guid>
		<description><![CDATA[
			
				
			
		In the past I&#8217;ve gone to the good old reliable &#8220;-XX:MaxPermSize=256m&#8221; (or 384m, 512m, etc.) to try to get redeploys in webapp containers like Tomcat and Glassfish to allow numerous hot-redeploys. I figured I&#8217;d invest a little time in sorting this out to see if there&#8217;s a better solution &#8211; unfortunately it doesn&#8217;t look like [...]]]></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%2Fjay.shao.org%2F2010%2F06%2F23%2Foutofmemory-permgen-errors-doesnt-seem-to-be-an-answer%2F">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fjay.shao.org%2F2010%2F06%2F23%2Foutofmemory-permgen-errors-doesnt-seem-to-be-an-answer%2F&amp;source=jayshao&amp;style=normal&amp;service=bit.ly&amp;hashtags=java,jvm,permgen" height="61" width="50" />
			</a>
		</div><p>In the past I&#8217;ve gone to the good old reliable &#8220;-XX:MaxPermSize=256m&#8221; (or 384m, 512m, etc.) to try to get redeploys in webapp containers like Tomcat and Glassfish to allow numerous hot-redeploys. I figured I&#8217;d invest a little time in sorting this out to see if there&#8217;s a better solution &#8211; unfortunately it doesn&#8217;t look like it.</p>

<p><a href="http://www.jroller.com/agileanswers/entry/preventing_java_s_java_lang">http://www.jroller.com/agileanswers/entry/preventing_java_s_java_lang</a></p>

<p>had some useful sounding suggestions:</p>

<ul>
    <li>Move to JRockit &#8211; which is free for deployment (minus the nice management console) and does look very impressive, and seems to use a different memory scheme that doesn&#8217;t rely on PermGen, but could conceivably still suffer from class/memory leaks</li>
    <li>Try these flags: -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled &#8211; this seems not to work, at least when tested against JDK 6, Glassfish 3, with a Spring-based application with a moderate amount of open-soruce tooling (Spring, Log4j, Drools, the like) &#8211; with PermGen set to 256m I still get out of Memory, and jvisualvm shows PermGen slowly filling up:

<a href="http://jay.shao.org/wp-content/uploads/2010/06/Selection_008.png"> <img class="alignnone size-medium wp-image-801" title="permgen space" src="http://jay.shao.org/wp-content/uploads/2010/06/Selection_008-300x87.png" alt="permgen filling up" width="300" height="87" /></a></li>
</ul>

<p>In the end, I have to agree with: <a href="http://my.opera.com/karmazilla/blog/2007/03/13/good-riddance-permgen-outofmemoryerror">http://my.opera.com/karmazilla/blog/2007/03/13/good-riddance-permgen-outofmemoryerror</a> &#8211; it looks like we&#8217;re stuck with this, at least I haven&#8217;t found a sane solution beyond restarting between deploys. At least embedded servers like jetty or embedded glassfish startup quicker&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://jay.shao.org/2010/06/23/outofmemory-permgen-errors-doesnt-seem-to-be-an-answer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Juniper VPN Mac Setup</title>
		<link>http://jay.shao.org/2010/04/23/juniper-vpn-mac-setup/</link>
		<comments>http://jay.shao.org/2010/04/23/juniper-vpn-mac-setup/#comments</comments>
		<pubDate>Fri, 23 Apr 2010 22:28:22 +0000</pubDate>
		<dc:creator>jayshao</dc:creator>
				<category><![CDATA[Commentary]]></category>

		<guid isPermaLink="false">http://jay.shao.org/?p=796</guid>
		<description><![CDATA[
			
				
			
		It took me almost an hour of troubleshooting before I found this KB entry describing how to fix the applet install for Juniper VPN on Mac OSX.

http://kb.juniper.net/index?page=content&#38;id=KB16134&#38;actp=LIST
]]></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%2Fjay.shao.org%2F2010%2F04%2F23%2Fjuniper-vpn-mac-setup%2F">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fjay.shao.org%2F2010%2F04%2F23%2Fjuniper-vpn-mac-setup%2F&amp;source=jayshao&amp;style=normal&amp;service=bit.ly" height="61" width="50" />
			</a>
		</div><p>It took me almost an hour of troubleshooting before I found this KB entry describing how to fix the applet install for Juniper VPN on Mac OSX.</p>

<p><a href="http://kb.juniper.net/index?page=content&amp;id=KB16134&amp;actp=LIST">http://kb.juniper.net/index?page=content&amp;id=KB16134&amp;actp=LIST</a></p>
]]></content:encoded>
			<wfw:commentRss>http://jay.shao.org/2010/04/23/juniper-vpn-mac-setup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bad iPhone/Droid Sales Comparison</title>
		<link>http://jay.shao.org/2010/03/17/iphonedroid-sales-comparison-misleading/</link>
		<comments>http://jay.shao.org/2010/03/17/iphonedroid-sales-comparison-misleading/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 20:50:57 +0000</pubDate>
		<dc:creator>jayshao</dc:creator>
				<category><![CDATA[Commentary]]></category>

		<guid isPermaLink="false">http://jay.shao.org/?p=793</guid>
		<description><![CDATA[
			
				
			
		A number of news sources seem to be publishing comparisons between initial sales numbers for the Apple iPhone, Motorola Droid, and Google Nexus One.


    http://www.wired.com/gamelife/2010/03/nexus-one-sales/
    http://blog.flurry.com/bid/31410/Day-74-Sales-Apple-iPhone-vs-Google-Nexus-One-vs-Motorola-Droid


Some quick comparisons are being made trying to compare the DROID &#38; iPhone numbers head on, but I&#8217;m surprised not to see any sidebars [...]]]></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%2Fjay.shao.org%2F2010%2F03%2F17%2Fiphonedroid-sales-comparison-misleading%2F">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fjay.shao.org%2F2010%2F03%2F17%2Fiphonedroid-sales-comparison-misleading%2F&amp;source=jayshao&amp;style=normal&amp;service=bit.ly" height="61" width="50" />
			</a>
		</div><p>A number of news sources seem to be publishing comparisons between initial sales numbers for the Apple iPhone, Motorola Droid, and Google Nexus One.</p>

<ul>
    <li><a href="http://www.wired.com/gamelife/2010/03/nexus-one-sales/">http://www.wired.com/gamelife/2010/03/nexus-one-sales/</a></li>
    <li><a href="http://blog.flurry.com/bid/31410/Day-74-Sales-Apple-iPhone-vs-Google-Nexus-One-vs-Motorola-Droid">http://blog.flurry.com/bid/31410/Day-74-Sales-Apple-iPhone-vs-Google-Nexus-One-vs-Motorola-Droid</a></li>
</ul>

<p>Some quick comparisons are being made trying to compare the DROID &amp; iPhone numbers head on, but I&#8217;m surprised not to see any sidebars noting that the original iPhone launched at 499/599 &#8211; whereas the DROID has been fully subsidized from the get go.</p>
]]></content:encoded>
			<wfw:commentRss>http://jay.shao.org/2010/03/17/iphonedroid-sales-comparison-misleading/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spring wiring private init-method</title>
		<link>http://jay.shao.org/2010/03/16/spring-wiring-wprivate-init-method/</link>
		<comments>http://jay.shao.org/2010/03/16/spring-wiring-wprivate-init-method/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 17:22:58 +0000</pubDate>
		<dc:creator>jayshao</dc:creator>
				<category><![CDATA[ContextWeb]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[applicationcontext]]></category>
		<category><![CDATA[beanfactory]]></category>
		<category><![CDATA[init-method]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[reflection]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[springframework]]></category>

		<guid isPermaLink="false">http://jay.shao.org/?p=788</guid>
		<description><![CDATA[
			
				
			
		While adding some unit tests to older Spring code, I noticed that the production Spring configuration was wiring together some pretty simple Factory objects that had private init() methods (took a few minutes to figure out why I kept getting wavy lines), that looked like this:

1234567891011121314private void init&#40;&#41;&#123;
try &#123;
StringBuilder sb = new StringBuilder&#40;&#41;;
for&#40;String server : [...]]]></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%2Fjay.shao.org%2F2010%2F03%2F16%2Fspring-wiring-wprivate-init-method%2F">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fjay.shao.org%2F2010%2F03%2F16%2Fspring-wiring-wprivate-init-method%2F&amp;source=jayshao&amp;style=normal&amp;service=bit.ly&amp;hashtags=applicationcontext,beanfactory,init-method,java,programming,reflection,Spring,springframework" height="61" width="50" />
			</a>
		</div><p>While adding some unit tests to older Spring code, I noticed that the production Spring configuration was wiring together some pretty simple Factory objects that had private init() methods (took a few minutes to figure out why I kept getting wavy lines), that looked like this:</p>

<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:400px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> init<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span><br />
StringBuilder sb <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> StringBuilder<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> server <span style="color: #339933;">:</span> servers<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
sb.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span>server.<span style="color: #006633;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
sb.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span>BLANK_SPACE_DELIMITER<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
memCacheClient <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> MemcachedClient<span style="color: #009900;">&#40;</span>AddrUtil.<span style="color: #006633;">getAddresses</span><span style="color: #009900;">&#40;</span>sb.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">IOException</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
log.<span style="color: #006633;">error</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Unable to Connect to memCache &quot;</span> ,e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">RuntimeException</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Unable to Connect to memCache &quot;</span> , e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>

<p>It turns out that AbstractAutowireCapableBeanFactory does a bit of reflection when processing &#8216;init-method&#8217; to allow it to invoke private methods (assuming you don&#8217;t have any SecurityMangers running, which you probably don&#8217;t)</p>

<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:400px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ReflectionUtils.<span style="color: #006633;">makeAccessible</span><span style="color: #009900;">&#40;</span>initMethod<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span><br />
initMethod.<span style="color: #006633;">invoke</span><span style="color: #009900;">&#40;</span>bean, <span style="color: #009900;">&#40;</span><span style="color: #003399;">Object</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>

<p>So&#8230; magic&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://jay.shao.org/2010/03/16/spring-wiring-wprivate-init-method/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<series:name><![CDATA[Springframework Tricks]]></series:name>
	</item>
		<item>
		<title>IntelliJ and JRebel</title>
		<link>http://jay.shao.org/2010/03/10/intellij-and-jrebel/</link>
		<comments>http://jay.shao.org/2010/03/10/intellij-and-jrebel/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 18:01:32 +0000</pubDate>
		<dc:creator>jayshao</dc:creator>
				<category><![CDATA[ContextWeb]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[intellij]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://jay.shao.org/?p=786</guid>
		<description><![CDATA[
			
				
			
		So, after enduring some abuse from colleagues who miss VisualStudio (I have to admit &#8211; that feature to move the program counter does look really cool) I spent a bit of time the other day setting up with a trail-run of JRebel. So far the experience has been pretty fantastic &#8211; I can use maven to jetty:run [...]]]></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%2Fjay.shao.org%2F2010%2F03%2F10%2Fintellij-and-jrebel%2F">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fjay.shao.org%2F2010%2F03%2F10%2Fintellij-and-jrebel%2F&amp;source=jayshao&amp;style=normal&amp;service=bit.ly&amp;hashtags=development,intellij,java" height="61" width="50" />
			</a>
		</div><p>So, after enduring some abuse from colleagues who miss VisualStudio (I have to admit &#8211; that feature to move the program counter does look really cool) I spent a bit of time the other day setting up with a trail-run of JRebel. So far the experience has been pretty fantastic &#8211; I can use maven to jetty:run a project, hit ctrl+F9 to recompile, and F5 in the browser and see changes reflected &#8211; even with changed method sigs and the other goodies. It&#8217;s nice for test run, though I do admit, it makes it harder for me to force myself to write unit tests (not necessarily good)</p>

<p>I started with a couple internet tutorials:</p>

<ul>
    <li><a href="http://raibledesigns.com/rd/entry/using_jrebel_with_intellij_idea">http://raibledesigns.com/rd/entry/using_jrebel_with_intellij_idea</a></li>
    <li><a href="http://www.zeroturnaround.com/jrebel/configuration/maven/">http://www.zeroturnaround.com/jrebel/configuration/maven/</a></li>
</ul>

<p>One oddity I had to workaround w/hard coded paths &#8211; in Ubuntu I setup /etc/environment with refs to the JREBEL_HOME and to add it to MAVEN_OPTS, but when I run from IntelliJ it doesn&#8217;t seem to do the variable substitution, I get errors about not being able to run $JREBEL_HOME as a class &#8211; for the time being have just hard-coded paths and moved on, and it&#8217;s been great.</p>
]]></content:encoded>
			<wfw:commentRss>http://jay.shao.org/2010/03/10/intellij-and-jrebel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<series:name><![CDATA[Eclipse2Intellij]]></series:name>
	</item>
		<item>
		<title>[Fixed] IntelliJ Ubuntu Launcher Problem</title>
		<link>http://jay.shao.org/2010/03/04/fixed-problem-creating-intellij-launcher-in-ubuntugnome/</link>
		<comments>http://jay.shao.org/2010/03/04/fixed-problem-creating-intellij-launcher-in-ubuntugnome/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 17:29:45 +0000</pubDate>
		<dc:creator>jayshao</dc:creator>
				<category><![CDATA[ContextWeb]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[gnome]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[intellij]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://jay.shao.org/?p=782</guid>
		<description><![CDATA[
			
				
			
		http://ubuntuforums.org/showthread.php?t=224100I had a bunch of trouble getting a GNOME launcher to successfully execute (interestingly enough, the Eclipse/STS launchers mostly worked fine) &#8211; turned out it was related to JDK_HOME not being recognized by GNOME. I&#8217;d gotten accustomed to setting up my environment variables in ~/.bashrc and sourcing that into .profile &#8211; apparently GNOME looks in [...]]]></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%2Fjay.shao.org%2F2010%2F03%2F04%2Ffixed-problem-creating-intellij-launcher-in-ubuntugnome%2F">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fjay.shao.org%2F2010%2F03%2F04%2Ffixed-problem-creating-intellij-launcher-in-ubuntugnome%2F&amp;source=jayshao&amp;style=normal&amp;service=bit.ly&amp;hashtags=Eclipse,gnome,ide,intellij,java,linux,ubuntu" height="61" width="50" />
			</a>
		</div><p>http://ubuntuforums.org/showthread.php?t=224100I had a bunch of trouble getting a GNOME launcher to successfully execute (interestingly enough, the Eclipse/STS launchers mostly worked fine) &#8211; turned out it was related to JDK_HOME not being recognized by GNOME. I&#8217;d gotten accustomed to setting up my environment variables in ~/.bashrc and sourcing that into .profile &#8211; apparently GNOME looks in /etc/environment.</p>

<p>Will write up some more thoughts based on a few days usage in a bit. All better for now. Links:</p>

<ul>
    <li><a href="http://ubuntuforums.org/showthread.php?t=224100 ">http://ubuntuforums.org/showthread.php?t=224100 </a></li>
    <li><a href="http://ubuntuforums.org/showthread.php?t=884580">http://ubuntuforums.org/showthread.php?t=884580</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://jay.shao.org/2010/03/04/fixed-problem-creating-intellij-launcher-in-ubuntugnome/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<series:name><![CDATA[Eclipse2Intellij]]></series:name>
	</item>
	</channel>
</rss>
