<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[Jeff Carouth]]></title>
  <link href="http://carouth.com/atom.xml" rel="self"/>
  <link href="http://carouth.com/"/>
  <updated>2013-01-05T12:44:04-06:00</updated>
  <id>http://carouth.com/</id>
  <author>
    <name><![CDATA[Jeff Carouth]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[JavaScript Essential Reading List]]></title>
    <link href="http://carouth.com/blog/2012/11/02/javascript-essential-reading-list/"/>
    <updated>2012-11-02T16:03:00-05:00</updated>
    <id>http://carouth.com/blog/2012/11/02/javascript-essential-reading-list</id>
    <content type="html"><![CDATA[<p>After I presented &#8220;JavaScripting for the PHP Developer in 2012&#8221; I had several conversations with people about my journey from ignorant about JavaScript to JavaScript enthusiast. In every one of those conversations I recommended a couple sources of information that helped me understand the language. Later on I was asked about some book recommendations.</p>

<p>I usually purchase technical books in paper form. It might seem silly being a geek and all, but paper copies provide one thing electronic copies have not yet caught up on: lendability. In my so-called circle I lend books I recommend to people. That gives them a shot to look through the book and figure out if my recommendation is warrented and then (hopefully) purchase their own copy and return mine. It doesn&#8217;t always work out that way, but that&#8217;s the idea.</p>

<p>If I thought it a good idea, I would let you borrow these books in order. But I only have one copy of each and I think you can probably find a copy at a library, in a friend&#8217;s collection, or for a reasonable price on Amazon.com, so I&#8217;ll just stick with a list.</p>

<h2>Essentials</h2>

<p>The progression of books I tend to recommend to people wanting to appreciate JavaScript is as follows.</p>

<h3>JavaScript: The Good Parts by Douglas Crockford</h3>

<p>This book covers the basics. You&#8217;ve probably seen the classic Good Parts vs Definitive guide photo but that is only part of the story. The Good Parts covers the basics of syntax, objects, regexes, methods, inheritance, and a little style all in one tiny package. Reading this book will not make you proficient in JavaScript, but it should lead you to the questions you need to ask about the language. The idea is to get you thinking about these subjects and allow you to discover the areas you need more explanation. That is why I suggest this as a first text.</p>

<p>One word of caution or a caveat&#8211;Douglas Crockford has many opinions about the langauage and style in particular. While they are usually rooted in logical analysis of his experiences with JavaScript, they aren&#8217;t always shared by every JavaScript developer. Don&#8217;t get caught up in Crockfordian Vs. Everyone-else-ian JavaScript at this point. There will be plenty of time to argue and bicker later. Digest what is being offered and find the areas you need further explanation.</p>

<p><a href="http://www.amazon.com/dp/0596517742/">View JavaScript: The Good Parts on Amazon.com</a></p>

<h3>JavaScript Patterns by Stoyan Stefanov</h3>

<p>Patterns are important in any language, and we aren&#8217;t just talking about design patterns here. I&#8217;m talking about development patterns and practices to create modular, extensible, reusable, and all the other important *-ables. In this book you will find extensive explanation of useful habits and patterns for writing JavaScript that is a pleasure to maintain. This is the goal of any developer, or at least it should be. The book will get you started on writing such code in JS.</p>

<p>As a companion resource, there is an excellent collection of pattern explanations and examples by <a href="http://twitter.com/addyosmani">Addy Osmani</a> called <a href="http://addyosmani.com/resources/essentialjsdesignpatterns/book/">Learning JavaScript Design Patterns</a>. Bookmark this ebook and reference it as you use the patterns. It is helpful even after you grasp the concepts well.</p>

<p><a href="http://www.amazon.com/dp/B0046RERXE/">View JavaScript Patterns on Amazon.com</a></p>

<h3>Eloquent JavaScript: A Modern Introduction to Programming by Marijn Haverbeke</h3>

<p>This book, in many ways, is a rehash of the first two books. So why would I recommend you read it? To learn the subject from a different perspective, that&#8217;s why. Having different voices and different backgrounds is essential to having a well-rounded knowledgebase on any subject. I recommend this book as your third text so that the insight you picked up in the first two is hopefully fresh and you will be able to whizz through this book picking up the subject in a slightly different light.</p>

<p><a href="http://www.amazon.com/dp/B004OEJNQ0/">View Eloquent JavaScript on Amazon.com</a></p>

<h3>High Performance JavaScript by Nicholas Zakas</h3>

<p>When do you worry about optimization? While you&#8217;re first learning how to solve a problem? No. So I recommend a book about performance and optimization after you&#8217;ve grasped the basics and patterns of writing JavaScript code. This book has great examples and tips. One word of caution, if you are familiar with concatenation, minification, and such practices you might find some of the book to be a bit basic. However I still suggest you read through it as it does offer some insight you might not otherwise pick up on.</p>

<p><a href="http://www.amazon.com/dp/B0043D2F62/">View High Performance on Amazon.com</a></p>

<h2>Fin</h2>

<p>I recommend these books in this order because they helped me learn about the language. There are many other options and many books and resources which follow these, but if you are looking for books to get you prepared to be enthusiastic about JavaScript, these should do the trick.</p>

<p>Assess your knowledge level and pick up the list where you think you should. However, for the most well-rounded view of the language I think everyone should read all of these books at least once.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[JavaScript at a PHP Conference. What?]]></title>
    <link href="http://carouth.com/blog/2012/10/30/javascript-at-a-php-conference-what/"/>
    <updated>2012-10-30T08:31:00-05:00</updated>
    <id>http://carouth.com/blog/2012/10/30/javascript-at-a-php-conference-what</id>
    <content type="html"><![CDATA[<p>Last week at <a href="http://zendcon.com">ZendCon 2012</a> I presented a session titled &#8220;JavaScript for the PHP Developer in 2012.&#8221; Interestingly this was not a talk I originally intended to submit, but I thought it might be a fun topic for the conference.</p>

<p>You might be thinking, but ZendCon is a PHP conference, what is the relevance of a JavaScript talk there? Simply put the idea of a purely PHP developer&#8211;when talking about the web&#8211;is rare these days. Hybrid and generalist programming, or polyglots if you want to be a hipster, is the type of developer you want to be. Don&#8217;t just trust me, trust many other developers much smarter than me. (Seriously, Google it.)</p>

<p>So, I sent in this proposal and it was selected. I was then tasked with figuring out a coherent progression from PHP mindset to a modern-day JavaScript developer. This was no easy task, and I still don&#8217;t think I got it 100% correct.</p>

<h2>The Talk</h2>

<p>I gave this talk on Wednesday morning at 11:00AM. Imagine my surprise when the room was mostly full by 10:45. By 10:50 there were no seats left. One of the ZendCon staff kindly retrieved more chairs to give the people congregating in the back of the room a place to sit. Those chairs filled and yet still more people showed up. It would be easy for me to take this as an ego boost, but I recognize the people weren&#8217;t there to hear me, they were there to hear about JavaScript.</p>

<p>The session (slides below) started out with the basics of JavaScript including arrays and objects with emphasis on the translation of concepts from PHP. I spent a considerable amount of time on the idea of &#8220;almost everything in JS is an object&#8221; and on the Constructor Function pattern because it is important for OOP-minded PHP developers to understand how to construct similar &#8220;objects&#8221; in JS.</p>

<p>I then moved on to organizational patterns including how to namespace code and the famous&#8211;or infamous, as it were&#8211;JavaScript Module Pattern. After the talk I received several comments from attendees about the module pattern and how it will help them organize code better. That was the point, so I&#8217;m glad it came across in tact.</p>

<p>Then came the porition I wasn&#8217;t sure on, but knew I should include: tools for development. I picked several tools and frameworks that I have personally used to highlight the transition from similar tools in the PHP ecosystem. These are <a href="http://requirejs.org">require.js</a>, <a href="http://backbonejs.org">Backbone.js</a>, <a href="http://qunitjs.com">QUnit</a>, and <a href="http://gruntjs.com/">GRUNT</a>. These translate to autoloading, MVC-ish frameworks/libraries, unit testing, and build tools in PHP.</p>

<h2>The Slides</h2>

<script async class="speakerdeck-embed" data-id="5087862bdb554a000202d458" data-ratio="1.3333333333333333" src="http://carouth.com//speakerdeck.com/assets/embed.js"></script>


<h2>The Reaction</h2>

<p>After this talk, several people approached me over the next day and a half to discuss the ideas I presented further. There is literally nothing that could have been more flattering than to have inspired conversation and questions in attendees. Don&#8217;t get me wrong, five stars on joind.in is great, but knowing a session I gave led someone to improve his or her development skills is much better.</p>

<p>I did not get the amount of feedback I hoped for on joind.in. ZendCon has paper evaluation forms and doesn&#8217;t push joind.in ratings as a conference, so it&#8217;s up to the speakers to encourage&#8211;or beg&#8211;attendees to take a few moments to comment electronically. I clearly need to work on my pitch.</p>

<p>However, <a href="http://joind.in/7022">the comments I did receive</a> are overwhelmingly positive, but shed some light on one critical shortfall of this particular presentation: the breadth of the information. Since I took attendees from basics to tools, there is quite a bit to digest. Part of this is intentional, as the subject of JavaScript for PHP developers is quite vast, but if I give this talk again I&#8217;ll likely try to split on JavaScript (the langauge) for PHP developers, and translating PHP development practices to JavaScript. This will make it easier for attendees to digest the material, I think.</p>

<h2>Going Forward</h2>

<p>If you were able to attend and haven&#8217;t had the opportunity to rate and comment on joind.in, please take a few moments to do so now. I will greatly appreciate any comments you have to offer.</p>

<p>If you were not able to attend, hopefully the slides are content-rich enough to provide some value to you and this post of my thoughts leads you to some JavaScript enlightenment.</p>

<p>I&#8217;m going to follow this up at some point with a post on books to read, but to get the gist of the material I suggest checking out <a href="http://www.amazon.com/JavaScript-Patterns-Stoyan-Stefanov/dp/0596806752">JavaScript Patterns by Stoyan Stefanov</a> and <a href="http://www.amazon.com/Eloquent-JavaScript-Modern-Introduction-Programming/dp/1593272820/">Eloquent JavaScript by Marijn Haverbeke</a>. These two books are essential reading for anyone looking to understand patterns in JavaScript. Additionally there is an e-book, <a href="http://addyosmani.com/resources/essentialjsdesignpatterns/book/">Learning JavaScript Design Patterns by Addy Osmani</a> which is a great resource to have bookmarked as you explore development practices in JS.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[ZendCon 2012 Wrap Up]]></title>
    <link href="http://carouth.com/blog/2012/10/28/zendcon-2012-wrap-up/"/>
    <updated>2012-10-28T10:38:00-05:00</updated>
    <id>http://carouth.com/blog/2012/10/28/zendcon-2012-wrap-up</id>
    <content type="html"><![CDATA[<p>After all the travel, check ins, check outs, schedule decisions, meals, receptions, tutorials, and presentations are over there&#8217;s still a lingering feeling of being inspiration. If you manage to make it through a conference without finding at least something to fire you up and inspire you to create or learn, you are doing it wrong. I wanted to write a brief wrap-up to highlight some of the inspiration I&#8217;m bringing home. (You&#8217;ll notice I&#8217;m writing this a few days after the end of the event. I&#8217;m just not reaching the point where I&#8217;m not a zombie from exhaustion.)</p>

<h2>Modules and Components</h2>

<p>Zend Framework 2 was clearly&#8211;and rightfully&#8211;a theme found in many of the sessions at ZendCon this year. One of the coolest parts, in my opinion, the team has been working on is providing infrastructure and patterns for creating real modules to be consumed by ZF2 applications. <a href="https://twitter.com/evandotpro">Evan Coury</a> said it best in one of his sessions by mentioning that he worked on modules for ZF2 because ZF1 &#8220;supported&#8221; modules in theory but in practice the implementation was not widely used and had some signficiant design flaws. Take a look at the <a href="http://blog.evan.pro/introduction-to-modules-in-zend-framework-2-talk-at-zendcon-2012">slides and video</a> from his session, &#8220;Introduction to Modules in Zend Framework 2.0.&#8221;</p>

<p>The other major take away from the ZF2 and related talks is the idea of components. If you&#8217;re like me, you remember ZF1 being billed as an at-will framework, meaning you can use any of the framework components, e.g., Zend_Db, the MVC implementeation, etc., at will without having to use the rest of the stack. This is a powerful concept and is something the team has made even easier in version 2.0. The power of this concept became abundantly clear with sessions such as the joint presentation given by <a href="https://twitter.com/skoop">Stefan Koopmanschap</a> and <a href="https://twitter.com/ezimuel">Enrico Zimuel</a> titled <a href="https://speakerdeck.com/skoop/zend-framework-2-and-symfony2-the-perfect-team-zendcon">&#8220;Zend Framework 2 and Symfony2: The Perfect Team&#8221;</a> and <a href="https://twitter.com/Weaverryan">Ryan Weaver&#8217;s</a> presentation <a href="https://speakerdeck.com/weaverryan/the-wonderful-world-of-composer-and-zf2">&#8220;Easily Integrate Zend Framework 2 and Other Libraries Using Composer.&#8221;</a></p>

<p>Take a look at the components ZF2 and Symfony2 offer. I have a feeling you might be able to use at least one in your project today. If this isn&#8217;t inspiration to get out and experiment I don&#8217;t know what is.</p>

<h2>Testing and Profiling as a Practice</h2>

<p>(<em>Full disclosure: one of my sessions was on testing, specifically mocks and fixtures within unit and integration tests. It&#8217;s a subject I am passionate about.</em>)</p>

<p>It is encouraging to see emphasis on development practices such as testing and profiling at a conference such as ZendCon. While it occasionally seems like a repetative subject, if the focus is on better techniques for each as opposed to reasons why I think these sessions are still valuable.</p>

<p>In addition to my session on using mocking frameworks and fixtures in tests, the creator of PHPUnit, <a href="https://twitter.com/s_bergmann">Sebastian Bergmann</a>, presented a session on <a href="http://thephp.cc/dates/2012/zendcon/phpunit-best-practices">&#8220;PHPUnit Best Practices&#8221;</a> as well as a session on <a href="http://thephp.cc/dates/2012/zendcon/living-with-legacy">&#8220;Living With Legacy.&#8221;</a> Both of these sessions provide insight into writing better tests as well as the common situation of writing tests for legacy PHP applications.</p>

<p>If you do not know how your code performs, and even if you have an idea, profiling is an invaluable tool in tweaking code for better experience as well as finding bugs that you might not otherwise be able to gain insight into. The author and maintainer of <a href="http://xdebug.org/">XDebug</a>, <a href="https://twitter.com/derickr">Derick Rethans</a>, presented <a href="http://derickrethans.nl/talks/profiling-zendcon12">&#8220;Profiling PHP Applications&#8221;</a> which covers this exact topic using the XDebug library. His realistic examples make the concept much easier to digest than simple documentation ever can.</p>

<p><a href="https://twitter.com/iliaa">Ilia Alshanetsky</a> presented <a href="http://ilia.ws/files/zendcon2012_bottlenecks.pdf">&#8220;Bottleneck Analyis&#8221;</a> which took attendees through possible application bottlenecks from the outside in. It is important as web application developers to remember that the code is only one portion of the delivery from the server to the client and having the tools to examine each of these layers is critical to creating a responsive or performant application.</p>

<h2>The Hallway Track</h2>

<p>The hallway track is one of the most important benefits of attending a conference. Personally speaking, I had many great conversations outside of the presentation rooms. At one point I had a 30-minute discussion with an attendee about the idea of transferring applications from mainframe to web and the requisite paradigm shifts and approaches to improving the interface with code.</p>

<p>I also spent considerable time talking with several people about deployment and systems architecture approaches. While this isn&#8217;t a direct responsibility of mine, I have spent a considerable amount of time in this arena&#8211;yes like a circus if I&#8217;m doing it&#8211;and having more experienced people to bounce ideas off of and learn from their approaches is invaluable. I already have several areas I want to improve based solely on a 15-minute conversation next to an escalator. You can&#8217;t put a price on that.</p>

<h2>The Uncon</h2>

<p>As usual the ZendCon UnCon was top notch. <a href="https://twitter.com/DragonBe">Michelangelo van Dam</a> did another impressive job organizing and running the uncon, as well as contributing. I attended his UnCon session on the benefits of community titled <a href="https://speakerdeck.com/dragonbe/community-works-zendcon-2012">&#8220;Community Works!&#8221;</a> I mentioned this in my comments on joind.in, but if you did not get a chance to hear this session&#8211;and I know you did not since I was the only one in the audience&#8211;you missed out greatly. Even if you are already engaged in the community it was inspirational to say the least.</p>

<p>There was a much tweeted and successful uncon session by <a href="https://twitter.com/lornajane">Lorna Jane Mitchell</a> titled <a href="https://speakerdeck.com/lornajane/git-githu">&#8220;Git + Github: everything you need to know!&#8221;</a> I did not attend this session, but from the buzz on Twitter and in the hallways I would say it has inspired and opened doors for many attendees.</p>

<h1>Fin</h1>

<p>I am a much better developer for having attended ZendCon 2012. I was proud to be a part of the conversation with my two sessions (which I&#8217;ll write about in another post) and as an attendee. If you were unable to attend this year I hope these insights provide some value and I urge you to start planning for next year. I dont expect ZendCon 2013 to be anything less than purely awesome.</p>

<p>To the Zend team, the ZF2 team, the team at S&amp;S Media, the exhibitors, the sponsors, the speakers, and most importantly the attendees, I thank you all for the memories. I hope to catch up with you soon.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[HTML5.tx 2013 CfP is Open]]></title>
    <link href="http://carouth.com/blog/2012/09/27/html5-dot-tx-2013-cfp-is-open/"/>
    <updated>2012-09-27T09:21:00-05:00</updated>
    <id>http://carouth.com/blog/2012/09/27/html5-dot-tx-2013-cfp-is-open</id>
    <content type="html"><![CDATA[<p>Last year I was one of the volunteers that helped organize HTML5.tx 2011 in Austin, Texas. The event was very successful and I couldn&#8217;t have been more proud to have played a part in it.</p>

<p>We are putting on the next edition of the conference&#8211;it will take place on February 2, 2013&#8211;and I am pleased to announce the Call for Proposals is now open for your submissions. This year we have several speakers that are already committed to speak at the event and we have saved slots for you to speak. We want to hear from the community so this is your chance.</p>

<p>Submissions will be accepted starting today and running through October 28, 2012 at 11:59:59 p.m. Submit as many proposals as you&#8217;d like. We have reserved slots for full sessions (50 minutes in length) and are introducing a new format this year composed of three 10-minute talks back to back. This is a play on &#8220;lightning talks&#8221; and is aimed to give new presenters an opportunity to give a less stressful session on a more focused topic. However, if you&#8217;re an experienced speaker with a great idea for a 10-minute talk, please submit one.</p>

<p>Along the lines of wanting to encourage new presenters, this year we want to offer a sort-of mentorship opportunity. Members of the HTML5.tx organizer team have volunteered to help mentor any speaker that might wish to speak at the event but needs a little help developing his or her topic or slides. We will be available for questions or to review anything you might need help with. Please don&#8217;t let fear keep you from submitting a proposal.</p>

<p>I can&#8217;t wait to see what you want to talk about. Submit today at <a href="http://bit.ly/cfp-2013">http://bit.ly/cfp-2013</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Testing Strategies for Legacy PHP Applications at ThatConference]]></title>
    <link href="http://carouth.com/blog/2012/08/19/testing-strategies-for-legacy-php-applications-at-thatconference/"/>
    <updated>2012-08-19T22:14:00-05:00</updated>
    <id>http://carouth.com/blog/2012/08/19/testing-strategies-for-legacy-php-applications-at-thatconference</id>
    <content type="html"><![CDATA[<p>Last week I was lucky to be able to attend and speak at <a href="http://www.thatconference.com">ThatConference</a>. The conference itself did not feel like a first ever production despite being the first time the organizers put it on. Overall I had an absolute blast learning from and interacting with the attendees, speakers, and organizers, and was honored to present a session on how to approach testing legacy applications.</p>

<p>Before I get into my thoughts on the presentation, I wanted to make a quick comment on the makeup of the conference itself. This was my first time speaking at a conference that wasn&#8217;t focused on the technology stack I use on a daily basis. Basically, ThatConference was not a PHP, JavaScript, or web technology conference, it was a summer camp for people that hack on things or just have good advice for geeks. I would say that the majority of my interactions were with developers in the .NET space&#8211;and there were a few people that gave me a condescending glance when they figured out I use PHP&#8211;but, for the most part, the judgement was low and we all found a benefit from our conversations.</p>

<p>My session, while specifically addressing tools for PHP, was geared toward how to approach a message codebase without sacrificing sanity of having and introducing tests. I had some good questions that I will incorporate into this presentation if I ever give it again, and a few conversations afterward that encouraged me that the PHP community is starting to accept testing as a so-called first-class citizen.</p>

<p>My presentation is available on SpeakerDeck. If you were there and have further questions, I look forward to hearing from you. If you&#8217;re reading the slides for the first time and have questions, I&#8217;ll be glad to answer anything I can.</p>

<script async class="speakerdeck-embed" data-id="502bab92c8139c000202f67c" data-ratio="1.7123745819397993" src="http://carouth.com//speakerdeck.com/assets/embed.js"></script>


<p>I had a blast at ThatConference 2012 and look forward to heading back to the MidWest next year for ThatConference 2013. If you are a fan of bacon, you might want to check it out. There was a bacon bar. No, really.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Micro Framework and JavaScript Applications]]></title>
    <link href="http://carouth.com/blog/2012/07/01/micro-framework-and-javascript-applications/"/>
    <updated>2012-07-01T21:11:00-05:00</updated>
    <id>http://carouth.com/blog/2012/07/01/micro-framework-and-javascript-applications</id>
    <content type="html"><![CDATA[<p>As I mentioned, I was accepted as a speaker at LoneStarPHP 2012 to give a session on MicroPHP Framework and JavaScript Applications. The session went reasonably well and I received some decent feedback both at the conference and on <a href="http://joind.in/6351">joind.in</a>. I will address a couple issues with the talk to, hopefully, inspire you as I intended with this talk. The abstract describing the talk follows.</p>

<blockquote><p>Small footprint libraries and so-called micro frameworks are a newer development in the PHP community. In this session we&#8217;ll look at the MicroPHP Manifesto and go over building an application focused on the ideas presented by it. We&#8217;ll look at a couple micro frameworks and other tools including Slim and Breeze as well as concerns with implementing your frontend with Backbone.js and other techniques. We&#8217;ll also cover simple ways to organize your application and manage dependencies using Composer.</p></blockquote>


<p>And the slides are available on <a href="https://speakerdeck.com/u/jcarouth/p/micro-framework-and-javascript-applications">speakerdeck.com</a>.</p>

<script async class="speakerdeck-embed" data-id="4fee96a426808700220005c8" data-ratio="1.3333333333333333" src="http://carouth.com//speakerdeck.com/assets/embed.js"></script>


<h2>Things that need fixing</h2>

<p>The first thing to address is with the abstract itself. Looking at <strong>two</strong> micro frameworks in the code and demo portion of the talk was well simply too much content to present in a single 50-minute session. <em>That is 100% my mistake</em>.</p>

<p>Other aspects that were difficult to address within the time limits are fully addressing Composer and code organization. I was able to push code organization tips into the sample code I provide on Github. My original intent was to introduce Composer as a tool to help expose and make it easier to use MicroPHP libraries and frameworks, but I can see that the abstract, as written, makes it seem like I will provide more in-depth information about Composer.</p>

<p>The slides themselves are a resource. They contain highlighted code that can be used to find the important bits in the <a href="http://www.github.com/jcarouth/pomtrac">example code</a> found on Github.</p>

<p>This brings me to the areas of the talk I need to address should I ever give this session again.</p>

<h3>This talk is supposed to inspire people to explore MicroPHP libraries and frameworks.</h3>

<p>A 50-minute session is supposed to be used to inspire the attendees to take a pointer from the talk and go out and research and experiment with the concept. It simply is not feasible to truly teach someone even the basics of a topic in just 50-minutes. The very first comment I recieved via joind.in told me I did not convey the message I wished to through this session. The author said, &#8220;I am not sure I understood why one would use a micro framework for the PHP side, but a full framework for the JavaScript side.&#8221; Ignoring that Backbone.js is most assuredly <em>not</em> a &#8220;full framework&#8221; by any stretch of the imagination, he has a point. It&#8217;s not that I should not present the concept of using microphp frameworks to expose APIs for a JavaScript frontend to consume, it&#8217;s that I failed to make it clear that I was not advocating you pick up a single micro framework and solely use it for your entire backend. That is <strong>completely</strong> not the message I intended to convey.</p>

<p>To clear it up, my point was to use Slim as a way to expose a RESTful API using <em>existing</em> components of an application to handle business logic, etc. The example I use feels too much like a contrived example, and it shows through this comment. That must be cleaned up.</p>

<h3>Having both an introduction to the manifesto and a practical application of a single framework is too much.</h3>

<p>Orginally I hoped the introductory material on where MicroPHP stands, and some commentary on the manifesto itself, would help steer the focus of the audience to treating Slim less like a replacement for Symfony2, Zend Framework, Kohana, etc., to looking at Slim as a small-footprint library that solves a signgle problem: HTTP request routing. Unfortunately, given the time constraint, I was able to spend enough time on neither the subject of why you would consider MicroPHP nor actually using micro components. That should be addressed by splitting this session into two talks. One more of a soft talk on the concepts. The other a technical introduction to using a collection of libraries.</p>

<h3>Clarity is critical on stage</h3>

<p>One other comment from joind.in makes it painfully obvious that something I said was not crystal clear. Here it is.</p>

<blockquote><p>Not very convincing that Slim or MicroPHP is ready for prime-time use, since you said you had to build extensions onto Slim in order to return JSON&#8230;</p></blockquote>


<p>The author of the comment is referencing a Middleware component for Slim I had to write to deal with content negotiation. This was a very specific implementation decision <em>I</em> made to be more of a REST snob. The author of Slim is working on a much better implementation of looking at the Accept request header to determine what type of payload the client expects to recieve. Since it is under development, I do not see the reason to spend much time on implementing a middleware component for slim that does the same thing. This was, again, a decision I made to support the Accept header instead of the ugly hack of appending &#8220;.json&#8221; to the URL.</p>

<p>If we are using a framework&#8217;s support of automatically returning JSON-encoded data based on the Accept request header to determine whether that framework should be used in a production setting, we are dooming any site or application written on top of the Zend Framework version 1.x, since this isn&#8217;t a feature in the core framework. Personally, I think that is a bit rash.</p>

<p>The result of not being clear is this person has a jaded view of MicroPHP libraries and frameworks. I have failed the community.</p>

<h1>Fin</h1>

<p>For the first time I presented this topic, which I know is one that is hard to stomach for many devs anyway, I think it was a success. It just needs a little tweaking. I hope my commentary here is useful.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Thank You! Please Rate Your Speakers.]]></title>
    <link href="http://carouth.com/blog/2012/06/24/thank-you-please-rate-your-speakers/"/>
    <updated>2012-06-24T22:24:00-05:00</updated>
    <id>http://carouth.com/blog/2012/06/24/thank-you-please-rate-your-speakers</id>
    <content type="html"><![CDATA[<p>At the end of most of my slide decks, you&#8217;ll find a slide that says thank you and asks you to rate my presentation. At first glance it may seem that I&#8217;m just a vain person and I want each person that sees my slides to go give me a thumbs up, five stars, you are the man on <a href="http://joind.in">joind.in</a>, but the truth is I really want to get better at presenting. Don&#8217;t get me wrong, five stars across the board is great&#8211;and something I strive for each time I connect my MacBook to a projector&#8211;but what I really crave is feedback. Tell me what I did right. Tell me what sucked. I legitimately want to know.</p>

<p>I know I&#8217;m not alone in this. Getting up in front of a bunch of one&#8217;s peers to talk about something technical is difficult. I am confident that even those that routinely present will say the same. The best advice I&#8217;ve ever received about presenting is: recognize that you might not be the most knowledgeable person on the subject in room, that you do not know the answers to every question, and that the only thing setting you apart from the audience is your name badge. It&#8217;s true. This is precisely why it&#8217;s so important to give feedback to the person that spent many hours crafting an idea into slides and words&#8211;no small feat.</p>

<p>It is easy to sit here and say, go give valuable feedback to people. I myself sometimes have a hard time with this task. But I think a small set of questions can help you figure out what to say:</p>

<ul>
<li>Were the slides easy to follow? and did they flow with the speaker or were they distracting?</li>
<li>Did the speaker misspeak? say &#8220;um,&#8221; &#8220;uh,&#8221; or &#8220;well&#8221; too often?</li>
<li>Does the content of the presentation match what you expected based on the abstract?</li>
<li>Did you feel engaged? If you asked a question, was your question answered?</li>
<li>What is the best thing you gained by attending the session?</li>
<li>Was there a point that was particularly difficult to grasp during the talk? Do you have suggestions to make it easier to understand?</li>
<li>Can you apply anything from the presentation to your situation? Will you?</li>
</ul>


<p>I guarantee you answering any or all of these questions will definitely be appreciated by the speaker presenting at the next event you attend. There are many more that you can answer, but I think you probably get the point by now.</p>

<p>The takeaway here is you should take a few moments to rate your speaker, but it&#8217;s more important that you give him or her advice on how to improve the talk next time. Doing that will make your input much more valuable that just saying, &#8220;meh - 2 stars.&#8221;</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Speaking at LoneStarPHP]]></title>
    <link href="http://carouth.com/blog/2012/02/27/speaking-at-lonestarphp/"/>
    <updated>2012-02-27T09:44:00-06:00</updated>
    <id>http://carouth.com/blog/2012/02/27/speaking-at-lonestarphp</id>
    <content type="html"><![CDATA[<p>The official schedule isn&#8217;t up yet, but I will be presenting &#8220;Micro Framework and JavaScript Applications&#8221; at <a href="http://lonestarphp.com">LoneStarPHP 2012</a> in June 2012.</p>

<p>The talk is focused around the idea of using MicroPHP to create an application that has a main view layer written in JavaScript. For implementation specifics, I will focus on using the Slim PHP Microframework with a Backbone.js frontend. I hope to see you there!</p>

<p>For what it&#8217;s worth, I looked at the rest of the speaker announcements on Twitter, and it&#8217;s a kick ass lineup. You won&#8217;t want to miss this conference.</p>

<p>I had to miss LoneStarPHP last year due to other commitments, but I hear it was a great success. And this year it&#8217;s expanded from one day to two days. If you&#8217;re in the area, come. Just do it. It&#8217;s a good investment. The PHP community rocks.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[My New Job]]></title>
    <link href="http://carouth.com/blog/2012/02/13/my-new-job/"/>
    <updated>2012-02-13T13:31:00-06:00</updated>
    <id>http://carouth.com/blog/2012/02/13/my-new-job</id>
    <content type="html"><![CDATA[<p>At the beginning of the year I started work as a Senior Software Engineer at <a href="http://www.liftopia.com">Liftopia</a>. It&#8217;s an amazing opportunity and I&#8217;m very proud to be a member of the development team. I wanted to share a bit about my decision to take this opportunity, as well as the changes introduced in my life as a result.</p>

<h2>The Job</h2>

<p>The very first question I get when I tell people about my new position is, &#8220;What is Liftopia?&#8221; The short answer is it&#8217;s an e-commerce platform that allows ski resorts to move lift ticket inventory at discounted rates. The long answer is much more involved than that, but since my blog leans to the more technical side of discussions, I&#8217;ll leave it at that.</p>

<p>In the Liftopia ecosystem I work on Team Dev–hopefully that is not a surprise. We maintain, add to, and fight fires with the infrastructure that our website, mobile site, mobile applications, and growing collection of cloud–DRINK!–stores sit on top of. We code in PHP and JavaScript, talk with MySQL and MongoDB databases, and serve up traffic through Apache and Nginx. My specific role on the team is general web development including patching bugs, implementing features, and even the occasional delve into systems administration.</p>

<h2>Influence</h2>

<p>Higher education is an interesting place to work. It really does exist as its own ecosystem and culture. I noticed this during my four years working at Texas A&amp;M University. I also noticed that like any large company there is an immensely rigid corporate structure and everything has a form that must be filled out. For some people this structure is liberating. For me it was prison. I&#8217;m not saying that I loathed my time at the University. In fact, I met some really great people and had a lot of fun working with them to accomplish the goals of the Texas A&amp;M community. It&#8217;s just at this time I needed something with a little less red tape and a little more excitement.</p>

<p>Another major contributer to my decision to accept this new position is my personal life. My wife and I are expecting our first child in June 2012, and the flexibility provided me by my new position will be a major asset as we raise him. Telecommuting is interesting in that, when you tell non-telecommuters that you work from home and are expecting a baby, the first reaction is, &#8220;oh, that&#8217;s great! You can stay home and watch the baby!&#8221; While that would be rather fantastic, I do have a job to do and I&#8217;m fairly certain I don&#8217;t get paid to watch my own child. That said, I know that my current role will offer me more opportunities to spend time with my child than working a traditional office job.</p>

<h2>Fin</h2>

<p>So that&#8217;s it. I have a new job that I&#8217;m excited about. If you are going skiing or snowboarding, you owe it to yourself to see if the area you want to go to has any deals listed on our site. (No, I don&#8217;t have any insider information or massive amounts of credits I can give you.)</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Chasing Perfection in Software Projects]]></title>
    <link href="http://carouth.com/blog/2012/02/10/chasing-perfection-in-software-projects/"/>
    <updated>2012-02-10T18:18:00-06:00</updated>
    <id>http://carouth.com/blog/2012/02/10/chasing-perfection-in-software-projects</id>
    <content type="html"><![CDATA[<p>Some questions are universal between both new and experienced developers. Sometimes experience leads us to assume we have the answer to a question, even if that question has no actual answer.</p>

<p>One such question is, &#8220;how can I write perfect code?&#8221; Some readers will laugh at the notion, others will think of their favorite techniques and acronyms such as DRY, SOLID, or even YAGNI and consider those to be a measure of some level of perfection. Neither group is wrong.</p>

<p>The problem isn&#8217;t with software developers, it isn&#8217;t with clients or customers, nor is it with anyone else. The question is flawed. The question assumes there is a state of code that will be impervious to any situation thrown at it. While some of the greatest minds in software engineering are attacking problems in process to aid developers in dealing with a wide array of changes, problems, and situations, writing code that will be perfect is impossible.</p>

<p>Now that we&#8217;ve gotten past the idea that we can ever truly achieve flawless software I&#8217;d like to take on the task of defining my thoughts on chasing perfect software.</p>

<h2>My Thoughts on Perfection</h2>

<p>I treat code quality a bit like normalizing a relational schema. There are &#8220;perfect forms&#8221; of software increasing in complexity and stability, but there is also the possibility that deperfecting–you know, like denormalizing–is the correct action to take for your software project.</p>

<h3>Perfect Software Works</h3>

<p>The first level of perfect software is a functional piece of software. Funtional software accomplishes its goal consistently. If we&#8217;re talking about some e-commerce platform, the ideal piece of software would allow store owners, managers, or administrators to enter products, prices, and inventory into a system and then allow customers to purchase those products. But to be considered the first level of perfect, the software must do with very little error.</p>

<p>In an ideal world, the error margin would be 0%. However, there will be issues, so I still consider the software first level of perfect if it performs as intended 95% of the time based on wholly unscientific calculations.</p>

<p>This definition of perfect is incomplete because it favors the happy case, meaning it only takes into account ideal input and conditions.</p>

<h3>Perfect Software Validates and Filters</h3>

<p>To get to the next level of perfection, software must validate data and expectations and filter data as necessary. When talking about validation I favor extreme paranoia. Always assume the input you have is not only completely wrong, but possibly maliciously wrong.</p>

<p>Personally, I think the term input validation is a bit misguiding. Input doesn&#8217;t solely refer to data coming from your UI, it&#8217;s data coming from any source other than the method or function working with the data. That means you need to be sure the data coming from your UI is fine; the data coming out of your database is as expected; the data coming from a webservice is valid. Trust no data source.</p>

<h3>Perfect Software is Testable</h3>

<p>This is a big part of making great software. However, when I say testable software I could be talking about any number of levels of testability and any type of tests. Specifically, I am speaking about unit testing.</p>

<p>Whatever your feelings towards unit tests might be, writing code that is testable will greatly improve the quality of the project. I dare say that such a practice will improve a project even if not a single test is written. <em>I do not advocate this practice, however.</em></p>

<p>You might ask, &#8220;what makes code testable?&#8221; That&#8217;s a great question. I&#8217;ve blabbered on and on about the idea of testable code in the December 2009 issue of php|architect, and more recently my friend Chris Hartjes published a book on the subject of testable code entitled, <a href="http://www.grumpy-testing.com/">&#8220;The Grumpy Programmer&#8217;s Guide To Buliding Testable Applications In PHP&#8221;</a>. It&#8217;s well worth the investment if this is a topic of interest to you.</p>

<h3>Perfect Software is Documented</h3>

<p>Oh documentation. The bane of many a software developer&#8217;s existence. It&#8217;s a difficult area for many because we&#8217;re taught silly things about writing documentation and then we get frustrated with the utter uselessness of most documentation. The important thing to take away is that your code should have documentation to help you or whomever gets the pleasure of maintaining the project in the future.</p>

<p>Good documentation should show the reader how to use the code being documented to accomplish a goal. With any sort of luck the goal will be apparent by the name of the code block, function, etc. being documented, but in the real world that isn&#8217;t always the case.</p>

<p>You can start with <a href="http://www.phpdoc.org">phpDocumentor</a>, but my absolute favorite documentation is unit tests. If a test suite is grown over time with each bugfix, edge case, etc., the unit tests should tell me a lot about how the code is intended to be used. This doesn&#8217;t mean I won&#8217;t change the intention, but I have a good idea at the outset what I should and should not expect.</p>

<h3>Finally, Perfect Software is the Software You Have Right Now</h3>

<p>In an ideal world, all the levels above will be completed for every piece of software out there. But at the end of the day, the most perfect software solution to any given project is the software that you have written, provided it accomplishes the goal.</p>

<p>This isn&#8217;t my way of saying, don&#8217;t strive for excellence. It&#8217;s my way of saying software must constantly evolve, but you should realize that the pursuit of perfection is a long journey. Release what works then fix the blemishes.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Using magic for good]]></title>
    <link href="http://carouth.com/blog/2011/11/07/using-magic-for-good/"/>
    <updated>2011-11-07T10:00:39-06:00</updated>
    <id>http://carouth.com/blog/2011/11/07/using-magic-for-good</id>
    <content type="html"><![CDATA[<p>Magic functionality in programming languages can be helpful. But it also
provides an easy way for developers to make maintenance a nightmare and
confuse even the original author just days after the code is authored.
Yesterday, a developer I met at ZendCon, Joshua, Tweeted most likely out of
frustration caused by such magic functionality.</p>

<p>I responded
that I found what I consider to be a good use case for certain magic
functionality in PHP. At the end of the conversation, Joshua agreed that the
so-called magic functions can be used for good but it is often wielded
inappropriately which leads to frustrations such as what inspired his tweet
above.</p>

<h2>A use casefor __call()</h2>

<p>PHP has a magic metho named <strong>call(). If you aren&#8217;t familiar, </strong>call()
provides method overloading functionality for PHP classes/objects. This is
often used for implementing proxy functionality among other things but I
thought it might be useful for deprecating methods after extracting their
feature from a class.</p>

<p>In this situation we had a classic case of a class that does more than one
thing and an obvious need to extract the second class. When working on the
refactoring we have two choices: 1) we can remove the methods and find/replace
all calls to those functions from any client code, or 2) leave the methods
exposed and available to the client code, but implement the new refactored
class inside these methods. I propose that we can use the __call() method to
continue to provide/expose these methods while allowing time to fully
deprecate and remove the methods.</p>

<pre><code>class PersonMapper 
{
    public function find($id) 
    {
        //do something related to people
    }  
    //...snip...
    public function __call($method, $args)
    {
        if (false === stripos($method, 'building')) {
            throw new Exception('Unknown method ' . $method);
        }
        trigger_error(
            'Using deprecated method ' . $method . ' on object of ' . __CLASS__,
            E_USER_DEPRECATED //NOTE: PHP 5.3.0+ required
        );
        $newObj = new Foo();
        call_user_func_array(array($newObj, $method), $args);
    }
}
</code></pre>

<p>As you can see in the __call() method, I first check to see if the called
method matches the criteria for the deprecated methods. If it does we trigger
a warning (to show up in development logs) and then call the method on an
instance of the new class.</p>

<h2>There you have it.</h2>

<p>Magic for good and no Harry Potter involved.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[HTML5.tx: Pre-conference thoughts]]></title>
    <link href="http://carouth.com/blog/2011/09/28/html5-tx-pre-conference-thoughts/"/>
    <updated>2011-09-28T08:35:36-05:00</updated>
    <id>http://carouth.com/blog/2011/09/28/html5-tx-pre-conference-thoughts</id>
    <content type="html"><![CDATA[<p>The inaugural <a href="http://html5tx.com">HTML5.tx conference</a> is in ten days (well, nine if you count the pre-event shindig.) Time has gone by rapidly over the past few months of planning, and I thought now would be a great time to discuss some observations and the experience I&#8217;ve had being a part of the team putting on the conference.</p>

<p>Disclaimer: this is my first time being a conference &#8220;organizer,&#8221; so do forgive me if my observations elicit a hearty &#8220;okay, noob, everyone knows that!&#8221; from you.</p>

<h2>That idea you share can be an event</h2>

<p>One of my absolute favorite things about HTML5.tx is it truly sprang from a simple comment, but it took off and we are really doing this. After a presentation about the current state of HTML5, Brandon Satrom <a href="http://twitter.com/#!/BrandonSatrom/status/68265011277086720">mentioned on Twitter</a> that he was &#8220;actually toying with putting on a full-day HTML5 event in Austin (w/ svrl speakers).&#8221; He went on to ask if my fellow B/CS community organizer <a href="http://robertstackhouse.com/">Robert Stackhouse</a> and I thought that folks from B/CS would make the trip out to Austin. We did. From that, the public Google Group for HTML5.tx was born.</p>

<p>Over the next few months, people stepped up and owned tasks. We shared our talents, ideas, and time, and we have a great lineup of speakers to share their knowledge. It all started with a Tweet. To me that&#8217;s amazing.</p>

<h2>Just step up. You can do it!</h2>

<p>Originally, I was a bit reserved about taking part in organizing this event. I&#8217;ve never done this sort of thing before, and I wasn&#8217;t sure I had the contacts or abilities to make a difference in the event. I learned that it doesn&#8217;t matter. I have skills and so do you. You are a valuable part of your community and whatever you are able to contribute will be welcomed. Just step up and get it done.</p>

<p>For my part, I volunteered to wrangle speakers. I did not do it alone by any means, but I like to think that my contributions to the lineup haven&#8217;t gone unnoticed. In the process I learned that there are some really smart people who are very passionate about what they do who are willing to share it with complete strangers just because. Okay, I didn&#8217;t really learn that, per say, but it was reinforced. If I hadn&#8217;t stepped in to work on the speakers team, I would have missed this insight.</p>

<h2>Twitter marketing works.</h2>

<p>(Well, at least for the type of audience that will attend HTML5.tx.)</p>

<p>As far as I know, our primary method of marketing was and is Twitter. We have a <a href="http://twitter.com/html5tx">Twitter account for the conference itself</a>, and it is heavily retweeted by my fellow organizers and, in turn, their thoughts on the conference are retweeted by the conference account. How do I know it works? We got some awesome proposals in our call for papers, which we announced on Twitter. The conference sold out last week. Yep, marketed on Twitter. It was the perfect outlet for this type of event.</p>

<h2>Conclusion</h2>

<p>If you&#8217;re coming to HTML5.tx, I can&#8217;t wait to meet you. Say hi! If you didn&#8217;t get a chance to pick up a ticket before we sold out, we are recording the sessions. I&#8217;m proud to be a part of this conference!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Stupid Simple Productivity—My Toolbox in 2011]]></title>
    <link href="http://carouth.com/blog/2011/09/17/stupid-simple-productivitye28094my-toolbox-in-2011/"/>
    <updated>2011-09-17T10:15:05-05:00</updated>
    <id>http://carouth.com/blog/2011/09/17/stupid-simple-productivitye28094my-toolbox-in-2011</id>
    <content type="html"><![CDATA[<p>I&#8217;m a fan of efficiency. I constantly evaluate new techniques to enhance the time I spend working, and the time I spend playing. I wanted to share my productivity toolbox in 2011.</p>

<h1>Work Spaces</h1>

<p>I&#8217;ve found it&#8217;s important to keep a clean, organized workspace. When I say that, I&#8217;m talking mostly about your physical work area; usually a desk or a table. If you&#8217;re a coffee shop surfer, you likely don&#8217;t have the opportunity to clutter up your desk, but it&#8217;s equally important to organize your travelbag.</p>

<p>That said, I&#8217;m going to talk about your virtual workspace instead of your physical one.</p>

<p>Your virtual workspace is one area that I disagree with the general statement that &#8220;less is more.&#8221; I don&#8217;t suggest a wonton usage of workspaces, but, in my experience, having a separate desktop or workspace for each category of tasks has significantly increased the volume of work I can accomplish. I am, of course, speaking of the &#8220;Spaces&#8221; feature of Mac OS X and the virtual desktops in Linux windows managers. I don&#8217;t have enough experience with Windows to suggest a tool to add this functionality, but a quick Google search turned up a few suggestions.</p>

<p>In my case, I typically use four distinct workspaces. Like I mentioned, I split my workspaces up by task. My first workspace is my coding space. I typically have an instance or Vim open (GVim or MacVim) and usually a terminal to interface with data providers or whatever, and a web browser. The web browser is the only thing that crosses spaces, but that&#8217;s just a reality Ihave to live with.</p>

<p>My second space is where I push my systems administration tasks to. Typically this means I have a terminal open (tmux FTW!) connected to several machines. It&#8217;s such a party sometimes.</p>

<p>I push all my distractions to my third space. I classify distractions as my email client, my Jabber/IM client, my Twitter client, and other so-called social outlets accessed via web browser&#8211;such as Reddit, Google Reader, et cetera. It takes some getting used to, but it&#8217;s completely within the realm of possibility to  only access this workspace during planned times for interruptions. I&#8217;ll admit it does put a damper on the meaning of instant messaging, and it&#8217;s virtually impossible to keep up in IRC, but it&#8217;s necessary for optimal efficiency.</p>

<p>My final space is reserved for &#8220;incidental usage.&#8221; This can be anything from mockups, to reading materials specific to the project I&#8217;m working on, so on and so forth. I try to avoid needing this space, but sometimes it&#8217;s necessary.</p>

<h1>Organizing communications and files</h1>

<p>A major time sink is processing incoming communications and file resources. I won&#8217;t classify myself as an expert at organization, task management, or the like, but, borrowing from several methodologies, I have come up with a system that works for me.</p>

<p>Following the &#8220;inbox&#8221; concept prevalent in email systems as well as the Getting Things Done methodology, I have a set of easily-accessed directories that I dump files into when they need work. I also have a mirror of this setup in my email systems. I label my directories with numeric prefixes (for sorting purposes.) I&#8217;ll admit it&#8217;s ugly, but it works for me. Here are the directories:</p>

<ul>
<li>00-inbox</li>
<li>01-actionable</li>
<li>02-follow-up</li>
<li>03-today</li>
<li>04-this-week</li>
<li>05-later</li>
<li>10-someday</li>
<li>20-projects

<ul>
<li>Project1</li>
<li>Project2</li>
</ul>
</li>
<li>99-archive</li>
</ul>


<p>I use these directories to store files I&#8217;ll need to complete my tasks, and then in the archive I have files I need to keep for whatever reason. The first set of directories corresponds to task planning. Usually I&#8217;ll have an email or two in a similarly-named folder and I work on my schedule in my editor—more onthat later. The 20-projects directory is for current projects. Once a project is complete (or out of my current scope) I move it to the 99-archive directory.</p>

<p>From the names, you should be able to gather how things are organized. It&#8217;s a sort of divide and conquer technique for file management. I haven&#8217;t lost a file yet, and these directories are synced with an online backup as well as to portable storage on a weekly basis. It Just Works.</p>

<h1> Task Management</h1>

<p>I mentioned in the previous section that I schedule tasks in my editor. I subscribe to using the Pomodoro technique. If you are unaware, this technique revolves around scheduling things in &#8220;Pomodoros&#8221; which are 25-minute work iterations. After each pomodoro, a 5-minute break is taken with every 4th break being 15 minutes. It sounds complicated, but it truly is stupid simple. I use <a href="http://tomato-timer.com">http://tomato-timer.com</a> to handle the timing. It&#8217;s free and very portable. If you want more information, I highly recommend <a href="http://pragprog.com/book/snfocus/pomodoro-technique-illustrated">this book</a> from the Pragmatic Bookshelf for an overview of the technique.</p>

<p>I manage my activity inventory—a fancy term for a running to-do list—in Vimwiki which syncs through an online data storage provider. This allows me to access my inventory from every machine I use. Thanks to some awesome individuals (Travis Swicegood and Matthew Weier O&#8217;Phinney) I&#8217;ve managed to integrate vim-task with Vimwiki and I have a clean way of managing task lists. Vimwiki also allows me to create a &#8220;today&#8221; page in my wiki, where I place my task list for the day and assign pomodoros.</p>

<h1>Odds and Ends</h1>

<p>The one issue I haven&#8217;t solved is a quick way to carry my activity inventory with me. Right now I&#8217;m using Remember The Milk and Evernote from my phone, or just plan old fashioned notebook and pen. But this is cumbersome and I&#8217;d like to find a way to directly inject my tasks into my synced list. I could possibly accomplish this by syncing my phone to an online provider and manually editing the text file for Vimwiki, but I&#8217;m not sure I like that.</p>

<p>The last thing on my list is an issue tracker. It&#8217;s integrated into my workflow, but not necessarily my other tools. This is an area I&#8217;m exploring. If you have tips, please let me know.</p>

<h1>Wrap Up</h1>

<p>Productivity is something you can teach yourself in less than a week. These techniques work for me, but they aren&#8217;t an end all be all solution. I&#8217;m constantly evolving my techniques and tools, I just hope my trials can help you.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[The Missing Conference Track]]></title>
    <link href="http://carouth.com/blog/2011/09/12/the-missing-conference-track/"/>
    <updated>2011-09-12T11:20:35-05:00</updated>
    <id>http://carouth.com/blog/2011/09/12/the-missing-conference-track</id>
    <content type="html"><![CDATA[<p>This past weekend I attended <a href="http://www.pytexas.org/2011/">PyTexas 2011</a>. It was a great conference—even for someone that doesn&#8217;t regularly use Python. It was enlightening to be the &#8220;noob&#8221; at a particular subject to gain a vantage point that I would otherwise be without.</p>

<p>Note: I&#8217;m not knocking on PyTexas at all. It was organized well and the sessions I attended were informative. However, in talking with a couple attendees and presenters I noticed something that hadn&#8217;t dawned on me before, and is particularly relevant as I am helping organize a conference schedule and also hope to present at more conferences in the future. (Shameless plug to both <a href="http://html5tx.com">HTML5.tx</a> and <a href="http://zendcon.com/2011">ZendCon2011</a>.)</p>

<p>The one thing missing from this conference was the intermediate level. There were talks and activities aimed at pure beginners as well as sessions that were clearly for advanced developers. I think that is great. But, in my case in particular, what I needed was something in between.</p>

<p>I attended talks in each of the available levels, and my suspicions were confirmed: the beginner talks were too below my abilities, and the advanced talks had content that won&#8217;t fully grasp for a few weeks of working with Python. You might wonder what an intermediate-level session might look like. Well, me too. I have some ideas though.</p>

<p>Coming this conference as a (mostly) PHP developer, there were obviously some differences in language features, but, more importantly, there was a language barrier in terms of definitions of features. I heard a lot about &#8220;decorators&#8221;—which, incindentally are a really awesome feature—but I had to spend significant energy figuring out what a &#8220;Python decorator&#8221; was, which left me behind in most of the advanced talks that glossed over them.</p>

<p>One particular talk idea would be, as a general concept, Python development lingo. This would obviously require someone that has enough knowledge of other languages to point out examples if there are any. On a more specific level, Python for PHP/JAVA/C++/Ruby developers talks—open space idea rightthere—would be great.</p>

<p>Another idea for such an intermediate session would be focusing on particular programming paradigms. For example, Object-Oriented Programming in Pythonwould fit in this category. A talk of this persuasion would allow me to use my previous knowledge of programming with a concrete parallel into Python.</p>

<p>Anyway, that&#8217;s my little &#8220;lightning post&#8221; on what I&#8217;d love to see at language-specific conferences. It would make them more accessible to those wanting to learn who are not total beginners to programming in general.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[HTML5.tx coming to Austin]]></title>
    <link href="http://carouth.com/blog/2011/08/04/html5tx/"/>
    <updated>2011-08-04T18:18:52-05:00</updated>
    <id>http://carouth.com/blog/2011/08/04/html5tx</id>
    <content type="html"><![CDATA[<p>In case you haven&#8217;t heard, we&#8217;re <em>diligently</em> working to gather Texas&#8217; web development community together in Austin to inspire each other through presentations, hackathons, and hallway conferences focused on HTML5. The conference is called <a href="http://html5tx.com">HTML5.tx</a>, and I&#8217;m proud to beassisting its organization.</p>

<h2>Who&#8217;s it for?</h2>

<p>Web developers. Mobile developers. Designers. Professionals. Amateurs. Students. Your cat or dog. Okay, maybe not your pets, but we&#8217;re trying to put together a groups of speakers that can show us the ins and outs of using HTML5 and related technologies <strong>right now</strong>. Yes, you read correctly. We&#8217;re talking about <em>cool things</em> you can hear about on October 8 and <em>implement in your projects the very next day</em>. (Or, if you&#8217;re truly inspired, head over to the open spaces and hack away with your fellow attendees.)</p>

<h2>What are we going to learn about?</h2>

<p>Well, that&#8217;s kind of up to you, isn&#8217;t it? Ultimately the team of organizers will pick the final lineup, but we&#8217;re trying to be as transparent as possible in creating this conference (just check out the <a href="http://groups.google.com/group/html5tx">public Googlegroup</a>) and we&#8217;re truly listening to what you have to say about the proposals submitted to our Call for Papers. <a href="http://html5tx.uservoice.com">Go vote now!</a></p>

<p>We discussed ways to deliver two tracks of talks. The first, and most obvious, separation is design and development, but we think that&#8217;s played out. We wanted something fresh. We came up with having a &#8220;new&#8221; and an &#8220;improved&#8221; track. We&#8217;ll look for talks that show us new features and new ways of doing things made possible by HTML5 for the &#8220;new&#8221; track, and we&#8217;ll focus on ways HTML5 improves design, development, and even the end-user&#8217;s experience in the &#8220;improved&#8221; track.</p>

<p>For best results, I suggest you attend a couple of each track.</p>

<p>Also, it&#8217;s not too late to get your submissions in. The CfP closes on August 19th. <a href="http://bit.ly/SpeakAtHTML5tx">Submit what you&#8217;re passionate about.</a>Please?</p>

<h2>When is it?</h2>

<p>October 8. We&#8217;ll possibly have a pre-event event, and likely a post-event event, but the event is on the 8th. If you have to pick just one day, be thereon the 8th.</p>

<h2>Where do I go?</h2>

<p>Come to Austin. It&#8217;s a great city. You won&#8217;t have time for touristy things, but come immerse yourself in the glory of HTML5 at the <a href="http://think.stedwards.edu/ragsdalecenter/">Ragsdale Center of St.Edward&#8217;s University</a>. You can check out the tourist spots on Sunday.</p>

<h2>Why should I come?</h2>

<p>You&#8217;ll <strong>meet some really cool people</strong> with some awesome ideas and intensetechnical knowledge. You&#8217;ll get a <strong>free t-shirt</strong>. (We are apparently advising you not to wear it at the event; I&#8217;m not sure you want to be &#8220;thatguy.&#8221;) But most importantly you&#8217;ll <strong>gain some knowledge</strong> that you can use tomake your projects better. You can&#8217;t put a price on that, but we can! It&#8217;sonly $79, though. A <em>small</em> investment and a great value, but I might bebiased.</p>

<h2>How do I sign up?</h2>

<p>I&#8217;m glad you asked. Get your ticket from <a href="http://html5tx.eventbrite.com/">EventBrite.com</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[The Choice of Professionalism]]></title>
    <link href="http://carouth.com/blog/2011/07/08/the-choice-of-professionalism/"/>
    <updated>2011-07-08T18:52:59-05:00</updated>
    <id>http://carouth.com/blog/2011/07/08/the-choice-of-professionalism</id>
    <content type="html"><![CDATA[<p>I&#8217;m currently reading through two of Uncle Bob&#8217;s books: <a href="http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882/">CleanCode</a> and <a href="http://www.amazon.com/Clean-Coder-Conduct-Professional-Programmers/dp/0137081073/">The Clean Coder</a>. Both are excellent reads, full of wisdom and advice that every person that calls himself or herself a developer should wield and heed on a daily basis. Readingthe first three chapters of The Clean Coder makes me realize professionalism is a behavior. It seems obvious, but I never thought about the gravity of the word, or the behavior.</p>

<p>To me, professionalism is a choice made each time a decision is required. Knowing when to say no and when to say yes is a hard choice. Uncle Bob stresses that as professionals we must be able to recognize how to decide whether we can commit to a task or if the task is beyond our capabilities. That&#8217;s always been a sticking point for me, and I know I must work on it.</p>

<p>I can&#8217;t wait to get through the rest of The Clean Coder. It and The Pragmatic Programmer are on the list of required reading for current and future developers.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[snipMate via Pathogen woes]]></title>
    <link href="http://carouth.com/blog/2011/06/11/snipmate-via-pathogen-woes/"/>
    <updated>2011-06-11T10:54:12-05:00</updated>
    <id>http://carouth.com/blog/2011/06/11/snipmate-via-pathogen-woes</id>
    <content type="html"><![CDATA[<p>In my quest to become more proficient with Vim I came across many people touting the joys of using SnipMate. I thought I should give it a try and pulled it into my configuration via Pathogen. That&#8217;s where the fun stopped. I spent a few hours trying to get it to work and followed the advice on many blogs. I was able to see that the necessary .vim scripts were parsed and that the <code>&lt;tab&gt;</code> key was mapped correctly. But I could not get the snippets towork.</p>

<p>After symbolically linking the files into the root of my .vim directory, snipMate worked like a champ. It blew my mind, I just wanted it to work.</p>

<p>Then I figured it out. Part of one of the blogs I followed had me add <code>letg:snippets_dir = $HOME . "/.vim/snippets"</code> to my .vimrc file. The issue I was having was staring me in the face. Before I symbolically linked the snippets directory into my .vim directory, snipMate couldn&#8217;t find any snippet definitions to use, so it obviously wouldn&#8217;t work.</p>

<p>My solution is to instead add .vim/snippets to the rtp. Works like a champ. I now have the default snippets and my custom snippets.</p>

<p><code>let rtp += $HOME . "/.vim/snippets"</code></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Making development fun by feeling the Breeze]]></title>
    <link href="http://carouth.com/blog/2011/04/27/feel-the-breeze/"/>
    <updated>2011-04-27T13:30:09-05:00</updated>
    <id>http://carouth.com/blog/2011/04/27/feel-the-breeze</id>
    <content type="html"><![CDATA[<p>Some recent conversations led me to question what has changed from the first time I sat down with an empty text file and created something using PHP totoday where I spend countless hours obsessing over best practices, object-oriented solutions, so on and so forth.</p>

<p>I found the answer on Twitter of all places. Ed Finkler(<a href="http://twitter.com/#!/funkatron">@funkatron</a>) touched on the idea when he tweeted, &#8220;Thinking about how to &#8220;reboot&#8221; PHP package management using existing tools in a non-framework/app-centric way. Make PHP hacking fun again.&#8221;</p>

<p>That is the answer. The fun of not knowing the solution, or even of creating a solution without the context of years of experience. It&#8217;s gone. Or is it?</p>

<p>Several years ago I went from rolling my own MVC architecture to falling in love with the implementation found within the Zend Framework. (Regardless of your opinion of the ZF, there is some library that you find yourself using practically everywhere, so just replace ZF with that library&#8217;s name.) As a result, I find myself thinking of solutions in the &#8220;Zend Framework way,&#8221; which, for better or worse, makes me somewhat more efficient in ZF-based apps, but limits my fun, my programming creativity, and turns me into just another hammer looking for a nail.</p>

<p>To spice things up, I&#8217;m going to explore some other solutions. As I&#8217;ve seen the name popping up in various locations, I thought I&#8217;d start out with the <a href="https://github.com/whatthejeff/breeze">Breeze micro-framework</a>. After a glance over the code on github, it seems that the framework is fairly flexible in terms of organization and implementation, so it should allow me the freedom to create my own solutions to problems that I&#8217;ve come to rely on the magic within the Zend Framework to solve.</p>

<p>I challenge you to step outside your normal routine and make your development fun again.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Not losing ME in social media]]></title>
    <link href="http://carouth.com/blog/2011/04/18/me-in-social-media/"/>
    <updated>2011-04-18T10:00:16-05:00</updated>
    <id>http://carouth.com/blog/2011/04/18/me-in-social-media</id>
    <content type="html"><![CDATA[<p>In some recent discussions, the topic of individualism and employer identity in the social media realm has been a focal point. In other words we have questions if a person can have a social media presence in which he or she is not speaking for his or her employer, or, at a lower level, his or her comments do not reflect on the employer.</p>

<p>The idea of &#8220;personal brand,&#8221; is something that I take issue with. In my opinion, saying you have a personal brand is syntactic sugar for saying you have an identity. I made this comment on Twitter:</p>

<pre><code>"I'm not a brand. I'm a person."
</code></pre>

<p>(Don&#8217;t worry about the hash tag, it&#8217;s not important.)</p>

<p>In further discussions we&#8217;ve touched on whether one can truly separate his orher personal life from a career. In my opinion, absolutely. My approach to social media separates the various platforms and caters to a specific audience on each. Here&#8217;s a couple and how I use them.</p>

<p><a href="http://www.facebook.com/jcarouth">Facebook</a>: Personal interaction with family and friends. I don&#8217;t post very serious content here, it&#8217;s more a playground where my laid-back personality can thrive.</p>

<p><a href="http://twitter.com/#!/jcarouth">Twitter</a>: I use this mainly for professional contacts with some personal connections and interactions. I must admit I&#8217;ve slacked off in the past year or so, and as such, Twitter has lost a significant amount of value to me.</p>

<p><a href="http://www.flickr.com/photos/jcarouth">Flickr</a>: This is where I post photos for my photography hobby. I also stay in touch&#8211;or sometimes it seems more like stalking&#8211;other photographers that interest me.</p>

<p><a href="http://www.youtube.com/jcarouth">YouTube</a>: I rarely, if ever, contribute, but I do use this for gear reviews and general knowledge building.</p>

<p><a href="http://www.linkedin.com/in/jcarouth">LinkedI</a>n: Purely used a collection of professional contacts for career-oriented networking.</p>

<p><a href="https://foursquare.com/user/5038267">Foursquare</a>: I haven&#8217;t really ever gotten into this. While I understand the idea, it seems rather creepy to know where someone is at all times and then to be alerted when your friends/acquaintances are nearby.</p>

<p>As you can see, I keep each medium completely separate. I don&#8217;t believe that tying your status message to populate the same message on every social media outlet is a good idea, nor do I feel it provides value to your followers. Again, this is purely my opinion.</p>

<p>What I&#8217;m getting at is you are an idividual. Who you work for is only a small component of your identity, and it is completely possible to separate your personal life from your professional life.</p>

<p>One technique I&#8217;m going to try out is having a separate account for my work-focused identity. On Twitter, I will have an account<a href="http://twitter.com/#!/jcarouth">@jcarouth</a> for my personal identity and<a href="http://twitter.com/#!/JeffAtTAMU">@JeffAtTAMU</a> for my <a href="http://www.tamu.edu">Texas A&M;University</a>-related tweets. I&#8217;m going to be tweetingabout what I do at Texas A&M; and hopefully contributing to the Aggie community, even if it&#8217;s a small contribution.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Why I failed at blogging: writing style]]></title>
    <link href="http://carouth.com/blog/2010/11/14/writing-style/"/>
    <updated>2010-11-14T10:15:19-06:00</updated>
    <id>http://carouth.com/blog/2010/11/14/writing-style</id>
    <content type="html"><![CDATA[<p>This is part 6 of a series. <a href="http://carouth.com/2010/11/13/a%0A-perfectionist-sucks-as-an-editor/">Read part 5</a> or <a href="http://carouth.com/2010/11/09/why-i-failed-at-blogging/">read part
1</a>.</p>

<p>When I think about authors that I love and hate, it usually comes down to his
or her writing style. For example, I cannot stand essays, books, articles,
etc. that are composed of many short, choppy sentences. I always feel like I&#8217;m
reading a See Spot Run™ story. Because of this, I have adopted a more verbose
style.</p>

<p><strong>Being verbose has serious drawbacks</strong>. A vast majority of the time I end up having to cut sentences and even paragraphs because I&#8217;ve gone off on some tangent and made my simple blog post a 3,000-word essay. That reminds me of a time…just kidding, no tangent to see here; move along.<br/>
This impacted my blogging because <strong>I ended up deleting a lot of posts I
started</strong> that ended up much longer than anyone would be likely to read. I
don&#8217;t mean to say that every post must be short. Rather, a post should only
<strong>cover enough material to convey the intended message</strong>, and it should do so
as concisely as possible. There&#8217;s that word again: concise.</p>

<p>The way I plan to get over this real hurdle is to plan my posts better. With
pre-writing exercises I can keep myself on topic and avoid adding what ends up
being filler content. After all, I want this to be <strong>a blog of quality rather
than a blog of quantity</strong>. Actually I&#8217;d like both.</p>

<p>This concludes the Why I failed at blogging series. I hope I helped you get
over your hurdles, whether real or imagined. Let me know what hurdles you have
to overcome.</p>
]]></content>
  </entry>
  
</feed>
