<?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>James Eggers</title>
	<atom:link href="http://jamesreggers.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://jamesreggers.com</link>
	<description>Inspiring New Content On the Internet</description>
	<lastBuildDate>Fri, 05 Apr 2013 21:45:52 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Redesigning the Save Button Is the Wrong Approach</title>
		<link>http://jamesreggers.com/2013/04/05/redesigning-the-save-button-is-the-wrong-approach/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=redesigning-the-save-button-is-the-wrong-approach</link>
		<comments>http://jamesreggers.com/2013/04/05/redesigning-the-save-button-is-the-wrong-approach/#comments</comments>
		<pubDate>Fri, 05 Apr 2013 21:45:52 +0000</pubDate>
		<dc:creator>James Eggers</dc:creator>
				<category><![CDATA[posts]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">http://jamesreggers.com/?p=233</guid>
		<description><![CDATA[Every once in a while, I come across an article about someone talking about how antiquated the floppy disk icon of Save has become.  They talk about how many office documents of today would not have fit onto the 1.44mb &#8230; <a href="http://jamesreggers.com/2013/04/05/redesigning-the-save-button-is-the-wrong-approach/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Every once in a while, I come across an article about someone talking about how antiquated the floppy disk icon of Save has become.  They talk about how many office documents of today would not have fit onto the 1.44mb capacity of a floppy disk and as new generations of computer users arrive onto the scene, many have never used a floppy disk.  Obviously the icon needs redesigned these individuals discuss; however, I say it doesn&#8217;t need redesigned &#8211; the button itself needs to be removed altogether.</p>
<p><span id="more-233"></span></p>
<p>This past afternoon, I came across this<a title="Redsigning the Save Symbol on Branch" href="http://branch.com/b/redesigning-the-save-symbol-let-s-do-this"> branch conversion by PJ Onori</a>. In it, some fantastic ideas came up with different ideas on how to convey the abstract meaning of an icon and how to provide an indication on the current state.  I highly recommend that you read through it since it provides a lot of great insight into icon design in general.</p>
<p>While I am monitoring the stream, I also have to remember when it was the last time I pressed the save button in Microsoft Word and why I did such.  This seems obvious; however, looking at my own behaviors it was not.  There are 3 cases when I explicitly hit the save button (or as in one case &#8220;save as&#8221;).</p>
<ol>
<li><span style="line-height: 15px;">Periodic Saving</span></li>
<li>Finished Editing or Writing</li>
<li>Creating a Copy</li>
</ol>
<h2>Why do we Save Periodically?</h2>
<p>People save periodically because we all make mistakes and have all, more than likely, have lost work from a computer crash or power outage. Periodic saving ensures that the work we have lost is minimized to some degree.</p>
<p>Even though we all have done this, not all applications require us to do this.  Many cloud and mobile applications do not have an explicit save operation because they automatically save for you.  Open up applications like <a href="http://evernote.com/" target="_blank">Evernote </a>or even Microsoft&#8217;s OneNote and there is no explicit Save button.  Their constant saving in the background has diminished the need to explicitly save.  If you are not familiar with apps like this, you look for save; however, after learning that it does not exist and building the trust of it saving from using the product, the need evaporates.</p>
<h2>Why do we Save when Finished?</h2>
<p>We save when we are finished to make sure that the last of our work will be there when the next person reads the document.  We save <em>because</em> we are finished editing.  However, if we can detect when we have finished our work, why could we not save automatically?</p>
<p>This is the behavior exhibited by other auto-saving applications as well.  Apps like <a href="http://mindnode.com/" target="_blank">MindNode for iOS and Mac</a> save automatically; however, when a person is finished, they press the explicit &#8220;done&#8221; button and move on.  Doing such turns into a more natural flow of opening, writing, and finishing with no interruptions or extra steps.</p>
<h2>What about Saving a Copy or the Initial Save?</h2>
<p>This falls into a different behavioral change.  In many business applications like Microsoft Word you create a new file and you do not name the document until you save it for the first time.  If the save button is removed or is automatic, we need to invert this flow and ask for the document name first or in a way that has a smart default.  If we ask for a name up front, we could also say that this new document is a copy or is based off of another document as well.</p>
<h2>Is it REALLY that Simple?</h2>
<p>While I feel like there are a few flaws that I&#8217;m not seeing in my analysis of this new workflow, I also see it being the success of apps like MindNode.  Save is turning into an antiquated operation that could be automated.  Save is noise to a writer that could be removed in order to ensure focus and flow are maintained.  So is it important to talk about the redesign of the save icon, or is it time we completely begin to question the need to save explicitly?  I&#8217;d love to hear your thoughts in the comments below.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamesreggers.com/2013/04/05/redesigning-the-save-button-is-the-wrong-approach/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Playing Catch-Up and Looking Ahead</title>
		<link>http://jamesreggers.com/2013/03/29/playing-catch-up-and-looking-ahead/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=playing-catch-up-and-looking-ahead</link>
		<comments>http://jamesreggers.com/2013/03/29/playing-catch-up-and-looking-ahead/#comments</comments>
		<pubDate>Fri, 29 Mar 2013 13:58:26 +0000</pubDate>
		<dc:creator>James Eggers</dc:creator>
				<category><![CDATA[posts]]></category>

		<guid isPermaLink="false">http://jamesreggers.com/?p=218</guid>
		<description><![CDATA[So it&#8217;s been a while since I&#8217;ve added any new content (nearly 6 months).  Between the holidays, focusing a lot more at work, and also blogging for work I have been neglecting my personal brand and blog for too long. &#8230; <a href="http://jamesreggers.com/2013/03/29/playing-catch-up-and-looking-ahead/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>So it&#8217;s been a while since I&#8217;ve added any new content (nearly 6 months).  Between the holidays, focusing a lot more at work, and also<a title="My Blog Articles for DEG" href="http://www.degdigital.com/blog/author/james-eggers/" target="_blank"> blogging for work</a> I have been neglecting my personal brand and blog for too long.  So what does that mean?</p>
<p><span id="more-218"></span></p>
<h2>New Theme Coming</h2>
<p>One items I&#8217;m excited about is that I&#8217;m working on creating a new theme for the blog.  Having not created a WordPress Theme before, it&#8217;s been an interesting learning experience to say the least.  Here&#8217;s a screenshot of the design:</p>
<div id="attachment_219" class="wp-caption alignnone" style="width: 310px"><a href="http://jamesreggers.com/wp-content/uploads/2013/03/screenshot.png"><img class="size-medium wp-image-219" alt="New Blog Design for the Site" src="http://jamesreggers.com/wp-content/uploads/2013/03/screenshot-300x166.png" width="300" height="166" /></a><p class="wp-caption-text">An concept of the new blog theme I&#8217;ll be rolling out soon.</p></div>
<p>&nbsp;</p>
<h2>New Blog Series</h2>
<p>One of the largest pet projects I&#8217;ve been working on is refining how I do wireframes both at home and at work.  While this doesn&#8217;t sound exciting, it&#8217;s a different approach them many of the &#8220;responsive wireframe&#8221; tutorials that are popping up.  Expect to see more posts in the near future on how I&#8217;m using Node.JS and other technologies to provide a more meaningful story when wireframing.</p>
<h2>Upcoming Presentation</h2>
<p>Along with the blog posts, I&#8217;m in the process of creating a presentation for the <a title="Kansas City Developers Conference" href="http://kcdc.info" target="_blank">Kansas City Developers Conference</a> happening in early May.  Once such is done, I&#8217;ll be working on converting it into a narrated video for attendees and my wider blog audience as well.</p>
<h2>More To Come</h2>
<p>All in all, you can expect more content and general content coming in the near future.  It&#8217;s going to be a great 2013 &#8211; I just need to play a little catch up to make up the lost time.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://jamesreggers.com/2013/03/29/playing-catch-up-and-looking-ahead/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Giving an e-Gift could be Better</title>
		<link>http://jamesreggers.com/2012/10/08/giving-an-e-gift-could-be-better/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=giving-an-e-gift-could-be-better</link>
		<comments>http://jamesreggers.com/2012/10/08/giving-an-e-gift-could-be-better/#comments</comments>
		<pubDate>Mon, 08 Oct 2012 17:32:26 +0000</pubDate>
		<dc:creator>James Eggers</dc:creator>
				<category><![CDATA[posts]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">http://jamesreggers.com/?p=182</guid>
		<description><![CDATA[It&#8217;s October and that means many retailers are beginning to finalize their Holiday plans and queuing everything up for release in the next month or so. While some retailers have their Christmas and other holiday decorations up already, most e-commerce &#8230; <a href="http://jamesreggers.com/2012/10/08/giving-an-e-gift-could-be-better/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>It&#8217;s October and that means many retailers are beginning to finalize their Holiday plans and queuing everything up for release in the next month or so. While some retailers have their Christmas and other holiday decorations up already, most e-commerce websites won&#8217;t be rolling that out for another month.  It&#8217;s also around this time of year that I remember how terrible of an experience gifting digital downloads remains.</p>
<p><span id="more-182"></span></p>
<h2>The Current Trend</h2>
<p>If you have never given a gift of an mp3, e-card, or e-book to someone for the holidays or other occasion, here&#8217;s a quick rundown that I&#8217;ve experienced in most retailers.</p>
<ol>
<li>Locate the Digital Product</li>
<li>Add to Cart (or select &#8220;Gift this Product&#8221; on some retailers&#8217; sites)</li>
<li>Fill out the Name, Email, and Message Information for the gift</li>
<li>Complete Purchase</li>
</ol>
<h2>The Current Issues</h2>
<p>Now this is pretty straight forward and is fairly similar to the experiences associated with gifting physical goods.  However, there&#8217;s two big differences between the physical and digital stories.</p>
<ol>
<li>Gift Notification Emails are delivered immediately.</li>
<li>Gift Contents are located in the body (and sometime subject) of the email.</li>
</ol>
<p>By immediately providing notification that a person has received a digital gift, the responsibility for delivering the product on a specific date and time falls to the gift giver.  While this is the same concept of giving a gift physical to someone, it is more of a parallel of going to the store, finding the product, buying it, and wrapping it all while you are en route to the person who will receive the gift.</p>
<p>In addition to the speedy delivery of digital gifts, there&#8217;s also a lack of surprise in terms of what the gift contains.  While it can be argued that receiving and opening an email could invoke a surprise and delight response, receiving a plain-text email that says someone sent you a gift of a new mp3 album is like receiving an unwrapped gift in person.  It&#8217;s a surprise and a delight to receive something but there&#8217;s practically zero anticipation and excitement compared to experiencing a wrapped gift.</p>
<h2>A Different Approach</h2>
<p>So how can we address these trends that burden the giver and provides a lackluster response to the recipient?</p>
<h3>1. Specifying a Date and Time of Gift Delivery</h3>
<p>The first thing we can do is provide a way for the person buying the gift to specify when the gift should be delivered.  This would allow them to make the purchase well in advance of the event without having to remember to do everything right beforehand.</p>
<h3>2. Make the Email Notification Fun</h3>
<p>The next thing would be to allow the purchaser a way to select an email template that may correlate to the theme of the event.  This HTML email template could provide an image of a gift and still provide the To/From/Message information that accompanies gifts from e-commerce sites.  In addition, the subject line needs to be generalized in order to not give away the gift&#8217;s contents.  This has a potential of being affected by spam filters; however, I&#8217;m confident something could be figured out that&#8217;ll work without being flagged.</p>
<h3>3. Only reveal the gift on the website.</h3>
<p>Along with the email, another thing that comes to mind is that the product that was gifted should only be exposed once the person &#8220;opens the gift&#8221;.  This call to action from the email would direct the person to the website in a similar fashion to the current &#8220;download your gift now&#8221; links that are common.  The difference is that it wouldn&#8217;t be a direct download link but a landing page showcasing the product the person has received.</p>
<h3>4. Provide a &#8220;Thank You&#8221; reply</h3>
<p>Lastly, on this new landing page where the person finally receives the gift, give them the option to send the gift giver a &#8220;Thank You&#8221; message.  This doesn&#8217;t have to be anything beyond a traditional Contact form; however, can provide one additional piece to the experience that is completely about sentimental value.  In the event that the site allows anonymous gifting, such would also allow a way of providing thanks without violating the trust of anonymity.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamesreggers.com/2012/10/08/giving-an-e-gift-could-be-better/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Get A Job!</title>
		<link>http://jamesreggers.com/2012/08/27/get-a-job/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=get-a-job</link>
		<comments>http://jamesreggers.com/2012/08/27/get-a-job/#comments</comments>
		<pubDate>Tue, 28 Aug 2012 00:02:45 +0000</pubDate>
		<dc:creator>James Eggers</dc:creator>
				<category><![CDATA[posts]]></category>
		<category><![CDATA[Presentations]]></category>
		<category><![CDATA[Presentation]]></category>

		<guid isPermaLink="false">http://jamesreggers.com/?p=155</guid>
		<description><![CDATA[Back in April of 2012, I did a presentation at the Kansas City Developers Conference on tips and tricks to finding and landing your dream job. Having been through a number of interviews as both an interviewer as well as &#8230; <a href="http://jamesreggers.com/2012/08/27/get-a-job/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Back in April of 2012, I did a presentation at the <a title="Kansas City Developers Conference" href="http://www.kcdc.info" target="_blank">Kansas City Developers Conference</a> on tips and tricks to finding and landing your dream job. Having been through a number of interviews as both an interviewer as well as someone trying to get hired over the last handful of years, I have had the opportunity to see what things are important to both sides of the table. In the end, both parties need to make sure that the other side is right for them and it&#8217;s not just a one-way relationship.</p>
<p><span id="more-155"></span></p>
<p>The presentation is below if you&#8217;d like to listen to it (<a title="Get a Job on SoundCloud" href="http://soundcloud.com/jameseggers/get-a-job" target="_blank">link</a>, <a title="Get a Job on Slideshare" href="http://www.slideshare.net/JamesEggers/get-a-job-14088457" target="_blank">slides</a>):</p>
<p><iframe src="http://w.soundcloud.com/player/?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F57745348&amp;show_artwork=false" height="166" width="100%" frameborder="no" scrolling="no"></iframe></p>
<p>Overall, the talk focused on 3 important pieces of a job prospect&#8217;s journey; locating an opening, becoming marketable, and the interview process. Each of these things are important and many people make mistakes in one or all of them.</p>
<h2>Locating a Position:</h2>
<p>I&#8217;m very opinionated when it comes to this section. If you want to find a job that&#8217;ll make you happy you need to do your research. In my opinion, job sites like Monster.com and CareerBuilder.com are really only good to identify what skills are being looked for in the area and what companies are looking at a baseline. Job sites rarely give you any indication about the personality and culture of the company, though. I&#8217;m also not a fan of recruiters. While there are many good recruiters out there (or so I hear), most get paid based on putting you into a job, not necessarily the job you truly want or need. I&#8217;ve had a couple bad run ins when using recruiters to the point where I&#8217;ll never use them again. The same goes with LinkedIn. With a few rare instances, I view LinkedIn as nothing more than a Job Site ran by Recruiters.</p>
<p>Which leads us to the option of going out, meeting people, and building your network. Networking provides you an easy way to connect to people who work for companies that you may or may not want to work with. They can tell you about good companies and bad ones. Also, you can begin to learn about your future coworkers and them you through networking. This is a double edge sword though. If you think your future coworker is a total jerk, why would you want to work for that company and deal with him or her every day? Likewise, if they think the same way about you, they may be less prone to provide a positive review. This means that you always have to be yourself and ensure that you are a person that other people want to get to know better.</p>
<h2>Personal Branding</h2>
<p>This takes us to the next important piece of landing a job. You have to give others a reason to hire you. Your resume is the weakest form of personal marketing that you have available to you. I highly recommend starting a blog if you do not have any web-presence yet. Blogs are fantastic for a number of reasons:</p>
<ol>
<li>Blogs provide a place where you can control your story</li>
<li>Blogs provide a place for you to chronicle your trials in your fields</li>
<li>Blogs provide a central hub for your other online presences</li>
</ol>
<p>Anyone who has blogged for a while can tell you how beneficial blogging can be. It provides a place for you to control who you are on the web. You don&#8217;t have to worry about fitting onto a single page or anyone trying to cram you into their specific template and under their own logo. You are yourself on your blog.</p>
<p>It also allows you to write about what problems you&#8217;ve solved (within proper non-disclosure agreements of course). If you&#8217;ve fixed some problem at some point, blog about it. One thing that I learned early on was that I will ALWAYS encounter that issue again later. In the rare chances that I don&#8217;t, others will and being able to point them somewhere instead of trying to reiterate yourself again helps keep things consistent and shows that you can provide a resource to others.</p>
<p>Lastly, blogging provides you the platform to pull in content from other sources. If you code, you can link out to your <a title="Github" href="http://github.com" target="_blank">Github</a> or similar code repository. If you present, you can talk about your presentation and link out to your slides on <a title="SlideShare" href="http://www.slideshare.com" target="_blank">Slideshare</a>. If you do video, there&#8217;s <a title="YouTube" href="http://Youtube.com" target="_blank">YouTube</a> and <a title="Vimeo" href="http://www.vimeo.com" target="_blank">Vimeo</a>. And, in the case of this post, if you do just sound/audio recordings, there&#8217;s <a title="SoundCloud" href="http://SoundCloud.com" target="_blank">SoundCloud</a> and <a title="Audioboo" href="http://www.audioboo.fm" target="_blank">Audioboo</a>. These are all things that you can put onto your resume and use to spring board more content for your blog. The more content you have, the more people will come to your site and the better you&#8217;ll become as a writer and a job seeker.</p>
<h2>Interview Time</h2>
<p>So you&#8217;ve landed the job and are going in for the interview. Now what to do? I recommend 3 things:</p>
<ol>
<li>Research the Company again</li>
<li>Review Yourself and Blog again</li>
<li>Write Questions to ask the Company Representatives</li>
</ol>
<p>The first thing you want to do is research the company you have an interview with once again. How did you find the position and company again? Why did you want to apply here again? Who told you about it? All of these things will help you with the near ubiquitous question of &#8220;what brought you to Company XYZ?&#8221;. Having names of people even if they didn&#8217;t refer you can help you get in the door too. If you follow coworkers on Twitter or via their blogs, this can provide other talking points about those people and some of the things that you&#8217;ve seen through them.</p>
<p>Secondly, an interview can be thought of as a presentation about yourself. Presenting really stresses a lot of people out; however, you know the topic forwards and backwards because no one knows you better than yourself. With that said, it doesn&#8217;t hurt to review your blog and your various content streams. Find out what items are most popular and try to draw reasons why that is. Think of why you wrote or created that content in the first place. All of these things provides you with stories to tell in the interview and can illustrate your trials and accomplishments easier.</p>
<p>Lastly, ask questions back to the person interviewing you to validate that this truly is a company that you want to work for. In the recording above, I talk about how I did an interview at a &#8220;pretty decent company&#8221;; however, after getting past the lobby, it quickly turned into a place I didn&#8217;t want to work at. Asking questions is a way to confirm this as well. One question I like to ask is what I call the &#8220;sick child question&#8221;. It simply states &#8220;If an employee has a sick child and has to stay home with them for a 1/2 day or so, what is the company policy on such things?&#8221; Does the company allow them to work remotely, make up the hours, require a sick/vacation day to be taken or tapped into, or just hopes the child gets better and the person returns when they can? Each of those 4 answers can paint the company in a completely different light when it comes to how it handles life issues that will come up. Even if you don&#8217;t have children or anyone you take care of, life events will happen and knowing that the company understands that over having strict policies is a huge item when finding a great place to work.</p>
<h2>One Final Note</h2>
<p>If you don&#8217;t like the job that the interview covers, then don&#8217;t accept it. While there are cases where you NEED a job and the income; if such isn&#8217;t the case then taking the time to do the research and make sure that you will be happy with your next job is important. So many people dream of a job or career different than what they are currently in yet settle into a less than perfect job. A dream job always changes and thus we&#8217;re always chasing it; however, we can make sure that we&#8217;re always pursuing it properly without back tracking.</p>
<p>I encourage you to listen to the entire presentation since there are a number of stories and additional tips held within. In addition, if you have questions leave comments or talk to me on <a title="James Eggers on Twitter" href="http://twitter.com/JamesEggers" target="_blank">Twitter</a> (<a title="James Eggers on Twitter" href="http://www.twitter.com/JamesEggers" target="_blank">@JamesEggers</a>) or <a title="This article mentioned on Google+" href="https://plus.google.com/106128533724448372645" target="_blank">Google+</a> (<a title="James Eggers on Google+" href="https://plus.google.com/106128533724448372645?rel=author" target="_blank">James Eggers</a>) and I will see what I can do to help.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamesreggers.com/2012/08/27/get-a-job/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using NPM Scripts for Client-Side Module Installation</title>
		<link>http://jamesreggers.com/2012/08/08/using-npm-scripts-for-client-side-module-installation/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=using-npm-scripts-for-client-side-module-installation</link>
		<comments>http://jamesreggers.com/2012/08/08/using-npm-scripts-for-client-side-module-installation/#comments</comments>
		<pubDate>Wed, 08 Aug 2012 13:15:20 +0000</pubDate>
		<dc:creator>James Eggers</dc:creator>
				<category><![CDATA[posts]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[NodeJS]]></category>

		<guid isPermaLink="false">http://jamesreggers.com/?p=129</guid>
		<description><![CDATA[One of the largest things that I have loved about working in Node.js is the ability to create utilities that work on both the server and within the browsers.  Being able to create packages for NPM and then reuse them &#8230; <a href="http://jamesreggers.com/2012/08/08/using-npm-scripts-for-client-side-module-installation/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>One of the largest things that I have loved about working in Node.js is the ability to create utilities that work on both the server and within the browsers.  Being able to create packages for NPM and then reuse them in both environments has lead to a lot of shared and unified code.  However, the general experience involving installing a package and moving it to the client left a lot to be desired.  Thankfully, NPM offers a possible solution through it&#8217;s use of scripts.</p>
<p><span id="more-129"></span></p>
<h2>Using Scripts with NPM</h2>
<p>NPM has the ability to run custom scripts at various times of different commands is offers.  For example, defining a <code>test</code> script will be ran when someone runs <code>npm test &lt;package&gt;</code>. <a title="Scripts for NPM" href="https://npmjs.org/doc/scripts.html" target="_blank">NPM provides with a number of pre-defined hooks in which scripts</a> that can be used out of the box to automate a number of processes.  In addition to these pre-defined hooks, you can define your own labels in order for the scripts so that they can be ran manually using the <code>run-script</code> command.</p>
<p>For example, if you wish to have a custom script to be executed after someone installs a module for the first time, your package.json file may have the following section defined:</p>
<pre>"scripts": {
    "test": "mocha tests/luhn-tests.js -R spec"
    , "install": "node bin/client-install-directions.js"
}</pre>
<p>The above snippet of a <code>package.json</code> file, <code>install</code> tells NPM that a script is provided to be ran after someone types in <code>npm install &lt;package&gt;</code>.  This script will be ran automatically which can be used to help configure an environment or, as in this case, provide instructions on how to install the module into a client-exposed JavaScript directory for client-side usage.</p>
<h2>Using Custom Scripting Hooks</h2>
<p>Using the default events can provide a lot of helpful hooks into NPM for automation and providing additional information to the consumer; however, you can define your own hooks that can be ran with NPM&#8217;s <code>run-script</code> command.  Let&#8217;s modify the snippet to illustrate this point:</p>
<pre>"scripts": {
    "test": "mocha tests/luhn-tests.js -R spec"
    , "install": "node bin/client-install-directions.js"
    , "update": "node bin/client-install-directions.js"
    , "client-install": "node bin/client-install.js"
}</pre>
<p>In this modified version, 2 additional lines were provided. First, we added <code>update</code> to do provide the same instructions as <code>install</code> so that a person updating the package will have the same experience as that of a fresh install. Secondly, we added a <code>client-install</code> script which isn&#8217;t automatically used by NPM. To run this custom script, we just need to use the following command:</p>
<pre>npm run-script &lt;package&gt; client-install</pre>
<p>This will tell NPM to look in the <code>scripts</code> section of the <code>package.json</code> file for the pacakge and execute the <code>client-install</code> script.  By defining scripts in this manner, it allows for a number of utility scripts to be implemented without the need of globally install additional shell commands like some modules require.</p>
<h2>In the Wild</h2>
<p>If you want to see an example of this in action, three packages that I&#8217;ve authored have been updated to include these new scripts.  Feel free to review them and provide any feedback on how I can make the experience better.</p>
<ul>
<li>Luhn (1.0.5) &#8211; Credit Card (Mod10) Validation (<a title="Luhn on NPM" href="https://npmjs.org/package/luhn" target="_blank">npm</a>, <a title="Luhn Validator on Github" href="https://github.com/JamesEggers1/node-luhn" target="_blank">github</a>)</li>
<li>ABAValidator (1.0.4) &#8211; Routing Number Validation (<a title="ABAValidator on NPM" href="https://npmjs.org/package/ABAValidator" target="_blank">npm</a>, <a title="ABAValidator on Github" href="https://github.com/JamesEggers1/node-ABAValidator" target="_blank">github</a>)</li>
<li>DateValidator (1.0.5) &#8211; A Simple Day, Month, Year Date Validator (<a title="DateValidator on NPM" href="https://npmjs.org/package/DateValidator" target="_blank">npm</a>, <a title="DateValidator on Github" href="https://github.com/JamesEggers1/node-DateValidator" target="_blank">github</a>)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://jamesreggers.com/2012/08/08/using-npm-scripts-for-client-side-module-installation/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Easier module imports with Requiredir</title>
		<link>http://jamesreggers.com/2012/07/02/easier-module-imports-with-requiredir/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=easier-module-imports-with-requiredir</link>
		<comments>http://jamesreggers.com/2012/07/02/easier-module-imports-with-requiredir/#comments</comments>
		<pubDate>Mon, 02 Jul 2012 02:56:02 +0000</pubDate>
		<dc:creator>James Eggers</dc:creator>
				<category><![CDATA[posts]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[NodeJS]]></category>

		<guid isPermaLink="false">http://jamesreggers.com/?p=117</guid>
		<description><![CDATA[The more that I use Node.js, the more I enjoy it; however, there I have seen an issue in a couple of projects.  In these projects, some modules import in a large number of other modules that reside in single &#8230; <a href="http://jamesreggers.com/2012/07/02/easier-module-imports-with-requiredir/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>The more that I use Node.js, the more I enjoy it; however, there I have seen an issue in a couple of projects.  In these projects, some modules import in a large number of other modules that reside in single directory.  While it could be argued that the code could be refactored differently, scenarios exist where you may need to import in a number of modules that all exist in the same directory.</p>
<p><span id="more-117"></span></p>
<h2>Enter Requiredir()</h2>
<p>To address this scenario, I created <strong>requiredir</strong> (<a title="requiredir on npm" href="http://search.npmjs.org/#/requiredir" target="_blank">npm</a>, <a title="requiredir on github" href="https://github.com/JamesEggers1/node-requiredir" target="_blank">github</a>).  Where as Node&#8217;s <code>require()</code> function imports in a single module, <code>requiredir()</code> will import in a directory&#8217;s worth of modules using a similar syntax.</p>
<p><code> var requiredir = require("requiredir");<br />
var routes = require("./routes");<br />
</code></p>
<p>The above snippet provides will import in all modules located in the <code>./routes</code> directory.  When each module is imported, it becomes a named property on the (in this example) <code>routes</code> object.  So, if we had a module that managed all routes for the product pages and the customer pages of a site, those modules could be accessed in the following way.</p>
<p><code> var productRoutes = routes.products;<br />
var customerRoutes = routes.customers;</code></p>
<p>At this point, you can use each module as if you had called <code>require()</code> for each individually.  However, there are a few additional features for <code>requiredir()</code>.</p>
<p><code>var moduleCount = routes.length;<br />
var routeArray = routes.toArray();</code></p>
<p>There may come a scenario when you want to sequentially access modules that were imported in a fashion similar to an <code>Array</code>. For this reason, I added the <code>toArray()</code> function and use it in my migration utility that I&#8217;ll write about next.</p>
<h2>Other Details</h2>
<p>While that&#8217;s pretty much all there is to know about <code>requiredir</code>, there are two other things I need to point out.</p>
<ol>
<li>It does not import modules or any file whose filename starts with a &#8216;.&#8217; (i.e. hidden files on Mac and Linux).</li>
<li><code>requiredir()</code> does not do a recursive import. If you have directories within directories that need to be imported, those will need to be a separate <code>require()</code> or <code>requiredir()</code> depending on your situation.</li>
</ol>
<p>Beyond all of that, the only thing left is to simply install it from npm and have some fun with it.</p>
<p><code>npm install requiredir</code></p>
<p>My next post will be talking about <a title="Monarch - a generic migrations utility for Node.js" href="http://search.npmjs.org/#/monarch" target="_blank"><code>Monarch</code></a> my migration utility that uses this <code>requiredir</code> module. So if you are looking for an example of how <code>requiredir</code> is in use, stay tuned.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamesreggers.com/2012/07/02/easier-module-imports-with-requiredir/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>luhn &#8211; simple credit card validation for JavaScript and Node.js</title>
		<link>http://jamesreggers.com/2012/06/24/luhn-simple-credit-card-validation-for-javascript-and-node-js/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=luhn-simple-credit-card-validation-for-javascript-and-node-js</link>
		<comments>http://jamesreggers.com/2012/06/24/luhn-simple-credit-card-validation-for-javascript-and-node-js/#comments</comments>
		<pubDate>Sun, 24 Jun 2012 02:17:36 +0000</pubDate>
		<dc:creator>James Eggers</dc:creator>
				<category><![CDATA[posts]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[NodeJS]]></category>

		<guid isPermaLink="false">http://jamesreggers.com/?p=108</guid>
		<description><![CDATA[If you&#8217;ve worked on websites for any amount of time, there is a decent chance that you&#8217;ve encountered the need to validate credit card numbers at some point.  While there are a lot of compliance and security guidelines for working &#8230; <a href="http://jamesreggers.com/2012/06/24/luhn-simple-credit-card-validation-for-javascript-and-node-js/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>If you&#8217;ve worked on websites for any amount of time, there is a decent chance that you&#8217;ve encountered the need to validate credit card numbers at some point.  While there are a lot of compliance and security guidelines for working with credit card numbers, these don&#8217;t reduce the need for ensuring the user entered a valid credit card number into the form.  Some places will validate just length and ensure only numeric digits were provided; however, did you know there&#8217;s an algorithm that most credit cards are based on?</p>
<p><span id="more-108"></span></p>
<p><strong>luhn</strong> (<a title="luhn - on npm" href="http://search.npmjs.org/#/luhn" target="_blank">npm</a>, <a title="luhn - on github" href="https://github.com/JamesEggers1/node-luhn" target="_blank">github</a>) provides this algorithm (known as the luhn or mod10 algorithm &#8211; <a title="luhn - on wikipedia" href="http://en.wikipedia.org/wiki/Luhn" target="_blank">wikipedia</a>) for validating credit card numbers into a simple script that can be reused in both your browser and node.js applications.</p>
<h2>Installation</h2>
<p>Installing luhn is simple thanks to NPM.  To install it, simply type the following command.</p>
<pre>npm install luhn</pre>
<h2>Using with Node.js</h2>
<p>Once the package is installed using NPM, using the luhn is as simple as importing in the module into your code.</p>
<pre>var luhn = require("luhn").luhn;
var is_valid = luhn.validate("1234567890123456"); // returns false</pre>
<h2>Using with JavaScript</h2>
<p>One goal I had when writing luhn was to ensure that it can be used both client and server side. Being able to use it in both places ensure that you can write your validation code once and reuse it wherever.</p>
<p><strong>UPDATE &#8211; 09 Aug. 2012:</strong> the module has been updated to utilize NPM more to make client-side installation easier than manually copying the script from node_modules or referencing directly from node_modules. Typing in the following command will prompt you for a client-side installation directory and then will automatically copy the script to your JavaScript source directory.</p>
<pre>npm run-script luhn client-install</pre>
<p>To use the luhn in object from a client&#8217;s browser, you simply have to reference the script using a typical <code>&lt;script&gt;</code> tag and then use pretty much the same as above.</p>
<pre>&lt;script type="text/javascript" src="path/to/luhn-min.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
var luhn = window.luhn;
var is_valid = luhn.validate("1234567890123456"); // returns false
&lt;/script&gt;</pre>
<h2>Summary</h2>
<p>The luhn module is still in its early stages and I&#8217;m always looking for feedback.  If you have any suggestions or find any bugs, please <a title="ABAValidator Issue tracker on Github" href="https://github.com/JamesEggers1/node-luhn/issues" target="_blank">submit them to the issue tracker over on github</a> and I&#8217;ll see what I can do to get them updated. In addition, if you are looking for information on test credit card numbers to use, <a href="http://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card_numbers.htm" target="_blank">please refer to this link from PayPal.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://jamesreggers.com/2012/06/24/luhn-simple-credit-card-validation-for-javascript-and-node-js/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ABAValidator &#8211; Routing Number validation for Node.js</title>
		<link>http://jamesreggers.com/2012/06/06/abavalidator-routing-number-validation-for-node-js/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=abavalidator-routing-number-validation-for-node-js</link>
		<comments>http://jamesreggers.com/2012/06/06/abavalidator-routing-number-validation-for-node-js/#comments</comments>
		<pubDate>Wed, 06 Jun 2012 21:50:19 +0000</pubDate>
		<dc:creator>James Eggers</dc:creator>
				<category><![CDATA[posts]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[NodeJS]]></category>

		<guid isPermaLink="false">http://jamesreggers.com/?p=102</guid>
		<description><![CDATA[ABAValidator (npm, github) is just a JavaScript validation module that works both in Node.js on the server as well as in a client&#8217;s browser.  It provides a simple way to validate routing numbers that conform to the American Banking Association &#8230; <a href="http://jamesreggers.com/2012/06/06/abavalidator-routing-number-validation-for-node-js/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><strong>ABAValidator</strong> (<a title="ABAValidator on NPM" href="http://search.npmjs.org/#/ABAValidator" target="_blank">npm</a>, <a title="ABAValidatoron Github" href="https://github.com/JamesEggers1/node-ABAValidator" target="_blank">github</a>) is just a JavaScript validation module that works both in Node.js on the server as well as in a client&#8217;s browser.  It provides a simple way to validate routing numbers that conform to the American Banking Association Routing Number rules (<a title="Routing Transit Numbers on Wikipedia" href="http://en.wikipedia.org/wiki/Routing_transit_number" target="_blank">wikipedia</a>).</p>
<p><span id="more-102"></span></p>
<h2>Installation</h2>
<p>Installing ABAlidator is simple thanks to NPM.  To install it, simply type the following command.</p>
<pre>npm install ABAValidator</pre>
<h2>Using with Node.js</h2>
<p>Once the package is installed using NPM, using the ABAValidator is as simple as importing in the module into your code.</p>
<pre>var aba_validator = require("ABAValidator").ABAValidator;
var is_valid = aba_valdiator.validate("123456789"); // returns false</pre>
<h2>Using with JavaScript</h2>
<p>One goal I had when writing ABAValidator was to ensure that it can be used both client and server side. Being able to use it in both places ensure that you can write your validation code once and reuse it wherever.</p>
<p><strong>UPDATE &#8211; 09 Aug. 2012:</strong> the module has been updated to utilize NPM more to make client-side installation easier than manually copying the script from node_modules or referencing directly from node_modules. Typing in the following command will prompt you for a client-side installation directory and then will automatically copy the script to your JavaScript source directory.</p>
<pre>npm run-script ABAValidator client-install</pre>
<p>To use the ABAValidator in object from a client&#8217;s browser, you simply have to reference the script using a typical <code>&lt;script&gt;</code> tag and then use pretty much the same as above.</p>
<pre>&lt;script type="text/javascript" src="path/to/aba-validation.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
var aba_validator = window.ABAValidator;
var is_valid = aba_valdiator.validate("123456789"); // returns false
&lt;/script&gt;</pre>
<h2>Global Objects Are Bad</h2>
<p>I&#8217;m not a fan of adding objects into the global scope (or <code>window</code> object) in my JavaScript code. Inside of the aba-validation.js class, I have allowed for a <code>namespace</code> to be generated and used if the developer wishes to do such.  If <code>namespace</code> remains <code>undefined</code>, the <code>ABAValidator</code> object will be placed into the global scope.</p>
<p>To add a namespace for the client-side implementation of DateValidator, simply modify the first line of date-validator.js like the following:</p>
<pre>window.MyNamespace = window.MyNamespace || {};
var namespace = window.MyNamespace;</pre>
<p>Now, when it&#8217;s being consumed by the client side JavaScript, it&#8217;d be referenced in the following manner.</p>
<pre>&lt;script type="text/javascript"&gt;
var aba_validator = window.MyNamespace.ABAValidator;
var is_valid = aba_valdiator.validate("123123123"); // returns true
&lt;/script&gt;</pre>
<h2>Summary</h2>
<p>The ABAValidator module is still in its early stages and I&#8217;m always looking for feedback.  If you have any suggestions or find any bugs, please <a title="ABAValidator Issue tracker on Github" href="https://github.com/JamesEggers1/node-ABAValidator/issues" target="_blank">submit them to the issue tracker over on github</a> and I&#8217;ll see what I can do to get them updated. In addition, if you are looking for information on test routing numbers to use, <a href="http://stackoverflow.com/questions/3611914" target="_blank">please refer to this Stackoverflow question on the subject.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://jamesreggers.com/2012/06/06/abavalidator-routing-number-validation-for-node-js/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DateValidator &#8211; Simple Validation for Node.js</title>
		<link>http://jamesreggers.com/2012/05/30/datevalidator-simple-validation-for-node-js/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=datevalidator-simple-validation-for-node-js</link>
		<comments>http://jamesreggers.com/2012/05/30/datevalidator-simple-validation-for-node-js/#comments</comments>
		<pubDate>Wed, 30 May 2012 14:05:20 +0000</pubDate>
		<dc:creator>James Eggers</dc:creator>
				<category><![CDATA[posts]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[NodeJS]]></category>

		<guid isPermaLink="false">http://jamesreggers.com/?p=92</guid>
		<description><![CDATA[While I&#8217;m passionate about user experience, I also spend a lot of time working on various development projects as well.  Recently, I&#8217;ve focused most of my efforts behind Node.js and have enjoyed it thoroughly.  The amount of passion and adoption &#8230; <a href="http://jamesreggers.com/2012/05/30/datevalidator-simple-validation-for-node-js/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>While I&#8217;m passionate about user experience, I also spend a lot of time working on various development projects as well.  Recently, I&#8217;ve focused most of my efforts behind <a title="Node.JS " href="http://nodejs.org" target="_blank">Node.js</a> and have enjoyed it thoroughly.  The amount of passion and adoption I see around the language astounds me since the language was created just back in 2009.  Though, since Node is written on top of JavaScript, it feels like a much more mature language.  Sadly though, JavaScript isn&#8217;t perfect and is missing a lot of common features that other languages have.  Thankfully, the Node community has helped in these shortcomings though the use of <a title="NPM - Node's Package Management system." href="http://npmjs.org" target="_blank">NPM</a>, Node&#8217;s package management system.</p>
<p><span id="more-92"></span></p>
<p>One of the shortcomings that I found on a recent project was the lack of a simple date validator for ensuring that a date is valid for a provided day, month, and year. There are a few packages on NPM that would suffice; however, they were huge and ultimately too large if I wanted to share them with the user&#8217;s web browser.  So I decided to create my own and share it on NPM.</p>
<p><strong>DateValidator</strong> (<a title="DateValidator on NPM" href="http://search.npmjs.org/#/DateValidator" target="_blank">npm</a>, <a title="DateValidator on Github" href="https://github.com/JamesEggers1/node-DateValidator" target="_blank">github</a>) is just a simple date validation module that works both in Node.js on the server as well as in a client&#8217;s browser.  It isn&#8217;t fancy at the moment; however, provides a simple way to validate things like a date of birth or free form date fields.</p>
<h2>Installation</h2>
<p>Installing DateValidator is simple thanks to NPM.  To install it, simply type the following command.</p>
<pre>npm install DateValidator</pre>
<h2>Using with Node.js</h2>
<p>Once the package is installed using NPM, using the DateValidator is as simple as importing in the module into your code.</p>
<pre>var date_validator = require("DateValidator").DateValidator;
var is_valid = date_valdiator.validate("2012", "02", "31"); // returns false</pre>
<h2>Using with JavaScript</h2>
<p>One goal I had when writing DateValidator was to ensure that it can be used both client and server side. Being able to use it in both places ensure that you can write your validation code once and reuse it wherever.</p>
<p><strong>UPDATE &#8211; 09 Aug. 2012:</strong> the module has been updated to utilize NPM more to make client-side installation easier than manually copying the script from node_modules or referencing directly from node_modules. Typing in the following command will prompt you for a client-side installation directory and then will automatically copy the script to your JavaScript source directory.</p>
<pre>npm run-script DateValidator client-install</pre>
<p>To use the DateValidator in object from a client&#8217;s browser, you simply have to reference the script using a typical <code>&lt;script&gt;</code> tag and then use pretty much the same as above.</p>
<pre> 
&lt;script type="text/javascript" src="path/to/date-validator.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
var date_validator = window.DateValidator;
var is_valid = date_valdiator.validate("2012", "02", "31"); // returns false
&lt;/script&gt;</pre>
<h2>Global Objects Are Bad</h2>
<p>I&#8217;m not a fan of adding objects into the global scope (or <code>window</code> object) in my JavaScript code. Inside of the date-validator.js class, I have allowed for a <code>namespace</code> to be generated and used if the developer wishes to do such.  If <code>namespace</code> remains <code>undefined</code>, the <code>DateValidator</code> object will be placed into the global scope.</p>
<p>To add a namespace for the client-side implementation of DateValidator, simply modify the first line of date-validator.js like the following:</p>
<pre>window.MyNamespace = window.MyNamespace || {};
var namespace = window.MyNamespace;</pre>
<p>Now, when it&#8217;s being consumed by the client side JavaScript, it&#8217;d be referenced in the following manner.</p>
<pre>&lt;script type="text/javascript"&gt;
var date_validator = window.DateValidator;
var is_valid = date_valdiator.validate("2012", "02", "31"); // returns false
&lt;/script&gt;</pre>
<h2>Summary</h2>
<p>The DateValidator module is still in it&#8217;s early stages and I&#8217;m always looking for feedback.  If you have any suggestions or find any bugs, please <a title="DateValidator Issue tracker on Github" href="https://github.com/JamesEggers1/node-DateValidator/issues" target="_blank">submit them to the issue tracker over on github</a> and I&#8217;ll see what I can do to get them updated.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamesreggers.com/2012/05/30/datevalidator-simple-validation-for-node-js/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting to Know Chrome&#8217;s Development Tools</title>
		<link>http://jamesreggers.com/2012/05/09/presentation-getting-to-know-chromes-development-tools/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=presentation-getting-to-know-chromes-development-tools</link>
		<comments>http://jamesreggers.com/2012/05/09/presentation-getting-to-know-chromes-development-tools/#comments</comments>
		<pubDate>Wed, 09 May 2012 13:13:41 +0000</pubDate>
		<dc:creator>James Eggers</dc:creator>
				<category><![CDATA[posts]]></category>
		<category><![CDATA[Presentations]]></category>
		<category><![CDATA[Videos]]></category>
		<category><![CDATA[Presentation]]></category>

		<guid isPermaLink="false">http://jamesreggers.com/?p=86</guid>
		<description><![CDATA[This past Saturday (May 5th, 2012) I attended and presented at the Iowa Code Camp in Cedar Rapids, IA, USA.  The event was filled with a number of great speakers from the midwest discussing anything from code to start-ups to &#8230; <a href="http://jamesreggers.com/2012/05/09/presentation-getting-to-know-chromes-development-tools/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>This past Saturday (May 5th, 2012) I attended and presented at the Iowa Code Camp in Cedar Rapids, IA, USA.  The event was filled with a number of great speakers from the midwest discussing anything from code to start-ups to jobs and tools.</p>
<p>One of the presentations that I gave on that day focused on getting people familiar with Chrome&#8217;s development tools.  While this is a topic I could present for 2-3 hours, the time slot was only an hour so the content had to be truncated a bit.  If you are curious to see the presentation, please feel free to check out the recording below.</p>
<p><span id="more-86"></span></p>
<p><iframe src="http://player.vimeo.com/video/41810402" height="281" width="500" frameborder="0"></iframe></p>
<p>Due to technical difficulties with the camera, the last 10 minutes of the presentation were not recorded.  The primary item that was discussed during that time was Chrome&#8217;s SourceMap feature that allows a combined, minified version of JavaScript to be remapped to the original files; be it JavaScript, CoffeeScript, or Clojure.  You can see a demo of SourceMaps from <a title="Introduction to SourceMaps" href="http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/" target="_blank">this article on Html5Rocks</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamesreggers.com/2012/05/09/presentation-getting-to-know-chromes-development-tools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 0.526 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2013-06-19 08:01:22 -->
