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

<channel>
	<title>Fusioncube &#187; development</title>
	<atom:link href="http://www.fusioncube.net/index.php/category/development/feed" rel="self" type="application/rss+xml" />
	<link>http://www.fusioncube.net</link>
	<description>The online journey of a technophile, by Steve Brownlee</description>
	<lastBuildDate>Wed, 01 Feb 2012 04:17:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>The World Is Changing &#8211; The New Landscape for Application Development</title>
		<link>http://www.fusioncube.net/index.php/the-world-is-changing-the-new-landscape-for-application-development</link>
		<comments>http://www.fusioncube.net/index.php/the-world-is-changing-the-new-landscape-for-application-development#comments</comments>
		<pubDate>Wed, 15 Jun 2011 13:47:50 +0000</pubDate>
		<dc:creator>Steve Brownlee</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[languages]]></category>
		<category><![CDATA[recommended]]></category>
		<category><![CDATA[application]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[emerging]]></category>
		<category><![CDATA[future]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[trend]]></category>
		<category><![CDATA[virtual machine]]></category>

		<guid isPermaLink="false">http://www.fusioncube.net/?p=1263</guid>
		<description><![CDATA[The world of application development is a constantly evolving landscape. New tools are constantly being created to make development fast, easier and more profitable. For the last two years, I've been seeing a new trend emerge. It's something that I believe will be the landscape of application development for the next 10 years, and it's been right under everyone's nose the entire time.]]></description>
			<content:encoded><![CDATA[<p>&#8220;&#8230;<a href="http://en.wikiquote.org/wiki/Talk:The_Lord_of_the_Rings_(movies)" target="_blank">I feel it in the water, I feel it in the earth, I smell it in the air</a>&#8230;&#8221;</p>
<p>Like you, I have a wide range of development experience. In the past 20 years, I&#8217;ve been a huge fan of Java, C#, Flex (Actionscript), ColdFusion, F#, Ruby and Python. In fact, a few years ago in my last job, myself and some colleagues spent a significant amount of time and effort convincing everyone to migrate to Flex-based applications (they have since decided to migrate yet again to .NET). At the time, it was the right move.</p>
<p>Now I would never suggest such a migration</p>
<p>Feel free to disagree with the following opinion, but from what I&#8217;ve been seeing over the past couple of years is&#8230;</p>
<p>JavaScript is going to be the virtual machine that drives the next 10 years of software evolution. </p>
<p>Not all software, mind you. I&#8217;m talking about the revolution that&#8217;s going on in mobile, cross-platform, cloud-based computing and development.</p>
<p>Now, what exactly do I mean by that? JavaScript itself is not a virtual machine, it&#8217;s simply a programming syntax, right? Well, that&#8217;s true, but remember that the companies writing JavaScript engines are making virtual machines &#8211; such as <a href="http://code.google.com/p/v8/" target="_blank">Google&#8217;s V8</a> &#8211; that parse and execute JavaScript&#8230; and they&#8217;re fast. In fact, they are becoming so fast, that JavaScript is slowly, but surely, becoming a ubiquitous language that not only builds the logic and validations of an application, but is now building the actual user interface, and the brains behind it (see <a href="http://en.wikipedia.org/wiki/Server-side_JavaScript" target="_blank">server side JavaScript</a>). </p>
<p>We&#8217;ll get into that later, but I want to start off with a statement to all the legion .NET, Java, Actionscript, Ruby, Python, {insert language here} developers who look with disdain, or even confusion at JavaScript. You&#8217;re missing it. You&#8217;re missing what&#8217;s going on around you, and for anyone who&#8217;s been in software for even a short amount of time, you learn that you adapt or you risk becoming marginalized.</p>
<p>Let&#8217;s start off with the trends that I&#8217;ve been seeing, and also some nice links that really show off the power of these JavaScript virtual machines. Some are obviously impressive, some are subtly so, but all of them give a taste of what&#8217;s coming.</p>
<h3>Running An Operating System In The Browser</h3>
<p>Start off by checking out <a href="http://bellard.org/jslinux/" target="_blank">Fabrice Bellard&#8217;s PC emulator</a> with the Linux 2.6.20 kernel on it. That&#8217;s right, an operating system running inside a browser.</p>
<p>Imagining the possibilities of utilizing this kind of tool is exciting. Are you an android developer? Imagine writing your code and then being able to emulate the browser-based version of your program <strong>and</strong> the mobile version in the browser &#8211; side by side.</p>
<p>Imagine having a RAM based file system running in the background behind your web application, and using <a href="http://diveintohtml5.org/storage.html" target="_blank">Web Storage</a> to make the environment and experience different for each user &#8211; while never having to communicate with a central server.</p>
<p>How about running a dynamic P2P server inside your browser using <a href="http://dev.w3.org/html5/websockets/" target="_blank">WebSockets</a>?</p>
<p>All written with JavaScript. Impossible? We&#8217;ll see.</p>
<h3>One Language To Rule Them All</h3>
<p>Yes, the LOTR references will continue to pile up as this article goes on, just accept it!</p>
<h4>Appcelerator Titanium</h3>
<p>Some months ago (oh about 6) I stumbled across this tool called <a href="http://www.appcelerator.com/products/" target="_blank">Titanium</a>. The only reason that I learned of its existence is because the developers of my favorite tool &#8211; Aptana IDE &#8211; were acquired by the company Appcelerator. I blithely browsed their web site that day thinking they were just another software development company. However, by the time I was done reading their technology road map, my brain had changed. A light had turned on that hasn&#8217;t been shut off since.</p>
<p>JavaScript can be used to design entire applications, and then be compiled into almost every operating system using the standard SDKs! How is this possible? So if I want to write an application that can be deployed on the desktop (Windows, OSX, or Linux)  and also be deployed to mobile devices <em><strong>as native applications</strong></em> (Android, iOS, Blackberry), I only need one source code library?</p>
<p>The world is changing, indeed.</p>
<h4>Node</h4>
<p>What can I say about <a href="http://en.wikipedia.org/wiki/Node.js" target="_blank">Node.js</a> that hasn&#8217;t been said already? Well, for the uninitiated, Node.js is a program written in C++ that allows you to author server-side services in JavaScript. It is entirely event-driven, on a single thread, and is designed to be a non-blocking I/O framework.</p>
<p>I will not go into any details on it here, but for those who have investigated it, I believe it&#8217;s the tip of the iceberg, and for those who have not, well, then you need to spend a couple hours this weekend going down the rabbit hole.</p>
<p>Node.js still has a long way to go (Windows support <em>*cough*</em>), but since its introduction to the world in November of 2009, there are now <strong>hundreds</strong> of <a href="https://github.com/joyent/node/wiki/modules" target="_blank">modules</a> written for it that will cover most of your interests and needs.</p>
<p>Most impressive so far is a <a href="http://nowjs.com/">module called Now.js</a>. It allows you to have real-time communication between your server and your clients with one simple JavaScript file. If any of you have ever tried to implement message queues in the .NET or Java environments, you know how many hoops you have to jump through, how it affects performance and your system architecture. This module is so easy and painless to implement, it almost made me laugh when I first saw it work.</p>
<p>If you&#8217;re interested, here&#8217;s the <a href="http://jsconf.eu/2009/video_nodejs_by_ryan_dahl.html" target="_blank">original presentation given by Ryan Dahl</a> at the JSConf in 2009.</p>
<h4>Code Complete</h4>
<p>Given these two tools, you can now write your secure, server logic and the entire customer facing application in one language and have it interpreted to any platform. That&#8217;s exciting!</p>
<h3>Dumbing Down To JavaScript</h3>
<p>I&#8217;m sure that&#8217;s how many software developers would term the desire to write a program in Java or C# and then run it through a compiler to generate JavaScript! Gasp! How plebian&#8230; how absurd!</p>
<p>Yet these companies (little ones named Google and Microsoft, respectively) have written these compilers because there&#8217;s a need. First, there&#8217;s the <a href="http://code.google.com/webtoolkit/overview.html" target="_blank">Google Web Toolkit</a> for Java and, secondly, there&#8217;s <a href="http://projects.nikhilk.net/ScriptSharp" target="_blank">Script#</a> for the .NET folks.</p>
<h3>Google</h3>
<p>I have to give a lot of credit to this evolution to Google. Their brilliant engineers have shown us time after time after time that almost anything you think can&#8217;t be done with JavaScript, they have done it. Perfect example. Someone (with an apropos name of Putrid Polecat) commented on Ars Technica story about Windows 8 (see link below) with the following uneducated comment.</p>
<blockquote><p>
Serious applications simply cannot be written in HTML 5 and JavaScript. Continued support for C#/c++/Java must, and therefore will, continue. Can you write adobe illustrator in html5? Blender? AutoCAD? A virtual machine emulator? Device drivers? A compiler? </p>
<p>Cmon guys.
</p></blockquote>
<p>Let&#8217;s see&#8230;</p>
<p>A virtual machine emulator?  Well we covered that.</p>
<p>A compiler? They&#8217;re working on it with <a href="http://code.google.com/p/gettoken/" target="_blank">getToken()</a>. Also, I suppose you could just write your own with <a href="http://jscc.jmksf.com/" target="_blank">JS/CC</a>.</p>
<p>AutoCAD? This one&#8217;s probably right with JavaScript in its current state. Its floating point calculations might not be able to support the precision needed by a CAD program. There&#8217;s <a href="http://www.ecmascript.org/docs/tc39-2009-043.pdf" target="_blank">hope for the future</a>, though.</p>
<p>Adobe Illustrator? There&#8217;s plenty of <a href="http://editor.pixastic.com">online image editors</a> available, but nothing yet as comprehensive as Illustrator.  However, with the HTML5 Canvas, I&#8217;m betting that it&#8217;s coming soon.</p>
<p>Speaking of Google, how about a word processor, or spreadsheet application, or database tool in the browser with JavaScript. <a href="http://docs.google.com" target="_blank">Google Docs</a>.</p>
<p>However, I agree with his core point about there always being a need for compiled, strongly typed languages. I just want people to understand that JavaScript is as powerful as any other language, and used properly, can achieve mind-blowing results.</p>
<p>It is not the Gollum of programming languages, but as these tools show, it is the Gandalf. The one language that can somehow bring all the pieces together in order to develop and distribute applications as quickly and as powerfully as possible.</p>
<h3>The Big Redmond Machine</h3>
<p><a href="http://arstechnica.com/microsoft/news/2011/06/html5-centric-windows-8-leaves-microsoft-developers-horrified.ars">Windows 8 APIs are going to be HTML5 and JavaScript</a>? Well, I don&#8217;t believe that for a second, and the article even ends saying that there&#8217;s more to it and Microsoft will give us more details as time goes by. However, given that a monster, a juggernaut, with the development and marketing power of Microsoft comes out and says that it&#8217;s banking on the latest round of W3C specs for HTML, CSS, WebSockets, Web Storage and JavaScript speaks louder than most everything else.</p>
<p>I think this is a great move on their part. Having C#, C++ developers working hand in hand with the JavaScript developers to build the communication and business layer that will feed the presentation layer is probably how it will all end up (viz Appcelerator above).  But that&#8217;s just a guess.</p>
<blockquote><p>
** Update (09/15/2011) Here&#8217;s a great article that describes <a href="http://www.infoq.com/news/2011/09/Metro-Plug-ins" title="Metro Plugins" target="_blank">Metro Plugins</a> (or, more specifically, the lack thereof) in more detail, and some basic info on the Metro style browser that will be in Windows 8 and why JavaScript and HTML are the basis of that experience.
</p></blockquote>
<h3>Right Under Our Noses The Whole Time</h3>
<p>Raise your hand if you remember the hoopla in the late 90&#8242;s about Java being the write once, run anywhere platform that would liberate us all!!  Go on, raise your hand, no one will notice. Ok, we all remember, and it failed.</p>
<p>Now, raise your hand again if you remember Adobe, and then Microsoft, saying that compiled, vector-based browser plugins are going to allow us to write once, and run anywhere, and it will liberate us all!! Ok, you don&#8217;t need to raise your hand this time, but we all remember (it was just a handful of years ago). It also failed.</p>
<p>Is it possible that, like the gorgeous girl in the movie that no one noticed because she wore glasses and had her hair in a pony tail, the answer was right in front of us and no one saw it? Perhaps Google was the catalyst needed, like the movie bet where the jock dares to turn the nerdy girl into the prom queen, to let us see the true beauty and power of this little toy language written by <a href="http://en.wikipedia.org/wiki/Brendan_Eich" target="_blank">Brendant Eich</a> &#8211; who just so happens to be a native Yinzer (look it up) &#8211; way back in 1995.</p>
<p>The most beautiful thing about it is that JavaScript will be the glue that can tie all of the tools together. You can utilize Java programs and C# assemblies from your Node server, integrate a Flash movie or communicate with a Silverlight application in your UI, and then, just for fun, execute a command on your local, browser-based operating system.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fusioncube.net/index.php/the-world-is-changing-the-new-landscape-for-application-development/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Smith Micro Pittsburgh Event: Titanium Appcelerator</title>
		<link>http://www.fusioncube.net/index.php/smith-micro-pittsburgh-event-titanium</link>
		<comments>http://www.fusioncube.net/index.php/smith-micro-pittsburgh-event-titanium#comments</comments>
		<pubDate>Mon, 06 Jun 2011 15:58:05 +0000</pubDate>
		<dc:creator>Steve Brownlee</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[pittsburgh]]></category>
		<category><![CDATA[appcelerator]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[meetup]]></category>
		<category><![CDATA[micro]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[smith]]></category>
		<category><![CDATA[smith micro]]></category>
		<category><![CDATA[titanium]]></category>

		<guid isPermaLink="false">http://www.fusioncube.net/?p=1238</guid>
		<description><![CDATA[The iPhone/iPad and Mobile App Developers Pittsburgh Meetup group is providing a technical overview and demonstration of the Titanium Appcelerator platform at the Smith Micro offices in McCandless. The event is on Thursday, June 9, 2011 and will run from 7pm &#8211; 9pm in the first floor event meeting hall. Here is what you can [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://www.meetup.com/iPhone-iPad-Mobile-App-Developers-Pittsburgh-Meetup/">iPhone/iPad and Mobile App Developers Pittsburgh Meetup</a> group is providing a technical overview and demonstration of the <a href="http://www.appcelerator.com/">Titanium Appcelerator</a> platform at the Smith Micro <a href="http://maps.google.com/maps/place?ftid=0x88348b7737ca04f3:0xd6c46689ced0c6fe&#038;q=5800+corporate+drive++15237&#038;gl=us&#038;sll=40.562565,-80.021439&#038;sspn=0.006295,0.006295&#038;ie=UTF8&#038;ll=40.567285,-80.030122&#038;spn=0,0&#038;z=16">offices in McCandless</a>.</p>
<p>The event is on Thursday, June 9, 2011 and will run from 7pm &#8211; 9pm in the first floor event meeting hall.</p>
<p>Here is what you can expect to learn at the Meetup:  </p>
<p>An Appcelerator Senior Systems Engineer will be there and&#8230;</p>
<ul>
<li>Provide a high-level overview of the Titanium Architecture</li>
<li>Run through the major APIs for both mobile apps, and mobile web application development</li>
<li>Provide lots of demos on creating mobile apps with Titanium</li>
<li>Answer your questions</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.fusioncube.net/index.php/smith-micro-pittsburgh-event-titanium/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS3 Basics &#8211; An ugly, expanding, rotating button with just CSS</title>
		<link>http://www.fusioncube.net/index.php/css3-basics-an-ugly-expanding-rotating-button-with-just-css</link>
		<comments>http://www.fusioncube.net/index.php/css3-basics-an-ugly-expanding-rotating-button-with-just-css#comments</comments>
		<pubDate>Mon, 25 Apr 2011 15:58:20 +0000</pubDate>
		<dc:creator>Steve Brownlee</dc:creator>
				<category><![CDATA[css]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[animation]]></category>
		<category><![CDATA[basics]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[drop shadow]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[rotate]]></category>
		<category><![CDATA[skew]]></category>
		<category><![CDATA[transform]]></category>
		<category><![CDATA[transition]]></category>

		<guid isPermaLink="false">http://www.fusioncube.net/?p=1204</guid>
		<description><![CDATA[A quick and dirty introduction to CSS3 properties that can add some pizazz to your application. I make a toolbar with a button that grows, changes color, skews, and then spins. It's ugly, but it's cool.]]></description>
			<content:encoded><![CDATA[<p>The new CSS3 specs (part of what used to be the HTML5 spec) allows you to do some amazing things to regular, ol’ HTML elements in your applications. In this short article, I’ll give a quick rundown of some of the more popular enhancements step-by-step.</p>
<h3>Starting Resources</h3>
<p>All you need to play around with CSS3 goodies is a browser that supports them. Since I don&#8217;t want to be constantly updating this article, I&#8217;ll provide a link to a site that has a <a href="http://www.findmebyip.com/litmus/" target="_blank">nice graph showing browser support</a>. My recommendation as of 04/25/2011 is <a href="http://www.google.com/chrome" target="_blank">Google Chrome</a>. It has the broadest support so far.</p>
<p>Ok, so you&#8217;ve got that downloaded and installed, right? Cool. Now, create two files accessible to your web server named CSS3.html and CSS3.css. Open CSS3.html and insert the following markup.</p>
<pre class="brush: plain; title: ; notranslate">
&lt;html&gt;
   &lt;head&gt;
      &lt;title&gt;CSS3 Basics&lt;/title&gt;
      &lt;link href=&quot;css3.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;&gt;
   &lt;/head&gt;

   &lt;body&gt;
      &lt;div id=&quot;toolbar&quot;&gt;&lt;/div&gt;
      &lt;div id=&quot;notification&quot;&gt;Show Notification&lt;/div&gt;
   &lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Ok, let&#8217;s start having some fun with it. Open up CSS3.css and add in the following styles to give our elements some basic definitions that we&#8217;ll enhance later.</p>
<pre class="brush: css; title: ; notranslate">
#toolbar {
    width: 85%;
    margin: 0 0 50px 50px;
    border: 2px solid #ccc;
    background: #efefef;
    height: 50px;
}

#notification {
    position: relative;
    top: -90px;
    left: 75px;
    border: 1px solid #000;
    width: 150px;
    background-color: #cecece;
}
</pre>
<style>
#toolbar02 {
    width: 85%;
    margin: 0 0 50px 50px;
    border: 2px solid #ccc;
    background: #efefef;
    height: 50px;
}#notification02 {
    position: relative;
    top: -90px;
    left: 75px;
    border: 1px solid #000;
    width: 150px;
    background: #cecece;
}
</style>
<p>So I&#8217;ve give each element a border and moved the notification div inside the toolbar div with relative positioning. Basic stuff.</p>
<div id="toolbar02"></div>
<div id="notification02">Show Notification</div>
<h3>Rounded Borders</h3>
<p>Now let&#8217;s use the new border-radius property which can give your divs a rounded border to give them a button-like appearance. For now, at least, you have to provide the -moz, -webkit, and -o prefixes to ensure that it works correctly in Mozilla, Webkit and Opera browsers.</p>
<style>
#toolbar03 {
    width: 85%;
    margin: 0 0 50px 50px;
    border: 2px solid #ccc;
    background: #efefef;
    height: 50px;
}#notification03 {
    position: relative;
    top: -90px;
    left: 75px;
    border: 1px solid #000;
    width: 150px;
    background: #cecece;
    border-radius: 5px;
    -moz-border-radius: 5px;
    -webkit-border-radius: 5px;
    -o-border-radius: 5px;
}
</style>
<pre class="brush: css; title: ; notranslate">
#toolbar {
    width: 85%;
    margin: 0 0 50px 50px;
    border: 2px solid #ccc;
    background: #efefef;
    height: 50px;
}

