<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
 
 <title>Develop With Passion® - Jean-Paul S. Boodhoo</title>
 
 <link href="http://blog.developwithpassion.com" />
 <updated>2012-02-02T07:31:28-06:00</updated>
 <id>http://blog.developwithpassion.com/</id>
 <author>
   <name>Jean-Paul S. Boodhoo</name>
   <email>jp@developwithpassion.com</email>
 </author>

 
 <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/JPBoodhoo" /><feedburner:info uri="jpboodhoo" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by/2.0/" /><logo>http://www.feedburner.com/fb/images/pub/fb_pwrd.gif</logo><feedburner:emailServiceId>JPBoodhoo</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry>
   <title>Early Bird Discount For April Course In Brussels!!</title>
   <link href="http://feedproxy.google.com/~r/JPBoodhoo/~3/km5R19yWz90/early-bird-discount-for-april-course-in-brussels" />
   <updated>2012-01-28T09:00:00-06:00</updated>
   <id>http://blog.developwithpassion.com/2012/01/early-bird-discount-for-april-course-in-brussels</id>
   <content type="html">&lt;p&gt;The crazy Develop With Passion® training course is coming to Brussels on April 30th!!&lt;/p&gt;

&lt;p&gt;This is our first time in Brussels and we are excited for what the potential reception is going to be!!&lt;/p&gt;

&lt;p&gt;You may want to consider taking the course if you are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Able to free up their week for April 30th - May 4th.&lt;/li&gt;
&lt;li&gt;Looking forward to spending a week with a group of peers on the continual path of mastery&lt;/li&gt;
&lt;li&gt;Ready to come and learn killer coding techniques.&lt;/li&gt;
&lt;li&gt;Wanting to learn principles, patterns, and practices that can help enable them to craft a path to a long lasting career as an effective developer regardless of platform or language.&lt;/li&gt;
&lt;li&gt;Excited about the idea of 5 12 hour days of fast paced coding frenzy&lt;/li&gt;
&lt;li&gt;Comfortable with the thought of pair programming with complete strangers to help them to increase their game!!&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Registration for the course can be made &lt;a href="http://www.eventbrite.com/event/2560727204/eorg"&gt;here&lt;/a&gt;. If you register before the end of February and use the discount code: earlybirdforbrusselsis10 , you will receive a 10% discount on the course.&lt;/p&gt;

&lt;p&gt;Looking forward to seeing you there!!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.developwithpassion.com"&gt;Develop With Passion®&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=km5R19yWz90:uEoUc6glQzo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=km5R19yWz90:uEoUc6glQzo:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=km5R19yWz90:uEoUc6glQzo:XQ266DUsA9M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=XQ266DUsA9M" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=km5R19yWz90:uEoUc6glQzo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JPBoodhoo/~4/km5R19yWz90" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.developwithpassion.com/2012/01/early-bird-discount-for-april-course-in-brussels</feedburner:origLink></entry>
 
 <entry>
   <title>Sharpening the sword</title>
   <link href="http://feedproxy.google.com/~r/JPBoodhoo/~3/pzeNr8Pv_Gc/sharpening-the-sword" />
   <updated>2011-09-30T09:00:00-05:00</updated>
   <id>http://blog.developwithpassion.com/2011/09/sharpening-the-sword</id>
   <content type="html">&lt;p&gt;The following document outlines a collection of resources which you can use to help you pursue the art of software craftsmanship.&lt;/p&gt;

&lt;p&gt;There is a wealth of material in here that will take a significant amount of time to work through. The goal is not to complete it in a certain amount of time; rather to use the resources as a way to allow you to continually and incrementally work on honing your skills.&lt;/p&gt;

&lt;p&gt;Some of the resources in here focus on areas related to general computer science and software engineering, others are resources that are there to help you improve more general areas of your skillset, including tuning up the old gray matter!!&lt;/p&gt;

&lt;h2&gt;Work Incrementally And Consistently&lt;/h2&gt;

&lt;p&gt;It is very important to remember that the majority of peoples brains works best when challenged consistently over a long period of time. To this end, it is important that you embed habits of daily practice into your routine. Much like it is important to commit to a workout schedule for you physical health, it is also just as important to apply the same level of discipline to the way that you train your career skill set.&lt;/p&gt;

&lt;h2&gt;The resources&lt;/h2&gt;

&lt;h2&gt;&lt;a href="http://manifesto.softwarecraftsmanship.org/main/reading"&gt;Software Craftsmanship&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;This is really what this entire document is about, the art of crafting a long lasting career as a software professional. There is a huge wealth of information that the craftsmanship site links to. All of it is meant to give you ideas of what it means to be a software craftsman. Some of my favourites from the reading list are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://norvig.com/21-days.html"&gt;Teach yourself programming in 10 years&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;&lt;a href="http://www.lumosity.com/"&gt;Lumosity&lt;/a&gt; - Train Your Brain - 10 minutes a day&lt;/h2&gt;

&lt;p&gt;One of the tools on this list which is specifically focused on brain training is a tool called &lt;a href="http://www.lumosity.com/"&gt;Lumosity&lt;/a&gt;. This site is a collaboration between neuroscientists and computer programmers who have developed a system whereby you can increase a host of cognitive functions over the course of a prolonged training program. The initial 45 days of the program helps you establish a baseline for where you need to improve, and from that point on the program tailors
itself to help you develop the skills in the areas that you need improvement.&lt;/p&gt;

&lt;h2&gt;Code Katas - It just takes 20 minutes&lt;/h2&gt;

