<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
<channel>
  <title>CodeWinds - Leading edge web developer news and training | javascript / React.js / Node.js / HTML5 / web development - Jeff Barczewski</title>
  <link>http://codewinds.com</link>
  <pubDate>Mon, 12 Oct 2020 23:51:59 -0500</pubDate>
  <description>Keep up with the latest web developer technologies and news covering javascript, React.js, Node.js, HTML5. Learn the current best practices in web and mobile app development.</description>
  <language>en-us</language>
  <atom:link rel="self" type="application/rss+xml" href="http://codewinds.com/podcast-audio-rss.xml" />
  <itunes:new-feed-url>http://codewinds.com/podcast-audio-rss.xml</itunes:new-feed-url>
  <itunes:subtitle>Current insights and exciting web development techniques in javascript, React.js, Node.js, HTML5 and other leading edge technologies</itunes:subtitle>
  <itunes:author>Jeff Barczewski</itunes:author>
  <itunes:summary>The CodeWinds podcast is designed to help you keep up with the latest web developer news and techniques.

Learn about the new developments in javascript, React.js, Node.js, HTML5 and other exciting web developer and mobile technologies.

Listen to interviews and reviews of the latest and most promising new libraries, modules, and tools. Learn what the professional developers use to build their web and mobile web applications. Using the latest techniques and best practices you can continue to sharpen your skills.

Each week Jeff Barczewski, a seasoned web developer and trainer will share his latest insights and will interview leaders in the web and mobile development community.

