<?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>Jonathan Grimes</title>
	<atom:link href="http://jonathangrimes.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://jonathangrimes.com</link>
	<description>blog, sandbox, etc...</description>
	<lastBuildDate>Sun, 05 Feb 2012 06:42:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Sassy</title>
		<link>http://jonathangrimes.com/2012/02/sassy/</link>
		<comments>http://jonathangrimes.com/2012/02/sassy/#comments</comments>
		<pubDate>Sun, 05 Feb 2012 06:08:04 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[Random]]></category>

		<guid isPermaLink="false">http://jonathangrimes.com/?p=622</guid>
		<description><![CDATA[<p>A few weeks ago I started using SCSS, the Sassy CSS dialect that makes writing styles a bit nicer. Last week I built out a site and didn&#8217;t have it to work with, and immediately noticed. I kept trying to nest my selectors… doh!</p> <p>I recommend anyone writing an application with a lot of styles [...]]]></description>
			<content:encoded><![CDATA[<p>A few weeks ago I started using SCSS, the Sassy CSS dialect that makes writing styles a bit nicer.  Last week I built out a site and didn&#8217;t have it to work with, and immediately noticed.  I kept trying to nest my selectors… doh!</p>
<p>I recommend anyone writing an application with a lot of styles to use <a href="http://www.sass-lang.com">Sass (SCSS)</a>, or another clever css extension. :)</p>
]]></content:encoded>
			<wfw:commentRss>http://jonathangrimes.com/2012/02/sassy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Help stop SOPA/PIPA</title>
		<link>http://jonathangrimes.com/2012/01/help-stop-sopapipa/</link>
		<comments>http://jonathangrimes.com/2012/01/help-stop-sopapipa/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 02:27:01 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[Random]]></category>

		<guid isPermaLink="false">http://jonathangrimes.com/?p=604</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<div class="ModernMediaTweetShortcode"><blockquote class="twitter-tweet tw-align-center" width="500"><p>Help Stop SOPA/PIPA: <a href="http://t.co/yI8Tq59j" title="http://wp.me/pZhYe-zl">wp.me/pZhYe-zl</a></p>&mdash; WordPress(@WordPress) <a href="https://twitter.com/WordPress/status/156817976962723840" data-datetime="2012-01-10T19:21:33+00:00">January 10, 2012</a></blockquote></div>
<div class='embed-vimeo' style='text-align:center;'><iframe src='http://player.vimeo.com/video/31100268' width='500' height='400' frameborder='0'></iframe></div>
]]></content:encoded>
			<wfw:commentRss>http://jonathangrimes.com/2012/01/help-stop-sopapipa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fighting a Lost Cause</title>
		<link>http://jonathangrimes.com/2011/12/fighting-a-lost-cause/</link>
		<comments>http://jonathangrimes.com/2011/12/fighting-a-lost-cause/#comments</comments>
		<pubDate>Sat, 31 Dec 2011 23:22:08 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Random]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[DMCA]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[law]]></category>
		<category><![CDATA[legislation]]></category>
		<category><![CDATA[media]]></category>
		<category><![CDATA[movies]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[piracy]]></category>
		<category><![CDATA[Protect-IP]]></category>
		<category><![CDATA[SOPA]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://jonathangrimes.com/?p=587</guid>
		<description><![CDATA[<p>With all the pending legislation like Protect-IP, SOPA and the DMCA before it, I just have to wonder how long we as humans will go until we realize you can&#8217;t control something that&#8217;s not yours to control. So long as people want things there will be theft, piracy and what have you.</p> <p>The intent of [...]]]></description>
			<content:encoded><![CDATA[<p>With all the pending legislation like  Protect-IP, SOPA and the DMCA before it, I just have to wonder how long we as humans will go until we realize you can&#8217;t control something that&#8217;s not yours to control. So long as people want things there will be theft, piracy and what have you.</p>
<p>The intent of these legislations (publicly at least) is to stop digital piracy and stimulate innovation [insert "Road to Hell" quote here]. So how about instead of making more laws and making more things illegal, how about we go in the other direction.<span id="more-587"></span> The industry is still thinking from the classical sense that distribution is expensive, they&#8217;re restricting us from the content based on geography and date/time. An American can&#8217;t watch a BBC stream from the BBC&#8217;s website because their region is &#8216;wrong&#8217; which, for a determined fan, forces their hand and makes them seek alternative sources. So, let&#8217;s drop this baloney and lower the barrier to obtain the music, movies and media that so many have resorted to stealing.</p>
<p>I personally love what Spotify has done to music.  Any and all songs are available at any time.  I gladly pay a $10/mo premium to cache songs and playlists on my laptop and phone for offline listening (as well as elimination of the advertisements the free service uses to cover costs). That is the future.</p>
<p>Netflix could easily do this for movies and TV, however in order for this to obtain the &#8220;Spotify-like nirvana&#8221; for video, <strong><em>all</em></strong> movies and TV shows have to be available at all times; No windows of availability, no regions and certainly no bullshit licensing quibbles.</p>
<p>Let&#8217;s face it, the more the Media and Law Makers put the squeeze on piracy the more inconvenient and painful they make it for legitimate customers, while those who pirate and hack don&#8217;t feel it at all. They just crack the code and move on. To make it worse legitimate customers are incentivized to pirate so they don&#8217;t have to jump through all the hoops.</p>
<span style="text-align:center; display: block;"><a href="http://jonathangrimes.com/2011/12/fighting-a-lost-cause/"><img src="http://img.youtube.com/vi/GzrlI6Ybxxk/2.jpg" alt="" /></a></span>
]]></content:encoded>
			<wfw:commentRss>http://jonathangrimes.com/2011/12/fighting-a-lost-cause/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web App Developer Resources</title>
		<link>http://jonathangrimes.com/2011/12/web-app-developer-resources/</link>
		<comments>http://jonathangrimes.com/2011/12/web-app-developer-resources/#comments</comments>
		<pubDate>Fri, 30 Dec 2011 06:40:19 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Random]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[links]]></category>
		<category><![CDATA[pointers]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[resources]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://jonathangrimes.com/?p=562</guid>
		<description><![CDATA[<p>A few friends and acquaintances have asked me for some pointers and resources for learning how to become a web app developer.  Since this has started to become a rather frequent request, I thought I&#8217;d share some thoughts here. I&#8217;ll probably update the links as I come across more, or decide I don&#8217;t like some [...]]]></description>
			<content:encoded><![CDATA[<p>A few friends and acquaintances have asked me for some pointers and resources for learning how to become a web app developer.  Since this has started to become a rather frequent request, I thought I&#8217;d share some thoughts here. I&#8217;ll probably update the links as I come across more, or decide I don&#8217;t like some of the ones I have.  I&#8217;m pretty picky about where I send people, so expect changes and/or additions.<span id="more-562"></span></p>
<h4>Being a Software Developer</h4>
<p>There is more to creating Web sites and applications than just drawing them.  The creative vision may, and most likely, not originate from the developer who brings it to life.  It&#8217;s our job, as developers, to take an idea and build it.  Many times, the vision brought before us is just that: an idea.  We have to take it and architect the structures and logic, to turn the idea into reality.</p>
<p>Under the pretty layer of the final product is a collection of technologies and languages that, when brought together, make some serious awesome.  One cannot compose a fugue without understanding scales and chords.  A poet cannot create a sonnet without knowing syntax. We cannot develop an application or Web site without at least some basic fundamentals.</p>
<p>First and foremost, I think you should have a very good grasp of symbolism.  If you cannot think abstractly, or apply symbolic scenarios then this will be a fairly complicated venture.  Programming is chock full of text that symbolizes structures, instruction and math.  A background in mathematics is highly recommended but it is not required. </p>
<p>I would also recommend knowing how the physical components you intend to interact with work. Such as the processors, memory, storage, and the network stack down to the physical layer.  Not required but makes life easier, in my opinion. Don&#8217;t let it deter you.</p>
<p>Next, for specifically Web App development, I recommend acquainting yourself with the core technologies of the Web itself: XML(HTML), CSS, and JavaScript.</p>
<h4>HTML / CSS / JavaScript</h4>
<p>There are three main things to master in web development.  HTML will be the frame for which we build on. CSS is what defines the visual/physical/placement properties of the elements in the Document Object Model (DOM). JavaScript provides the application logic/behavior of the web app we build.</p>
<h5>HTML</h5>
<p>There are many <a href="http://www.w3.org/TR/html4/index/elements.html">elements available</a> but most are left unused because for the fact that we use CSS to define meaning and presentation.  Beyond the obligatory <a href="http://www.w3.org/QA/2002/04/valid-dtd-list.html">doc-type</a>, <a href="http://www.w3.org/TR/html4/struct/global.html#edef-HTML">root</a>, <a href="http://www.w3.org/TR/html4/struct/global.html#edef-TITLE">title</a>, <a href="http://www.w3.org/TR/html4/struct/global.html#edef-META">meta</a>, <a href="http://www.w3.org/TR/html4/struct/links.html#edef-LINK">link</a>, <a href="http://www.w3.org/TR/html4/present/styles.html#edef-STYLE">style</a>, <a href="http://www.w3.org/TR/html4/interact/scripts.html#edef-SCRIPT ">script</a> and <a href="http://www.w3.org/TR/html4/struct/global.html#edef-BODY">body</a> tags, the vast majority of web application user interfaces almost exclusively use: <a href="http://www.w3.org/TR/html4/struct/global.html#edef-DIV">div</a>, <a href="http://www.w3.org/TR/html4/struct/global.html#edef-SPAN">span</a>, <a href="http://www.w3.org/TR/html4/struct/lists.html#edef-OL">ol</a>, <a href="http://www.w3.org/TR/html4/struct/lists.html#edef-UL">ul</a>, <a href="http://www.w3.org/TR/html4/struct/lists.html#edef-LI">li</a>, <a href="http://www.w3.org/TR/html4/struct/objects.html#edef-IMG">img</a> and <a href="http://www.w3.org/TR/html4/struct/links.html#edef-A">a</a> tags.</p>
<p>There are a lot of tutorials over HTML and making static web pages. Making WebApps depends on the foundations of that knowledge, though Web Applications are dynamic and have different design constraints. Keep that in mind and always think for yourself.</p>
<p><em>Remember:</em> HTML is XML. Treat it as such. Do not mix presentation with data/content. If you are using formatting and presentational HTML tags (such as <a href="http://www.w3.org/TR/html4/present/graphics.html#edef-FONT">font</a>, <a href="http://www.w3.org/TR/html4/struct/text.html#edef-BR">br</a>, <a href="http://www.w3.org/TR/html4/struct/text.html#edef-P">p</a>, <a href="http://www.w3.org/TR/html4/present/graphics.html#edef-B">b</a>, <a href="http://www.w3.org/TR/html4/present/graphics.html#edef-I">i</a>, <a href="http://www.w3.org/TR/html4/present/graphics.html#edef-S">s</a>, <a href="http://www.w3.org/TR/html4/present/graphics.html#edef-U">u</a>, <a href="http://www.w3.org/TR/html4/struct/text.html#edef-STRONG">strong</a> etc) you are doing it wrong — or at least making it too hard.  With CSS, any element can look/be anything.</p>
<h5>CSS</h5>
<p>CSS is what you will use to make it pretty. It&#8217;s crucial to know and <em>master</em> this. Web App User Interfaces that don&#8217;t fully utilize this will suffer. There are even some behaviors and interactions that are nothing but CSS rules.</p>
<h5>JavaScript</h5>
<p>JavaScript is <em>the</em> client side programming language of web apps. Your back-end can be written in anything your heart desires, even <a href="http://nodejs.org">JavaScript with node.js</a>, but your code that runs on the client will be JavaScript, one way or another.  You can get really deep into this, but don&#8217;t be overwhelmed. There are some really good resources that introduce it in a very nice way.  </p>
<p>There are other languages available on the client side, but none of them are completely cross-platform or in the case of <a href="https://developers.google.com/native-client">Native</a> <a href="http://en.wikipedia.org/wiki/Google_Native_Client">Client</a> it may not be ready for prime time across all platforms.</p>
<p><strong>Note:</strong> Most of the information on the w3schools site is correct, but there have been very public errors from time to time. Any resource could have errors.  If you try something and it doesn&#8217;t work, cross check it.  I personally love <a href="http://stackoverflow.com">Stack Overflow</a> (and all related stack sites) as well as <a href="http://www.quirksmode.org">QuirksMode.org</a> &#8211; a great cross-browser compatibility resource.</p>
<hr />
<ul>
<li>CSS Links:<br />
  * <a href="http://www.cssbasics.com/introduction-to-css">CSS Basics&#8217; Introduction to CSS</a><br />
  * <a href="http://www.mezzoblue.com/zengarden/alldesigns">CSS Zen Garden</a><br />
  * <a href="http://www.zenelements.com/blog/css3-introduction">Zen Elements&#8217; CSS3 introduction</a><br />
  * <a href="http://www.html5rocks.com/en">HTML5 Rocks</a><br />
  * <a href="http://www.alistapart.com">A List Apart</a><br />
  * <a href="http://cssbeauty.com">CSS Beauty</a><br />
  * <a href="http://www.css3.info">CSS3 Info</a></li>
<li>HTML<br />
  * <a href="http://www.w3.org/MarkUp/Guide">Getting started with HTML</a><br />
  * <a href="http://www.w3schools.com/html/html_intro.asp">HTML Introduction</a> &#8211; w3schools<br />
  * <a href="http://www.w3schools.com/htmldom/dom_intro.asp">HTML DOM Introduction</a> &#8211; w3schools<br />
  * <a href="http://html5boilerplate.com">HTML5 Boilerplate</a></li>
<li>JavaScript Resources:<br />
  * <a href="http://howtonode.org/object-graphs">Learning Javascript with Object Graphs</a><br />
  * <a href="http://howtonode.org/object-graphs-2">Learning Javascript with Object Graphs (Part 2)</a><br />
  * <a href="http://howtonode.org/object-graphs-3">Learning Javascript with Object Graphs (Part 3)</a><br />
  * <a href="https://developer.mozilla.org/en/JavaScript">Mozilla.org Developer site</a><br />
  * <a href="http://www.w3schools.com/js">w3schools Intorduction to JavaScript</a></li>
<li>JavaScript Libraries/Frameworks:<br />
  * <a href="http://jquery.com">jQuery</a><br />
  * <a href=" http://www.learningjquery.com">Learning jQuery</a><br />
  * <a href="http://www.prototypejs.org">Prototype.js</a><br />
  * <a href="http://script.aculo.us">Script.aculo.us</a> &#8211; built on top of prototype.js<br />
  * <a href="http://www.sencha.com/products/extjs">ExtJS</a><br />
  * <a href="http://cappuccino.org">Cappuccino</a></li>
<li>Generaly Awesome Links:<br />
  * <a href="http://stackoverflow.com">Stack Overflow</a><br />
  * <a href="http://www.quirksmode.org">QuirksMode.org</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://jonathangrimes.com/2011/12/web-app-developer-resources/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New article!</title>
		<link>http://jonathangrimes.com/2011/11/new-article/</link>
		<comments>http://jonathangrimes.com/2011/11/new-article/#comments</comments>
		<pubDate>Tue, 01 Nov 2011 05:42:54 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[Jasmine]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[Unit testing]]></category>

		<guid isPermaLink="false">http://jonathangrimes.com/2011/11/new-article/</guid>
		<description><![CDATA[<p>If you liked my previous posts, then head over to the ExtJS docs for my more in depth tutorial on testing applications written with ExtJS using Jasmine: <a href="http://docs.sencha.com/ext-js/4-0/#!/guide/testing">http://docs.sencha.com/ext-js/4-0/#!/guide/testing</a></p>]]></description>
			<content:encoded><![CDATA[<p>If you liked my previous posts, then head over to the ExtJS docs for my more in depth tutorial on testing applications written with ExtJS using Jasmine: <a href="http://docs.sencha.com/ext-js/4-0/#!/guide/testing">http://docs.sencha.com/ext-js/4-0/#!/guide/testing</a></p>
]]></content:encoded>
			<wfw:commentRss>http://jonathangrimes.com/2011/11/new-article/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jasmine &amp; ExtJS&#8217; MVC: A Love Story</title>
		<link>http://jonathangrimes.com/2011/10/jasmine-extjs-mvc-a-love-story/</link>
		<comments>http://jonathangrimes.com/2011/10/jasmine-extjs-mvc-a-love-story/#comments</comments>
		<pubDate>Fri, 07 Oct 2011 01:17:18 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[Ext (JavaScript library)]]></category>
		<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[Jasmine]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Selenium]]></category>
		<category><![CDATA[Sencha]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Unit testing]]></category>
		<category><![CDATA[User interface]]></category>

		<guid isPermaLink="false">http://jonathangrimes.com/?p=489</guid>
		<description><![CDATA[<p>I&#8217;ve been looking for a way to perform <a class="zem_slink" title="Unit testing" href="http://en.wikipedia.org/wiki/Unit_testing" rel="wikipedia">unit tests</a> on my new project&#8217;s <a class="zem_slink" title="User interface" href="http://en.wikipedia.org/wiki/User_interface" rel="wikipedia">UI</a> code. The projects I worked on before were practically prepackaged and handed to me — Java has a pretty mature testing and build suite: <a class="zem_slink" title="JUnit" href="http://junit.sourceforge.net" rel="homepage">JUnit</a> and [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been looking for a way to perform <a class="zem_slink" title="Unit testing" href="http://en.wikipedia.org/wiki/Unit_testing" rel="wikipedia">unit tests</a> on my new project&#8217;s <a class="zem_slink" title="User interface" href="http://en.wikipedia.org/wiki/User_interface" rel="wikipedia">UI</a> code. The projects I worked on before were practically prepackaged and handed to me — Java has a pretty mature testing and build suite: <a class="zem_slink" title="JUnit" href="http://junit.sourceforge.net" rel="homepage">JUnit</a> and <a class="zem_slink" title="Apache Maven" href="http://maven.apache.org" rel="homepage">Maven</a>. My current project is 99% <a class="zem_slink" title="JavaScript" href="http://en.wikipedia.org/wiki/JavaScript" rel="wikipedia">JavaScript</a>, and there isn&#8217;t a defacto <a class="zem_slink" title="Test suite" href="http://en.wikipedia.org/wiki/Test_suite" rel="wikipedia">test suite</a> for that. Googling around has led me to several testing tools, such as Selenium and JSpec. I even began digging deeper into some of them, but then I discovered Jasmine, and that <a class="zem_slink" title="Sencha" href="http://www.sencha.com" rel="homepage">Sencha</a> developers use Jasmine. It was a sign.<span id="more-489"></span></p>
<p>So, with Jasmine downloaded, I began playing with it and trying its examples. I loved it. Pure JavaScript solution with no external dependencies; I could simply hit the test page and off the tests go. I&#8217;m sure with a little more digging it would work in a offline/build/cli environment with PhantomJS or node.js. The only hurdle I had left was how (and what) I wanted to test. Not every file/class in this UI stand alone, or the application state. How would I want to simulate the server? So many things to sort out before I was satisfied that I had a solution.</p>
<p>Then I had an idea. What if the tests ran under their own version of Ext.Application? My main app.js file was simple: it defined the &#8220;Application&#8221;, its namespace, its path, the controllers and the launch method, which, for me, only initiated the login sequence. Basically, my idea was to copy the app.js to app-test.js, then copy index.html to test.html (this application is using the ExtJS4 MVC project layout).</p>
<p>So, here&#8217;s my folder structure. It will look a little familiar as I&#8217;ve based this example on the documentation&#8217;s example layout.</p>
<div id="attachment_491" class="wp-caption alignleft" style="width: 194px"><a href="http://jonathangrimes.com/wp-content/uploads/2011/10/folder_layout.png" rel="lightbox[489]"><img class="size-full wp-image-491 " title="Porject folder structure with Jasmine" src="http://jonathangrimes.com/wp-content/uploads/2011/10/folder_layout.png" alt="" width="184" height="376" /></a><p class="wp-caption-text">Folder Structure</p></div>
<p>So, we have the jasmine package under app-test/lib, and mock data under app-test/mock and all the test suites (&#8220;specs&#8221;) under app-test/specs.</p>
<p>index.html and test.html look very similar, except that test doesn&#8217;t include the loading markup and loads the jasmine scripts and app-test.js instead of app.js.</p>
<p>Those familiar with either <a class="zem_slink" title="Ext (JavaScript library)" href="http://www.sencha.com/products/js/" rel="homepage">ExtJS</a> or Jasmine can probably see where I&#8217;m going with this. Jasmine doesn&#8217;t start automatically. It has a bootstrap method that you call to run the tests and show the output. The Jasmine examples always show the test-runner.html with a script block in the body that runs as soon as the browser hits that block. This isn&#8217;t what we want for this application. Not all of the resources and code will be loaded, at least not consistently at this point. So we have the app-test.js define the Application in &#8220;test mode.&#8221; Maybe a visual is better in this case.</p>
<p>This is the main entry point and the app.js.</p>
<pre class="brush: xml; title: index.html; notranslate">
&lt;html&gt;

&lt;head&gt;
    &lt;title&gt;App&lt;/title&gt;
    &lt;link rel=&quot;shortcut icon&quot; href=&quot;resources/favicon.ico&quot;&gt;
    &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;extjs/resources/css/ext-all-gray.css&quot;&gt;
    &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;resources/css/main.css&quot;&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div id=&quot;loading-mask&quot;&gt;&lt;/div&gt;
&lt;div id=&quot;loading&quot;&gt;
    &lt;div class=&quot;loading-indicator&quot;&gt;Loading...&lt;/div&gt;
&lt;/div&gt;

&lt;script type=&quot;text/javascript&quot; src=&quot;extjs/ext-debug.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;app.js&quot;&gt;&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>&nbsp;</p>
<pre class="brush: jscript; title: app.js; notranslate">
Ext.application({
    name: 'App',
    appFolder: 'app',

    controllers: [
        'Session'
        /*... all your controllers here...
         * they will include your views, models, etc
         */
    ],

    launch: function() {
        setTimeout(
            function clearMask(){
                Ext.get('loading').remove();
                Ext.get('loading-mask').fadeOut({remove:true});
                resizeBlocker(Ext.Element.getViewWidth());
            },
            100);

        /* This is this application's kickstart... this shows a login
         * form if not logged in and opens the Viewport once logged in.
         * If a login/session is detected on reload, it will just open
         * the viewport.
         */
        App.controller.Session.login();
    }
});
</pre>
<p>Now this is what goes into test.html and app-test.js:</p>
<pre class="brush: xml; title: test.html; notranslate">
&lt;!--
This is a Jasmine test runner. please see the wiki on how to write tests.

https://github.com/pivotal/jasmine/wiki

--&gt;
&lt;html&gt;
&lt;head&gt;
    &lt;title&gt;App - Jasmine Test Runner&lt;/title&gt;
    &lt;link rel=&quot;shortcut icon&quot; href=&quot;resources/favicon.ico&quot;&gt;
    &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;app-test/lib/jasmine-1.1.0/jasmine.css&quot;&gt;

    &lt;!-- all your framework code here --&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;extjs/ext-debug.js&quot;&gt;&lt;/script&gt;

    &lt;!-- Jasmin code here --&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;app-test/lib/jasmine-1.1.0/jasmine.js&quot;&gt;&lt;/script&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;app-test/lib/jasmine-1.1.0/jasmine-html.js&quot;&gt;&lt;/script&gt;

    &lt;!-- include specs here --&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;app-test/specs/example.spec.js&quot;&gt;&lt;/script&gt;

    &lt;!-- test launcher --&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;app-test.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>&nbsp;</p>
<pre class="brush: jscript; title: app-test.js; notranslate">
/*
 * Define mock framework objects here
 */
var AppConfig = {host: 'test:'};

var io = {} //socket.io mock?...

Ext.application({
    name: 'App',
    appFolder: 'app',

    controllers: [
        'Session'
        /*... all your controllers here...
         * they will include your views, models, etc
         */
    ],

    launch: function() {
        hookAjax();

        //include the tests in the test.html head
        jasmine.getEnv().addReporter(new jasmine.TrivialReporter());
        jasmine.getEnv().execute();
    }
});
</pre>
<p>Next, what about those pesky server calls? Lets reroute those to our mock directory. In my application all Ajax calls use a url in a config for the host. This allows us to change the host without deploying to a new server. So, because of this, its <em>super</em> easy to detect a server call: its prefixed with the config value of the host and I&#8217;ve set the mock config object above to have the host set to &#8220;test:&#8221;, so here is my hook:</p>
<pre class="brush: jscript; title: Ajax hook; notranslate">
function hookAjax()
{
    Ext.Ajax.request_forReal = Ext.Ajax.request;
    Ext.Ajax.request = function test_ajax(o){
        if(/^test:/i.test(o.url)){
            o.url = o.url.replace(/^test:/i, './app-test/mock');
        }
        this.request_forReal.apply(this, arguments);
    };
}
</pre>
<p>In summation, what does this get us? We now have a way to isolate anything we want in the application and test the heck out of it. We can test integration of components/controllers/models, or individual components.</p>
<p>Bam. *mike drop*</p>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><a class="zemanta-pixie-a" title="Enhanced by Zemanta" href="http://www.zemanta.com/"><img class="zemanta-pixie-img" style="border: none; float: right;" src="http://img.zemanta.com/zemified_e.png?x-id=3d44fc8c-b7d1-427f-9633-1f21ea758538" alt="Enhanced by Zemanta" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://jonathangrimes.com/2011/10/jasmine-extjs-mvc-a-love-story/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>OMG: ExtJS4 MVC = OSM</title>
		<link>http://jonathangrimes.com/2011/10/omg-extjs4-mvc-osm/</link>
		<comments>http://jonathangrimes.com/2011/10/omg-extjs4-mvc-osm/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 02:06:35 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[MVC]]></category>

		<guid isPermaLink="false">http://jonathangrimes.com/?p=444</guid>
		<description><![CDATA[<p>WARNING: This post is all <a class="zem_slink" title="JavaScript" href="http://en.wikipedia.org/wiki/JavaScript" rel="wikipedia">JavaScript</a>, <a class="zem_slink" title="Ext (JavaScript library)" href="http://www.sencha.com/products/js/" rel="homepage">ExtJS</a>, and programming&#8230; :) very nerdy. You&#8217;ve been warned.</p> <p>I just want to gush a little bit about this new feature in ExtJS 4. The new <a class="zem_slink" title="Model–View–Controller" href="http://en.wikipedia.org/wiki/Model%E2%80%93View%E2%80%93Controller" rel="wikipedia">Model View Controller</a> architecture is a pure joy to [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #333399;"><em>WARNING: This post is all <a class="zem_slink" title="JavaScript" href="http://en.wikipedia.org/wiki/JavaScript" rel="wikipedia"><span style="color: #333399;">JavaScript</span></a>, <a class="zem_slink" title="Ext (JavaScript library)" href="http://www.sencha.com/products/js/" rel="homepage"><span style="color: #333399;">ExtJS</span></a>, and programming&#8230; :) very nerdy. You&#8217;ve been warned.</em></span></p>
<p>I just want to gush a little bit about this new feature in ExtJS 4. The new <a class="zem_slink" title="Model–View–Controller" href="http://en.wikipedia.org/wiki/Model%E2%80%93View%E2%80%93Controller" rel="wikipedia">Model View Controller</a> architecture is a pure joy to work with. Now we can create components that render the various visual elements of the <a class="zem_slink" title="User interface" href="http://en.wikipedia.org/wiki/User_interface" rel="wikipedia">UI</a> and defer the behavior to something else.</p>
<p>Before (in pre-MVC-land), buttons, form elements, and controls emitted events that you wanted to handle. The only problem was that the quickest, and often shortest, route was to make the owning component deal with the events from its children. This often led to very spaghetti-like code, i.e. Panel B wants to react to Menu Item 2’s click. Panel B would have to get a reference to Menu Item 2 and register a click <a class="zem_slink" title="Event (computing)" href="http://en.wikipedia.org/wiki/Event_%28computing%29" rel="wikipedia">event handler</a>. Sounds simple, but multiply that by several hundred, or thousand, times and it starts to get a bit unruly.</p>
<p>Thankfully, the geniuses at <a class="zem_slink" title="Sencha" href="http://www.sencha.com" rel="homepage">Sencha</a> have come up with a very beautiful solution: The MVC. With the MVC we can just throw up the UI with all its panels, menus, buttons and what have you and then, once it looks awesome, we create the “Controllers” that stitch it all together. The controller can be as simple as this:</p>
<pre class="brush: jscript; title: ; notranslate">
Ext.define('app.controller.Main', {
    extend: 'Ext.app.Controller',

    views: [ 'AccountForm' ],

    init: function() {
        this.control({
            'account-form button[action]':{
                'click':function(){
                    /*do something when a button with a property action is clicked in the account form*/
                }
            }
        });
    }
});
</pre>
<p>Check out the full documentation on the <a title="ExtJS - MVC" href="http://docs.sencha.com/ext-js/4-0/#!/guide/application_architecture">MVC here</a>.</p>
<p>Over the last several months, I&#8217;ve been building up a new application and doing my best to make it true to the MVC. Though, I have to admit, I jumped in with the ExtJS3 mentality so my first set of components did have &#8216;controller&#8217; code meshed in them, but as I&#8217;ve learned the &#8220;new way&#8221; I&#8217;ve been going back and &#8220;fixing&#8221; those in order to soar in the MVC. :)</p>
<p>Next up: how I setup <a class="zem_slink" title="Unit testing" href="http://en.wikipedia.org/wiki/Unit_testing" rel="wikipedia">Unit Testing</a> with Jasmine &amp; the ExtJS MVC.</p>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><a class="zemanta-pixie-a" title="Enhanced by Zemanta" href="http://www.zemanta.com/"><img class="zemanta-pixie-img" style="border: none; float: right;" src="http://img.zemanta.com/zemified_e.png?x-id=e6c27df9-3284-4b73-a134-9772485333af" alt="Enhanced by Zemanta" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://jonathangrimes.com/2011/10/omg-extjs4-mvc-osm/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Sasha Gets a Boob Job</title>
		<link>http://jonathangrimes.com/2011/08/sasha-gets-a-boob-job/</link>
		<comments>http://jonathangrimes.com/2011/08/sasha-gets-a-boob-job/#comments</comments>
		<pubDate>Mon, 29 Aug 2011 03:00:04 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[Cars]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[135i]]></category>
		<category><![CDATA[BMW]]></category>
		<category><![CDATA[Performance Parts]]></category>
		<category><![CDATA[Power Kit]]></category>
		<category><![CDATA[Vehicles]]></category>

		<guid isPermaLink="false">http://jonathangrimes.com/?p=388</guid>
		<description><![CDATA[<p>My wife (who names things) <a class="zem_slink" title="Anthropomorphism" href="http://en.wikipedia.org/wiki/Anthropomorphism" rel="wikipedia">anthropomorphized</a> my car last week:</p> <p>Sasha has decided she doesn’t want to be called “Sasha” anymore. She wants to be known as Nicolette. I&#8217;m worried that when she turns eighteen she’ll actually do it.</p> <p>While I let my wife worry about what “Sasha’s” cosmetic surgery will [...]]]></description>
			<content:encoded><![CDATA[<p>My wife (who names things) <a class="zem_slink" title="Anthropomorphism" href="http://en.wikipedia.org/wiki/Anthropomorphism" rel="wikipedia">anthropomorphized</a> my car last week:</p>
<blockquote><p>Sasha has decided she doesn’t want to be called “Sasha” anymore. She wants to be known as Nicolette. I&#8217;m worried that when she turns eighteen she’ll actually do it.</p></blockquote>
<p>While I let my wife worry about what “Sasha’s” cosmetic surgery will do to “her” adolescence, I sit back and enjoy the ride.</p>
<p>Cars are not generally considered to get better with age, actually depreciating in value over time — not like a fine wine&#8230; or, in my wife’s opinion, the male half of this marriage — however, my three year-old 135i just did.</p>
<p><span id="more-388"></span></p>
<p>Last week as an anniversary present, I ordered some <a title="Car Parts" href="http://jonathangrimes.com/2011/04/car-parts/">performance parts</a> for my car. When they came in, an appointment was scheduled for 6 A.M. Thursday morning. I drove to the dealership and arrived at 7 A.M. Giddy as a little boy on Christmas morning‚ I opted to wait for what I naively assumed would be a quick three hour job. I sat down at a desk in the lobby and started working on my laptop, dreaming of roaring down 235/I-35 southbound back to work. Moments later, a service attendant informed me that they actually did <strong>not</strong> have all my parts in. My heart sank. Was my trip in vain? The horror! He explained that I would be receiving two-thirds of my order this trip and would have to schedule another appointment for when my springs came in. Bummed, I acknowledged the change and asked about the new ETA. He said a little after lunch. We then took a trip back to the mechanic and I took pictures.</p>
<!-- tweet id : 106800208314245120 --><style type='text/css'>#bbpBox_106800208314245120 a { text-decoration:none; color:#0084B4; }#bbpBox_106800208314245120 a:hover { text-decoration:underline; }</style><div id='bbpBox_106800208314245120' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#eeeeee; background-image:url(http://a1.twimg.com/profile_background_images/225555429/dot_clear.gif); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>man, they need to finish my car&#8212;I'm like a fat kid in a candy store here</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://jonathangrimes.com/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on August 25, 2011 1:48 pm' href='http://twitter.com/#!/jsg2021/status/106800208314245120' target='_blank'>August 25, 2011 1:48 pm</a> via <a href="http://twitter.com/#!/download/iphone" rel="nofollow" target="blank">Twitter for iPhone</a><a href='https://twitter.com/intent/tweet?in_reply_to=106800208314245120&related=jsg2021' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=106800208314245120&related=jsg2021' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=106800208314245120&related=jsg2021' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=jsg2021'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a2.twimg.com/profile_images/1139835035/image_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=jsg2021'>@jsg2021</a><div style='margin:0; padding-top:2px'>Jonathan Grimes</div></div><div style='clear:both'></div></div></div><!-- end of tweet -->
<div id="attachment_393" class="wp-caption alignright" style="width: 160px"><a href="http://jonathangrimes.com/wp-content/uploads/2011/08/IMG_0001.jpg" rel="lightbox[388]"><img class="size-thumbnail wp-image-393" title="Power Kit Radiator 1" src="http://jonathangrimes.com/wp-content/uploads/2011/08/IMG_0001-150x150.jpg" alt="" width="150" height="150" /></a><p class="wp-caption-text">Radiator Installed</p></div>
<p>About noon, I got up from my computer and enquired about their progress. I should have gone home when I had the chance. We went back to the mechanic and to my dismay, my front-end was still disassembled &#8211; <em>nothing</em> looked different! They were having a heck of a time installing the new radiators and rewiring the engine bay. The part that I thought would be the fastest turned into the thing that took the longest. My Power Kit came with a few physical components as well as an engine software update&#8230; they were still on the physical install phase! Now hungry and tired, I asked if the car would be finished that day. Everyone was still hopeful, so I continued to wait. In the lobby. Hungry.</p>
<p>About closing time they were <strong>just</strong> wrapping up the engine’s physical modifications (my front bumper was reassembled and attached), and still telling me they may finish. Then the mechanic revealed the catch — they had not received the software activation code for my car’s engine update! Meaning, there was <strong>NO</strong> hope for this finishing that day, and I had wasted the day in an uncomfortable chair eating Krispy Kremes and drinking my weight in Diet Coke. And now I had to pee.</p>
<p>I took a loaner and went home.</p>
<p>The next day I went to work in the loaner, and waited until noon to call and check up. My service attendant informed me the engine was finished and the exhaust was installed. He wanted to surprise me — but since I called — they got the rest of my parts in, so when I came to pick it up, all my parts would be installed. My coworkers and wife can only describe the following moments as cartoon-like glee. My day had been made. Or so it seemed.</p>
<p>Around 5 P.M. I found out that the suspension was taking longer to install than anticipated. They were just about finished installing the rear and they still needed to do the alignment, which takes two hours. They promised it would be finished that night, but the dealership would close first, so I wouldn’t be able to take it home. More waiting. The emotional rollercoaster ride made me sick.</p>
<p>Saturday morning I woke up both giddy and sick. I needed this to be over. My wife and I drove up to the dealership and there “she” was, waiting in front. We went into the shop, finished some paperwork and I finally got my keys back.</p>
<p>Itching to feel the clutch again, to hear the roar of my newly tuned engine, to sit in a vehicle that put my butt so close to the ground I get road rash just thinking about it, I hopped in (or ducked in), started her up and let her purr.</p>
<p>0 to 60 is just too easy.</p>
<div id="attachment_403" class="wp-caption alignleft" style="width: 160px"><a href="http://jonathangrimes.com/wp-content/uploads/2011/08/rear-wheel-before-after.png" rel="lightbox[388]"><img class="size-thumbnail wp-image-403" title="rear-wheel-before-after" src="http://jonathangrimes.com/wp-content/uploads/2011/08/rear-wheel-before-after-150x150.png" alt="Rear Comparison" width="150" height="150" /></a><p class="wp-caption-text">Rear Comparison</p></div>
<div id="attachment_402" class="wp-caption alignleft" style="width: 160px"><a href="http://jonathangrimes.com/wp-content/uploads/2011/08/exhaust-before-after.jpg" rel="lightbox[388]"><img class="size-thumbnail wp-image-402" title="exhaust-before-after" src="http://jonathangrimes.com/wp-content/uploads/2011/08/exhaust-before-after-150x150.jpg" alt="Exhaust Comparison" width="150" height="150" /></a><p class="wp-caption-text">Exhaust Comparison</p></div>
<div id="attachment_401" class="wp-caption alignleft" style="width: 160px"><a href="http://jonathangrimes.com/wp-content/uploads/2011/08/IMG_0010.jpg" rel="lightbox[388]"><img class="size-thumbnail wp-image-401" title="Crossbar" src="http://jonathangrimes.com/wp-content/uploads/2011/08/IMG_0010-150x150.jpg" alt="" width="150" height="150" /></a><p class="wp-caption-text">Crossbar</p></div>
<div id="attachment_400" class="wp-caption alignleft" style="width: 160px"><a href="http://jonathangrimes.com/wp-content/uploads/2011/08/IMG_0009.jpg" rel="lightbox[388]"><img class="size-thumbnail wp-image-400" title="BMW Performance Badge" src="http://jonathangrimes.com/wp-content/uploads/2011/08/IMG_0009-150x150.jpg" alt="BMW Performance Badge" width="150" height="150" /></a><p class="wp-caption-text">BMW Performance Badge</p></div>
<div id="attachment_398" class="wp-caption alignleft" style="width: 160px"><a href="http://jonathangrimes.com/wp-content/uploads/2011/08/IMG_0006.jpg" rel="lightbox[388]"><img class="size-thumbnail wp-image-398" title="Post Install" src="http://jonathangrimes.com/wp-content/uploads/2011/08/IMG_0006-150x150.jpg" alt="Post Install" width="150" height="150" /></a><p class="wp-caption-text">Post Install</p></div>
<hr style="clear: both;" size="1/" />
<p>Before:<br />
<object height="81" width="100%"><param name="movie" value="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fsoundcloud.com%2Fjsg2021%2Fengine-start-idle-sound-before%2Fs-88ZaR&#038;g=1&#038;"></param><embed height="81" src="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fsoundcloud.com%2Fjsg2021%2Fengine-start-idle-sound-before%2Fs-88ZaR&#038;g=1&#038;" type="application/x-shockwave-flash" width="100%"> </embed> </object><br />
<object height="81" width="100%"><param name="movie" value="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fsoundcloud.com%2Fjsg2021%2Fwarm-engine-idle-sound-before%2Fs-knoJL&#038;g=1&#038;"></param><embed height="81" src="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fsoundcloud.com%2Fjsg2021%2Fwarm-engine-idle-sound-before%2Fs-knoJL&#038;g=1&#038;" type="application/x-shockwave-flash" width="100%"> </embed> </object></p>
<p>After:<br />
<object height="81" width="100%"><param name="movie" value="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fsoundcloud.com%2Fjsg2021%2Fwarm-engine-startup-after%2Fs-rCUq2&#038;g=1&#038;"></param><embed height="81" src="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fsoundcloud.com%2Fjsg2021%2Fwarm-engine-startup-after%2Fs-rCUq2&#038;g=1&#038;" type="application/x-shockwave-flash" width="100%"> </embed> </object><br />
<object height="81" width="100%"><param name="movie" value="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fsoundcloud.com%2Fjsg2021%2Fwarm-engine-after%2Fs-k4qPI&#038;g=1&#038;"></param><embed height="81" src="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fsoundcloud.com%2Fjsg2021%2Fwarm-engine-after%2Fs-k4qPI&#038;g=1&#038;" type="application/x-shockwave-flash" width="100%"> </embed> </object></p>
<hr style="clear: both;" size="1/" />
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><a class="zemanta-pixie-a" title="Enhanced by Zemanta" href="http://www.zemanta.com/"><img class="zemanta-pixie-img" style="border: none; float: right;" src="http://img.zemanta.com/zemified_e.png?x-id=ab4199f4-8253-4679-9662-ad8fca9bb441" alt="Enhanced by Zemanta" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://jonathangrimes.com/2011/08/sasha-gets-a-boob-job/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Anyone remember Simply Transparent?</title>
		<link>http://jonathangrimes.com/2011/08/anyone-remember-simply-transparent/</link>
		<comments>http://jonathangrimes.com/2011/08/anyone-remember-simply-transparent/#comments</comments>
		<pubDate>Sat, 13 Aug 2011 16:42:56 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Site]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[freeware]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Microsoft Visual Studio]]></category>
		<category><![CDATA[nostalgia]]></category>
		<category><![CDATA[Screen Savers]]></category>
		<category><![CDATA[TechTV]]></category>
		<category><![CDATA[User interface design]]></category>
		<category><![CDATA[Web design]]></category>

		<guid isPermaLink="false">http://jonathangrimes.com/?p=339</guid>
		<description><![CDATA[<p>It was my first public offering to the world of freeware! My high school after-hours project is now on <a href="https://github.com/jsg2021/Simply-Transparent">github</a>.  I don&#8217;t know why I haven&#8217;t done this sooner, but I thought it would be a fun git-to-know git activity.</p> <p>Just looking through all these files brings back memories &#8212; my, how far I&#8217;ve [...]]]></description>
			<content:encoded><![CDATA[<p>It was my first public offering to the world of freeware! My high school after-hours project is now on <a href="https://github.com/jsg2021/Simply-Transparent">github</a>.  I don&#8217;t know why I haven&#8217;t done this sooner, but I thought it would be a fun <em>git-</em>to-know git activity.</p>
<p>Just looking through all these files brings back memories &#8212; my, how far I&#8217;ve come. My first rendition of this project mostly used the MFC classes Microsoft shipped with their Visual C++ 5/6 projects (this was before Visual Studio .NET).  I eventually released this gem as Simply Transparent 6.5, and was the version that was honored as the <a href="http://liveweb.archive.org/http://www.g4tv.com/articles/36489/free-download-simply-transparent/">&#8220;Free file of the Day&#8221; on TechTV&#8217;s &#8220;The Screen Savers&#8221;</a> with <a href="http://leoville.com/">Leo Laporte</a> and Megan Morrone, post Kate Botello era.  Right around that time, I kicked MFC to the curb and rewrote the entire program with nothing but the Windows bare API at my mercy.  I had grown as a programmer and found a new love of strait-up-no-hand-holding raw C++.  Those were the days&#8230; learning something new every day, and digging for more &#8212; constantly digging &#8212; knowledge in software development and the <strong>art</strong> of UI design.<span id="more-339"></span><!-- tweet id : 102230129631182849 --><style type='text/css'>#bbpBox_102230129631182849 a { text-decoration:none; color:#0084B4; }#bbpBox_102230129631182849 a:hover { text-decoration:underline; }</style><div id='bbpBox_102230129631182849' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#eeeeee; background-image:url(http://a1.twimg.com/profile_background_images/225555429/dot_clear.gif); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>Anyone remember 'Simply Transparent' from 2001? I put it on github: <a href="http://t.co/t0fZK4o" rel="nofollow">http://t.co/t0fZK4o</a></span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://jonathangrimes.com/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on August 12, 2011 11:08 pm' href='http://twitter.com/#!/jsg2021/status/102230129631182849' target='_blank'>August 12, 2011 11:08 pm</a> via <a href="http://itunes.apple.com/us/app/twitter/id409789998?mt=12" rel="nofollow" target="blank">Twitter for Mac</a><a href='https://twitter.com/intent/tweet?in_reply_to=102230129631182849&related=jsg2021' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=102230129631182849&related=jsg2021' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=102230129631182849&related=jsg2021' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=jsg2021'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a2.twimg.com/profile_images/1139835035/image_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=jsg2021'>@jsg2021</a><div style='margin:0; padding-top:2px'>Jonathan Grimes</div></div><div style='clear:both'></div></div></div><!-- end of tweet --></p>
<p>I find myself in the same boat I was in over 10 years ago.  Digging.  Researching and plotting the next big thing.  8-9 years ago, I began really jumping into web development and Web site design.  I had architected something that was a kind of predecessor to a 100% client-side Javascript Web site (a la ExtJS), a blog — before I knew that&#8217;s what it was called &#8212; and asynchronous data loads (before I knew what AJAX was).  I took what I learned and molded it into a CMS I called HybridEngine, eventually to be written in PHP and be the abstracted layer between my app and my filesystem/database. Oh memories. :)</p>
<!-- tweet id : 102238661063606272 --><style type='text/css'>#bbpBox_102238661063606272 a { text-decoration:none; color:#0084B4; }#bbpBox_102238661063606272 a:hover { text-decoration:underline; }</style><div id='bbpBox_102238661063606272' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#eeeeee; background-image:url(http://a1.twimg.com/profile_background_images/225555429/dot_clear.gif); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>Looking through all my old project files&#8230; good times. My&#8212;how I've grown.</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://jonathangrimes.com/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on August 12, 2011 11:42 pm' href='http://twitter.com/#!/jsg2021/status/102238661063606272' target='_blank'>August 12, 2011 11:42 pm</a> via <a href="http://itunes.apple.com/us/app/twitter/id409789998?mt=12" rel="nofollow" target="blank">Twitter for Mac</a><a href='https://twitter.com/intent/tweet?in_reply_to=102238661063606272&related=jsg2021' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=102238661063606272&related=jsg2021' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=102238661063606272&related=jsg2021' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=jsg2021'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a2.twimg.com/profile_images/1139835035/image_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=jsg2021'>@jsg2021</a><div style='margin:0; padding-top:2px'>Jonathan Grimes</div></div><div style='clear:both'></div></div></div><!-- end of tweet -->
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><a class="zemanta-pixie-a" title="Enhanced by Zemanta" href="http://www.zemanta.com/"><img class="zemanta-pixie-img" style="border: none; float: right;" src="http://img.zemanta.com/zemified_e.png?x-id=3914330f-2407-47f4-b456-05afefd9edf7" alt="Enhanced by Zemanta" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://jonathangrimes.com/2011/08/anyone-remember-simply-transparent/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>So, What&#8217;s new?</title>
		<link>http://jonathangrimes.com/2011/08/so-whats-new/</link>
		<comments>http://jonathangrimes.com/2011/08/so-whats-new/#comments</comments>
		<pubDate>Thu, 11 Aug 2011 03:45:37 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Site]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[career]]></category>
		<category><![CDATA[change]]></category>
		<category><![CDATA[england]]></category>
		<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[User interface design]]></category>
		<category><![CDATA[vacation]]></category>

		<guid isPermaLink="false">http://jonathangrimes.com/?p=306</guid>
		<description><![CDATA[<p>To say that this has been a busy year, would be a gross understatement. I began the year as the point-man on a rockin&#8217; team where we developed &#38; maintained RiskManager 4 &#8212; a financial risk management application built atop a fantastic platform, an in-house project at <a class="zem_slink" title="RiskMetrics" href="http://en.wikipedia.org/wiki/RiskMetrics" rel="wikipedia">RiskMetrics</a>. However, the changing atmosphere at the company [...]]]></description>
			<content:encoded><![CDATA[<p>To say that this has been a busy year, would be a gross understatement. I began the year as the point-man on a rockin&#8217; team where we developed &amp; maintained RiskManager 4 &#8212; a financial risk management application built atop a fantastic platform, an in-house project at <a class="zem_slink" title="RiskMetrics" href="http://en.wikipedia.org/wiki/RiskMetrics" rel="wikipedia">RiskMetrics</a>. However, the changing atmosphere at the company (RiskMetrics was acquired by <a class="zem_slink" title="MSCI" href="http://www.MSCI.com" rel="homepage">MSCI</a> mid-year in 2010) left much to be desired.  Loyal to the core, I stuck it out and even plowed ahead with re-architecting the user interface; moving from an in-house server-side HTML/Widget generation toolkit to <a href="http://www.sencha.com/products/extjs/" target="_blank">ExtJS</a>.</p>
<p>Around the beginning of the second quarter of this year, I was invited to join a few colleagues that had left the company to start a new company, and I couldn&#8217;t resist the opportunity to start something &#8211; something BIG.  It was just too enticing.</p>
<p><span id="more-306"></span>I&#8217;ve been working at <a href="http://nextthought.com" target="_blank">NextThought</a> for several months now. Primarily focused on a <a class="zem_slink" title="User interface design" href="http://en.wikipedia.org/wiki/User_interface_design" rel="wikipedia">UI design</a> implementation for the desktop/web browser, I can&#8217;t even begin to explain how much <em><strong>fun</strong></em> this has been.  I started by playing with any and all UI toolkits &amp; frameworks I could find.  I even began to build a UI from scratch, but why reinvent the wheel?  And time is of the essence when you&#8217;re trying come up with the &#8220;next big thing,&#8221; staying ahead in this big technology game is the only way to come out on top.  I concluded that to achieve the timely deadlines and quality of experience, I had to switch gears and go with a framework.  Re-enter ExtJS. I scrapped my first month&#8217;s efforts and rebuilt it in ExtJS in about an hour.</p>
<!-- tweet id : 100760034220318720 --><style type='text/css'>#bbpBox_100760034220318720 a { text-decoration:none; color:#0084B4; }#bbpBox_100760034220318720 a:hover { text-decoration:underline; }</style><div id='bbpBox_100760034220318720' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#eeeeee; background-image:url(http://a1.twimg.com/profile_background_images/225555429/dot_clear.gif); background-repeat:no-repeat'><div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>Poke'n around&#8230; this was fun: Ext.panel.Panel.override({render:function(){this.callOverridden(arguments);console.log('render!');}});</span><div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://jonathangrimes.com/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on August 8, 2011 9:47 pm' href='http://twitter.com/#!/jsg2021/status/100760034220318720' target='_blank'>August 8, 2011 9:47 pm</a> via <a href="http://itunes.apple.com/us/app/twitter/id409789998?mt=12" rel="nofollow" target="blank">Twitter for Mac</a><a href='https://twitter.com/intent/tweet?in_reply_to=100760034220318720&related=jsg2021' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=100760034220318720&related=jsg2021' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=100760034220318720&related=jsg2021' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=jsg2021'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a2.twimg.com/profile_images/1139835035/image_normal.jpg' /></a></div><div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=jsg2021'>@jsg2021</a><div style='margin:0; padding-top:2px'>Jonathan Grimes</div></div><div style='clear:both'></div></div></div><!-- end of tweet -->
<p>Anyway, I don&#8217;t want to say too much now, but keep an eye on us. Good things will be coming from NextThought.  Promise.</p>
<p>I&#8217;ve also been busy &#8212; VERY busy &#8212; entertaining my lovely wife. In May, my wife, her parents and I went to <a class="zem_slink" title="England" href="http://maps.google.com/maps?ll=51.5,-0.116666666667&amp;spn=10.0,10.0&amp;q=51.5,-0.116666666667 (England)&amp;t=h" rel="geolocation">England</a> for two weeks.  Now, going to England with your wife = fun.  Going to England with your wife, her parents to visit her Cambridge scholar little brother = exhaustingly educational.  These people travel like they&#8217;re never leaving their house again!  This trip was so planned out and itemized, we had &#8220;breathe&#8221; built into the itinerary.  Literally.  It said &#8220;breathe&#8221; right after &#8220;arrive at <a class="zem_slink" title="Stonehenge" href="http://maps.google.com/maps?ll=51.1788444444,-1.82618888889&amp;spn=0.01,0.01&amp;q=51.1788444444,-1.82618888889 (Stonehenge)&amp;t=h" rel="geolocation">Stonehenge</a>&#8221; right before &#8220;35 minutes at Stonehenge.&#8221;</p>
<p>We arrived in to London on Day One, and didn&#8217;t stop touring until we got on the plane and headed home. We saw as much as we could with the help of Sam, my brother-in-law, who had been living in England for the 2010-2011 <a class="zem_slink" title="Academic term" href="http://en.wikipedia.org/wiki/Academic_term" rel="wikipedia">school year</a>.  I really enjoyed all the ruins, like Stonehenge and the ruins in Bath.  Sam and Carl (my father-in-law) prefer their ruins not ruined, but I like the mystery of it all.  The castles and gardens were beautiful, spectacular really.  They should make calendars out of them.</p>
<p>My mother-in-law, sweet woman &#8212; she wanted to find something that I would find interesting, because she feared I would be bored with all the Medieval stuff (she couldn&#8217;t have been more wrong, I had a blast) &#8212; took us to <a class="zem_slink" title="Bletchley Park" href="http://maps.google.com/maps?ll=51.99651,-0.74276&amp;spn=0.01,0.01&amp;q=51.99651,-0.74276 (Bletchley%20Park)&amp;t=h" rel="geolocation">Bletchley Park</a>, home of the <a class="zem_slink" title="World War II" href="http://en.wikipedia.org/wiki/World_War_II" rel="wikipedia">WWII</a> Codebreakers. She certainly succeeded in finding something that piqued my interest.  Bletchley Park is the place where the <a class="zem_slink" title="Enigma machine" href="http://en.wikipedia.org/wiki/Enigma_machine" rel="wikipedia">Enigma machine</a> was cracked (repeatedly, as the Germans kept modifying it), and a keystone in the history of the field of computer science, my own field of study.  Very fascinating spot. If you are into computer science or cryptography, it&#8217;s a must visit.</p>
<p>Sound busy? And that&#8217;s just the highlight reel.</p>
<p>This is enough of this detour from the normal tech/car talk. I&#8217;ll return to the normal programming in the next post.</p>
<p>Thanks, Carl, Nancy, Sam and my wife, Caroline, for the best &#8220;first-adventure-overseas&#8221; a guy could ask for!</p>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><a class="zemanta-pixie-a" title="Enhanced by Zemanta" href="http://www.zemanta.com/"><img class="zemanta-pixie-img" style="border: none; float: right;" src="http://img.zemanta.com/zemified_e.png?x-id=3bf598bc-5d5b-4347-915a-4eab71fc39ff" alt="Enhanced by Zemanta" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://jonathangrimes.com/2011/08/so-whats-new/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

