<?xml version="1.0" encoding="utf-8"?>

			<rss version="2.0" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://web.resource.org/cc/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">

			<channel>
			<title>Raymond Camden&apos;s Blog - Development</title>
			<link>http://www.raymondcamden.com/index.cfm</link>
			<description>Raymond Camden&apos;s personal blog covering jQuery, Mobile, ColdFusion, and Web Development.</description>
			<language>en-us</language>
			<pubDate>Sun, 19 May 2013 05:08:04 -0400</pubDate>
			<lastBuildDate>Fri, 10 May 2013 16:11:00 -0400</lastBuildDate>
			<generator>BlogCFC</generator>
			<docs>http://blogs.law.harvard.edu/tech/rss</docs>
			<managingEditor>raymondcamden@gmail.com</managingEditor>
			<webMaster>raymondcamden@gmail.com</webMaster>
			<itunes:subtitle></itunes:subtitle>
			<itunes:summary></itunes:summary>
			<itunes:category text="Technology" />
			<itunes:category text="Technology">
				<itunes:category text="Podcasting" />
			</itunes:category>
			<itunes:category text="Technology">
				<itunes:category text="Tech News" />
			</itunes:category>
			<itunes:keywords></itunes:keywords>
			<itunes:author></itunes:author>
			<itunes:owner>
				<itunes:email>raymondcamden@gmail.com</itunes:email>
				<itunes:name></itunes:name>
			</itunes:owner>
			
			<itunes:explicit>no</itunes:explicit>
			
			
			
			
			
			<item>
				<title>Missed MAX 2013? How to catch up...</title>
				<link>http://www.raymondcamden.com/index.cfm/2013/5/10/Missed-MAX-2013-How-to-catch-up</link>
				<description>
				
				&lt;img src=&quot;http://www.raymondcamden.com/images/2013-05-06 08.00.172.jpg&quot; style=&quot;float:left;margin-right:10px;margin-bottom:10px&quot; /&gt;

 This year was my second MAX as an employee and was both exciting - and pretty tiring. If you weren&apos;t able to make it though there is an easy way to catch what you missed.&lt;h2&gt;Keynotes&lt;/h2&gt;

Monday&apos;s keynote was focused on our product announcements and featured our first hardware announcements ever - Mighty and Napoleon. If you haven&apos;t heard yet, Creative Suite is now Creative Cloud. You can find out more at the &lt;a href=&quot;http://www.adobe.com/products/creativecloud/faq.html&quot;&gt;FAQ&lt;/a&gt; or feel free to just ask me. 

&lt;iframe title=&quot;AdobeTV Video Player&quot; width=&quot;600&quot; height=&quot;345&quot; src=&quot;http://tv.adobe.com/embed/1217/18400/&quot; frameborder=&quot;0&quot; allowfullscreen scrolling=&quot;no&quot;&gt;&lt;/iframe&gt;

By the way - the hardware announcements were a &lt;i&gt;complete&lt;/i&gt; surprise to me!

Tuesday&apos;s keynote was cool as well. It focused on four different creatives discussing their process and showcasing their work. 

&lt;iframe title=&quot;AdobeTV Video Player&quot; width=&quot;600&quot; height=&quot;345&quot; src=&quot;http://tv.adobe.com/embed/1217/18405/&quot; frameborder=&quot;0&quot; allowfullscreen scrolling=&quot;no&quot;&gt;&lt;/iframe&gt;

&lt;h2&gt;Sneaks&lt;/h2&gt;

There isn&apos;t a filtered list of the sneaks yet, and it looks like they aren&apos;t even all online (there were 12 total), but if you go to the &lt;a href=&quot;http://www.youtube.com/user/AdobeCreativeCloud&quot;&gt;AdobeCreativeCloud&lt;/a&gt; channel on YouTube, you can find a playlist called &lt;a href=&quot;http://www.youtube.com/playlist?list=PLD8AMy73ZVxXRHZvcj5WvsMopeNMcL_so&quot;&gt;Adobe Max 2013&lt;/a&gt;. In this playlist are 6 of the 12 sneaks. Unfortunately, both of the Brackets sneaks are not there. I&apos;m going to do a separate blog post on Brackets and what was sneaked later.

&lt;h2&gt;Sessions&lt;/h2&gt;

Finally, you can view most, but not all, of the sessions, on Adobe TV: &lt;a href=&quot;http://tv.adobe.com/show/max-2013&quot;&gt;MAX 2013 - The Creativity Conference&lt;/a&gt;. &lt;strong&gt;Note:&lt;/strong&gt; Not all of the sessions are available currently. For example, two of mine are still being encoded. (I&apos;ll blog when each one becomes available.) But there&apos;s quite a bit ready now and some damn interesting stuff there. (And to be clear, some great &lt;i&gt;developer&lt;/i&gt; content!)
				</description>
				
				
				<category>Development</category>
				
				<pubDate>Fri, 10 May 2013 16:11:00 -0400</pubDate>
				<guid>http://www.raymondcamden.com/index.cfm/2013/5/10/Missed-MAX-2013-How-to-catch-up</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>How I&apos;d sell unit testing...</title>
				<link>http://www.raymondcamden.com/index.cfm/2013/5/8/How-Id-sell-unit-testing</link>
				<description>
				
				Someone came up to me after my MAX session on web development debugging and asked for some advice on how to &apos;sell&apos; unit testing to his clients. This was my response:

&lt;blockquote&gt;
Simple. Tell the client you feel unit testing is so important that you&apos;re willing to talk about it with him face to face. In fact, you&apos;ll even fly him to your location. In order to save money though you&apos;re going to use a budget airline that skips testing.
&lt;/blockquote&gt;
				</description>
				
				
				<category>Development</category>
				
				<pubDate>Wed, 08 May 2013 14:48:00 -0400</pubDate>
				<guid>http://www.raymondcamden.com/index.cfm/2013/5/8/How-Id-sell-unit-testing</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Update to my Edge Inspect Viewer</title>
				<link>http://www.raymondcamden.com/index.cfm/2013/5/7/Update-to-my-Edge-Inspect-Viewer</link>
				<description>
				
				Many moons ago I &lt;a href=&quot;http://www.raymondcamden.com/index.cfm/2012/11/6/Proof-of-Concept--An-Edge-Inspect-Screenshot-Viewer&quot;&gt;blogged&lt;/a&gt; about a proof of concept I built that allowed you to view Edge Inspect screen shots via a nice web interface. This was built in Node using the Express framework. I&apos;ve finally gotten around to doing some updates to it as well as pushing it up to Github.First, I applied the &lt;a href=&quot;http://topcoat.io/&quot;&gt;Topcoat&lt;/a&gt; UI framework. This is an open source UI framework for desktop and mobile available for forking on Github. 

Here is a screen shot of the app in action:

&lt;img src=&quot;http://www.raymondcamden.com/images/one.png&quot; /&gt;

And here is a shot of the detail view (I&apos;d like to add a bit more detail here):

&lt;img src=&quot;http://www.raymondcamden.com/images/onepointfive.png&quot; /&gt;

New features include the ability to filter by operating system or device. Here&apos;s a filter on Android:

&lt;img src=&quot;http://www.raymondcamden.com/images/two.png&quot; /&gt;

So, like it? As I&apos;ve said before, I&apos;m still rather new to Node so take this code with a grain of salt. You can download (or fork and improve!) here: &lt;a href=&quot;https://github.com/cfjedimaster/inspectviewer&quot;&gt;https://github.com/cfjedimaster/inspectviewer&lt;/a&gt;
				</description>
				
				
				<category>Mobile</category>
				
				<category>Development</category>
				
				<pubDate>Tue, 07 May 2013 14:55:00 -0400</pubDate>
				<guid>http://www.raymondcamden.com/index.cfm/2013/5/7/Update-to-my-Edge-Inspect-Viewer</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Using the Progress event in PhoneGap file transfers</title>
				<link>http://www.raymondcamden.com/index.cfm/2013/5/1/Using-the-Progress-event-in-PhoneGap-file-transfers</link>
				<description>
				
				Earlier today I was happy to hear that &lt;a href=&quot;http://phonegap.com/blog/2013/04/30/pg-270-released/&quot;&gt;PhoneGap 2.7&lt;/a&gt; was released. While perusing the changelist, I thought I read that progress events for file transfers were added in this release. However, I was wrong. &lt;a href=&quot;http://docs.phonegap.com/en/2.7.0/cordova_file_file.md.html#FileTransfer&quot;&gt;FileTransfer&lt;/a&gt; has supported a progress event for a few months now. But since I figured this out while halfway through a demo, I figured I&apos;d finish it up anyway and share it on my blog.As you can imagine, the onprogress event is a property of the FileTransfer object. It is passed a progressEvent that is - unfortunately - not documented as far as I can see. The code example though gives you enough information I think to deal with it:

&lt;script src=&quot;https://gist.github.com/cfjedimaster/5498492.js&quot;&gt;&lt;/script&gt;

So from what I can see - you get a property that determines if the total size is known, and if so, you can get a percentage by using it with the loaded property. Otherwise you&apos;re just guessing at the time left, but at least you know &lt;i&gt;something&lt;/i&gt; is going on.

For my demo, I thought I&apos;d build a simple MP3 downloader/player. I googled for &apos;free open source music&apos; and came across this incredible MP3 by Kansas Joe McCoy and Memphis Minnie: &lt;a href=&quot;http://publicdomain4u.com/kansas-joe-mccoy-memphis-minnie-when-the-levee-breaks/mp3-download&quot;&gt;When the Levee Breaks&lt;/a&gt;. Go ahead and listen to it. As much as I love indie music and trance, the sound of old recordings like this is like pure gold to the ears. 

Anyway - I began by creating an incredibly simple web page. It lists the name of the artists and the song along with a picture. I&apos;ve included a button that will trigger the download. Also make note of the status div I&apos;ll be using for - you guessed it - progress events.

&lt;script src=&quot;https://gist.github.com/cfjedimaster/5498519.js&quot;&gt;&lt;/script&gt;

Here&apos;s a screen shot of it in action.

&lt;img src=&quot;http://www.raymondcamden.com/images/iOS Simulator Screen shot May 1, 2013 4.28.35 PM.png&quot; /&gt;

Ok, now let&apos;s take a look at the code.

&lt;script src=&quot;https://gist.github.com/cfjedimaster/5498530.js&quot;&gt;&lt;/script&gt;