Become your best, follow CodeWinds.
  </itunes:summary>
  <itunes:owner>
    <itunes:name>Jeff Barczewski</itunes:name>
    <itunes:email>itunes@codewinds.com</itunes:email>
  </itunes:owner>
  <itunes:explicit>No</itunes:explicit>
  <itunes:category text="Technology">
    <itunes:category text="Software How-To"/>
  </itunes:category>
  <itunes:category text="Education">
    <itunes:category text="Training"/>
  </itunes:category>
  <itunes:category text="Technology">
    <itunes:category text="Tech News"/>
  </itunes:category>
  <itunes:keywords>codewinds, codewind, js, javascript, reactjs, react.js, node.js, nodejs, html5, web development, developer, programmer</itunes:keywords>
  <itunes:image href="http://codewinds.com/assets/codewinds/codewinds-podcast-1400.png"/>

  <image>
    <link>http://codewinds.com</link>
    <url>http://codewinds.com/assets/codewinds/codewinds-podcast-1400.png</url>
    <title>CodeWinds - Leading edge web developer news and training | javascript / React.js / Node.js / HTML5 / web development - Jeff Barczewski</title>
  </image>

  <copyright>CodeWinds (c), Inspired Horizons 2020 All rights reserved.</copyright>
  <lastBuildDate>Mon, 12 Oct 2020 23:51:59 -0500</lastBuildDate>
  <sy:updatePeriod>hourly</sy:updatePeriod>
  <sy:updateFrequency>1</sy:updateFrequency>


  
    <item>
      <title>015 Michael Jackson and Ryan Florence explain that React.js really changes how we think about building web and mobile apps</title>
      <link>http://codewinds.com/podcast/015.html</link>
      <guid>http://codewinds.com/podcast/015.html</guid>
      <pubDate>Wed, 08 Apr 2015 08:00:00 -0500</pubDate>
      <description>Jeff is joined by Michael Jackson and Ryan Florence to discuss what makes the technology and innovations coming from the React.js community really special.</description>
      <enclosure url="http://codewinds.com/media/podcast/codewinds-015.mp3" length="58757535" type="audio/mpeg"/>
      <category>Podcasts</category>
      <author>itunes@codewinds.com (Jeff Barczewski)</author>
      <itunes:author>Jeff Barczewski</itunes:author>
      <itunes:explicit>No</itunes:explicit>
      <itunes:subtitle>What makes React.js special in a world of so many javascript frameworks?</itunes:subtitle>
      <itunes:summary>Jeff is joined by Michael Jackson and Ryan Florence to discuss what makes the technology and innovations coming from the React.js community really special.</itunes:summary>
      <itunes:duration>1:16:34</itunes:duration>
      <itunes:keywords>javascript, react.js, node.js, isomorphic</itunes:keywords>
      <itunes:image href="http://codewinds.com/assets/codewinds/codewinds-podcast-300.png"/>
      <content:encoded><![CDATA[
        <blockquote>
<p>“It’s so rare that something actually comes along that really changes how we think about building stuff” - Michael Jackson</p>
</blockquote>
<p><img src="http://codewinds.com/assets/article/michael-jackson-and-ryan-florence-1600.jpg" alt="michael-and-ryan-jpg" title="Michael Jackson and Ryan Florence"></p>
<div id="toc"><ol><li><a href="#episode_info">Episode Info</a></li><li><a href="#show_notes_and_timeline">Show Notes and Timeline</a></li><li><a href="#michael_jackson_and_ryan_florence_react_js_training">Michael Jackson and Ryan Florence React.js training</a></li><li><a href="#links_and_resources">Links and Resources</a><ol><li><a href="#online_training_courses">Online Training Courses</a></li><li><a href="#training">Training</a></li><li><a href="#mentioned_in_the_episode">Mentioned in the episode</a></li><li><a href="#follow">Follow</a></li></ol></li><li><a href="#related_content">Related content</a></li><li><a href="#video">Video</a></li></ol></div>


<a name="episode_info"></a><h2 id="episode-info">Episode Info</h2>
<ul>
<li>Episode: CW 015</li>
<li>Published: April 8th, 2015</li>
<li>Tags: javascript, reactjs,nodejs,isomorphic</li>
<li>Duration: 1:16:34</li>
<li>Updated: 2015-04-11</li>
</ul>
<a name="show_notes_and_timeline"></a><h2 id="show-notes-and-timeline">Show Notes and Timeline</h2>
<ul>
<li>2:40 - What’s special about React.js?</li>
</ul>
<blockquote>
<p>“For me personally, it changed the way that I code as much as jQuery did back in 2008.” - Michael Jackson</p>
</blockquote>
<blockquote>
<p>“OMG, This is really going to change the way that I work and how much I enjoy my job on a day to day basis.” - Michael Jackson</p>
</blockquote>
<ul>
<li>5:00 - React.js doesn’t care about how you represent your data, models can be simple objects and arrays</li>
</ul>
<blockquote>
<p>“What excites me about React.js is… it doesn’t care about your data model, you just use plain JavaScript objects… For my models I use: array, Object, Number, …” - Ryan Florence</p>
</blockquote>
<blockquote>
<p>“The new paradigm with React.js is we aren’t observing, we aren’t having a bunch of events, we are just throwing data at functions and then they return descriptions of UI” - Ryan Florence</p>
</blockquote>
<ul>
<li>6:40 - Javascript becomes our templating language</li>
</ul>
<blockquote>
<p>“It’s hard to explain until you start doing it how big of a shift this makes in your user interface development, to not worry about your app over time; you’re not mutating the state of objects over time in your UI components” - Ryan Florence</p>
</blockquote>
<blockquote>
<p>“We get to use the solutions that JavaScript already provides like modules and scope… we don’t have to wait for the framework’s template language to implement a solution for that” - Ryan Florence</p>
</blockquote>
<p><img src="http://codewinds.com/assets/article/reactjs-conf-michael-dsc_5148-800.jpg" alt="Michael Jackson explains the power of react-router" title="Michael Jackson showcases react-router"></p>
<ul>
<li>8:25 - React.js, Angular, and Ember are pushing the language forward (ES6)</li>
<li>10:56 - Is React.js differnet from other SPA frameworks?</li>
<li>11:30 - React.js could be a good rendering tool for many frameworks</li>
<li>12:10 - Integrating React.js into existing code is easy without a full rewrite</li>
<li>13:30 - React.js be added to mature apps, not just greenfield apps</li>
<li>14:50 - Angular 2.0 and Ember 2.0 look a lot like and sound a lot like React.js. It is influencing so many other frameworks.</li>
<li>15:30 - Who can use React.js? What types of projects?</li>
<li>19:00 - Server side rendering - Isomorphic javascript</li>
<li>22:30 - React.js doesn’t care where you render - client, server, canvas, etc.</li>
<li>24:00 - Is React.js hard to learn?</li>
<li>25:00 - React.js allows you to code yourself out of problems</li>
<li>26:00 - Smaller API’s are easier to learn</li>
<li>28:10 - What brought Michael and Ryan to using React.js?</li>
</ul>
<blockquote class="twitter-tweet" lang="en"><p>For me, one of the most awkward parts about <a href="https://twitter.com/hashtag/Emberjs?src=hash">#Emberjs</a> is switching back and forth between Handlebars templates and component code. Any ideas?</p>&mdash; Michael Jackson (@mjackson) <a href="https://twitter.com/mjackson/status/466286956989542400">May 13, 2014</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<ul>
<li>28:45 - Instructure had invested in Ember but were having struggles shipping and learning</li>
</ul>
<blockquote>
<p>“At Instructure, we bet on Ember… we were messing with it for almost a year and kind of weren’t shipping anything…” - Ryan Florence</p>
</blockquote>
<ul>
<li>30:00 - After an hour of using React.js, Ryan wanted to use it everywhere</li>
</ul>
<blockquote>
<p>“After an hour of using React.js, I had my face in my hands and said… I want to use this everywhere” - Ryan Florence</p>
</blockquote>
<ul>
<li>30:45 - A few hours later, Ryan had a router proof of concept up and running</li>
</ul>
<blockquote>
<p>“After two hours I actually had something working, and that probably impressed me the most about React.js” - Ryan Florence</p>
</blockquote>
<blockquote>
<p>“I was never able to just pick up something as quickly as I was able to pick up React.js and build a router” - Michael Jackson</p>
</blockquote>
<blockquote>
<p>“Two guys who had no idea what they were doing (with React.js) were able to make something (ReactRouter) that worked and was useful for other people” - Michael Jackson</p>
</blockquote>
<ul>
<li>32:30 - Ryan started throwing his toughest problems at React.js and it handled them great</li>
</ul>
<blockquote>
<p>“Then I just threw all of my toughest problems that I had ever run into as a frontend developer at React.js” - Ryan Florence</p>
</blockquote>
<p><img src="http://codewinds.com/assets/article/reactjs-conf-ryan-dsc_5191-800.jpg" alt="Ryan Florence demonstrates ReactJS in some interesting applications" title="Ryan Florence demonstrates ReactJS applications"></p>
<ul>
<li>33:00 - Everyone at Instructure wanted to switch to React.js after being exposed to it</li>
</ul>
<blockquote>
<p>“At Instructure we had this hack week, I encouraged a couple of my coworkers to use React.js for their projects… every single one of them came back and asked: When are putting this into our stack?” - Ryan Florence</p>
</blockquote>
<ul>
<li>33:20 - Reducing the context switch when developing, JSX</li>
<li>37:26 - React Router and Relay, working with React.js team</li>
</ul>
<blockquote>
<p>“This is something that I really feel that the React.js authors have seriously nailed on the head, they’ll say they care about the community, and then they will show it by listening, participating, and working with us” - Michael Jackson</p>
</blockquote>
<ul>
<li>40:00 - Data fetching improvements</li>
<li>41:00 - Forward thinking attitude using ES6</li>
<li>42:01 - Relay</li>
<li>45:10 - Components</li>
<li>48:00 - Michael Jackson and Ryan Florence’s React.js Training offerings</li>
<li>50:10 - Become a React.js expert</li>
<li>51:00 - React.js topics covered</li>
<li>52:26 - Prerequisites for learning React.js, just javascript</li>
<li>54:30 - Training format</li>
<li>56:13 - React Router</li>
<li>58:30 - JSX is an optional convenient way to write nested function calls</li>
<li>1:00:00 - Getting designers involved with React.js</li>
</ul>
<blockquote class="twitter-tweet" data-conversation="none" lang="en"><p><a href="https://twitter.com/ebryn">@ebryn</a> <a href="https://twitter.com/ryanflorence">@ryanflorence</a> <a href="https://twitter.com/mjackson">@mjackson</a> At Stampsy, JSX enabled our designer to author, refactor and tweak components at crazy speed.</p>&mdash; Dan Abramov (@dan_abramov) <a href="https://twitter.com/dan_abramov/status/516311214138621952">September 28, 2014</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<ul>
<li>1:02:00 - Thinking in React.js by Pete Hunt</li>
<li>1:03:38 - React Native</li>
<li>1:05:00 - React Native as a game changer</li>
<li>1:07:00 - Developers can work on native and web</li>
<li>1:08:00 - React Native productivity of instant refreshing for new code</li>
<li>1:10:20 - The wonderful and genuine React.js community</li>
</ul>
<blockquote>
<p>“I am just so impressed by the React.js community… everybody is helping and sharing, all trying to move our industry forward” - Jeff Barczewski</p>
</blockquote>
<blockquote>
<p>“The people I have found in the React.js community have been genuine. Their desire to help you understand is genuine. Their desire to learn is genuine. It’s been inspiring for me as well.” - Michael Jackson</p>
</blockquote>
<ul>
<li>1:11:38 - Closing</li>
</ul>
<a name="michael_jackson_and_ryan_florence_react_js_training"></a><h2 id="michael-jackson-and-ryan-florence-react-js-training">Michael Jackson and Ryan Florence React.js training</h2>
<p>Michael and Ryan have launched some <a href="https://reactjs-training.com/" title="Michael Jackson and Ryan Florence React.js training">React.js training</a> starting this April. CodeWinds listeners can get a $300 discount to their San Francisco training this April 16-17, 2015. Use the link: <a href="http://codewinds.com/reactsf">http://codewinds.com/reactsf</a></p>
<a name="links_and_resources"></a><h2 id="links-and-resources">Links and Resources</h2>
<a name="online_training_courses"></a><h3 id="online-training-courses">Online Training Courses</h3>
<h4 id="codewinds-react-js-fundamentals"><a href="http://codewinds.com/react">CodeWinds React.js Fundamentals</a></h4>
<p><a href="http://codewinds.com/react"><img src="http://codewinds.com/media/course/reactjs-101.png" alt="CodeWinds React.js Fundamentals" title="CodeWinds React.js Fundamentals - comprehensive self-paced online training course"></a> The premier online course and community where you learn React.js by pragmatically building a real web app while applying TDD/BDD principles</p>
<a name="training"></a><h3 id="training">Training</h3>
<ul>
<li><a href="http://codewinds.com/reactsf">http://codewinds.com/reactsf</a> - $300 discount for Michael Jackson &amp; Ryan Florence React.js training in San Francisco - April 16-17, 2015</li>
<li><a href="https://reactjs-training.com/">https://reactjs-training.com/</a> - Michael Jackson and Ryan Florence training events - Seattle, San Francisco, Boulder, Boston, New York, Paris</li>
<li><a href="http://codewinds.com/topics" rel="nofollow" target="_blank">http://codewinds.com/topics</a> - Provide your input on topics, projects, difficulties, technology that you would like covered in future CodeWinds content (tutorials, podcasts, video training courses and classes).</li>
<li>Subscribe to the <a href="http://codewinds.com/#modal-subscribe" title="CodeWinds Leading Edge member list">CodeWinds Leading Edge member list</a> to be the first to hear about the upcoming CodeWinds React.js video training course and be invited to become charter members.</li>
</ul>
<a name="mentioned_in_the_episode"></a><h3 id="mentioned-in-the-episode">Mentioned in the episode</h3>
<ul>
<li><a href="http://www.reactrally.com/" title="React Rally - A community React.js conference">React Rally</a> - A community React conference August 24 - 25, 2015 in Salt Lake City, Utah</li>
<li><a href="http://jlongster.com/Removing-User-Interface-Complexity,-or-Why-React-is-Awesome">Removing User Interface Complexity, or Why React is Awesome - James Long</a></li>
<li><a href="https://blog.twitter.com/2012/improving-performance-on-twittercom">Twitter on the importance of server rendering</a></li>
<li><a href="http://engineering.flipboard.com/2015/02/mobile-web/">Flipboard renders to canvas</a></li>
<li><a href="https://twitter.com/mjackson/status/466286956989542400">The tweet that started it all for Michael</a></li>
<li><a href="https://github.com/rackt/react-router">ReactRouter</a> - Michael and Ryan’s isomorphic client and server routing solution for React.js</li>
<li><a href="https://www.youtube.com/watch?v=9sc8Pyc51uU">Facebook’s React.js Conf talk about Relay/GraphQL</a> - video from React.js Conference 2015</li>
<li><a href="https://twitter.com/dan_abramov/status/516311214138621952">Dan Abramov’s tweet about designers + React</a></li>
<li><a href="http://facebook.github.io/react/blog/2013/11/05/thinking-in-react.html">Pete Hunt’s post about “Thinking in React”</a></li>
<li><a href="https://twitter.com/andy_matuschak/status/560511204867575808">Former UIKit dev on React Native</a></li>
<li><a href="https://facebook.github.io/react/blog/2015/03/19/building-the-facebook-news-feed-with-relay.html">Building the Facebook Newsfeed with Relay</a></li>
<li><a href="https://github.com/mjackson/mach">Mach HTTP client, server, and proxy</a> which runs on Node.js and in the browser</li>
</ul>
<a name="follow"></a><h3 id="follow">Follow</h3>
<ul>
<li>Michael Jackson - <a href="http://twitter.com/mjackson" title="Michael Jackson Twitter">twitter</a>, <a href="https://github.com/mjackson" title="Michael Jackson Github">github</a></li>
<li>Ryan Florence - <a href="http://twitter.com/ryanflorence" title="Ryan Florence Twitter">twitter</a>, <a href="https://github.com/rpflorence" title="Ryan Florence Github">github</a></li>
<li>Jeff Barczewski - <a href="https://twitter.com/jeffbski" title="Jeff Barczewski Twitter">twitter</a>, <a href="https://github.com/jeffbski" title="Jeff Barczewski Github">github</a></li>
<li>CodeWinds - <a href="https://twitter.com/codewinds" title="CodeWinds Twitter">twitter</a>, <a href="https://github.com/codewinds" title="CodeWinds Github">github</a></li>
</ul>
<a name="related_content"></a><h2 id="related-content">Related content</h2>
<ul>
<li><a href="http://codewinds.com/blog/2015-02-04-reactjs-conf.html" title="CodeWinds article on the 2015 React.js Conference">The React.js Conference experience</a> - Jeff’s article on his experience at the first React.js Conference (2015)</li>
<li><a href="http://codewinds.com/podcast/004.html" title="CodeWinds episode 4 - React.js with Pete Hunt">CodeWinds podcast episode 4 - React.js with Pete Hunt</a></li>
</ul>
<a name="video"></a><h2 id="video">Video</h2>
<p>Keynote on React.js and React Native from React.js Conf 2015</p>

      ]]></content:encoded>
    </item>
  
    <item>
      <title>014 Successful launch and I'm back, CodeWinds content plans for 2015, provide your input</title>
      <link>http://codewinds.com/podcast/014.html</link>
      <guid>http://codewinds.com/podcast/014.html</guid>
      <pubDate>Mon, 06 Apr 2015 08:00:00 -0500</pubDate>
      <description>Jeff shares some of the backstory on the success of his recent project, his regrets, and the focus for CodeWinds in 2015. Provide your input on content.</description>
      <enclosure url="http://codewinds.com/media/podcast/codewinds-014.mp3" length="8358941" type="audio/mpeg"/>
      <category>Podcasts</category>
      <author>itunes@codewinds.com (Jeff Barczewski)</author>
      <itunes:author>Jeff Barczewski</itunes:author>
      <itunes:explicit>No</itunes:explicit>
      <itunes:subtitle>The backstory on my recent project and now back with focus on CodeWinds</itunes:subtitle>
      <itunes:summary>Jeff shares some of the backstory on the success of his recent project, his regrets, and the focus for CodeWinds in 2015. Provide your input on content.</itunes:summary>
      <itunes:duration>8:55</itunes:duration>
      <itunes:keywords>javascript, react.js, node.js</itunes:keywords>
      <itunes:image href="http://codewinds.com/assets/codewinds/codewinds-podcast-300.png"/>
      <content:encoded><![CDATA[
        <p><img src="http://codewinds.com/assets/codewinds/codewinds-training-no-border-1400.png" alt="cw-training-logo" title="CodeWinds Training Logo"></p>
<div id="toc"><ol><li><a href="#episode_info">Episode Info</a></li><li><a href="#transcript">Transcript</a><ol><li><a href="#summary">Summary</a></li><li><a href="#backstory">Backstory</a></li><li><a href="#regrets">Regrets</a></li><li><a href="#i_m_back_and_focussed_on_codewinds">I’m back and focussed on CodeWinds</a></li><li><a href="#react_js_and_other_course_plans">React.js and other course plans</a></li><li><a href="#provide_your_input">Provide your input</a></li><li><a href="#thanks_for_your_support">Thanks for your support</a></li><li><a href="#michael_jackson_and_ryan_florence_react_js_training_discount">Michael Jackson and Ryan Florence React.js training discount</a></li></ol></li><li><a href="#links">Links</a></li></ol></div>


<a name="episode_info"></a><h2 id="episode-info">Episode Info</h2>
<ul>
<li>Episode: CW 014</li>
<li>Published: April 6th, 2015</li>
<li>Tags: javascript, reactjs,nodejs</li>
<li>Duration: 8:55</li>
</ul>
<a name="transcript"></a><h2 id="transcript">Transcript</h2>
<a name="summary"></a><h3 id="summary">Summary</h3>
<p>Today I will fill you in on the large project that I was working on, its launch, and my CodeWinds focus and content planning for the coming year.</p>
<p>The links and show notes for this podcast are available <a href="http://codewinds.com/14">http://codewinds.com/14</a> as in episode 14.</p>
<a name="backstory"></a><h3 id="backstory">Backstory</h3>
<p>First, I want to start with an apology, I left you, my community, hanging without any explanation for too long. So I wanted to give you a little of the back story and update you on where CodeWinds is going.</p>
<p>When I launched CodeWinds in 2013, my goal was to bring you the latest web developer news and training which I would deliver through my blog, podcast, and video courses. Well just after I started working on content, a local enterprise reached out with an ultra important need to rapidly build a scalable resilient platform for a large client. I didn’t even know the specifics of their client until the launch a year later. Well this enterprise was MasterCard. Our client turned out to be none other than Apple, and we  were building the MasterCard ApplePay system. Wow.</p>
<p>This was such an awesome opportunity to apply my knowledge and skills to such an important project. When I joined the team, I intended to continue delivering CodeWinds content in my spare time, however the project demanded more of my focus than I anticipated, especially as we approached the launch. We poured our hearts into making sure that our platform was battle ready. And what happened on launch day? … well everything just worked.</p>
<p> It was one of those priceless moments when everything comes together, like a symphony of technology and collaboration. The launch was described by some the senior staff as being possibly the most successful MasterCard launch of all time. It was complex, involving so many partners, yet it came together beautifully. I was blessed to be a part of this amazing team.</p>
<a name="regrets"></a><h3 id="regrets">Regrets</h3>
<p> Yet in all the success we had with this project, I failed you my CodeWinds community. I focussed so completely on the project that my content creation ground to a halt. I should have communicated with you, so you wouldn’t be left hanging and wondering what had happened. For that I am truly sorry, and ask for your forgiveness.</p>
<a name="i_m_back_and_focussed_on_codewinds"></a><h3 id="i-m-back-and-focussed-on-codewinds">I’m back and focussed on CodeWinds</h3>
<p>Fast forward to today, what’s in store for my future and that of CodeWinds. Well I am happy to say that I’m back. After much soul searching, I departed from the MasterCard team to work on CodeWinds fulltime. My desire is to bring you the best leading edge full stack web developer content.</p>
<a name="react_js_and_other_course_plans"></a><h3 id="react-js-and-other-course-plans">React.js and other course plans</h3>
<p>In the past few months, I have been doing a deep dive into React.js and its family. I’m so excited by the development and innovation going on in the React.js community.</p>
<blockquote>
<p>“I believe the ideas and technology developing from the React.js community will profoundly influence how we build web and mobile apps.”</p>
</blockquote>
<p>I’m currently planning a course on React.js and then will follow it with other topics like ES6, Hapi, Node, building resilient systems, and using HTML5.</p>
<p>I’ll offer this material in a variety of ways, but the primary mechanism will be online courses with training videos and exercises that you can follow at your own pace or in conjunction with those in a class. These will be real world projects similar to that which you would build at your companies.</p>
<p> I don’t like the simple hello world style examples which are so far removed from our real projects that it is hard to see how you really would do things in practice. So these will be real projects solving real problems including proper testing and error handling. I’ll deliver these video lessons in bite sized chunks that build on each other, so you can go directly to a specific topic or learn from beginning to end. I’ll continue to blog and produce this podcast with related materials to complement all of these areas.</p>
<a name="provide_your_input"></a><h3 id="provide-your-input">Provide your input</h3>
<p>To be successful in this endeavor, I really depend on your input for the technologies and training you would like me to cover, especially the key topics or questions that you struggle with when building complex web applications. I just want to make sure I am working on the most pertinent topics for you. So if you could just spare a few moments, I would really appreciate your input, head over to <a href="http://codewinds.com/topics" rel="nofollow" target="_blank">http://codewinds.com/topics</a> which will redirect you to a Google Doc.</p>
<p>Check out the major categories, questions, topics, and provide your own. If you see existing ideas that resonate and interest you, please add a +1 next to them so I can gauge interest and priorities. If you have ideas for the types of apps we might build, please add that as well. I’m open to all your ideas and needs, just add them to the doc.</p>
<a name="thanks_for_your_support"></a><h3 id="thanks-for-your-support">Thanks for your support</h3>
<p>I want to thank you for staying with me through this prolonged start and I am excited about what we’ll be able to accomplish together in the future.</p>
<p>I hope you are subscribed to my leading edge member list because you won’t want to miss the next episode of the CodeWinds podcast on React.js with Michael Jackson and Ryan Florence. We had a fantastic discussion about React.js and I think you’ll start to see why I am excited about everything coming out of the React.js community.</p>
<a name="michael_jackson_and_ryan_florence_react_js_training_discount"></a><h3 id="michael-jackson-and-ryan-florence-react-js-training-discount">Michael Jackson and Ryan Florence React.js training discount</h3>
<p>Michael and Ryan have launched some React.js training starting this April and for CodeWinds listeners you can get a $300 discount to their San Francisco training this April 16-17, 2015. Use the link: <a href="http://codewinds.com/reactsf">http://codewinds.com/reactsf</a></p>
<p>The links and show notes for this episode are available at <a href="http://codewinds.com/14">http://codewinds.com/14</a></p>
<p>If you would like to keep up on the latest in web developer news and training, follow me on codewinds.com where you’ll find this podcast, tutorials, and video training covering javascript, React.js, and Node.js.</p>
<a name="links"></a><h2 id="links">Links</h2>
<ul>
<li><a href="http://codewinds.com/reactsf">http://codewinds.com/reactsf</a> - $300 discount for Michael Jackson &amp; Ryan Florence React.js training in San Francisco - April 16-17, 2015</li>
<li><a href="https://reactjs-training.com/">https://reactjs-training.com/</a> - Other training events with Michael and Ryan - Seattle, San Francisco, Boulder, Boston, New York, Paris</li>
<li><a href="http://codewinds.com/topics" rel="nofollow" target="_blank">http://codewinds.com/topics</a>  - Provide your input on topics, projects, difficulties, technology that you would like covered with CodeWinds content</li>
</ul>

      ]]></content:encoded>
    </item>
  
    <item>
      <title>013 Reflections of JSConf 2014 - Part 2</title>
      <link>http://codewinds.com/podcast/013.html</link>
      <guid>http://codewinds.com/podcast/013.html</guid>
      <pubDate>Mon, 22 Sep 2014 08:00:00 -0500</pubDate>
      <description>Kevin Old and Jeff continue discussing the uniqueness of JSConf 2014 and highlight some of their favorite talks</description>
      <enclosure url="http://codewinds.com/media/podcast/codewinds-013.mp3" length="35383193" type="audio/mpeg"/>
      <category>Podcasts</category>
      <author>itunes@codewinds.com (Jeff Barczewski)</author>
      <itunes:author>Jeff Barczewski</itunes:author>
      <itunes:explicit>No</itunes:explicit>
      <itunes:subtitle>Continuing recap of the JavaScript conference with Kevin Old - JSConf 2014, Amelia Island, FL</itunes:subtitle>
      <itunes:summary>Kevin Old and Jeff continue discussing the uniqueness of JSConf 2014 and highlight some of their favorite talks</itunes:summary>
      <itunes:duration>42:54</itunes:duration>
      <itunes:keywords>nodejs, js, jsconf</itunes:keywords>
      <itunes:image href="http://codewinds.com/assets/codewinds/codewinds-podcast-300.png"/>
      <content:encoded><![CDATA[
        <p><img src="http://codewinds.com/assets/people/kevin-old.jpg" alt="kevin-photo" title="Kevin Old"></p>
<div id="toc"><ol><li><a href="#episode_info">Episode Info</a></li><li><a href="#episode_notes">Episode Notes</a><ol><li><a href="#links">Links</a></li><li><a href="#videos">Videos</a></li></ol></li></ol></div>


<a name="episode_info"></a><h2 id="episode-info">Episode Info</h2>
<ul>
<li>Episode: CW 013</li>
<li>Published: September 22nd, 2014</li>
<li>Tags: nodejs, js,jsconf</li>
<li>Duration: 42:54</li>
</ul>
<a name="episode_notes"></a><h2 id="episode-notes">Episode Notes</h2>
<ul>
<li>01:42 - <a href="http://nodevember.org/">Nodevember Node.js and JavaScript Conference</a> coming November 15-16, Nashville, TN</li>
<li>04:40 - Day of Activities at JSConf 2014</li>
<li>05:07 - NodeBots, NodeCopters, NodeRockets, NodeBoats</li>
<li>11:43 - Golf Tournament sponsored by NodeSource</li>
<li>13:04 - Kayaking, Scavenger Hunt, Segway tour of Amelia Island</li>
<li>13:46 - Guy Bedford - Package Management for ES6 Modules (SystemJS, jspm.io)</li>
<li>19:43 - Jordan Matthiesen - Modern mobile app tool-chains</li>
<li>23:08 - Ryan Florence - Embularactymerbone</li>
<li>27:30 - Forrest Norvell - Learning ES6 as a Community</li>
<li>30:35 - Spike Brehm - Building Isomorphic Apps</li>
<li>33:00 - Bodil Stokke - Reactive Game Development for the Discerning Hipster</li>
<li>34:00 - Kassandra Perch - Modular Application Architecture in Javascript</li>
<li>34:40 - Kawandeep Virdee - Open Web Art: JavaScript for Interactive, Collaborative, and Hackable Art</li>
<li>36:24 - Brian Brennan - Being Human</li>
<li>38:30 - JS Family pic via drone</li>
<li>38:50 - Final thoughts about JSConf 2014</li>
</ul>
<a name="links"></a><h3 id="links">Links</h3>
<ul>
<li><a href="http://nodevember.org/">Nodevember Node.js/JavaScript Conference</a> - Nov 15-16, 2014 - Nashville TN</li>
<li><a href="http://2014.jsconf.us/">JSConf 2014</a></li>
<li><a href="http://2014.jsconf.us/schedule.html">JSConf 2014 Schedule</a> - List of all talks</li>
<li>Kevin Old - <a href="http://kevinold.com/">website</a>, <a href="http://www.twitter.com/kevinold">twitter</a>, <a href="http://www.linkedin.com/in/kevinold">linkedin</a></li>
<li>Jeff Barczewski, Founder, CodeWinds - <a href="http://jeff.barczewski.com/">website</a>, <a href="https://twitter.com/jeffbski">twitter</a>, <a href="http://www.linkedin.com/in/jeffbski">linkedin</a></li>
<li>CodeWinds - <a href="http://codewinds.com/">website</a>, <a href="https://twitter.com/codewinds">twitter</a></li>
</ul>
<a name="videos"></a><h3 id="videos">Videos</h3>
<ul>
<li><a href="https://www.youtube.com/playlist?list=PL37ZVnwpeshFXOP2lqCUykYPXYNsK_fgN">JSConf 2014 videos on YouTube</a></li>
<li><a href="https://www.youtube.com/watch?v=szJjsduHBQQ">Guy Bedford - Package Management for ES6 Modules video</a></li>
<li><a href="http://codewinds.com/8">CodeWinds Episode# 8 w/Guy Bedford</a> - Audio Interview discussing SystemJS and jspm.io</li>
<li><a href="https://www.youtube.com/watch?v=adLlCFbz49w">Jordan Matthiesen - Modern mobile app tool-chains video</a></li>
<li><a href="https://www.youtube.com/watch?v=CBhDdWY1uv8">Ryan Florence - Embularactymerbone video</a></li>
<li><a href="http://codewinds.com/7">CodeWinds Episode #7 w/Forrest Norvell</a> - Video and Audio Interview</li>
<li><a href="https://www.youtube.com/watch?v=MjrP-P6Pv4I">Forrest Norvell - Learning ES6 as a Community video</a></li>
<li><a href="https://www.youtube.com/watch?v=CH6icJbLhlI">Spike Brehm - Building Isomorphic Apps video</a></li>
<li><a href="http://codewinds.com/9">CodeWinds Episode# 9 w/Spike Brehm</a> - Audio Interview</li>
<li><a href="https://www.youtube.com/watch?v=x8mmAu7ZR9Y">Bodil Stokke - Reactive Game Development for the Discerning Hipster video</a></li>
<li><a href="https://www.youtube.com/watch?v=cTcdtfUjflI">Kassandra Perch - Modular Application Architecture in Javascript video</a></li>
<li><a href="http://codewinds.com/11">CodeWinds Episode# 11 w/Kassandra Perch</a></li>
<li><a href="https://www.youtube.com/watch?v=NHs5t1l3qzo">Kawandeep Virdee - Open Web Art: JavaScript for Interactive, Collaborative, and Hackable Art video</a></li>
<li><a href="https://www.youtube.com/watch?v=LlO2_GecWo8">Brian Brennan - Being Human video</a></li>
</ul>

      ]]></content:encoded>
    </item>
  
    <item>
      <title>012 Reflections of JSConf 2014 - Part 1</title>
      <link>http://codewinds.com/podcast/012.html</link>
      <guid>http://codewinds.com/podcast/012.html</guid>
      <pubDate>Sat, 06 Sep 2014 08:00:00 -0500</pubDate>
      <description>Kevin Old and Jeff discuss the uniqueness of JSConf 2014 and highlight some of their favorite talks</description>
      <enclosure url="http://codewinds.com/media/podcast/codewinds-012.mp3" length="47694320" type="audio/mpeg"/>
      <category>Podcasts</category>
      <author>itunes@codewinds.com (Jeff Barczewski)</author>
      <itunes:author>Jeff Barczewski</itunes:author>
      <itunes:explicit>No</itunes:explicit>
      <itunes:subtitle>A recap of the JavaScript conference with Kevin Old - JSConf 2014, Amelia Island, FL</itunes:subtitle>
      <itunes:summary>Kevin Old and Jeff discuss the uniqueness of JSConf 2014 and highlight some of their favorite talks</itunes:summary>
      <itunes:duration>57:34</itunes:duration>
      <itunes:keywords>nodejs, js, jsconf</itunes:keywords>
      <itunes:image href="http://codewinds.com/assets/codewinds/codewinds-podcast-300.png"/>
      <content:encoded><![CDATA[
        <p><img src="http://codewinds.com/assets/people/kevin-old.jpg" alt="kevin-photo" title="Kevin Old"></p>
<div id="toc"><ol><li><a href="#episode_info">Episode Info</a></li><li><a href="#episode_notes">Episode Notes</a><ol><li><a href="#links">Links</a></li><li><a href="#videos">Videos</a></li></ol></li></ol></div>


<a name="episode_info"></a><h2 id="episode-info">Episode Info</h2>
<ul>
<li>Episode: CW 012</li>
<li>Published: September 6th, 2014</li>
<li>Tags: nodejs, js,jsconf</li>
<li>Duration: 57:34</li>
</ul>
<a name="episode_notes"></a><h2 id="episode-notes">Episode Notes</h2>
<ul>
<li>01:23 - <a href="http://nodevember.org/">Nodevember Node.js and JavaScript Conference</a> coming November 15-16, Nashville, TN</li>
<li>03:15 - JSConf 2014 Venue, Amelia Island, FL, Arriving</li>
<li>09:00 - CSSConf, Welcome reception</li>
<li>13:03 - Wednesday, first day of JSConf talks</li>
<li>15:00 - Neil Green - custom DSL’s in JavaScript</li>
<li>15:53 - Ron Evans, CylonJS - controlling hardware with JS, NodeBots, drones</li>
<li>22:00 - Tessel - Hardware which runs JS</li>
<li>24:45 - Spark Core kit</li>
<li>26:30 - Travell Perkins - Battle Hardened Node.js for the Enterprise</li>
<li>27:35 - Nico Bevacqua - Front End Ops Tooling, Grunt, Gulp, npm, browserify</li>
<li>36:13 - Mark DiMarco - User Interface Alorithms</li>
<li>40:25 - Nick Bray - Native Code on the Web</li>
<li>41:15 - Ryan Paul - Composing frontend Web applications with MontagsJS</li>
<li>45:45 - G. C. Marty - Play DVDs in JS for the sake of interoperability</li>
<li>47:40 - James Long - Unshackling JavaScript with Macros, SweetJS, Implemnting some ES6 features with macros</li>
<li>50:30 - Marco Rogers - Finding patterns across front-end frameworks</li>
<li>53:00 - David Calhoun - Realtime satellite tracking in the browser</li>
<li>54:10 - Jenn Schiffer - What’s the harm in sorting: sanitizing inputs for more optimized JavaScript</li>
</ul>
<a name="links"></a><h3 id="links">Links</h3>
<ul>
<li><a href="http://nodevember.org/">Nodevember Node.js/JavaScript Conference</a> - Nov 15-16, 2014 - Nashville TN</li>
<li><a href="http://2014.jsconf.us/">JSConf 2014</a></li>
<li><a href="http://2014.jsconf.us/schedule.html">JSConf 2014 Schedule</a> - List of all talks</li>
<li><a href="http://2014.cssconf.com/">CSSConf 2014</a></li>
<li><a href="https://tessel.io/">Tessel</a> - Tessel is a microcontroller that runs JavaScript</li>
<li><a href="https://www.spark.io/">Spark</a> - Spark OS is a complete open source operating system for cloud-connected things</li>
<li>Kevin Old - <a href="http://kevinold.com/">website</a>, <a href="http://www.twitter.com/kevinold">twitter</a>, <a href="http://www.linkedin.com/in/kevinold">linkedin</a></li>
<li>Jeff Barczewski, Founder, CodeWinds - <a href="http://jeff.barczewski.com/">website</a>, <a href="https://twitter.com/jeffbski">twitter</a>, <a href="http://www.linkedin.com/in/jeffbski">linkedin</a></li>
<li>CodeWinds - <a href="http://codewinds.com/">website</a>, <a href="https://twitter.com/codewinds">twitter</a></li>
</ul>
<a name="videos"></a><h3 id="videos">Videos</h3>
<ul>
<li><a href="https://www.youtube.com/playlist?list=PL37ZVnwpeshFXOP2lqCUykYPXYNsK_fgN">JSConf 2014 videos on YouTube</a></li>
<li><a href="https://www.youtube.com/watch?v=lm4jEcnWeKI">Neil Green - Custom DSL’s in JavaScript video</a></li>
<li><a href="https://www.youtube.com/watch?v=bnFWskconEg">Ron Evans - CylonJS: The JavaScript Evolution of Open Source Robotics video</a></li>
<li><a href="https://www.youtube.com/watch?v=6QAzmJ4lm3I">Travel Perkins - Battle Harnened Node.js for the Enterprise video</a></li>
<li><a href="https://www.youtube.com/watch?v=Y0DCZdAruvo">Nico Bevacqua - Front End Ops Tooling video</a></li>
<li><a href="http://codewinds.com/10">CodeWinds Podcast Episode# 10 w/Nico Bevacqua</a> - Audio Interview</li>
<li><a href="https://www.youtube.com/watch?v=90NsjKvz9Ns">Mark DiMarco - User interface algorithms video</a></li>
<li><a href="https://www.youtube.com/watch?v=-xNZYr40QOk">Nick Bray - Native code on the web video</a></li>
<li><a href="https://www.youtube.com/watch?v=8-Vyus9TPZ0">Ryan Paul - Composing frontend Web applications with MontagsJS video</a></li>
<li><a href="https://www.youtube.com/watch?v=lb-8euLqfRg">G. C. Marty - Play DVDs in JS for the sake of interoperability video</a></li>
<li><a href="https://www.youtube.com/watch?v=Bp3Jy177NvU">Marco Rogers - Finding patterns across front-end frameworks video</a></li>
<li><a href="https://www.youtube.com/watch?v=vtvHOn9mIB4">David Calhoun - Realtime satellite tracking in the browser video</a></li>
<li><a href="https://www.youtube.com/watch?v=pj4U_W0OFoE">Jenn Schiffer - What’s the harm in sorting: sanitizing inputs for more optimized JavaScript video</a></li>
</ul>

      ]]></content:encoded>
    </item>
  
    <item>
      <title>011 Kassandra Perch - Modular JavaScript application architectures and insights from teaching</title>
      <link>http://codewinds.com/podcast/011.html</link>
      <guid>http://codewinds.com/podcast/011.html</guid>
      <pubDate>Wed, 20 Aug 2014 08:00:00 -0500</pubDate>
      <description>Jeff interviews Kassandra Perch, an engineering evangelist at RetailMeNot and an instructor for Girl Develop It!, to discuss modular JS architectures and lessons learned from teaching JavaScript</description>
      <enclosure url="http://codewinds.com/media/podcast/codewinds-011.mp3" length="10140874" type="audio/mpeg"/>
      <category>Podcasts</category>
      <author>itunes@codewinds.com (Jeff Barczewski)</author>
      <itunes:author>Jeff Barczewski</itunes:author>
      <itunes:explicit>No</itunes:explicit>
      <itunes:subtitle>Benefits of modular JavaScript application architectures and effective JS teaching - JSConf 2014, Amelia Island, FL</itunes:subtitle>
      <itunes:summary>Jeff interviews Kassandra Perch, an engineering evangelist at RetailMeNot and an instructor for Girl Develop It!, to discuss modular JS architectures and lessons learned from teaching JavaScript</itunes:summary>
      <itunes:duration>11:37</itunes:duration>
      <itunes:keywords>nodejs, js, jsconf</itunes:keywords>
      <itunes:image href="http://codewinds.com/assets/codewinds/codewinds-podcast-300.png"/>
      <content:encoded><![CDATA[
        <p><img src="http://codewinds.com/assets/people/kassandra-perch-jsconf-2014.jpg" alt="kassandra-photo" title="Kassandra Perch speaking at JSConf 2014"></p>
<div id="toc"><ol><li><a href="#episode_info">Episode Info</a></li><li><a href="#episode_notes">Episode Notes</a><ol><li><a href="#links">Links</a></li><li><a href="#video_slides">Video / Slides</a></li></ol></li></ol></div>


<a name="episode_info"></a><h2 id="episode-info">Episode Info</h2>
<ul>
<li>Episode: CW 011</li>
<li>Published: August 20th, 2014</li>
<li>Tags: nodejs, js,jsconf</li>
<li>Duration: 11:37</li>
</ul>
<a name="episode_notes"></a><h2 id="episode-notes">Episode Notes</h2>
<ul>
<li>04:08 - Being judicious about choosing frameworks</li>
<li>05:10 - Frameworks which combine other components</li>
<li>05:38 - Examples of modular frameworks</li>
<li>06:21 - Insights from teaching at Girl Develop It!</li>
<li>07:00 - Students learn in different ways</li>
<li>08:10 - Format for classes, gradually building</li>
<li>09:50 - Challenges in learning JavaScript</li>
</ul>
<a name="links"></a><h3 id="links">Links</h3>
<ul>
<li><a href="http://kperch.github.io/" title="Kassandra&apos;s blog">Kassandra Perch’s blog - EUNKNOWN</a></li>
<li><a href="http://www.meetup.com/Girl-Develop-It-Austin/" title="Girl Develop It! Austin">Girl Develop It! - Austin, TX chapter</a></li>
<li><a href="http://twitter.com/nodebotanist" title="Kassandra Perch Twitter">Kassandra Perch’s twitter</a></li>
<li>Jeff Barczewski, Founder, CodeWinds <a href="https://twitter.com/jeffbski">twitter</a></li>
<li>CodeWinds <a href="https://twitter.com/codewinds">twitter</a></li>
</ul>
<a name="video_slides"></a><h3 id="video-slides">Video / Slides</h3>


<p><a href="https://www.youtube.com/watch?v=cTcdtfUjflI&amp;list=PL37ZVnwpeshFXOP2lqCUykYPXYNsK_fgN&amp;index=15" title="Kassandra Perch: Modular Application Architectures in JavaScript - JSConf 2014">Watch Kassandra Perch’s JSConf talk on YouTube</a></p>

      ]]></content:encoded>
    </item>
  
    <item>
      <title>010 Nico Bevacqua - JS build tooling, development workflow, and his new book JavaScript Application Design</title>
      <link>http://codewinds.com/podcast/010.html</link>
      <guid>http://codewinds.com/podcast/010.html</guid>
      <pubDate>Fri, 08 Aug 2014 08:00:00 -0500</pubDate>
      <description>Jeff interviews Nico Bevacqua, a full stack developer from Buenos Aires, to discuss the process of building web apps efficiently and effectively, discussing tools and techniques.</description>
      <enclosure url="http://codewinds.com/media/podcast/codewinds-010.mp3" length="24249374" type="audio/mpeg"/>
      <category>Podcasts</category>
      <author>itunes@codewinds.com (Jeff Barczewski)</author>
      <itunes:author>Jeff Barczewski</itunes:author>
      <itunes:explicit>No</itunes:explicit>
      <itunes:subtitle>A build first approach, learn ways to improve your workflow and enable continuous development and design - JSConf 2014, Amelia Island, FL</itunes:subtitle>
      <itunes:summary>Jeff interviews Nico Bevacqua, a full stack developer from Buenos Aires, to discuss the process of building web apps efficiently and effectively, discussing tools and techniques.</itunes:summary>
      <itunes:duration>29:10</itunes:duration>
      <itunes:keywords>nodejs, js, jsconf</itunes:keywords>
      <itunes:image href="http://codewinds.com/assets/codewinds/codewinds-podcast-300.png"/>
      <content:encoded><![CDATA[
        <p><img src="http://codewinds.com/assets/people/nico-bevacqua-jsconf-2014.jpg" alt="nico-photo" title="Nico Bevacqua speaking at JSConf 2014"></p>
<p>Nico Bevacqua, the author of JavaScript Application Design which is in early access at Manning, explains more about JS continuous development, integration, and deployment. We discuss build tools, module systems, component architectures, MVC, and finally the experience of writing a traditionally published book.</p>
<div id="toc"><ol><li><a href="#episode_info">Episode Info</a></li><li><a href="#episode_notes">Episode Notes</a><ol><li><a href="#javascript_application_design_-_manning">JavaScript Application Design - Manning</a></li><li><a href="#links">Links</a></li><li><a href="#video_slides">Video / Slides</a></li></ol></li></ol></div>

<p><a href="http://bevacqua.io/bf/book" title="Purchase book through Manning"><img src="http://bevacqua.io/img/buildfirst/1a5dcb8c.cover.jpg" alt="JavaScript Application Design" title="JavaScript Application Design Cover"></a></p>
<a name="episode_info"></a><h2 id="episode-info">Episode Info</h2>
<ul>
<li>Episode: CW 010</li>
<li>Published: August 8th, 2014</li>
<li>Tags: nodejs, js,jsconf</li>
<li>Duration: 29:10</li>
</ul>
<a name="episode_notes"></a><h2 id="episode-notes">Episode Notes</h2>
<ul>
<li>01:35 - Why build first?</li>
<li>03:25 - Continuous development</li>
<li>05:00 - Continuous Integration - Travis-CI</li>
<li>05:20 - Continuous Deployment - Heroku, Amazon EC2</li>
<li>06:20 - Build tools - grunt, gulp, npm - determining the best choice</li>
<li>11:35 - JS Modules - AMD, CommonJS (CJS), ES6 Modules, RequireJS, Browserify, AngularJS DI</li>
<li>15:00 - HTTP/2 efficient parallel streaming potentially reducing need for bundling</li>
<li>16:30 - Browserify limitations and CommonJS</li>
<li>18:30 - App design, modularity, package managers (component, bower, npm)</li>
<li>20:20 - Current state of building components - Bower, Component, Polymer, Web Components, AngularJS, ReactJS</li>
<li>22:24 - MVC Frameworks - AngularJS, ReactJS and the Virtual DOM</li>
<li>23:35 - Experience writing JavaScript Application Design published by Manning</li>
<li>27:35 - Following Nico</li>
</ul>
<a name="javascript_application_design_-_manning"></a><h3 id="javascript-application-design-manning">JavaScript Application Design - Manning</h3>
<p>Published by Manning, currently available as early access edition - <a href="http://bevacqua.io/bf/book" title="Purchase book through Manning">Purchase at Manning</a></p>
<a name="links"></a><h3 id="links">Links</h3>
<ul>
<li><a href="http://browserify.org/" title="Browserify website">Browserify - packaging NPM modules for the browser</a></li>
<li>Nico Bevacqua’s <a href="http://blog.ponyfoo.com/" title="Nico&apos;s blog">Pony Foo blog</a></li>
<li><a href="https://github.com/buildfirst/buildfirst" title="Build First Code">Code samples from JavaScript Application Design</a></li>
<li><a href="http://bevacqua.io/buildfirst/resources" title="Build First Resources">Build first resources</a></li>
<li><a href="http://bevacqua.io/buildfirst" title="Nico Bevacqua Build First">Build first site</a></li>
<li>Nico Bevacqua <a href="http://twitter.com/nzgb" title="Nico Bevacqua Twitter">twitter</a></li>
<li>Jeff Barczewski, Founder, CodeWinds <a href="https://twitter.com/jeffbski">twitter</a></li>
<li>CodeWinds <a href="https://twitter.com/codewinds">twitter</a></li>
</ul>
<a name="video_slides"></a><h3 id="video-slides">Video / Slides</h3>


<p><a href="https://www.youtube.com/watch?v=Y0DCZdAruvo" title="Nico Bevacqua: Front End Ops Tooling - JSConf 2014">Watch Nico Bevacqua’s JSConf talk on YouTube</a></p>
<p><a href="https://speakerdeck.com/bevacqua/front-end-ops-tooling" title="JSConf US 2014: Front End Ops Tooling">Slides from Nico Bevacqua JSConf 2014: Front End Ops Tooling - Slideshare</a></p>

      ]]></content:encoded>
    </item>
  
    <item>
      <title>009 Spike Brehm - Sharing javascript in browser and server - building isomorphic apps</title>
      <link>http://codewinds.com/podcast/009.html</link>
      <guid>http://codewinds.com/podcast/009.html</guid>
      <pubDate>Wed, 16 Jul 2014 08:00:00 -0500</pubDate>
      <description>Jeff interviews Spike Brehm, a web engineer at Airbnb, to discuss building web apps which share code, templates, business logic, and the tools which help enable this today.</description>
      <enclosure url="http://codewinds.com/media/podcast/codewinds-009.mp3" length="11938478" type="audio/mpeg"/>
      <category>Podcasts</category>
      <author>itunes@codewinds.com (Jeff Barczewski)</author>
      <itunes:author>Jeff Barczewski</itunes:author>
      <itunes:explicit>No</itunes:explicit>
      <itunes:subtitle>Seeking the elusive holy grail of web development, shared UI and business logic across devices and backend. JSConf 2014, Amelia Island, FL</itunes:subtitle>
      <itunes:summary>Jeff interviews Spike Brehm, a web engineer at Airbnb, to discuss building web apps which share code, templates, business logic, and the tools which help enable this today.</itunes:summary>
      <itunes:duration>13:48</itunes:duration>
      <itunes:keywords>nodejs, js, jsconf</itunes:keywords>
      <itunes:image href="http://codewinds.com/assets/codewinds/codewinds-podcast-300.png"/>
      <content:encoded><![CDATA[
        <p><img src="http://codewinds.com/assets/people/spike-brehm-jsconf-2014.jpg" alt="spike-brehm-photo" title="Spike Brehm speaking at JSConf 2014"></p>
<p>Spike explains the different categories of Isomorphic apps and how this is accomplished. He mentions various tools for facilitating sharing across browser, server, and devices. He shares how Airbnb, Yahoo, Flickr, Facebook, Instagram are using some of these technologies today. Finally, he provides resources to help others learn and get started.</p>
<div id="toc"><ol><li><a href="#episode_info">Episode Info</a></li><li><a href="#episode_notes">Episode Notes</a><ol><li><a href="#links">Links</a></li><li><a href="#video_slides">Video / Slides</a></li></ol></li></ol></div>

<a name="episode_info"></a><h2 id="episode-info">Episode Info</h2>
<ul>
<li>Episode: CW 009</li>
<li>Published: July 16th, 2014</li>
<li>Tags: nodejs, js,jsconf</li>
<li>Duration: 13:48</li>
</ul>
<a name="episode_notes"></a><h2 id="episode-notes">Episode Notes</h2>
<ul>
<li>01:50 - Isomorphic definition</li>
<li>03:15 - Tools for sharing code across browser and server</li>
<li>04:00 - Browserify for using Node.js packages in browser</li>
<li>05:20 - Categories of Isomorphic code</li>
<li>06:20 - Superagent - HTTP client</li>
<li>07:08 - Airbnb’s Rendr - render Backbone apps on client and server</li>
<li>07:30 - Compelling reasons for building isomorphic apps</li>
<li>08:00 - Flickr main page isomorphic, modown project</li>
<li>08:39 - Meteor framework</li>
<li>09:25 - Getting started with Isomorphic JavaScript</li>
<li>10:10 - ReactJS - client and server rendering, can attach event handlers to server rendered page</li>
<li>10:40 - Facebook and Instagram using ReactJS for Isomorphic apps</li>
<li>11:30 - Following Spike Brehm and Isomorphic JavaScript</li>
</ul>
<a name="links"></a><h3 id="links">Links</h3>
<ul>
<li><a href="http://spike.technology/">Spike Brehm’s Isomorphic Resources</a></li>
<li><a href="http://nerds.airbnb.com/isomorphic-javascript-future-web-apps/">Airbnb blog - Isomorphic JavaScript: The Future of Web Apps</a></li>
<li><a href="https://github.com/spikebrehm/isomorphic-tutorial">Isomorphic Tutorial</a></li>
<li><a href="http://isomorphic.net/">Isomorphic JavaScript website</a></li>
<li><a href="http://blog.nodejitsu.com/scaling-isomorphic-javascript-code/">Nodejitsu - Scaling Isomorphic Javascript Code</a></li>
<li><a href="http://browserify.org/" title="Browserify website">Browserify - packaging NPM modules for the browser</a></li>
<li><a href="https://github.com/visionmedia/superagent">Superagent - HTTP client for browser and Node.js</a></li>
<li><a href="https://github.com/rendrjs/rendr">Airbnb’s Rendr - Rendering Backbone apps on the client and server</a></li>
<li><a href="http://www.slideshare.net/caridy/yuiconfintroducing-modown-project">Yahoo’s Modown project</a></li>
<li><a href="https://www.meteor.com/">Meteor framework</a></li>
<li><a href="http://facebook.github.io/react/">ReactJS framework for building user interfaces</a></li>
<li><a href="http://twitter.com/spikebrehm" title="Spike Brehm Twitter">Spike Brehm Twitter</a></li>
<li>Jeff Barczewski, Founder, CodeWinds <a href="https://twitter.com/jeffbski">twitter</a></li>
<li>CodeWinds <a href="https://twitter.com/codewinds">twitter</a></li>
</ul>
<a name="video_slides"></a><h3 id="video-slides">Video / Slides</h3>


<p><a href="http://youtu.be/CH6icJbLhlI?list=PL37ZVnwpeshFXOP2lqCUykYPXYNsK_fgN" title="Spike Brehm: Building Isomorphic Apps - JSConf 2014">Watch Spike Brehm’s JSConf talk on YouTube</a></p>


<p><a href="http://www.slideshare.net/spikebrehm/jsconf-us-2014-building-isomorphic-apps" title="JSConf US 2014: Building Isomorphic Apps">Slides from Spike Brehm JSConf 2014: Building Isomorphic Apps - Slideshare</a></p>

      ]]></content:encoded>
    </item>
  
    <item>
      <title>008 Guy Bedford - jspm &amp; SystemJS - Unity and simplicity in loading CommonJS, AMD, and ES6 JS packages</title>
      <link>http://codewinds.com/podcast/008.html</link>
      <guid>http://codewinds.com/podcast/008.html</guid>
      <pubDate>Wed, 02 Jul 2014 08:00:00 -0500</pubDate>
      <description>Guy Bedford explains jspm and SystemJS which he created to simplify JS loading and package management. Load CommonJS, AMD, and ES6 modules in a simple and unified manner based on the ES6 Module Loader polyfill.</description>
      <enclosure url="http://codewinds.com/media/podcast/codewinds-008.mp3" length="17665265" type="audio/mpeg"/>
      <category>Podcasts</category>
      <author>itunes@codewinds.com (Jeff Barczewski)</author>
      <itunes:author>Jeff Barczewski</itunes:author>
      <itunes:explicit>No</itunes:explicit>
      <itunes:subtitle>Jeff interviews Guy Bedford to discuss jspm, SystemJS, and related projects which unify the JS loading process at JSConf 2014, Amelia Island, FL</itunes:subtitle>
      <itunes:summary>Guy Bedford explains jspm and SystemJS which he created to simplify JS loading and package management. Load CommonJS, AMD, and ES6 modules in a simple and unified manner based on the ES6 Module Loader polyfill.</itunes:summary>
      <itunes:duration>22:12</itunes:duration>
      <itunes:keywords>nodejs, js, es6, commonjs, cjs, amd, es6, packages, modules, jsconf</itunes:keywords>
      <itunes:image href="http://codewinds.com/assets/codewinds/codewinds-podcast-300.png"/>
      <content:encoded><![CDATA[
        <p><img src="http://codewinds.com/assets/people/guy-bedford-jsconf-2014.jpg" alt="guy-bedford-photo" title="Guy Bedford speaking at JSConf 2014"></p>
<p>JavaScript module loading has traditionally been difficult due to diverse module formats and difficult configuration. With so many competing standards it is hard to get everything to work well together.</p>
<p>Guy has come forward with a solution which simplifies loading and management of JS packages. This is a full workflow solution including both dynamic loading and capability to build bundles for production.</p>
<div id="toc"><ol><li><a href="#episode_info">Episode Info</a></li><li><a href="#episode_notes">Episode Notes</a><ol><li><a href="#simple_example_of_systemjs_in_browser">Simple example of SystemJS in browser</a></li><li><a href="#links">Links</a></li><li><a href="#videos">Videos</a></li><li><a href="#other_podcasts">Other podcasts</a></li></ol></li></ol></div>

<a name="episode_info"></a><h2 id="episode-info">Episode Info</h2>
<ul>
<li>Episode: CW 008</li>
<li>Published: July 2nd, 2014</li>
<li>Tags: nodejs, js,es6,commonjs,amd,es6,packages,modules,jsconf</li>
<li>Duration: 22:12</li>
</ul>
<a name="episode_notes"></a><h2 id="episode-notes">Episode Notes</h2>
<ul>
<li>03:00 - <a href="https://github.com/ModuleLoader/es6-module-loader" title="ES6 module loader polyfill">es6-module-loader</a></li>
<li>04:25 - CommonJS, AMD, ES6 modules. Browserify</li>
<li>05:10 - <a href="https://github.com/systemjs/systemjs" title="Spec-compliant universal module loader - loads ES6 modules, AMD, CommonJS and global scripts.">SystemJS</a> - loads ES6 modules, AMD, CommonJS and global scripts. Designed in spec itself, IE8+, suitable for production, runs in browser and Node.js, promises API</li>
<li>08:00 - SystemJS workflow - dynamic loading and build capability</li>
<li>10:00 - Using SystemJS with build tools</li>
<li>10:30 - SystemJS community</li>
<li>11:30 - Auto file type detection (CJS, AMD, UMD, …) or can specify</li>
<li>12:45 - Optional configuration. Made to be as easy as possible to get going</li>
<li>14:30 - <a href="http://jspm.io/" title="jspm JavaScript Package Manager">jspm</a> - JavaScript Package Manager - CDN for SystemJS, require by name.</li>
<li>15:30 - Core ideas - making requiring really simple and making package management really simple</li>
<li>16:00 - Design of loader and manager</li>
<li>17:28 - Ready for review and full workflow. An invitation to the community</li>
<li>18:26 - GitHub locations for projects, examples</li>
<li>20:34 - How to follow up, closing remarks</li>
</ul>
<a name="simple_example_of_systemjs_in_browser"></a><h3 id="simple-example-of-systemjs-in-browser">Simple example of SystemJS in browser</h3>
<pre class="highlight"><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"system.js"</span>&gt;</span><span class="undefined"></span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">script</span>&gt;</span><span class="actionscript">
  System.import(<span class="hljs-string">'app/app'</span>)
  .catch(<span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(e)</span> </span>{
    <span class="hljs-comment">// we add this since promises suppress all errors</span>
    setTimeout(<span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">()</span> </span>{
      <span class="hljs-keyword">throw</span> e;
    });
  });
</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span></code></pre>
<a name="links"></a><h3 id="links">Links</h3>
<ul>
<li><a href="https://github.com/ModuleLoader/es6-module-loader" title="ES6 module loader polyfill">es6-module-loader</a> - ES6 module loader polyfill</li>
<li><a href="https://github.com/systemjs/systemjs" title="Spec-compliant universal module loader - loads ES6 modules, AMD, CommonJS and global scripts.">SystemJS</a> - Spec-compliant universal module loader - loads ES6 modules, AMD, CommonJS and global scripts.</li>
<li><a href="https://github.com/systemjs/builder" title="SystemJS build tool">SystemJS-Build-Tool</a> - Build tool for SystemJS which can bundle for production</li>
<li><a href="http://jspm.io/" title="jspm JavaScript Package Manager">jspm</a> - Package manager for the SystemJS universal module loader, built on top of the dynamic ES6 module loader. Load any module format (ES6, AMD, CommonJS and globals) directly from endpoints such as npm and github with flat versioned dependency management. For production, use the <a href="https://github.com/jspm/jspm-cli" title="jspm CLI tool">jspm CLI</a> tool to download packages locally, lock down versions and build into a bundle. In development, load modules directly from CDN for frictionless experimentation, switching into production on the same code with a single configuration change. Supports SPDY with server push.</li>
<li><a href="https://github.com/jspm/demo-es6" title="jspm ES6 module loading workflow demo">jspm-es6-demo</a> - jspm ES6 module loading workflow demo - write ES6 modules, load external from CDN, install locally using CDN versions, bundle into single file for production</li>
<li><a href="https://groups.google.com/forum/#!forum/jspm-io" title="jspm Google group">jspm Google Group</a> - Discussion forum for JSPM</li>
<li><a href="http://twitter.com/guybedford" title="Guy Bedford Twitter">Guy Bedford’s Twitter</a></li>
<li><a href="https://github.com/guybedford" title="Guy Bedford GitHub">Guy Bedford’s GitHub repositories</a></li>
<li>Jeff Barczewski, Founder, CodeWinds <a href="https://twitter.com/jeffbski">twitter</a></li>
<li>CodeWinds <a href="https://twitter.com/codewinds">twitter</a></li>
</ul>
<a name="videos"></a><h3 id="videos">Videos</h3>
<ul>
<li><a href="http://es6rocks.com/2014/06/practical-workflows-es6-modules/">Fluent Conf 2014</a> - Guy Bedford on ES6 modules, jspm, SystemJS</li>
<li><a href="http://www.confreaks.com/videos/3231-mwjs-browser-package-management">Mountain West JS 2014</a> - Guy Bedford on the genesis of jspm, SystemJS</li>
<li><a href="https://www.youtube.com/playlist?list=PL37ZVnwpeshFXOP2lqCUykYPXYNsK_fgN" title="JSConf 2014 video playlist">JSConf 2014 videos</a> - Videos from the JSConf 2014 sessions (videos are in progress of being posted)</li>
</ul>




<a name="other_podcasts"></a><h3 id="other-podcasts">Other podcasts</h3>
<ul>
<li><a href="http://javascriptjabber.com/115-jsj-the-es6-module-loader-polyfill-systemjs-and-jspm-with-guy-bedford/">JSJabber 115</a></li>
</ul>

      ]]></content:encoded>
    </item>
  
    <item>
      <title>007 Forrest Norvell on ES6 and our community's role at JSConf 2014</title>
      <link>http://codewinds.com/podcast/007.html</link>
      <guid>http://codewinds.com/podcast/007.html</guid>
      <pubDate>Tue, 24 Jun 2014 08:00:00 -0500</pubDate>
      <description>Forrest Norvell discusses ES6, the standards process, and his ideas on how the community can get started now to shape the language and adoption of ES6.</description>
      <enclosure url="http://codewinds.com/media/podcast/codewinds-007.mp3" length="29626155" type="audio/mpeg"/>
      <category>Podcasts</category>
      <author>itunes@codewinds.com (Jeff Barczewski)</author>
      <itunes:author>Jeff Barczewski</itunes:author>
      <itunes:explicit>No</itunes:explicit>
      <itunes:subtitle>Jeff interviews Forrest Norvell of npm Inc. to discuss ES6 and his suggestions to the javascript community at JSConf 2014, Amelia Island, FL</itunes:subtitle>
      <itunes:summary>Forrest Norvell discusses ES6, the standards process, and his ideas on how the community can get started now to shape the language and adoption of ES6.</itunes:summary>
      <itunes:duration>38:33</itunes:duration>
      <itunes:keywords>nodejs, js, es6, jsconf</itunes:keywords>
      <itunes:image href="http://codewinds.com/assets/codewinds/codewinds-podcast-300.png"/>
      <content:encoded><![CDATA[
        <div class="iframe-video">

</div>

<p><a href="http://youtu.be/kvEnDdFAUyI">Watch video on YouTube</a></p>
<div id="toc"><ol><li><a href="#episode_info">Episode Info</a></li><li><a href="#episode_notes">Episode Notes</a><ol><li><a href="#links">Links</a></li><li><a href="#videos">Videos</a></li></ol></li></ol></div>

<a name="episode_info"></a><h2 id="episode-info">Episode Info</h2>
<ul>
<li>Episode: CW 007</li>
<li>Published: June 24th, 2014</li>
<li>Tags: nodejs, js,es6,jsconf</li>
<li>Duration: 38:33</li>
</ul>
<a name="episode_notes"></a><h2 id="episode-notes">Episode Notes</h2>
<ul>
<li>01:36 - Forrest explains his new position at <a href="http://www.npmjs.com/" title="npm Inc. website">npm Inc.</a></li>
<li>02:20 - Discussion of Forrest’s JSConf 2014 talk</li>
<li>03:30 - Rise of community standards, Douglas Crockford’s the Good Parts, John Resig jQuery, Promises A+ standard</li>
<li>05:50 - Standards committees, an inside look</li>
<li>08:00 - ES4, ES5, Harmony, ES7 (champion for each feature)</li>
<li>10:00 - <a href="http://test262.ecmascript.org/" title="ECMAScript Language test262">test262</a> - conformance test suite</li>
<li>11:58 - Our community has the power to figure out what features in ES6 are useful. Sort out the parts that are genuinely useful. Figure out the good parts now.</li>
<li>14:48 - Module proposal benefited from critical discussions from the community</li>
<li>16:00 - Tools for using ES6 features now</li>
<li>17:26 - Development community needs to get on top of things and teach how we use the features with emphasis on the compelling parts.</li>
<li>18:50 - Forrest no longer recommends Crockford’s Good Parts to new developers because half is scar tissue and dogma, instead Dave Herman’s <a href="http://effectivejs.com/" title="Effective JavaScript by David Herman">Effective JavaScript</a> which gives them a mental toolkit to determine their own style</li>
<li>20:55 - Don’t concentrate on what’s cool, but concentrate on what’s stable and effective. As an educator be conservative.</li>
<li>21:29 - Warnings from Java, Perl history</li>
<li>24:00 - Typescript and Coffeescript bring things to the table but they could fragment the community</li>
<li>24:40 - ES timeline</li>
<li>26:30 - Features need enough examination to ensure they are finished</li>
<li>28:00 - Keeping some things in user land to see what community comes up with. Developers as leaders in this transition.</li>
<li>29:00 - npm growth, npm Inc dev ops, addressing pain points in npm CLI</li>
<li>34:30 - All software languages have something that is terrible. Community is something that makes Node.js special.</li>
<li>35:45 - Node.js in the enterprise is happening very rapidly. A very interesting time to be in the middle of this evolution.</li>
</ul>
<a name="links"></a><h3 id="links">Links</h3>
<ul>
<li>Forrest Norvell, npm product maker at npm Inc. <a href="https://twitter.com/othiym23">twitter</a></li>
<li><a href="http://www.npmjs.com/" title="npm Inc. website">npm Inc.</a> - npm, Inc. supports the JavaScript community by providing the registry where developers publish and share packaged open-source modules.</li>
<li><a href="https://github.com/google/traceur-compiler">traceur</a> - Traceur is a JavaScript.next-to-JavaScript-of-today compiler. Compile ES6 code into JS which can be used by today’s browsers.</li>
<li><a href="https://github.com/paulmillr/es6-shim/">es6-shim</a> - Provides compatibility shims so that legacy JavaScript engines behave as closely as possible to ECMAScript 6 (Harmony).</li>
<li><a href="http://square.github.io/es6-module-transpiler/">es6-module-transpiler</a> - ES6 Module Transpiler is a JavaScript library for converting JavaScript files written using the ES6 draft specification module syntax to existing library-based module systems such as AMD, CommonJS, or simply globals.</li>
<li><a href="http://sweetjs.org/">sweet.js</a> - Macros for javascript which can be used to add in ES6 features.</li>
<li><a href="https://github.com/thlorenz/es6ify">es6ify</a> - browserify v2 transform to compile JavaScript.next (ES6) to JavaScript.current (ES5) on the fly.</li>
<li><a href="http://kangax.github.io/compat-table/es6/">ES6 compatibility table</a> - ES6 compatibility table, comparing browser versions, Node.js. Links to ES6 feature descriptions.</li>
<li><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey">Spider Monkey</a> - Firefox JS engine written in C++. Currently Spider Monkey is leading in the number of ES6 features that are implemented. (56/66 according to Kangax)</li>
<li><a href="http://effectivejs.com/" title="Effective JavaScript by David Herman">Effective JavaScript</a> - David Herman’s book</li>
<li>Jeff Barczewski, Founder, CodeWinds <a href="https://twitter.com/jeffbski">twitter</a></li>
<li>CodeWinds <a href="https://twitter.com/codewinds">twitter</a></li>
</ul>
<a name="videos"></a><h3 id="videos">Videos</h3>
<ul>
<li><a href="https://www.youtube.com/watch?v=MjrP-P6Pv4I&amp;index=21&amp;list=PL37ZVnwpeshFXOP2lqCUykYPXYNsK_fgN">JSConf 2014 Talk</a></li>
</ul>



      ]]></content:encoded>
    </item>
  
    <item>
      <title>006 Daniel Shaw (@dshaw) introduces NodeSource at JSConf 2014</title>
      <link>http://codewinds.com/podcast/006.html</link>
      <guid>http://codewinds.com/podcast/006.html</guid>
      <pubDate>Wed, 18 Jun 2014 08:00:00 -0500</pubDate>
      <description>Daniel Shaw (@dshaw) explains the genesis of his new company, NodeSource, which was launched during JSConf 2014, Amelia Island, FL</description>
      <enclosure url="http://codewinds.com/media/podcast/codewinds-006.mp3" length="19883027" type="audio/mpeg"/>
      <category>Podcasts</category>
      <author>itunes@codewinds.com (Jeff Barczewski)</author>
      <itunes:author>Jeff Barczewski</itunes:author>
      <itunes:explicit>No</itunes:explicit>
      <itunes:subtitle>Jeff interviews Daniel Shaw (@dshaw) about his new company, NodeSource, launched during JSConf 2014, Amelia Island, FL</itunes:subtitle>
      <itunes:summary>Daniel Shaw (@dshaw) explains the genesis of his new company, NodeSource, which was launched during JSConf 2014, Amelia Island, FL</itunes:summary>
      <itunes:duration>23:54</itunes:duration>
      <itunes:keywords>nodejs, jsconf</itunes:keywords>
      <itunes:image href="http://codewinds.com/assets/codewinds/codewinds-podcast-300.png"/>
      <content:encoded><![CDATA[
        <div class="iframe-video">

</div>

<p><a href="http://youtu.be/l7h69mJCzrI">Watch video on YouTube</a></p>
<div id="toc"><ol><li><a href="#episode_info">Episode Info</a></li><li><a href="#episode_notes">Episode Notes</a><ol><li><a href="#nodesource_team_mentioned_in_interview_">NodeSource Team (mentioned in interview)</a></li><li><a href="#social_media_links">Social Media Links</a></li></ol></li></ol></div>

<a name="episode_info"></a><h2 id="episode-info">Episode Info</h2>
<ul>
<li>Episode: CW 006</li>
<li>Published: June 18th, 2014</li>
<li>Tags: nodejs, jsconf</li>
<li>Duration: 23:54</li>
</ul>
<a name="episode_notes"></a><h2 id="episode-notes">Episode Notes</h2>
<p>NodeSource is a professional Node.js software company. NodeSource provides enterprise-grade software products and educational and professional consulting services to empower companies to be effective and productive with Node.js.</p>
<ul>
<li><a href="https://nodesource.com/">https://nodesource.com/</a> - NodeSource website with team background</li>
<li><a href="https://nodesource.com/products">https://nodesource.com/products</a> - NodeSource products<ul>
<li>npm Plus - NodeSource is the premier, certified reseller of on-premise, private npm instances. NodeSource has partnered with npm Inc. to deliver a secure, on-premise, private npm solution alongside managed services such as:<ul>
<li>Bespoke npm Training</li>
<li>24x7x365 Support</li>
<li>Custom Integrations (LDAP, SSO, etc.)</li>
</ul>
</li>
<li>N|Ship - NodeSource’s official Node.js deployment solution to make app deployments easy, secure and automated.</li>
</ul>
</li>
<li><a href="http://2014.jsconf.us/">http://2014.jsconf.us/</a> - JSConf 2014 - May 27-31, 2014 at Amelia Island, FL</li>
</ul>
<a name="nodesource_team_mentioned_in_interview_"></a><h3 id="nodesource-team-mentioned-in-interview-">NodeSource Team (mentioned in interview)</h3>
<div class="float-images">
![DanShaw][] ![JoeMccann][] ![RodVagg][] ![ChrisWilliams][] ![TrevorNorris][]
</div><div class="clear-float"></div>

<a name="social_media_links"></a><h3 id="social-media-links">Social Media Links</h3>
<h4 id="nodesource-team-partial-list-">NodeSource Team (partial list)</h4>
<ul>
<li>NodeSource <a href="https://twitter.com/nodesource">twitter</a></li>
<li>Daniel Shaw, Co-founder <a href="https://twitter.com/dshaw">twitter</a></li>
<li>Joe McCann, Co-founder <a href="https://twitter.com/joemccann">twitter</a></li>
<li>Rod Vagg, Director of Engineering <a href="https://twitter.com/rvagg">twitter</a></li>
<li>Chris Williams, Director of Professional Services <a href="https://twitter.com/voodootikigod">twitter</a></li>
<li>Trevor Norris, Node.js Maintainer <a href="https://twitter.com/trevnorris">twitter</a></li>
</ul>
<h4 id="codewinds">CodeWinds</h4>
<ul>
<li>Jeff Barczewski, Founder <a href="https://twitter.com/jeffbski">twitter</a></li>
<li>CodeWinds <a href="https://twitter.com/codewinds">twitter</a></li>
</ul>

      ]]></content:encoded>
    </item>
  
    <item>
      <title>005 Saul Maddox, Software Engineer at PROS, shares insights about his Hapi-Ninja boilerplate and its technology (Node.js, Hapijs web framework, Swig, Gulp)</title>
      <link>http://codewinds.com/podcast/005.html</link>
      <guid>http://codewinds.com/podcast/005.html</guid>
      <pubDate>Mon, 07 Apr 2014 08:00:00 -0500</pubDate>
      <description>Jeff Barczewski and Saul Maddox discuss the Hapi-Ninja boilerplate project and the underlying technology (Hapi Node.js web framework, Swig templates, Gulp task runner)</description>
      <enclosure url="http://codewinds.com/media/podcast/codewinds-005.mp3" length="28666450" type="audio/mpeg"/>
      <category>Podcasts</category>
      <author>itunes@codewinds.com (Jeff Barczewski)</author>
      <itunes:author>Jeff Barczewski</itunes:author>
      <itunes:explicit>No</itunes:explicit>
      <itunes:subtitle>Hapi-Ninja boilerplate makes getting a project up and running with the Node.js Hapi web framework simple</itunes:subtitle>
      <itunes:summary>Jeff Barczewski and Saul Maddox discuss the Hapi-Ninja boilerplate project and the underlying technology (Hapi Node.js web framework, Swig templates, Gulp task runner)</itunes:summary>
      <itunes:duration>34:17</itunes:duration>
      <itunes:keywords>js, nodejs, web framework, boilerplate</itunes:keywords>
      <itunes:image href="http://codewinds.com/assets/codewinds/codewinds-podcast-300.png"/>
      <content:encoded><![CDATA[
        <p><img src="https://avatars0.githubusercontent.com/u/1514196" alt="SaulMaddox-Photo" title="Saul Maddox"></p>
<p>Saul Maddox, a software engineer for <a href="http://pros.com" title="PROS website">PROS</a>, joins me in this episode of CodeWinds to discuss his Hapi-Ninja boilerplate which helps developers get up and running with the Hapi Node.js web framework.</p>
<p>We discuss in detail the stack he has chosen and the reasons for selecting each:</p>
<ul>
<li><a href="http://hapijs.com" title="Hapi Node.js web framework">Hapijs</a> Node.js web framework</li>
<li><a href="http://paularmstrong.github.io/swig/docs/#browser" title="Swig templates">Swig</a> templates</li>
<li><a href="http://gulpjs.com/" title="Gulp javascript streaming task runner">Gulp</a> javascript streaming task runner</li>
<li>Plugins he has included for assets and routes</li>
</ul>
<p>Saul explains the file structure of Hapi-Ninja mentioning how to configure and get up and running with Hapi quickly and easily.</p>
<div id="toc"><ol><li><a href="#episode_info">Episode Info</a></li><li><a href="#episode_notes">Episode Notes</a><ol><li><a href="#episode_timeline">Episode timeline</a></li></ol></li><li><a href="#getting_started_with_hapi-ninja">Getting started with Hapi-Ninja</a></li><li><a href="#links_from_show">Links from Show</a><ol><li><a href="#following_saul_maddox">Following Saul Maddox</a></li></ol></li></ol></div>

<a name="episode_info"></a><h2 id="episode-info">Episode Info</h2>
<ul>
<li>Episode: CW 005</li>
<li>Published: April 7th, 2014</li>
<li>Tags: js, nodejs,web,framework,boilerplate</li>
<li>Duration: 34:17</li>
</ul>
<a name="episode_notes"></a><h2 id="episode-notes">Episode Notes</h2>
<a name="episode_timeline"></a><h3 id="episode-timeline">Episode timeline</h3>
<ul>
<li>02:06 - Introduction to the Hapi-Ninja boilerplate</li>
<li>05:44 - Details of Hapi-Ninja stack</li>
<li>06:00 - Hapi Node.js web framework</li>
<li>08:34 - Swig javascript templates</li>
<li>11:17 - Gulp Node.js streaming task runner</li>
<li>13:52 - Getting started with Hapi-Ninja boilerplate</li>
<li>14:44 - Using a watcher like node-supervisor to auto reload</li>
<li>15:47 - Hapi-Ninja file structure</li>
<li>18:38 - Configuration</li>
<li>18:55 - Hapi-Assets plugin for minimizing and concatenating assets</li>
<li>21:42 - Hapi-Named-Routes plugin</li>
<li>23:31 - Hapi-Cache Buster plugin for easier browser reloading in development</li>
<li>25:26 - Easy switching from full frontend app (PhoneGap) to a frontend and server using same folder structure</li>
<li>27:02 - Hapi-Ninja code is commented heavily to help new users learn</li>
<li>27:41 - Upgrading from Hapi 2.x to 3.x</li>
<li>28:37 - Contributing</li>
<li>30:08 - Other projects</li>
<li>30:25 - Ever Stain project - legacy website for being remembered</li>
<li>32:16 - Following Saul</li>
</ul>
<a name="getting_started_with_hapi-ninja"></a><h2 id="getting-started-with-hapi-ninja">Getting started with Hapi-Ninja</h2>
<ul>
<li>Install <a href="http://nodejs.org" title="Node.js">Nodejs</a></li>
<li>Clone repo from GitHub</li>
<li>Change working directory into the new path</li>
<li>Install dependencies from npm</li>
</ul>
<pre class="highlight"><code class="hljs bash"><span class="hljs-comment"># after installing Node.js</span>
git <span class="hljs-built_in">clone</span> https://github.com/poeticninja/hapi-ninja.git
<span class="hljs-built_in">cd</span> hapi-ninja
npm install</code></pre>
<a name="links_from_show"></a><h2 id="links-from-show">Links from Show</h2>
<ul>
<li><a href="https://github.com/poeticninja/hapi-ninja" title="Hapi-Ninja boilerplate GitHub repo">Hapi-Ninja</a> boilerplate GitHub Repo</li>
<li><a href="http://hapijs.com" title="Hapi Node.js web framework">Hapijs</a> Node.js web framework</li>
<li><a href="http://paularmstrong.github.io/swig/docs/#browser" title="Swig templates">Swig</a> templates</li>
<li><a href="http://gulpjs.com/" title="Gulp javascript streaming task runner">Gulp</a> javascript streaming task runner</li>
<li><a href="https://github.com/poeticninja/hapi-named-routes">Hapi-Named-Routes</a> plugin for using named routes</li>
<li><a href="https://npmjs.org/package/hapi-assets">Hapi-Assets</a> plugin for automatically minimizing and concatenating assets</li>
<li><a href="https://npmjs.org/package/hapi-cache-buster">Hapi-Cache-Buster</a> plugin which helps with serving fresh content in development</li>
<li><a href="http://everstain.com/" title="Ever Stain legacy website">Ever Stain</a> legacy website coming soon by Saul Maddox. How will you be remembered?</li>
</ul>
<a name="following_saul_maddox"></a><h3 id="following-saul-maddox">Following Saul Maddox</h3>
<ul>
<li><a href="https://github.com/poeticninja" title="Saul Maddox GitHub">Saul Maddox GitHub</a></li>
<li><a href="https://twitter.com/poeticninja" title="Saul Maddox Twitter">Saul Maddox Twitter</a></li>
</ul>

      ]]></content:encoded>
    </item>
  
    <item>
      <title>004 Pete Hunt, Software Engineer for Facebook, discussing Facebook's open source js UI framework, React</title>
      <link>http://codewinds.com/podcast/004.html</link>
      <guid>http://codewinds.com/podcast/004.html</guid>
      <pubDate>Mon, 17 Mar 2014 08:00:00 -0500</pubDate>
      <description>Jeff interviews Pete Hunt, Software Engineer for Facebook, on the history and design of Facebook's React web UI framework for javascript and Node.js</description>
      <enclosure url="http://codewinds.com/media/podcast/codewinds-004.mp3" length="35556770" type="audio/mpeg"/>
      <category>Podcasts</category>
      <author>itunes@codewinds.com (Jeff Barczewski)</author>
      <itunes:author>Jeff Barczewski</itunes:author>
      <itunes:explicit>No</itunes:explicit>
      <itunes:subtitle>Facebook's React brings a new approach to building web appliction UI's with javascript in the browser and node.js on the server</itunes:subtitle>
      <itunes:summary>Jeff interviews Pete Hunt, Software Engineer for Facebook, on the history and design of Facebook's React web UI framework for javascript and Node.js</itunes:summary>
      <itunes:duration>42:17</itunes:duration>
      <itunes:keywords>js, nodejs, UI framework</itunes:keywords>
      <itunes:image href="http://codewinds.com/assets/codewinds/codewinds-podcast-300.png"/>
      <content:encoded><![CDATA[
        <p><img src="https://0.gravatar.com/avatar/1529ee4850653ed595b6d47c6b7d6b3b?s=800" alt="PeteHunt-Photo" title="Pete Hunt"></p>
<p>In this episode, Jeff interviews Pete Hunt, a software engineer with Facebook about Facebook’s hot new open source js UI framework, React. React is a fresh look at how to build UI’s, attempting to improve on the limitations of the past. React gets some of its inspiration from how game engines acehieve awesome performance in their rendering pipeline.</p>
<p>React can be used in the browser and on the server with node.js so you can have single page apps that are fully indexable by the search engines and have instant load characteristics. React has pluggable backends so it can be used to target the DOM, HTML, canvas, SVG, and other formats.</p>
<p>The ideas and concepts behind React are very compelling, I encourage you to give it a look.</p>
<div id="toc"><ol><li><a href="#episode_info">Episode Info</a></li><li><a href="#episode_notes">Episode Notes</a><ol><li><a href="#interview_timeline">Interview timeline</a></li></ol></li><li><a href="#notable_users_of_react">Notable users of React</a></li><li><a href="#resources">Resources</a><ol><li><a href="#links_from_show">Links from Show</a></li><li><a href="#online_training_courses">Online Training Courses</a></li><li><a href="#tutorials">Tutorials</a></li><li><a href="#other">Other</a></li></ol></li></ol></div>

<a name="episode_info"></a><h2 id="episode-info">Episode Info</h2>
<ul>
<li>Episode: CW 004</li>
<li>Published: March 17th, 2014</li>
<li>Tags: js, nodejs,UI,framework</li>
<li>Duration: 42:17</li>
<li>Updated: 2014-05-01 Added links to great articles by Reto Schläpfer</li>
</ul>
<a name="episode_notes"></a><h2 id="episode-notes">Episode Notes</h2>
<a name="interview_timeline"></a><h3 id="interview-timeline">Interview timeline</h3>
<ul>
<li>2:08 - What is React and why might people want to use it?</li>
<li>3:08 - The symbiotic relationship of ClojureScript and React</li>
<li>4:54 - The history of React and why it was created</li>
<li>9:43 - Updating web page with React without using data binding, a better approach inspired by game engines</li>
<li>13:11 - Using the virtual DOM to change the browser DOM</li>
<li>13:57 - Programming with React, render target HTML, canvas, other. Javascript is reference implementation of React. Node.js, ClojureScript, other environments.</li>
<li>16:45 - Working with designers. Contrasted with Ember and AngularJS. React encourages building a component architecture.</li>
<li>21:45 - JSX Compiler bridging HTML and React javascript</li>
<li>23:50 - Autobuilding JSX and in browser tools for React</li>
<li>24:50 - Tips and tricks to working with React, suggestions for getting started with React</li>
<li>27:17 - Rendering HTML on the server with Node.js. Pluggable React rendering backends (DOM, HTML, canvas, mixed mode static HTML + background JS binding). Better single page app performance</li>
<li>29:20 - React evolved through survival of the fittest at Facebook</li>
<li>30:15 - Ideas for having state on server and client, possibilities for using React over web sockets.</li>
<li>32:05 - React-multiuser - distributed shared mutable state using Firebase</li>
<li>33:03 - Better debugging with React using the state transitions, rewinding the state to replay the events</li>
<li>34:08 - Differences from Web Components</li>
<li>34:25 - Notable companies using React - Khan Academy, Oscars (Neartime.com), Largest bank in Russia, Facebook, Instagram</li>
<li>35:16 - Could a React backend plugin be created to target PDF?</li>
<li>36:30 - Future of React, what’s next?</li>
<li>39:38 - Contributing and getting help</li>
</ul>
<a name="notable_users_of_react"></a><h2 id="notable-users-of-react">Notable users of React</h2>
<ul>
<li>Instagram.com is 100% built on React, both public site and internal tools.</li>
<li>Facebook.com’s commenting interface, business management tools, Lookback video editor, page insights, and most, if not all, new JS development.</li>
<li>Khan Academy uses React for most new JS development.</li>
<li>Shirtstarter is 100% built on React.</li>
<li>Sberbank, Russia’s number one bank, is built with React.</li>
<li>The New York Times’s 2014 Red Carpet Project is built with React.</li>
</ul>
<a name="resources"></a><h2 id="resources">Resources</h2>
<a name="links_from_show"></a><h3 id="links-from-show">Links from Show</h3>
<ul>
<li><a href="http://reactjs.org/">Main Reactjs.org site</a></li>
<li><a href="https://github.com/facebook/react">Github Repo for Reactjs Source</a></li>
<li><a href="https://twitter.com/floydophone">Pete Hunt’s Twitter</a></li>
<li><a href="https://github.com/khan/perseus">Khan Academy question editor GitHub repo written in React</a></li>
<li><a href="irc://chat.freenode.net/reactjs">irc: #reactjs on freenode</a></li>
</ul>
<a name="online_training_courses"></a><h3 id="online-training-courses">Online Training Courses</h3>
<ul>
<li><a href="http://codewinds.com/react"><img src="http://codewinds.com/media/course/reactjs-101.png" alt="CodeWinds React.js Fundamentals" title="CodeWinds React.js Fundamentals - comprehensive self-paced online training course"></a><a href="http://codewinds.com/react">CodeWinds React.js Fundamentals</a> - The premier online course and community where you learn React.js by pragmatically building a real web app while applying TDD/BDD principles</li>
</ul>
<blockquote class="mediumQuote"><img class="avatar" src="http://codewinds.com/assets/article/kold_avatar.jpg">&#8220;Highly recommended!&#8221; <br><div class="quoteBy">-&nbsp;Kevin&nbsp;Old,&nbsp;Senior&nbsp;Software&nbsp;Engineer</div></blockquote>

<blockquote class="mediumQuote"><img class="avatar" src="http://codewinds.com/assets/people/wyatt-preul.jpg">&#8220;Look no further, the React.js Fundamentals course is the only course you will need to become an expert in React.js&#8221; <br><div class="quoteBy">-&nbsp;Wyatt&nbsp;Preul,&nbsp;Software&nbsp;Architect,&nbsp;nearForm</div></blockquote>

<blockquote class="mediumQuote"><img class="avatar" src="http://codewinds.com/assets/article/kevin-bridges.jpg">&#8220;Overall I would give this React.js course a 4-star thumbs up!&#8221;<div class="quoteBy">- Kevin Bridges - Senior Technical Consultant at Applied Software</div></blockquote>


<a name="tutorials"></a><h3 id="tutorials">Tutorials</h3>
<ul>
<li><a href="http://facebook.github.io/react/docs/videos.html">Videos and podcasts covering React</a></li>
<li><a href="http://facebook.github.io/react/docs/getting-started.html">Getting Started with Reactjs</a></li>
<li><a href="http://facebook.github.io/react/docs/tutorial.html">Tutorial for React</a></li>
<li><a href="http://facebook.github.io/react/docs/thinking-in-react.html">Thinking in React</a></li>
<li><a href="http://facebook.github.io/react/docs/examples.html">React examples page</a></li>
<li><a href="http://facebook.github.io/react/docs/jsx-in-depth.html">JSX javascript XML syntax for React</a></li>
</ul>
<a name="other"></a><h3 id="other">Other</h3>
<p>The articles below by Reto Schläpfer are excellent in explaining why you might consider Reactjs vs traditional MVC frameworks.</p>
<ul>
<li><a href="http://www.code-experience.com/why-you-might-not-need-mvc-with-reactjs/">Why you might not need MVC with React.js - Reto Schläpfer</a></li>
<li><a href="http://www.code-experience.com/react-js-vs-traditional-mvc-backbone-ember-angular/">React.js vs traditional MVC (Backbone, Angular) - Reto Schläpfer</a></li>
<li><a href="http://joelburget.com/backbone-to-react/">Joel Burget’s blog article and slides about Khan Academy switching from Backbone Views to React</a></li>
<li><a href="http://groups.google.com/group/reactjs">Reactjs Google Group</a></li>
<li><a href="http://stackoverflow.com/questions/tagged/reactjs">Stack Overflow questions on Reactjs</a></li>
</ul>

      ]]></content:encoded>
    </item>
  
    <item>
      <title>003 SQLBits - lightweight SQL builder for Node.js for use with Postgres or other ANSI SQL databases</title>
      <link>http://codewinds.com/podcast/003.html</link>
      <guid>http://codewinds.com/podcast/003.html</guid>
      <pubDate>Mon, 17 Feb 2014 13:00:00 -0600</pubDate>
      <description>SQLBits a Node.js SQL builder that can be used with Postgres or other ANSI SQL databases to help you generate safe parameterized queries and user driven filters</description>
      <enclosure url="http://codewinds.com/media/podcast/codewinds-003.mp3" length="11539151" type="audio/mpeg"/>
      <category>Podcasts</category>
      <author>itunes@codewinds.com (Jeff Barczewski)</author>
      <itunes:author>Jeff Barczewski</itunes:author>
      <itunes:explicit>No</itunes:explicit>
      <itunes:subtitle>Using SQLBits, the Node.js SQL builder to assist with creating paramaterized SQL and queries</itunes:subtitle>
      <itunes:summary>SQLBits a Node.js SQL builder that can be used with Postgres or other ANSI SQL databases to help you generate safe parameterized queries and user driven filters</itunes:summary>
      <itunes:duration>17:17</itunes:duration>
      <itunes:keywords>nodejs, sql, database, postgres, ansi sql, sql builder</itunes:keywords>
      <itunes:image href="http://codewinds.com/assets/codewinds/codewinds-podcast-300.png"/>
      <content:encoded><![CDATA[
        <p>SQLBits, a lightweight SQL builder for Node.js built by <a href="https://github.com/williamwicks" title="William Wicks GitHub prifile">William Wicks</a>, is a great compromise between using native SQL and going to a full ORM (object relational mapping tool). It is small and focused on doing one job, to help you create parameterized queries. One of its unique and killer features is that it can help you create any combination of filter queries from a single complex query based on the parameters used.</p>
<p>My goal with this podcast is to introduce you to <a href="https://github.com/williamwicks/sqlbits" title="SQLBits GitHub project page">SQLBits</a> and provide some insight as to why it could be a valuable tool in your Node.js toolbox.</p>
<div id="toc"><ol><li><a href="#episode_info">Episode Info</a></li><li><a href="#episode_notes">Episode Notes</a><ol><li><a href="#background_-_sql_builder_vs_orm">Background - SQL Builder vs ORM</a></li><li><a href="#sqlbits_-_node_js_sql_builder">SQLBits - Node.js SQL builder</a></li><li><a href="#sqlbits_install">SQLBits Install</a></li><li><a href="#simple_example">Simple example</a></li><li><a href="#additional_criteria">Additional criteria</a></li><li><a href="#joins">Joins</a></li><li><a href="#filters_driven_by_defined_parameters">Filters driven by defined parameters</a></li><li><a href="#inserts">Inserts</a></li><li><a href="#updates">Updates</a></li><li><a href="#deletes">Deletes</a></li></ol></li><li><a href="#quick_reference">Quick Reference</a></li><li><a href="#resources">Resources</a></li><li><a href="#summary">Summary</a></li></ol></div>

<a name="episode_info"></a><h2 id="episode-info">Episode Info</h2>
<ul>
<li>Episode: CW 003</li>
<li>Published: February 17th, 2014</li>
<li>Tags: nodejs, database</li>
<li>Duration: 17:17</li>
</ul>
<a name="episode_notes"></a><h2 id="episode-notes">Episode Notes</h2>
<a name="background_-_sql_builder_vs_orm"></a><h3 id="background-sql-builder-vs-orm">Background - SQL Builder vs ORM</h3>
<p>What is a SQL builder and how does that compare to an ORM (Object Relational Mapper)?</p>
<p>A SQL builder like SQLBits is designed to help you to build safe parameterized SQL with a minimal abstraction layer that still allows you to write optimized SQL queries. Using parameters is important in create SQL to prevent SQL injection attacks where users enter malicious data into forms to gain access to your database. SQL builders help you to use parameters and avoid these attacks.</p>
<p>Having used Hibernate for Java and Active Record with Rails (a couple of popular Object Relational Mappers, I’ve seen what a ORM’s can do and they are nice when they do what you want, but all to often once you get into more advanced uses, they tend to get in your way and you are fighting with the tool to try to get it to generate the SQL you want.</p>
<p>So a SQL builder which allows you to create just the right queries but helps you deal with parameterization and tokens, provides a great balance. It stays out of your way and just helps with the bookkeeping. The sql it generates and the parameter array can be used directly with your database module like the <code>pg</code> Postgres client.</p>
<a name="sqlbits_-_node_js_sql_builder"></a><h3 id="sqlbits-node-js-sql-builder">SQLBits - Node.js SQL builder</h3>
<p>I reviewed a bunch of Node.js SQL builders listed in NPM and I was not happy with any of them until I found <a href="https://github.com/williamwicks/sqlbits" title="SQLBits GitHub project page">SQLBits</a>.</p>
<p>Too many of them seemed complicated or too integrated bordering on ORM capabilities. I wanted something that was simple and just server a single purpose to help me build good parameterized queries. I didn’t want it to run my queries or perform schema manipulation. I don’t want a complete new DSL (domain specific language) or API that I need to learn. SQL is already a DSL that does that just fine, but it can get tricky to manage as queries get complex.</p>
<p>SQLBits is a simple tool which helps you generate SQL but stays out of your way. You can create custom tuned SQL which pulls back only what is needed over the wire and have it manage the parameters and tokens.</p>
<a name="sqlbits_install"></a><h3 id="sqlbits-install">SQLBits Install</h3>
<pre class="highlight"><code class="hljs bash">npm install sqlbits --save  <span class="hljs-comment"># install and add to package.json</span></code></pre>
<a name="simple_example"></a><h3 id="simple-example">Simple example</h3>
<pre class="highlight"><code class="hljs javascript"><span class="hljs-keyword">var</span> bits = <span class="hljs-built_in">require</span>(<span class="hljs-string">'sqlbits'</span>);
<span class="hljs-keyword">var</span> SQL = bits.SQL;
<span class="hljs-keyword">var</span> $ = bits.$;
<span class="hljs-keyword">var</span> AND = bits.AND;
<span class="hljs-keyword">var</span> params = { <span class="hljs-attr">max_price</span>: <span class="hljs-number">10.00</span>, <span class="hljs-attr">clearance</span>: <span class="hljs-literal">true</span> };
<span class="hljs-keyword">var</span> query =
  SQL(<span class="hljs-string">'select name, desc from widgets'</span>)
   .WHERE(<span class="hljs-string">'price &lt; '</span>, $(params.max_price), AND,
          <span class="hljs-string">'clearance = '</span>, $(params.clearance))
   .ORDERBY(<span class="hljs-string">'name asc'</span>);

<span class="hljs-comment">// sql: select name, desc from widgets WHERE(price &lt; $1 AND clearance = $2) ORDER BY name asc</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'sql: '</span>, query.sql);
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'params: '</span>, query.params); <span class="hljs-comment">// params: [ 10, true ]</span></code></pre>
<a name="additional_criteria"></a><h3 id="additional-criteria">Additional criteria</h3>
<p>You can add in additional filter criteria with:</p>
<ul>
<li><code>AND</code> - bits.AND</li>
<li><code>OR</code> - bits.OR</li>
<li><code>BETWEEN</code> - bits.BETWEEN (discussed in depth later)</li>
<li><code>.IN(array)</code></li>
<li><code>$</code> - bits.$ - used to specify that something is a parameter <code>$(params.foo)</code></li>
</ul>
<a name="joins"></a><h3 id="joins">Joins</h3>
<p>With relational data, you will often need to join tables together, and to maintain good performance these joins may need to be optimized. SQLBits allows you to perform any joins you need (left, right, inner, outer) just like you would normally with raw SQL.</p>
<pre class="highlight"><code class="hljs javascript"><span class="hljs-keyword">var</span> bits = <span class="hljs-built_in">require</span>(<span class="hljs-string">'sqlbits'</span>);
<span class="hljs-keyword">var</span> SQL = bits.SQL;
<span class="hljs-keyword">var</span> query =
  SQL(<span class="hljs-string">'select w.name, c.type from widgets w '</span> +
      <span class="hljs-string">'join category c on w.categoryID = c.categoryID'</span>)
    .ORDERBY(<span class="hljs-string">'w.name asc'</span>);

<span class="hljs-comment">// OR</span>

<span class="hljs-keyword">var</span> query =
  SQL(<span class="hljs-string">'select w.name, c.type from widgets w'</span>)
    ._(<span class="hljs-string">'join category c on w.categoryID = c.categoryID'</span>)
    .ORDERBY(<span class="hljs-string">'w.name asc'</span>);

<span class="hljs-comment">// sql: select w.name, c.type from widgets w join category c on w.categoryID = c.categoryID ORDER BY w.name asc</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'sql: '</span>, query.sql);</code></pre>
<p>The <code>._()</code> is another way to concatenate sql together.</p>
<a name="filters_driven_by_defined_parameters"></a><h3 id="filters-driven-by-defined-parameters">Filters driven by defined parameters</h3>
<p>If you have ever had to create SQL with filter clauses that was driven by user input, you should really appreciate this next feature.</p>
<p>Let’s say for instance that you have a report or catalog that you want to allow the user to provide filter criteria to limit by.</p>
<ul>
<li>If the user doesn’t enter any criteria then return the whole list unfiltered.</li>
<li>If they add a minimum price use that in the filter</li>
<li>If they add a maximum price limit the rows with that criteria</li>
<li>If they include a clearance boolean, use that in the criteria</li>
</ul>
<p>Even in this simple example, there are many combinations of possible filters depending on whether the user enters any of the filter data points.</p>
<p>If you were building this SQL by hand, typically you would create a series of <code>if</code> statements to conditionally include the filter, and you would build up an array of params which you have to manually keep track of.</p>
<p>However with SQLBits this is child’s play. You only have to create one complex query that includes all the possible filter criteria, and SQLBits will eliminate the parts where the parameters involved are <code>undefined</code>.</p>
<p>Also by using the <code>BETWEEN</code> command, SQLBits handles all four scenarios automatically:</p>
<ul>
<li>min and max are defined: <code>price BETWEEN $1 AND $2</code></li>
<li>only min is defined: <code>price &gt;= $1</code></li>
<li>only max is defined: <code>price &lt;= $1</code></li>
<li>neither min or max is defined: the criteria is eliminated</li>
</ul>
<pre class="highlight"><code class="hljs javascript"><span class="hljs-keyword">var</span> bits = <span class="hljs-built_in">require</span>(<span class="hljs-string">'sqlbits'</span>);
<span class="hljs-keyword">var</span> SQL = bits.SQL;
<span class="hljs-keyword">var</span> $ = bits.$;
<span class="hljs-keyword">var</span> AND = bits.AND;
<span class="hljs-keyword">var</span> BETWEEN = bits.BETWEEN;

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">queryByParam</span>(<span class="hljs-params">params</span>) </span>{
  <span class="hljs-keyword">var</span> query =
    SQL(<span class="hljs-string">'select name, desc from widgets'</span>)
      .WHERE(<span class="hljs-string">'price'</span>, BETWEEN(params.min, params.max), AND,
             <span class="hljs-string">'clearance = '</span>, $(params.clearance))
      .ORDERBY(<span class="hljs-string">'name asc'</span>);
  <span class="hljs-keyword">return</span> query;
}

<span class="hljs-keyword">var</span> query = queryByParam({ <span class="hljs-attr">min</span>: <span class="hljs-number">2.00</span>, <span class="hljs-attr">max</span>: <span class="hljs-number">10.00</span>, <span class="hljs-attr">clearance</span>: <span class="hljs-literal">true</span> });
<span class="hljs-comment">// sql: select name, desc from widgets WHERE(price BETWEEN $1 AND $2 AND clearance = $3) ORDER BY name asc</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'sql: '</span>, query.sql);
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'params: '</span>, query.params); <span class="hljs-comment">// params: [ 2, 10, true ]</span>

