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

<channel>
	<title>James Rodenkirch &#187; software</title>
	<atom:link href="http://www.rodenkirch.com/category/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.rodenkirch.com</link>
	<description>Web - Technology - Life</description>
	<lastBuildDate>Wed, 16 Jun 2010 21:48:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Building Debian Packages</title>
		<link>http://www.rodenkirch.com/2010/06/building-debian-packages/</link>
		<comments>http://www.rodenkirch.com/2010/06/building-debian-packages/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 21:16:30 +0000</pubDate>
		<dc:creator>James Rodenkirch</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[deb]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[package management]]></category>

		<guid isPermaLink="false">http://www.rodenkirch.com/?p=132</guid>
		<description><![CDATA[I&#8217;ve been playing around with the idea of using debian packages to deploy updates to various servers (virtual machines, dev servers, production servers etc). I was curious to see how this could work for a variety of tasks, but mostly I needed a way to help keep our development virtual machine up to date without [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been playing around with the idea of using debian packages to deploy updates to various servers (virtual machines, dev servers, production servers etc). I was curious to see how this could work for a variety of tasks, but mostly I needed a way to help keep our development virtual machine up to date without physically maintaining a virtual disc that all developers use. Because we each modify the vm to fit in our specific environment, the need to enforce the existence of *packages* and not specific *configuration* is paramount &#8211; this turned out to be a godsend for us.<br />
<span id="more-132"></span><br />
When I started researching how to build a .deb package  I was a little overwhelmed by the initial information that turned up in a web search, but after digging around and testing I found that building a package is pretty easy. My initial confusion stemmed from the fact that all the examples I found documented how to include application source that gets compiled when the package is installed &#8230; I did not want to compile source code, I just wanted to supply a list of dependencies and supply a few apache configuration files. Rest assured, you can bundle up configuration file changes into a debian package, let me show you how. For this example, I will show you how to ensure the server has needed packages installed, and we will add a virtual host configuration for a new site.</p>
<h3>Preparing for the build</h3>
<p>The internals to a .deb are fairly straightforward. First you need a directory called &#8220;DEBIAN&#8221; that contains a few files that detail and control the processing during installation; this directory and all files contained in it MUST be named exactly as you see them below. Secondly, you need to include the full target directory structure for any files that you want to copy over during installation. You can have as many directory structures as needed for your package.</p>
<h4>Example:</h4>
<pre>+ setup
    + DEBIAN
        - control
        - debian-binary
        - postinst
        - postrm
        - preinst
        - prerm
    + etc
        + apache2
            + sites-availalble
                - mysite</pre>
<h4><strong>Explanation</strong>:</h4>
<ul>
<li> <span style="text-decoration: underline;">setup</span>: This is just the top level directory that holds the contents you want to package up &#8211; call it whatever you want</li>
<li> <span style="text-decoration: underline;">DEBIAN</span>: This is the directory that holds the instructions for deploying the package. This must be in all caps.</li>
<li> <span style="text-decoration: underline;">DEBIAN/control</span>: This is the control file for the package. It contains meta data and dependancy information &#8211; more on this later.</li>
<li> <span style="text-decoration: underline;">DEBIAN/debian-binary</span>: This file just contains the version number for the package manager you are using.</li>
<li> <span style="text-decoration: underline;">DEBIAN/postinst</span>: This is a shell script that gets executed after installation</li>
<li> <span style="text-decoration: underline;">DEBIAN/postrm</span>: This is a shell script that gets executed after removal</li>
<li> <span style="text-decoration: underline;">DEBIAN/preinst</span>: This is a shell script that gets executed before installation</li>
<li> <span style="text-decoration: underline;">DEBIAN/prerm</span>: This is a shell script that gets executed before removal</li>
<li> <span style="text-decoration: underline;">etc/apache2/sites-available</span>: This is the directory structure that matches the target system. This structure gives the package the path on where to copy over the &#8220;mysite&#8221; file</li>
<li> <span style="text-decoration: underline;">mysite</span>: this is the apache virtual host configuration file that i want to copy to the server</li>
</ul>
<h3>Configuration</h3>
<p><strong><span style="text-decoration: underline;">DEBIAN/control</span></strong></p>
<p>We need to add our configuration data to the control file.</p>
<p>Also, since our application uses some PHP features for CuRL and memcache, I need to make sure that the target system has the appropriate packages installed.</p>
<p>Full details on the control file can be found <a title="debian.org" href="http://www.debian.org/doc/FAQ/ch-pkg_basics.en.html#s-controlfile" target="_blank">here</a>, but for our needs we can just use the following:</p>
<pre>Package: serversetup
Version: 1.0
Section: devel
Priority: optional
Architecture: amd64
Depends: memcached, php5-curl, php5-memcache
Installed-Size: 4
Maintainer: My Name &lt;my@email.com&gt;
Description: Setup package for MySite</pre>
<h4>Explanation:</h4>
<ul>
<li><span style="text-decoration: underline;">Package</span>: This is the name of your package.</li>
<li><span style="text-decoration: underline;">Version</span>: This is the version number of your package. Make sure to increment for subsequent releases.</li>
<li><span style="text-decoration: underline;">Section</span>: This is the section where the package is stored in the Debian FTP sites.</li>
<li><span style="text-decoration: underline;">Priority</span>: This is the priority for installation of the package. Setting this helps apt sort the package properly when installing multiple items.</li>
<li><span style="text-decoration: underline;">Architecture</span>: This is chip architecture you are packaging for.</li>
<li><span style="text-decoration: underline;">Depends</span>: This is the list of packages that need to be installed for your package to install/run properly</li>
<li><span style="text-decoration: underline;">Installed-Size</span>: This is the amount of space that will be taken up by installing the package.</li>
<li><span style="text-decoration: underline;">Maintainer</span>: This is the name and email of the person who maintains the package</li>
<li><span style="text-decoration: underline;">Description</span>: This is a brief summary of the package contents</li>
</ul>
<p><strong><span style="text-decoration: underline;">DEBIAN/debian-binary</span></strong></p>
<p>This file just contains the version number for the package manager. So just put the text: &#8220;2.0&#8243; followed by a line break.</p>
<p><strong><span style="text-decoration: underline;">mysite</span></strong></p>
<p>This file contains the apache virtual host configuration.</p>
<pre>&lt;VirtualHost *&gt;
    ServerName mysite.com
    DocumentRoot /var/www/vhosts/mysite/pub
&lt;/VirtualHost&gt;</pre>
<h3>Scripts</h3>
<p>This package is pretty simple, so we really only need to worry about running a few commands after the package is installed. For our purposes here, the postinst script will fit our needs.</p>
<pre>#!/bin/bash

# add document root
mkdir -p /var/www/vhosts/mysite/pub
echo "&lt;h1&gt;Empty Document Root&lt;/h1&gt;" &gt; /var/ww/vhosts/mysite/pub/index.html

# enable vhost
a2ensite mysite
/etc/init.d/apache2 restart</pre>
<h3>Building the Package</h3>
<p>Now that we have our control file defined and our scripts written, we can move on to bundling all these files together into an actual debian package. To do this, we just run a single command:</p>
<pre>dpkg -b /path/to/setup serversetup_1.0_amd64.deb</pre>
<p>Obviously you need to adjust the first parameter to match the location of your setup directory, and you may adjust the name of your .deb file to meet your needs. Typically you will want to name it something in line with the pattern &#8220;package_version_architecture.deb&#8221;.</p>
<p>Full detains on naming conventions can be found <a href="http://www.debian.org/doc/FAQ/ch-pkg_basics.en.html#s-pkgname" target="_blank">here</a>.</p>
<h3>Installing the Package</h3>
<p>One of the great things about debian packages is the auto solving of dependancy issues. The thing with manually installing a local package via dpkg is that it does not resolve the dependancies for you, it just errors out and lists what you need to resolve yourself.</p>
<p>If you want to have the dependancies resolved for you, use <strong>gdebi</strong> instead to install packages. All dependencies specified in your control file will be handled just like installing a remote package via apt-get.</p>
<pre>sudo gdebi /path/to/serversetup_1.0_amd64.deb</pre>
<h1>Taking it Further</h1>
<p>By using this method it is now possible for all developers in my group to create their own virtual machine and get up and running with minimal effort. My setup package details all the needed packages that we use for development to make sure that the virtual machine is running everything we need it too. I also bundled some php extensions that we use for charting and debugging so setting these items up is a minimal task.</p>
<p>I&#8217;m currently looking at using debian packages to deploy large scale php application updates to a cluster of servers. In theory we should be able to set up an apt repository and allow each individual server pull down and install updates with the built in package manager.</p>
<p>Have any comments or ideas on how to make this better? Please share!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rodenkirch.com/2010/06/building-debian-packages/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>QT is going LGPL</title>
		<link>http://www.rodenkirch.com/2009/01/qt-is-going-lgpl/</link>
		<comments>http://www.rodenkirch.com/2009/01/qt-is-going-lgpl/#comments</comments>
		<pubDate>Wed, 14 Jan 2009 15:41:38 +0000</pubDate>
		<dc:creator>James Rodenkirch</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[QT]]></category>

		<guid isPermaLink="false">http://www.rodenkirch.com/?p=110</guid>
		<description><![CDATA[Holy crap batman!!! I saw on slashdot today that Nokia is going to be releaseing QT under the LGPL license starting with version 4.5 (site). Back in the day, when I was toying with leaving the web industry and going more into traditional software developement, QT caught my eye. The thing that stopped me from [...]]]></description>
			<content:encoded><![CDATA[<p>Holy crap batman!!!</p>
<p>I saw on slashdot today that Nokia is going to be releaseing QT under the LGPL license starting with version 4.5 (<a href="http://www.qtsoftware.com/">site</a>). Back in the day, when I was toying with leaving the web industry and going more into traditional software developement, QT caught my eye. The thing that stopped me from diving into QT at that time, was the $5000 license fee for anything non open source.</p>
<p>Now that it is being released as LGPL only, there are no more entry fees. Guess I will be looking at QT again <img src='http://www.rodenkirch.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.rodenkirch.com/2009/01/qt-is-going-lgpl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL Dump Compatibility</title>
		<link>http://www.rodenkirch.com/2009/01/mysql-dump-compatibility/</link>
		<comments>http://www.rodenkirch.com/2009/01/mysql-dump-compatibility/#comments</comments>
		<pubDate>Wed, 07 Jan 2009 15:59:28 +0000</pubDate>
		<dc:creator>James Rodenkirch</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysqldump]]></category>

		<guid isPermaLink="false">http://www.rodenkirch.com/?p=99</guid>
		<description><![CDATA[At my current job I am constantly dumping mysql databases from a v5 server to import into a v3 server. In order for this to work, I have to dump the database in a mode that is compatible with version 3. Here is a quick reference for the compatibility modes available for mysqldump. ansi mysql323 [...]]]></description>
			<content:encoded><![CDATA[<p>At my current job I am constantly dumping mysql databases from a v5 server to import into a v3 server. In order for this to work, I have to dump the database in a mode that is compatible with version 3. Here is a quick reference for the compatibility modes available for mysqldump.<span id="more-99"></span></p>
<ul>
<li>ansi</li>
<li>mysql323</li>
<li>mysql40</li>
<li>postgresql</li>
<li>oracle</li>
<li>mssql</li>
<li>db2</li>
<li>maxdb</li>
<li>no_key_options</li>
<li>no_table_options</li>
<li>no_field_options</li>
</ul>
<p>So, for my purposes I can execute the following command:</p>
<pre lang="BASH">mysqldump my_database --compatible=mysql323 &gt; sql.dmp</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.rodenkirch.com/2009/01/mysql-dump-compatibility/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Task Based Time Tracking</title>
		<link>http://www.rodenkirch.com/2008/09/task-based-time-tracking/</link>
		<comments>http://www.rodenkirch.com/2008/09/task-based-time-tracking/#comments</comments>
		<pubDate>Tue, 16 Sep 2008 21:52:53 +0000</pubDate>
		<dc:creator>James Rodenkirch</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[tasktop]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://www.rodenkirch.com/?p=21</guid>
		<description><![CDATA[As a developer. it is very common to be required to report actual time spent working on a project or task. Sometimes the data is used for project planning, and sometimes your time is actually billed back to the customer. Over the last few years, I have used a variety of means of tracking time, [...]]]></description>
			<content:encoded><![CDATA[<p>As a developer. it is very common to be required to report actual time spent working on a project or task. Sometimes the data is used for project planning, and sometimes your time is actually billed back to the customer. Over the last few years, I have used a variety of means of tracking time, some that made me cringe, and some that are almost a pleasure to use.<span id="more-21"></span></p>
<h3>The Spreadsheet</h3>
<p>One of my previous employers had a consulting firm put together a really crappy web based time tracking application. The system pulled project/defect ids from a different system and automatically made them available to the user in the &#8220;interface&#8221; so that we could enter in how many hours we worked on a specific task. Management wanted us to update this information daily, but it took so long to manually track and enter that data, that I ended up creating my own method behind the scenes and using it.</p>
<p>I built an excel spreadsheet that had multiple sheets and some &#8220;advanced&#8221; (well, advanced for me) features like automatic data collection based on project and fancy pie charts. It allowed me to monitor how much time I spent on non-project related tasks, and it had the added benefit of allowing me to easily import that data into the company time tracking application. Using the spreadsheet instead of the crappy web interface actually saved me about 1-2 hours a week.</p>
<p>Something that always bothered me about this method was the fact that I had to have a spreadsheet open all day, and since I never used excel except for that, it seemed like wasted cpu and memory &#8211; not to mention that in order to update my status I had to leave my dev environment which took away even more time from actual coding.</p>
<h3>The Gnome Applet</h3>
<p>My current employer sometimes needs me to report my time, so I have gone on a time tracking tool quest again. At first I tried to use <a href="http://projecthamster.wordpress.com/" target="_blank">Hamster</a>, which is a Gnome applet for tracking your time on generic &#8220;activities&#8221;. I initially set this up with each activity being a trac id + description, and then just kept switching the active activity as my day went on. At the end of the day, I could look up the activity total and manually update trac as needed. This seemed to work very well, and I used it for a number of weeks.</p>
<p>While this method was very flexible, it still lacked some features and seemed to add unneeded maintenance to my already busy day. I stopped using it after a while and just started estimating my time instead of actually tracking it, since I was not gaining much automation.</p>
<p style="text-align: center;">[ad#<span class="adrow_name">tg-tshirts</span><span class="adrow_name">]</span></p>
<h3>The Eclipse Plugin</h3>
<p>Since most of my development happens inside of Eclipse (PDT or Zend Studio etc), I wanted to find an integrated solution that was flexible and easy to use. I ended up finding <a href="http://www.eclipse.org/mylyn/" target="_blank">Mylyn</a> and I was very intrigued. This plugin has built-in support for some common project/defect management systems like bugzilla and trac and allows the user to link up your eclipse task list with the external tool. With this setup I can add the task list view to my layout, and just click on the task that I am working on to start/stop the timer. If I need to switch to a different task, I can just select the new task from my view and move on &#8211; no need to leave the development environment or spend time switching to a different application to update my status. Any task status updates made in trac, automatically propagate down to my task list, and I can even push some updates back to trac. Mylyn even remembers what files were open while working on a task, and will &#8220;reset&#8221; your workspace to go back to the state it was in the last time you left it.</p>
<p>Mylyn seems very cool, but it lacks basic reporting features. While it is nice to see the total amount of time spent on a task, I need to know how much time I spend on that task today, or this week &#8211; not just the aggregate. Another annoyance is that even though *most* of my day is spent in eclipse, I still need to track time spent in meetings/research/planning against a task, and with Mylyn, if it didn&#8217;t happen in eclipse, it did not happen at all.</p>
<h3>The Eclipse Plugin &#8211; Redux</h3>
<p>After a little more searching, I found <a href="http://tasktop.com/" target="_blank">Tasktop</a> which is a product built on top of Mylyn, but adds in nifty features like a dashboard for quick reporting, report creation and export (very handy), and the ability to adjust times or add new sub tasks as needed. They have a cool screen cast of the reporting features <a href="http://tasktop.com/videos/1.2/introduction/reporting/" target="_blank">here</a> which really shows how flexible and powerful the tool is. You can also turn off the &#8220;inactivity&#8221; feature of Tasktop to allow the timer to keep running even when eclipse is not the focused window.</p>
<p>I have only been using Tasktop for 2 days now, but I am really impressed with how easy it is for me to track my time on multiple tasks &#8211; it really seems to address the shortcomings of Mylyn. I look forward to the end of the week when I can generate a report of my time and submit the portion of my hours that are customer billable &#8211; all with little effort on my part. I&#8217;m sure that after using the tool a few more days I might find some hangups, but for now, I am in time tracking heaven.</p>
<h3>How About You?</h3>
<p>What do you use to track your time? I would love to learn about other tools that might help me be more productive.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rodenkirch.com/2008/09/task-based-time-tracking/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Does anyone do Agile Development correctly?</title>
		<link>http://www.rodenkirch.com/2008/09/does-anyone-do-agile-development-correctly/</link>
		<comments>http://www.rodenkirch.com/2008/09/does-anyone-do-agile-development-correctly/#comments</comments>
		<pubDate>Mon, 08 Sep 2008 20:10:27 +0000</pubDate>
		<dc:creator>James Rodenkirch</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[methodologies]]></category>

		<guid isPermaLink="false">http://home.rodenkirch.com/?p=3</guid>
		<description><![CDATA[Throughout my career I&#8217;ve had the opportunity to work for a few shops that claimed to be &#8216;Agile&#8217; but were really just using the term poorly and inflicting increasing amounts of stress on the developers by trying to manage a non-agile process/project in an agile manner. Now it is possible that you do not know [...]]]></description>
			<content:encoded><![CDATA[<div class="entry">
<p>Throughout my career I&#8217;ve had the opportunity to work for a few shops that claimed to be &#8216;Agile&#8217; but were really just using the term poorly and inflicting increasing amounts of stress on the developers by trying to manage a non-agile process/project in an agile manner.<span id="more-3"></span></p>
<p>Now it is possible that you do not know what Agile Development is, so let me pause and summarize a <a title="Wikipedia" href="http://en.wikipedia.org/wiki/Agile_software_development" target="_blank">wikipedia</a> article on the subject.</p>
<blockquote><p>Agile software development refers to a group of software development methodologies that promotes development iterations, open collaboration, and process adaptability throughout the life-cycle of the project. It chooses to do things in small increments, with minimal planning, rather than plan at length. This helps to minimize the overall risk, and allows the project to adapt to changes more quickly. There is also an emphasis on stakeholder involvement. Meaning at the end of each iteration, the stakeholder is consulted about the product and comments are noted.</p></blockquote>
<p><strong>From this article I get the following main points:</strong></p>
<ul>
<li>Emphasis is placed on producing working software as a measure of progress instead of project planning and documentation</li>
<li>Development time for each iteration or release is typically between 2-4 weeks</li>
<li>Strong reliance on unit tests. In fact the unit test is usually written before the actual development. Once the unit test passes, the development is considered complete</li>
<li>Constant communication with the customer is vital to ensure that the small changes being made are in line with the customers requirements</li>
</ul>
<p>The article even goes on to give some recommendations on what types of cultures work with agile methods:</p>
<p><strong>Agile:</strong></p>
<ul>
<li>Low criticality</li>
<li>Senior developers</li>
<li>Requirements change very often</li>
<li>Small number of developers</li>
<li>Culture that thrives on chaos</li>
</ul>
<p><strong>Plan-driven:</strong></p>
<ul>
<li>High criticality</li>
<li>Junior developers</li>
<li>Requirements don&#8217;t change too often</li>
<li>Large number of developers</li>
<li>Culture that demands order</li>
</ul>
<p>So in order for Agile Development to work, you need to have a small group of really good developers that WANT to work within these bounds. The problems that I continually see is that businesses see the benefits that come from using agile methodologies, so they make a decision to go that route without understanding the basic requirements that must be met to be successful. You must have a small team, or break the team up into smaller sub-teams. You must have talented programmers &#8211; trying to do this with junior developers will result in chaos. You must adhere to the process &#8211; use test driven development, and continually strive for technical excellence. You must empower your developers to do their jobs without running into roadblocks and trust them to do the right thing.</p>
<p>My current employer claims that we are an agile environment but we adhere to only one rule &#8211; short turn around on projects. In all reality we are more of a waterfall environment in an agile time frame. We do not have a unit testing framework, and many times our code is released without being tested by QA. I think a coworker summed it perfectly when he said &#8220;We do agile development without any of the safety nets&#8221;.</p>
<p>So this brings me to my question. Does anyone do Agile Development correctly? Is it possible to take an existing team and code base and make it into a successful agile environment?</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.rodenkirch.com/2008/09/does-anyone-do-agile-development-correctly/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