#notification {
    position: relative;
    top: -90px;
    left: 75px;
    border: 1px solid #000;
    width: 150px;
    background: #cecece;
    border-radius: 5px;
    -moz-border-radius: 5px;
    -webkit-border-radius: 5px;
    -o-border-radius: 5px;
}
</pre>
<div id="toolbar03"></div>
<div id="notification03">Show Notification</div>
<style>
#toolbar04 {
    width: 85%;
    margin: 0 0 50px 50px;
    border: 2px solid #ccc;
    background: #efefef;
    height: 50px;
}#notification04 {
    position: relative;
    top: -90px;
    left: 75px;
    border: 1px solid #000;
    width: 150px;
    background-color: #cecece;
    border-radius: 5px;
    -moz-border-radius: 5px;
    -webkit-border-radius: 5px;
    -o-border-radius: 5px;
    -webkit-transition: 
       background-color 0.5s ease-in-out,
       width 0.5s ease-in;
    -moz-transition: 
       background-color 0.5s ease-in-out,
       width 0.5s ease-in;
    -o-transition: 
       background-color 0.5s ease-in-out,
       width 0.5s ease-in;
}#notification04:hover {
    width: 175px;
    background-color: #b8860b;
}
</style>
<h3>Transitions</h3>
<p>Now let&#8217;s see some transitions at work. Transitions allow you specify how a transformation will take place. For example, you can change the background color on an element when the user hovers her mouse over it. Until CSS3, this transition was instantaneous. Now you have options. Let&#8217;s see an example.</p>
<p>I&#8217;m going to change the width of the my notification element and its background color on hover. In addition, I&#8217;ll specify, using the transition property, how long it will take to perform the transition.</p>
<pre class="brush: css; title: ; notranslate">
#toolbar {
    width: 85%;
    margin: 0 0 50px 50px;
    border: 2px solid #ccc;
    background: #efefef;
    height: 50px;
}