<span class="hljs-keyword">var</span> query = queryByParam({ <span class="hljs-attr">min</span>: <span class="hljs-number">2.00</span> });
<span class="hljs-comment">// sql: select name, desc from widgets WHERE price &gt;=$1 ORDER BY name asc</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'sql: '</span>, query.sql);
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'params: '</span>, query.params); <span class="hljs-comment">// params: [ 2 ];</span>

<span class="hljs-keyword">var</span> query = queryByParam({ <span class="hljs-attr">max</span>: <span class="hljs-number">10.00</span> });
<span class="hljs-comment">// sql: select name, desc from widgets WHERE price &lt;=$1 ORDER BY name asc</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'sql: '</span>, query.sql);
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'params: '</span>, query.params); <span class="hljs-comment">// params: [ 10 ]</span>

<span class="hljs-keyword">var</span> query = queryByParam({ <span class="hljs-attr">min</span>: <span class="hljs-number">2.00</span>, <span class="hljs-attr">max</span>: <span class="hljs-number">10.00</span> });
<span class="hljs-comment">// sql: select name, desc from widgets WHERE price BETWEEN $1 AND $2 ORDER BY name asc</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'sql: '</span>, query.sql);
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'params: '</span>, query.params); <span class="hljs-comment">// params: [ 2, 10 ]</span>

