<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Mrinal Wadhwa</title>
	
	<link>http://weblog.mrinalwadhwa.com</link>
	<description>en route to a richer Internet</description>
	<lastBuildDate>Wed, 12 Oct 2011 09:30:19 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/mrinalwadhwa/ragstoriches" /><feedburner:info uri="mrinalwadhwa/ragstoriches" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>12.935042</geo:lat><geo:long>77.628740</geo:long><creativeCommons:license>http://creativecommons.org/licenses/by/2.5/</creativeCommons:license><image><link>http://creativecommons.org/licenses/by/2.5/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image><feedburner:emailServiceId>mrinalwadhwa/ragstoriches</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmrinalwadhwa%2Fragstoriches" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmrinalwadhwa%2Fragstoriches" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmrinalwadhwa%2Fragstoriches" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/mrinalwadhwa/ragstoriches" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmrinalwadhwa%2Fragstoriches" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fmrinalwadhwa%2Fragstoriches" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmrinalwadhwa%2Fragstoriches" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmrinalwadhwa%2Fragstoriches" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2Fmrinalwadhwa%2Fragstoriches" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://www.yourminis.com/subscribe.aspx?u=http%3A%2F%2Ffeeds.feedburner.com%2Fmrinalwadhwa%2Fragstoriches" src="http://www.yourminis.com/images/addtoyourminisbadge.gif">Subscribe with Yourminis.com</feedburner:feedFlare><item>
		<title>The Art of Software Maintenance</title>
		<link>http://feedproxy.google.com/~r/mrinalwadhwa/ragstoriches/~3/zskONC5cHQw/</link>
		<comments>http://weblog.mrinalwadhwa.com/2011/10/12/the-art-of-software-maintenance/#comments</comments>
		<pubDate>Wed, 12 Oct 2011 06:43:15 +0000</pubDate>
		<dc:creator>Mrinal Wadhwa</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[bug tracking]]></category>
		<category><![CDATA[builds]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[devops]]></category>
		<category><![CDATA[featuritis]]></category>
		<category><![CDATA[happy users]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[robert m. pirsig]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[software testing]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[zen and the art of motorcycle maintenance]]></category>

		<guid isPermaLink="false">http://weblog.mrinalwadhwa.com/?p=1486</guid>
		<description>&lt;p&gt;Yesterday, I gave a presentation to team of young and enthusiastic software developers on processes and practices that they must adopt as their team grows and matures.&lt;/p&gt;
&lt;p&gt;The presentation tried to use &lt;a href="http://en.wikipedia.org/wiki/Robert_M._Pirsig"&gt;Robert M. Pirsig&amp;#8217;s&lt;/a&gt; philosophical exploration of quality in his book &lt;a href="http://en.wikipedia.org/wiki/Zen_and_the_Art_of_Motorcycle_Maintenance"&gt;Zen and the Art of Motorcycle Maintenance&lt;/a&gt; as a basis to explore &amp;#8212; what is good quality software and things you should do as teams and individuals when trying to produce good quality software.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“What&amp;#8217;s new?” is an interesting and broadening eternal question, but one which, if pursued exclusively, results only in an endless parade of trivia and fashion, the silt of tomorrow.&lt;/p&gt;
&lt;p&gt;I would like, instead, to be concerned with the question &lt;strong&gt;“What is best?”&lt;/strong&gt; a question which cuts deeply rather than broadly, a question whose answers tend to move the silt downstream.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Robert M. Pirsig, Zen and the Art of Motorcycle Maintenance&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;We discussed how I agree with Andrew Hunt and David Thomas, that &lt;a href="http://www.artima.com/intv/dry.html"&gt;all programming is maintenance programming&lt;/a&gt; and other fundamental ideas that good software teams should be concerned with, like how to strike a balance between &lt;a href="http://headrush.typepad.com/creating_passionate_users/2005/06/featuritis_vs_t.html"&gt;Featuritis vs. the Happy User Peak&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;object id="__sse9652621" width="650" height="528"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=theartofsoftwaremaintenance-111011234724-phpapp02&amp;#038;rel=0&amp;#038;stripped_title=the-art-of-software-maintenance&amp;#038;userName=mrinalwadhwa" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse9652621" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=theartofsoftwaremaintenance-111011234724-phpapp02&amp;#038;rel=0&amp;#038;stripped_title=the-art-of-software-maintenance&amp;#038;userName=mrinalwadhwa" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="650" height="528"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;
&lt;p&gt;Other approaches, ideas, and practices that we discussed and those that I&amp;#8217;ve learned to embrace over the years are discussed in some of the following articles and books that I highly recommend to anyone who is involved with building and/or delivering software in any role.&lt;!--more--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Articles&lt;/strong&gt;&lt;br /&gt;
&lt;a href="http://www.artima.com/intv/dry.html"&gt;All Programming is Maintenance Programming&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.codinghorror.com/blog/2006/06/the-noble-art-of-maintenance-programming.html"&gt;The Noble Art of Maintenance Programming&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.joelonsoftware.com/articles/fog0000000043.html"&gt;12 Steps to Better Code&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.artima.com/intv/fixit.html"&gt;Don&amp;#8217;t Live with Broken Windows&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://martinfowler.com/bliki/TechnicalDebt.html"&gt;Technical Debt&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://forums.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx"&gt;Technical Debt&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.codinghorror.com/blog/2009/02/paying-down-your-technical-debt.html"&gt;Paying Down Your Technical Debt&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://headrush.typepad.com/creating_passionate_users/2005/06/featuritis_vs_t.html"&gt;Featuritis vs. the Happy User Peak&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.codinghorror.com/blog/2008/03/the-first-rule-of-programming-its-always-your-fault.html"&gt;The First Rule of Programming: It&amp;#8217;s Always Your Fault&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.joelonsoftware.com/articles/fog0000000029.html"&gt;Painless Bug Tracking&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.codinghorror.com/blog/2007/10/the-f5-key-is-not-a-build-process.html"&gt;The F5 Key Is Not a Build Process&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://zutubi.com/products/pulse/articles/buildenlightenment/"&gt;The Road To Build Enlightenment&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.joelonsoftware.com/articles/fog0000000023.html"&gt;Daily Builds Are Your Friend&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.codinghorror.com/blog/2006/10/the-build-server-your-projects-heart-monitor.html"&gt;The Build Server: Your Project&amp;#8217;s Heart Monitor&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.codinghorror.com/blog/2007/03/the-works-on-my-machine-certification-program.html"&gt;The “Works on My Machine” Syndrome&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.codinghorror.com/blog/2006/07/i-pity-the-fool-who-doesnt-write-unit-tests.html"&gt;I Pity The Fool Who Doesn&amp;#8217;t Write Unit Tests&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://blog.jtimothyking.com/2006/07/11/twelve-benefits-of-writing-unit-tests-first"&gt;Twelve Benefits of Writing Unit Tests First&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.codinghorror.com/blog/2006/12/code-tells-you-how-comments-tell-you-why.html"&gt;Code Tells You How, Comments Tell You Why&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.codinghorror.com/blog/2007/08/discipline-makes-strong-developers.html"&gt;Discipline Makes Strong Developers&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.joelonsoftware.com/articles/LeakyAbstractions.html"&gt;The Law of Leaky Abstractions&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://pragprog.com/the-pragmatic-programmer/extracts/coincidence"&gt;Programming by Coincidence&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.codinghorror.com/blog/2008/11/coding-its-just-writing.html"&gt;Coding: It&amp;#8217;s Just Writing&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Books&lt;/strong&gt;&lt;br /&gt;
&lt;a href="http://www.amazon.com/Pragmatic-Programmer-Journeyman-Master-ebook/dp/B000SEGEKI/"&gt;The Pragmatic Programer&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.amazon.com/Code-Complete-ebook/dp/B004OR1XGK/"&gt;Code Complete&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.amazon.com/Mythical-Man-Month-Engineering-Anniversary-ebook/dp/B000OZ0N6M/"&gt;The Mythical Man-Month: Essays on Software Engineering&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.amazon.com/Facts-Fallacies-Software-Engineering-ebook/dp/B001TKD4RG"&gt;Facts and Fallacies of Software Engineering&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.amazon.com/Peopleware-Productive-Projects-Teams-ebook/dp/B003I84OIU"&gt;Peopleware: Productive Projects and Teams&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.amazon.com/Software-Conflict-2-0-Engineering-ebook/dp/B002GYWP1K/"&gt;Software Conflict 2.0: The Art and Science of Software Engineering&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.amazon.com/Head-First-Software-Development-Pilone/dp/0596527357"&gt;Head First Software Development&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.amazon.com/Clean-Code-Handbook-Craftsmanship-ebook/dp/B001GSTOAM"&gt;Clean Code: A Handbook of Agile Software Craftsmanship&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.amazon.com/Design-Essays-Computer-Scientist-ebook/dp/B003DKG5H6"&gt;The Design of Design: Essays from a Computer Scientist&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.amazon.com/dp/0321146530"&gt;Test Driven Development: By Example&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you have other similar recommendations, please do share.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=zskONC5cHQw:Sl_B8X7pUwY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=zskONC5cHQw:Sl_B8X7pUwY:2mJPEYqXBVI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=2mJPEYqXBVI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=zskONC5cHQw:Sl_B8X7pUwY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mrinalwadhwa/ragstoriches/~4/zskONC5cHQw" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://weblog.mrinalwadhwa.com/2011/10/12/the-art-of-software-maintenance/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://weblog.mrinalwadhwa.com/2011/10/12/the-art-of-software-maintenance/</feedburner:origLink></item>
		<item>
		<title>Binary Programming in JavaScript</title>
		<link>http://feedproxy.google.com/~r/mrinalwadhwa/ragstoriches/~3/g1t7YHYhpTw/</link>
		<comments>http://weblog.mrinalwadhwa.com/2011/10/03/binary-programming-in-javascript/#comments</comments>
		<pubDate>Sun, 02 Oct 2011 23:26:16 +0000</pubDate>
		<dc:creator>Mrinal Wadhwa</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://weblog.mrinalwadhwa.com/?p=1483</guid>
		<description>&lt;p&gt;I presented at &lt;a href="http://jsfoo.hasgeek.com/"&gt;jsFoo&lt;/a&gt; this Saturday on &lt;a href="http://funnel.hasgeek.com/jsfoo/33-bits-bytes-and-blobs"&gt;working with binary data in JavaScript&lt;/a&gt;, here are the slides &amp;#8230;&lt;/p&gt;