Starting from the top, the first thing that may interest you is the file system request. I ask for the temporary file system so I have a place to store the mp3. Once I&apos;ve got a hook to the file system I then enable the button in my web page and start listening for a touch event.

The function that handles the download, startDl, creates the FileTransfer object and points it to the remote MP3. I&apos;ve used almost the exact same onprogress event as demonstrated in the PhoneGap docs. I changed it to write out a percentage when possible and in other cases, simply append dots to the end of a string. That way people know something is still being transferred.

The final portion simply handles the media portion. I didn&apos;t bother adding any real controls so it just begins to play the track and that&apos;s it. (To be clear, this wouldn&apos;t be hard to add, just check the &lt;a href=&quot;http://docs.phonegap.com/en/2.7.0/cordova_media_media.md.html#Media&quot;&gt;Media API&lt;/a&gt; for more information.)

Watch the video below to see it in action:

&lt;object width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/DrGAlizaf_8&amp;hl=en&amp;fs=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/DrGAlizaf_8&amp;hl=en&amp;fs=1&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;/embed&gt;&lt;/object&gt;

As a last tip, note that the docs for Media seem to imply that you need a URI, not a file path. On iOS it seems to require a path, not a URI. Thanks to &lt;a href=&quot;http://simonmacdonald.blogspot.com/&quot;&gt;Simon MacDonald&lt;/a&gt; for helping me with this.
				</description>
				
				
				<category>Mobile</category>
				
				<category>Development</category>
				
				<pubDate>Wed, 01 May 2013 16:08:00 -0400</pubDate>
				<guid>http://www.raymondcamden.com/index.cfm/2013/5/1/Using-the-Progress-event-in-PhoneGap-file-transfers</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Check out Brackets Sprint 24</title>
				<link>http://www.raymondcamden.com/index.cfm/2013/4/30/Check-out-Brackets-Sprint-24</link>
				<description>
				
				I don&apos;t normally do a blog post for new &lt;a href=&quot;http://brackets.io&quot;&gt;Brackets&lt;/a&gt; releases, but I wanted to specifically call out the most recent release, Sprint 24. From the web site, this release includes:&lt;ul&gt;
&lt;li&gt;New Quick View: Use your mouse to hover over color, gradient and image values for an in-editor preview.
&lt;li&gt;New Quick Docs for CSS: Press Ctrl+K or Cmd+K on a CSS property to view community generated documentation powered by WebPlatform.org.
&lt;li&gt;Advanced JavaScript Code Intelligence: New JavaScript code intelligence based on the Tern projet. Increased code hinting accuracy, camelCase support and built-in intelligence for RequireJS and jQuery.
&lt;li&gt;Jump To Definition: Instantly locate a function or property definition in your project by pressing Ctrl+J or Cmd+J.
&lt;li&gt;Function Argument / Signature Hints: Press Ctrl+Space inside a function call&apos;s ()s to see information on its arguments and their types.
&lt;li&gt;New Project Panel Design: Visual updates to the project panel.
&lt;li&gt;Install Extensions From Toolbar: Install extensions directly from the toolbar.
&lt;/ul&gt;

Here&apos;s an example of the Quick Docs support for CSS:

&lt;img src=&quot;http://www.raymondcamden.com/images/Screenshot_4_30_13_9_32_AM 2.png&quot; /&gt;

And a shot of the hover in-editor preview:

&lt;img src=&quot;http://www.raymondcamden.com/images/Screen Shot 2013-04-30 at 9.43.12 AM.png&quot; /&gt;

But let me pretend I&apos;m Kanye for a moment and talk about the feature I&apos;m &lt;i&gt;really&lt;/i&gt; psyched about - the new JavaScript code intelligence. Currently it is only supported in JS files (i.e., not script blocks on a page), but it is amazing how well it works. I was working on a Backbone project last week and the difference in this new engine has truly made a difference in my editing. The previous sprint was the first sprint where I moved to Brackets for a majority of my coding. This sprint just cements it. 

Remember, you can try this out for yourself, right now, for free, at &lt;a href=&quot;http://download.brackets.io/&quot;&gt;http://download.brackets.io/&lt;/a&gt;.
				</description>
				
				
				<category>Development</category>
				
				<pubDate>Tue, 30 Apr 2013 09:22:00 -0400</pubDate>
				<guid>http://www.raymondcamden.com/index.cfm/2013/4/30/Check-out-Brackets-Sprint-24</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Code School Kicks Butt</title>
				<link>http://www.raymondcamden.com/index.cfm/2013/4/28/Code-School-Kicks-Butt</link>
				<description>
				
				&lt;img src=&quot;http://www.raymondcamden.com/images/Screenshot_4_28_13_10_31_AM.png&quot; style=&quot;float:left;margin-right:10px;margin-bottom:10px&quot; /&gt; A few weeks ago I &lt;a href=&quot;http://www.raymondcamden.com/index.cfm/2013/3/21/New-online-material-for-Chrome-DevTools&quot;&gt;blogged&lt;/a&gt; about an online course dedicated to Chrome&apos;s DevTools. That was my first experience with &lt;a href=&quot;http://www.codeschool.com&quot;&gt;Code School&lt;/a&gt; and I thought it worked very well.This weekend I decided to try their &lt;a href=&quot;http://www.codeschool.com/paths/javascript#backbone-js&quot;&gt;Backbone&lt;/a&gt; course. I&apos;ve been learning Backbone over the past month and as I had a free pass, I thought I&apos;d check it out. The course is very well designed. Each video is approximately 7 or so minutes long, a perfect chunk of content to digest. I&apos;ve completed the first Backbone course and am mostly through the second, and only once or twice did I need to pause the video so I could mentally &quot;catch up&quot; with the material. Each video is a professional affair. This isn&apos;t some guy with a web cam (like most of my videos). 

I was fascinated by the challenges in the DevTools presentation and was happy to see they worked well in the Backbone course as well. To be clear, these challenges aren&apos;t asking you to type &lt;i&gt;exactly&lt;/i&gt; a precise line of code. No, if they ask you to do X, then you can (for the most part) write it exactly as you like. I really dig this. Here&apos;s a simple example. Imagine you were asked to write a function that added two numbers and returned the result. You could write it like this:

&lt;script src=&quot;https://gist.github.com/cfjedimaster/5477191.js&quot;&gt;&lt;/script&gt;

Or like so:

&lt;script src=&quot;https://gist.github.com/cfjedimaster/5477192.js&quot;&gt;&lt;/script&gt;

Most of us would probably prefer the latter. It is more concise and simple. But if you are new to JavaScript, you may be more comfortable with the former. I know when I was learning jQuery, I found many of the examples a bit too hard to parse as they were long lines of things chained together. I intentionally broke those examples up so I could follow the logic better.

So as I said - Code School&apos;s challenges allow you to write your code as you see fit and not worry about precisely matching some unseen expectation. I love it. Sometimes it doesn&apos;t work well. I got some very odd errors a few times. But I never got stuck. 

Code School costs 25 dollars a month to &lt;a href=&quot;http://www.codeschool.com/enroll&quot;&gt;enroll&lt;/a&gt;. Just the one course I took was worth ten times that. Your enrollment covers &lt;i&gt;all&lt;/i&gt; of their courses. You can also download the videos and slides so you&apos;ll have access to the material later.

Want to try it out? This link (for the next 48 hours) will give you a free two day pass (and extend my free trial too :) - &lt;a href=&quot;http://go.codeschool.com/IyebUA&quot;&gt;http://go.codeschool.com/IyebUA&lt;/a&gt;.
				</description>
				
				
				<category>Development</category>
				
				<pubDate>Sun, 28 Apr 2013 10:03:00 -0400</pubDate>
				<guid>http://www.raymondcamden.com/index.cfm/2013/4/28/Code-School-Kicks-Butt</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Auto-escaping code blocks in Reveal.js</title>
				<link>http://www.raymondcamden.com/index.cfm/2013/4/25/Autoescaping-code-blocks-in-Revealjs</link>
				<description>
				
				Warning - this falls into the &quot;Cool, but may not be a good idea category.&quot; I&apos;m a huge fan of the &lt;a href=&quot;https://github.com/hakimel/reveal.js/&quot;&gt;Reveal.js&lt;/a&gt; framework for HTML-based presentations and I&apos;ve already posted a few of my utilities/tips/etc for making it work better (or at least better for me). One issue I&apos;ve run into a few times lately is escaping HTML for code slides.Reveal.js has great support for code coloring (color coding?). Here&apos;s a quick screen shot of an example:
 
&lt;img src=&quot;http://www.raymondcamden.com/images/Screenshot_4_25_13_10_20_AM.png&quot; /&gt;

In general this works simple enough. Here is how a typical code slide would look.

&lt;script src=&quot;https://gist.github.com/cfjedimaster/5460558.js&quot;&gt;&lt;/script&gt;

But if you want to include HTML in your slide then you run into a problem. As you might expect, your HTML will be rendered as, well, HTML, not source code. Typically this isn&apos;t a huge deal. Code samples are short and if you type fast, you can replace &amp;lt; and &amp;gt; in a few minutes, but after doing this a few times, and preparing to do some slides focused on HTML5 development, I thought there might be a cooler way.

By default, Reveal.js initializes itself immediately. I modified the code to do this after the DOMContentLoaded event and did some hacking:

&lt;script src=&quot;https://gist.github.com/cfjedimaster/5460602.js&quot;&gt;&lt;/script&gt;

As you can see, I simply make use of querySelectorAll to find all of my code blocks. (I could make that selector a bit more precise.) I then simply grab the HTML, escape the &amp;lt; and &amp;gt; characters, and then update the innerHTML property.

Voila!

&lt;img src=&quot;http://www.raymondcamden.com/images/Screenshot_4_25_13_10_28_AM.png&quot; /&gt;
				</description>
				
				
				<category>Development</category>
				
				<category>HTML5</category>
				
				<pubDate>Thu, 25 Apr 2013 10:06:00 -0400</pubDate>
				<guid>http://www.raymondcamden.com/index.cfm/2013/4/25/Autoescaping-code-blocks-in-Revealjs</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>New Brackets extension - JSDownloader</title>
				<link>http://www.raymondcamden.com/index.cfm/2013/4/24/New-Brackets-extension--JSDownloader</link>
				<description>
				
				Over the weekend I was working on a small project and needed a copy of jQuery. I try to avoid the CDN as I find myself at airports without wifi access sometimes so I did what I normally do:

&lt;ul&gt;
&lt;li&gt;Go to jQuery.com&lt;/li&gt;
&lt;li&gt;Click the download link&lt;/li&gt;
&lt;li&gt;Click for the latest minified version&lt;/li&gt;
&lt;li&gt;Right click, save as&lt;/li&gt;
&lt;/ul&gt;That&apos;s what I always do - but it kinda bugs me. I had heard of a tool called &lt;a href=&quot;https://github.com/twitter/bower&quot;&gt;Bower&lt;/a&gt; that I thought might help. It&apos;s a package manager for the web. In theory, it would do what I wanted. I went to the command line, installed it via npm (have I said before how much npm rocks?), and then  fetched a copy of jQuery like so: bower install jquery. 

This worked - and it was epic cool - until I realized how much it grabbed...

&lt;img src=&quot;http://www.raymondcamden.com/images/Screenshot_4_24_13_11_28_AM.png&quot; /&gt;

Ugh. Don&apos;t get me wrong - this was still quicker then my old process. And I &quot;get&quot; the idea behind the metadata involved here and why it would be useful in the future. Bower is pretty damn powerful and I definitely recommend folks take a look at it.

But what if you just want a copy of the library, one time, and that&apos;s it? 

I decided to whip up a quick Brackets extension as a proof of concept. Clicking the &quot;Run JSDownloader&quot; menu option opens up a dialog of options:

&lt;img src=&quot;http://www.raymondcamden.com/images/Screenshot_4_24_13_11_33_AM.png&quot; /&gt;

Clicking the library fires off a process to download it:

&lt;img src=&quot;http://www.raymondcamden.com/images/Screenshot_4_24_13_11_35_AM.png&quot; /&gt;

And yeah... that&apos;s it. Simple, direct, exactly what I need. There&apos;s a few caveats though.

Right now it only supports &quot;single file&quot; downloads. I&apos;ve got basic architecture in there to support a list of files, but it isn&apos;t complete. The idea is that if you provide a list of files, it will create a subdirectory based on the name of the library (as in: currentdir/jqueryui/) and then copy the resources there. But this isn&apos;t complete yet because...

The second issue is that Brackets still doesn&apos;t support binary file writes in extensions. In theory I could do so if I hook up a Node module to my extension, but... honestly it feels like a bit much. I&apos;d rather just wait a bit and hope for support in a future sprint.

Finally, there is no support in Brackets yet for refreshing the project view. So while the extension certainly works, you need to do a reload to see the files show up.

So - where did that last of four projects come from? This is kinda cool I think. In order to &quot;drive&quot; the data list, my extension reads from a simple JSON packet. Here&apos;s how it looks now:

&lt;script src=&quot;https://gist.github.com/cfjedimaster/5453564.js&quot;&gt;&lt;/script&gt;

While this file is in the extension itself, my code reads the GitHub version of it instead:

&lt;script src=&quot;https://gist.github.com/cfjedimaster/5453567.js&quot;&gt;&lt;/script&gt;

This means folks could add a new library by just committing to my GitHub repo. I don&apos;t have a nice UI to refresh the cache, but if folks end up using and contributing to this extension, I&apos;ll add it.

Download/Fork the code here: &lt;a href=&quot;https://github.com/cfjedimaster/brackets-jsdownloader&quot;&gt;https://github.com/cfjedimaster/brackets-jsdownloader&lt;/a&gt;
				</description>
				
				
				<category>Development</category>
				
				<category>JavaScript</category>
				
				<pubDate>Wed, 24 Apr 2013 11:14:00 -0400</pubDate>
				<guid>http://www.raymondcamden.com/index.cfm/2013/4/24/New-Brackets-extension--JSDownloader</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Article Posted (Again) : Building a Google Maps Application with Updating Markers</title>
				<link>http://www.raymondcamden.com/index.cfm/2013/4/22/Article-Posted-Again--Building-a-Google-Maps-Application-with-Updating-Markers</link>
				<description>
				
				&lt;img src=&quot;http://www.raymondcamden.com/images/map-trucks.jpg&quot; style=&quot;float:left;margin-right: 10px;margin-bottom:10px&quot; /&gt; Just as an FYI, today my first article on &lt;a href=&quot;http://flippinawesome.org/&quot;&gt;flippin&apos; awesome!&lt;/a&gt; was published this morning: &lt;a href=&quot;http://flippinawesome.org/2013/04/22/google-maps-markers/&quot;&gt;Building a Google Maps Application with Updating Markers&lt;/a&gt;

In the article I discuss how to create a Google Map that automatically refreshes marker data every few seconds. The idea being that you may have data for moving items (trucks, dragons, users with jetpacks) and your map can automatically update the display in near real time.The article focuses on the client-side aspect of the application with a little bit of time spent on the server-side. I wanted to share one little tip that I didn&apos;t think was relevant to the article but that my readers may find interesting. I had originally planned on sharing a live demo of the map with the article. While it is trivial to fire up a Node app, I was curious if I could a) use a subdomain off my main server and b) use port 80 even though Apache was using it for my virtual servers. Turns out this is rather easy.