<span class="hljs-keyword">var</span> query = queryByParam({ <span class="hljs-attr">min</span>: <span class="hljs-number">2.00</span>, <span class="hljs-attr">clearance</span>: <span class="hljs-literal">true</span> });
<span class="hljs-comment">// sql:  select name, desc from widgets WHERE(price &gt;=$1 AND clearance = $2) ORDER BY name asc</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'sql: '</span>, query.sql);
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'params: '</span>, query.params); <span class="hljs-comment">// params: [ 2, true ]</span></code></pre>
<p>In my opinion, this is one of the killer features of SQLBits. You create a single complex query with all the possible filters and then just provide a params object to SQLBits with a parameters object having the keys that the user wants to filter by, and it provides the customized query.</p>
<p>This eliminates all the conditional logic which is hard to test and debug when it fails and you are left with a single complex query to maintain.</p>
<a name="inserts"></a><h3 id="inserts">Inserts</h3>
<p>Inserting data into your tables by key is as simple as providing an object to SQLBits and it will add all the keys and values.</p>
<pre class="highlight"><code class="hljs javascript"><span class="hljs-keyword">var</span> bits = <span class="hljs-built_in">require</span>(<span class="hljs-string">'sqlbits'</span>);
<span class="hljs-keyword">var</span> INSERT = bits.INSERT;

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">insertWidget</span>(<span class="hljs-params">obj</span>) </span>{
  <span class="hljs-keyword">return</span> INSERT.INTO(<span class="hljs-string">'widgets'</span>, obj);
}