&lt;p&gt;The following set of exercises is a collection of code katas that you can use on a daily basis to spend a small amount of time every day working on a set of problems that can allow you to work on broadening the following areas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Increase you context pool of ideas around which to approach a particular problem&lt;/li&gt;
&lt;li&gt;Improve your ability to craft your workbench to allow you to work in the most efficient way possible aka. Repeat katas you have already solved and try to mechanically generate the solutions faster using your favoured workbench. This will allow you to identify areas where you can see yourself using your tools in a less than optimal way and work to iron out those items.&lt;/li&gt;
&lt;li&gt;Learn new languages. Use code katas as a way to explore a new language. Revisiting katas that you have solved and trying to implement them in as many languages as you are interested in.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Here is a small list of some katas that can keep you moving for a while:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://sites.google.com/site/tddproblems/all-problems-1"&gt;TDD Katas&lt;/a&gt;
These problems represent a small set of challenges that can allow you opportunity to flex you tdd programming muscles. Like any other skill, tdd is something that should be practiced over and over until you feel comfortable with the mechanics of leveraging it. In the beginning you will most likely write fairly bad tests. This is usually because TDD forces you to bring design to the forefront of your coding activity and design using code that serves as the first client of that code.
Often when people get started using TDD, they are faced relatively quickly with their deficiencies in the design toolkit they thought they had. This is a great thing, as it gives you an opportunity to purposefully choose to sharpen those skills. I personally feel that the design skills you bring to the table have an impact on the way that you approach executing TDD.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://projecteuler.net/"&gt;Project Euler&lt;/a&gt;
This is a set of over 350 problems that are fairly math centric in nature. This is a great resource for you to gauge where potential gaps in your math skills are. A large majority of line of business programmers can go their entire career without ever really to flex their math muscles. There is nothing wrong with this at all. Unfortunately, a large percentage of these developers also express interest in getting into other areas of computer programming, that require much higher level
math that what they can currently manage. When faced with this dilemma, they can choose to close the gaps in their knowledge that will allow them to get into those areas of interest; or they will choose to go back to what they know they can do, and have a constantly nagging feeling of wanting to do more.&lt;br/&gt;
Using this set of codekatas, you can work through the problems one at a time, and if you hit an problem that is proving a challenge due to a gap in the math skillset, you can close that gap with &lt;a href="http://www.khanacademy.org/"&gt;Khan Academy&lt;/a&gt; - discussed later on !!&lt;/li&gt;
&lt;li&gt;&lt;a href="http://codekata.pragprog.com/"&gt;Code Kata&lt;/a&gt;
One of the original code kata sites. It contains a set of problems as well as a great discussion on why to bother practicing code katas in the first place!!&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;Close some of the gaps in your math skill set&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.khanacademy.org/"&gt;Khan Academy&lt;/a&gt;
This is a fantastic resource put together primarily by the brilliant Salman Khan. Currently the site has over 2400 videos covering topics ranging from basic arithmetic to linear algebra. There are also material on history, biology. It is a crazy resource. For people who may have a gap in their math skillset, this can help you close it.&lt;br/&gt;
If you do happen to identify gaps in the knowledge, you have to be willing to be patient enough with yourself to go back to where the gaps stemmed from and work hard to close them. The many people out there who have been convinced by teachers,friends, etc that they are not mathematically inclined have been lied to. It may most likely mean that for you to exhibit proficiency in math, that you have to spend more time practicing and working through lots and lots of problems until it
clicks.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Now of course, it should be noted that you can probably enjoy a very long and successful career as a software developer without ever needing to get into higher level math. Especially if the majority of your dev effort is spent in the line of business "crud" style realm. Of course, if you start wanting to branch out into other areas of software such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Machine Learning&lt;/li&gt;
&lt;li&gt;Graphics&lt;/li&gt;
&lt;li&gt;Neural networks&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;You willl definitely require the use of those higher level math skills. At that point, you will either identify that you have the skills, can refresh them, or you will have to learn them from scratch. If this is the case, I believe Khan academy can definitely equip you with the tools to get into the areas that you have interest in!!&lt;/p&gt;

&lt;h2&gt;Get a better education&lt;/h2&gt;

&lt;p&gt;A large majority of computer science based education is not really equipping programmers effectively with what I call "a solid core". Like building a house on sand, if you don't take the time to learn and apply the fundamentals, it will be much more difficult to adopt an attitude of confidence in your ability to tackle problems. For some of us, that means we may need to revisit topics that we never had the opportunity to cover in the school that we attended. For some that
  means even going back and learning about fundamentals such as basic data structures and algorithms. There is a myriad of learning resources out there that are focused on just this task, the following list is a small representation of the huge amount of options that you have to be able to use to ramp up the "core" skills:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://ocw.mit.edu/"&gt;MIT Opencourseware&lt;/a&gt;.
For quite a number of years now MIT has been making large sections of its courses freely available for public use. Specifically for computer programmer, you can spend time looking at the &lt;a href="http://ocw.mit.edu/courses/electrical-engineering-and-computer-science"&gt;Electrical Engineering and Computer Science&lt;/a&gt;. There is a raft of courses relating to a wide field of computer science based disciplines. My recommendation for a lot of people would be to start with the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005"&gt;Structure and Interpretation of Computer Programs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-spring-2008"&gt;Introduction to Algorithms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-088-introduction-to-c-memory-management-and-c-object-oriented-programming-january-iap-2010"&gt;Introduction to C Memory Management and C++ Object Oriented Programming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-170-laboratory-in-software-engineering-fall-2005"&gt;Laboratory in software engineering&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;To see the impact that MIT Opencourseware is having, check out the following &lt;a href="http://www.wired.com/wired/archive/11.09/mit.html"&gt;article&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://itunes.stanford.edu/"&gt;Stanford on iTunesU&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Once again, the wealth of information on here is just amazing. Even in the computer programming section alone there are lots of video lectures from topics ranging from algorithms to iphone programming.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;Read some books&lt;/h2&gt;

&lt;p&gt;Books are a great resource for getting differing viewpoints on techniques and practices. My recommendation while reading books (especially technical) is to focus on active reading techniques that allow you to implement what you are reading as soon as possible. You want to give yourself the opportunity to build your own mental models for how the concepts apply, and I believe that a large majority of technical information you read is best distilled in your editor writing code
and playing around with the ideas.&lt;br/&gt;
I have put together a small book list that I have created to focus on some fundamental areas of both software engineering and computer science. Granted it definitely leans heavier into the realm of software engineering that raw computer science, but the books that are on there are a great starting point for helping you to further the building of a solid core.&lt;br/&gt;
Check out the book list here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.amazon.com/Building-A-Solid-Programming-Core/lm/R39PW96KKNBR79/ref=cm_lm_byauthor_title_full"&gt;Build a solid programming core&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.amazon.com/Build-A-Solid-Core/lm/R1TAJN36KKUPG4/ref=cm_lm_byauthor_title_full"&gt;Build a solid core&lt;/a&gt;- In my opinion, the books on this list are far more important than any of the resources I have mentioned so far. Read them and prepare to have transformative things happen in your life!!&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Feel free to comment on this resource list (yes comments are working again) and let me know if you think there are good additions I can make to the list of recommendations.&lt;/p&gt;

&lt;p&gt;God Bless You.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.developwithpassion.com"&gt;Develop With Passion®&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=pzeNr8Pv_Gc:tB4MVJKP3mw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=pzeNr8Pv_Gc:tB4MVJKP3mw:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=pzeNr8Pv_Gc:tB4MVJKP3mw:XQ266DUsA9M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=XQ266DUsA9M" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=pzeNr8Pv_Gc:tB4MVJKP3mw:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JPBoodhoo/~4/pzeNr8Pv_Gc" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.developwithpassion.com/2011/09/sharpening-the-sword</feedburner:origLink></entry>
 
 <entry>
   <title>Review - Kinesis Advantage Pro Keyboard</title>
   <link href="http://feedproxy.google.com/~r/JPBoodhoo/~3/_YD23gV2nzY/review-kinesis-advantage-pro-keyboard" />
   <updated>2011-09-12T09:00:00-05:00</updated>
   <id>http://blog.developwithpassion.com/2011/09/review-kinesis-advantage-pro-keyboard</id>
   <content type="html">&lt;p&gt;Someone got in contact with me a couple of weeks ago asking about whether the switch I made to the &lt;a href="http://www.kinesis-ergo.com/advantage_pro.htm"&gt;Kinesis Advantage Pro&lt;/a&gt; was worth it? The answer is a large resounding YES!!!&lt;/p&gt;