&lt;p&gt;&lt;iframe src="http://www.slideshare.net/slideshow/embed_code/9513208" width="650" height="528" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;Thank you, to every one who came, I would love to know your feedback.&lt;!--more--&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=g1t7YHYhpTw:pgsYiDtKjp8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=g1t7YHYhpTw:pgsYiDtKjp8:2mJPEYqXBVI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=2mJPEYqXBVI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=g1t7YHYhpTw:pgsYiDtKjp8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mrinalwadhwa/ragstoriches/~4/g1t7YHYhpTw" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://weblog.mrinalwadhwa.com/2011/10/03/binary-programming-in-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://weblog.mrinalwadhwa.com/2011/10/03/binary-programming-in-javascript/</feedburner:origLink></item>
		<item>
		<title>Loop unwinding, for fast loops in AS3</title>
		<link>http://feedproxy.google.com/~r/mrinalwadhwa/ragstoriches/~3/ybutOFa5bEc/</link>
		<comments>http://weblog.mrinalwadhwa.com/2010/11/22/loop-unwinding-for-fast-loops-in-as3/#comments</comments>
		<pubDate>Mon, 22 Nov 2010 06:27:32 +0000</pubDate>
		<dc:creator>Mrinal Wadhwa</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[Duff's Device]]></category>
		<category><![CDATA[fast]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[loop unvinding]]></category>
		<category><![CDATA[perf]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://weblog.mrinalwadhwa.com/?p=1479</guid>
		<description>&lt;p&gt;I&amp;#8217;ve been working on optimizing some javascript code these days and I came across a technique for optimizing long loops called &lt;a href="http://en.wikipedia.org/wiki/Duff's_device"&gt;Duff&amp;#8217;s Device&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/Loop_unwinding"&gt;Loop Unwinding&lt;/a&gt; which seems pretty well known in the javascript world but I haven&amp;#8217;t seen anyone use it in actionscript code. &lt;/p&gt;
&lt;p&gt;The basic idea is that there is a small overhead associated with executing the loop body, so if we unfold the loop in a way that it does the work of 8 iterations in 1 iteration, we can save some time. My tests show that in long enough loops this technique can give us &lt;strong&gt;8x to 10x performance gain&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;Here are the results of my tests using &lt;a href="http://gskinner.com/blog/archives/2010/02/performancetest.html"&gt;Grant Skinner&amp;#8217;s performance test harness&lt;/a&gt; &amp;#8230;&lt;/p&gt;
&lt;p&gt;&lt;script src="https://gist.github.com/709580.js?file=Perf%20Test"&gt;&lt;/script&gt;&lt;/p&gt;
&lt;p&gt;Here are the actual test cases ..&lt;!--more--&gt; I borrowed the implementation from &lt;a href="http://blog.millermedeiros.com/"&gt;Miller Medeiros&amp;#8217;&lt;/a&gt; javascript &lt;a href="http://jsperf.com/duffs-device"&gt;test cases&lt;/a&gt; and Jeff Greenberg&amp;#8217;s &lt;a href="http://home.earthlink.net/~kendrasg/info/js_opt/jsOptMain.html"&gt;original javascript implementation&lt;/a&gt; &amp;#8230; &lt;/p&gt;
&lt;p&gt;&lt;script src="https://gist.github.com/709580.js?file=DuffsDevicePerfTest.as"&gt;&lt;/script&gt;  &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=ybutOFa5bEc:nA5NvihFInM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=ybutOFa5bEc:nA5NvihFInM:2mJPEYqXBVI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=2mJPEYqXBVI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=ybutOFa5bEc:nA5NvihFInM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mrinalwadhwa/ragstoriches/~4/ybutOFa5bEc" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://weblog.mrinalwadhwa.com/2010/11/22/loop-unwinding-for-fast-loops-in-as3/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://weblog.mrinalwadhwa.com/2010/11/22/loop-unwinding-for-fast-loops-in-as3/</feedburner:origLink></item>
		<item>
		<title>Data Binding with Signals</title>
		<link>http://feedproxy.google.com/~r/mrinalwadhwa/ragstoriches/~3/uEToiPaAjHE/</link>
		<comments>http://weblog.mrinalwadhwa.com/2010/05/29/data-binding-with-signals/#comments</comments>
		<pubDate>Sat, 29 May 2010 04:01:12 +0000</pubDate>
		<dc:creator>Mrinal Wadhwa</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[binding]]></category>
		<category><![CDATA[blu]]></category>
		<category><![CDATA[crayons]]></category>
		<category><![CDATA[data binding]]></category>
		<category><![CDATA[factors]]></category>
		<category><![CDATA[mrinal wadhwa]]></category>
		<category><![CDATA[signals]]></category>
		<category><![CDATA[signals and slots]]></category>
		<category><![CDATA[slots]]></category>

		<guid isPermaLink="false">http://weblog.mrinalwadhwa.com/?p=1449</guid>
		<description>&lt;p&gt;I haven&amp;#8217;t talked much about our startup project &lt;strong&gt;factors&lt;/strong&gt; on this blog yet, but you will hear more and more about it from me over the coming weeks. Today, we&amp;#8217;re &lt;a href="http://github.com/mrinalwadhwa/crayons.data.binding"&gt;open sourcing&lt;/a&gt; a very small but quite interesting part of the factors web client code. The client is built mostly in AS3 using an in house framework we call crayons. Crayons provides an application architecture as well as a library of user interface components along with a component architecture, you could think of it as a mixture of functionality provided by flex framework and cairngorm, but several times lighter since it only implements functionality we need for factors and doesn&amp;#8217;t try to be too generic.&lt;/p&gt;
&lt;p&gt;Among other things Crayons has a built in &lt;a href="http://github.com/mrinalwadhwa/crayons.data.binding"&gt;data binding framework&lt;/a&gt; which we&amp;#8217;re open sourcing today. Data binding in crayons in based on &lt;a href="http://en.wikipedia.org/wiki/Signals_and_slots"&gt;Signals&lt;/a&gt; where an object dispatches a specialized &lt;strong&gt;ChangeSignal&lt;/strong&gt; whenever a bindable property changes, for example the setter of a bindable property data in SomeModel object would look like this &amp;#8230;&lt;!--more--&gt;&lt;/p&gt;
&lt;p&gt;&lt;script src="http://gist.github.com/417951.js?file=gistfile1.as"&gt;&lt;/script&gt;&lt;/p&gt;
&lt;p&gt;When an object signals a change in a property it has to pass in the old value of the property and the new value of the property. Unlike Flex, there is no [Bindable] metadata tag, an object can make one of its properties bindable by dispatching a ChangeSignal whenever that property changes. The &lt;a href="http://github.com/mrinalwadhwa/crayons.data.binding/blob/master/src/crayons/signals/ChangeSignal.as"&gt;ChangeSignal implementation&lt;/a&gt; is inspired by &lt;a href="http://jacksondunstan.com/articles/585"&gt;Jackson Dunstan&amp;#8217;s TurboSignals&lt;/a&gt; instead of &lt;a href="http://github.com/robertpenner/as3-signals"&gt;Rob Penner&amp;#8217;s more flexible AS3Signals library&lt;/a&gt; because using a specialized signal made sense in this scenario .. just like flex, signaling a change in a property is something we do a lot in a crayons application, for example to signal change in model data or change in the property of a component, for data binding  etc. so taking advantage of &lt;a href="http://jacksondunstan.com/articles/585"&gt;the speed of a specialized signal&lt;/a&gt; seemed reasonable. Also this especially helps data binding, since a &lt;a href="http://github.com/mrinalwadhwa/crayons.data.binding/blob/master/src/crayons/data/binding/Binding.as"&gt;Binding&lt;/a&gt; is really an implmentation of a &lt;a href="http://github.com/mrinalwadhwa/crayons.data.binding/blob/master/src/crayons/signals/ChangeSlot.as"&gt;ChangeSlot&lt;/a&gt; and Jackson&amp;#8217;s &lt;a href="http://jacksondunstan.com/articles/585"&gt;already shown&lt;/a&gt; that such specialized slots are extremely fast. While in most cases its hard to justfy implementing a Slot interface just to add a listener and I would almost always go with adding a function listener, but in case of data binding since this is only used internally within the binding framework and the user of data binding is not bothered with it, implmentating a ChangeSlot was perfectly reasonable.&lt;/p&gt;
&lt;p&gt;Now to use crayons data binding you can use a &lt;a href="http://github.com/mrinalwadhwa/crayons.data.binding/blob/master/src/crayons/data/binding/Binder.as"&gt;Binder&lt;/a&gt; object to bind a source ChangeSignal to a target property as follows &amp;#8230;&lt;/p&gt;
&lt;p&gt;&lt;script src="http://gist.github.com/417981.js?file=Example.as"&gt;&lt;/script&gt;      &lt;/p&gt;
&lt;p&gt;The &lt;a href="http://github.com/mrinalwadhwa/crayons.data.binding/blob/master/src/crayons/data/binding/Binder.as"&gt;Binder&lt;/a&gt; class provides some other interesting apis to remove binding or to check if a binding exists. This &lt;a href="http://github.com/mrinalwadhwa/crayons.data.binding/tree/master/src/crayons/data/binding/"&gt;binding implementation&lt;/a&gt; is heavily inspired from &lt;a href="http://www.ericfeminella.com/blog/2010/03/22/as3-signals-simulated-data-binding/"&gt;Eric Feminella&amp;#8217;s implementation&lt;/a&gt; where he&amp;#8217;s used as3signals. I refactored it for use with ChangeSignal and ChangeSlot and changed some other APIs for our needs.&lt;/p&gt;
&lt;p&gt;That&amp;#8217;s about it, you can get the complete crayons binding framework source code &lt;a href="http://github.com/mrinalwadhwa/crayons.data.binding"&gt;here on Github&lt;/a&gt;, do let me know what you think, any feedback would be very welcome.&lt;/p&gt;
&lt;p&gt;Finally, I want to say thank you to Jackson Dunstan, Eric Feminella and Rob Penner who&amp;#8217;s great work and research helped me implement this. I&amp;#8217;ll buy you guys beer whenever we get a chance to meet &lt;img src='http://weblog.mrinalwadhwa.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /&gt; &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=uEToiPaAjHE:loeewAsZg8E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=uEToiPaAjHE:loeewAsZg8E:2mJPEYqXBVI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=2mJPEYqXBVI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=uEToiPaAjHE:loeewAsZg8E:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mrinalwadhwa/ragstoriches/~4/uEToiPaAjHE" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://weblog.mrinalwadhwa.com/2010/05/29/data-binding-with-signals/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://weblog.mrinalwadhwa.com/2010/05/29/data-binding-with-signals/</feedburner:origLink></item>
		<item>
		<title>Preloaders in AS3</title>
		<link>http://feedproxy.google.com/~r/mrinalwadhwa/ragstoriches/~3/AJUUkut76dk/</link>
		<comments>http://weblog.mrinalwadhwa.com/2010/04/02/preloaders-in-as3/#comments</comments>
		<pubDate>Fri, 02 Apr 2010 16:19:37 +0000</pubDate>
		<dc:creator>Mrinal Wadhwa</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[application loader]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[preloader]]></category>
		<category><![CDATA[pure as3]]></category>
		<category><![CDATA[systemmanager]]></category>

		<guid isPermaLink="false">http://weblog.mrinalwadhwa.com/?p=1425</guid>
		<description>&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Troy Gilbert suggested a much &lt;a href="http://troygilbert.com/2010/04/minimal-preloader-for-as3/"&gt;better solution&lt;/a&gt; for this in the comments below that uses -frame compiler option over the [Frame] metadata tag, I suggest you use his approach since it stops the compiler from bundling in Flex framework specific code like IFlexModuleFactory that you don&amp;#8217;t really need.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Troy further improved his class &lt;a href="http://troygilbert.com/2010/04/preloader-base-class/"&gt;here&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;***&lt;/p&gt;
