<?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>The Thinking Lemur &#187; Web 2.0</title>
	<atom:link href="http://thinkinglemur.com/index.php/category/thinking/web-20/feed/" rel="self" type="application/rss+xml" />
	<link>http://thinkinglemur.com</link>
	<description>from the mind of Donnie Bachan</description>
	<lastBuildDate>Fri, 06 Jan 2012 10:42:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Can Delicious be resurrected?</title>
		<link>http://thinkinglemur.com/index.php/2011/04/can-delicious-be-resurrected/</link>
		<comments>http://thinkinglemur.com/index.php/2011/04/can-delicious-be-resurrected/#comments</comments>
		<pubDate>Wed, 27 Apr 2011 23:47:12 +0000</pubDate>
		<dc:creator>Donnie Bachan</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false">http://thinkinglemur.com/?p=434</guid>
		<description><![CDATA[I was a big fan of Delicious because keeping track of all the sites that interest me is a hard task. The problem with this service though is that it is difficult to easily access the information unless you install a plugin on every browser that you use. This is even more of a problem [...]]]></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%2Fthinkinglemur.com%2Findex.php%2F2011%2F04%2Fcan-delicious-be-resurrected%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fthinkinglemur.com%2Findex.php%2F2011%2F04%2Fcan-delicious-be-resurrected%2F&amp;source=thinkinglemur&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>I was a big fan of Delicious because keeping track of all the sites that interest me is a hard task. The problem with this service though is that it is difficult to easily access the information unless you install a plugin on every browser that you use. This is even more of a problem when you have several machines both at home and at work. Of course, you can visit the site but the workflow is not ideal. The advent of tabs in browsers can allow you to open Delicious in one tab while working on other tabs, however, do you really want to have to keep that service open all the time? It just doesn't feel important enough.</p>
<p>My current solution to the bookmarking problem is to use Gmail. I email myself links then use labels to organise them. Again, not ideal, but it has two advantages over Delicious.</p>
<ol>
<li>I typically always have Gmail open in a tab during the day</li>
<li>Gmail is with me everywhere, including on my mobile devices</li>
</ol>
<p>I believe that Delicious can be resurrected if it can overcome these two main hurdles. Can the YouTube founders do this? Maybe, but it would be very difficult. The incarnation of the service will have to be much more compelling than it is currently. A utopian solution would be to get the main browser creators to include a reference to a universal bookmarking service that uses Twitter or Facebook logins for access. Hey, I never said I wasn't a dreamer!</p>
]]></content:encoded>
			<wfw:commentRss>http://thinkinglemur.com/index.php/2011/04/can-delicious-be-resurrected/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Memory leaks with Coldfusion 8</title>
		<link>http://thinkinglemur.com/index.php/2010/02/memory-leaks-with-coldfusion-8/</link>
		<comments>http://thinkinglemur.com/index.php/2010/02/memory-leaks-with-coldfusion-8/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 14:58:44 +0000</pubDate>
		<dc:creator>Donnie Bachan</dc:creator>
				<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[ColdFusion 8]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[jvm]]></category>
		<category><![CDATA[memory leaks]]></category>

		<guid isPermaLink="false">http://thinkinglemur.com/?p=368</guid>
		<description><![CDATA[For the past few weeks I've been incognito due to some memory leak issues we've been having with our new app. It is essentially a rewrite of our existing web application using Object Oriented techniques and embraces the Model-View-Controller paradigm. It really is a pretty little thing but unfortunately she crumbled under the weight of [...]]]></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%2Fthinkinglemur.com%2Findex.php%2F2010%2F02%2Fmemory-leaks-with-coldfusion-8%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fthinkinglemur.com%2Findex.php%2F2010%2F02%2Fmemory-leaks-with-coldfusion-8%2F&amp;source=thinkinglemur&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>For the past few weeks I've been incognito due to some memory leak issues we've been having with our new app. It is essentially a rewrite of our existing web application using Object Oriented techniques and embraces the Model-View-Controller paradigm. It really is a pretty little thing but unfortunately she crumbled under the weight of the world wide web. Anyone who has faced the memory leak problem will know that it is not an easy one to crack and it takes time to determine the exact issue. There are a lot of articles around that have excellent information which were all very helpful in my quest for a solution.</p>