&lt;p&gt;This keyboard is without a doubt the most comfortable keyboard that I have ever used. For the first couple of weeks during the "adaptation" period, it was a little challenging. Getting used to the keyboard took a little bit of time, coupled with the fact that because I went "cold-turkey", when I had to jump onto another machine to do something, I could barely type on the flat/regular natural keyboard. As it felt completely unatural compared to the Kinesis!!&lt;/p&gt;

&lt;p&gt;The mechanics of the unit are amazing. The responsiveness of the keys, and the feel of the keys themselves are awesome. Of course, the one downside compared to my old natural keyboard, is the fact that it is not wireless. Not a biggie though.&lt;/p&gt;

&lt;p&gt;Even though the device looks a little big, it is small enough to carry comfortably in my backpack, where I often will break it out when I am doing coding in a coffee shop (much to the bizarre looks of everyone around me!!)&lt;/p&gt;

&lt;p&gt;The price tag may be a little steep, but to me the cost is well worth it!!&lt;/p&gt;

&lt;p&gt;If you have been looking for a new keyboard and are willing to dish out a little bit of money, then you will definitely not go wrong with this keyboard!!!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.developwithpassion.com"&gt;Develop With Passion®&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=_YD23gV2nzY:XBJuQ2eImbs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=_YD23gV2nzY:XBJuQ2eImbs:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=_YD23gV2nzY:XBJuQ2eImbs:XQ266DUsA9M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=XQ266DUsA9M" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=_YD23gV2nzY:XBJuQ2eImbs:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JPBoodhoo/~4/_YD23gV2nzY" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.developwithpassion.com/2011/09/review-kinesis-advantage-pro-keyboard</feedburner:origLink></entry>
 
 <entry>
   <title>Keymando - Version 1.0.3 is out and a small taste of what's on the horizon!!</title>
   <link href="http://feedproxy.google.com/~r/JPBoodhoo/~3/LwYsZP5Kfo8/keymando-version-1-0-3-is-out-and-a-small-taste-of-whats-on-the-horizon" />
   <updated>2011-09-09T09:00:00-05:00</updated>
   <id>http://blog.developwithpassion.com/2011/09/keymando-version-1-0-3-is-out-and-a-small-taste-of-whats-on-the-horizon</id>
   <content type="html">&lt;p&gt;&lt;a href="http://keymando.com"&gt;Keymando&lt;/a&gt; version 1.0.3 is out, and we have opened up a long awaited trial mode so that people can give it a whirl.  We understand that a $20 price tag for most developers is not spent lightly, so we want to make sure that people get time to play with it. For anyone who knows me and know what a keyboard freak I am, I can literally say, that I can't even use a machine that does not have this program on it anymore!! I am going to create some small 1-2 minute screen casts that will
demonstrate some of the worflows that I use on a day to day basis.&lt;/p&gt;

&lt;p&gt;There are many constructs, algorithms and patterns that go into making this thing sing. &lt;a href="http://kevin.colyar.net"&gt;Kevin&lt;/a&gt; and I are hard at work adding new features, and for now we are going to keep the lid closed on 2 awesome features that are coming down the pipe. I can say with complete confidence that it will revolutionize the way you use osx with the keyboard!!&lt;/p&gt;

&lt;p&gt;It is also beneficial to know that we have a small, but growing, community of plugin developers who are writing freely available plugins and making them available through the official &lt;a href="https://github.com/keymando"&gt;keymando plugin repository&lt;/a&gt;. 2 that I use quite often are the:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://github.com/keymando/underscore"&gt;underscore&lt;/a&gt; - Great if you like to type with underscores when you code (or if you are like me, all over the place!!)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/keymando/abbrev"&gt;abbrev&lt;/a&gt; - An abbreviation plugin that emulates complex text expansion!!&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;What more OSX power users and developers need to realize, is that there is so much you can do for customization if you know how to code ruby. For regular users we are keeping the barrier to entry as low as possible and keeping the dsl as "simple" for the 80/20 rule. For developers who know ruby, well, you are really only limited by your imagination.&lt;/p&gt;

&lt;p&gt;We are going to be adding more capabilities to the core pipeline that will be exposed to plugin developers, or just simple config scripts. So hold onto your hats!! For now we are also not focusing on any fancy user interfaces, as we are currently focusing on growing the core engine. The pretty UI's for some of the features will come in time!!&lt;/p&gt;

&lt;p&gt;For now, I'll leave you with a large section of code from my current .keymandorc.rb file (the main configuration script). Keep in mind that some of the code in this file is based on the main line of development!! Hopefully most of it will be self descriptive enough for me to not need to include comments.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;  
&lt;span class="c1"&gt;# Ignore the following apps&lt;/span&gt;
&lt;span class="n"&gt;disable&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Remote Desktop Connection&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;disable&lt;/span&gt;&lt;span class="sr"&gt; /VirtualBox/&lt;/span&gt;

&lt;span class="c1"&gt;#commands----------------------------------------------------&lt;/span&gt;
&lt;span class="n"&gt;launch_firefox&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;launch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Firefox&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;quit_the_current_application&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;send_keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;lt;Cmd-q&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:description&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Quit current application&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="ss"&gt;:remember&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;vimperator_pass_through_mode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;send_keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;lt;Shift-Escape&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;gmail_send_new_mail&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;send_keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;lt;Shift-Tab&amp;gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;gmail_send_reply_mail&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;send_keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;lt;Shift-Tab&amp;gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;gmail_discard_new_mail&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;send_keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;lt;Shift-Tab&amp;gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;gmail_discard_reply_mail&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;send_keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;lt;Shift-Tab&amp;gt;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;screen_flow_stop_recording&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;send_keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;lt;Cmd-Shift-2&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;window_hide_current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;send_keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;lt;Cmd-w&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;#end_commands----------------------------------------------------&lt;/span&gt;
 
&lt;span class="c1"&gt;#----------------------------------------&lt;/span&gt;
&lt;span class="c1"&gt;#core_shortcuts&lt;/span&gt;
&lt;span class="c1"&gt;#----------------------------------------&lt;/span&gt;
&lt;span class="n"&gt;toggle&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;Cmd-9&amp;gt;&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;Cmd-d&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;lt;Cmd-Shift-Tab&amp;gt;&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;Cmd-e&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;Escape&amp;gt;&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;Cmd-f&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;lt;Cmd-Tab&amp;gt;&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;Cmd-h&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;Left&amp;gt;&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;Cmd-j&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;Down&amp;gt;&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;Cmd-k&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;Up&amp;gt;&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;Cmd-l&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;Right&amp;gt;&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;Cmd-m&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;Tab&amp;gt;&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;Cmd-,&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;Shift-Tab&amp;gt;&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;Cmd-n&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;Ctrl-n&amp;gt;&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;Cmd-r&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;RightClick&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;instance&lt;/span&gt;
&lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;Cmd-0&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;Cmd-Shift-D&amp;gt;&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;Cmd-c&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="no"&gt;RunLastCommand&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;instance&lt;/span&gt;
&lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;Cmd- &amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;launch_quicksilver&lt;/span&gt;