#notification {
    position: relative;
    top: -90px;
    left: 75px;
    border: 1px solid #000;
    width: 150px;
    background: #cecece;
    border-radius: 5px;

    -moz-border-radius: 5px;
    -webkit-border-radius: 5px;
    -o-border-radius: 5px;

    -webkit-transition:
       background-color 0.5s ease-in-out,
       width 0.5s ease-in;
    -moz-transition:
       background-color 0.5s ease-in-out,
       width 0.5s ease-in;
    -o-transition:
       background-color 0.5s ease-in-out,
       width 0.5s ease-in;
}

#notification:hover {
    width: 175px;
    background-color: #b8860b;
}
</pre>
<div id="toolbar04"></div>
<div id="notification04">Show Notification</div>
<h3>Drop Shadows</h3>
<p>You can add drop shadows to any element using the box-shadow property. I&#8217;ll add one to both the toolbar and the notification button.</p>
<pre class="brush: css; title: ; notranslate">
#toolbar {
   -webkit-box-shadow: 5px 5px 7px #333;
   -moz-box-shadow: 5px 5px 7px #333;
   -o-box-shadow: 5px 5px 7px #333;
}

#notification {
   -webkit-box-shadow: 2px 2px 3px #333;
   -moz-box-shadow: 2px 2px 3px #333;
   -o-box-shadow: 2px 2px 3px #333;
}
</pre>
<style>
#toolbar05 {
    width: 85%;
    margin: 0 0 50px 50px;
    border: 2px solid #ccc;
    background: #efefef;
    height: 50px;