I&apos;ll be honest and say I do not grok this code 100% (hell, not even 1%), but it worked perfectly fine both on my local OS X Apache as well as my live Windows server.

&lt;script src=&quot;https://gist.github.com/cfjedimaster/5435397.js&quot;&gt;&lt;/script&gt;

My read of this is - listen for the domain nodetest.dev and proxy all requests, back and forth, to the server at 127.0.0.0 on port 3000. As I said, I was able to hit my subdomain just fine and Apache handled the proxy perfectly. 

I ended up not sharing this because my server-side logic didn&apos;t constrain truck movement, so after running for a long time, the data points wandered off the main view port.
				</description>
				
				
				<category>Development</category>
				
				<category>JavaScript</category>
				
				<pubDate>Mon, 22 Apr 2013 08:53:00 -0400</pubDate>
				<guid>http://www.raymondcamden.com/index.cfm/2013/4/22/Article-Posted-Again--Building-a-Google-Maps-Application-with-Updating-Markers</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Another reason to attend MAX - Hack on Brackets and PhoneGap</title>
				<link>http://www.raymondcamden.com/index.cfm/2013/4/18/Another-reason-to-attend-MAX--Hack-on-Brackets-and-PhoneGap</link>
				<description>
				
				Attending MAX? Or going to be in LA at the same time? Use &lt;a href=&quot;http://brackets.io&quot;&gt;Brackets&lt;/a&gt; or &lt;a href=&quot;http://www.phonegap.com&quot;&gt;PhoneGap&lt;/a&gt;? Both teams will be hosting a hackathon on Monday and Tuesday from 1 to 6PM. A MAX ticket is &lt;strong&gt;not&lt;/strong&gt; required to attend. There will be free wifi and a comfy place to sit. While a MAX badge isn&apos;t required, if you are not registering for MAX you &lt;strong&gt;must&lt;/strong&gt; register on the EventBrite site. For more details, see &lt;a href=&quot;http://dev.brackets.io/hack/adobemax/&quot;&gt;http://dev.brackets.io/hack/adobemax/&lt;/a&gt;. No prior experience required!