&lt;p&gt;Today, I needed to create a preloader for a pure AS3 application compiled with mxmlc. I couldn&amp;#8217;t find much documentation on the topic but this &lt;a href="http://www.bit-101.com/blog/?p=946"&gt;post by Keith Peters&lt;/a&gt; describes the solution in good detail, except his post is some what old and the code there doesn&amp;#8217;t work with the latest compiler.. &lt;/p&gt;
&lt;p&gt;As Keith &lt;a href="http://www.bit-101.com/blog/?p=946"&gt;describes&lt;/a&gt;, the first thing you need to do to implement a preloader is move your application to the second frame of the movie, this is done by adding a &lt;strong&gt;[Frame]&lt;/strong&gt; metadata tag above your document class and providing it with a factory class that will initialize your application, in case of Flex this factory is &lt;strong&gt;mx.core.SystemManager&lt;/strong&gt; ..&lt;!--more--&gt; we will have to write our own.&lt;/p&gt;
&lt;p&gt;Your document class would now look something like this &amp;#8230;&lt;/p&gt;
&lt;p&gt;&lt;script src="http://gist.github.com/353181.js"&gt;&lt;/script&gt;&lt;/p&gt;
&lt;p&gt;Our ApplicationLoader factory class has to extend MovieClip (not Sprite) and has to implement the interface mx.core.IFlexModuleFactory (this is the main change since Keith&amp;#8217;s post). In the below code, I&amp;#8217;ve stubbed out functions from IFlexModuleFactory and you can leave the code as is for most applications, you will only need to change this if your application loads other SWF&amp;#8217;s at runtime or if you&amp;#8217;re building an AIR application. &lt;/p&gt;
&lt;p&gt;When we compile our Example application the compiler will generate a class (&lt;a href="http://weblog.mrinalwadhwa.com/2007/07/09/flex-tip-of-the-day-keep-generated-actionscript/"&gt;you can see it with -keep&lt;/a&gt;) that subclasses our ApplicationLoader factory and implements some additional functionality .. an instance of this sits in the first frame of our movie, loads the second frame that has our application and shows a preloader while the application loads &amp;#8230;&lt;/p&gt;
&lt;p&gt;&lt;script src="http://gist.github.com/353185.js"&gt;&lt;/script&gt;&lt;/p&gt;
&lt;p&gt;You may change the look of your preloader in the onEnterFrame method but since this first frame needs to load quickly keep it light and avoid using any classes that are not native to Flash Player.&lt;/p&gt;
&lt;p&gt;Finally thank&amp;#8217;s to Keith for his &lt;a href="http://www.bit-101.com/blog/?p=946"&gt;post that got me started&lt;/a&gt; and also for all the other cool stuff I&amp;#8217;ve learned from him over the years. &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=AJUUkut76dk:JTg6Tcl7d_Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=AJUUkut76dk:JTg6Tcl7d_Y:2mJPEYqXBVI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=2mJPEYqXBVI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=AJUUkut76dk:JTg6Tcl7d_Y:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mrinalwadhwa/ragstoriches/~4/AJUUkut76dk" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://weblog.mrinalwadhwa.com/2010/04/02/preloaders-in-as3/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://weblog.mrinalwadhwa.com/2010/04/02/preloaders-in-as3/</feedburner:origLink></item>
		<item>
		<title>SWF Machine: generating SWF binary from Erlang</title>
		<link>http://feedproxy.google.com/~r/mrinalwadhwa/ragstoriches/~3/0krc6tidH58/</link>
		<comments>http://weblog.mrinalwadhwa.com/2010/03/17/swfmachine/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 22:38:27 +0000</pubDate>
		<dc:creator>Mrinal Wadhwa</dc:creator>
				<category><![CDATA[Erlang]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[binary]]></category>
		<category><![CDATA[bit-syntax]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[instructions]]></category>
		<category><![CDATA[swf]]></category>
		<category><![CDATA[swf-format]]></category>
		<category><![CDATA[swfmachine]]></category>

		<guid isPermaLink="false">http://weblog.mrinalwadhwa.com/?p=1409</guid>
		<description>&lt;p&gt;SWF Machine is an Erlang program I&amp;#8217;ve been writing, to generate SWF files from Erlang. This program takes a custom instruction set as input and generates SWF binary instructions, which once saved in an SWF file can be  run in the Flash Player, here&amp;#8217;s a quick demo of SWFMachine in action &amp;#8230;&lt;/p&gt;
&lt;p&gt;&lt;embed src="http://blip.tv/play/AYHN80oA" type="application/x-shockwave-flash" width="640" height="510" allowscriptaccess="always" allowfullscreen="true"&gt;&lt;/embed&gt;&lt;/p&gt;
&lt;p&gt;A similar &lt;a href="http://propella.blogspot.com/2009/03/learning-erlang-and-adobe-flash-format.html"&gt;attempt by Takashi Yamamiya&lt;/a&gt; and the &lt;a href="http://code.google.com/p/eswf/"&gt;eswf&lt;/a&gt; library on google code  were quite helpful in getting me started, so thanks to them for sharing.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=0krc6tidH58:GTP2SJp_YUE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=0krc6tidH58:GTP2SJp_YUE:2mJPEYqXBVI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=2mJPEYqXBVI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=0krc6tidH58:GTP2SJp_YUE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mrinalwadhwa/ragstoriches/~4/0krc6tidH58" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://weblog.mrinalwadhwa.com/2010/03/17/swfmachine/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://weblog.mrinalwadhwa.com/2010/03/17/swfmachine/</feedburner:origLink></item>
		<item>
		<title>Magic in Graphs</title>
		<link>http://feedproxy.google.com/~r/mrinalwadhwa/ragstoriches/~3/wVti8Ap_4GU/</link>
		<comments>http://weblog.mrinalwadhwa.com/2010/02/28/magic-in-graphs/#comments</comments>
		<pubDate>Sun, 28 Feb 2010 09:36:07 +0000</pubDate>
		<dc:creator>Mrinal Wadhwa</dc:creator>
				<category><![CDATA[RIA]]></category>
		<category><![CDATA[Visualization]]></category>
		<category><![CDATA[1939]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[charts]]></category>
		<category><![CDATA[data visualization]]></category>
		<category><![CDATA[Graphic Presentation]]></category>
		<category><![CDATA[graphs]]></category>
		<category><![CDATA[Henry D. Hubbard]]></category>
		<category><![CDATA[Williard C. Brinton]]></category>

		<guid isPermaLink="false">http://weblog.mrinalwadhwa.com/?p=1384</guid>
		<description>&lt;p&gt;I found a &lt;a href="http://www.archive.org/stream/graphicpresentat00brinrich#page/n0/mode/2up"&gt;digital copy&lt;/a&gt; of Williard C. Brinton&amp;#8217;s 1939 book &lt;strong&gt;&amp;#8220;Graphic Presentation&amp;#8221;&lt;/strong&gt; via &lt;a href="http://twitter.com/mrinal/status/9717416581"&gt;twitter&lt;/a&gt; and as I read through the book, it amazed me how little our data visualization techniques have evolved since Brinton wrote the book 70+ years ago. What was even more fascinating was this quote from the preface to the book by Henry D. Hubbard who worked for the U.S, National Bureau of Standards &amp;#8230;   &lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&amp;#8220;There is a magic in graphs. The profile of a curve reveals in a flash a whole situation —the life history of an epidemic, a panic, or an era of prosperity. &lt;strong&gt;The curve informs the mind, awakens the imagination, convinces.&lt;/strong&gt;&amp;#8221;  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;#8211; Henry D. Hubbard&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;These words so aptly describe the power of visualizing data.&lt;/p&gt;
&lt;p&gt;Here are some interesting snapshots from &lt;a href="http://www.archive.org/stream/graphicpresentat00brinrich#page/n0/mode/2up"&gt;the book&lt;/a&gt;, which I highly recommend checking out &amp;#8230;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://weblog.mrinalwadhwa.com/wp-content/uploads/2010/02/graphic_presentation_4.png" alt="snapshot from Williard C. Brinton's 1939 book Graphic Presentation" width="100%" /&gt;&lt;br /&gt;
&lt;!--more--&gt;&lt;br /&gt;
&lt;img src="http://weblog.mrinalwadhwa.com/wp-content/uploads/2010/02/william_playfair.png" alt="William Playfair - first exponent for graphic charts" width="100%" /&gt;&lt;br /&gt;
&lt;img src="http://weblog.mrinalwadhwa.com/wp-content/uploads/2010/02/graphic_presentation_1.png" alt="snapshot from Williard C. Brinton's 1939 book Graphic Presentation" width="100%" /&gt;&lt;br /&gt;
&lt;img src="http://weblog.mrinalwadhwa.com/wp-content/uploads/2010/02/graphic_presentation_2.png" alt="snapshot from Williard C. Brinton's 1939 book Graphic Presentation" width="100%" /&gt;&lt;br /&gt;
&lt;img src="http://weblog.mrinalwadhwa.com/wp-content/uploads/2010/02/graphic_presentation_3.png" alt="snapshot from Williard C. Brinton's 1939 book Graphic Presentation" width="100%" /&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=wVti8Ap_4GU:91QrUqEu334:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=wVti8Ap_4GU:91QrUqEu334:2mJPEYqXBVI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=2mJPEYqXBVI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=wVti8Ap_4GU:91QrUqEu334:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mrinalwadhwa/ragstoriches/~4/wVti8Ap_4GU" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://weblog.mrinalwadhwa.com/2010/02/28/magic-in-graphs/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://weblog.mrinalwadhwa.com/2010/02/28/magic-in-graphs/</feedburner:origLink></item>
		<item>
		<title>Erlang Web Server Benchmarks</title>
		<link>http://feedproxy.google.com/~r/mrinalwadhwa/ragstoriches/~3/pEijnmNj-tI/</link>
		<comments>http://weblog.mrinalwadhwa.com/2010/02/12/erlang-web-server-benchmarks/#comments</comments>
		<pubDate>Fri, 12 Feb 2010 04:58:04 +0000</pubDate>
		<dc:creator>Mrinal Wadhwa</dc:creator>
				<category><![CDATA[Erlang]]></category>
		<category><![CDATA[application]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[webapp]]></category>

		<guid isPermaLink="false">http://weblog.mrinalwadhwa.com/?p=1362</guid>
		<description>&lt;p&gt;Over the last few weeks I&amp;#8217;ve been writing a server side web application framework for Erlang. Essentially, I looked at various available erlang frameworks like &lt;a href="http://bitbucket.org/justin/webmachine/wiki/Home"&gt;WebMachine&lt;/a&gt;, &lt;a href="http://nitrogenproject.com/"&gt;Nitrogen&lt;/a&gt;, &lt;a href="http://github.com/davebryson/beepbeep"&gt;BeepBeep&lt;/a&gt;, &lt;a href="http://yaws.hyber.org/"&gt;Yaws&lt;/a&gt;, &lt;a href="http://erlyweb.org/"&gt;ErlyWeb&lt;/a&gt; etc. and pulled out and assembled my own little framework with features I needed. I&amp;#8217;ve also been writing an &lt;a href="http://github.com/mrinalwadhwa/eamf"&gt;Erlang library for encoding/decoding AMF&lt;/a&gt; which will help me add some interesting Flash/Flex specific features to this framework.    &lt;/p&gt;
&lt;p&gt;Among other things this framework provides web server library specific request/response format abstraction similar to &lt;a href="http://github.com/rklophaus/SimpleBridge"&gt;SimpleBridge&lt;/a&gt;, A Django templates implementation using &lt;a href="http://code.google.com/p/erlydtl/"&gt;ErlyDTL&lt;/a&gt;, an MVC implementation inspired from ErlyWeb and a lot more. Even with all this functionality I&amp;#8217;m quite happy with the performance we&amp;#8217;re able to achieve, so I thought I&amp;#8217;d share some benchmarks with everyone.&lt;/p&gt;
&lt;p&gt;Since the framework completely abstracts out the web server library used, I was able to try out various web options, but I think we&amp;#8217;ll stick with &lt;a href="http://code.google.com/p/misultin/"&gt;Misultin&lt;/a&gt; for our production enviornment since it seems to perform significantly better than other implementations. Here are the results of running &lt;a href="http://www.xenoclast.org/autobench/"&gt;AutoBench&lt;/a&gt; on our framework powered by Misultin. &lt;/p&gt;
&lt;p&gt;The server was running on an m1.large amazon instance running ubuntu and the tests was run from an m1.small amazon instance.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;br /&gt;
$ autobench --single_host --host1 xyz.com  --quiet --low_rate 20 --high_rate 200 --rate_step 20 --num_call 100 -num_conn 5000 --timeout 5 --file results.tsv&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://weblog.mrinalwadhwa.com/wp-content/uploads/2010/02/Picture-2.png" alt="Misultin-Autobench" title="Misultin-Autobench" width="640" height="440" class="alignnone size-full wp-image-1363" /&gt;&lt;br /&gt;
&lt;!--more--&gt;&lt;br /&gt;
Here are some more tests using a different tool &lt;a href="http://httpd.apache.org/docs/2.0/programs/ab.html"&gt;Apache Bench&lt;/a&gt;&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
$ ab -k -n 500000 -c 1000 http://xyz.com/&lt;/p&gt;
&lt;p&gt;Document Path:          /&lt;br /&gt;
Document Length:        27 bytes&lt;/p&gt;
&lt;p&gt;Concurrency Level:      1000&lt;br /&gt;
Time taken for tests:   39.937 seconds&lt;br /&gt;
Complete requests:      500000&lt;br /&gt;
Failed requests:        0&lt;br /&gt;
Write errors:           0&lt;br /&gt;
Keep-Alive requests:    500000&lt;br /&gt;
Total transferred:      57510350 bytes&lt;br /&gt;
HTML transferred:       13502430 bytes&lt;br /&gt;
Requests per second:   &lt;strong&gt; 12519.82 [#/sec] (mean)&lt;/strong&gt;&lt;br /&gt;
Time per request:       &lt;strong&gt;79.873 [ms] (mean)&lt;/strong&gt;&lt;br /&gt;
Time per request:       0.080 [ms] (mean, across all concurrent requests)&lt;br /&gt;
Transfer rate:          1406.29 [Kbytes/sec] received&lt;/p&gt;
&lt;p&gt;Connection Times (ms)&lt;br /&gt;
              min  mean[+/-sd] median   max&lt;br /&gt;
Connect:        0    2  71.8      0    3005&lt;br /&gt;
Processing:     1   78  25.9     77     732&lt;br /&gt;
Waiting:        1   78  25.9     77     732&lt;br /&gt;
Total:          1   80  79.3     77    3427&lt;/p&gt;
&lt;p&gt;Percentage of the requests served within a certain time (ms)&lt;br /&gt;
  50%     77&lt;br /&gt;
  66%     87&lt;br /&gt;
  75%     94&lt;br /&gt;
  80%     98&lt;br /&gt;
  90%    110&lt;br /&gt;
  95%    119&lt;br /&gt;
  98%    132&lt;br /&gt;
  99%    144&lt;br /&gt;
 100%   3427 (longest request)&lt;/p&gt;
&lt;p&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Running the ab test without the keep alive (-k) option, causes the request rate to fall drastically to around the 3600 r/sec level but looking at the &lt;a href="http://www.tornadoweb.org/documentation#performance"&gt;Tornado performance tests here&lt;/a&gt;, 3600 seems reasonably good. I haven&amp;#8217;t tried adding &lt;a href="http://nginx.org/"&gt;nginx&lt;/a&gt; similar to that &lt;a href="http://www.tornadoweb.org/documentation#performance"&gt;Tornado setup&lt;/a&gt;, not sure if that would help.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=pEijnmNj-tI:-FIIjhQltIE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=pEijnmNj-tI:-FIIjhQltIE:2mJPEYqXBVI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=2mJPEYqXBVI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=pEijnmNj-tI:-FIIjhQltIE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mrinalwadhwa/ragstoriches/~4/pEijnmNj-tI" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://weblog.mrinalwadhwa.com/2010/02/12/erlang-web-server-benchmarks/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://weblog.mrinalwadhwa.com/2010/02/12/erlang-web-server-benchmarks/</feedburner:origLink></item>
		<item>
		<title>An Introduction to Rich Internet Applications</title>
		<link>http://feedproxy.google.com/~r/mrinalwadhwa/ragstoriches/~3/-o6JRzA8YI0/</link>
		<comments>http://weblog.mrinalwadhwa.com/2010/01/24/an-introduction-to-rich-internet-applications/#comments</comments>
		<pubDate>Sat, 23 Jan 2010 20:48:19 +0000</pubDate>
		<dc:creator>Mrinal Wadhwa</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[acm]]></category>
		<category><![CDATA[compute]]></category>
		<category><![CDATA[compute2010]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[flash player]]></category>
		<category><![CDATA[rich internet applications]]></category>

		<guid isPermaLink="false">http://weblog.mrinalwadhwa.com/?p=1334</guid>
		<description>&lt;p&gt;I had the opportunity to present a 4.5 hr lecture on &lt;strong&gt;Building Rich Internet Applications&lt;/strong&gt; at &lt;a href="http://compute.acmbangalore.org/"&gt;ACM&amp;#8217;s Compute 2010&lt;/a&gt; today. We started out by defining &lt;a href="http://weblog.mrinalwadhwa.com/2008/10/24/what-is-an-ria/"&gt;what an RIA is&lt;/a&gt; and exploring the various RIA platforms available, we then further explored the Flash Platform in more detail, wrote some &lt;a href="http://github.com/mrinalwadhwa/flash-player-internals"&gt;experimental code&lt;/a&gt; to understand the internals of Flash Player, looked at Flex 4 and its various new features and also spent some time understanding the &lt;a href="http://weblog.mrinalwadhwa.com/2009/12/01/custom-components-in-flex-4/"&gt;Flex Component Lifecycle&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s the slide deck from beginning of the lecture which tries to define what an RIA is and explores the architecture a typical RIA platform &amp;#8230;&lt;/p&gt;
&lt;div style="width:640px;text-align:left" id="__ss_2978421"&gt;&lt;object style="margin:0px" width="640" height="535"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=anintroductiontorichinternetapllications-100123132503-phpapp01&amp;#038;rel=0&amp;#038;stripped_title=an-introduction-to-rich-internet-apllications" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=anintroductiontorichinternetapllications-100123132503-phpapp01&amp;#038;rel=0&amp;#038;stripped_title=an-introduction-to-rich-internet-apllications" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="535"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=-o6JRzA8YI0:fRNzduIlrz4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=-o6JRzA8YI0:fRNzduIlrz4:2mJPEYqXBVI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=2mJPEYqXBVI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=-o6JRzA8YI0:fRNzduIlrz4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mrinalwadhwa/ragstoriches/~4/-o6JRzA8YI0" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://weblog.mrinalwadhwa.com/2010/01/24/an-introduction-to-rich-internet-applications/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://weblog.mrinalwadhwa.com/2010/01/24/an-introduction-to-rich-internet-applications/</feedburner:origLink></item>
		<item>
		<title>Going Commando in Flash Builder</title>
		<link>http://feedproxy.google.com/~r/mrinalwadhwa/ragstoriches/~3/ouxALJ1cn0U/</link>
		<comments>http://weblog.mrinalwadhwa.com/2009/12/03/going-commando-in-flash-builder/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 01:49:35 +0000</pubDate>
		<dc:creator>Mrinal Wadhwa</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[cfeclipse]]></category>
		<category><![CDATA[commando]]></category>
		<category><![CDATA[flash builder]]></category>
		<category><![CDATA[flex builder]]></category>
		<category><![CDATA[flexbuilder]]></category>
		<category><![CDATA[keyboard]]></category>
		<category><![CDATA[mouse]]></category>
		<category><![CDATA[shortcuts]]></category>
		<category><![CDATA[snippets]]></category>
		<category><![CDATA[sniptreeview]]></category>
		<category><![CDATA[textmate]]></category>

		<guid isPermaLink="false">http://weblog.mrinalwadhwa.com/?p=1286</guid>
		<description>&lt;p&gt;Along with the &lt;a href="http://weblog.mrinalwadhwa.com/2009/12/01/custom-components-in-flex-4/"&gt;Custom Components in Flex 4&lt;/a&gt; presentation I shared yesterday, I also gave a 15 minute lightening talk at &lt;a href="endtoend.in/apps/forms/adobe/DevSummitNovDec09/home.html"&gt;Adobe DevSummit&lt;/a&gt; on &lt;strong&gt;Keyboard Productivity in Flash Builder&lt;/strong&gt;, this was just a quick show and tell where I walked people through various ways of what &lt;a href="http://www.codinghorror.com/"&gt;Jeff Atwood&lt;/a&gt; calls &lt;a href="http://www.codinghorror.com/blog/archives/000825.html"&gt;Going Commando&lt;/a&gt; &amp;#8230;&lt;!--more--&gt;&lt;/p&gt;
