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

<channel>
	<title>REVERT TO CONSOLE &#187; Web</title>
	<atom:link href="http://www.reverttoconsole.com/blog/category/web/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.reverttoconsole.com</link>
	<description>for f in *;do echo &#124; sed &#039;i\rtc&#039; &#62;&#62; $f;done; java programming et al</description>
	<lastBuildDate>Thu, 25 Aug 2011 15:02:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Java PURL (Personalized URL) Generator encoder/decoder example</title>
		<link>http://www.reverttoconsole.com/blog/core-java/java-purl-personalized-url-generator-encoderdecoder-example/</link>
		<comments>http://www.reverttoconsole.com/blog/core-java/java-purl-personalized-url-generator-encoderdecoder-example/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 19:24:04 +0000</pubDate>
		<dc:creator>Priyatam</dc:creator>
				<category><![CDATA[Core Java]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.reverttoconsole.com/?p=696</guid>
		<description><![CDATA[Have you ever noticed the unscubscribe url pattern when you unsubscribe from an online promotion or retail marketing campaign? It looks something like this: www.somesite.com/unsubscribe/u/NSFAHPF/aW5aaW1pdHk Ideally, you would want the user to click that (personalized) URL and the system should automatically unsubscribe, or perform any simple non-secure operations like registering for a poll. How would [...]]]></description>
			<content:encoded><![CDATA[<p>Have you ever noticed the unscubscribe url pattern when you unsubscribe from an online promotion or retail marketing campaign? It looks something like this:</p>
<p><em>www.somesite.com/unsubscribe/u/NSFAHPF/aW5aaW1pdHk</em></p>
<p>Ideally, you would want the user to click that (personalized) URL and the system should automatically unsubscribe, or perform any simple non-secure operations like registering for a poll. How would you then create a url that is unique to the user id, yet obfuscated enough to make it secure and personalized?</p>
<p>Here&#8217;s a Java utility class that will do encode a url and decode a url based on the java persistence id of the user. It&#8217;s based on Java&#8217;s inbuilt hash algorithm. </p>
<p>Of course, for a fine grain control over the URL generation, a Strategy interface could be used that can be passed to the PURLGenerator. </p>
<pre>
import java.net.URI;

public class PURLGenerator {

	// Maximum bits used by the value
	private static final int VALUE_BITS = Integer.SIZE - 1;

	// Maximum bits used by the encoded value
	private static final int ENCODED_BITS = Long.SIZE - 1;

	// Bits available for each encoding bucket
	private static final int BUCKET_BITS = ENCODED_BITS - VALUE_BITS;

	// Size of the encoding bucket
	private static final long BUCKET_SIZE = 1L &lt;&lt; BUCKET_BITS;

	// Hash factor for encoding within the bucket
	private static final long BUCKET_HASH = (BUCKET_SIZE / 2) - 37;

	// Radix used for text encoding
	private static final int ENCODED_RADIX = 35;

	// Base URI
	private URI baseUri;

	public URI generateUri(Integer id) {
		if (id == null) {
			throw new NullPointerException();
		}

		if (id &lt; 1) {
			throw new IllegalArgumentException(&quot;Id must be greater then zero&quot;);
		}

		// Find the base for the mapped encoding bucket
		final long valueBase = (id - 1) * BUCKET_SIZE;

		// Hash the value within the bucket
		final long valueHash = (id * BUCKET_HASH) % BUCKET_SIZE;

		// Generate the encoded value
		final long value = valueBase + valueHash;

		// Serialize encoded value as text
		final String code = Long.toString(value, ENCODED_RADIX);

		// Return the appended URI
		return this.baseUri.resolve(code);
	}

	public Integer parseUri(URI uri) {
		if (uri == null) {
			throw new NullPointerException();
		}

		if (!uri.getPath().startsWith(this.baseUri.getPath())) {
			throw new IllegalArgumentException(&quot;Invalid URI format: &quot;
					+ uri);
		}

		// Get the serialized value
		final String code = uri.getPath().substring(
				this.baseUri.getPath().length());

		// Deserialize the encoded value
		final long value = Long.parseLong(code, ENCODED_RADIX);

		// Decode the id
		final int id = (int) ((value / BUCKET_SIZE) + 1);

		// Decode the id hash
		final long idHash = value % BUCKET_SIZE;

		// Validate the hash
		if (idHash != ((id * BUCKET_HASH) % BUCKET_SIZE)) {
			return null;
		}
		return id;
	}
}
</pre>

<span class="slashdigglicious">
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fcore-java%2Fjava-purl-personalized-url-generator-encoderdecoder-example%2F&amp;title=Java+PURL+%28Personalized+URL%29+Generator+encoder%2Fdecoder+example" title="Slashdot It!"><img src="http://slashdot.org/favicon.ico" height="16" width="16" alt="[Slashdot]" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fcore-java%2Fjava-purl-personalized-url-generator-encoderdecoder-example%2F&amp;title=Java+PURL+%28Personalized+URL%29+Generator+encoder%2Fdecoder+example" title="Digg This Story"><img src="http://digg.com/favicon.ico" width="16" height="16" alt="[Digg]" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fcore-java%2Fjava-purl-personalized-url-generator-encoderdecoder-example%2F&amp;title=Java+PURL+%28Personalized+URL%29+Generator+encoder%2Fdecoder+example" title="Reddit"><img src="http://reddit.com/favicon.ico" width="16" height="16" alt="[Reddit]" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fcore-java%2Fjava-purl-personalized-url-generator-encoderdecoder-example%2F&amp;title=Java+PURL+%28Personalized+URL%29+Generator+encoder%2Fdecoder+example" title="Save to del.icio.us" onclick="window.open('http://del.icio.us/post?v=4&amp;noui&amp;jump=close&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fcore-java%2Fjava-purl-personalized-url-generator-encoderdecoder-example%2F&amp;title=Java+PURL+%28Personalized+URL%29+Generator+encoder%2Fdecoder+example', 'delicious', 'toolbar=no,width=700,height=400'); return false;"><img src="http://images.del.icio.us/static/img/delicious.small.gif" width="16" height="16" alt="[del.icio.us]" /></a>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fcore-java%2Fjava-purl-personalized-url-generator-encoderdecoder-example%2F" title="Share on Facebook"><img src="http://www.facebook.com/favicon.ico" width="16" height="16" alt="[Facebook]" /></a>
<a href="http://technorati.com/faves?add=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fcore-java%2Fjava-purl-personalized-url-generator-encoderdecoder-example%2F" title="Add to my Technorati Favorites"><img src="http://technorati.com/favicon.ico" width="16" height="16" alt="[Technorati]" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fcore-java%2Fjava-purl-personalized-url-generator-encoderdecoder-example%2F&amp;title=Java+PURL+%28Personalized+URL%29+Generator+encoder%2Fdecoder+example" title="Save to Google Bookmarks"><img src="http://www.google.com/favicon.ico" width="16" height="16" alt="[Google]" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fcore-java%2Fjava-purl-personalized-url-generator-encoderdecoder-example%2F&amp;title=Java+PURL+%28Personalized+URL%29+Generator+encoder%2Fdecoder+example" title="Stumble it!"><img src="http://www.stumbleupon.com/favicon.ico" width="16" height="16" alt="[StumbleUpon]" /></a>
</span>]]></content:encoded>
			<wfw:commentRss>http://www.reverttoconsole.com/blog/core-java/java-purl-personalized-url-generator-encoderdecoder-example/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CAPTCHA Overview and alternatives</title>
		<link>http://www.reverttoconsole.com/blog/security/captcha-overview-and-alternatives/</link>
		<comments>http://www.reverttoconsole.com/blog/security/captcha-overview-and-alternatives/#comments</comments>
		<pubDate>Mon, 09 Mar 2009 17:54:51 +0000</pubDate>
		<dc:creator>Priyatam</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://reverttoconsole.com/?p=347</guid>
		<description><![CDATA[I recently evaluated CAPTCHA for a client requirement. Here is a brief overview (Source: blogs, wiki, white papers found on google search) CAPTCHA stands for: “Completely Automated Public Turing test to Tell Computers and Humans Apart”. It refers to a technology familiar to anyone who’s registered on a popular website &#8211; the “what word is [...]]]></description>
			<content:encoded><![CDATA[<p>I recently evaluated CAPTCHA for a client requirement. Here is a brief overview (Source: blogs, wiki, white papers found on google search)</p>
<p>CAPTCHA stands for: “Completely Automated Public Turing test to Tell Computers and Humans Apart”. It refers to a technology familiar to anyone who’s registered on a popular website &#8211; the “what word is shown on this image” challenge. As the “Turing test” alludes to, the purpose is to distinguish between humans and computers. Types of CAPTCHA:</p>
<p>* Photo/Image CAPTCHA<br />
* Animated CAPTCHA<br />
* Sound CAPTCHA<br />
* Multiple choice questions<br />
* Logic questions</p>
<p>CAPTCHA doesn’t prevent hackers or attackers to the site. It merely attempts to prevent bots and spammers.</p>
<p><strong>How does CAPTCHA work?</strong></p>
<p><span id="more-293"></span><br />
CAPTCHA fools the bots by asking questions or generating pictures only human can answer. They contain distorted letters, different pictures with different letters in different shapes. After the user submits the answer CAPTCHA validate the answer. Since Bots cannot recognize each letter alone, this is a fairly difficult to break.</p>
<p><strong>How to create CAPTCHA?</strong><br />
CAPTCHA can be written using any programming languages including Java. The code should provide three main functions. First, the code should generate a random picture with different properties. Second, validate the user answer. Third, make these pictures secure. Also, there are many things to make the code more reliable like&#8221; Rotate the text randomly, add random spaces in between characters, use a TTF fonts and change the font randomly every time, use a random text and image size every time, use more advanced text distortion and colors, move the lines randomly, store the password in a random cookie. In addition, there are CAPTCHA creator programs which allow users to choose their CAPTCHA shapes. Sophisticated libraries often provide extensions for developers to create their own algorithm for drawing images.<br />
CAPTCHA benefits</p>
<p>* Preventing Comment Spam in Blogs.<br />
* Protecting Website Registration.<br />
* Protecting Email Addresses from Scrapers.<br />
* Online Polls<br />
* Search Engine Bots.<br />
* Worms and Spam</p>
<p><strong>Implementations of CAPTCHA</strong><br />
There are several implementations of CAPTCHA – commercial and open-source, in almost every programming language. The following are some Java based CAPTCHA frameworks<br />
* reCaptcha (most popular, available as web-service)<br />
* SimpleCaptcha (Java)<br />
* JBoss Seam Captcha (for Java Seam based projects, works out of the box, can extend algorithm)<br />
* jCaptcha (Java)<br />
* Kaptcha (very simple java alternative to jCaptcha)<br />
* … and many more</p>
<p><strong>Problems</strong><br />
* When captchas get funky that humans with 20/20 vision start struggling; accessibility is far away<br />
* Prone to common attacks<br />
* The image challenge is inaccessible to visually impaired users. This problem is usually addressed by providing an alternative audio CAPTCHA for these users. However, many audio CAPTCHAs can be difficult to hear even to those with good hearing due to background noise and distorted pronunciation.<br />
* Providing both image and audio CAPTCHAs is difficult to implement. ReCAPTCHA can simplify the process, but requires Javascript, and needs to be imbedded in your mark-up using iframes.<br />
* Image CAPTCHAs are not infallible. A number of projects have shown that automatic character recognition software can often read the letters in the image.</p>
<p><strong>Alternate Solutions</strong><br />
There are several alternatives to CAPTCHA. Most of them can be easily incorporated into an existing web framework:</p>
<ul>
<li><strong>Dummy form elements</strong></li>
</ul>
<p>Dummy form elements can be added to trick bots into filling them and hiddeen those from users with CSS. Additionally, dummy elements should be named suggestively to fool the bots &#8211; for example, subject, name, URL. Then when form is submitted, system can check if any of these fields have been filled and if so you can isolate a “bot.”</p>
<ul>
<li><strong>Session variable / GET request detection</strong></li>
</ul>
<p>This isn’t CAPTCHA alternative, but it can be used to filter out spam-bots. A variable is put in session when a GET request is made and when a form is submitted the system checks the session for that variable. This can filter out bots that submit request directly to POST without getting a page with the form. However this system can be easily fooled by creating a bot that acts like a web browser.</p>
<ul>
<li><strong>Session variable with time computation</strong></li>
</ul>
<p>Similar to the above session idea where, time can be recorded when the form was loaded. On post, system calculates the time difference and if it’s less than say 5 seconds, it can be ignored as spam. However spam bots could easily adjust for this by building in a delay.</p>
<ul>
<li><strong>5 Layer Spam Filter</strong></li>
</ul>
<p>It uses some cunning techniques to identify bots without having to resort to CAPTCHA:</p>
<p>* Do fields hidden off-screen still get filled in<br />
* Is the form filled in in seconds?<br />
* Do they not have JavaScript enabled?<br />
* Does Askimet mark it as spam<br />
* Etc …</p>
<ul>
<li><strong>Forced Visual cues</strong></li>
</ul>
<p>This is a simpler alternative. The webpage with a &#8220;yes&#8221; and a &#8220;no&#8221; radio button can make &#8220;no&#8221; the default and have the visitors state that they are not spammers by selecting &#8220;yes.&#8221;</p>
<ul>
<li><strong>SAPTCHA (“Text based CAPTCHA)</strong></li>
</ul>
<p>SAPTCHA stands for Semi Automatic Public Turing Test to Tell Computers and Humans Apart.</p>
<p>The key concept is same as with CAPTCHA: user is presented with test question or instructions and must give correct answer to use resource. Main difference is that computer does not try to automatically generate &#8220;unique&#8221; test questions on each query; only verification of answer is automatic. Instead, unique test question and answer[s] is set by moderator or owner when SAPTCHA is installed, and should be easy to change if needed.<br />
Comparison of SAPTCHA versus CAPTCHA features<br />
<strong></strong></p>
<p><em>Advantages of SAPTCHA over CAPTCHA:</em></p>
<p>1. SAPTCHA software is much easier to implement than CAPTCHA<br />
2. Textual SAPTCHA does not discriminate against disabled who can use internet. [Audio CAPTCHA plus visual CAPTCHA would double effort and is thus very uncommon in practice]<br />
3. There is methods for breaking image based CAPTCHAs. Even with popular CAPTCHA, the system may still get spammed by entirely automatic bot. SAPTCHAs can be much more varied and there won&#8217;t be common method of breaking until it becomes possible for computers to interpret human instructions in normal human language.<br />
<strong><br />
</strong><em>Advantages of CAPTCHA over SAPTCHA (disadvantages of SAPTCHA):</em></p>
<p>1. With SAPTCHA, when banning spammer, moderator must enter new question and answer. With CAPTCHA, though, there&#8217;s point 1 above (&amp; CAPTCHA code won&#8217;t remain useful forever either), so for not extremely popular websites it seems highly unlikely that even in long run CAPTCHA would save work.<br />
2. If SAPTCHA is used to protect registration, it is easier to register many accounts at once than with CAPTCHA; may matter with popular email services.<br />
3. Verbal SAPTCHA is problematic when it is multi-language resource that needs frequent changes.</p>
<ul>
<li><strong>Mouse Intervention CAPTCHA</strong></li>
</ul>
<p>A simple Mouse Intervention CAPTCHA implemented in a Java applet. The server generates some drawings and asks the user to click on all drawings with an odd number of edges. The mouse click events are recorded. As long as the mouse is clicked within the dark area of drawings with an odd number of edges, access is granted.</p>
<p><strong>Conclusion</strong><br />
CAPTCHA is widely used across the internet including by Google, Yahoo and Microsoft. Hence discarding this solution should be done only for a ground-breaking alternative. With CAPTCHA, the criteria would be to pick an image/audio based CAPTCHA or text-based CAPTCHA for the project depending on the target user base. Once that’s decided, one of the several free libraries can be chosen to fit well into an existing technology stack. A relatively “light” library that provides easy extension hooks for custom extensions of CAPTCHA algorithms would be ideal.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.reverttoconsole.com/blog/security/captcha-overview-and-alternatives/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Grails Startup Pain</title>
		<link>http://www.reverttoconsole.com/blog/groovy/grails-startup-pain/</link>
		<comments>http://www.reverttoconsole.com/blog/groovy/grails-startup-pain/#comments</comments>
		<pubDate>Tue, 27 May 2008 16:06:10 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://reverttoconsole.com/archives/186</guid>
		<description><![CDATA[Grails is a composed of a stack I like, a combination of technologies I&#8217;ve enjoyed using over the last few years- Groovy, HSQLDB, Spring, Hibernate, etc. And the whole seems greater than the sum of its parts, so while I&#8217;m complaining about it today, I do so knowing that with future releases Grails could really [...]]]></description>
			<content:encoded><![CDATA[<p>Grails is a composed of a stack I like, a combination of technologies I&#8217;ve enjoyed using over the last few years- Groovy, HSQLDB, Spring, Hibernate, etc. And the whole seems greater than the sum of its parts, so while I&#8217;m complaining about it today, I do so knowing that with future releases Grails could really deliver a great solution.</p>
<p>One thing that many new frameworks are striving to offer these days is a quick startup- you can push this button, pull this lever, and voila, you have a hello world and can build from there. Of course this sounds better than writing a domain class, a dao, a service class, then enter some BS in your web.xml, and wire your beans, and add a *-servlet.xml, configure log4j, etc etc etc. And it is. Except when it doesn&#8217;t work.</p>
<p>My initial attempt at creating a Grails project went like this:</p>
<ul>
<li><em>grails create-app</em> created my application.</li>
<li><em>import project</em> imported my project into Eclipse. I ended up with 25 or so classes in my base directory.</li>
<li><em>grails run-app</em> runs Jetty. I pull up a browser and can see my new site- everything appears to be going great.</li>
<li><em>grails create-domain-class</em> Create a domain class. Edit the domain class file, add a few properties. Easy.</li>
<li><em>grails create-controller</em> Creates a controller class. Remove the index() method and add def scaffold = domain class.</li>
<li><em>grails run-app</em> start my server again. This time I see my controller, click on it.
</ul>
<blockquote><p>NullPointerException</p></blockquote>
<p>The crazy thing is, this is after following directions from <a href="http://www.amazon.com/Definitive-Guide-Grails/dp/1590597583">the book written by the lead developer of the Grails</a> project! Ouch!</p>
<p>Here&#8217;s another example:</p>
<p><a href="http://grails.org/Quick+Start">The getting started with Grails documentation</a> highlights using Bootstrap.groovy in grails-app/conf as a place to inject test data.</p>
<p>So for example, using a domain class Bookmark, in the Bootstrap.groovy file you could write:</p>
<pre>
new Bookmark(property1: "value1", property2: "value2").save()
</pre>
<p>and have the bookmark show up in the Grails scaffolding.</p>
<p>With this approach I ended up with a &#8220;NoMethodException&#8221; saying that save() was not a valid method for this domain class.</p>
<p>Nice.</p>
<p>Another approach mentioned using the groovy console to add data. I could create an object, such as the Bookmark, but again I could not save it. This time it seemed like after creating it, it could not find the object in the stack.</p>
<p>I will continue to post about this as I find out the source of my problems.</p>
<p><strong>Update 5/28/08:</strong> After rereading the extensive <a href="http://docs.codehaus.org/display/GRAILS/Eclipse+IDE+Integration">&#8220;how to set up a Grails project in Eclipse&#8221;</a> documentation, it became clear that without disabling the Groovy plugin auto-compilation feature, I wouldn&#8217;t have much success. In fact, after last night&#8217;s effort I&#8217;ve made some nice progress and am beginning to see some similarities between Grails and Seam, at least in terms of work-cycle.</p>
<p>I&#8217;m frustrated though, by the fact that grails shell is not working for me. I believe the issue is that <a href="http://jira.codehaus.org/browse/GRAILS-163">I&#8217;m using cygwin</a>. It may be time to just switch over the linux entirely.</p>
<p><strong>Update: </strong> The &#8220;grails console&#8221; option appears to work.<br />
<img src="http://reverttoconsole.com/wiki/images/6/64/Grailsconsole.jpg" alt="Grails Console" /></p>
<p><strong>Update 5/29/08:</strong> One thing I&#8217;ve noticed is that given a domain object like this:</p>
<pre>
class Person {
	static optionals = ['middleInitial']
	String firstName
	String lastName
	String middleInitial
}
</pre>
<p>In the grails console, you MUST specify the optional property middleInitial in order to successfully create an object. Unfortunately, there&#8217;s no warning or explanation in the console. It just doesn&#8217;t work without all properties being passed in the constructor.</p>
<p>So this will work:</p>
<pre>
def p = new Person(firstName: "test", lastName: "test", middleInitial: "m")
p.save()
</pre>
<p>But this will not:</p>
<pre>
def p = new Person(firstName: "test", lastName: "test")
p.save()
</pre>
<p>And neither will this:</p>
<pre>
def p = new Person()
p.firstName = "test"
p.lastName = "test"
p.save()
</pre>
<p>But this will:</p>
<pre>
def p = new Person()
p.firstName = "test"
p.lastName = "test"
p.middleInitial  = "m"
p.save()
</pre>

<span class="slashdigglicious">
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fgroovy%2Fgrails-startup-pain%2F&amp;title=Grails+Startup+Pain" title="Slashdot It!"><img src="http://slashdot.org/favicon.ico" height="16" width="16" alt="[Slashdot]" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fgroovy%2Fgrails-startup-pain%2F&amp;title=Grails+Startup+Pain" title="Digg This Story"><img src="http://digg.com/favicon.ico" width="16" height="16" alt="[Digg]" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fgroovy%2Fgrails-startup-pain%2F&amp;title=Grails+Startup+Pain" title="Reddit"><img src="http://reddit.com/favicon.ico" width="16" height="16" alt="[Reddit]" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fgroovy%2Fgrails-startup-pain%2F&amp;title=Grails+Startup+Pain" title="Save to del.icio.us" onclick="window.open('http://del.icio.us/post?v=4&amp;noui&amp;jump=close&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fgroovy%2Fgrails-startup-pain%2F&amp;title=Grails+Startup+Pain', 'delicious', 'toolbar=no,width=700,height=400'); return false;"><img src="http://images.del.icio.us/static/img/delicious.small.gif" width="16" height="16" alt="[del.icio.us]" /></a>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fgroovy%2Fgrails-startup-pain%2F" title="Share on Facebook"><img src="http://www.facebook.com/favicon.ico" width="16" height="16" alt="[Facebook]" /></a>
<a href="http://technorati.com/faves?add=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fgroovy%2Fgrails-startup-pain%2F" title="Add to my Technorati Favorites"><img src="http://technorati.com/favicon.ico" width="16" height="16" alt="[Technorati]" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fgroovy%2Fgrails-startup-pain%2F&amp;title=Grails+Startup+Pain" title="Save to Google Bookmarks"><img src="http://www.google.com/favicon.ico" width="16" height="16" alt="[Google]" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fgroovy%2Fgrails-startup-pain%2F&amp;title=Grails+Startup+Pain" title="Stumble it!"><img src="http://www.stumbleupon.com/favicon.ico" width="16" height="16" alt="[StumbleUpon]" /></a>
</span>]]></content:encoded>
			<wfw:commentRss>http://www.reverttoconsole.com/blog/groovy/grails-startup-pain/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Circumvent the firewall; access web-mail through pop3 using HTTP</title>
		<link>http://www.reverttoconsole.com/blog/linux/circumvent-the-firewall-access-web-mail-through-pop3-using-http/</link>
		<comments>http://www.reverttoconsole.com/blog/linux/circumvent-the-firewall-access-web-mail-through-pop3-using-http/#comments</comments>
		<pubDate>Tue, 15 Jan 2008 09:30:25 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://reverttoconsole.com/archives/158</guid>
		<description><![CDATA[Ever want to be cool and check your web-mail at work without having to go to the stupid bulky web client to do it? There are several ways around this. Some providers, like gmail provide pop3 access. However, many do not, and even if they do, most corporate firewalls block you from using it. However, [...]]]></description>
			<content:encoded><![CDATA[<p>Ever want to be cool and check your web-mail at work without having to go to the stupid bulky web client to do it?  There are several ways around this.  Some providers, like <a href="http://www.gmail.com">gmail</a> provide pop3 access.  However, many do not, and even if they do, most corporate firewalls block you from using it.  However, if you use the HTTP (aka web) protocol, then you can most likely circumvent the firewall, as it sees you as just using the web.</p>
<p>There are a couple different free tools that can achieve this.  By far, the most comprehensive is <a href="http://sourceforge.net/projects/freepops">FreePops.</a>  FreePops can be installed as a service and run in the background.  It is very simple to configure an account using FreePops.  You simply enter your username as the full email address.  FreePops will know which connection module to use based on the domain of your email address.  Then you specify the pop3 server as <code>localhost:2000</code> or <code>127.0.0.1:2000</code>.  2000 is the default port and you can change it if you wish.</p>
<p>FreePops does not provide smtp access and has limited features out of the box, but it does work well.  This brings me to the second tool I like to use.  It&#8217;s called <a href="http://sourceforge.net/projects/yahoopops/">YPops! </a> and it is exclusive to Yahoo web-mail.  However, it includes SMTP access and has a couple more features that come in handy.  For instance, you can limit the amount of mail that gets downloaded, or set it to download new messages only.  This is nice for me because I&#8217;ve had my yahoo account for a long time, so I don&#8217;t want it to download all the messages when I connect, just new ones.  The defaults for it are:<br />
<code>Pop3- localhost:110 or 127.0.0.1:110<br />
SMTP- localhost:25 or 127.0.0.1:25 </code></p>
<p>I&#8217;ve got Hotmail and Gmail configured through FreePops and Yahoo configured through YPops; all in fetchmail.  They all go to the same &#8220;Inbox&#8221; via procmail and then I can read them with Pine.  For more information on configuring Pine with procmail and fetchmail, see <a href="http://reverttoconsole.com/archives/145">Jeff&#8217;s post here</a>.</p>
<p>My .fetchmailrc file</p>
<p><code><br />
set daemon 180<br />
set postmaster "eokuwwy"</p>
<p>#polls ypops; default port is 110<br />
poll localhost protocol pop3<br />
user '<myusername>@yahoo.com' there with password '<myyahoopw>' is 'eokuwwy' here options mda '/usr/bin/procmail -d %T'</p>
<p>#polls freepops<br />
poll localhost protocol pop3 port 2000<br />
user '<myusername>@gmail.com' there with password '<mygmailpw>' is 'eokuwwy' here options mda '/usr/bin/procmail -d %T'</p>
<p>#polls freepops<br />
poll localhost protocol pop3 port 2000<br />
user '<myusername>@msn.com' there with password '<myhotmailpw>' is 'eokuwwy' here options mda '/usr/bin/procmail -d %T'</p>
<p></code></p>
<p>Additionally, I appended an alias to my bash profile that makes use of the MailUtil program that you can get for Pine.  It can be found here:<br />
<a href="http://www.washington.edu/pine/getpine/pcpine.html">http://www.washington.edu/pine/getpine/pcpine.html</a></p>
<p>This simply checks my Inbox to see if there are any new mails.  That way, I don&#8217;t need to keep a mail client open all the time.</p>
<p><code>export WIN_MAILPATH="C:\\devtools\\cygwin\\var\\spool\\mail\\eokuwwy"<br />
alias mail="mailutil check '$WIN_MAILPATH'"<br />
</code></p>
<p>mailutil is already installed in a directory that&#8217;s included in the $PATH.</p>
<p>Well that about does it.  Happy popping.</p>

<span class="slashdigglicious">
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Flinux%2Fcircumvent-the-firewall-access-web-mail-through-pop3-using-http%2F&amp;title=Circumvent+the+firewall%3B+access+web-mail+through+pop3+using+HTTP" title="Slashdot It!"><img src="http://slashdot.org/favicon.ico" height="16" width="16" alt="[Slashdot]" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Flinux%2Fcircumvent-the-firewall-access-web-mail-through-pop3-using-http%2F&amp;title=Circumvent+the+firewall%3B+access+web-mail+through+pop3+using+HTTP" title="Digg This Story"><img src="http://digg.com/favicon.ico" width="16" height="16" alt="[Digg]" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Flinux%2Fcircumvent-the-firewall-access-web-mail-through-pop3-using-http%2F&amp;title=Circumvent+the+firewall%3B+access+web-mail+through+pop3+using+HTTP" title="Reddit"><img src="http://reddit.com/favicon.ico" width="16" height="16" alt="[Reddit]" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Flinux%2Fcircumvent-the-firewall-access-web-mail-through-pop3-using-http%2F&amp;title=Circumvent+the+firewall%3B+access+web-mail+through+pop3+using+HTTP" title="Save to del.icio.us" onclick="window.open('http://del.icio.us/post?v=4&amp;noui&amp;jump=close&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Flinux%2Fcircumvent-the-firewall-access-web-mail-through-pop3-using-http%2F&amp;title=Circumvent+the+firewall%3B+access+web-mail+through+pop3+using+HTTP', 'delicious', 'toolbar=no,width=700,height=400'); return false;"><img src="http://images.del.icio.us/static/img/delicious.small.gif" width="16" height="16" alt="[del.icio.us]" /></a>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Flinux%2Fcircumvent-the-firewall-access-web-mail-through-pop3-using-http%2F" title="Share on Facebook"><img src="http://www.facebook.com/favicon.ico" width="16" height="16" alt="[Facebook]" /></a>
<a href="http://technorati.com/faves?add=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Flinux%2Fcircumvent-the-firewall-access-web-mail-through-pop3-using-http%2F" title="Add to my Technorati Favorites"><img src="http://technorati.com/favicon.ico" width="16" height="16" alt="[Technorati]" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Flinux%2Fcircumvent-the-firewall-access-web-mail-through-pop3-using-http%2F&amp;title=Circumvent+the+firewall%3B+access+web-mail+through+pop3+using+HTTP" title="Save to Google Bookmarks"><img src="http://www.google.com/favicon.ico" width="16" height="16" alt="[Google]" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Flinux%2Fcircumvent-the-firewall-access-web-mail-through-pop3-using-http%2F&amp;title=Circumvent+the+firewall%3B+access+web-mail+through+pop3+using+HTTP" title="Stumble it!"><img src="http://www.stumbleupon.com/favicon.ico" width="16" height="16" alt="[StumbleUpon]" /></a>
</span>]]></content:encoded>
			<wfw:commentRss>http://www.reverttoconsole.com/blog/linux/circumvent-the-firewall-access-web-mail-through-pop3-using-http/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Compare Sitemesh Vs Tiles, an overview</title>
		<link>http://www.reverttoconsole.com/blog/core-java/compare-sitemesh-vs-tiles-an-overview/</link>
		<comments>http://www.reverttoconsole.com/blog/core-java/compare-sitemesh-vs-tiles-an-overview/#comments</comments>
		<pubDate>Wed, 27 Jun 2007 18:46:49 +0000</pubDate>
		<dc:creator>Priyatam</dc:creator>
				<category><![CDATA[Core Java]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://reverttoconsole.com/archives/125</guid>
		<description><![CDATA[If you haven&#8217;t heard about the layout framework, Sitemesh which is based on the decorator pattern, you&#8217;re missing something in your webapp. Here&#8217;s a quick overview of both the Frameworks and obviously Sitemesh favors over Struts Tiles in a lot of ways. The Pros: Compatibility: Works virtually with all web frameworks while Tiles has limited [...]]]></description>
			<content:encoded><![CDATA[<p>If you haven&#8217;t heard about the layout framework, <a href="http://www.opensymphony.com/sitemesh/">Sitemesh </a>which is based on the decorator pattern, you&#8217;re missing something in your webapp. Here&#8217;s a quick overview of both the Frameworks and obviously Sitemesh favors over Struts Tiles in a lot of ways.</p>
<p><strong>The Pros:</strong></p>
<li><strong>Compatibility:</strong> Works virtually with all web frameworks while Tiles has limited compatibility (more or less Struts Centric)</li>
<li><strong>Maintainance:</strong> Easier to setup, maintain, decorate pages, understand and use</li>
<li><strong>Filters based:</strong> Sitemesh is based on Servlet Fitlers instead of JSP includes which means it intercepts right at the request level.</li>
<li><strong>Configuration:</strong> Sitemesh has a central configuration to do all layouts via its decorators.xml besides you don&#8217;t have to create a definition for every page in your application (as in Tiles)</li>
<li><strong>Patterns:</strong> Sitmesh is based on the wonderfully simple – Decorator Pattern. To apply a decorator to a page, you use a matching pattern definition in decorators.xml</li>
<li><strong>Nesting decorators:</strong> Much like Tiles, you can always apply a decorator to a section of another decorator. You can even pass parameters to the Sub decorators just like you can in Tiles.</li>
<li><strong>Flexibility:</strong> You can do just about anything you wanted! SiteMesh&#8217;s tag library consists of just 6 tags in total. SiteMesh is simple but still very flexible.</li>
<li><strong>Fragments:</strong> Your decorators can be fully valid xhtml pages, or they can be small fragments that belong in a bigger page.</li>
<li><strong>Tag Attributes:</strong> The writeEntireProperty attribute of the decorator:getProperty prevents you from having to do silly empty checks and conditional insertions of non-breaking spaces.</li>
<li><strong>Separation from Content:</strong> You can finally keep your dynamic pages content-only! Use the decorators in combination with cascading style sheets to style your markup. Keep your content clean!</li>
<li><strong>Atomic Pages:</strong> With Sitemesh, building atomic pages can be a breeze. When you have a page which has absolutely the content you want (let’s say, a results table). You can reuse this ‘atomic page’ in any other page you want in your webapp and even style it in different ways depending on where it’s included it. You don&#8217;t have to make them fragments and assume they&#8217;ll be properly wrapped with header, navigation, branding, footer, menu, by some other entity. Because Sitemesh rips out all the head and body tags you have ultimate control. Ultimately, this can help you reduce the total number of jsp files.</li>
<li><strong>Less coupling:</strong> Using Tiles, you need to have your forwards go to a &#8220;tiles page&#8221;. Each individual page has to be associated with a layout, this is the biggest drawback! Every time you create a new JSP that you want to forward to, you have to create another tiles definition and associate it with a layout and forward to the Tile page (versus the JSP).</li>
<p>SiteMesh takes the approach that your page (JSP) doesn&#8217;t even know or care that it&#8217;s being decorated. Using SiteMesh, your pages don’t have to worry about a layout at all</p>
<li><strong>URL Patterns, Custom Mapping:</strong> SiteMesh allows you to set up a URL pattern and the corresponding pages are decorated with the layout you choose. You can have decorators invoked based on many other ways other than a simple URL mapping by extending DecoratorMapper.</li>
<p>With Tiles, the whole concept of TilesRequestProcessor has never been easy to configure. For example, regarding your page chunking (headings etc) &#8211; you can already do this via the content blocks feature. Simply put <content tag="x">content here</content> into your page, and it will be available to your decorator as &#8216;page.x&#8217;. Also useful because without decoration browsers will ignore the <content> tag, hence you can still preview your pages. You can use this technique for all sorts of things, for example you could use it to aggregate stylesheets as you talked about using <content tag="stylesheet">&#8230;</content> and then in your decorator display all of the stylesheets in your head tag &#8211; or something like that.</content></p>
<p>You can also define your own DecoratorMapper implementation which is basically a strategy that chooses which decorator to use for each request (it defaults to looking in a config file). This can be used to do more dynamic things such as different decorators based on locale, user, category, browser, whatever</p>
<p><strike><strong>The Cons:-</strong></strike></p>
<li> <strong>Inheritance:</strong> With Tiles, you can extend page definitions and override attributes. This feature seems to be completely lacking in SiteMesh. It would be nice to have something where you could specify the parent &#8211; for instance, to use the same  content</li>
<li><strong>Error page decoration:</strong> SiteMesh seems to be incapable of decorating error pages (i.e. 404) in Tomcat 5.0.x (even if I add <dispatcher>ERROR</dispatcher> to the filter-mapping). A workaround is to use wrap the error page with a
<page:applydecorator> tag. This works, but if you specify elements in , they will end up in the body of page, rather than in the decorator&#8217;s header</page:applydecorator></li>
<li><strong>Compile Errors:</strong> Compile errors can be difficult to debug specially when you nest decorators (sub decorators). Because you have to apply decorators from within error pages, you can end up w/ double branding, navigaiton, menus, etc.</li>
<p><em>Part of this content is inspired from other sources/blogs, I&#8217;m gonna keep this post &#8216;sticky&#8217; and keep updating it as and when I come across interesting points.</em></p>

<span class="slashdigglicious">
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fcore-java%2Fcompare-sitemesh-vs-tiles-an-overview%2F&amp;title=Compare+Sitemesh+Vs+Tiles%2C+an+overview" title="Slashdot It!"><img src="http://slashdot.org/favicon.ico" height="16" width="16" alt="[Slashdot]" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fcore-java%2Fcompare-sitemesh-vs-tiles-an-overview%2F&amp;title=Compare+Sitemesh+Vs+Tiles%2C+an+overview" title="Digg This Story"><img src="http://digg.com/favicon.ico" width="16" height="16" alt="[Digg]" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fcore-java%2Fcompare-sitemesh-vs-tiles-an-overview%2F&amp;title=Compare+Sitemesh+Vs+Tiles%2C+an+overview" title="Reddit"><img src="http://reddit.com/favicon.ico" width="16" height="16" alt="[Reddit]" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fcore-java%2Fcompare-sitemesh-vs-tiles-an-overview%2F&amp;title=Compare+Sitemesh+Vs+Tiles%2C+an+overview" title="Save to del.icio.us" onclick="window.open('http://del.icio.us/post?v=4&amp;noui&amp;jump=close&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fcore-java%2Fcompare-sitemesh-vs-tiles-an-overview%2F&amp;title=Compare+Sitemesh+Vs+Tiles%2C+an+overview', 'delicious', 'toolbar=no,width=700,height=400'); return false;"><img src="http://images.del.icio.us/static/img/delicious.small.gif" width="16" height="16" alt="[del.icio.us]" /></a>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fcore-java%2Fcompare-sitemesh-vs-tiles-an-overview%2F" title="Share on Facebook"><img src="http://www.facebook.com/favicon.ico" width="16" height="16" alt="[Facebook]" /></a>
<a href="http://technorati.com/faves?add=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fcore-java%2Fcompare-sitemesh-vs-tiles-an-overview%2F" title="Add to my Technorati Favorites"><img src="http://technorati.com/favicon.ico" width="16" height="16" alt="[Technorati]" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fcore-java%2Fcompare-sitemesh-vs-tiles-an-overview%2F&amp;title=Compare+Sitemesh+Vs+Tiles%2C+an+overview" title="Save to Google Bookmarks"><img src="http://www.google.com/favicon.ico" width="16" height="16" alt="[Google]" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fcore-java%2Fcompare-sitemesh-vs-tiles-an-overview%2F&amp;title=Compare+Sitemesh+Vs+Tiles%2C+an+overview" title="Stumble it!"><img src="http://www.stumbleupon.com/favicon.ico" width="16" height="16" alt="[StumbleUpon]" /></a>
</span>]]></content:encoded>
			<wfw:commentRss>http://www.reverttoconsole.com/blog/core-java/compare-sitemesh-vs-tiles-an-overview/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The Java PHP Connection</title>
		<link>http://www.reverttoconsole.com/blog/core-java/the-java-php-connection/</link>
		<comments>http://www.reverttoconsole.com/blog/core-java/the-java-php-connection/#comments</comments>
		<pubDate>Fri, 22 Jun 2007 13:00:30 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Core Java]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://reverttoconsole.com/archives/121</guid>
		<description><![CDATA[The JDJ* recently ran an article about Java-PHP Bridge projects &#8211; this is not using an HTTP server front end to route individual requests for PHP scripts or J2EE applications. The PHP or Java application can instead call the other without the HTTP server’s involvement. Here are the big three: PHP/Java Bridge The php/Java bridge [...]]]></description>
			<content:encoded><![CDATA[<p>The JDJ*  recently ran an article about Java-PHP Bridge projects &#8211; this is not using an HTTP server front end to route individual requests for PHP scripts or J2EE applications. The PHP or Java application can instead call the other without the HTTP server’s involvement. Here are the big three:</p>
<ul>
<li><a href="http://php-java-bridge.sourceforge.net/pjb/"><strong>PHP/Java Bridge</strong></a><br />
<blockquote><p>The php/Java bridge is an optimized, XML-based network protocol, which can be used to connect a native script engine, PHP, with a Java or ECMA 335 virtual machine. It is more than 50 times faster than local RPC via SOAP, requires less resources on the web-server side, and it is faster and more reliable than communication via the Java Native Interface. <a href="http://php-java-bridge.sourceforge.net/pjb/how_it_works.php">read more&#8230;</a></p></blockquote>
</li>
<li><a href="http://www.zend.com/products/zend_platform/features_comparison/java_bridge">Zend&#8217;s Java Bridge</a><br />
<blockquote><p>The Zend Platform Java Bridge is the leading performance and reliability solution for businesses that seek to utilize both PHP and Java/J2EE. Based on a unique design that allows for a single Java Virtual Machine (JVM) instantiation and direct calls from PHP, the Java Bridge delivers unprecedented performance and scalability that make true PHP and Java integration a reality.<img src="http://www.zend.com/var/corporate/storage/images/media/images/products/platform/javabridge_img/7910-1-eng-US/javabridge_img.gif" alt="Zend Java Bridge" /></p></blockquote>
</li>
<li><a href="http://www.alphaworks.ibm.com/tech/phpintwasce">AlphaWorks WAS Integration</a><br />
<blockquote><p>PHP Integration Kit for WebSphere® Application Server (WAS), Community Edition (CE), allows users to integrate PHP-based scripting into their Java™ 2 Enterprise Edition (J2EE) applications. Integrating these technologies gives programmers the advantages of both PHP and Java, providing greater flexibility in deploying dynamic applications, building Web front ends, and creating development projects.</p>
<p>The PHP Integration Kit provides a sample Web application that can contain Java resources (JSPs and servlets, as with any J2EE Web application) as well as PHP scripts. The sample application is preconfigured to forward each PHP request to a separate PHP run-time environment, which then executes the requested PHP script. Users can then manage the combined Java/PHP application as a single unit within WAS CE: Users can deploy and undeploy the application using the WAS CE administration console and can apply security constraints to both Java and PHP resources using the J2EE security model. </p></blockquote>
</li>
</ul>
<p>In my mind this makes a lot of sense. The Java web development experience is cumbersome, tedious, and extremely heavyweight.</p>
<p>*I&#8217;m not going to provide a link to the article because the JDJ site is too full of ads.</p>

<span class="slashdigglicious">
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fcore-java%2Fthe-java-php-connection%2F&amp;title=The+Java+PHP+Connection" title="Slashdot It!"><img src="http://slashdot.org/favicon.ico" height="16" width="16" alt="[Slashdot]" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fcore-java%2Fthe-java-php-connection%2F&amp;title=The+Java+PHP+Connection" title="Digg This Story"><img src="http://digg.com/favicon.ico" width="16" height="16" alt="[Digg]" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fcore-java%2Fthe-java-php-connection%2F&amp;title=The+Java+PHP+Connection" title="Reddit"><img src="http://reddit.com/favicon.ico" width="16" height="16" alt="[Reddit]" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fcore-java%2Fthe-java-php-connection%2F&amp;title=The+Java+PHP+Connection" title="Save to del.icio.us" onclick="window.open('http://del.icio.us/post?v=4&amp;noui&amp;jump=close&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fcore-java%2Fthe-java-php-connection%2F&amp;title=The+Java+PHP+Connection', 'delicious', 'toolbar=no,width=700,height=400'); return false;"><img src="http://images.del.icio.us/static/img/delicious.small.gif" width="16" height="16" alt="[del.icio.us]" /></a>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fcore-java%2Fthe-java-php-connection%2F" title="Share on Facebook"><img src="http://www.facebook.com/favicon.ico" width="16" height="16" alt="[Facebook]" /></a>
<a href="http://technorati.com/faves?add=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fcore-java%2Fthe-java-php-connection%2F" title="Add to my Technorati Favorites"><img src="http://technorati.com/favicon.ico" width="16" height="16" alt="[Technorati]" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fcore-java%2Fthe-java-php-connection%2F&amp;title=The+Java+PHP+Connection" title="Save to Google Bookmarks"><img src="http://www.google.com/favicon.ico" width="16" height="16" alt="[Google]" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fcore-java%2Fthe-java-php-connection%2F&amp;title=The+Java+PHP+Connection" title="Stumble it!"><img src="http://www.stumbleupon.com/favicon.ico" width="16" height="16" alt="[StumbleUpon]" /></a>
</span>]]></content:encoded>
			<wfw:commentRss>http://www.reverttoconsole.com/blog/core-java/the-java-php-connection/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Server-side image drawing and jpeg encoding with AWT</title>
		<link>http://www.reverttoconsole.com/blog/core-java/server-side-image-drawing-and-jpeg-encoding-with-awt/</link>
		<comments>http://www.reverttoconsole.com/blog/core-java/server-side-image-drawing-and-jpeg-encoding-with-awt/#comments</comments>
		<pubDate>Thu, 14 Jun 2007 15:34:50 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Core Java]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://reverttoconsole.com/archives/117</guid>
		<description><![CDATA[Recently I had an interesting problem to solve. A manufacturing client wanted to know if it was possible to dynamically draw images based on engineering and dimensional data provided by end-users, and show them on the Web. So, the first question I have to answer is. &#8220;Is this doable?&#8221; And my answer, as always, is [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I had an interesting problem to solve.  A manufacturing client wanted to know if it was possible to dynamically draw images based on engineering and dimensional data provided by end-users, and show them on the Web.<br />
<br/><br />
So, the first question I have to answer is.  &#8220;Is this doable?&#8221;  And my answer, as always, is &#8220;yes&#8221;.  But the real question is, &#8220;Is this doable with the amount of time and resources we have?&#8221;  That&#8217;s when I started exploring different possibilities.<br />
<br/><br />
The architecture both server and client-side is Java-based.  So that&#8217;s what I want to use for my solution.  I thought of using applets, but then it introduces issues and is dependent on the end-user&#8217;s JVM.  I just wanted to create an image on the server the same way as I would in an applet with AWT, and have it rendered as a jpeg or gif to the user.<br/></p>
<p>I found my solution with the help of <a href="http://developers.sun.com/solaris/tech_topics/java/articles/awt.html">this article.</a>  It&#8217;s indeed possible to draw images in the dark and render them as actual files later. I&#8217;m rambling again, so let&#8217;s get to it.<br />
<span id="more-105"></span><br />
This class is a sliced up version of the prototype servlet I made for the client.  All the meat is in this snippet.  Actually, there isn&#8217;t much more to it in the real thing.<br />
<br/><br/></p>
<pre>
package com.boohbah.web.servlet.demo;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class SizingDiagramServlet implements Servlet{
	/**
	 *
	 */
	//input properties
	private int disWidth;
	private int disHeight;
	private int ductWidth;
	private int ductHeight;

public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
		setDisHeight(Integer.parseInt(request.getParameter("disHeight")));
		setDisWidth(Integer.parseInt(request.getParameter("disWidth")));
		setDuctWidth(Integer.parseInt(request.getParameter("ductWidth")));
		setDuctHeight(Integer.parseInt(request.getParameter("ductHeight")));

		BufferedImage im = createImage();

		response.setContentType("image/jpeg");
		//encode the image we created with sun's jpeg codec
		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(response.getOutputStream());
		encoder.encode(im);
	}

	//using the properties provided by the user, we can create the image
	private BufferedImage createImage()
    {
	//blank.jpg is an actual file I created ahead of time and put into the top level of my application war
		Image image = Toolkit.getDefaultToolkit().getImage("blank.jpg");
		BufferedImage bufferedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT,BufferedImage.TYPE_INT_RGB);
		Graphics g = bufferedImage.createGraphics();

		//clear and set background
		g.clearRect(0, 0, IMG_WIDTH, IMG_HEIGHT);
		g.setColor(Color.WHITE);
		g.fillRect(0, 0, IMG_WIDTH, IMG_HEIGHT);

		//image drawing code takes place here
		//...
		//...
		//...
		//...
		//...

		//finalize drawing
		g.drawImage(image, 0, 0, null);
		g.dispose();

		return bufferedImage;
	}

	/*
		Code for
		property getters and setters would be here.

	*/

}
</pre>
<p><br/><br/><br />
Not too bad is it?<br />
<br/><br />
Here are some screen shots that show the resulting jpegs based on a user request.<br />
<br/><br/><br />
From:<br/></p>
<p>http://localhost:8080/diagram?disHeight=46&#038;disWidth=46&#038;ductWidth=48&#038;ductHeight=48</p>
<p><br/><img src="http://home.mchsi.com/~sconnelly0170/images/disp_fit.jpg" alt="Image1" /><br/><br/><br />
And another image where the user&#8217;s configuration (data entered) is apparently ill-advised.<br/><br/><br />
From: http://localhost:8080/diagram?disHeight=35&#038;disWidth=60&#038;ductWidth=50&#038;ductHeight=50<br />
<br/><img src="http://home.mchsi.com/~sconnelly0170/images/disp_big.jpg" alt="Image2" /><br/><br/><br/><br />
What&#8217;s the point of all this?  You can and you WILL avoid using Flash, Ajax widgets, and other fancy means of drawing dynamic and attractive graphics.  All chant &#8220;<strong>Server-Side AWT!</strong>&#8221;<br />
<br/><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.reverttoconsole.com/blog/core-java/server-side-image-drawing-and-jpeg-encoding-with-awt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Holy Grail of CSS Layouts</title>
		<link>http://www.reverttoconsole.com/blog/web/holy-grail-of-css-layouts/</link>
		<comments>http://www.reverttoconsole.com/blog/web/holy-grail-of-css-layouts/#comments</comments>
		<pubDate>Tue, 23 Jan 2007 15:04:56 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://reverttoconsole.com/archives/63</guid>
		<description><![CDATA[Jon Udell referenced this article yesterday in his blog, about the holy grail of the 3 column CSS layout. It&#8217;s amazing how illusive standards support is across browsers, despite the ubiquitous nature of the web today.]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.jonudell.net/2007/01/22/matthew-levines-holy-grail/">Jon Udell</a> referenced this article yesterday in his blog, about <a href="http://www.alistapart.com/articles/holygrail/">the <em>holy grail</em> of the 3 column CSS layout</a>.</p>
<p>It&#8217;s amazing how illusive standards support is across browsers, despite the ubiquitous nature of the web today.</p>

<span class="slashdigglicious">
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fweb%2Fholy-grail-of-css-layouts%2F&amp;title=Holy+Grail+of+CSS+Layouts" title="Slashdot It!"><img src="http://slashdot.org/favicon.ico" height="16" width="16" alt="[Slashdot]" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fweb%2Fholy-grail-of-css-layouts%2F&amp;title=Holy+Grail+of+CSS+Layouts" title="Digg This Story"><img src="http://digg.com/favicon.ico" width="16" height="16" alt="[Digg]" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fweb%2Fholy-grail-of-css-layouts%2F&amp;title=Holy+Grail+of+CSS+Layouts" title="Reddit"><img src="http://reddit.com/favicon.ico" width="16" height="16" alt="[Reddit]" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fweb%2Fholy-grail-of-css-layouts%2F&amp;title=Holy+Grail+of+CSS+Layouts" title="Save to del.icio.us" onclick="window.open('http://del.icio.us/post?v=4&amp;noui&amp;jump=close&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fweb%2Fholy-grail-of-css-layouts%2F&amp;title=Holy+Grail+of+CSS+Layouts', 'delicious', 'toolbar=no,width=700,height=400'); return false;"><img src="http://images.del.icio.us/static/img/delicious.small.gif" width="16" height="16" alt="[del.icio.us]" /></a>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fweb%2Fholy-grail-of-css-layouts%2F" title="Share on Facebook"><img src="http://www.facebook.com/favicon.ico" width="16" height="16" alt="[Facebook]" /></a>
<a href="http://technorati.com/faves?add=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fweb%2Fholy-grail-of-css-layouts%2F" title="Add to my Technorati Favorites"><img src="http://technorati.com/favicon.ico" width="16" height="16" alt="[Technorati]" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fweb%2Fholy-grail-of-css-layouts%2F&amp;title=Holy+Grail+of+CSS+Layouts" title="Save to Google Bookmarks"><img src="http://www.google.com/favicon.ico" width="16" height="16" alt="[Google]" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fweb%2Fholy-grail-of-css-layouts%2F&amp;title=Holy+Grail+of+CSS+Layouts" title="Stumble it!"><img src="http://www.stumbleupon.com/favicon.ico" width="16" height="16" alt="[StumbleUpon]" /></a>
</span>]]></content:encoded>
			<wfw:commentRss>http://www.reverttoconsole.com/blog/web/holy-grail-of-css-layouts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Regex Coach</title>
		<link>http://www.reverttoconsole.com/blog/web/the-regex-coach/</link>
		<comments>http://www.reverttoconsole.com/blog/web/the-regex-coach/#comments</comments>
		<pubDate>Tue, 12 Sep 2006 14:36:00 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://reverttoconsole.com/archives/27</guid>
		<description><![CDATA[Need help with regex? Get the Regex Coach !!! Just saved my #$%^&#38;&#8230;]]></description>
			<content:encoded><![CDATA[<p>Need help with regex?<br />
Get the <a href="http://www.weitz.de/regex-coach/">Regex Coach</a> !!!<br />
Just saved my #$%^&amp;&#8230;</p>

<span class="slashdigglicious">
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fweb%2Fthe-regex-coach%2F&amp;title=The+Regex+Coach" title="Slashdot It!"><img src="http://slashdot.org/favicon.ico" height="16" width="16" alt="[Slashdot]" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fweb%2Fthe-regex-coach%2F&amp;title=The+Regex+Coach" title="Digg This Story"><img src="http://digg.com/favicon.ico" width="16" height="16" alt="[Digg]" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fweb%2Fthe-regex-coach%2F&amp;title=The+Regex+Coach" title="Reddit"><img src="http://reddit.com/favicon.ico" width="16" height="16" alt="[Reddit]" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fweb%2Fthe-regex-coach%2F&amp;title=The+Regex+Coach" title="Save to del.icio.us" onclick="window.open('http://del.icio.us/post?v=4&amp;noui&amp;jump=close&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fweb%2Fthe-regex-coach%2F&amp;title=The+Regex+Coach', 'delicious', 'toolbar=no,width=700,height=400'); return false;"><img src="http://images.del.icio.us/static/img/delicious.small.gif" width="16" height="16" alt="[del.icio.us]" /></a>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fweb%2Fthe-regex-coach%2F" title="Share on Facebook"><img src="http://www.facebook.com/favicon.ico" width="16" height="16" alt="[Facebook]" /></a>
<a href="http://technorati.com/faves?add=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fweb%2Fthe-regex-coach%2F" title="Add to my Technorati Favorites"><img src="http://technorati.com/favicon.ico" width="16" height="16" alt="[Technorati]" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fweb%2Fthe-regex-coach%2F&amp;title=The+Regex+Coach" title="Save to Google Bookmarks"><img src="http://www.google.com/favicon.ico" width="16" height="16" alt="[Google]" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fweb%2Fthe-regex-coach%2F&amp;title=The+Regex+Coach" title="Stumble it!"><img src="http://www.stumbleupon.com/favicon.ico" width="16" height="16" alt="[StumbleUpon]" /></a>
</span>]]></content:encoded>
			<wfw:commentRss>http://www.reverttoconsole.com/blog/web/the-regex-coach/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creating HTML Change logs from Subversion</title>
		<link>http://www.reverttoconsole.com/blog/web/creating-html-change-logs/</link>
		<comments>http://www.reverttoconsole.com/blog/web/creating-html-change-logs/#comments</comments>
		<pubDate>Fri, 14 Jul 2006 11:27:00 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://reverttoconsole.com/archives/20</guid>
		<description><![CDATA[Change logs are useful for everyone, not just developers. The following script on this page can be used to transform a simple change log from Subversion into a nice html page that is pleasing to the eye. Subversion can output a change log in XML, which gives us easy access to manipulate its display. So, [...]]]></description>
			<content:encoded><![CDATA[<p>Change logs are useful for everyone, not just developers.  The following script on this page can be used to transform a simple change log from Subversion into a nice html page that is pleasing to the eye.</p>
<p>Subversion can output a change log in XML, which gives us easy access to manipulate its display.</p>
<p>So, this script will call the &#8220;svn log&#8221; command using the &#8220;&#8211;xml&#8221; parameter.  We can then transform this into nice, easy to read HTML by using XSL and CSS style sheets.</p>
<p>You will need to have Subversion and xsltproc installed in order to run this script.</p>
<p>Xsltproc can be found at <a href="http://xmlsoft.org/XSLT/downloads.html">http://xmlsoft.org/XSLT/downloads.html.</a></p>
<p>The stylesheets in this example can be found at <a href="http://subversion.tigris.org/tools_contrib.html">http://subversion.tigris.org/tools_contrib.html.</a></p>
<p>Note: You will want to download svn2html.xsl and svn2html.css for sure.</p>
<p>In this script $XSL_HOME is the directory where the stylesheets are stored.</p>
<p>#!/bin/bash<br />
#script to generate a nice html page from subversion change log using a stylesheet</p>
<p>USAGE=&#8217;USAGE: create_changelog [name] [svnurl] (svn log options)&#8217;</p>
<p>if [ -n "$2" ]<br />
then<br />
    svnurl=$2<br />
    if [ -n "$1" ]<br />
    then<br />
        outfile=$1<br />
        good=&#8217;good&#8217;<br />
    fi<br />
fi</p>
<p>if [ -n "$good" ]<br />
then</p>
<p>    outfile=$outfile.htm<br />
    template=$XSL_HOME/svn2html.xsl<br />
    tempfile=tempfile431651.xml<br />
    templateCSS=$XSL_HOME/svn2html.css<br />
    currdir=&#8221;$(pwd)&#8221;<br />
    newdir=$(basename $outfile .htm)<br />
    mkdir $newdir<br />
    cd $newdir</p>
<p>    #create log in XML<br />
    svn log &#8211;verbose &#8211;xml $3 $4 $5 $6 $7 $8 $9 $svnurl &gt; $tempfile</p>
<p>    #transform to html using stylesheet, using cygwin on windows<br />
    xsltproc $(cygpath -w $template) $tempfile &gt; $outfile</p>
<p>    #copy stylesheet to output location<br />
    cp $templateCSS .</p>
<p>    #destroy contents<br />
    rm -rf $tempfile</p>
<p>    #go back to first dir<br />
    cd &#8220;$currdir&#8221;</p>
<p>    echo New files created in $newdir.<br />
else<br />
    echo $USAGE<br />
fi</p>
<p>The user of this script will provide the Name of the log, the svn url, and additional svn log parameters as arguments.  Once it is run the HTML file will be created using the Name parameter and the CSS file needed to properly display that page will be copied to the same directory.</p>
<p>Everyone loves change logs, especially if they are easy to read.  <img src='http://www.reverttoconsole.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<span class="slashdigglicious">
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fweb%2Fcreating-html-change-logs%2F&amp;title=Creating+HTML+Change+logs+from+Subversion" title="Slashdot It!"><img src="http://slashdot.org/favicon.ico" height="16" width="16" alt="[Slashdot]" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fweb%2Fcreating-html-change-logs%2F&amp;title=Creating+HTML+Change+logs+from+Subversion" title="Digg This Story"><img src="http://digg.com/favicon.ico" width="16" height="16" alt="[Digg]" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fweb%2Fcreating-html-change-logs%2F&amp;title=Creating+HTML+Change+logs+from+Subversion" title="Reddit"><img src="http://reddit.com/favicon.ico" width="16" height="16" alt="[Reddit]" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fweb%2Fcreating-html-change-logs%2F&amp;title=Creating+HTML+Change+logs+from+Subversion" title="Save to del.icio.us" onclick="window.open('http://del.icio.us/post?v=4&amp;noui&amp;jump=close&amp;url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fweb%2Fcreating-html-change-logs%2F&amp;title=Creating+HTML+Change+logs+from+Subversion', 'delicious', 'toolbar=no,width=700,height=400'); return false;"><img src="http://images.del.icio.us/static/img/delicious.small.gif" width="16" height="16" alt="[del.icio.us]" /></a>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fweb%2Fcreating-html-change-logs%2F" title="Share on Facebook"><img src="http://www.facebook.com/favicon.ico" width="16" height="16" alt="[Facebook]" /></a>
<a href="http://technorati.com/faves?add=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fweb%2Fcreating-html-change-logs%2F" title="Add to my Technorati Favorites"><img src="http://technorati.com/favicon.ico" width="16" height="16" alt="[Technorati]" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fweb%2Fcreating-html-change-logs%2F&amp;title=Creating+HTML+Change+logs+from+Subversion" title="Save to Google Bookmarks"><img src="http://www.google.com/favicon.ico" width="16" height="16" alt="[Google]" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.reverttoconsole.com%2Fblog%2Fweb%2Fcreating-html-change-logs%2F&amp;title=Creating+HTML+Change+logs+from+Subversion" title="Stumble it!"><img src="http://www.stumbleupon.com/favicon.ico" width="16" height="16" alt="[StumbleUpon]" /></a>
</span>]]></content:encoded>
			<wfw:commentRss>http://www.reverttoconsole.com/blog/web/creating-html-change-logs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

