<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>if(is_geek)... &#187; Work</title>
	<atom:link href="http://www.ifisgeek.com/category/work/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ifisgeek.com</link>
	<description>Look! A New Doot!</description>
	<lastBuildDate>Thu, 03 Sep 2009 04:51:49 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Running JSLint in Automated Build Scripts</title>
		<link>http://www.ifisgeek.com/2009/05/05/running-jslint-in-automated-build-scripts/</link>
		<comments>http://www.ifisgeek.com/2009/05/05/running-jslint-in-automated-build-scripts/#comments</comments>
		<pubDate>Tue, 05 May 2009 18:29:14 +0000</pubDate>
		<dc:creator>Jeffery Read</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[VendAsta]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[build scripts]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.ifisgeek.com/?p=224</guid>
		<description><![CDATA[At VendAsta we use automated build scripts and a TeamCity server for continuous integration. Whenever someone commits code to a project, a whole suite of automated build targets are run against the code base to check things like unit tests, python syntax (via pylint) and code coverage. One thing that was missing from the mix [...]]]></description>
			<content:encoded><![CDATA[<p>At <a href="http://www.vendasta.com">VendAsta</a> we use automated build scripts and a <a href="http://www.jetbrains.com/teamcity/">TeamCity</a> server for continuous integration. Whenever someone commits code to a project, a whole suite of automated build targets are run against the code base to check things like unit tests, python syntax (via pylint) and code coverage. One thing that was missing from the mix was the automated running of jslint to check the syntax of our ever-increasing corpus of JavaScript code. As it turns out, adding this to our ANT targets wasn&#8217;t all that difficult.</p>
<p>The only real difficulty you are likely to encounter in creating a JSLint target for your build scripts is that JSLint is, itself, written in JavaScript. Other helpful libraries such as JSMin or the YUICompressor from Yahoo are distributed as jar files and can be executed easily with an <code>exec</code> block with the executable set to java. With JSLint, however, you are going to need a JavaScript engine which you can execute from the command line in order to run the JSLint script to validate your JavaScript code. THis actually sounds harder than it is.</p>
<p>For our implementation, I chose to use the <a href="http://www.mozilla.org/rhino/">Rhino</a> engine since there is documented support for JSLint on it, and even a handy helper file to include in your system: <a href="http://www.JSLint.com/rhino/rhino.js">rhino.js</a>. Grab a copy of Rhino (the actual file you&#8217;ll want to include is js.jar), the Rhino helper script I just mentioned and <a href="http://www.JSLint.com/fulljslint.js">JSLint itself</a>. Place them all together into some sort of tools directory in your project. Ours is located in /tools/ant.</p>
<p>Now comes the fun part, writing the actual target in ANT. For our purposes, we want to process all .js files contained in a particular location, as defined in a build property called <code>jsdir</code>. We also want to ignore any files that are contained in a vendor subdirectory of <code>jsdir</code>, as we should not need to worry about third-party scripts that don&#8217;t pass JSLint. Let&#8217;s get things started with our basic, empty target:</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">&lt;!-- </span>
<span style="color: #808080; font-style: italic;">jslint - Runs lint checks on js files</span>
<span style="color: #808080; font-style: italic;">--&gt;</span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;jslint&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<h5>Listing 1: The basic, empty jslint target</h5>
</p>
<p>Within the target there are two things we are going to need. First a way to reference all of the files we want to operate over and second, the actual call to run JSLint on those files. For the first requirement we&#8217;ll use a <code>pathconvert</code> tag with a nested <code>fileset</code>. The <code>pathconvert</code> will allow us to generate a space-separated list of files and stuff that into a property which we&#8217;ll call <code>jsfiles</code>. The <code>fileset</code> block will do the actual work of finding the files in question. It will operate over <code>${jsdir}</code> including all .js files and excluding all .js files in the vendor subdirectory. Listing 2 shows the <code>pathconvert</code> block added to our empty target.</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">&lt;!-- </span>
<span style="color: #808080; font-style: italic;">jslint - Runs lint checks on js files</span>
<span style="color: #808080; font-style: italic;">--&gt;</span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;jslint&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;pathconvert</span> <span style="color: #000066;">pathsep</span>=<span style="color: #ff0000;">&quot; &quot;</span> <span style="color: #000066;">property</span>=<span style="color: #ff0000;">&quot;jsfiles&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;fileset</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${jsdir}&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;include</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;**/*.js&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;exclude</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;vendor/**/*.js&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/fileset<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/pathconvert<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<h5>Listing 2: The <code>pathconvert</code> block added to our target.</h5>
</p>
<p>Finally, it is time to add the actual call to JSLint. To allow our build scripts to work for multiple projects, we have pushed as much information into properties that get defined in project-specific files as possible. The location of the Rhino jar (js.jar) is placed into the property <code>js.jar</code> and the location of the JSLint script (jslint.js) is placed into the property <code>jslint.js</code>. With those properties suitably defined elsewhere, we have the final piece of our puzzle: the <code>exec</code> block. We have the executable set to java and failonerror set to true, so that our target will appropriately fail when JSLint fails to give our code a passing grade. The final target, including the <code>exec</code> block can be seen in listing 3.</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">&lt;!-- </span>
<span style="color: #808080; font-style: italic;">jslint - Runs lint checks on js files</span>
<span style="color: #808080; font-style: italic;">--&gt;</span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;jslint&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;pathconvert</span> <span style="color: #000066;">pathsep</span>=<span style="color: #ff0000;">&quot; &quot;</span> <span style="color: #000066;">property</span>=<span style="color: #ff0000;">&quot;jsfiles&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;fileset</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${jsdir}&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;include</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;**/*.js&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;exclude</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;vendor/**/*.js&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/fileset<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/pathconvert<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;exec</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${jsdir}&quot;</span> <span style="color: #000066;">executable</span>=<span style="color: #ff0000;">&quot;java&quot;</span> <span style="color: #000066;">failonerror</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">line</span>=<span style="color: #ff0000;">&quot;-jar ${js.jar} ${jslint.js} ${jsfiles}&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/exec<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<h5>Listing 3: The final target.</h5>
</p>
<p>Put all together, the <code>pathconvert</code> block stuffs the list of files to work on into the property <code>${jsfiles}</code> which is then passed as an argument to the jslint.js file. The jslint.js file is itself the first argument passed to the Rhino JavaScript engine (js.jar) which is run directly by java. Running your <code>ant jslint</code> target should give you some nice feedback on the syntax of your JavaScript code.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ifisgeek.com/2009/05/05/running-jslint-in-automated-build-scripts/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Reflections on MFS Sprint 1</title>
		<link>http://www.ifisgeek.com/2009/01/06/reflections-on-mfs-sprint-1/</link>
		<comments>http://www.ifisgeek.com/2009/01/06/reflections-on-mfs-sprint-1/#comments</comments>
		<pubDate>Wed, 07 Jan 2009 05:46:36 +0000</pubDate>
		<dc:creator>Jeffery Read</dc:creator>
				<category><![CDATA[Blogging]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[VendAsta]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[Long Way Round]]></category>
		<category><![CDATA[Planning]]></category>
		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://www.ifisgeek.com/?p=164</guid>
		<description><![CDATA[Today at VendAsta we had our first full day of planning for the MyFrontSteps Sprint #2. We did some high level planning yesterday as well as demoing and a post mortem for the first Sprint. Having had a chance to relax this evening watching a few episodes of Long Way Round with my wife, there [...]]]></description>
			<content:encoded><![CDATA[<p>Today at VendAsta we had our first full day of planning for the MyFrontSteps Sprint #2. We did some high level planning yesterday as well as demoing and a post mortem for the first Sprint. Having had a chance to relax this evening watching a few episodes of Long Way Round with my wife, there are a few things that have struck me about the whole Scrum process as it works at VendAsta.</p>
<p>First and foremost, I absolutely love the amount of planning and forethought that goes into each 30-day development sprint. My past two jobs had nothing that even remotely compares to this. One was an online grocery store (which just recently discontinued operations) which meant that most development was done within the demands of an operating e-business and as a result needed to be very seat-of-the-pants. The other was a manufacturing company which meant that development processes were heavily driven by the demands of sales and manufacturing departments and those demands could and would change in the blink of an eye. Needless to say, I have found the change to be very liberating.</p>
<p>That is not to say that we couldn&#8217;t do more planning. One of the things that we found working through our first sprint was that while we felt we had done a great deal of planning up front, there was actually a lot of granularity that we were lacking. This is something we are endeavoring to overcome in the planning for Sprint 2. As much as I love the planning sessions we are having and as exciting as I find the whole process, it is a very tiring and draining experience. Well worth it, but wearying nonetheless.</p>
<p>A second major thing that struck me was how well we worked as a team. Considering the fact that five people were placed on a development team, given a couple of weeks to do some research and get to know each other and then thrust into the middle of a very ambitious project, we somehow managed to work very well together. Coupling this with the fact that we are working with a large number of cutting edge technologies, I would have expected at least a little friction to develop somewhere in the team over the course of 30 days, but none did. I believe that this is largely due to the environment at VendAsta and their hiring process. Everyone who gets hired there has to go through a lunch with other developers whom they will be working with. If those devs don&#8217;t think that you are a good fit for the team and the company, you don&#8217;t get hired. I don&#8217;t know why more companies don&#8217;t operate this way. People from HR departments should use VendAsta as a case study in how to build a whole company that just &#8220;gels&#8221;.</p>
<p>Finally, in the past two days I have been very impressed with the manner in which some of the trouble spots from Sprint 1 have been discussed. Previously, I have experienced project post mortems that are nothing more than a gathering of people around a table to point fingers at each other. In our post mortem yesterday we were encouraged to be completely honest and frank about what we did and didn&#8217;t like about how Sprint 1 went. At no point was there any finger pointing and the blame game just didn&#8217;t happen. The maturity of my team mates and our &#8220;chickens&#8221; impressed me to no end.</p>
<p>So, that is about it for my impressions on Sprint 1. We&#8217;re neck deep in planning Sprint 2 right now so I am afraid that Episode 4 of Roger&#8217;s Wars will still be a couple of days away. I&#8217;ve had a few people contact me asking when the rest of the saga was going to unfold but with the holidays and now our sprint planning, I&#8217;m having trouble finding the time to do it when my head is not either a) jell-o or b) utterly focused on work. Tomorrow or the next day I hope to sit myself down with a pot of Earl Grey and hammer out the fourth installment. Thanks for your patience <img src='http://www.ifisgeek.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.ifisgeek.com/2009/01/06/reflections-on-mfs-sprint-1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Facebook Delivers a Painful End to the MFS Sprint 1</title>
		<link>http://www.ifisgeek.com/2008/12/23/facebook-delivers-a-painful-end-to-the-mfs-sprint-1/</link>
		<comments>http://www.ifisgeek.com/2008/12/23/facebook-delivers-a-painful-end-to-the-mfs-sprint-1/#comments</comments>
		<pubDate>Wed, 24 Dec 2008 04:02:50 +0000</pubDate>
		<dc:creator>Jeffery Read</dc:creator>
				<category><![CDATA[Blogging]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[VendAsta]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[MyFrontSteps]]></category>
		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://www.ifisgeek.com/?p=139</guid>
		<description><![CDATA[Here we are struggling to get our application tested thoroughly and polished up for the end of sprint when Facebook starts pulling all kinds of crazy shit on us.]]></description>
			<content:encoded><![CDATA[<p>The MyFrontSteps team at VendAsta is wrapping up our first sprint right now. The final three days are devoted to testing and bug-fixing our Facebook application, Homebook. As the Scrum Master for the team, this means that I get to triage the bugs as they come in, schedule the meetings required to close out the sprint and schedule the planning meetings for the next sprint. This is all in addition to working on fixing my own share of the bugs. While this might sound like a lot to have going on at once, and I&#8217;ll admit it has been a hectic couple of days, I am really not finding it all that bad. Compared to what I had been dealing with prior to VendAsta, namely fighting tooth and nail to get anyone to test anything so it could be released, this is a dream. A certain amount of stress and craziness is completely easy to handle when it is accompanied by actual productivity and real results.</p>
<p>This morning, however, was nearly intolerable for the whole team. Here we are struggling to get our application tested thoroughly and polished up for the end of sprint when Facebook starts pulling all kinds of crazy shit on us. Random logouts. Messages about account maintenance. Warnings about trying to set FBML for inactive accounts. We ended up with a decent number of new bugs filed that weren&#8217;t bugs at all. It was just Facebook having a seizure! Of course, once we figured out that there were some issues on the Facebook side of things we relaxed a bit. Still, it made for a rather exhausting day!</p>
<p>Owing to this exhaustion, Episode 3 of Roger&#8217;s Wars will not be hitting the ether this evening. It&#8217;ll be here soon enough, though!<br />
]]></content:encoded>
			<wfw:commentRss>http://www.ifisgeek.com/2008/12/23/facebook-delivers-a-painful-end-to-the-mfs-sprint-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Giving Back</title>
		<link>http://www.ifisgeek.com/2008/11/24/giving-back/</link>
		<comments>http://www.ifisgeek.com/2008/11/24/giving-back/#comments</comments>
		<pubDate>Mon, 24 Nov 2008 14:32:56 +0000</pubDate>
		<dc:creator>Jeffery Read</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[VendAsta]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.ifisgeek.com/2008/11/24/giving-back/</guid>
		<description><![CDATA[I have been a long time fan of open source software. Over the years I have utilized countless open source projects to accomplish large tasks with ease for both my day job and my consulting work. Using these projects has always saved me a lot of reinventing the wheel and has made work on projects [...]]]></description>
			<content:encoded><![CDATA[<p>I have been a long time fan of open source software. Over the years I have utilized countless open source projects to accomplish large tasks with ease for both my day job and my consulting work. Using these projects has always saved me a lot of reinventing the wheel and has made work on projects much easier.</p>
<p>For the past three and a half years, I have been working in a very heavy Microsoft shop. As a result, it was always difficult to get acceptance for open source projects at Cover-All. The more work I started doing on web projects the easier it became to bring some open source into the fold but there certainly wasn&#8217;t any interest in giving anything back to those projects we benefited from and, even if there was interest, there wouldn&#8217;t have been time to do so anyway.</p>
<p>At VendAsta, things are a lot different. Here is a company that not only embraces the use of open source projects but actually encourages everyone to give back to those projects if they make any improvements / changes to them. I absolutely love that! This has given me the opportunity to give back to my first open source project!</p>
<p>I have been doing some work on developing Facebook applications over the past few weeks. Specifically, I have been using the awesome <a href='http://code.google.com/p/pyfacebook/'>pyFacebook</a> library. This is a Python library which gives the same functionality as the Facebook-supplied PHP client library, except with the goodness of Python. A total bonus for us is the fact that the library includes functionality to work with <a href='http://code.google.com/appengine/'>Google App Engine</a>, another new technology we are using. There was a small gap in this functionality and that is where I found my opportunity. While everything was setup to work with retrieving information from Facebook in GAE (Google has disabled socket access in the version of Python available through GAE, so you need to use their urlfetch method instead of calls to httplib), the Photos.upload() method was not setup in the same manner. I needed to upload files to Facebook, so I modified the library to work the way I needed.</p>
<p>Once my mods were complete I sent them to the maintainer of the pyFacebook project and, after a few helpful suggestions from him, I had a version that he was willing to commit to the project&#8217;s svn repository: <a href='http://code.google.com/p/pyfacebook/source/detail?r=166'>http://code.google.com/p/pyfacebook/source/detail?r=166</a>. After that I was able to track down and fix an actual bug involving some infinite redirects: <a href='http://code.google.com/p/pyfacebook/source/detail?r=168'>http://code.google.com/p/pyfacebook/source/detail?r=168</a>.</p>
<p>Two very small contributions to a single project, but I am hopeful that this is only the beginning!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ifisgeek.com/2008/11/24/giving-back/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VendAsta: Day 1</title>
		<link>http://www.ifisgeek.com/2008/11/03/vendasta-day-1/</link>
		<comments>http://www.ifisgeek.com/2008/11/03/vendasta-day-1/#comments</comments>
		<pubDate>Tue, 04 Nov 2008 03:56:13 +0000</pubDate>
		<dc:creator>Jeffery Read</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[VendAsta]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[Mac]]></category>

		<guid isPermaLink="false">http://www.ifisgeek.com/2008/11/03/vendasta-day-1/</guid>
		<description><![CDATA[Today was my first day at VendAsta. Despite being incredibly sick, it was an awesome day. Everyone was super helpful and friendly. The coffee machine there absolutely lived up to its stellar reputation. And I am starting to get my groove on with the MacBook Pro.
Perhaps the thing I was most impressed with today, was [...]]]></description>
			<content:encoded><![CDATA[<p>Today was my first day at <a href='http://www.vendasta.com'>VendAsta</a>. Despite being incredibly sick, it was an awesome day. Everyone was super helpful and friendly. The coffee machine there absolutely lived up to its stellar reputation. And I am starting to get my groove on with the MacBook Pro.</p>
<p>Perhaps the thing I was most impressed with today, was the amount of thought and planning that has gone into their process and systems. From Google Apps for mail and documents, to JIRA for bug / feature tracking, Subversion for revision control and a couple of other technologies, the level of integration is astounding. Using Subversion commit hooks there are automated syntax checking and unit testing routines, integrated code review facilities and a whole pile of other stuff that I was briefly introduced to today. I know that I am missing a lot of details here, but everything I have seen has really impressed me. I am really working in a professional software development environment now. It&#8217;s great! I am sure I&#8217;ll be posting more details as I come to understand things better in the coming weeks.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ifisgeek.com/2008/11/03/vendasta-day-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Taste of VendAsta, A Side of Mac</title>
		<link>http://www.ifisgeek.com/2008/11/02/a-taste-of-vendasta-a-side-of-mac/</link>
		<comments>http://www.ifisgeek.com/2008/11/02/a-taste-of-vendasta-a-side-of-mac/#comments</comments>
		<pubDate>Sun, 02 Nov 2008 06:15:06 +0000</pubDate>
		<dc:creator>Jeffery Read</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[VendAsta]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Spokesmonster]]></category>

		<guid isPermaLink="false">http://www.ifisgeek.com/2008/11/02/a-taste-of-vendasta-a-side-of-mac/</guid>
		<description><![CDATA[On Friday I got my first taste of what it will be like working at VendAsta. I went there Friday afternoon to pick up my laptop &#8211; a MacBook Pro which I am using to write this. I have never worked with Macs before, so this is a somewhat novel experience. The shock to my [...]]]></description>
			<content:encoded><![CDATA[<p>On Friday I got my first taste of what it will be like working at VendAsta. I went there Friday afternoon to pick up my laptop &#8211; a MacBook Pro which I am using to write this. I have never worked with Macs before, so this is a somewhat novel experience. The shock to my system is somewhat lessened by the fact that I have my own laptop configured such that Ubuntu looks like Leopard. Emulating look and feel is a far cry from the actual experience. I&#8217;m adjusting slowly, but I am sure in time I&#8217;ll come to really enjoy this as the other devs at VendAsta do.</p>
<p>Anyway, back to my first taste of VendAsta. I arrived there shortly after 3pm to find the offices apparently deserted. I wandered around a little and found everyone in the back meeting room watching a video. The video in question was the second Spokesmonster promo for the <a href='http://www.myfrontsteps.com/steprep/'>StepRep</a> application. The first Spokesmonster video is embedded below. For me the fact that such creative and fun things are not only applauded internally, but also released for public consumption, is amazing. Coming from a place like Cover-All, where one of the graphic designers creates hilarious mock advertisements all of the time and the public face of the company remains a stark beige yawn, this is a brave new world.</p>
<p>Equally interesting / frightening was another presentation that was made involving a <a href='http://en.wikipedia.org/wiki/Finite_state_machine'>Finite State Machine</a>. Actual computer science is being performed at this company. This represents a quantum leap from the seat-of-the-pants type of environment I have been working in for the past three and a half years. I have to admit, it is a little daunting. There will definitely be  an element of culture shock for me as I move into a real, honest to goodness, software development environment. Very, very exciting.</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/rVj6O06Gt6U&#038;hl=en&#038;fs=1&#038;rel=0&#038;color1=0x2b405b&#038;color2=0x6b8ab6"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/rVj6O06Gt6U&#038;hl=en&#038;fs=1&#038;rel=0&#038;color1=0x2b405b&#038;color2=0x6b8ab6" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ifisgeek.com/2008/11/02/a-taste-of-vendasta-a-side-of-mac/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>End of an Era</title>
		<link>http://www.ifisgeek.com/2008/10/27/end-of-an-era/</link>
		<comments>http://www.ifisgeek.com/2008/10/27/end-of-an-era/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 04:39:48 +0000</pubDate>
		<dc:creator>Jeffery Read</dc:creator>
				<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.ifisgeek.com/2008/10/27/end-of-an-era/</guid>
		<description><![CDATA[Today was the first weekday of my post-Cover-All life. I had thought that it might be weird sleeping in and not going to work today but it was actually a great day. I got to spend a bunch of time with Kaelyn and watch a few episodes of Ken Burns&#8217; The Civil War. All-in-all, a [...]]]></description>
			<content:encoded><![CDATA[<p>Today was the first weekday of my post-Cover-All life. I had thought that it might be weird sleeping in and not going to work today but it was actually a great day. I got to spend a bunch of time with Kaelyn and watch a few episodes of Ken Burns&#8217; <em>The Civil War</em>. All-in-all, a good day.</p>
<p>Friday was my last day at Cover-All. It turned out to be a very good day as well. I actually did a decent amount of work, surprising even myself. Got Dustin up and running as the new master of all things Wizard and finished off a couple of tasks for myself. I spent a good deal of time saying goodbye to people and reminiscing.</p>
<p>I was very pleased when the CFO (my boss&#8217; boss) asked me to come to his office for a chat. Part of me was a little disappointed that he didn&#8217;t want to discuss <em>why</em> I was leaving &#8211; Cover-All is a great company with the potential to be even greater and I would have really liked it if my departure could open some eyes which could make it even better. Nevertheless, we had a very nice discussion about what I accomplished while I was there and a little about where I am going. He expressed his appreciation for my hard work and that made me feel really good &#8211; Cover-All&#8217;s CFO is a man that I have really enjoyed working with, a man I both respect and like.</p>
<p>For lunch I went out to Boston Pizza with about ten of the people who I have really built some bonds with. People that were more of friends than co-workers. Even though the service at Boston Pizza is absolute shit, it did have the side effect of giving us a little more time to sit and talk.</p>
<p>In the afternoon, there was cake. A <em>lot</em> of cake. There were not as many people invited to join in the cake as there should have been &#8211; my boss set things up but he sits with the downstairs IT people and my group sat upstairs. I think he underestimated the number of people upstairs that I actually worked with on a regular basis. Without a doubt the highlight of the whole cake event was the picture I was given &#8211; put together by Ian in Marketing with help from Dustin and a few others. It was a picture of some of the cast from the original <em>Star Trek</em> but they had replaced Kirk&#8217;s head with mine. Below it was a quote, &#8220;Prepare to leave orbit &#8211; those men can&#8217;t be saved.&#8221; &#8212; Evil Kirk. Priceless! I&#8217;ll scan it one of these days and add it up here for all to see.</p>
<p>The rest of the day passed quickly &#8211; lots of hands to shake and such. I had thought that I was not going to hear anything at all from the CEO but then, when I got home and checked my personal email, there was a very nice thank you message (and a &#8220;come back to us when you&#8217;re sick of the new guys&#8221; poke) he had sent in reply to the farewell message I sent to everyone I liked there. It was a very nice end to my day, and a nice way to close that chapter of my professional life.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ifisgeek.com/2008/10/27/end-of-an-era/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Paradigm Shift</title>
		<link>http://www.ifisgeek.com/2008/10/20/paradigm-shift/</link>
		<comments>http://www.ifisgeek.com/2008/10/20/paradigm-shift/#comments</comments>
		<pubDate>Tue, 21 Oct 2008 02:29:23 +0000</pubDate>
		<dc:creator>Jeffery Read</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.ifisgeek.com/2008/10/20/paradigm-shift/</guid>
		<description><![CDATA[This morning I gave my two weeks&#8217; notice at Cover-All. I have been there for three and a half years, but the time has come to move on. I have secured myself a programming position at VendAsta, a very progressive software development company here in Saskatoon. This move represents a very significant change in direction [...]]]></description>
			<content:encoded><![CDATA[<p>This morning I gave my two weeks&#8217; notice at Cover-All. I have been there for three and a half years, but the time has come to move on. I have secured myself a programming position at <a href="http://www.vendasta.com">VendAsta</a>, a very progressive software development company here in Saskatoon. This move represents a very significant change in direction career-wise.</p>
<p>I have had a pretty good run at Cover-All and my desire to move on is the result of many things. The biggest reason, however, is that I feel my skills as a programmer have begun to atrophy. Working at Cover-All there is no one I can learn from and, especially with the amount of management I have been doing lately, I have been writing very little code. My passion is for writing code and this move is going to get me back to that.</p>
<p>Even better, this move is going to get me back to working with Python &#8211; a language I haven&#8217;t spent much time with since my glory days back at Pic&#8217;n'Del. I&#8217;ll get to work with the framework Django and, from the reading I have done on it so far, it seems very sweet to work with. In fact, I am working on rebuilding this blog with Django to get the cobwebs off of my Python skills and get myself up to speed with the framework. I am not sure yet whether or not I&#8217;ll take that little project all of the way to completion, but if I do I&#8217;ll be sure to mention it here. In fact, I&#8217;ll likely be mentioning a lot more here in the future. A lot of people at VendAsta are big into blogging and, with a little luck, being surrounded by people like that will help inspire me to devote a little more time to it myself.</p>
<p>More to come&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ifisgeek.com/2008/10/20/paradigm-shift/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Build Multiple Productive Habits With Scoreboards</title>
		<link>http://www.ifisgeek.com/2007/08/15/build-multiple-productive-habits-with-scoreboards/</link>
		<comments>http://www.ifisgeek.com/2007/08/15/build-multiple-productive-habits-with-scoreboards/#comments</comments>
		<pubDate>Thu, 16 Aug 2007 05:04:20 +0000</pubDate>
		<dc:creator>Jeffery Read</dc:creator>
				<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.ifisgeek.com/2007/08/15/build-multiple-productive-habits-with-scoreboards/</guid>
		<description><![CDATA[Seinfeldian Chains
I am a huge fan of the productivity blog Lifehacker. I try my best to check out the site on a daily basis and am usually rewarded with a little tidbit or tool that helps to make my life much easier &#8211; it&#8217;s not all about Getting Things Done either. Recently, I read something [...]]]></description>
			<content:encoded><![CDATA[<h3>Seinfeldian Chains</h3>
<p>I am a huge fan of the productivity blog <a href="http://www.lifehacker.com">Lifehacker</a>. I try my best to check out the site on a daily basis and am usually rewarded with a little tidbit or tool that helps to make my life much easier &#8211; it&#8217;s not all about <a href="http://www.amazon.ca/gp/product/0142000280?ie=UTF8&#038;tag=ifisgeek-20&#038;linkCode=as2&#038;camp=15121&#038;creative=330641&#038;creativeASIN=0142000280">Getting Things Done</a><img src="http://www.assoc-amazon.ca/e/ir?t=ifisgeek-20&#038;l=as2&#038;o=15&#038;a=0142000280" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> either. Recently, I read something on Lifehacker about <a href="http://lifehacker.com/software/motivation/jerry-seinfelds-productivity-secret-281626.php">Jerry Seinfeld&#8217;s Productivity Secret</a>. The basic idea is that that way to get good at something is to do it every day. To that end, Jerry has a big full-year calendar on his wall and he crosses off every day in which he does his desired task &#8211; in his case, writing comedy. The key to success, Seinfeld says, is in not breaking the chain. With a big reminder like that in front of you, you will work really hard to challenge yourself to make as long a chain of days as possible.</p>
<h3>Scoreboards</h3>
<div class="right_image_cutout">
<a href='http://www.ifisgeek.com/wp-content/uploads/2007/08/tasks.jpg' title='Tasks in the first column'><img src='http://www.ifisgeek.com/wp-content/uploads/2007/08/tasks.jpg' alt='Tasks in the first column' /></a></p>
<h4>Figure 1: Tasks</h4>
</div>
<p>When I read this I was encouraged to share the system I use which is really quite similar. I use my system, however, to work on creating more than one productive habit. I call them <em>Scoreboards</em> because, well, that&#8217;s what they are. I start by making myself a new spreadsheet &#8211; I use Excel but OpenOffice or another spreadsheet app would work perfectly fine. Down the first column I list the tasks I want to make into habits, leaving the first two rows empty for the month and day information. I then add a &#8220;Totals&#8221; entry to the bottom of the list. See Figure 1.</p>
<p>In the first row I place the name of the month and in the second row I place the days of the month. I like to highlight the weekends to set them apart but your mileage may vary. Figure 2 shows this header but only for the month of August, subsequent months would follow to the right up until the page break is reached. With the number of tasks I am currently working on I find that I can fit two scoreboards on a piece of 8.5&#215;11 paper printed in landscape orientation and the one I am currently using has the end of August, all of September and most of October on it.</p>
<div class="center_image">
<a href='http://www.ifisgeek.com/wp-content/uploads/2007/08/header.jpg' title='Date Header'><img src='http://www.ifisgeek.com/wp-content/uploads/2007/08/header.jpg' alt='Date Header' width="98%" height="98%" /></a></p>
<h4>Figure 2: Date Header</h4>
</div>
<p>This layout leaves a nice grid pattern in between the tasks and the dates. When you complete a task on a particular day, just fill in the box at the intersection of the task and the date. Personally, I like to print the sheets out and fill in the blocks but there is no reason why you couldn&#8217;t just change the background color in the spreadsheet and keep the whole thing online, in a Google Spreadsheet, for example. At the end of each day, put the number of tasks done that day in the Totals row. With the number of tasks that I am working on, I try to aim for 4 per day or better.</p>
<h3>Why Do I Like This Better?</h3>
<div class="left_image_cutout">
<a href='http://www.ifisgeek.com/wp-content/uploads/2007/08/board.jpg' title='The Scoreboard'><img src='http://www.ifisgeek.com/wp-content/uploads/2007/08/board.jpg' alt='The Scoreboard' align='center' /></a></p>
<h4>Figure 3: The board</h4>
</div>
<p>Instead of using the number in the Totals row, I use different colors. I use green for making my target or better and then down through yellow, orange, red and black representing no tasks for that day. The scoreboard works on the same principle as the chaining used by Seinfeld, but with an added dimension. For tasks such as workouts which may follow a pattern other than every day, you can work to maintain the pattern for that task. Additionally, I find that the use of the colors in the Totals row provides some extra encouragement to get things done. If I am looking at my chart and am about to fill in a yellow when I have a chain of greens preceding it, that can often be the motivation I need to spend 20 minutes on a task that I would have ordinarily put off for another day.</p>
<p>Perhaps the thing I like best about this method is my ability to quickly tell how I am doing with my goals for a specific task or in general at a glance. In effect, this works for me like a Seinfeldian chain with a single goal: Be More Productive. As much as I wish I could leave things at a high level like that, I need more fine-grained control and motivation and by using Scoreboards, I have found a method that works exceedingly well for me. Hopefully it&#8217;ll work for some of you as well.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ifisgeek.com/2007/08/15/build-multiple-productive-habits-with-scoreboards/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Once Again Life Returns To Normal (Whatever That Is)</title>
		<link>http://www.ifisgeek.com/2007/06/23/once-again-life-returns-to-normal-whatever-that-is/</link>
		<comments>http://www.ifisgeek.com/2007/06/23/once-again-life-returns-to-normal-whatever-that-is/#comments</comments>
		<pubDate>Sat, 23 Jun 2007 06:10:59 +0000</pubDate>
		<dc:creator>Jeffery Read</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.ifisgeek.com/2007/06/23/once-again-life-returns-to-normal-whatever-that-is/</guid>
		<description><![CDATA[Wow! It has been a crazy few months. This past Monday we rolled out our new ordering system &#8211; a system that has been in the works for 17 months and was completely re-done in the past three. As I have mentioned here before, we were working on implementing DriveWorks, automation software for SolidWorks. Our [...]]]></description>
			<content:encoded><![CDATA[<p>Wow! It has been a crazy few months. This past Monday we rolled out our new ordering system &#8211; a system that has been in the works for 17 months and was completely re-done in the past three. As I have mentioned here before, we were working on implementing DriveWorks, automation software for SolidWorks. Our problems started quite early on in the game when we realized that we would be completely unable to automate the creation of our wetstamp drawings using SolidWorks. The main issue was the placement of field detail callouts &#8211; these little bubbles with numbers in them which reference detailed drawings later in the drawing package. When you are sitting in front of SW placing these is no problem but SW themselves told us there is no way to do it programmatically.</p>
<p>So, with SolidWorks basically bringing nothing to the table we realized we&#8217;d need to keep using AutoCAD to generate the drawings. Considering that DriveWorks automates SolidWorks this effectively removed all benefit from using DriveWorks. Also, we were having massive scalability problems with the web interface to the program, DriveWorks Live. So, the decision was made to build our own custom front and back end systems.</p>
<p>That was three months ago. That was 16,700 lines of code (not counting *anything* for the db) ago. That was untold hours of overtime ago. That was seemingly a lifetime ago.</p>
<p>So, now that we have that out of the way, life can begin to return to normal. At least as normal as it can be when expecting a baby and building a new house. Speaking of which, I have pictures of the house and pictures from the 3D ultrasound of the baby that I will be adding to the galleries in the near future. Lindsay is almost done her Computer Science class (C++ for a first year class?!?!!) and after that we just might start playing World of Warcraft again&#8230;if we can pry ourselves away from the Wii, that is.</p>
<p>So, expect to see more content here in the near future. I know I say that a lot and never come through but I am going to make a real effort this time. I have lots to talk about&#8230;it&#8217;s all been brewing up inside me and must be released. Later. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.ifisgeek.com/2007/06/23/once-again-life-returns-to-normal-whatever-that-is/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