&lt;p&gt;
&lt;h4&gt;Shortcuts&lt;/h4&gt;
&lt;p&gt;Here are some Flash Builder Keyboard shortcuts I use very frequently, if you have suggestions on others that are especially handy, please let me know &amp;#8230;  &lt;/p&gt;
&lt;table border="0" width="100%"&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CMD + 3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;- &lt;a href="http://en.wikipedia.org/wiki/Swiss_Army_knife"&gt;the swiss knife&lt;/a&gt; of a commando, jump to anywhere inside eclipse&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CMD + SHIFT + T&lt;/strong&gt; &lt;/td&gt;
&lt;td&gt;- find type&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CMD + SHIFT + R&lt;/strong&gt; &lt;/td&gt;
&lt;td&gt;- find resource&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CMD + O&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;- find/jump within class&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CMD + E&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;- switch editors (CMD 3 also works for this)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CMD + D&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;- delete line which has cursor, without having to select&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ALT + Up/Down Arrows&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;- Move Line/Selection Up/Down&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ALT + CMD + Up/Down Arrows&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;- Copy Line/Selection Up/Down&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CMD + W&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;- Close tab&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;* CMD on OSX = CTRL on Windows&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;
&lt;h4&gt;Customize&lt;/h4&gt;
&lt;p&gt;If you press CMD+3 and type &amp;#8220;keys&amp;#8221;, you&amp;#8217;ll see the keyboard customization preferences panel for Flash Builder, I recommend spending some time customizing Builder for your own needs, for example I use CMD+1 and CMD+2 to switch between Develop/Debug perspectives. I barely use the NumPad on my keyboard so I&amp;#8217;ve customized it to be all keyboard shortcuts, pressing CMD+0 inserts snippets &lt;/p&gt;
&lt;p&gt;
&lt;h4&gt;Snippets&lt;/h4&gt;
&lt;p&gt;Having a good snippets plugin can greatly improve a developer&amp;#8217;s productivity, I love how Snippets work in &lt;a href="http://macromates.com/"&gt;TextMate&lt;/a&gt;, I&amp;#8217;m still searching for a good solution for this in Flash Builder, till now I&amp;#8217;ve been using &lt;a href="http://www.andymcintosh.com/?p=116"&gt;CFEclipse&amp;#8217;s SnipTreeView&lt;/a&gt; but the problem is it only works with AS3 code and can&amp;#8217;t handle MXML. I was so desperate one day that I figured out that it fails because  the CFEclipse &lt;a href="http://trac.cfeclipse.org/browser/org.cfeclipse.cfml/trunk/src/org/cfeclipse/cfml/editors/actions/InsertSnippetAction.java"&gt;InsertSnippetAction class on Line No 71&lt;/a&gt; assumes that the editor is an ITextEditor, while this is true for most Eclipse editors, the MXML editor is actually made of 2 editors a Design Editor and an ITextEditor, so the type cast on Line 71 fails &amp;#8230; I never got to building CFEclipse on my own though. But, it looks like &lt;a href="http://theflashblog.com/"&gt;Lee Brimelow&lt;/a&gt; did, he has released &lt;a href="http://theflashblog.com/?p=1494"&gt;a fix which makes SnipTreeView work&lt;/a&gt; with MXML editor, unfortunately though Lee&amp;#8217;s fix doesn&amp;#8217;t work for me because of a Java version issue on OSX Leopard.        &lt;/p&gt;
&lt;p&gt;Another handy Mac only tool is &lt;a href="http://www.smileonmymac.com/TextExpander/"&gt;TextExpander&lt;/a&gt;. It sometimes breaks your formatting in eclipse, but that has gotten better with Flash Builders new auto formatting improvements.
&lt;/p&gt;
&lt;p&gt;
&lt;h4&gt;Multi Clipboard&lt;/h4&gt;
&lt;p&gt;A multi-clipboard tool is another must have for all developers, I use &lt;a href="http://jumpcut.sourceforge.net/"&gt;Jumpcut&lt;/a&gt; on OSX and it is a big big productivity boost to not have switch between files and applications when copying and pasting. I don&amp;#8217;t know any good equivalent for Windows, so if you know of one, please let me know. &lt;/p&gt;
&lt;p&gt;Finally, I have to thank &lt;a href="http://www.riageeks.com/"&gt;Chetan Sachdev&lt;/a&gt; because he got me hooked to optimizing my workflow using the keyboard while we were working together on a project earlier this year.
&lt;/p&gt;
&lt;p&gt;I would love to know if you have any other handy tips on Going Commando. &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=ouxALJ1cn0U:Ww3KFRF5hsU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=ouxALJ1cn0U:Ww3KFRF5hsU:2mJPEYqXBVI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=2mJPEYqXBVI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=ouxALJ1cn0U:Ww3KFRF5hsU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mrinalwadhwa/ragstoriches/~4/ouxALJ1cn0U" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://weblog.mrinalwadhwa.com/2009/12/03/going-commando-in-flash-builder/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://weblog.mrinalwadhwa.com/2009/12/03/going-commando-in-flash-builder/</feedburner:origLink></item>
		<item>
		<title>Custom Components in Flex 4</title>
		<link>http://feedproxy.google.com/~r/mrinalwadhwa/ragstoriches/~3/KOxedAWI_KY/</link>
		<comments>http://weblog.mrinalwadhwa.com/2009/12/01/custom-components-in-flex-4/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 11:21:21 +0000</pubDate>
		<dc:creator>Mrinal Wadhwa</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[components]]></category>
		<category><![CDATA[custom components]]></category>
		<category><![CDATA[flex4]]></category>
		<category><![CDATA[halo]]></category>
		<category><![CDATA[spark]]></category>

		<guid isPermaLink="false">http://weblog.mrinalwadhwa.com/?p=1252</guid>
		<description>&lt;p&gt;I gave a presentation on &lt;strong&gt;Custom Components in Flex 4&lt;/strong&gt; at &lt;a href="http://endtoend.in/apps/forms/adobe/DevSummitNovDec09/home.html"&gt;Adobe Devsummit&lt;/a&gt; last week in Chennai and today in Hyderabad, here&amp;#8217;s the slidedeck where we create an &lt;a href="http://en.wikipedia.org/wiki/Imperial_stormtrooper"&gt;Imperial StormTrooper&lt;/a&gt; component&lt;/p&gt;