-webkit-box-shadow: 5px 5px 7px #333;
-moz-box-shadow: 5px 5px 7px #333;
-o-box-shadow: 5px 5px 7px #333;
}#notification05 {
    position: relative;
    top: -90px;
    left: 75px;
    border: 1px solid #000;
    width: 150px;
    background-color: #cecece;
    border-radius: 5px;
    -moz-border-radius: 5px;
    -webkit-border-radius: 5px;
    -o-border-radius: 5px;
    -webkit-transition: 
       background-color 0.5s ease-in-out,
       width 0.5s ease-in;
    -moz-transition: 
       background-color 0.5s ease-in-out,
       width 0.5s ease-in;
    -o-transition: 
       background-color 0.5s ease-in-out,
       width 0.5s ease-in;
-moz-box-shadow: 2px 2px 3px #333;
-o-box-shadow: 2px 2px 3px #333;
-webkit-box-shadow: 2px 2px 3px #333;
}#notification05:hover {
    width: 175px;
    background-color: #b8860b;
}
</style>
<div id="toolbar05"></div>
<div id="notification05">Show Notification</div>
<h3>Transformations</h3>
<p>There are now many kinds of ways to transform the appearance of an element. These properties are skew, rotate, scale, translate, and matrix. I&#8217;m going to skew the toolbar by 40 degrees horizontally, and skew the button by 20 degrees horizontally. Then I&#8217;ll specify that the skew on the button should happen on hover and take 1 second to complete.</p>
<style>
#toolbar06 {
-webkit-box-shadow: 5px 5px 7px #333;
-moz-box-shadow: 5px 5px 7px #333;
-o-box-shadow: 5px 5px 7px #333;
-webkit-transform: skew(-40deg,0deg);
-moz-transform: skew(-40deg,0deg);
-o-transform: skew(-40deg,0deg);
    width: 85%;
    margin: 0 0 50px 50px;
    border: 2px solid #ccc;
    background: #efefef;
    height: 50px;
}#notification06 {
    position: relative;
    top: -90px;
    left: 75px;
    border: 1px solid #000;
    width: 150px;
    background-color: #cecece;
-webkit-box-shadow: 2px 2px 3px #333;
-moz-box-shadow: 2px 2px 3px #333;
-o-box-shadow: 2px 2px 3px #333;
    border-radius: 5px;
    -moz-border-radius: 5px;
    -webkit-border-radius: 5px;
    -o-border-radius: 5px;
    -webkit-transition: 
       background-color 0.5s ease-in-out,
       width 0.5s ease-in;
    -moz-transition: 
       background-color 0.5s ease-in-out,
       width 0.5s ease-in;
    -o-transition: 
       background-color 0.5s ease-in-out,
       width 0.5s ease-in;
}#notification06:hover {
    width: 175px;
    background-color: #b8860b;
-webkit-transform: skew(-20deg,0deg);
-moz-transform: skew(-20deg,0deg);
-o-transform: skew(-20deg,0deg);
}
</style>
<pre class="brush: css; title: ; notranslate">
#toolbar {
   -webkit-transform: skew(-40deg,0deg);
   -moz-transform: skew(-40deg,0deg);
   -o-transform: skew(-40deg,0deg);
}

#notification {
    -webkit-transition:
       background-color 0.5s ease-in-out,
       width 0.5s ease-in,
       -webkit-transform 0.5s ease-in;

    -moz-transition:
       background-color 0.5s ease-in-out,
       width 0.5s ease-in,
       -webkit-transform 0.5s ease-in;

    -o-transition:
       background-color 0.5s ease-in-out,
       width 0.5s ease-in,
       -webkit-transform 0.5s ease-in;
}

#notification:hover {
   -webkit-transform: skew(-20deg,0deg);
   -moz-transform: skew(-20deg,0deg);
   -o-transform: skew(-20deg,0deg);
}
</pre>
<div id="toolbar06"></div>
<div id="notification06">Show Notification</div>
<h3>Animations</h3>
<p>This section will only work right now if you are viewing this via a webkit browser (e.g. Chrome). You can specify animation &#8220;classes&#8221; that will tell the browser to convert the state of an element from X to Y. For example, you could spin the element in a circle by setting the rotate property. Let&#8217;s see it in action.</p>
<p>I&#8217;m going to create a <strong>keyframes</strong> class named <em>spin</em> that will tell the browser to rotate the element from 0 degrees to 360 degrees when the user hovers over the button. I also specify that it will take 5 seconds to complete the spin.</p>
<pre class="brush: css; title: ; notranslate">
@-webkit-keyframes spin {
from {
    -webkit-transform: rotate(0deg);
}
to {
    -webkit-transform: rotate(360deg);
    }
}

#notification:hover {
    -webkit-animation-name: spin;
    -webkit-animation-timing-function: linear;
    -webkit-animation-duration: 5s;
}
</pre>
<style>
@-webkit-keyframes spin {  
from {  
    -webkit-transform: rotate(0deg);  
}  
to {  
    -webkit-transform: rotate(360deg);  
    }  
}
#toolbar07 {
-webkit-box-shadow: 5px 5px 7px #333;
-moz-box-shadow: 5px 5px 7px #333;
-o-box-shadow: 5px 5px 7px #333;
-webkit-transform: skew(-40deg,0deg);
-moz-transform: skew(-40deg,0deg);
-o-transform: skew(-40deg,0deg);
    width: 85%;
    margin: 0 0 50px 50px;
    border: 2px solid #ccc;
    background: #efefef;
    height: 50px;
}#notification07 {
    position: relative;
    top: -90px;
    left: 75px;
    border: 1px solid #000;
    width: 150px;
    background-color: #cecece;