&lt;img src=&quot;http://www.raymondcamden.com/images/logo1.png&quot; /&gt;
				</description>
				
				
				<category>Development</category>
				
				<pubDate>Thu, 18 Apr 2013 13:44:00 -0400</pubDate>
				<guid>http://www.raymondcamden.com/index.cfm/2013/4/18/Another-reason-to-attend-MAX--Hack-on-Brackets-and-PhoneGap</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Proof of Concept - Connecting a Node app with Brackets</title>
				<link>http://www.raymondcamden.com/index.cfm/2013/4/16/Proof-of-Concept--Connecting-a-Node-app-with-Brackets</link>
				<description>
				
				In one of the more recent &lt;a href=&quot;http://brackets.io&quot;&gt;Brackets&lt;/a&gt; sprints, Node.js was added to the core of Brackets. If you read my blog you know I&apos;ve been playing a bit with Node.js lately. I&apos;ve yet to deploy any &quot;real&quot; web site/app using Node, but I&apos;ve built a few applications and demos as a way to help learn the platform. In a recent Twitter conversation the idea of using Node.js within an extension came up and I had a good idea I thought I&apos;d try out.A few months back I &lt;a href=&quot;http://www.raymondcamden.com/index.cfm/2012/12/13/Another-proof-of-concept--MockData&quot;&gt;blogged&lt;/a&gt; about a Node.js project I created called MockData. The idea was to provide a fake datasource of JSON data for client-side testing. So if you needed to prototype an app that would generate a list of people, you would fire up the server and access the resource by passing in query parameters that &apos;shape&apos; the result data. So for example: 