&lt;div style="width:640px;text-align:left" id="__ss_2622384"&gt;&lt;object style="margin:0px" width="640" height="535"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=customcomponentsinflex4-091201050800-phpapp02&amp;#038;stripped_title=custom-components-in-flex-4" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=customcomponentsinflex4-091201050800-phpapp02&amp;#038;stripped_title=custom-components-in-flex-4" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="535"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=KOxedAWI_KY:uDpcNnFnCl8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=KOxedAWI_KY:uDpcNnFnCl8:2mJPEYqXBVI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=2mJPEYqXBVI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=KOxedAWI_KY:uDpcNnFnCl8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mrinalwadhwa/ragstoriches/~4/KOxedAWI_KY" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://weblog.mrinalwadhwa.com/2009/12/01/custom-components-in-flex-4/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		<feedburner:origLink>http://weblog.mrinalwadhwa.com/2009/12/01/custom-components-in-flex-4/</feedburner:origLink></item>
		<item>
		<title>Flash, Erlang and Realtime Collaborative Interfaces</title>
		<link>http://feedproxy.google.com/~r/mrinalwadhwa/ragstoriches/~3/xWliq2QoYt8/</link>
		<comments>http://weblog.mrinalwadhwa.com/2009/11/28/flash-erlang-and-realtime-collaborative-interfaces/#comments</comments>
		<pubDate>Sat, 28 Nov 2009 02:49:20 +0000</pubDate>
		<dc:creator>Mrinal Wadhwa</dc:creator>
				<category><![CDATA[Erlang]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[amf]]></category>
		<category><![CDATA[bangalore]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[flash player]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[sapteched09]]></category>
		<category><![CDATA[teched]]></category>

		<guid isPermaLink="false">http://weblog.mrinalwadhwa.com/?p=1215</guid>
		<description>&lt;p&gt;I&amp;#8217;ve been learning &lt;a href="http://www.erlang.org/"&gt;Erlang&lt;/a&gt; for the past few weeks and loving the simplicity and beauty of the language. As part of &lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/16881"&gt;a discussion at SAP TechEd&lt;/a&gt;, last week, I ended up creating a simple, rather rudimentary prototype of a realtime messaging server that enables collaborative user interfaces where multiple users can simultaneously work with the same interface &amp;#8230; &lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s a video of the code in action &amp;#8230; &lt;/p&gt;