<span class="hljs-keyword">var</span> query = insertWidget({ <span class="hljs-attr">name</span>: <span class="hljs-string">'foo'</span>, <span class="hljs-attr">desc</span>: <span class="hljs-string">'Foo man'</span>, <span class="hljs-attr">price</span>: <span class="hljs-number">23.45</span> });
<span class="hljs-comment">//INSERT INTO widgets (name,desc,price) SELECT $1,$2,$3</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'sql: '</span>, query.sql);
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'params: '</span>, query.params); <span class="hljs-comment">// params: [ 'foo', 'Foo man', 23.45 ]</span>

<span class="hljs-keyword">var</span> query = insertWidget({ <span class="hljs-attr">name</span>: <span class="hljs-string">'bar'</span>, <span class="hljs-attr">price</span>: <span class="hljs-number">11.23</span> });
<span class="hljs-comment">//INSERT INTO widgets (name,price) SELECT $1,$2</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'sql: '</span>, query.sql);
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'params: '</span>, query.params); <span class="hljs-comment">// params: [ 'bar', 11.23 ]</span>

<span class="hljs-keyword">var</span> query = insertWidget({ <span class="hljs-attr">name</span>: <span class="hljs-string">'bar'</span> });
<span class="hljs-comment">// INSERT INTO widgets (name) SELECT $1</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'sql: '</span>, query.sql);
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'params: '</span>, query.params); <span class="hljs-comment">// params: ['bar']</span></code></pre>
<a name="updates"></a><h3 id="updates">Updates</h3>
<p>Updating data works just like the inserts but uses the <code>UPDATE</code> and <code>.SET()</code></p>
<pre class="highlight"><code class="hljs javascript"><span class="hljs-keyword">var</span> bits = <span class="hljs-built_in">require</span>(<span class="hljs-string">'sqlbits'</span>);
<span class="hljs-keyword">var</span> UPDATE = bits.UPDATE;

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">updateWidget</span>(<span class="hljs-params">id, updateValues</span>) </span>{
  <span class="hljs-keyword">return</span> UPDATE(<span class="hljs-string">'widget'</span>)
           .SET(updateValues)
           ._(<span class="hljs-string">'where id='</span>, $(id));
}