&lt;span class="c1"&gt;# end_core_shortcuts---------------------&lt;/span&gt;

&lt;span class="c1"&gt;#mnemonic_mappings-----------------------&lt;/span&gt;
&lt;span class="vi"&gt;@window_management&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;wm&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;mercury_mover_move_window&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;wfs&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;Divvy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;full_screen&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;wtl&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;Divvy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;top_left&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;wtr&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;Divvy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;top_right&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;wbl&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;Divvy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bottom_left&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;wbr&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;Divvy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bottom_right&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;wl&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;Divvy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;left&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;wr&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;Divvy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;right&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;wt&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;Divvy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;top&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;wb&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;Divvy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bottom&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;wc&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;Divvy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;center&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;w&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;window_hide_current&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="vi"&gt;@itunes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;iiv&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;itunes_increase_volume&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;div&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;itunes_decrease_volume&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;bt&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;itunes_browse_tracks&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="vi"&gt;@firefox&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;fi&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;launch_firefox&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;pp&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;vimperator_pass_through_mode&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
 

&lt;span class="vi"&gt;@quicksilver&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;mi&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;show_current_menu_items&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;wi&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;show_current_app_windows&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
 
&lt;span class="vi"&gt;@gmail&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;msn&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;gmail_send_new_mail&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;msr&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;gmail_send_reply_mail&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;mdn&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;gmail_send_reply_mail&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;mdr&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;gmail_discard_reply_mail&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
 
&lt;span class="vi"&gt;@skype&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;sl&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;skype_login&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;scp&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;skype_call_phones&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="vi"&gt;@sound&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;sts&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;switch_to_speakers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;sti&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;switch_to_imic&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
 
&lt;span class="vi"&gt;@general_mappings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;aa&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;app_code_all_items&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;rel&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;reload_configuration&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;ls&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;lock_the_screen&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;x&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;quit_the_current_application&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;gmm&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;gotomeeting_mute_me&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;sr&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;screen_flow_stop_recording&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;ntt&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;things_new_task&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;jj&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;RunHistoryItem&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;instance&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;#end_mnemonic_mappings------------------------------------------------------------&lt;/span&gt;

&lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt;Cmd-y&amp;gt;&amp;quot;&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; 
  &lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vi"&gt;@general_mappings&lt;/span&gt;
         &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;merge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vi"&gt;@window_management&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
         &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;merge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vi"&gt;@itunes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
         &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;merge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vi"&gt;@firefox&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
         &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;merge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vi"&gt;@quicksilver&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
         &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;merge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vi"&gt;@gmail&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
         &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;merge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vi"&gt;@skype&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
         &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;merge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vi"&gt;@sound&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Happy keyboarding!!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.developwithpassion.com"&gt;Develop With Passion®&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=LwYsZP5Kfo8:MXjOZ7ngWt0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=LwYsZP5Kfo8:MXjOZ7ngWt0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=LwYsZP5Kfo8:MXjOZ7ngWt0:XQ266DUsA9M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=XQ266DUsA9M" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=LwYsZP5Kfo8:MXjOZ7ngWt0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JPBoodhoo/~4/LwYsZP5Kfo8" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.developwithpassion.com/2011/09/keymando-version-1-0-3-is-out-and-a-small-taste-of-whats-on-the-horizon</feedburner:origLink></entry>
 
 <entry>
   <title>Switching between multiple twitter accounts with TwitVim</title>
   <link href="http://feedproxy.google.com/~r/JPBoodhoo/~3/FCFvEVeCcbw/switching-between-twitter-accounts-with-twitvim" />
   <updated>2011-09-05T09:00:00-05:00</updated>
   <id>http://blog.developwithpassion.com/2011/09/switching-between-twitter-accounts-with-twitvim</id>
   <content type="html">&lt;p&gt;For the last couple of years now, I have been making use of &lt;a href="http://www.vim.org/scripts/script.php?script_id=2204"&gt;TwitVim&lt;/a&gt; to twitter from within vim. Seeing how much time I actually spend on twitter, it has been a good fit and enables me to help maintain focus without getting drowned out by the twitterverse. Plus I'm a vim freak, so the more I can use it for the better.&lt;/p&gt;

&lt;p&gt;I often have to switch between posting/reading from multiple twitter accounts. In order to do this effectively, I came up with a quick hack to allow me to switch rapidly.&lt;/p&gt;

&lt;p&gt;Under my [devtools] folder I have an automation folder that contains a bunch of automation scripts that I have accumulated over the years. Under there I have my vim folder, here is the screenshot:&lt;/p&gt;

&lt;div class="thumbnail"&gt;&lt;a href="https://skitch.com/jpboodhoo/fsudd/terminal-zsh-80x24"&gt;&lt;img style="max-width:638px" src="https://img.skitch.com/20110905-pc5swff4mftp8ypyi2p3perpg4.medium.jpg" alt="Terminal — zsh — 80×24" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span&gt;Uploaded with &lt;a href="http://skitch.com"&gt;Skitch&lt;/a&gt;!&lt;/span&gt;&lt;/div&gt;


&lt;p&gt;As you can see, each of my OAuth tokens for the respective user accounts is stored in this folder. The twitvim script, is trivial ruby script to copy the appropriate token into the place where TwitVim looks for the token to do Twitter authentication:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c1"&gt;#!/usr/bin/env ruby&lt;/span&gt;

&lt;span class="n"&gt;twitter_user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;ARGV&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;

&lt;span class="no"&gt;Dir&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chdir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dirname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;__FILE__&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="sb"&gt;`cp &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;twitter_user&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;.twitvim.token ~/.twitvim.token`&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Currently I can run this script passing in the account I want to switch to and startup vim and twitter using that account!!&lt;/p&gt;

&lt;p&gt;What I want to be able to do is call this script from inside of Vim as so:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;!&lt;/span&gt; Switch_twitter_user&lt;span class="p"&gt;(&lt;/span&gt;user&lt;span class="p"&gt;)&lt;/span&gt;
  ResetLoginTwitter
  &lt;span class="k"&gt;let&lt;/span&gt; user_name &lt;span class="p"&gt;=&lt;/span&gt; a:user
  &lt;span class="k"&gt;let&lt;/span&gt; switch_command &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="c"&gt;&amp;quot;twitvim &amp;quot;.user_name.&amp;quot;&amp;quot;&lt;/span&gt;
  .&lt;span class="p"&gt;!&lt;/span&gt;switch_command