&lt;p&gt;&lt;embed src="http://blip.tv/play/AYGysw4C" type="application/x-shockwave-flash" width="650" height="396" allowscriptaccess="always" allowfullscreen="true"&gt;&lt;/embed&gt; &lt;/p&gt;
&lt;p&gt;As you watch the above video, note as I drag a rectangle in any one Flash application, its sends AMF encoded binary messages to the server and the server multicasts these messages to other connected clients and those clients update in almost realtime. While in the example above all the application instances are running on the same system, they could just as easily be running on different systems and still communicate via the server.&lt;/p&gt;
&lt;p&gt;Here the code for the Erlang server &amp;#8230;&lt;/p&gt;
&lt;pre&gt;
&lt;span style="color:#90a729"&gt;0001 &lt;/span&gt;&lt;span style="color:#0000de"&gt;-&lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;module&lt;/span&gt;&lt;span style="color:#0000de"&gt;(&lt;/span&gt;server&lt;span style="color:#0000de"&gt;)&lt;/span&gt;.
&lt;span style="color:#90a729"&gt;0002 &lt;/span&gt;&lt;span style="color:#0000de"&gt;-&lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;export&lt;/span&gt;&lt;span style="color:#0000de"&gt;([&lt;/span&gt;start&lt;span style="color:#0000de"&gt;/&lt;/span&gt;&lt;span style="color:#0da344"&gt;1&lt;/span&gt;&lt;span style="color:#0000de"&gt;,&lt;/span&gt;stop&lt;span style="color:#0000de"&gt;/&lt;/span&gt;&lt;span style="color:#0da344"&gt;0&lt;/span&gt;&lt;span style="color:#0000de"&gt;])&lt;/span&gt;.
&lt;span style="color:#90a729"&gt;0003 &lt;/span&gt;
&lt;span style="color:#90a729"&gt;0004 &lt;/span&gt;&lt;span style="color:#0000de"&gt;-&lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;define&lt;/span&gt;&lt;span style="color:#0000de"&gt;(&lt;/span&gt;TCP_OPTIONS&lt;span style="color:#0000de"&gt;,[&lt;/span&gt;&lt;span style="color:#c42638; font-weight:bold"&gt;binary&lt;/span&gt;&lt;span style="color:#0000de"&gt;,&lt;/span&gt;
&lt;span style="color:#90a729"&gt;0005 &lt;/span&gt;                     &lt;span style="color:#0000de"&gt;{&lt;/span&gt;packet&lt;span style="color:#0000de"&gt;,&lt;/span&gt; &lt;span style="color:#0da344"&gt;0&lt;/span&gt;&lt;span style="color:#0000de"&gt;},&lt;/span&gt;
&lt;span style="color:#90a729"&gt;0006 &lt;/span&gt;                     &lt;span style="color:#0000de"&gt;{&lt;/span&gt;active&lt;span style="color:#0000de"&gt;,&lt;/span&gt; false&lt;span style="color:#0000de"&gt;},&lt;/span&gt;
&lt;span style="color:#90a729"&gt;0007 &lt;/span&gt;                     &lt;span style="color:#0000de"&gt;{&lt;/span&gt;reuseaddr&lt;span style="color:#0000de"&gt;,&lt;/span&gt; true&lt;span style="color:#0000de"&gt;}])&lt;/span&gt;.
&lt;span style="color:#90a729"&gt;0008 &lt;/span&gt;
&lt;span style="color:#90a729"&gt;0009 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;start&lt;/span&gt;&lt;span style="color:#0000de"&gt;(&lt;/span&gt;Port&lt;span style="color:#0000de"&gt;) -&amp;gt;&lt;/span&gt;
&lt;span style="color:#90a729"&gt;0010 &lt;/span&gt;	 Pid &lt;span style="color:#0000de"&gt;=&lt;/span&gt; &lt;span style="color:#c42638; font-weight:bold"&gt;spawn&lt;/span&gt;&lt;span style="color:#0000de"&gt;(&lt;/span&gt;&lt;span style="color:#0a7f6d; font-weight:bold"&gt;fun&lt;/span&gt;&lt;span style="color:#0000de"&gt;() -&amp;gt;&lt;/span&gt; &lt;span style="color:#000000; font-weight:bold"&gt;manage&lt;/span&gt;&lt;span style="color:#0000de"&gt;([])&lt;/span&gt; &lt;span style="color:#0a7f6d; font-weight:bold"&gt;end&lt;/span&gt;&lt;span style="color:#0000de"&gt;),&lt;/span&gt;
&lt;span style="color:#90a729"&gt;0011 &lt;/span&gt;    &lt;span style="color:#c42638; font-weight:bold"&gt;register&lt;/span&gt;&lt;span style="color:#0000de"&gt;(&lt;/span&gt;client_manager&lt;span style="color:#0000de"&gt;,&lt;/span&gt; Pid&lt;span style="color:#0000de"&gt;),&lt;/span&gt;
&lt;span style="color:#90a729"&gt;0012 &lt;/span&gt;	 &lt;span style="color:#0000de"&gt;{&lt;/span&gt;ok&lt;span style="color:#0000de"&gt;,&lt;/span&gt; Socket&lt;span style="color:#0000de"&gt;} =&lt;/span&gt; gen_tcp&lt;span style="color:#0000de"&gt;:&lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;listen&lt;/span&gt;&lt;span style="color:#0000de"&gt;(&lt;/span&gt;Port&lt;span style="color:#0000de"&gt;,&lt;/span&gt; ?TCP_OPTIONS&lt;span style="color:#0000de"&gt;),&lt;/span&gt;
&lt;span style="color:#90a729"&gt;0013 &lt;/span&gt;    &lt;span style="color:#000000; font-weight:bold"&gt;accept&lt;/span&gt;&lt;span style="color:#0000de"&gt;(&lt;/span&gt;Socket&lt;span style="color:#0000de"&gt;)&lt;/span&gt;.
&lt;span style="color:#90a729"&gt;0014 &lt;/span&gt;
&lt;span style="color:#90a729"&gt;0015 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;stop&lt;/span&gt;&lt;span style="color:#0000de"&gt;() -&amp;gt;&lt;/span&gt; todo.
&lt;span style="color:#90a729"&gt;0016 &lt;/span&gt;
&lt;span style="color:#90a729"&gt;0017 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;accept&lt;/span&gt;&lt;span style="color:#0000de"&gt;(&lt;/span&gt;Socket&lt;span style="color:#0000de"&gt;) -&amp;gt;&lt;/span&gt;
&lt;span style="color:#90a729"&gt;0018 &lt;/span&gt;  	 &lt;span style="color:#0000de"&gt;{&lt;/span&gt;ok&lt;span style="color:#0000de"&gt;,&lt;/span&gt; NewSocket&lt;span style="color:#0000de"&gt;} =&lt;/span&gt; gen_tcp&lt;span style="color:#0000de"&gt;:&lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;accept&lt;/span&gt;&lt;span style="color:#0000de"&gt;(&lt;/span&gt;Socket&lt;span style="color:#0000de"&gt;),&lt;/span&gt;
&lt;span style="color:#90a729"&gt;0019 &lt;/span&gt;    &lt;span style="color:#c42638; font-weight:bold"&gt;spawn&lt;/span&gt;&lt;span style="color:#0000de"&gt;(&lt;/span&gt;&lt;span style="color:#0a7f6d; font-weight:bold"&gt;fun&lt;/span&gt;&lt;span style="color:#0000de"&gt;() -&amp;gt;&lt;/span&gt; &lt;span style="color:#000000; font-weight:bold"&gt;recieve&lt;/span&gt;&lt;span style="color:#0000de"&gt;(&lt;/span&gt;NewSocket&lt;span style="color:#0000de"&gt;)&lt;/span&gt; &lt;span style="color:#0a7f6d; font-weight:bold"&gt;end&lt;/span&gt;&lt;span style="color:#0000de"&gt;),&lt;/span&gt;
&lt;span style="color:#90a729"&gt;0020 &lt;/span&gt;    client_manager &lt;span style="color:#0000de"&gt;! {&lt;/span&gt;connected&lt;span style="color:#0000de"&gt;,&lt;/span&gt; NewSocket&lt;span style="color:#0000de"&gt;},&lt;/span&gt;
&lt;span style="color:#90a729"&gt;0021 &lt;/span&gt;    &lt;span style="color:#000000; font-weight:bold"&gt;accept&lt;/span&gt;&lt;span style="color:#0000de"&gt;(&lt;/span&gt;Socket&lt;span style="color:#0000de"&gt;)&lt;/span&gt;.
&lt;span style="color:#90a729"&gt;0022 &lt;/span&gt;
&lt;span style="color:#90a729"&gt;0023 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;recieve&lt;/span&gt;&lt;span style="color:#0000de"&gt;(&lt;/span&gt;Socket&lt;span style="color:#0000de"&gt;) -&amp;gt;&lt;/span&gt;
&lt;span style="color:#90a729"&gt;0024 &lt;/span&gt;    &lt;span style="color:#0a7f6d; font-weight:bold"&gt;case&lt;/span&gt; gen_tcp&lt;span style="color:#0000de"&gt;:&lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;recv&lt;/span&gt;&lt;span style="color:#0000de"&gt;(&lt;/span&gt;Socket&lt;span style="color:#0000de"&gt;,&lt;/span&gt; &lt;span style="color:#0da344"&gt;0&lt;/span&gt;&lt;span style="color:#0000de"&gt;)&lt;/span&gt; &lt;span style="color:#0a7f6d; font-weight:bold"&gt;of&lt;/span&gt;
&lt;span style="color:#90a729"&gt;0025 &lt;/span&gt;        &lt;span style="color:#0000de"&gt;{&lt;/span&gt;ok&lt;span style="color:#0000de"&gt;,&lt;/span&gt; Data&lt;span style="color:#0000de"&gt;} -&amp;gt;&lt;/span&gt;
&lt;span style="color:#90a729"&gt;0026 &lt;/span&gt;            client_manager &lt;span style="color:#0000de"&gt;! {&lt;/span&gt;multicast&lt;span style="color:#0000de"&gt;,&lt;/span&gt;Socket&lt;span style="color:#0000de"&gt;,&lt;/span&gt;Data&lt;span style="color:#0000de"&gt;},&lt;/span&gt;
&lt;span style="color:#90a729"&gt;0027 &lt;/span&gt;            &lt;span style="color:#000000; font-weight:bold"&gt;recieve&lt;/span&gt;&lt;span style="color:#0000de"&gt;(&lt;/span&gt;Socket&lt;span style="color:#0000de"&gt;);&lt;/span&gt;
&lt;span style="color:#90a729"&gt;0028 &lt;/span&gt;        &lt;span style="color:#0000de"&gt;{&lt;/span&gt;error&lt;span style="color:#0000de"&gt;,&lt;/span&gt; closed&lt;span style="color:#0000de"&gt;} -&amp;gt;&lt;/span&gt;
&lt;span style="color:#90a729"&gt;0029 &lt;/span&gt; 		 client_manager &lt;span style="color:#0000de"&gt;! {&lt;/span&gt;disconnect&lt;span style="color:#0000de"&gt;,&lt;/span&gt; Socket&lt;span style="color:#0000de"&gt;}&lt;/span&gt;
&lt;span style="color:#90a729"&gt;0030 &lt;/span&gt;    &lt;span style="color:#0a7f6d; font-weight:bold"&gt;end&lt;/span&gt;.
&lt;span style="color:#90a729"&gt;0031 &lt;/span&gt;
&lt;span style="color:#90a729"&gt;0032 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;manage&lt;/span&gt;&lt;span style="color:#0000de"&gt;(&lt;/span&gt;Sockets&lt;span style="color:#0000de"&gt;) -&amp;gt;&lt;/span&gt;
&lt;span style="color:#90a729"&gt;0033 &lt;/span&gt;    &lt;span style="color:#0a7f6d; font-weight:bold"&gt;receive&lt;/span&gt;
&lt;span style="color:#90a729"&gt;0034 &lt;/span&gt;        &lt;span style="color:#0000de"&gt;{&lt;/span&gt;connected&lt;span style="color:#0000de"&gt;,&lt;/span&gt; Socket&lt;span style="color:#0000de"&gt;} -&amp;gt;&lt;/span&gt;
&lt;span style="color:#90a729"&gt;0035 &lt;/span&gt;            NewSockets &lt;span style="color:#0000de"&gt;= [&lt;/span&gt;Socket &lt;span style="color:#0000de"&gt;|&lt;/span&gt; Sockets&lt;span style="color:#0000de"&gt;];&lt;/span&gt;
&lt;span style="color:#90a729"&gt;0036 &lt;/span&gt;        &lt;span style="color:#0000de"&gt;{&lt;/span&gt;disconnected&lt;span style="color:#0000de"&gt;,&lt;/span&gt; Socket&lt;span style="color:#0000de"&gt;} -&amp;gt;&lt;/span&gt;
&lt;span style="color:#90a729"&gt;0037 &lt;/span&gt;            NewSockets &lt;span style="color:#0000de"&gt;=&lt;/span&gt; lists&lt;span style="color:#0000de"&gt;:&lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;delete&lt;/span&gt;&lt;span style="color:#0000de"&gt;(&lt;/span&gt;Socket&lt;span style="color:#0000de"&gt;,&lt;/span&gt; Sockets&lt;span style="color:#0000de"&gt;);&lt;/span&gt;
&lt;span style="color:#90a729"&gt;0038 &lt;/span&gt;        &lt;span style="color:#0000de"&gt;{&lt;/span&gt;multicast&lt;span style="color:#0000de"&gt;,&lt;/span&gt;Socket&lt;span style="color:#0000de"&gt;,&lt;/span&gt; Data&lt;span style="color:#0000de"&gt;} -&amp;gt;&lt;/span&gt;
&lt;span style="color:#90a729"&gt;0039 &lt;/span&gt;            &lt;span style="color:#000000; font-weight:bold"&gt;multicast&lt;/span&gt;&lt;span style="color:#0000de"&gt;(&lt;/span&gt;Socket&lt;span style="color:#0000de"&gt;,&lt;/span&gt; Sockets&lt;span style="color:#0000de"&gt;,&lt;/span&gt; Data&lt;span style="color:#0000de"&gt;),&lt;/span&gt;
&lt;span style="color:#90a729"&gt;0040 &lt;/span&gt;            NewSockets &lt;span style="color:#0000de"&gt;=&lt;/span&gt; Sockets
&lt;span style="color:#90a729"&gt;0041 &lt;/span&gt;    &lt;span style="color:#0a7f6d; font-weight:bold"&gt;end&lt;/span&gt;&lt;span style="color:#0000de"&gt;,&lt;/span&gt;
&lt;span style="color:#90a729"&gt;0042 &lt;/span&gt;    &lt;span style="color:#000000; font-weight:bold"&gt;manage&lt;/span&gt;&lt;span style="color:#0000de"&gt;(&lt;/span&gt;NewSockets&lt;span style="color:#0000de"&gt;)&lt;/span&gt;.
&lt;span style="color:#90a729"&gt;0043 &lt;/span&gt;
&lt;span style="color:#90a729"&gt;0044 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;multicast&lt;/span&gt;&lt;span style="color:#0000de"&gt;(&lt;/span&gt;FromSocket&lt;span style="color:#0000de"&gt;,&lt;/span&gt; ToSockets&lt;span style="color:#0000de"&gt;,&lt;/span&gt; Data&lt;span style="color:#0000de"&gt;) -&amp;gt;&lt;/span&gt;
&lt;span style="color:#90a729"&gt;0045 &lt;/span&gt;    SendData &lt;span style="color:#0000de"&gt;=&lt;/span&gt; &lt;span style="color:#0a7f6d; font-weight:bold"&gt;fun&lt;/span&gt;&lt;span style="color:#0000de"&gt;(&lt;/span&gt;Socket&lt;span style="color:#0000de"&gt;) -&amp;gt;&lt;/span&gt; gen_tcp&lt;span style="color:#0000de"&gt;:&lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;send&lt;/span&gt;&lt;span style="color:#0000de"&gt;(&lt;/span&gt;Socket&lt;span style="color:#0000de"&gt;,&lt;/span&gt; Data&lt;span style="color:#0000de"&gt;)&lt;/span&gt; &lt;span style="color:#0a7f6d; font-weight:bold"&gt;end&lt;/span&gt;&lt;span style="color:#0000de"&gt;,&lt;/span&gt;
&lt;span style="color:#90a729"&gt;0046 &lt;/span&gt;    Sockets &lt;span style="color:#0000de"&gt;= [&lt;/span&gt; S &lt;span style="color:#0000de"&gt;||&lt;/span&gt; S &lt;span style="color:#0000de"&gt;&amp;lt;-&lt;/span&gt; ToSockets&lt;span style="color:#0000de"&gt;,&lt;/span&gt; S &lt;span style="color:#0000de"&gt;/=&lt;/span&gt; FromSocket&lt;span style="color:#0000de"&gt;],&lt;/span&gt;
&lt;span style="color:#90a729"&gt;0047 &lt;/span&gt;    lists&lt;span style="color:#0000de"&gt;:&lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;foreach&lt;/span&gt;&lt;span style="color:#0000de"&gt;(&lt;/span&gt;SendData&lt;span style="color:#0000de"&gt;,&lt;/span&gt; Sockets&lt;span style="color:#0000de"&gt;)&lt;/span&gt;.
&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=xWliq2QoYt8:ihRQ57XIZ0s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=xWliq2QoYt8:ihRQ57XIZ0s:2mJPEYqXBVI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=2mJPEYqXBVI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=xWliq2QoYt8:ihRQ57XIZ0s:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mrinalwadhwa/ragstoriches/~4/xWliq2QoYt8" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://weblog.mrinalwadhwa.com/2009/11/28/flash-erlang-and-realtime-collaborative-interfaces/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://weblog.mrinalwadhwa.com/2009/11/28/flash-erlang-and-realtime-collaborative-interfaces/</feedburner:origLink></item>
		<item>
		<title>The state of Enterprise UIs : “It’s a design thinking problem”</title>
		<link>http://feedproxy.google.com/~r/mrinalwadhwa/ragstoriches/~3/i1kYNbB3KYU/</link>
		<comments>http://weblog.mrinalwadhwa.com/2009/09/08/the-state-of-enterprise-ui/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 16:46:22 +0000</pubDate>
		<dc:creator>Mrinal Wadhwa</dc:creator>
				<category><![CDATA[RIA]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[Accenture]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[deloitte]]></category>
		<category><![CDATA[Enterprise]]></category>
		<category><![CDATA[enterprise ui]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[james governer]]></category>
		<category><![CDATA[redmonk]]></category>
		<category><![CDATA[thomas otter]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://weblog.mrinalwadhwa.com/?p=1160</guid>
		<description>&lt;p&gt;&lt;a href="http://www.redmonk.com/jgovernor/"&gt;James Governor&lt;/a&gt; of RedMonk yesterday kicked off an interesting &lt;a href="http://www.redmonk.com/jgovernor/2009/09/04/front-ends-portal-plasticity-glue-to-putty-sap-to-adobe-2/"&gt;discussion about the state of Enterprise User Interfaces&lt;/a&gt;, more specifically Enterprise Portals and points out &amp;#8230;&lt;/p&gt;
&lt;blockquote&gt;&lt;h3&gt;&lt;em&gt;&amp;#8220;&amp;#8230; That’s right- less painful for users. Products like IBM WebSphere Portal and SAP Netweaver Portal were supposed to bring much improved user interaction models to enterprise IT, but unfortunately traditional systems-focused IT departments, rather than user interaction specialists and their web brethren, did the work &amp;#8230;&amp;#8221;&lt;/em&gt;&lt;/h3&gt;
&lt;/blockquote&gt;
&lt;p&gt; James eludes to the crux of the problem in the above quote and &lt;a href="http://blogs.gartner.com/thomas_otter/"&gt;Thomas Otter&lt;/a&gt; highlights it further in a &lt;a href="http://www.redmonk.com/jgovernor/2009/09/04/front-ends-portal-plasticity-glue-to-putty-sap-to-adobe-2/#comment-541238"&gt;comment&lt;/a&gt; saying &amp;#8230;&lt;/p&gt;
&lt;blockquote&gt;&lt;h3&gt;&lt;em&gt;I sense that most of the problems/challenges with enterprise UI are not just a tool challenge. It is a design thinking problem. Until design thinking permeates enterprise application development, UI will be a sore point.&lt;/em&gt;&lt;/h3&gt;
&lt;/blockquote&gt;
&lt;p&gt;Thomas is right, it is &lt;strong&gt;a design thinking problem&lt;/strong&gt;, more precisely, the problem is that &lt;strong&gt;there are no design thinkers in most teams&lt;/strong&gt; that build or customize enterprise software&amp;#8230;.&lt;!--more--&gt; A quick search for Job posts with keywords &amp;#8220;interaction designer SAP&amp;#8221; and other related terms on various reputed job boards &lt;a href="http://scncareercenter.jobtarget.com/c/search_results.cfm?t730=designer&amp;#038;t737=&amp;#038;t15195=&amp;#038;t15174=&amp;#038;t731=&amp;#038;t732=&amp;#038;max=25&amp;#038;site_id=8446&amp;#038;search=Find+Jobs"&gt;here&lt;/a&gt;, &lt;a href="http://www.indeed.co.in/jobs?q=interaction+designer+sap&amp;#038;l="&gt;here&lt;/a&gt;, &lt;a href="http://seeker.dice.com/jobsearch/servlet/JobSearch?op=300&amp;#038;N=0&amp;#038;Hf=0&amp;#038;NUM_PER_PAGE=30&amp;#038;Ntk=JobSearchRanking&amp;#038;Ntx=mode+matchall&amp;#038;AREA_CODES=&amp;#038;AC_COUNTRY=1525&amp;#038;QUICK=1&amp;#038;ZIPCODE=&amp;#038;RADIUS=64.37376&amp;#038;ZC_COUNTRY=0&amp;#038;COUNTRY=1525&amp;#038;STAT_PROV=0&amp;#038;METRO_AREA=33.78715899%2C-84.39164034&amp;#038;TRAVEL=0&amp;#038;TAXTERM=0&amp;#038;SORTSPEC=0&amp;#038;FRMT=0&amp;#038;DAYSBACK=30&amp;#038;LOCATION_OPTION=2&amp;#038;FREE_TEXT=interaction+designer+sap&amp;#038;WHERE="&gt;here&lt;/a&gt; and a few other places revealed almost no relevant results .. clearly we don&amp;#8217;t even realize yet that we need to design the interaction a user has with the software we build .. so it should be no surprise that our business software is a pain to use.&lt;/p&gt;
&lt;p&gt;It is easy to blame vendors like SAP and IBM in this scenario though &amp;#8230; our company portal is a pain to use, SAP must not have done a good job building it .. this is not always the right assumption, software like SAP portal etc. are platforms that allow an extreme amount of customization and often its this team doing the customization that puts together most of what a user will experience .. believe it or not SAP portal is HTML and JavaScript in your browser &amp;#8230; yes the same HTML and JavaScript that powers GMail, Google Reader, Apple.com or numerous other engaging experiences on the Internet that you can find listed on various web showcases like &lt;a href="http://notcoffee.net/"&gt;this&lt;/a&gt; and &lt;a href="http://usejquery.com/"&gt;this&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I bet if the same people who build these experiences on the web were part of the team building and customizing your corporate portal we would not be having this conversation. Yet, I&amp;#8217;ve been on this side of similar conversations many times before and this is right about the time where you hear the words &amp;#8230;&lt;/p&gt;
&lt;blockquote&gt;&lt;h3&gt;&lt;em&gt;&amp;#8220;&amp;#8230; but, I don&amp;#8217;t need all this &lt;strong&gt;flashy&lt;/strong&gt; stuff on my business app &amp;#8230;&amp;#8221;&lt;/em&gt;&lt;/h3&gt;
&lt;/blockquote&gt;
&lt;p&gt;Unfortunately, many business decision makers very often fail to see beyond the commercial glitz of well designed applications on the Internet and quickly dismiss or underrate the need of an Interaction designer on their team. They miss to see that Interaction design is about thinking and researching how a users interacts with your software, how he feels and how can his feelings be optimized to pleasure, comfort and satisfaction. Its not about rounded corners or gradients or &amp;#8220;flashy&amp;#8221; animations .. those are just some visual design tools that sometimes (not always) help enhance how a user feels when using software.  &lt;/p&gt;
&lt;p&gt;Things are changing though, as &lt;a href="http://www.yojibee.com/"&gt;Anne&lt;/a&gt; points out in &lt;a href="&lt;a href="http://www.redmonk.com/jgovernor/2009/09/04/front-ends-portal-plasticity-glue-to-putty-sap-to-adobe-2/#comment-541173"&gt;a comment on James&amp;#8217; post&lt;/a&gt; .. the last year or so has seen a lot of new interest in the business value of good user interfaces and James&amp;#8217; post mentions that companies like Deloitte and Accenture realize this value and &amp;#8220;have built practices dedicated to using Adobe technology to make existing enterprise applications and their portal front ends less painful for users&amp;#8221;. He goes on to quote Jaco Von Eeden from Deloitte &amp;#8230;&lt;/p&gt;
&lt;blockquote&gt;&lt;h3&gt;&lt;em&gt;“Virtually every ERP deal we see we ask where can we use Adobe. We have a reasonable revenue flow and fantastic pipeline.”&lt;/em&gt;&lt;/h3&gt;
&lt;/blockquote&gt;
&lt;p&gt;This increasing interest in the value of good user interfaces is great for the industry, but I&amp;#8217;m not sure if the above approach that Deloitte is embracing is the right way to go .. we should not be force fitting a particular technology into a solution, but instead asking what is the best way to solve a problem and what is the best technology to build that solution.&lt;/p&gt;
&lt;p&gt;Adobe&amp;#8217;s technologies can be used to build some great solutions but this choice of using a particular technology should not be made by business drivers &amp;#8230; instead, it should be based on proper understanding of what is needed. Remember, it is very easy to use these so called &lt;a href="http://weblog.mrinalwadhwa.com/2008/10/24/what-is-an-ria/"&gt;Rich Internet Applications&lt;/a&gt; technologies to build a &lt;strong&gt;Not So Rich Internet Application&lt;/strong&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=i1kYNbB3KYU:6KPcqalOcPs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=i1kYNbB3KYU:6KPcqalOcPs:2mJPEYqXBVI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=2mJPEYqXBVI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=i1kYNbB3KYU:6KPcqalOcPs:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mrinalwadhwa/ragstoriches/~4/i1kYNbB3KYU" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://weblog.mrinalwadhwa.com/2009/09/08/the-state-of-enterprise-ui/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		<feedburner:origLink>http://weblog.mrinalwadhwa.com/2009/09/08/the-state-of-enterprise-ui/</feedburner:origLink></item>
		<item>
		<title>Flex 4: Random Layout and Step Layout</title>
		<link>http://feedproxy.google.com/~r/mrinalwadhwa/ragstoriches/~3/_OIQlzQnSLg/</link>
		<comments>http://weblog.mrinalwadhwa.com/2009/08/22/flex-4-random-layout-and-step-layout/#comments</comments>
		<pubDate>Sat, 22 Aug 2009 14:01:00 +0000</pubDate>
		<dc:creator>Mrinal Wadhwa</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[cool]]></category>
		<category><![CDATA[flex4]]></category>
		<category><![CDATA[gumbo]]></category>
		<category><![CDATA[layout]]></category>
		<category><![CDATA[spark]]></category>

		<guid isPermaLink="false">http://weblog.mrinalwadhwa.com/?p=1142</guid>
		<description>&lt;p&gt;Yesterday at the &lt;a href="http://bangalorefx.org"&gt;Bangalore Flex User Group&lt;/a&gt; Meeting after &lt;a href="http://www.thepixelcode.com/development/data-services/model-driven-development-using-lcds-3"&gt;Khan&amp;#8217;s excellent talk&lt;/a&gt; on LCDS3, Fiber and the Modeler Plugin we had some time left to so I decided to show everyone how cool and easy &lt;a href="http://opensource.adobe.com/wiki/display/flexsdk/Spark+Horizontal+and+Vertical+Layout"&gt;layouts in Flex 4&lt;/a&gt; are .. &lt;/p&gt;