<span class="hljs-keyword">var</span> query = updateWidget(<span class="hljs-number">1</span>, { <span class="hljs-attr">name</span>: <span class="hljs-string">'bar'</span> });
<span class="hljs-comment">// sql:  UPDATE widget SET name=$1 where id=$2</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'sql: '</span>, query.sql);
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'params: '</span>, query.params); <span class="hljs-comment">// [ 'bar', 1 ]</span>

<span class="hljs-keyword">var</span> query = updateWidget(<span class="hljs-number">2</span>, { <span class="hljs-attr">name</span>: <span class="hljs-string">'cat'</span>, <span class="hljs-attr">price</span>: <span class="hljs-number">1.12</span> });
<span class="hljs-comment">// UPDATE widget SET name=$1,price=$2 where id=$3</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'sql: '</span>, query.sql);
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'params: '</span>, query.params); <span class="hljs-comment">// [ 'cat', 1.12, 2 ]</span></code></pre>
<p>Note: with update’s we don’t want to have the WHERE clause collapse so it is safer to use a non-conditional string with <code>._(&#39;where id = &#39;, $(obj.id))</code> to there is no chance of the filter clause being collapsed.</p>
<a name="deletes"></a><h3 id="deletes">Deletes</h3>
<p>Finally deletes use <code>DELETE.FROM</code> to specify a deletion.</p>
<pre class="highlight"><code class="hljs javascript"><span class="hljs-keyword">var</span> bits = <span class="hljs-built_in">require</span>(<span class="hljs-string">'sqlbits'</span>);
<span class="hljs-keyword">var</span> DELETE = bits.DELETE;
<span class="hljs-keyword">var</span> params = { <span class="hljs-attr">id</span>: <span class="hljs-number">10</span> };

<span class="hljs-keyword">var</span> query = DELETE.FROM(<span class="hljs-string">'widgets'</span>)
              ._(<span class="hljs-string">'where id='</span>, $(params.id));

<span class="hljs-comment">// sql: DELETE FROM widgets where id=$1</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'sql: '</span>, query.sql);
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'params: '</span>, query.params); <span class="hljs-comment">// [ 10 ]</span></code></pre>
<p>Note: with delete’s we don’t want to have the WHERE clause collapse so it is safer to use a non-conditional string with <code>._(&#39;where id = &#39;, $(obj.id))</code> to there is no chance of the filter clause being collapsed.</p>
<a name="quick_reference"></a><h2 id="quick-reference">Quick Reference</h2>
<pre class="highlight"><code class="hljs javascript"><span class="hljs-keyword">var</span> bits = <span class="hljs-built_in">require</span>(<span class="hljs-string">'sqlbits'</span>);
<span class="hljs-keyword">var</span> SQL = bits.SQL; <span class="hljs-comment">// SQL('select name, desc from widgets')</span>
<span class="hljs-keyword">var</span> $ = bits.$; <span class="hljs-comment">// SQL('...').WHERE('id=', $(obj.id));</span>
<span class="hljs-keyword">var</span> AND = bits.AND; <span class="hljs-comment">// .WHERE('id=', $(obj.id), AND, 'type=', $(obj.type));</span>
<span class="hljs-keyword">var</span> OR = bits.OR; <span class="hljs-comment">// .WHERE('type=', $(obj.type), OR, 'color=', $(obj.color));</span>
<span class="hljs-keyword">var</span> IN = bits.IN; <span class="hljs-comment">// .WHERE('id', IN(array));</span>
<span class="hljs-keyword">var</span> BETWEEN = bits.BETWEEN; <span class="hljs-comment">// .WHERE(price, BETWEEN($(obj.min), $(obj.max));</span>
<span class="hljs-keyword">var</span> INSERT = bits.INSERT; <span class="hljs-comment">// INSERT.INTO('widgets', obj)</span>
<span class="hljs-keyword">var</span> UPDATE = bits.UPDATE; <span class="hljs-comment">// UPDATE('widgets').SET(updateValues)._('where id = ', $(obj.id))</span>
<span class="hljs-keyword">var</span> DELETE = bits.DELETE; <span class="hljs-comment">// DELETE.FROM('widgets')._('where id = ', $(obj.id))</span></code></pre>
<p>Methods to help chain</p>
<ul>
<li><code>._()</code> - appends to the SQL after adding a space</li>
<li><code>.WHERE(...)</code> - add a <code>where</code> clause which checks the params that are defined to conditionally add the filter criteria</li>
<li><code>.SET(updateValues)</code> - used with <code>UPDATE</code> to provide the field names and values to update</li>
<li><code>.FROM(&#39;mytable&#39;)</code> - used with <code>DELETE</code> to specify table</li>
<li><code>.ORDERBY(&#39;name asc, qty desc&#39;)</code> - add sorting criteria</li>
<li><code>.LIMIT(number)</code> - limit the max rows returned, defaults to 0</li>
<li><code>.OFFSET(number)</code> - start rows at offset (for paging), defaults to 0</li>
</ul>
<p>Accessor properties</p>
<ul>
<li><code>.sql</code> - get the parameterized SQL string</li>
<li><code>.params</code> - get the array of parameters to use with the SQL</li>
</ul>
<a name="resources"></a><h2 id="resources">Resources</h2>
<ul>
<li><a href="https://github.com/williamwicks/sqlbits" title="SQLBits GitHub project page">SQLBits</a> - GitHub repo and project readme. This brief page provides examples of how to use SQLBits and is a great place to get started</li>
</ul>
<a name="summary"></a><h2 id="summary">Summary</h2>
<p>SQLBits is a nice lightweight way to create safe parameterized SQL for Postgres or other ANSI SQL databases. It focuses on simply helping you build the SQL by managing the parameterization process, but you can still use the full power of SQL to create optimized queries and even special features that a particular SQL engine provides.</p>
<p>One of its killer features is the ability to create custom filter queries based on whether parameters are defined, so you can create one complex query which is relaxed based on the parameters defined at runtime.</p>
<p>Check out SQLBits, and let me know what you think. You can leave a comment in the discussion secion of this episode. I find it to be a great tool to help me generate SQL for Postgres and hope you will too.</p>

      ]]></content:encoded>
    </item>
  
    <item>
      <title>002 First look at Hapijs 2.0, the Node.js web framework from Walmart Labs</title>
      <link>http://codewinds.com/podcast/002.html</link>
      <guid>http://codewinds.com/podcast/002.html</guid>
      <pubDate>Sat, 01 Feb 2014 13:00:00 -0600</pubDate>
      <description>A personal review of Hapi 2.0, the next major version of the fantastic Node.js web framework created by Walmart Labs</description>
      <enclosure url="http://codewinds.com/media/podcast/codewinds-002.mp3" length="12731354" type="audio/mpeg"/>
      <category>Podcasts</category>
      <author>itunes@codewinds.com (Jeff Barczewski)</author>
      <itunes:author>Jeff Barczewski</itunes:author>
      <itunes:explicit>No</itunes:explicit>
      <itunes:subtitle>A personal review of features and changes to Hapi for version 2.0</itunes:subtitle>
      <itunes:summary>A personal review of Hapi 2.0, the next major version of the fantastic Node.js web framework created by Walmart Labs</itunes:summary>
      <itunes:duration>21:46</itunes:duration>
      <itunes:keywords>nodejs, hapijs, web framework</itunes:keywords>
      <itunes:image href="http://codewinds.com/assets/codewinds/codewinds-podcast-300.png"/>
      <content:encoded><![CDATA[
        <p>This is a review of the <a href="http://hapijs.com" title="Hapijs main site">Hapi</a> 2.0 functionality unveiled last Monday, Jan 27, 2014 at &amp;yet. The event was <a href="http://www.youtube.com/watch?v=B3u0XkbhleA&amp;t=1461" title="Eran Hammer Hapi 2.0 live stream from &amp;yet">live streamed</a> so I was able to watch and take notes. Eran Hammer <a href="https://twitter.com/eranhammer" title="Eran Hammer twitter">@eranhammer</a>, a Walmart labs engineer and lead developer for Hapi shared a top to bottom feature discussion including the new changes for version 2. <a href="https://dl.dropboxusercontent.com/u/52139546/hapi%20yet%3F.pdf" title="Eran&apos;s slides for the Hapi 2.0 live stream">Eran’s Slides</a></p>
<p>My goal with this podcast is to mention some of the key changes with Hapi 2 and how you would leverage them in your code.</p>
<p><img src="https://raw.github.com/spumko/hapi/master/images/hapi.png" alt="hapi-png" title="Hapi"></p>
<p>This review and Eran’s presentation are done such that you do not need have a familiarity with Hapi to get value, new users should come away with some understanding of Hapi and how it can be useful for building robust web applications.</p>
<div id="toc"><ol><li><a href="#episode_info">Episode Info</a></li><li><a href="#episode_notes">Episode Notes</a><ol><li><a href="#background">Background</a></li><li><a href="#routes_caching_state">Routes, Caching, State</a></li><li><a href="#plugins">Plugins</a></li><li><a href="#authorization">Authorization</a></li><li><a href="#ops">Ops</a></li><li><a href="#postmile_example_app">Postmile example app</a></li></ol></li><li><a href="#major_breaking_changes">Major breaking changes</a></li><li><a href="#resources">Resources</a></li><li><a href="#summary">Summary</a></li></ol></div>

<a name="episode_info"></a><h2 id="episode-info">Episode Info</h2>
<ul>
<li>Episode: CW 002</li>
<li>Published: February 1st, 2014</li>
<li>Tags: nodejs, hapijs</li>
<li>Duration: 21:46</li>
</ul>
<a name="episode_notes"></a><h2 id="episode-notes">Episode Notes</h2>
<a name="background"></a><h3 id="background">Background</h3>
<ul>
<li>show notes <a href="http://codewinds.com/podcast/002.html">http://codewinds.com/podcast/002.html</a></li>
<li>I have a link to the original live stream, the content starts at about 24 minutes in, so the URL in the show notes jumps directly to that spot.</li>
<li>Hapi is the awesome open source web framework created by Walmart Labs.</li>
<li>The Hapi framework grew out of years of development first at Yahoo as Sled, later renamed Postmile, then at Walmart Labs.</li>
<li>Initially Eran tried to build on Express a popular web framework, but found issues with plugin order, undocumented dependencies, fragility with large team use.</li>
<li>Hapi was developed by Walmart Labs for their mobile division</li>
<li>Hapi is built as a scalable web framework that they could use to evolve their system over time.</li>
<li>Initiallly used to reverse proxy or pass through requests to their existing backend written in java or other languages.</li>
<li>Then decorate, batch, and begin to replace legacy code with new code in Node.js</li>
<li>It ran 100% of their mobile traffic starting with Black Friday and proved its stability running at about 1-2% cpu on 50 servers throughout the highest load. Lasagna graphs flatlines for cpu and memory use</li>
<li>Walmart starting to replace more of its legacy code with Hapi and even now part of walmart.com</li>
<li>Hapi has great REST API support as well as infrastructure for building web apps or even serving static content</li>
<li>Just configure the routes and you are ready, no extra plugins are necessary for the most common functionality</li>
<li>Liked that Eran provides some quick commentary about features and how they evolved</li>
<li>Hapi 2.0 isn’t a massive increase in new functionality, in fact it is more about taking out the cruft, eliminating the redundant ways to do things. Names that evolved over time, picking the best and cleaning up the others.</li>
<li>This strategy shows the wisdom and experience of its architect, to resi the urge to add features by first solidifying the base.</li>
</ul>
<a name="routes_caching_state"></a><h3 id="routes-caching-state">Routes, Caching, State</h3>
<ul>
<li>Route <code>handler(request, reply)</code> signature changed</li>
<li><code>server.route({})</code>, can keep routes in one place while config and handler in separate module. validation is configurable, state (cookies)</li>
<li><code>server.table()</code> gives you the active routing table</li>
<li>Hapi is a configuration centric framework, set js properties, then it tries to stay out of your way.</li>
<li>Hapi is written so the meat of your web application can stay pure, you don’t have to deal with the HTTP mechanisms unless you need to for a special case. This leads to clean code which is more focused on your business logic and less on how to deliver via HTTP.</li>
<li>Helpers can abstract out functionality used in many places like looking up a user profile or users shopping cart</li>
<li>Caching is changed in 2.0, dropping support for full page caching. You can still configure the client cache headers and expiry but the team removed the page cache since they didn’t want to have a half baked solution, one that didn’t handle all the variety of use cases.</li>
<li>They still have great support for helper caching which is more straight forward.</li>
<li>Eran said they will possibly add page caching back in later or I’d expect there to be a basic plugin which provides a basic page cache solving the simple use cases.</li>
<li>Route prerequesites clean up async handling, can specify arrays for parallel followed by single tasks which are processed serially and any combintion.</li>
<li><code>handler.bind</code> can be used to share state using object methods</li>
<li><code>reply().hold()</code>, later calling <code>send()</code> when ready</li>
<li>Cookie ttl configuration can now be done in a central location cleaninpu up the route config</li>
<li>Exentensive cookie functionality - automatically encoding in base64 json or even using encryption, hashing, and expiration with Eran’s Iron container</li>
</ul>
<a name="plugins"></a><h3 id="plugins">Plugins</h3>
<ul>
<li>Plugins are a cornerstone of Hapi. These differ from something like Express in that plugins are just groupings of server functionality that can be mixed together into servers. You can organize a feature’s functionality, its routes, its configuration, and dependencies. This lives like a normal node.js package and only needs a register method to use with Hapi. These can be developed, versioned separately, mixed in to the server.</li>
<li>Hapi ensures that once they are all registered that the routes are all valid and nothing conflicts, its a large team’s dream. Easy to test new veerions.</li>
<li>Plugins can do everything you can do with the server, add routes, helpers, etc.</li>
<li><code>plugin.composer</code> or command line option to hapi allows you to build a server with simply a package.json and a config.json specifying plugins to use.</li>
<li>If you couple plugins along with Hapi’s Confidence module you can have one setup which can provide server config for all your various environments.</li>
<li>The Confidence module provides dynamic configs which can be used for server environments or even runtime use for A/B testing</li>
<li>Plugin cache is now scoped so its data won’t collide with other plugins</li>
</ul>
<a name="authorization"></a><h3 id="authorization">Authorization</h3>
<ul>
<li>Authorization is now properly extracted into schemes and strategies, basic auth, hawk, etc. It is much easier to setup authentication and you have options to make authentication required and optional.</li>
<li>Hapi has defined life cycle extension points at which you can register to have your code called during request life cycle. For instance you could hook in at the beginning of the request, before auth, after auth, before response, etc.</li>
<li>These extensions can specify dependencies and whether they need to go before or after others.</li>
<li>One change to how the signature for these extensions is that they now have two params (request and reply) just like handlers. You can call the reply(null) to continue response unchanged. Website docs don’t reflect this yet, so look at the code or tests.</li>
<li>You can now do additional things for streamed responses in your extensions like set headers as well as peek into the packets being sent back</li>
</ul>
<a name="ops"></a><h3 id="ops">Ops</h3>
<ul>
<li>New ops functionality<ul>
<li>Can have server load and memory use logged for easy server health montioring</li>
<li>Configure max input size, timeouts for client and server</li>
<li>You can register tail methods which run after a response has been sent</li>
<li><code>server.inject</code> allows you to use the hapi stack without going through the network stack, great for testing and even for production use if you need to call back in like with OAuth 2.0</li>
<li>There is now a simulate property for simulating connection close issues</li>
</ul>
</li>
</ul>
<a name="postmile_example_app"></a><h3 id="postmile-example-app">Postmile example app</h3>
<ul>
<li>github.com/hueniverse/postmile - large sample app which has been upgraded to Hapi 2.0. It is a collaborative list making tool using hapi 2.0 and Mongo.</li>
</ul>
<a name="major_breaking_changes"></a><h2 id="major-breaking-changes">Major breaking changes</h2>
<ul>
<li><code>handler(request, reply)</code>, extensions have similar signature</li>
<li>methods that had many aliases are now simplified like server.route</li>
<li>page caching removed for now</li>
<li>route prerequisites now use arrays to designate parallel tasks, and you can mix serial and parallel</li>
<li>read up on the new auth configuration and mechanisms</li>
<li><a href="https://github.com/spumko/hapi/issues/1178">https://github.com/spumko/hapi/issues/1178</a> - github issue with all the Hapi 2.0 breaking changes</li>
</ul>
<a name="resources"></a><h2 id="resources">Resources</h2>
<ul>
<li><a href="http://hapijs.com">http://hapijs.com</a> - main site, docs being added for 2.0</li>
<li><a href="https://github.com/spumko/hapi">https://github.com/spumko/hapi</a> - git repo for Hapi</li>
<li><a href="https://github.com/spumko/hapi/issues/1178">https://github.com/spumko/hapi/issues/1178</a> - github issue with all the Hapi 2.0 breaking changes</li>
<li><a href="https://github.com/spumko">https://github.com/spumko</a> - extracted Hapi functionality for use with Hapi or separately</li>
<li><a href="https://dl.dropboxusercontent.com/u/52139546/hapi%20yet%3F.pdf">https://dl.dropboxusercontent.com/u/52139546/hapi%20yet%3F.pdf</a> - hapi-yet-slides with lots of code examples which Eran Hammer used for his live stream</li>
<li><a href="http://www.youtube.com/watch?v=B3u0XkbhleA&amp;t=1461">http://www.youtube.com/watch?v=B3u0XkbhleA&amp;t=1461</a> Eran Hammer Hapi Yet (Hapi 2.0) live stream at &amp;yet, link jumps directly to 24 min where talk starts</li>
<li><a href="https://github.com/hueniverse/postmile">https://github.com/hueniverse/postmile</a> Eran Hammer’s sizeable hapi example using many of the Hapi features. Postmile is a collaborative list making tool using hapi 2.0 and mongo.</li>
<li><a href="https://github.com/poeticninja/hapi-ninja">https://github.com/poeticninja/hapi-ninja</a> - Saul Maddox’s <a href="https://twitter.com/poeticninja" title="Saul Maddox twitter">@poeticninja</a> boilerplate Hapi server example Node.js, Hapi 2.0, Swig templates, Gulp task runner</li>
<li>Follow <a href="http://codewinds.com/">http://codewinds.com/</a> blog and podcast for continuing coverage</li>
</ul>
<a name="summary"></a><h2 id="summary">Summary</h2>
<p>So in summary, Hapi 2.0 is a well thought out release which cleans up and solidifies the codebase while adding some key functionality that can be built on.</p>
<p> With Walmart putting this framework through the paces and other companies following in its footsteps like the company I am consulting to MasterCard, this framework has evolved with clarity, performance, team usability, and has great deploy and ops support.</p>
<p>Furthermore, Eran and his team have proved that Hapi can handle Black Friday load with ultimate grace, and this new version solidifies its position among Node web frameworks.</p>
<p>So I encourage you to check out Hapi, and let me know what you think. Head over to codewinds.com and leave me a comment or send me a tweet.</p>

      ]]></content:encoded>
    </item>
  
    <item>
      <title>001 Daniel Shaw interview discussing The Node Firm's public Node.js training courses</title>
      <link>http://codewinds.com/podcast/001.html</link>
      <guid>http://codewinds.com/podcast/001.html</guid>
      <pubDate>Tue, 17 Sep 2013 18:00:00 -0500</pubDate>
      <description>An interview with Daniel Shaw, CEO, The Node Firm regarding the upcoming public Node.js training courses at Joyent</description>
      <enclosure url="http://codewinds.com/media/podcast/codewinds-001.mp3" length="23216598" type="audio/mpeg"/>
      <category>Podcasts</category>
      <author>itunes@codewinds.com (Jeff Barczewski)</author>
      <itunes:author>Jeff Barczewski</itunes:author>
      <itunes:explicit>No</itunes:explicit>
      <itunes:subtitle>The Node Firm launches public Node.js training</itunes:subtitle>
      <itunes:summary>An interview with Daniel Shaw, CEO, The Node Firm regarding the upcoming public Node.js training courses at Joyent</itunes:summary>
      <itunes:duration>23:59</itunes:duration>
      <itunes:keywords>nodejs, training</itunes:keywords>
      <itunes:image href="http://codewinds.com/assets/codewinds/codewinds-podcast-300.png"/>
      <content:encoded><![CDATA[
        <p>I had the pleasure of interviewing Daniel Shaw (<a href="http://twitter.com/dshaw" title="Daniel Shaw twitter">@dshaw</a>), managing partner and CEO of <a href="http://thenodefirm.com/" title="The Node Firm website">The Node Firm</a> to discuss their upcoming public Node.js training courses at <a href="http://www.joyent.com/" title="Joyent website">Joyent</a> and beyond.</p>
<p><img src="http://dshaw.com/images/dshaw-about.jpg" alt="Daniel Shaw" title="Daniel Shaw"></p>
<h2 id="episode-info">Episode Info</h2>
<ul>
<li>Episode: CW 001</li>
<li>Published: September 17th, 2013</li>
<li>Tags: nodejs</li>
<li>Duration: 23:59</li>
</ul>
<h2 id="episode-notes">Episode Notes</h2>
<p>The Node Firm has been doing corporate training since 2011, but now is offering some public courses starting in October 2013.</p>
<p>The Node Firm public training courses at Joyent in San Francisco, CA:</p>
<ul>
<li>Oct 8-10, 2013 (Tue-Thur) - <a href="http://thenodefirm.com/training/core-foundations" title="The Node Firm - Foundations course">Node.js Core Foundations</a> $3,225</li>
<li>Oct 22-24, 2013 (Tue-Thur) - <a href="http://thenodefirm.com/training/advanced-nodejs-development" title="The Node Firm - Advanced Node.js Development">Advanced Node.js Development</a> $3,225 (early registration price $2,985 until Sep 24)</li>
<li>More coming to cities near you</li>
</ul>
<p>Discussed in the 24 minute interview:</p>
<ul>
<li>Background on The Node Firm</li>
<li>Description of the two courses<ul>
<li>Topics covered</li>
<li>Intended audience</li>
<li>Prerequisites</li>
<li>Instructors, maximum class size</li>
<li>Course style</li>
</ul>
</li>
</ul>
<h2 id="more-information">More information</h2>
<ul>
<li><a href="http://thenodefirm.com/training">http://thenodefirm.com/training</a> - direct link to The Node Firm’s training information</li>
<li><a href="http://thenodefirm.com/contact" title="The Node Firm contact form">Contact The Node Firm</a> for additional questions</li>
</ul>

      ]]></content:encoded>
    </item>
  

</channel>
</rss>