http://localhost:3000/?num=rnd:10&amp;author=name&amp;age=age&amp;gender=oneof:male:female&amp;salary=num:150000

This returns:

&lt;img src=&quot;http://www.raymondcamden.com/images/screenshot48.png&quot;&gt;

I built the project, released it up on GitHub (&lt;a href=&quot;https://github.com/cfjedimaster/mockdata&quot;&gt;https://github.com/cfjedimaster/mockdata&lt;/a&gt;) and didn&apos;t really think about it again until last week. The app I built is easy to use... if you know Node. But I bet that I could make it even easier by integrating it into Brackets itself. 

There are a couple of useful links for this. The first being on the Bracket&apos;s wiki: &lt;a href=&quot;https://github.com/adobe/brackets/wiki/Brackets-Node-Process:-Overview-for-Developers&quot;&gt;Brackets Node Process: Overview for Developers&lt;/a&gt;. The second is a sample GitHub project: &lt;a href=&quot;https://github.com/joelrbrandt/brackets-simple-node&quot;&gt;https://github.com/joelrbrandt/brackets-simple-node&lt;/a&gt;

I won&apos;t repeat the docs, but will encourage you to read them &lt;i&gt;carefully&lt;/i&gt;. I&apos;ll be honest and say I don&apos;t think I grok them 100% quite yet, but I was able to get things working. The warning about abandoned Node processes is a serious one.  In my testing I had to force quit Brackets a few times. That&apos;s probably something stupid I did. I&apos;ll also point out that you don&apos;t want to forget about restarting Node on every change to your Node.js code. As you go back and forth between extension code and pure Node.js code, you can forget this. Two things that hit me that are not in the guides were:

&lt;ol&gt;
&lt;li&gt;For some reason, if I forgot to var scope a variable, I&apos;d get errors. Typically this isn&apos;t a critical error. But for my Node.js stuff &lt;i&gt;under Brackets&lt;/i&gt;, it was. So I had one non-var-scoped variable in my original Node.js demo that ran just fine as is, but not in Node.js under Brackets.
&lt;li&gt;If you console.dir from Node.js in Brackets, you just get an object Object string. Skip that and use console.log(JSON.stringify(foo)) instead.
&lt;/ol&gt;

So did it work? Heck yes! Here&apos;s the menu item I added...

&lt;img src=&quot;http://www.raymondcamden.com/images/Screen Shot 2013-04-16 at 2.47.37 PM.png&quot; /&gt;

Which then fires off the request and presents a nice dialog to the user:

&lt;img src=&quot;http://www.raymondcamden.com/images/Screen Shot 2013-04-16 at 2.48.40 PM.png&quot; /&gt;

At which point you can start playing with it in your JavaScript code. I&apos;m considering adding a nice little icon so that you can click and copy the URL to your clipboard in case you forget. There&apos;s also the issue of documentation. I know how to massage the server to get what I want, but I should provide a quick reference guide. 

Anyway... what do you think? You can download the bits below. If &lt;i&gt;one&lt;/i&gt; person says this is cool I&apos;ll add it to GitHub.
				</description>
				
				
				<category>Development</category>
				
				<category>JavaScript</category>
				
				<pubDate>Tue, 16 Apr 2013 14:28:00 -0400</pubDate>
				<guid>http://www.raymondcamden.com/index.cfm/2013/4/16/Proof-of-Concept--Connecting-a-Node-app-with-Brackets</guid>
				
				
				<enclosure url="http://www.raymondcamden.com/enclosures/brackets-mockserver1.zip" length="6540" type="application/zip"/>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Join me at Adobe MAX</title>
				<link>http://www.raymondcamden.com/index.cfm/2013/4/12/Join-me-at-Adobe-MAX</link>
				<description>
				
				Still not sure if you&apos;re going to Adobe MAX this year? Check out my sessions below:

&lt;a href=&quot;https://bit.ly/XmPVJt&quot;&gt;Working Faster and Smarter with Edge Inspect&lt;/a&gt;

&lt;a href=&quot;https://bit.ly/Vyu97L&quot;&gt;Debugging Your Web Apps&lt;/a&gt;

&lt;a href=&quot;https://bit.ly/Wc52VD&quot;&gt;Advanced PhoneGap Build&lt;/a&gt;

Or just check out the entire catalog &lt;a href=&quot;https://www.adobe-max.com/scheduler/catalog.do&quot;&gt;here&lt;/a&gt;. I think we&apos;ve got a great lineup this year and some &lt;i&gt;really&lt;/i&gt; &lt;a href=&quot;http://max.adobe.com/speakers.html?scid=social6904564&quot;&gt;cool speakers&lt;/a&gt;.

Finally, if the price is a sticking point for you, you can register using the code MXSM13 for 300 dollars off. Every time you do this, a piece of chocolate cake is overnight Fedexed to my house. Don&apos;t hold back - sign up today!

p.s. Oh, and apparently a little band called the Black Keys will be there too...

&lt;img src=&quot;http://www.raymondcamden.com/images/home-agenda.jpg&quot; /&gt;
				</description>
				
				
				<category>Development</category>
				
				<pubDate>Fri, 12 Apr 2013 11:47:00 -0400</pubDate>
				<guid>http://www.raymondcamden.com/index.cfm/2013/4/12/Join-me-at-Adobe-MAX</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>New project: Service Data Format Library</title>
				<link>http://www.raymondcamden.com/index.cfm/2013/4/10/New-project-Service-Data-Format-Library</link>
				<description>
				
				Yesterday while on the road (ok, technically, in the air), I thought it might be kind of cool if there was a &quot;library&quot; of common JSON responses. I&apos;ve used AJAX mocking services before (hell, I&apos;ve even &lt;a href=&quot;http://www.raymondcamden.com/index.cfm/2012/12/13/Another-proof-of-concept--MockData&quot;&gt;built&lt;/a&gt; one), but if you don&apos;t know the &quot;form&quot; of a remote service, then you can&apos;t really mock it, right? To be honest, there probably aren&apos;t that many services out there that people need to mock, but if you had an example JSON packet you could use right away, I kinda thought that might be useful.

I&apos;ve created a new project on GitHub for this: &lt;a href=&quot;https://github.com/cfjedimaster/ServiceDataFormatLibrary&quot;&gt;ServiceDataFormatLibrary&lt;/a&gt;. It has a grand total of one example so far, but I figured I&apos;d put it out there and see who wants to help flesh it out.
				</description>
				
				
				<category>Development</category>
				
				<category>JavaScript</category>
				
				<pubDate>Wed, 10 Apr 2013 06:36:00 -0400</pubDate>
				<guid>http://www.raymondcamden.com/index.cfm/2013/4/10/New-project-Service-Data-Format-Library</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Check out Flippin&apos; Awesome!</title>
				<link>http://www.raymondcamden.com/index.cfm/2013/4/8/Check-out-Flippin-Awesome</link>
				<description>
				
				I&apos;m a few days late for this (been a busy couple days) but my buddy and coworker Brian Rinaldi recently launched a new site, &lt;a href=&quot;http://flippinawesome.org/&quot;&gt;Flippin&apos; Awesome&lt;/a&gt;. The site covers the entire gamut of web-related articles - from design to code to everything in between. Check it out!

&lt;img src=&quot;http://www.raymondcamden.com/images/Screen Shot 2013-04-08 at 2.32.01 PM.png&quot; /&gt;
				</description>
				
				
				<category>Development</category>
				
				<pubDate>Mon, 08 Apr 2013 14:22:00 -0400</pubDate>
				<guid>http://www.raymondcamden.com/index.cfm/2013/4/8/Check-out-Flippin-Awesome</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Quick Code Sample - Add your Behance portfolio to your web site</title>
				<link>http://www.raymondcamden.com/index.cfm/2013/4/5/Quick-Code-Sample--Add-your-Behance-portfolio-to-your-web-site</link>
				<description>
				
				A few months ago Adobe acquired &lt;a href=&quot;http://www.behance.net&quot;&gt;Behance&lt;/a&gt;, a sort-of &quot;LinkedIn for Artists&quot; (thanks TechChrunch for that description). At the time I didn&apos;t really pay attention, but earlier this week I spent some time on the site and was incredibly impressed. I think it is fair to assume that a majority of my visitors here fall more on the developer side than designer, but I&apos;d still recommend you check the site out. Even as a non-designer, I found the site &lt;i&gt;really&lt;/i&gt; cool. It is a pleasure to use. You can also use the site as a way to keep up with your favorite designers. Currently there are over one million users so there&apos;s a pretty huge community already. For a good example, check out the work from my coworker Greg Wilson: &lt;a href=&quot;http://be.net/gwilson&quot;&gt;http://be.net/gwilson&lt;/a&gt;&lt;img src=&quot;http://www.raymondcamden.com/images/Screen Shot 2013-04-05 at 8.09.10 AM.png&quot; /&gt;

Cool, right? I was very happy to see that Behance had an &lt;a href=&quot;http://www.behance.net/dev&quot;&gt;API&lt;/a&gt;. I plan on creating a demo of this sometime next week. In the meantime though I noticed that there was no way to embed portfolio data on another site via a simple widget. I thought it might be kind of fun to build that. Every user has a public RSS feed, so I thought there might be a nice little script I could build to allow folks to embed portfolios on their personal site. Turns out, I just started reading a book on this very topic (&quot;Third Party JavaScript&quot;), so what I&apos;ve written now may be pretty bad. It works of course, but I&apos;m hoping this book gives me some ideas on how to do it better. (And I promise - when I finish the book I&apos;ll return to this script and tell you guys what I changed.) 

I began by creating a simple page. 

&lt;script src=&quot;https://gist.github.com/cfjedimaster/5319111.js&quot;&gt;&lt;/script&gt;

You can see the script tag pointing to my behance script. I needed a way to specify a user so in this case I went with a global variable. It&apos;s possible to pass in variables via the query string, but this causes problems if you use async/deferred script tags. Now let&apos;s look at the actual script.

&lt;script src=&quot;https://gist.github.com/cfjedimaster/5319115.js&quot;&gt;&lt;/script&gt;

This may be a bit complex so let me break it down for you. Start at line 43 (notice - I know the Gist displays are a bit broken lately, sorry). I check for the global variable and if it doesn&apos;t exist, I exit immediately. Otherwise, I use JSON/P to open a connection to Google&apos;s Feed API. This lets me bypass cross-domain security issues as well as turn the RSS feed at Behance into a &lt;i&gt;much&lt;/i&gt; simpler JSON structure. 

One little nit here. Notice that I have to specify a callback function. All of the code on this page is meant to be self-contained. I don&apos;t want to leak out into the global variable scope and blow away any code you may have written yourself. But for the callback to work it needed to be visible globally.

So to get around that, I create a randomly named function. You can see that logic in lines 5 to 11. 

Outside of that - the code is relatively simple. Take those results. Draw it into the DOM. And that&apos;s it. The CSS portion is a bit messy. You can see it as one ginormous string in line 57. That&apos;s probably something I could do better. 

Over all though I&apos;m pretty happy with the result. I want to thank &lt;a href=&quot;http://gregsramblings.com/&quot;&gt;Greg Wilson&lt;/a&gt; for helping me improve the design. You can see the example here:

&lt;a href=&quot;http://www.raymondcamden.com/demos/2013/apr/2/test.html&quot;&gt;http://www.raymondcamden.com/demos/2013/apr/2/test.html&lt;/a&gt;

I&apos;ve got one little CSS issue I&apos;d love some help with. The last thing I did was add the Behance logo to the top header. This pushed over the name a bit. If anyone has a fix for that, I&apos;d appreciate it.

If anyone makes use of this code, please let me know.
				</description>
				
				
				<category>Development</category>
				
				<category>JavaScript</category>
				
				<pubDate>Fri, 05 Apr 2013 07:44:00 -0400</pubDate>
				<guid>http://www.raymondcamden.com/index.cfm/2013/4/5/Quick-Code-Sample--Add-your-Behance-portfolio-to-your-web-site</guid>
				
				
			</item>
			
		 	
			</channel></rss>