&lt;span class="k"&gt;endfunction&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Only problem I am having is a bit of trouble with the last line of the function (shelling out with the command, I can't seem to get the substitution working correctly). I am just blasting this down right now, so, if anyone knows it would be greatly appreciated. That is literally the first vim script method I have written!!&lt;/p&gt;

&lt;p&gt;That small wrinkle aside. You can be inside vim issue the ResetLoginTwitter command and then manually shell out to the twitvim script passing the correct username and you can carry on twittering on the different account.&lt;/p&gt;

&lt;p&gt;Hope this helps!!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.developwithpassion.com"&gt;Develop With Passion®&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=FCFvEVeCcbw:BXnLa_O_xog:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=FCFvEVeCcbw:BXnLa_O_xog:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=FCFvEVeCcbw:BXnLa_O_xog:XQ266DUsA9M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=XQ266DUsA9M" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=FCFvEVeCcbw:BXnLa_O_xog:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JPBoodhoo/~4/FCFvEVeCcbw" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.developwithpassion.com/2011/09/switching-between-twitter-accounts-with-twitvim</feedburner:origLink></entry>
 
 <entry>
   <title>The Journey To Test-Driven: A Startup Tale - Take The Survey</title>
   <link href="http://feedproxy.google.com/~r/JPBoodhoo/~3/Atf01PwLXF8/the-journey-to-test-driven-a-startup-tale-take-the-survey" />
   <updated>2011-08-31T09:00:00-05:00</updated>
   <id>http://blog.developwithpassion.com/2011/08/the-journey-to-test-driven-a-startup-tale-take-the-survey</id>
   <content type="html">&lt;p&gt;In 2 hours Mike Iwasiow will be giving a &lt;a href="http://webinars.developwithpassion.com/webinars/5"&gt;webinar&lt;/a&gt; on the impact of TDD for his startup.&lt;/p&gt;

&lt;p&gt;If you have time please take the following survey:&lt;/p&gt;

&lt;script type="text/javascript" src="http://i0.poll.fm/survey.js" charset="UTF-8"&gt;&lt;/script&gt;


&lt;p&gt;&lt;noscript&gt;&lt;a href="http://developwithpassion.polldaddy.com/s/the-journey-to-test-driven-a-startup-tale-1"&gt;Take Our Survey!&lt;/a&gt;&lt;/noscript&gt;&lt;/p&gt;

&lt;script type="text/javascript"&gt;
  polldaddy.add( {
    type: 'button',
    title: 'Take Our Survey!',
    style: 'rounded',
    text_color: 'FFFFFF',
    back_color: '000000',
    domain: 'developwithpassion.polldaddy.com/s/',
    id: '3B6503B56F5008D3'
  } );
&lt;/script&gt;


&lt;p&gt;We are extremely interested in what your teams are doing!!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.developwithpassion.com"&gt;Develop With Passion®&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=Atf01PwLXF8:5N7kVSR7MME:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=Atf01PwLXF8:5N7kVSR7MME:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=Atf01PwLXF8:5N7kVSR7MME:XQ266DUsA9M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=XQ266DUsA9M" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=Atf01PwLXF8:5N7kVSR7MME:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JPBoodhoo/~4/Atf01PwLXF8" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.developwithpassion.com/2011/08/the-journey-to-test-driven-a-startup-tale-take-the-survey</feedburner:origLink></entry>
 
 <entry>
   <title>My Birthday Present Discount To You!!!</title>
   <link href="http://feedproxy.google.com/~r/JPBoodhoo/~3/5UUG7sL4lqc/my-birthday-present-discount" />
   <updated>2011-08-27T08:00:00-05:00</updated>
   <id>http://blog.developwithpassion.com/2011/08/my-birthday-present-discount</id>
   <content type="html">&lt;p&gt;Hey everyone, today is my &lt;b&gt;birthday&lt;/b&gt;, and I am feeling generous!!&lt;/p&gt;

&lt;p&gt;To anyone who is thinking about attending one of the upcoming &lt;b&gt;Develop With Passion® bootcamps&lt;/b&gt; in either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.eventbrite.com/event/2011507473"&gt;Medicine Hat, AB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.eventbrite.com/event/1445494513"&gt;Edmonton, AB&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;If you register before &lt;b&gt;September 30th, 2011&lt;/b&gt; and use the discount code &lt;b&gt;early_bird&lt;/b&gt; you will receive the following discounts off the registration fee:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Medicine Hat - $500 CAD off.&lt;/li&gt;
&lt;li&gt;Edmonton - $1000 CAD off.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;a href="http://www.developwithpassion.com"&gt;Develop With Passion®&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://lansingninjas.files.wordpress.com/2011/02/nin-brthday.png" alt="birthday pic" /&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=5UUG7sL4lqc:Dq1mEFrmLeQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=5UUG7sL4lqc:Dq1mEFrmLeQ:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=5UUG7sL4lqc:Dq1mEFrmLeQ:XQ266DUsA9M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=XQ266DUsA9M" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=5UUG7sL4lqc:Dq1mEFrmLeQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JPBoodhoo/~4/5UUG7sL4lqc" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.developwithpassion.com/2011/08/my-birthday-present-discount</feedburner:origLink></entry>
 
 <entry>
   <title>Officially Announcing Develop With Passion® - Webinars</title>
   <link href="http://feedproxy.google.com/~r/JPBoodhoo/~3/6FaudN0tZJU/officially-announcing-develop-with-passion--webinars" />
   <updated>2011-07-21T06:00:00-05:00</updated>
   <id>http://blog.developwithpassion.com/2011/07/officially-announcing-develop-with-passion--webinars</id>
   <content type="html">&lt;p&gt;The proverbial bottle has been smashed against the side of the ship and &lt;a href="http://webinars.developwithpassion.com"&gt;Develop With Passion® - Webinars&lt;/a&gt; are finally up and running. The site design will clean up over the next little while, but that is a small detail!!&lt;/p&gt;

&lt;p&gt;This has been something that I have talked about doing for a little bit over a year, I finally decided to stop talking and get moving with it!!  With a pool of extremely eager speakers to pull from, I feel confident that there is going to be material that covers topics across all areas of the spectrum.&lt;/p&gt;

&lt;p&gt;Currently the speaker lineup is comprised entirely of Develop With Passion® alumni (over 1500 and counting!!). The only request that I make of them when lining up presentations, is that they present on something that they are currently interested in. There are no restrictions to platform, technology, or even a particular approach.  There is no prompting from me whatsover in the direction I wish them to present!! Starting in January of 2012, the floor will be open to have anyone come and give
a presentation, not just Develop With Passion® - Alumni. For now it allows me to use a "trused group" to work out some of the kinks and ensure the best delivery experience over time.&lt;/p&gt;

&lt;p&gt;Lots of the presenters will be very skilled in the areas they are presenting in; others will not be skilled but are excited and engaged in a particular topic and just want to share their excitement with others. One of the things that I try to stress to people is the importance of maintaining the excitement for what you do, and not falling into traps of complacency that ultimately lead to boredom.&lt;/p&gt;

&lt;p&gt;These webinars are not meant to be the "best way to do things", even though in a large percentage of them I am sure you will see some battle tested approaches for leveraging the tools/platforms/techniques in question. First an foremost these webinars are a way to provide a venue for people who:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Care about what they do&lt;/li&gt;
&lt;li&gt;Are engaged in their day to day jobs&lt;/li&gt;
&lt;li&gt;Want to share with others&lt;/li&gt;
&lt;li&gt;Are not focused on being "the best" but "their best" each day.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;The current schedule permits a webinar every 2 weeks.  Each session is recorded and made available on the &lt;a href="http://webinars.developwithpassion.com"&gt;webinars&lt;/a&gt; site after the video has been rendered. Post session links will also be made available on the website after the video has been posted.  I plan to present approximately every 5th presentation.&lt;/p&gt;

&lt;p&gt;At this time, if you have any requests for topics that you would like to see either myself of the group present on, we welcome suggestions.&lt;/p&gt;

&lt;p&gt;God Bless You!!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.developwithpassion.com"&gt;Develop With Passion®&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=6FaudN0tZJU:ZdZZp2uEa_g:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=6FaudN0tZJU:ZdZZp2uEa_g:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=6FaudN0tZJU:ZdZZp2uEa_g:XQ266DUsA9M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=XQ266DUsA9M" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=6FaudN0tZJU:ZdZZp2uEa_g:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JPBoodhoo/~4/6FaudN0tZJU" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.developwithpassion.com/2011/07/officially-announcing-develop-with-passion--webinars</feedburner:origLink></entry>
 
 <entry>
   <title>Webinar - Compositional and Convention-based Web Development With FubuMVC</title>
   <link href="http://feedproxy.google.com/~r/JPBoodhoo/~3/pn1YNxVHKcc/webinar-compositional-and-convention-based-web-development-with-fubumvc" />
   <updated>2011-07-14T09:00:00-05:00</updated>
   <id>http://blog.developwithpassion.com/2011/07/webinar-compositional-and-convention-based-web-development-with-fubumvc</id>
   <content type="html">&lt;h2&gt;"The MVC framework that doesn't get in your way."&lt;/h2&gt;

&lt;p&gt;&lt;b&gt;Time: Wednesday July 20th,2011 - 12PM-1PM MST&lt;/b&gt;&lt;br/&gt;
&lt;b&gt;Registration Limit:(100)&lt;/b&gt;&lt;br/&gt;
&lt;b&gt;Reserve your Webinar seat now at:&lt;a href="https://www1.gotomeeting.com/register/131448736"&gt;https://www1.gotomeeting.com/register/131448736&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;

&lt;h2&gt;Session Overview&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://fubumvc.com"&gt;FubuMVC&lt;/a&gt; is a .NET open-source front-controller MVC web
framework. Fubu (which stands for "for us, by us") focuses on rapid development,
pluggability, and convention-based configuration. It tries to focus on SOLID
principles, composability, separation of concerns, DRY, and other critical
concepts of rapid, frictionless and pain-free web development. There are several
differentiating features from ASP.NET MVC, such as behavior chains, packaging,
routing conventions, HTML conventions, and much more.&lt;/p&gt;

&lt;h2&gt;Agenda&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Starting Bare Bones from the FubuMVC NuGet package&lt;/li&gt;
&lt;li&gt;Exploring the Getting Started Sample from the FubuMVC Guides&lt;/li&gt;
&lt;li&gt;Configuring Routes via Conventions&lt;/li&gt;
&lt;li&gt;View Location and Discovery&lt;/li&gt;
&lt;li&gt;Clean Controller Actions with Behavior Chains&lt;/li&gt;
&lt;li&gt;HTML Markup Generated By View Model Conventions&lt;/li&gt;
&lt;li&gt;Ultimate Modularity with Packages (Bottles)&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;Speaker Bio&lt;/h2&gt;

&lt;p&gt;&lt;img src="http://gravatar.com/avatar/33713bd5a6ccd703e81022cf17a61fa8?size=200" height="200" alt="Mike Murray" /&gt;&lt;br/&gt;
&lt;a href="http://murrayon.net"&gt;Mike Murray&lt;/a&gt; is a software engineer for
&lt;a href="https://www.extendhealth.com"&gt;Extend Health, Inc.&lt;/a&gt; After being raised in
Houston, TX, he received a bachelor's degree in Computer Science from Brigham
Young University and has resided in Utah for the last 8 years. Mike has been
primarily developing with C# and .NET for 7 years, and currently entertains
interests in F#, Ruby, and JavaScript on the side. At Extend Health, he is
participating in the migration of the company's production website from ASP.NET
MVC to FubuMVC, while also contributing back bug fixes and features to the
open-source project. When not busy spending time with his wife and two kids,
Mike tries to participate where he can at local user groups and code camps.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.developwithpassion.com"&gt;Develop With Passion®&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=pn1YNxVHKcc:PAQdzL-BnN4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=pn1YNxVHKcc:PAQdzL-BnN4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=pn1YNxVHKcc:PAQdzL-BnN4:XQ266DUsA9M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=XQ266DUsA9M" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=pn1YNxVHKcc:PAQdzL-BnN4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JPBoodhoo/~4/pn1YNxVHKcc" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.developwithpassion.com/2011/07/webinar-compositional-and-convention-based-web-development-with-fubumvc</feedburner:origLink></entry>
 
 <entry>
   <title>Relearning how to type (almost)</title>
   <link href="http://feedproxy.google.com/~r/JPBoodhoo/~3/9Fj1X5F0t7Q/relearning-how-to-type-almost" />
   <updated>2011-07-11T09:00:00-05:00</updated>
   <id>http://blog.developwithpassion.com/2011/07/relearning-how-to-type-almost</id>
   <content type="html">&lt;p&gt;My new keyboard just arrived and the next couple of days is going to have a little bit of a learning curve attached to it. Historically I have been a fairly big fan of trying out new input mechanisms, and I have a feeling that this unit is going to be a great typing tool.&lt;/p&gt;

&lt;p&gt;Take a look at the following screenshot of the new keyboard:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.kinesis-ergo.com/images/kb_adv-pro_met720x471.jpg" alt="Keyboard" /&gt;&lt;/p&gt;

&lt;p&gt;The coolest thing about the layout of this keyboard is the complete repositioning of the majority of the modifier keys. From a comfortability perspective it is a genius stroke to alter the position of the backspace, enter and space keys (among others) to maximize the ability to use your stronger thumbs for pressing these keys vs your weaker pinky finger. Of course this remapping is going to take a little while to adjust to, but as I type this post I am already  feeling the difference of having access to keys like the space,enter and backspace keys right and my thumbtips.&lt;/p&gt;

&lt;p&gt;Another great feature of the keyboard is that it supports full on-board programmability for device level macros that are not bound to the particular operating system you are targeting. I have already taken advantage of this feature to do some basic remapping to optimally support the modified key scheme that I have been using for the last couple of years. As well as to take account for the way that I have my modifier keys organized for the primary OS that I use (osx).&lt;/p&gt;

&lt;p&gt;......2 days later&lt;/p&gt;

&lt;p&gt;I am absolutely loving this keyboard, the comfortability factor of typing with this unit is quite incredible. There is still quite a bit of adaptation that needs to happen, but I feel confident that placing my natural keyboard into storage 2 days ago was the right decision!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.developwithpassion.com"&gt;Develop With Passion®&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=9Fj1X5F0t7Q:j1XOl-qs8UM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=9Fj1X5F0t7Q:j1XOl-qs8UM:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=9Fj1X5F0t7Q:j1XOl-qs8UM:XQ266DUsA9M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=XQ266DUsA9M" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=9Fj1X5F0t7Q:j1XOl-qs8UM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JPBoodhoo/~4/9Fj1X5F0t7Q" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.developwithpassion.com/2011/07/relearning-how-to-type-almost</feedburner:origLink></entry>
 
 <entry>
   <title>Webinar - Professional Database Change Management With RoundhousE</title>
   <link href="http://feedproxy.google.com/~r/JPBoodhoo/~3/jZA7FT8ALLw/webinar-professional-database-change-management-with-roundhouse" />
   <updated>2011-07-02T09:00:00-05:00</updated>
   <id>http://blog.developwithpassion.com/2011/07/webinar-professional-database-change-management-with-roundhouse</id>
   <content type="html">&lt;h2&gt;"Because everyone wants to kick their database, but sometimes kicking your database is a good thing!"&lt;/h2&gt;

&lt;p&gt;&lt;b&gt;Time: Wednesday July 6th,2011 - 9PM-10PM CST&lt;/b&gt;&lt;br/&gt;
&lt;b&gt;Registration Limit:(100)&lt;/b&gt;&lt;br/&gt;
&lt;b&gt;Reserve your Webinar seat now at:&lt;a href="https://www1.gotomeeting.com/register/190865849"&gt;https://www1.gotomeeting.com/register/190865849&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://github.com/ferventcoder/roundhouse/raw/master/docs/logo/RoundhousE_Logo.jpg" height="200" alt="RoundhousE" /&gt;&lt;/p&gt;

&lt;h2&gt;Session Overview&lt;/h2&gt;

&lt;p&gt;Many would not argue that you need to version your code, and few would argue that you should version your code in a way that can lead you back to a specific point in source control history. However, most people don't really think of doing the same with your database. That's where RoundhousE comes in. RoundhousE versions your database how you want. Not to mention it's one of the most intelligent database migrations tools out there, it also helps you keep your scripts in source control in a way that makes sense. We'll walk through the tool and its features and then open for questions. You'll see how it can make database change management extremely simple for you and how it makes auditors and DBAs smile. RoundhousE - you know you want to learn more...&lt;/p&gt;

&lt;h2&gt;Agenda&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Talk a little about the importance of database scripts in source control&lt;/li&gt;
&lt;li&gt;Presentation on needs for a migration tool&lt;/li&gt;
&lt;li&gt;RoundhousE tool and Demos&lt;/li&gt;
&lt;li&gt;Open for Questions&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;About The Presenter&lt;/h2&gt;

&lt;p&gt;&lt;img src="http://a1.twimg.com/profile_images/1176943763/IMG_3766.JPG" height="200" alt="Rob Reynolds / FerventCoder" /&gt;&lt;br/&gt;
Rob Reynolds has been programming in .NET since the early days of 1.0. In his day job he gets his hands dirty as a technical lead in the world of crop insurance. Who would have thought his prior experiences with calculus and FFA would have ever come in handy?! Rob is a C# MVP, an MCSD for .NET, holds a bachelor's degree in MIS from Kansas State University, is active in the Topeka .Net User Group, a regional INETA speaker, an eagle scout, and a veteran officer of the US Army Reserve. Rob enjoys spending time with his wife and kids when his wife hasnt locked him in the basement to work on any of the OSS projects he manages.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.developwithpassion.com"&gt;Develop With Passion®&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=jZA7FT8ALLw:0b5aMQzG1ZE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=jZA7FT8ALLw:0b5aMQzG1ZE:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=jZA7FT8ALLw:0b5aMQzG1ZE:XQ266DUsA9M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=XQ266DUsA9M" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=jZA7FT8ALLw:0b5aMQzG1ZE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JPBoodhoo/~4/jZA7FT8ALLw" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.developwithpassion.com/2011/07/webinar-professional-database-change-management-with-roundhouse</feedburner:origLink></entry>
 
 <entry>
   <title>TwitVim and Direct Message - Getting Them Working Again</title>
   <link href="http://feedproxy.google.com/~r/JPBoodhoo/~3/ZPQiW-Dqqus/twitvim-and-direct-message-getting-them-working-again" />
   <updated>2011-07-02T09:00:00-05:00</updated>
   <id>http://blog.developwithpassion.com/2011/07/twitvim-and-direct-message-getting-them-working-again</id>
   <content type="html">&lt;p&gt;For the last couple of year I have been using Vim to twitter using the awesome &lt;a href="http://www.vim.org/scripts/script.php?script_id=2204"&gt;TwitVim&lt;/a&gt; client. I like to keep the distraction factor low during my days, so it is a client that matches both criteria of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Using Vim for as many of many of my day to day tasks as possible.&lt;/li&gt;
&lt;li&gt;No annoying toast windows, popups or the like to pull the focus away.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I just went to check some direct messages and I got good old error code 93:"This application is not allowed to access or delete your direct messages".&lt;/p&gt;

&lt;p&gt;This has to do with the OAuth token being an old token that is no longer valid for the new permission scheme.&lt;/p&gt;

&lt;p&gt;Simple fix was to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Delete the twitvim_token_file (by default in $HOME/.twitvim.token)&lt;/li&gt;
&lt;li&gt;Try and access twitvim functionality again - which will force a reauthentication and issuing of a new oauth token.&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;After that everything is working again as normal.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.developwithpassion.com"&gt;Develop With Passion®&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=ZPQiW-Dqqus:_ITJm8iKGI0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=ZPQiW-Dqqus:_ITJm8iKGI0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=ZPQiW-Dqqus:_ITJm8iKGI0:XQ266DUsA9M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=XQ266DUsA9M" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=ZPQiW-Dqqus:_ITJm8iKGI0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JPBoodhoo/~4/ZPQiW-Dqqus" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.developwithpassion.com/2011/07/twitvim-and-direct-message-getting-them-working-again</feedburner:origLink></entry>
 
 <entry>
   <title>Develop With Passion® - Tools For Getting Things Done (Webinar)</title>
   <link href="http://feedproxy.google.com/~r/JPBoodhoo/~3/KEH0MCnFpUM/develop-with-passion--tools-for-getting-things-done-webinar" />
   <updated>2011-06-16T07:00:00-05:00</updated>
   <id>http://blog.developwithpassion.com/2011/06/develop-with-passion--tools-for-getting-things-done-webinar</id>
   <content type="html">&lt;h2&gt;Overview&lt;/h2&gt;

&lt;p&gt;Tools For Getting Things Done is a &lt;strong&gt;Free!!&lt;/strong&gt; one hour introduction to a small subset of tools that Develop With Passion® uses to "get things done".&lt;/p&gt;

&lt;p&gt;In a busy digital world, your attention can often be pulled in several different directions. It can often be helpful as "technologists" to leverage tools that enable you to focus on the things you need to get done as much as possible, which ultimately can free your time for more important things over the long run.&lt;/p&gt;

&lt;p&gt;This session will introduce you to some tools and give you some ideas of possible worflows for how these tools can be used in the context of day to day activities, all resulting in a net effect of freeing your mind to focus on more important things.&lt;/p&gt;

&lt;h2&gt;Core Concepts Overview&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Strategies for handling your physical mail - aka "How to deal with your real spam"!!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Managing your "ink" repositories - aka "Where was that notebook that I wrote that in again"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Managing your browsing lifecycle - aka "What was that page I was looking at again"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Notes everywhere - all the time.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;Requirements&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Computer with access to an internet connection&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Good audio setup (recommendations &lt;a href="https://www2.gotomeeting.com/default/help/g2w/Webinar_Presentation/Audio_Best_Practices.htm"&gt;here&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Passion for learning - Absolutely Mandatory!!!&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;This is the first mass webinar format that Develop With Passion® is attempting, so lots of feedback will be greatly appreciated from those who take the time to attend!!&lt;/p&gt;

&lt;p&gt;This webinar is limited to 100 attendees.&lt;/p&gt;

&lt;p&gt;Register &lt;a href="https://www1.gotomeeting.com/register/565141449"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.developwithpassion.com"&gt;Develop With Passion®&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=KEH0MCnFpUM:n5uHPrT8sVA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=KEH0MCnFpUM:n5uHPrT8sVA:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=KEH0MCnFpUM:n5uHPrT8sVA:XQ266DUsA9M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=XQ266DUsA9M" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=KEH0MCnFpUM:n5uHPrT8sVA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JPBoodhoo/~4/KEH0MCnFpUM" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.developwithpassion.com/2011/06/develop-with-passion--tools-for-getting-things-done-webinar</feedburner:origLink></entry>
 
 <entry>
   <title>New feature for developwithpassion.specifications (nested contexts!!)</title>
   <link href="http://feedproxy.google.com/~r/JPBoodhoo/~3/gVaUREiiG7g/new-feature-for-developwithpassion-specifications-nested-contexts" />
   <updated>2011-05-11T09:00:00-05:00</updated>
   <id>http://blog.developwithpassion.com/2011/05/new-feature-for-developwithpassion-specifications-nested-contexts</id>
   <content type="html">&lt;p&gt;Technically this is a patch that I added to &lt;a href="https://github.com/developwithpassion/machine.specifications"&gt;mspec&lt;/a&gt;, so it is there also!! Instead of talking about it, I will demonstrate with a bit of contrived example:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="n"&gt;abstract&lt;/span&gt; &lt;span class="n"&gt;class&lt;/span&gt; &lt;span class="n"&gt;concern&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Observes&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;SimpleCalculator&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="n"&gt;class&lt;/span&gt; &lt;span class="n"&gt;when_adding_two_numbers&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;concern&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;Establish&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;connection&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;depends&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;IDbConnection&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="n"&gt;first_number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;second_number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="n"&gt;Because&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sut&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first_number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;second_number&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="n"&gt;class&lt;/span&gt; &lt;span class="n"&gt;and_both_numbers_are_positive&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;It&lt;/span&gt; &lt;span class="n"&gt;should_not_open_a_connection_to_the_database&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
      &lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;never_received&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Open&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="n"&gt;class&lt;/span&gt; &lt;span class="n"&gt;and_one_of_the_numbers_are_negative&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Establish&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;first_number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="n"&gt;It&lt;/span&gt; &lt;span class="n"&gt;should_open_a_connection_to_the_database&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
      &lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;received&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Open&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="n"&gt;It&lt;/span&gt; &lt;span class="n"&gt;should_return_the_sum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ShouldEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first_number&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;second_number&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;IDbConnection&lt;/span&gt; &lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;second_number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;first_number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="n"&gt;class&lt;/span&gt; &lt;span class="n"&gt;SimpleCalculator&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;IDbConnection&lt;/span&gt; &lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;SimpleCalculator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IDbConnection&lt;/span&gt; &lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;connection&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;number1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;number2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;number1&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;number2&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Open&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;number1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;number2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;As you can see from this example. Nested contexts can be a useful tool when you want to have a different organizational mechanism for how you structure and separate concerns.&lt;/p&gt;

&lt;p&gt;The root concern [when_adding_two_numbers] contains its own establish, because and it blocks. &lt;br/&gt;
Each of the nested contexts alters the setup as needed to test a different aspect of the component under a different context. And they also have their own it blocks to make their concern specific observations!!&lt;/p&gt;

&lt;p&gt;For information, it is important to note that this is nothing more than a different organizational tool. You can express the exact same tests currently in &lt;a href="https://github.com/developwithpassion/machine.specifications"&gt;mspec&lt;/a&gt; without needing to use nested contexts.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.developwithpassion.com"&gt;Develop With Passion®&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=gVaUREiiG7g:3RYtjrIJ6g4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=gVaUREiiG7g:3RYtjrIJ6g4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=gVaUREiiG7g:3RYtjrIJ6g4:XQ266DUsA9M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=XQ266DUsA9M" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=gVaUREiiG7g:3RYtjrIJ6g4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JPBoodhoo/~4/gVaUREiiG7g" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.developwithpassion.com/2011/05/new-feature-for-developwithpassion-specifications-nested-contexts</feedburner:origLink></entry>
 
 <entry>
   <title>Creating the SUT explicitly in developwithpassion.specifications</title>
   <link href="http://feedproxy.google.com/~r/JPBoodhoo/~3/YObmXh_vS1w/creating-the-sut-explicitly-in-developwithpassion-specifications" />
   <updated>2011-04-07T09:00:00-05:00</updated>
   <id>http://blog.developwithpassion.com/2011/04/creating-the-sut-explicitly-in-developwithpassion-specifications</id>
   <content type="html">&lt;p&gt;There will be times when you will want to explicilty specify how the SUT should be created when you are inheriting from either of the following classes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Observes&amp;lt; SUT &gt;&lt;/li&gt;
&lt;li&gt;Observes&amp;lt; Contract , SUT &gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;To accomplish this you need to leverage the following block of code in the Establish block for your context:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;  &lt;span class="n"&gt;sut_factory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create_using&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;factory&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Factory will be of type SUTFactory&lt;SUT&gt; which is bascially just a delegate type that takes no arguments and returns an instance of the system under test.&lt;/p&gt;

&lt;p&gt;Most likely you will be using it as follows:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;  &lt;span class="n"&gt;sut_factory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create_using&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Calculator&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; 
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Hope this helps out!!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.developwithpassion.com"&gt;Develop With Passion®&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=YObmXh_vS1w:fHTMjK2B2Hg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=YObmXh_vS1w:fHTMjK2B2Hg:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=YObmXh_vS1w:fHTMjK2B2Hg:XQ266DUsA9M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=XQ266DUsA9M" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JPBoodhoo?a=YObmXh_vS1w:fHTMjK2B2Hg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JPBoodhoo?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JPBoodhoo/~4/YObmXh_vS1w" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://blog.developwithpassion.com/2011/04/creating-the-sut-explicitly-in-developwithpassion-specifications</feedburner:origLink></entry>
 
 
</feed>