&lt;p&gt;Here are two quick layouts we wrote during the meeting as I showed everyone how easy it is to write a custom layout &amp;#8230;&lt;/p&gt;
&lt;h4&gt;Random Layout&lt;/h4&gt;
&lt;p&gt;&lt;object width="650" height="380"&gt;&lt;param name="movie" value="http://experiments.mrinalwadhwa.com/Flex4Layouts/RandomLayoutExample.swf"&gt;&lt;embed src="http://experiments.mrinalwadhwa.com/Flex4Layouts/RandomLayoutExample.swf" width="650" height="380"&gt;&lt;/embed&gt;&lt;/param&gt;&lt;/object&gt;&lt;/p&gt;
&lt;h4&gt;Step Layout&lt;/h4&gt;
&lt;p&gt;&lt;object width="650" height="380"&gt;&lt;param name="movie" value="http://experiments.mrinalwadhwa.com/Flex4Layouts/StepLayoutExample.swf"&gt;&lt;embed src="http://experiments.mrinalwadhwa.com/Flex4Layouts/StepLayoutExample.swf" width="650" height="380"&gt;&lt;/embed&gt;&lt;/param&gt;&lt;/object&gt;&lt;/p&gt;
&lt;p&gt;These layouts are currently somewhat crude but the idea was to convey how easy it is to write your own layouts &amp;#8230; here the code for RandomLayout &amp;#8230; just one simple function &amp;#8230;&lt;!--more--&gt;&lt;/p&gt;
&lt;p&gt;&lt;iframe src ="http://experiments.mrinalwadhwa.com/Flex4Layouts/srcview/source/com/mrinalwadhwa/layouts/RandomLayout.as.html" width="100%" height="300"&gt;&lt;br /&gt;
&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;Of course, these layout algorithms can get more complex &amp;#8230; here&amp;#8217;s the StepLayout code &amp;#8230; &lt;/p&gt;
&lt;p&gt;&lt;iframe src ="http://experiments.mrinalwadhwa.com/Flex4Layouts/srcview/source/com/mrinalwadhwa/layouts/StepLayout.as.html" width="100%" height="300"&gt;&lt;br /&gt;
&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;For more elaborate examples you may want to checkout the &lt;a href="http://weblog.mrinalwadhwa.com/2009/08/16/flex-4-concentric-layout/"&gt;ConcentricLayout&lt;/a&gt; example I posted last week or Ryan Campbell&amp;#8217;s very&lt;a href="http://www.bobjim.com/2009/06/16/heres-5-3d-layouts-for-flex-4/"&gt; cool 3D Layouts&lt;/a&gt;. Evtim, an engineer on the Flex SDK team also has some &lt;a href="http://evtimmy.com/category/custom-layout/"&gt;detailed posts on how to write Layouts&lt;/a&gt; on his blog.  &lt;/p&gt;
&lt;p&gt;Flex 4 is awesome.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; You can view the complete source of the above example &lt;a href="http://experiments.mrinalwadhwa.com/Flex4Layouts/srcview/"&gt;here&lt;/a&gt; or download it from &lt;a href="http://experiments.mrinalwadhwa.com/Flex4Layouts/srcview/Flex4layouts.zip"&gt;here.&lt;/a&gt; &lt;/p&gt;
&lt;hr /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=_OIQlzQnSLg:KKyqX4fBtWU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=_OIQlzQnSLg:KKyqX4fBtWU:2mJPEYqXBVI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=2mJPEYqXBVI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=_OIQlzQnSLg:KKyqX4fBtWU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mrinalwadhwa/ragstoriches/~4/_OIQlzQnSLg" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://weblog.mrinalwadhwa.com/2009/08/22/flex-4-random-layout-and-step-layout/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://weblog.mrinalwadhwa.com/2009/08/22/flex-4-random-layout-and-step-layout/</feedburner:origLink></item>
		<item>
		<title>Flex 4 Concentric Layout</title>
		<link>http://feedproxy.google.com/~r/mrinalwadhwa/ragstoriches/~3/QU-zjpRurNQ/</link>
		<comments>http://weblog.mrinalwadhwa.com/2009/08/16/flex-4-concentric-layout/#comments</comments>
		<pubDate>Sun, 16 Aug 2009 16:16:49 +0000</pubDate>
		<dc:creator>Mrinal Wadhwa</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[concentric layout]]></category>
		<category><![CDATA[flex4]]></category>
		<category><![CDATA[gumbo]]></category>
		<category><![CDATA[layout]]></category>
		<category><![CDATA[layouts]]></category>
		<category><![CDATA[spark]]></category>

		<guid isPermaLink="false">http://weblog.mrinalwadhwa.com/?p=1121</guid>
		<description>&lt;p&gt;&lt;a href="http://opensource.adobe.com/wiki/display/flexsdk/Spark+Horizontal+and+Vertical+Layout"&gt;Layouts in Flex 4&lt;/a&gt; are decoupled from containers and its quite simple to define your own layout. Yesterday I wrote ConcentricLayout. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ConcentricLayout&lt;/strong&gt; arranges layout elements in such a way that their centers are aligned and their size sequentially decreases. The width of each layout element is less than the previous element by a value specified using the &lt;em&gt;horizontalGap&lt;/em&gt; property and the height of each layout element is less than the previous element by a value specified using the &lt;em&gt;verticalGap&lt;/em&gt; property. If the element has an explicit width or an explicit height it still aligns its center but is not resized. You can tell the layout to force a resize of all elements and ignore their explicitly specified size using the &lt;em&gt;forceResize&lt;/em&gt; flag&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s a quick example: &lt;/p&gt;