-webkit-box-shadow: 2px 2px 3px #333;
-moz-box-shadow: 2px 2px 3px #333;
-o-box-shadow: 2px 2px 3px #333;
    border-radius: 5px;
    -moz-border-radius: 5px;
    -webkit-border-radius: 5px;
    -o-border-radius: 5px;
    -webkit-transition: 
       background-color 0.5s ease-in-out,
       width 0.5s ease-in;
    -moz-transition: 
       background-color 0.5s ease-in-out,
       width 0.5s ease-in;
    -o-transition: 
       background-color 0.5s ease-in-out,
       width 0.5s ease-in;
}#notification07:hover {
    width: 175px;
    background-color: #b8860b;
-webkit-transform: skew(-20deg,0deg);
-moz-transform: skew(-20deg,0deg);
-o-transform: skew(-20deg,0deg);
    -webkit-animation-name: spin;
    -webkit-animation-timing-function: linear;
    -webkit-animation-duration: 5s;
}
</style>
<div id="toolbar07"></div>
<div id="notification07">Show Notification</div>
]]></content:encoded>
			<wfw:commentRss>http://www.fusioncube.net/index.php/css3-basics-an-ugly-expanding-rotating-button-with-just-css/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New AjaxCFCProxy class for Sencha ExtJS</title>
		<link>http://www.fusioncube.net/index.php/new-ajaxcfcproxy-class-for-sencha-extjs</link>
		<comments>http://www.fusioncube.net/index.php/new-ajaxcfcproxy-class-for-sencha-extjs#comments</comments>
		<pubDate>Fri, 15 Apr 2011 15:47:56 +0000</pubDate>
		<dc:creator>Steve Brownlee</dc:creator>
				<category><![CDATA[coldspring]]></category>
		<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[ajaxcfc]]></category>
		<category><![CDATA[ComboBox]]></category>
		<category><![CDATA[ext.data.store]]></category>
		<category><![CDATA[ext.form.combobox]]></category>
		<category><![CDATA[httpproxy]]></category>
		<category><![CDATA[memoryproxy]]></category>
		<category><![CDATA[Sencha]]></category>

		<guid isPermaLink="false">http://www.fusioncube.net/?p=1176</guid>
		<description><![CDATA[In my continued integration of ExtJS and ColdFusion, I've created a new DataProxy sub-class to utilize a predefined AJAX call rather than a URL to a separate page.]]></description>
			<content:encoded><![CDATA[<p>Related Article(s): <a href="http://www.fusioncube.net/index.php/porting-my-coldspring-enabled-ajaxcfc-code-to-extjs">AjaxCFC ported to ExtJS</a></p>
<p>My integration of ExtJS, ajaxCFC and ColdFusion continues.</p>
<p>Note: This is for version 3.3.1. I&#8217;ve also been happily playing around with version 4, but until it&#8217;s officially released, I must continue building with 3.3.1.</p>
<p>Anyway, here&#8217;s what I was trying to solve. When I want to allow users to serach for items from a <a href="http://dev.sencha.com/deploy/dev/docs/?class=Ext.form.ComboBox" target="_blank">ComboBox</a>, I configure a store, and inside the store, I configure an <a href="http://dev.sencha.com/deploy/dev/docs/?class=Ext.data.HttpProxy" target="_blank">Ext.data.HttpProxy</a> to hit a separate ColdFusion page that performs a query and returns the results.</p>
<h3>Standard HttpProxy Method</h3>
<pre class="brush: jscript; title: ; notranslate">
var WidgetStore = new Ext.data.Store({
    proxy: new Ext.data.HttpProxy({
        url: 'liveQueries/widgets.cfm'
    }),
    reader: new Ext.data.JsonReader({
        root: 'data',
        totalProperty:'totalRecords'
    }, Widget)
});
</pre>
<h3>ColdFusion &#8216;Live&#8217; Query</h3>
<pre class="brush: coldfusion; title: ; notranslate">
&lt;cfsetting enablecfoutputonly=&quot;true&quot;&gt;

&lt;cfparam name=&quot;query&quot; default=&quot;&quot;&gt;

&lt;cfquery name=&quot;chargeCodes&quot; datasource=&quot;#getDatasource().getName()#&quot;&gt;
SELECT UNIQUE widget_seq_no, identifier, descr
FROM 	widgets
WHERE 	(REGEXP_LIKE(identifier,&lt;cfqueryparam cfsqltype=&quot;cf_sql_varchar&quot; value=&quot;^#query#&quot;&gt;,'i')
   OR REGEXP_LIKE(descr,&lt;cfqueryparam cfsqltype=&quot;cf_sql_varchar&quot; value=&quot;^#query#&quot;&gt;,'i'))
   AND widget_type_cd='SNAPPYDS'
ORDER BY identifier asc
&lt;/cfquery&gt;

&lt;cfscript&gt;
jsonBean = createobject(&quot;component&quot;,&quot;ajaxCFC.JSON&quot;);
jsonEncodedCriteria = jsonBean.encode(data=chargeCodes, queryFormat=&quot;array&quot;);
writeOutput(jsonEncodedCriteria);
&lt;/coldfusion&gt;

&lt;cfsetting enablecfoutputonly=&quot;false&quot;&gt;
</pre>
<p>I hate this, because I already am using my <a href="http://www.fusioncube.net/index.php/porting-my-coldspring-enabled-ajaxcfc-code-to-extjs" target="_blank">Ext.AjaxCFC</a> class to query my <a href="http://www.coldspringframework.org/" target="_blank">ColdSpring</a> beans asynchronously, so why do I have to set up these standalone ColdFusion pages to performs queries that should be executed in the component?</p>
<p>I decided to take matters into my own hands, and I have to give the ExtJS team props again, because it was easy to accomplish by extending the <a href="http://dev.sencha.com/deploy/dev/docs/?class=Ext.data.MemoryProxy" target="_blank">Ext.data.MemoryProxy</a> class. As you can see, all I need to do is override the doRequest() method to execute Ext.AjaxCFC.request() with the data passed in during initialization.</p>
<h3>Ext.ux.data.AjaxCFCProxy.js</h3>
<pre class="brush: jscript; title: ; notranslate">
Ext.ns('Ext.ux.data');

Ext.ux.data.AjaxCFCProxy = Ext.extend(Ext.data.MemoryProxy, {
   constructor : function(data){
      Ext.ux.data.AjaxCFCProxy.superclass.constructor.call(this);
      this.data = data;
   },
   doRequest : function(action, rs, params, reader, callback, scope, arg){
      this.data.data.query = params.query;
      Ext.AjaxCFC.request({
         bean : this.data.bean,
         method : this.data.method,
         data : this.data.data,
         success: function(rs) {
            var result = reader.readRecords(rs);
            callback.call(scope, result, arg, true);
         },
         error: function(results) {
            Ext.MessageBox.alert('Load Failed', 'Unable to load requested data');
         }
      });
   }
});
</pre>
<h3>New and Improved Combobox for Searching</h3>
<pre class="brush: jscript; title: ; notranslate">
WidgetSearch = new Ext.form.ComboBox({
    minChars:           2,
    loadingText:        '',
    itemSelector:       'div.search-item',
    triggerClass:       'x-form-search-trigger',
    emptyText:          '',
    width:              300,
    listWidth:          0,
    store: new Ext.data.Store({
        // I've extended the base Ext.data.MemoryProxy()
        // class to use the AjaxCFC object for searching
        // instead of having to use a liveQuery. Much cleaner.
        proxy: new Ext.ux.data.AjaxCFCProxy({
            bean    : 'Widget',
            method  : 'search',
            data    : { source_table : 'WIDGET' }
        }),
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.fusioncube.net/index.php/new-ajaxcfcproxy-class-for-sencha-extjs/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Porting my ColdSpring-enabled AjaxCFC code to ExtJS</title>
		<link>http://www.fusioncube.net/index.php/porting-my-coldspring-enabled-ajaxcfc-code-to-extjs</link>
		<comments>http://www.fusioncube.net/index.php/porting-my-coldspring-enabled-ajaxcfc-code-to-extjs#comments</comments>
		<pubDate>Tue, 07 Dec 2010 17:28:33 +0000</pubDate>
		<dc:creator>Steve Brownlee</dc:creator>
				<category><![CDATA[ajaxCFC]]></category>
		<category><![CDATA[coldfusion]]></category>
		<category><![CDATA[coldspring]]></category>
		<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[ajaxcfc]]></category>
		<category><![CDATA[connection]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[Sencha]]></category>

		<guid isPermaLink="false">http://www.fusioncube.net/index.php/porting-my-coldspring-enabled-ajaxcfc-code-to-extjs</guid>
		<description><![CDATA[I&#8217;ve been using the AjaxCFC library for years. It&#8217;s my preferred way of integrating Javascript and ColdFusion via AJAX. I&#8217;ve even modified it from its original form so that my implementation was strictly for integration with jQuery, only returns JSON strings (ignoring WDDX and simple string), and can work with ColdSpring. Now that I&#8217;m a [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been using the <a href="http://ajaxcfc.riaforge.org/index.cfm" target="_blank">AjaxCFC</a> library for years. It&#8217;s my preferred way of integrating Javascript and ColdFusion via AJAX. I&#8217;ve even modified it from its original form so that my implementation was strictly for integration with <a href="http://jquery.com/" target="_blank">jQuery</a>, only returns JSON strings (ignoring WDDX and simple string), and can <a href="http://www.fusioncube.net/index.php/invoking-coldspring-bean-with-ajaxcfc" target="_blank">work with ColdSpring</a>.</p>
<p>Now that I&#8217;m a heavy user of the <a href="http://www.sencha.com/products/js/" target="_blank">Sencha ExtJS framework</a>, I thought it would be useful to port the jQuery.ajaxCFC.js file over to an Ext.AjaxCFC.js file that extended the native <a href="http://dev.sencha.com/deploy/dev/docs/?class=Ext.data.Connection" target="_blank">Ext.data.Connection</a> class and utilized the <a href="http://dev.sencha.com/deploy/dev/docs/?class=Ext.Ajax" target="_blank">Ext.Ajax</a> object.</p>
<p>Took me about half the day, but I finally got a working Ext.AjaxCFC.request() method that uses the same syntax as the $.AjaxCFC() method. For those familiar with the inner workings and code of the jQuery AjaxCFC class, this will look very familiar.</p>
<p>So now I can make AJAX calls using native ExtJS classes, access ColdSpring beans in my application&#8217;s bean factory, or connect directly to any CFC</p>
<h3>Ext.AjaxCFC.js</h3>
<pre class="brush: jscript; title: ; notranslate">
Ext.AjaxCFCConnection = Ext.extend(Ext.data.Connection, {
   data        : null,
   queryFormat : 'array',
   factory     : (typeof(__ajaxConfig) == 'undefined') ? null : __ajaxConfig.beanFactory,
   timeout     : (typeof(__ajaxConfig) == 'undefined') ? 30000 : __ajaxConfig.defaultTimeout,
   url         : __ajaxConfig.url,
   bean        : null,

   request : function(arguments) {
      var params = (typeof(arguments.data) == 'undefined') ? {} : arguments.data;
      arguments.params = {};
      arguments.params['C0-ID']         = (Math.floor(Math.random() * 10001) + &quot;_&quot; + new Date().getTime()).toString(),
      arguments.params['method']        = 'init';
      arguments.params['component']     = arguments.component;
      arguments.params['bean']          = (typeof(arguments.bean) == 'undefined') ? this.bean : arguments.bean;
      arguments.params['factory']       = this.factory;
      arguments.params['C0-METHODNAME'] = arguments.method;
      arguments.params['queryFormat']   = (typeof(arguments.queryFormat) == 'undefined') ? this.queryFormat : arguments.queryFormat;
      arguments.params['C0-PARAM0']     = params;

      arguments.url = this.url + '?method=' + arguments.params['method'];
      arguments.method = 'POST';
      arguments.failure = arguments.error;
      arguments.timeout = this.timeout;

      var ____success = arguments.success;

      arguments.success = function(data) {
         data = data.responseText.replace(/^\s*|\s*$/g, '');

         if (data.substring(0,9) == '__json__:') {
            data = Ext.util.JSON.decode(data.slice(9));
         }
         ____success(data, this);
      };

      if ( params ) {
         if (typeof params != 'string') {
            arguments.params['C0-PARAM0'] = Ext.util.JSON.encode(params);
         }
      }

      Ext.Ajax.request(arguments);
   }
});

Ext.AjaxCFC = new Ext.AjaxCFCConnection();
</pre>
<h3>Usage</h3>
<pre class="brush: jscript; title: ; notranslate">
// Include Ext.AjaxCFC code
&lt;script type=&quot;text/javascript&quot; src=&quot;js/Ext.AjaxCFC.js&quot;&gt;&lt;/script&gt;

// Default configuration properties for the ajaxCFC library
__ajaxConfig = {
   'url':'/myApp/ajaxCFC/ajax.cfc',
   'defaultTimeout':30000,
   'beanFactory':'application.beanFactory'
};

// AjaxCFC call using Ext.data.Connection class
Ext.AjaxCFC.request({
   bean: 'AColdSpringBean',
   method: 'aMethod',
   data: {
      'id': 416198,
      'first_name': 'Steve',
      'last_name': 'Brownlee'
   },
   success: function(details, s){
      DataStore.loadData(details);
   },
   error: function(results){
      Ext.MessageBox.alert('Search Failed', 'An unexpected error occurred. Please try again.');
   }
});
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.fusioncube.net/index.php/porting-my-coldspring-enabled-ajaxcfc-code-to-extjs/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WPF vs Flex: Which is better?</title>
		<link>http://www.fusioncube.net/index.php/wpf-vs-flex-which-is-better</link>
		<comments>http://www.fusioncube.net/index.php/wpf-vs-flex-which-is-better#comments</comments>
		<pubDate>Thu, 04 Nov 2010 20:25:55 +0000</pubDate>
		<dc:creator>Steve Brownlee</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[wpf]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[enterprise]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[silverlight]]></category>
		<category><![CDATA[star trek]]></category>

		<guid isPermaLink="false">http://www.fusioncube.net/index.php/wpf-vs-flex-which-is-better</guid>
		<description><![CDATA[Now that I have some solid WPF coding under my belt, I felt like speaking out a little about how it compares, in my mind, to developing in Flex and Actionscript. First, and foremost, I have to say [BINDABLE] FTW!! That one thing alone sums up the rest of my ramblings below, and you can [...]]]></description>
			<content:encoded><![CDATA[<p>Now that I have some solid WPF coding under my belt, I felt like speaking out a little about how it compares, in my mind, to developing in Flex and Actionscript.</p>
<p>First, and foremost, I have to say [BINDABLE] FTW!! That one thing alone sums up the rest of my ramblings below, and you can probably skip the rest of this article if you wish after you read the next opinion.</p>
<p>The cultures of Adobe and Microsoft are best reflected in how you accomplish any development feat &#8211; Adobe did its best to make sure the &#8220;little stuff&#8221; is handled behind the scenes so that development can be done as quickly as possible, while Microsoft assumes absolutely nothing and requires you to write dozens of lines of code to achieve even the simplest of development goals.</p>
<h3>Microsoft World</h3>
<p>If you want absolute, iron-gripped control over every single feature of your application, and want to hand-craft almost every piece of customization or abstraction that is needed, then the Microsoft stack is definitely for you &#8211; the uber geek, the one who takes tremendous pride in his mastery of every aspect of his application.</p>
<p>Unfortunately, WPF still has a little ways to go to catch up with the power and features of Flex. Of course, WPF is for desktop apps and runs as a native assembly, and doesn&#8217;t need a third party installation that is, admittedly, more bloated and use a bit more memory.</p>
<h3>Adobe World</h3>
<p>If you want to focus on functionality, and get products/updates released as quickly as possible, and could care less what magic goes on when you bind a Collection to a DataGrid, then the Adobe stack is for you &#8211; the quasi geek, the one who needs to do the design, the architecting, the development and the support, and doesn&#8217;t have time to spend hours hand-crafting simple tasks that the software should obviously be doing for you.</p>
<p>However, I think the folks at Adobe heaved a huge sigh of relief when Microsoft announced that Silverlight&#8217;s focus will now be for mobile development only. Given time, Silverlight would have been a superior product to Flex (on Windows).</p>
<h3>My World</h3>
<p>For me, I much prefer the Adobe ideology. Perhaps it&#8217;s the Star Trek geek in me. My philosophy when it comes to development stems from years of watching Star Trek: The Next Generation.&#160; Does that make me an uber geek anyways?&#160; Perhaps.</p>
<p>When critical software and systems needed to be modified on the Enterprise, did you see Jordi sit down at a computer terminal, bring up a development environment and figure out how to expose the correct property change event, make sure it implemented the correct interface, open another file to map the property to the system, and then open another file to make sure it looked right (all in a proprietary language that NO ONE ELSE uses)?</p>
<p>No. By the 25th century, they finally get it. Superior engineers &#8211; whether they work on software, or warp engines &#8211; want the basic tasks done for them if possible.&#160; It saves time, and makes work a lot more fun. If I can add a new column to a dataset and have it displayed in my interface in 1 minute, then I&#8217;m all for it. </p>
<p>Sure, there are still people in the world who would rather take the 30 minutes to do it &#8220;right&#8221; by writing every single line of code needed to perform the task.</p>
<p>Sorry, not me.&#160; I got shit to do.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fusioncube.net/index.php/wpf-vs-flex-which-is-better/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>How to define a function</title>
		<link>http://www.fusioncube.net/index.php/how-to-define-a-function</link>
		<comments>http://www.fusioncube.net/index.php/how-to-define-a-function#comments</comments>
		<pubDate>Thu, 12 Aug 2010 17:16:27 +0000</pubDate>
		<dc:creator>Steve Brownlee</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[errata]]></category>
		<category><![CDATA[languages]]></category>
		<category><![CDATA[conventions]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.fusioncube.net/?p=980</guid>
		<description><![CDATA[I was writing some code this morning for a demo application, and I kept getting an error in one part of my Flex code and I just couldn’t figure out what the hell was going on. Turned out, it was a symptom of how many different function declaration conventions I have to deal with. It [...]]]></description>
			<content:encoded><![CDATA[<p>I was writing some code this morning for a demo application, and I kept getting an error in one part of my Flex code and I just couldn’t figure out what the hell was going on. Turned out, it was a symptom of how many different function declaration conventions I have to deal with.</p>
<p>It got me thinking about how many different ways do I write a function in one day. Let’s see…</p>
<pre class="code"><code>-=  Java and C#  =-
public &lt;type&gt; myFunction([args])...

-=  Javascript  =-
function myFunction([args])...

-=  ColdFusion  =-
public &lt;type&gt; function myFunction([args])...

-=  Flex  =-
public function myFunction([args]):&lt;type&gt;</code></pre>
<p>No wonder I confused from time to time.</p>
<p><br/><br/><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fusioncube.net/index.php/how-to-define-a-function/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Fixing the Worst Hack of my Career</title>
		<link>http://www.fusioncube.net/index.php/fixing-the-worst-hack-of-my-career</link>
		<comments>http://www.fusioncube.net/index.php/fixing-the-worst-hack-of-my-career#comments</comments>
		<pubDate>Tue, 20 Jul 2010 13:35:42 +0000</pubDate>
		<dc:creator>Steve Brownlee</dc:creator>
				<category><![CDATA[career]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[rendering]]></category>
		<category><![CDATA[Sencha]]></category>

		<guid isPermaLink="false">http://www.fusioncube.net/index.php/fixing-the-worst-hack-of-my-career</guid>
		<description><![CDATA[Several years ago, I designed and developed an application whose scope was far greater than the business folks imagined. Therefore, the timeline was far more compressed than I would have liked. I cut a lot of corners in that project in order to get it out in time, but there was only one hack that [...]]]></description>
			<content:encoded><![CDATA[<p>Several years ago, I designed and developed an application whose scope was far greater than the business folks imagined. Therefore, the timeline was far more compressed than I would have liked.</p>
<p>I cut a lot of corners in that project in order to get it out in time, but there was only one hack that has haunted me since I reluctantly pushed it into production: I returned a large HTML string from an AJAX call and inserted it directly into the DOM.</p>
<p>It was far easier, at the time, to simply loop through the highly complex query structures in my class and build the HTML structure there rather than build a JSON string and use a JavaScript parsing class to build the HTML on the browser.</p>
<p>Well, in a little twist of fate, there was an update scheduled for this application; and this time I had some extra time as the release date got pushed back a couple of weeks. Using that to my advantage, I finally was able to fine-tune that entire mechanism, including:</p>
<li><font color="#444640">Passing a vastly more compressed JSON string back to the interaction layer.</font> </li>
<li><font color="#444640">Using a new HTMLRender class in JavaScript to parse the JSON, and then build and insert the HTML into the DOM.</font> </li>
<li><font color="#444640">Reduced the number of hits on the database by retrieving all information in one, massive query instead of dozens of smaller ones.</font> </li>
<li>Increased the usage of Sencha ExtJS in the layout to make it more attractive.</li>
<p><font color="#4c4c4c">All in all, this particular section of the application now executes about 70% faster, is less resource intensive on the database, and is easier to use.</font></p>
<p><font color="#4c4c4c">It’s a big monkey off my back. Not to mention that I always enjoy going back to code from previous projects and seeing how I can improve upon it since I’m always learning new tricks.</font></p>
<li>
</li>
]]></content:encoded>
			<wfw:commentRss>http://www.fusioncube.net/index.php/fixing-the-worst-hack-of-my-career/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sencha ExtJS Drag &amp; Drop Target Detection</title>
		<link>http://www.fusioncube.net/index.php/extjs-drag-drop-target-detection</link>
		<comments>http://www.fusioncube.net/index.php/extjs-drag-drop-target-detection#comments</comments>
		<pubDate>Tue, 15 Jun 2010 13:49:45 +0000</pubDate>
		<dc:creator>Steve Brownlee</dc:creator>
				<category><![CDATA[design]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[recommended]]></category>
		<category><![CDATA[drag and drop]]></category>
		<category><![CDATA[findRowIndex]]></category>
		<category><![CDATA[notifyDrop]]></category>
		<category><![CDATA[Sencha]]></category>
		<category><![CDATA[target element]]></category>

		<guid isPermaLink="false">http://www.fusioncube.net/index.php/extjs-drag-drop-target-detection</guid>
		<description><![CDATA[I wanted to enhance the experience on one of my applications a bit since we’re doing a release in a few weeks. I took the opportunity to implement some more ExtJS awesomeness on many of the tools inside the application, and on one in particular, users are able to create 1-1 mappings between two sets [...]]]></description>
			<content:encoded><![CDATA[<p>I wanted to enhance the experience on one of my applications a bit since we’re doing a release in a few weeks. I took the opportunity to implement some more ExtJS awesomeness on many of the tools inside the application, and on one in particular, users are able to create 1-1 mappings between two sets of data.</p>
<p>I decided to tinker around with the drag &amp; drop capabilities of ExtJS and originally had the user click a button, which created a window, into which the user could drag an item from each data set and create the mapping. It worked very well and was a much better interaction than the previous version.</p>
<p>I showed it to a colleague, and he actually thought of a way to make it better. Why not simply allow the user to click and drag an item from one grid to the item on the other grid to which she wanted to map it? Even better. However, when I started to think about the code I would need, I couldn’t think of how to determine which item in the “drop” data grid was the actual target.</p>
<p>Let’s say you have automobiles in one grid, and colors in another. You could let the user drag a color from the second grid onto a specific model of vehicle on the first, but the trick is determining onto which model the user dropped the color.</p>
<p><a href="http://www.fusioncube.net/wp-content/uploads/2010/06/clip_image001.png"><img title="clip_image001" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="404" alt="clip_image001" src="http://www.fusioncube.net/wp-content/uploads/2010/06/clip_image001_thumb.png" width="505" border="0" /></a></p>
<p>If I was able to detect the model, I could then show a new window with the requested mapping so that the user could verify her choice.</p>
<p><a href="http://www.fusioncube.net/wp-content/uploads/2010/06/clip_image0015.png"><img title="clip_image001[5]" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="257" alt="clip_image001[5]" src="http://www.fusioncube.net/wp-content/uploads/2010/06/clip_image0015_thumb.png" width="493" border="0" /></a></p>
<p>After some digging around, I discovered that the Grid object’s view has a <em>findRowIndex()</em> method which accepts an Element as an argument. Since the <em>notifyDrop</em> event provides the e.target() property, that was all I needed. I could get the row index, and then retrieve the corresponding item from the data store.</p>
<pre class="code"><code>// Determine the row on which the color was dropped
targetRow = TargetGrid.getView().findRowIndex(e.target);
targetDataItem = TargetGrid.store.data.items[targetRow];</code></pre>
<p>You can check out the sample code that shows how to determine the target grid element on my <a href="http://www.fusioncube.net/examples/ddTarget.html" target="_blank">Drag &amp; Drop Target Detection</a> example page.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fusioncube.net/index.php/extjs-drag-drop-target-detection/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>I could care less what you say&#8230;</title>
		<link>http://www.fusioncube.net/index.php/i-could-care-less-what-you-say</link>
		<comments>http://www.fusioncube.net/index.php/i-could-care-less-what-you-say#comments</comments>
		<pubDate>Fri, 04 Jun 2010 05:00:26 +0000</pubDate>
		<dc:creator>Steve Brownlee</dc:creator>
				<category><![CDATA[career]]></category>
		<category><![CDATA[design patterns]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[errata]]></category>
		<category><![CDATA[antipimp]]></category>
		<category><![CDATA[asshat]]></category>
		<category><![CDATA[IoC]]></category>
		<category><![CDATA[just make it work]]></category>
		<category><![CDATA[ORM]]></category>
		<category><![CDATA[personality]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://www.fusioncube.net/index.php/i-could-care-less-what-you-say</guid>
		<description><![CDATA[My inspiration for this article is a conference call I had today with some teammates on a project at work. As usual, there&#8217;s a couple application developers, the project manager, throw in a couple QA folks, a BA, etc. This is a complementary article to Antipimp&#8217;s &#8220;I could care less what they say.&#8221;. Read that [...]]]></description>
			<content:encoded><![CDATA[<p>My inspiration for this article is a conference call I had today with some teammates on a project at work. As usual, there&#8217;s a couple application developers, the project manager, throw in a couple QA folks, a BA, etc.</p>
<p>This is a complementary article to Antipimp&#8217;s <a href="http://theantipimp.com/?p=1908">&#8220;I could care less what they say.&#8221;</a>. Read that first if you have a moment, then come back here and finish up.&#160; Take your time, it&#8217;s worth it.&#160; </p>
<p>.</p>
<p>.</p>
<p>Now, let&#8217;s talk about the other side of the fence. </p>
<p>Once you get the awesome job that Asshat Antipimp lined up for you, trust me when I say that no one gives a flip how many lines of code you wrote, or what awesome application framework you used. They care that you solved their problem and that it won&#8217;t break in a month. </p>
<p>Software folks are notorious for their. </p>
<ul>
<li>Oddball personalities </li>
<li>A penchant for useless, esoteric knowledge of science fiction and fantasy literature </li>
<li>Ability to completely disregard all social convention </li>
<li>Expediency in stinking up a room </li>
<li>Many other curious behaviors..</li>
</ul>
<p>My least favorite trait of many of my colleagues is their mistaken belief that other people give a shit about the technology. Well, actually, they do, but only when it doesn&#8217;t work. Things can be sunshine and roses and kisses and hugs for years, but trust me, when you write an application that doesn&#8217;t work, then be prepared to kiss your technology goodbye &#8211; or end up on the street.</p>
<p>The 99% of the world that doesn&#8217;t know how to write a ternary operation sees software as a means to an end, and that&#8217;s it folks. Writing software is &#8220;magic&#8221; to them and I hate to see application developers exploit that fact.</p>
<p align="left">They aren&#8217;t amazed by your ability to use an ORM package.</p>
<p align="left">They don&#8217;t care that you squeezed a few more cool aspects into your IoC architecture.</p>
<p align="left">Then even don&#8217;t care that you&#8217;ve taken the painstaking effort to apply industry-standard usability practices to make it easier for them to work with it.</p>
<p>They. just. want. it. to. work.</p>
<p>Therefore, if you find yourself taking 20 minutes to explain to the eyes-glazed-over, bored-beyond-tears business folks how awesome you are, then it&#8217;s time to shut the hell up, sit down, and let them bicker about the fact that you used the wrong shade of blue in the application header.</p>
<p>Your job is to solve problems and make the lives of other easier. They don&#8217;t understand what you do, and no matter how long you try to explain it to them, they&#8217;ll still only care about having a <a href="http://www.funnyjunk.com/funny_pictures/112243/Web+design+from+Hell/">picture of their dog on their web site</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fusioncube.net/index.php/i-could-care-less-what-you-say/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