<p>The system made a lot of use of the session and application scope for caching objects which was the first issue that we had to overcome. It seemed like a good idea, you've got loads of memory, you have a finite amount of objects that can be called for each session why not persist them. The problem is that ColdFusion 8 seems to have an issue with complex objects (i.e. CFCs) stored in the session and application scopes. The reason I say this is that we were seeing a very, very strange thing happening to the memory on our server. When load testing was run, the server was fine, the memory steadily increased until the initial sessions began expiring and then the average of memory usage plateaued, which is what you like to see. However, once the load test ended the memory steadily increased until it crashed the CF instance. Weird right? And so the search for a solution began. I came across a few helpful articles:</p>
<p><a href="http://www.ghidinelli.com/2009/07/16/finding-memory-leaks-coldfusion-jvm">http://www.ghidinelli.com/2009/07/16/finding-memory-leaks-coldfusion-jvm</a></p>
<p><a href="http://www.schierberl.com/cfblog/index.cfm/2006/10/12/ColdFusion_memoryLeak_profiler">http://www.schierberl.com/cfblog/index.cfm/2006/10/12/ColdFusion_memoryLeak_profiler</a></p>
<p><a href="http://www.alagad.com/blog/post.cfm/troubleshooting-coldfusion-performance-analysis-part-ii">http://www.alagad.com/blog/post.cfm/troubleshooting-coldfusion-performance-analysis-part-ii</a></p>
<p>These were tremendously helpful in assisting me in finding the solution. The last post from Alagad was the one that helped cure my issue in the end. You need to ensure that when making copies of persistent scoped variables that they are deep copied or used in a local scope within CFC functions. However, bear in mind that there are many causes for memory leaks and you should spend the time in figuring out the exact cause of your problem. I found the <a href="http://www.eclipse.org/mat/" target="_blank">MAT</a> tool supremely useful.</p>
<p>Here are some tips for curing memory issues:</p>
<ol>
<li>Install cumulative hotfix 4 for ColdFusion 8.0.1 (Get it <a href="http://kb2.adobe.com/cps/529/cpsid_52915.html" target="_blank">here</a>)</li>
<li>Update the JVM to the latest provided by Sun, in my case it was JDK 1.6.0_18 (Get it <a href="http://java.sun.com/javase/downloads/index.jsp" target="_self">here</a>)</li>
<li>Add the -XX:+<em>AggressiveHeap</em> option to the JVM configuration (Read about it <a href="http://www.petefreitag.com/item/139.cfm" target="_blank">here</a>)</li>
<li>Set your min and max heap to the same size to reduce the number of garbage collection calls</li>
<li>Run varscoper against your code and ensure all local variables are var scoped (Get it <a href="http://varscoper.riaforge.org/" target="_blank">here</a>)</li>
<li>Limit the use of variables scope within objects, use the THIS reference instead</li>
<li>Limit the number of complex objects (cfcs) being stored in SESSION and APPLICATION scopes</li>
<li>Clear the variables scope onRequestEnd (this doesn't really work when using Application.cfc though)</li>
<li>Run load tests! We used WCAT for Windows (Get it <a href="http://www.iis.net/downloads/default.aspx?tabid=34&amp;i=1466&amp;g=6" target="_blank">here</a>)</li>
<li>Turn off CF monitoring use FusionReactor (or something similar) (Get FusionReactor <a href="http://www.fusion-reactor.com/" target="_blank">here</a>)</li>
</ol>
<p>Hopefully these will help someone else going forward.</p>
<p>UPDATE 16/05/2010: Point #6 should be, ensure you scope your variables correctly. The THIS scope has its own set of limitations. Ensure that all variables (including loop indices) have the proper scope to avoid leakage.</p>
]]></content:encoded>
			<wfw:commentRss>http://thinkinglemur.com/index.php/2010/02/memory-leaks-with-coldfusion-8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The fear of Javascript Frameworks</title>
		<link>http://thinkinglemur.com/index.php/2009/02/the-fear-of-javascript-frameworks/</link>
		<comments>http://thinkinglemur.com/index.php/2009/02/the-fear-of-javascript-frameworks/#comments</comments>
		<pubDate>Mon, 02 Feb 2009 11:21:04 +0000</pubDate>
		<dc:creator>Donnie Bachan</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[frameworks]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[prototype]]></category>

		<guid isPermaLink="false">http://thinkinglemur.com/?p=72</guid>
		<description><![CDATA[I have always been one of those developers who like to "write my own stuff" because nothing produced by another person could ever be as good as mine! I'm sure the majority of developers out there feel the same way. But as they say with experience comes wisdom and I have come to realise that [...]]]></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%2Fthinkinglemur.com%2Findex.php%2F2009%2F02%2Fthe-fear-of-javascript-frameworks%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fthinkinglemur.com%2Findex.php%2F2009%2F02%2Fthe-fear-of-javascript-frameworks%2F&amp;source=thinkinglemur&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>I have always been one of those developers who like to "write my own stuff" because nothing produced by another person could ever be as good as mine! I'm sure the majority of developers out there feel the same way. But as they say with experience comes wisdom and I have come to realise that maybe the solution you are trying to solve has been solved by someone else and the cost of implementing your own solution is far greater than the cost of implementing something that has already been developed and in most cases battle tested. Now there are exceptions to this but I think that, and this is especially true for Javascript frameworks, you are better off using what's been built before and which has a proven track record.</p>
<p>I believe that using a Javascript framework is quite important in the current web development environment. These frameworks provide rich functions that allow developers to quickly and efficiently accomplish tasks that are quite difficult and/or tedious without them. The first time I looked at the source code for the Prototype JS library (<a href="http://prototypejs.org">http://prototypejs.org</a>) I fell in love. Sam Stephenson is a god and has produced the most beautiful javascript code ever! I know that what he has done in the framework simply brings together a lot of pieces that have been scattered about the development community, but that library is simply AWESOME. There are a lot of people out there who will say it is too fat and overkill for most things which is the reason frameworks such as jQuery (<a href="http://jQuery.com">http://jQuery.com</a>), mooTools (<a href="http://mootools.net">http://mootools.net</a>), dojo (<a href="http://dojotoolkit.org">http://dojotoolkit.org</a>), Ext (<a href="http://extjs.com">http://extjs.com</a>) and Adobe's Spry Framework (<a href="http://labs.adobe.com/technologies/spry/">http://labs.adobe.com/technologies/spry/</a>) have appeared. </p>
<p>I personally use Prototype and jQuery in most projects, I love both of them. Prototype has, in my opinion much more flexibility but jQuery is really excellent as well and has many, many super features. I think all developers should seriously lookat these frameworks if you haven't yet, even if it's just to look at the source code and learn some excellent tricks!</p>
]]></content:encoded>
			<wfw:commentRss>http://thinkinglemur.com/index.php/2009/02/the-fear-of-javascript-frameworks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Striped Backgrounds</title>
		<link>http://thinkinglemur.com/index.php/2007/04/striped-backgrounds/</link>
		<comments>http://thinkinglemur.com/index.php/2007/04/striped-backgrounds/#comments</comments>
		<pubDate>Mon, 09 Apr 2007 10:10:01 +0000</pubDate>
		<dc:creator>Donnie Bachan</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false">http://thinkinglemur.com/?p=32</guid>
		<description><![CDATA[I was digging around at alexa.com today and noticed that www.stripegenerator.com was getting a lot of traffic so I headed over there and made the background that I use on this site. I would like to see the preview change without having to click on it to refresh but all in all it is really [...]]]></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%2Fthinkinglemur.com%2Findex.php%2F2007%2F04%2Fstriped-backgrounds%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fthinkinglemur.com%2Findex.php%2F2007%2F04%2Fstriped-backgrounds%2F&amp;source=thinkinglemur&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>I was digging around at alexa.com today and noticed that <a href="http://www.stripegenerator.com">www.stripegenerator.com</a> was getting a lot of traffic so I headed over there and made the background that I use on this site. I would like to see the preview change without having to click on it to refresh but all in all it is really cool. Check it out.</p>
]]></content:encoded>
			<wfw:commentRss>http://thinkinglemur.com/index.php/2007/04/striped-backgrounds/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