&lt;p&gt;&lt;object width="550" height="400"&gt;&lt;param name="movie" value="http://experiments.mrinalwadhwa.com/ConcentricLayout/ConcentricLayout.swf"&gt;&lt;embed src="http://experiments.mrinalwadhwa.com/ConcentricLayout/ConcentricLayout.swf" width="650" height="380"&gt;&lt;/embed&gt;&lt;/param&gt;&lt;/object&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a href="http://experiments.mrinalwadhwa.com/ConcentricLayout/srcview/"&gt;View Source&lt;/a&gt;&lt;/h3&gt;
&lt;h3&gt;&lt;a href="http://experiments.mrinalwadhwa.com/ConcentricLayout/srcview/ConcentricLayout.zip"&gt;Download Source&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=QU-zjpRurNQ:qWGAeCs3YeE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=QU-zjpRurNQ:qWGAeCs3YeE:2mJPEYqXBVI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=2mJPEYqXBVI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?a=QU-zjpRurNQ:qWGAeCs3YeE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mrinalwadhwa/ragstoriches?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mrinalwadhwa/ragstoriches/~4/QU-zjpRurNQ" height="1" width="1"/&gt;</description>
		<wfw:commentRss>http://weblog.mrinalwadhwa.com/2009/08/16/flex-4-concentric-layout/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://weblog.mrinalwadhwa.com/2009/08/16/flex-4-concentric-layout/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic Page Served (once) in 0.632 seconds --><!-- Cached page served by WP-Cache -->

