<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>appsCanadian.ca</title>
	
	<link>http://www.appscanadian.ca</link>
	<description>The "Teach Yourself Software Development" Experiment</description>
	<lastBuildDate>Mon, 11 Jan 2010 22:25:06 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/appsCanadian" /><feedburner:info uri="appscanadian" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly></feedburner:browserFriendly><item>
		<title>Peopleware – Describing The Best Office You’ll Never Work In</title>
		<link>http://www.appscanadian.ca/archives/peopleware-describing-the-best-office-youll-never-work-in/</link>
		<comments>http://www.appscanadian.ca/archives/peopleware-describing-the-best-office-youll-never-work-in/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 09:38:34 +0000</pubDate>
		<dc:creator>Jesse Hartwick</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Book Reviews]]></category>
		<category><![CDATA[Peopleware]]></category>

		<guid isPermaLink="false">http://www.appscanadian.ca/?p=31</guid>
		<description><![CDATA[There may be one or two readers out there who vaguely remember that, not  long after I started this blog, I invested a decent chunk of money on  some books on software and related subjects. I quickly discovered that  the job I had at the time really didn&#8217;t leave me with a [...]]]></description>
			<content:encoded><![CDATA[<p>There may be one or two readers out there who vaguely remember that, not  long after I started this blog, I invested a decent chunk of money on  some books on software and related subjects. I quickly discovered that  the job I had at the time really didn&#8217;t leave me with a &#8220;I&#8217;m going to go  home and read lots of technical books&#8221; feeling, so things didn&#8217;t progress  nearly as well as I would have liked. I read a chunk of Code Complete [<a href="http://www.amazon.com/gp/product/0735619670/?tag=appscanadia03-20">US</a>] [<a href="http://www.amazon.ca/gp/product/0735619670/?tag=appscanadianc-20">CAN</a>], but even that faded over time. I think I&#8217;m currently only about a  third of the way through that book even though I started over a year ago.</p>
<p>About a month ago, deciding I wanted to take a break from Code Complete,  I started reading Peopleware: Productive Projects and Teams [<a href="http://www.amazon.com/gp/product/0932633439/?tag=appscanadia03-20">US</a>] [<a href="http://www.amazon.ca/gp/product/0932633439/?tag=appscanadianc-20">CAN</a>]. It took me about three weeks  to get through it, reading it mainly on the bus to kill time, but it was  a distinctly fun read.</p>
<p>For those who are unfamiliar with the book, the book is a little more  than 200 pages of authors Tom DeMarco and Timothy Lister passing on their  managerial wisdom. With years of experience in the trenches developing  software, and also consulting with various companies, these two men have  quite a bit to say regarding how best to construct and keep productive  software development teams.</p>
<p>The book is quite obviously directed towards those in (and hopefully just  entering) the role of project manager for a software product. I can&#8217;t  review this book from that perspective, however, since I&#8217;m only three  years out of college and still quite solidly in the &#8220;lowly peon&#8221; stage of  my career. Truthfully, I hope never to become a manager of people since  my limited experience with any authority shows that it&#8217;s just not for me.  Besides, I know that since I like the idea of having power, that is an  absolutely awesome reason not to give me any. With that said, I&#8217;ll try to  review this book from my own non-managerial perspective.</p>
<p>My simple (and facetious) advice for those who feel unsatisfied by their  work environment, as I was at my last job, is this: Don&#8217;t read this book;  it will only depress you.</p>
<p>While reading this book, I couldn&#8217;t help but notice just how many things  described in its pages reflected my own negative feelings towards my  previous employer. To make matters worse, they cited books and studies  and legitimate sources! I discovered that there exists hard evidence that  not only could my environment have been better, but that what I had was  actually working against me!</p>
<p>This is actually a fundamental problem that a lot of people should  probably have when reading the book. No workplace, not even the highly  acclaimed Google offices, meet the high standards put forth in this text.  That&#8217;s the point, I believe. Much as a good developer strives to become a  better one, so too should a good employer also strive to improve.</p>
<p>The authors&#8217; explain that good knowledge workers (i.e. those whose main  task is to think about a problem, as opposed to those performing some  manner of manual labour) need three things to be successful:</p>
<ol>
<li> Knowledge workers need to be given what they need to succeed. This  means things like providing a quiet environment in which to work. Open  office environments may seem cost effective and appear foster teamwork  through ease of communication, but they&#8217;re actually sabotaging your  bottom line by wasting workers time by breaking their concentration.</li>
<li> Knowledge workers need to be treated as individuals, with varying  needs which will almost certainly differ from some, perhaps most, of  their colleagues. This means that although an office environment should  be built first for general success (based on actual studies and  statistics, rather than perceived cost effectiveness), yet it is  essential to be flexible to the needs of the individual.</li>
<li> A managers job is to support the knowledge worker, since it is the  knowledge worker, more than anything else, that directly affects the  bottom line. This means a good manager should be able to check his or her  ego at the door, beware of any &#8220;alpha male&#8221; tendancies he or she may  have, and work hard to keep distractions to a minimum.</li>
</ol>
<p>Getting these three things right is excessively hard work. To get even close to getting all three of these things working optimally should be seen as a monumental success. So if you do decide to read this book, try not to become too distraught over the seemingly Utopian environment it seems to describe. You&#8217;re likely not working in an environment which is perfect, but no one really is. With a little work, however, you can begin to effect change in your environment and take a step closer to office nirvana.</p>
<hr />
<p><span style="text-decoration: underline;">Side Note:</span><br />
I&#8217;ve decided that my next task will be to read The Structure and Interpretation of Computer Programs (SICP) [<a href="http://www.amazon.com/gp/product/0262011530/?tag=appscanadia03-20">US</a>] [<a href="http://www.amazon.ca/gp/product/0262011530/?tag=appscanadianc-20">CAN</a>].</p>
<p>I&#8217;m going to work through the entirety of this book, including all exercises and projects. I realize that this is a lofty goal, but I&#8217;m certainly going to try. As I work through the text, I will endeavour to blog about my progress, section by section, the whole way through.</p>
<p>Wish me luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.appscanadian.ca/archives/peopleware-describing-the-best-office-youll-never-work-in/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Few MySQL Issues</title>
		<link>http://www.appscanadian.ca/archives/a-few-mysql-issues/</link>
		<comments>http://www.appscanadian.ca/archives/a-few-mysql-issues/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 16:01:51 +0000</pubDate>
		<dc:creator>Jesse Hartwick</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[design]]></category>

		<guid isPermaLink="false">http://www.appscanadian.ca/?p=26</guid>
		<description><![CDATA[I got really disillusioned with the StackOverflow Offline Viewer (which I&#8217;m calling FlowOnTheGo, at least for now) last week when I tried to load just the question/answer bodies into a testing table I made in MySQL.
The first issue I ran into had a lot to do with escaping quotes. Namely that I wasn&#8217;t doing it [...]]]></description>
			<content:encoded><![CDATA[<p>I got really disillusioned with the StackOverflow Offline Viewer (which I&#8217;m calling FlowOnTheGo, at least for now) last week when I tried to load just the question/answer bodies into a testing table I made in MySQL.</p>
<p>The first issue I ran into had a lot to do with escaping quotes. Namely that I wasn&#8217;t doing it at all. In a moment of clarity, I realized that I could just use parameterized queries and everything would be ok. This was actually largely true, but surprisingly I was still getting a fair number of problem rows. After a bit of investigation, I discovered that the common thread between these rows was that they contained unicode characters. I didn&#8217;t understand how this could be, because I looked into it a bit and found articles which told me that &#8220;as of MySQL version <i>SomethingLowerThanI&#8217;mUsing</i> the default charset is utf8.&#8221; <a href="http://en.wikipedia.org/wiki/UTF-8">UTF8</a> supports unicode, what with it being right there in the name and all (<em>Unicode</em> Transformation Format), but unicode was choking my poor database.</p>
<p>As it turns out, the default charset for my particular installation was latin1, not utf8, so it found unicode characters to be weird and scary things. I changed the charset, and eventually a few other settings related to data transmission, to utf8 and all was right with the world.</p>
<p>All was right, that is, if you happened to have 10 hours to watch the database (in the words of <a href="http://www.escapistmagazine.com/videos/view/zero-punctuation">Yahtzee Croshaw</a>) &#8220;grind itself retarded.&#8221; As it turns out, a program which grabs only one record from an XML file at a time, nicely packages it up in a parameterized query, and sends that one lonely record off to the database is simply not a fast way to get the job done. I did toy around with sending more than one record per INSERT query, but it turns out that that&#8217;s just not much faster. Also, you have to be careful about how large your query becomes, because by default you can only send up to 1MB at a time, and I&#8217;d really rather that not happen when I release this to the public.</p>
<p>I asked StackOverflow for quick ways to load the database, and the best suggestion I found was to convert my XML data into a CSV and use MySQL&#8217;s <a href="http://dev.mysql.com/doc/refman/5.1/en/load-data.html">LOAD DATA</a> command to pull it into my table. I gave it a shot, but once again forgot about the quotes. When all was said and done it only took 3 minutes to write the CSV file and another 3 minutes to load it into the database. I&#8217;d call that a significant improvement.</p>
<p>Next on my list of things to do is finding a nice way to preprocess text before sending it to the database. I need to do this for three reasons:</p>
<ol>
<li>MySQL&#8217;s FULLTEXT indexes, by default, won&#8217;t index any word under 4 characters in length. This means that unless I ask everyone who installs the application to modify this server-wide, words like PHP and SQL won&#8217;t show up when you search for them. To get around this, I want to change words like XML into XML_Edit_PaddingText.</li>
<li>Characters which are not alphanumeric, single apostrophes, or the underscore character break words. This means that, word length limitations notwithstanding, the term C# and C++ would each be truncated to C. I want to edit these to C_Edit_Sharp and C_Edit_PlusPlus, respectively.</li>
<li>MySQL&#8217;s &#8220;<a href="http://dev.mysql.com/doc/refman/5.1/en/fulltext-stopwords.html">Stop Words</a>&#8221; list (i.e. words which aren&#8217;t indexed because they&#8217;re too common) is a bit too comprehensive for my needs. I think the words &#8216;get&#8217; and &#8216;value&#8217; would be relevant enough to programming-related searches that they should be included. These will become get_Edit_StopWord and value_Edit_Stopword, respectively.</li>
</ol>
<p>I have a feeling this will be a little trickier than I would like, but that&#8217;s part of the fun of this project.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.appscanadian.ca/archives/a-few-mysql-issues/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Working In Peace</title>
		<link>http://www.appscanadian.ca/archives/working-in-peace/</link>
		<comments>http://www.appscanadian.ca/archives/working-in-peace/#comments</comments>
		<pubDate>Sat, 05 Sep 2009 06:38:41 +0000</pubDate>
		<dc:creator>Jesse Hartwick</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.appscanadian.ca/?p=25</guid>
		<description><![CDATA[So far, I&#8217;ve done a terrible job of getting anything done. The peer review tracker I&#8217;m supposedly building is often quite far from being on the forefront of my mind. I&#8217;ve attributed this largely to the fact that it was meant to be for my employer, and we&#8217;ve since parted ways. I think there&#8217;s another [...]]]></description>
			<content:encoded><![CDATA[<p>So far, I&#8217;ve done a terrible job of getting anything done. The <a href="http://www.appscanadian.ca/archives/the-project/">peer review tracker</a> I&#8217;m supposedly building is often quite far from being on the forefront of my mind. I&#8217;ve attributed this largely to the fact that it was meant to be for my employer, and we&#8217;ve since parted ways. I think there&#8217;s another aspect at play here though, and that&#8217;s the fact that I don&#8217;t have an adequate place to study the books I want to study or code the things I want to code.</p>
<p>I live in a one bedroom apartment with my girlfriend Cyndi, cat Leo, and two birds (Tink and Houdini, though I always have to think about the latter&#8217;s name as I tend to call him something else entirely). I used to have this apartment all to myself, so I saw no major flaw with having my computer desk in the living room. Now, the flaw is obvious: privacy, or rather the lack thereof. Even if I wanted to move the desk into the bedroom, I don&#8217;t think I could because of factors like space, the awkward nature of the corners of the room, and the fact that my desktop is largely Cyndi&#8217;s now and I don&#8217;t want her to have to isolate herself in the bedroom to use it.</p>
<p>Cyndi is actually really good about giving me space if I want to try to work on something, but most people would probably tell you that your living room isn&#8217;t the best place to read technical books or develop software, since there are just too many distractions. Thus, I needed to look elsewhere for places to work.</p>
<p>The first place that jumped to mind was Starbucks/coffee shops in general. I figure it wouldn&#8217;t be too hard to find a place that wasn&#8217;t overly loud, but other factors led me to discard the idea. Mainly, I don&#8217;t like the idea of taking up space for paying customers, as I assume the staff wouldn&#8217;t be too happy about that. Also, I don&#8217;t like being forced to pay every time I want to code. Don&#8217;t get me wrong, I like coffee, I just don&#8217;t like the idea of paying $10 for a few cups so I can feel justified to work for several hours.</p>
<p>Next, I considered working at a campus library. I&#8217;m not enrolled there, so I didn&#8217;t think I&#8217;d be allowed to use <a href="http://www.dal.ca/">the university&#8217;s</a> libraries. When I was in <a href="http://www.sl.on.ca/">college</a>, my friends and I used to spend a lot of time in the library studying/hanging out, so I knew it would definitely be a good idea. I sent an email to each of the campus libraries and asked if the general public was allowed to study there, and they said that was absolutely fine, though their wireless system was only available to students. This environment seemed like it would be my best option, so that&#8217;s what I decided to do.</p>
<p>I&#8217;m still working out the schedule I want to follow, but it looks like I&#8217;m going to start working at the library 3-5 days a week for a few hours a day. Hopefully this will keep me structured and make me more productive. </p>
<p>The lack of wireless is also a motivator for a new project which I&#8217;m going to give precedence over the peer review tracker. Since I won&#8217;t have access to the internet, I wanted to start downloading things like the <a href="http://www.php.net/docs.php/">PHP documentation</a>, the <a href="http://java.sun.com/javase/reference/api.jsp">Java API</a> and <a href="http://java.sun.com/docs/books/tutorial/reallybigindex.html">tutorial</a>, and the <a href="http://msdn.microsoft.com/en-us/library/">MSDN Library</a>. These are all <a href="http://stackoverflow.com/questions/723017/offline-documentation-for-various-programming-languages">readily available</a>, but I&#8217;ve become addicted to <a href="http://stackoverflow.com">StackOverflow</a> as well, and I&#8217;d really like to keep an offline copy of that as well. The site is licensed under the <a href="http://creativecommons.org/licenses/by-sa/2.5/">Creative Commons</a> and the developers release an <a href="http://blog.stackoverflow.com/2009/06/stack-overflow-creative-commons-data-dump/">data dump</a> once a month of all the sites content. This sounds awesome, but unfortunately for me it&#8217;s all in XML format, which means it&#8217;s not as easily searched as something like MSDN or the StackOverflow website itself. My new project, therefore, is to create a desktop application that will load the XML contents into <a href="http://www.mysql.com/">MySQL</a> and provide an interface to all the sites questions and answers, along with a reasonable search feature. I just have no idea what to call it. <a href="mailto:jesse.hartwick@appscanadian.ca">Any ideas would be appreciated.</a></p>
<p>So, a new productivity plan and a brand new project. I think next week will be the start of something really fulfilling.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.appscanadian.ca/archives/working-in-peace/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mitigating Hospital Wait Times</title>
		<link>http://www.appscanadian.ca/archives/mitigating-hospital-wait-times/</link>
		<comments>http://www.appscanadian.ca/archives/mitigating-hospital-wait-times/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 06:52:22 +0000</pubDate>
		<dc:creator>Jesse Hartwick</dc:creator>
				<category><![CDATA[Not Programming Related]]></category>
		<category><![CDATA[personal-life]]></category>

		<guid isPermaLink="false">http://www.appscanadian.ca/?p=23</guid>
		<description><![CDATA[I haven&#8217;t been working on my project much in the last month. I&#8217;m no longer with the employer for whom that project was to have helped, and I can&#8217;t say we parted on the best terms. This left me with a bit of a bad aftertaste and I just didn&#8217;t want to code something which [...]]]></description>
			<content:encoded><![CDATA[<p>I haven&#8217;t been working on <a href="http://www.appscanadian.ca/archives/the-project/">my project</a> much in the last month. I&#8217;m no longer with the employer for whom that project was to have helped, and I can&#8217;t say we parted on the best terms. This left me with a bit of a bad aftertaste and I just didn&#8217;t want to code something which was to have been for them. I do intend to finish the project now, however, along with several other projects (a would-be-commercial website, and the <a href="http://stackoverflow.com/questions/471940/why-does-every-man-and-his-dog-want-to-code-a-blogging-engine/471944#471944">&#8220;Hello, World!&#8221; du jour</a> &#8211; my own blogging engine to potentially replace WordPress on appsCanadian).</p>
<p>These are not the topics I want to talk about tonight though. I&#8217;d like to digress, for a moment, into my personal life, and discuss something which came up tonight.</p>
<p>My girlfriend and I went to our hospitals emergency room tonight, because we thought she was pregnant (she&#8217;s not) and we were worried there may have been some complications (there weren&#8217;t).</p>
<p>We waited for four hours.</p>
<p>I think we were partially to blame for the wait. We left to get some fresh air, and told the folks at the desk that we were out for a few minutes, and they took our name. When we came back, everyone was busy, but my girlfriend said they saw us come in, so we were fine to sit back down. When we left again later (around the three hour mark) we mentioned we were leaving both before and after, and they took our name both times. We were in an examination room 20 minutes later. I wonder if we had just been skipped all night because we never formally stated our return from our first excursion. But I digress&#8230;</p>
<p>During our wait, it occurred to me that we really had no idea how long of a wait we had in front of us. The hospital, however, did. There are no hard and fast rules for how long any given patient will wait, since triage means that the most urgent cases are seen first, but there is a list somewhere in their computers which tells the staff who to call next. I think it&#8217;s a bit unfair that the patients aren&#8217;t given access to this information. If I go in with a mildly twisted ankle, and I know I&#8217;m ranked as priority 17 out of 20 patients, with an expected wait time of 4 hours, I might think it&#8217;s a waste of my time to hang out for a prescription of &#8220;ice it and stay off it for a while.&#8221; This is doubly true if I know that each of the next five people to arrive at the hospital are a higher priority than me.</p>
<p>When my doctor had be have blood work done late last year, I took a number and could reasonably guess, based on the average time between patient calls, how long I would be. When you wait in a long line at some major amusement parks, you&#8217;re generally given a (pessimistic) estimate for how long you&#8217;ll need to wait before you can enjoy the ride.</p>
<p>I got to thinking, why isn&#8217;t there a screen somewhere in the waiting area that shows your position in line? It seems trivial to assign each patient a small identifier &#8211; something as simple as a &#8220;take a number&#8221; or as &#8220;complex&#8221; as a three alphanumeric character code &#8211; which can be displayed on a small LCD screen or three, with the patients place in line.</p>
<p>Perhaps it would confuse some folks who might not understand the system, and would be furious to find that although they were 5th in line 15 minutes ago, that they are now 8th in line facing an additional half hour on their wait. I think most people should understand the &#8220;triage&#8221; system, and could understand what was happening. If not, there are some helpful staff there to correct any misconceptions.</p>
<p>Perhaps the hospital doesn&#8217;t want you to know what they really think of your condition. I think this is a poor reason to withhold information, since many people will assume the worst anyway. After a couple hours, my girlfriend and I seriously considered leaving because we assumed that if the hospital didn&#8217;t think it was necessary to get her in quickly, she likely would be fine to wait and go to a clinic the next day.</p>
<p>I think when you&#8217;re dealing with a lot of bored, worried people, full disclosure it likely best. If you&#8217;re backed up with some seriously sick people, we&#8217;ll understand. If you genuinely think a patient isn&#8217;t in need of urgent care, please let us know so that we don&#8217;t waste our time waiting for you to brush us off.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.appscanadian.ca/archives/mitigating-hospital-wait-times/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Notifications</title>
		<link>http://www.appscanadian.ca/archives/notifications/</link>
		<comments>http://www.appscanadian.ca/archives/notifications/#comments</comments>
		<pubDate>Sun, 28 Jun 2009 03:27:41 +0000</pubDate>
		<dc:creator>Jesse Hartwick</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.appscanadian.ca/?p=22</guid>
		<description><![CDATA[A guy I work with has known my girlfriend since they were both kids, so he knew what I was up to. There was a bit of a discussion at work a few days ago, when he casually mentioned the project to another developer.
I ended up involved in the conversation, and I ended up getting [...]]]></description>
			<content:encoded><![CDATA[<p>A guy I work with has known my girlfriend since they were both kids, so he knew what I was up to. There was a bit of a discussion at work a few days ago, when he casually mentioned the project to another developer.</p>
<p>I ended up involved in the conversation, and I ended up getting some good feedback on some of the things I should be doing. We also tackled a major problem with this application: notifications.</p>
<p>Notifications are a fundamental part of my Review Manager. Otherwise, we would just fall back into the same problems that we currently have with the review spreadsheet (oddly, the non-shared spreadsheet that can only be used by one person at a time..), and that&#8217;s that no one ever checks the damn thing. If nobody knows you&#8217;re looking for a review, nobody will do your review. This is why so many people, myself included, tend to just spam the team with an &#8220;I need an XYZ review&#8221; emails.</p>
<p>I&#8217;m hoping my app will solve this problems in two ways:</p>
<ul>
<li>First, everyone will have the app open because it will minimize to the tray. This makes it quick to check if you&#8217;re in the mood to pick up a random review, and it&#8217;s easy to access when you need to broadcast that you need something done</li>
<li>Everyone gets notified (once by default, and only if you&#8217;re allowed to do that type of review) that someone needs a review done, hopefully in a non-invasive way.</li>
</ul>
<p>The main problem I had with this was determining how to display the notification without interrupting the users workflow.</p>
<p>After a few searches on Google and StackOverflow, I came across these two overrides:</p>
<p><code>
<pre>
protected override <a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.control.createparams.aspx">CreateParams</a> CreateParams
{
   get
   {
      CreateParams bp = base.CreateParams;
      bp.<a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.createparams.exstyle.aspx">ExStyle</a> |= WS_EX_TOPMOST;

      return bp;
   }
}

protected override bool <a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.createparams.exstyle.aspx">ShowWithoutActivation</a>
{
   get
      {
         return true;
      }
}</pre>
<p></code><br />
The CreateParams override simply adds the option to push the form to the top of the Z-Order. This is so common that WinForms have a property already built to include this &#8211; Form.TopMost. The problem with using TopMost is that it will activate the form, stealing the focus away from the user. Since this is exactly opposite to what we want, we can&#8217;t use it. The CreateParams override will handle this functionality for us, and the ShowWithoutActivation override does exactly what it sounds like. The result is a form which is displayed above all else, but that doesn&#8217;t take the focus away from whatever the user is working on.</p>
<p>I decided to also allow the user to define for how long the notification is displayed. This is simply a second constructor for the form, and is in fact the only constuctor with any logic in it. The constructor without a timeout simply passes the buck onto the one that does, along with a default value of 5 seconds:</p>
<p><code>
<pre>
public FadeNotification (string title, string message, int timeout)
{
   InitializeComponent();
   DisplayDuration = timeout;
   tips.SetToolTip(lblMessage, message);
   this.Text = title;
   if (message.Length &gt; MAX_MSG_LENGTH)
   {
      message = message.Substring(0, (MAX_MSG_LENGTH - 3)) + "...";
   }
   lblMessage.Text = message;
   State = DisplayState.Appearing;
}

// if no timeout is specified, use a default value
public FadeNotification(string title, string message) : this(title, message, DEFAULT_DURATION) { }
</pre>
<p></code></p>
<p>Another thing you might notice in this snippet is that I&#8217;m a bit lazy with the message. I played around with the label on the form a bit, and generally hated how it was coming out. What I decided to do instead, was to make the label the size of the form, and center it. I set the font to a nice(ish) looking size, and sent it on its way. If the message gets long enough to wrap, it looks like crap, so I just cut it off. For what I&#8217;m using it for, the maximum length I set is more than sufficient. If it&#8217;s not, the end gets chopped off and replaced with an ellipsis (sort of, since there actually is an ellipsis character which I&#8217;m not using for no particularly good reason).</p>
<p>This new form became revision 3 (and 4, since I left a literal in where I passed to the other constructor.. oops) in my SVN repository. There should have been more revisions relating to this, I know, but this is basically a sandbox which became too valuable. It wasn&#8217;t even originally in the same project as my main stuff. I&#8217;ll have to learn to play with my working copy more, but this source control stuff is still new to me.</p>
<p>The code is available in <a href="/files/code/ReviewManager/FadeNotification.rar">a RAR file</a> if anyone wants to review it. I haven&#8217;t decided how I&#8217;m going to formally release this when I&#8217;m done the project, so for now lets just consider this my copyright from now. If you would like to use this in your own project (you won&#8217;t), drop me a line and force the licensing issue. It&#8217;s likely going to be LGPL&#8217;d at some point, but who knows.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.appscanadian.ca/archives/notifications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Benefits of Reinventing the Wheel</title>
		<link>http://www.appscanadian.ca/archives/the-benefits-of-reinventing-the-wheel/</link>
		<comments>http://www.appscanadian.ca/archives/the-benefits-of-reinventing-the-wheel/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 05:52:24 +0000</pubDate>
		<dc:creator>Jesse Hartwick</dc:creator>
				<category><![CDATA[Peer Review Project]]></category>
		<category><![CDATA[Teach Yourself Software Development]]></category>

		<guid isPermaLink="false">http://www.appscanadian.ca/?p=21</guid>
		<description><![CDATA[My last post was also my most successful to date (where success is defined by page views and comments), but it came with a bit of criticism.
I made the argument that for the moment I&#8217;m more concerned with time to release than with building a perfect design. That&#8217;s not to say that I don&#8217;t care [...]]]></description>
			<content:encoded><![CDATA[<p>My last post was also my most successful to date (where success is defined by page views and comments), but it came with a bit of <a href="http://www.appscanadian.ca/archives/if-you-have-a-hammer-its-not-always-wrong-to-use-it/#comment-1333">criticism</a>.</p>
<p>I made the argument that for the moment I&#8217;m more concerned with time to release than with building a perfect design. That&#8217;s not to say that I don&#8217;t care at all about actually sitting down and designing this thing, I am; it&#8217;s just that I have a few compelling arguments for getting this thing out sooner:</p>
<ul>
<li>This project was originally created to attempt to solve a problem at work, and I&#8217;d really love to see this deployed and enjoyed by the 20ish developers who could potentially benefit from it.</li>
<li>By and large, this is meant to be a portfolio project to help find me a job in .Net. I&#8217;d like to escape my current job sooner rather than later, and get on with my new life working in areas I&#8217;m actually interested in. No offense to the language, but I just don&#8217;t spend much time outside of work working on personal COBOL projects, and I don&#8217;t read mainframe blogs. Conversely, this project shows I do work on C# outside of work, and I <a href="http://www.codinghorror.com/">routinely</a> <a href="http://www.joelonsoftware.com"/>read</a> a <a href="http://software.ericsink.com/">number</a> of <a href="http://steve-yegge.blogspot.com/">blogs</a>, and <a href="http://stackoverflow.com">frequent</a> <a href="http://www.reddit.com/r/programming/">sites</a>, which highlight newer languages and methodologies du jour.</li>
<li>If I leave room for improvement later, I&#8217;ll gain experience with refactoring (both designs and code). It&#8217;s a great learning tool to go back to your old code and see what works and what doesn&#8217;t. Seeing how far you&#8217;ve come since you wrote that stinking, rotting, maggot-infested piece of god awful code is a great way to remind yourself that you really are learning, and that you&#8217;re constantly improving.</li>
<p>With that said, I&#8217;d like to address one of the comments from my last post.</p>
<p>Reader JS writes:</p>
<blockquote><p>
Jesse,</p>
<p>I’d encourage you to write at least one or two database applications before you start using an ORM. While it can be a bit more tedious writing the queries by hand and debugging them, it is a worthwhile learning experience. Once the learning is done and you’re just repeating the same busywork you’ve already done a number of times before, then the ORM makes a lot more sense.
</p></blockquote>
<p>I think this is excellent advice. While I&#8217;m sure you&#8217;ll definitely learn a lot by implementing a ready-made ORM like NHibernate, it&#8217;ll pay more in the long run to have the understanding of how things work behind the scenes. Not all projects will use an ORM, especially when you&#8217;re working on an older code base, and being able to debug a problem in a method full of objects found in the System.Data.OleDB namespace is definitely a plus for your employer.</p>
<p>This argument is tangentially related to a topic which was popular on the internet last year &#8211; whether or not a programmer should know how to program in C. The argument there is largely the same argument I&#8217;m making here: knowing the guts of your tool of choice will make you a better programmer.</p>
<p>For example, I&#8217;m really amazingly bad at computer hardware. It&#8217;s embarrassing to say, but I&#8217;ve just never been comfortable pulling pieces out of my desktop and replacing them with new bits. It&#8217;s the reason why in 2003 when I bought the machine, I opted to have 1GB of RAM installed from the start. It was probably very much overkill for my needs, but I figured it would eventually be useful and I didn&#8217;t want to deal with it.</p>
<p>That desktop computer I bought failed the summer after I bought it. In desperation, I got brave and opened the machine up and started pulling bits in and out. I even took apart my parents working machine and tried to swap out the power supply to see if that was the issue. When I was done, I couldn&#8217;t even get the thing back together. I left some things unplugged for fear I&#8217;d blow the whole thing up when I plugged it in, if I&#8217;d put some connector in backwards somehow. When I took it into the <a href="http://www.kingstoncomputerplanet.com/">local shop</a> I&#8217;d bought it from, the guys there expertly snapped all the bits together and powered up my computer. They connected their various diagnostic tools and told me my motherboard was shot. They did in minutes what I failed to do in hours on the floor with screwdrivers and hope. All this because I didn&#8217;t understand the internals of a tool I relied on everyday.</p>
<p>With that in mind, I&#8217;ve decided to follow JS&#8217; advice (which is really just following what I had decided already anyway) and forget the ORMs for now. I&#8217;m going to dig in and get dirty with my database classes. I&#8217;ll write SQL by hand, I&#8217;ll learn a bunch of new classes in a couple new namespaces, and when I crawl out the other side I&#8217;ll be a better developer for it.</p>
<p>There is a comment on one of the <a href="http://stackoverflow.com/questions/199829/what-is-the-best-language-for-a-beginner-to-write-a-blog-engine-in/199850#199850">answers to a question on StackOverflow</a> which sums up my point nicely. The question was &#8220;What is the best language for a beginner to write a blog engine in?&#8221; and the answerer had questioned why the asker wasn&#8217;t just going with an established brand like <a href="http://wordpress.org/">Wordpress</a>.</p>
<p>StackOverflow user <a href="http://stackoverflow.com/users/19302/nelson-laquet">Nelson LaQuet</a> stated:</p>
<blockquote><p>
The OP wants to build his own; and I believe it&#8217;s not so much for the practicality but for the learning experience. Re-inventing the wheel is a good way to learn how things work &#8211; even if you end up just using a prepacked solution in a production environment.
</p></blockquote>
<p>Excellent advice. I think I&#8217;ll take it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.appscanadian.ca/archives/the-benefits-of-reinventing-the-wheel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>If You Have A Hammer, It’s Not Always Wrong To Use It</title>
		<link>http://www.appscanadian.ca/archives/if-you-have-a-hammer-its-not-always-wrong-to-use-it/</link>
		<comments>http://www.appscanadian.ca/archives/if-you-have-a-hammer-its-not-always-wrong-to-use-it/#comments</comments>
		<pubDate>Sun, 07 Jun 2009 08:38:19 +0000</pubDate>
		<dc:creator>Jesse Hartwick</dc:creator>
				<category><![CDATA[Peer Review Project]]></category>
		<category><![CDATA[Teach Yourself Software Development]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[design]]></category>

		<guid isPermaLink="false">http://www.appscanadian.ca/?p=20</guid>
		<description><![CDATA[If you asked my girlfriend, and others close to me, what my biggest personality flaw is, you would be told that I&#8217;m a perfectionist. The last few days have been a shining example of that.
In my last post, I documented my source tree for the Reviewer project &#8211; four directories of planned features, and one [...]]]></description>
			<content:encoded><![CDATA[<p>If you asked my girlfriend, and others close to me, what my biggest personality flaw is, you would be told that I&#8217;m a perfectionist. The last few days have been a shining example of that.</p>
<p>In my <a href="http://www.appscanadian.ca/archives/starting-off-right-with-version-control/">last post</a>, I documented my source tree for <a href="http://www.appscanadian.ca/archives/the-project/">the Reviewer project</a> &#8211; four directories of planned features, and one directory called &#8216;Database&#8217; which is the subject of today&#8217;s post.</p>
<p>I&#8217;ve been thinking a lot about how to implement the database interop for this project, since it&#8217;s my first time doing something like this and I really wanted to get it right. I came up with two (fairly obvious) ideas for this:</p>
<ol>
<li> Build the database lookups directly into my core classes.<br />
The first idea I came up with was to have a few methods in each class which would talk directly to the database. For example, the review class would include a method like getReviewsByType(ReviewType rt) which would translate the ReviewType object into a literal stored in the ReviewTypes table in the (currently nonexistant) database, then perform a lookup on the Reviews table and translate the results into a List and return that.I didn&#8217;t like this idea because I didn&#8217;t want to mix my business logic with my database logic.</li>
<p></p>
<li>Build an abstract base class to handle all the database connectivity stuff, and create subclasses for each of my business objects that would handle the nuts and bolts of translating the objects to/from the database.
<p>I didn&#8217;t like this idea because I&#8217;d be essentially storing details of the same business object in two separate classes. The Review class, for example, would be strongly coupled to the ReviewDB class (pending some better name for it).</li>
</ol>
<p>In the end I decided that I liked option two best. I could probably decouple the two in such a way that the Review class would be reusable, even if I didn&#8217;t want to bring the ReviewDB class with it.</p>
<p>With that decision made, I <a href="http://stackoverflow.com/questions/959096/modelling-database-tables-into-classes">turned to StackOverflow yet again</a> (those guys will be sick of me and my noobish questions soon enough, I&#8217;m sure) to ask if this sort of implementation was standard or fundamentally flawed. I didn&#8217;t get any negative feedback on the design question I intended to ask, but I did get one answer which asked me why I wasn&#8217;t using <a href="http://en.wikipedia.org/wiki/Object-relational_mapping">Object/Relational Mapping (O/RM)</a>.</p>
<p>I&#8217;m forced to plead ignorance here. The two examples I was given were LinqToSQL and <a href="https://www.hibernate.org/343.html">nHibernate</a>.</p>
<p>For LinqToSQL my reasoning was that I&#8217;m using the Jet database engine for the short term on this project. The reason for this have a lot to do with the deployment options at my work since they&#8217;re the only customer for the product at this point. LinqToSQL is simply not designed to work with Jet. It can be tricked into working, I&#8217;m told, but you really don&#8217;t get the complete experience.</p>
<p>As for nHibernate, well, I really didn&#8217;t know what that was until today. I had heard the name before, especially relating to Java, but had never looked into what it was.</p>
<p>I weighed the pros and cons of this approach, and have decided to completely ignore both of these options at least until the project makes it to the 1.0 release. My goal for right now is to ship the product soon, so that my colleagues at work can benefit from it, and also to teach myself C# and development in general. Whether I&#8217;m learning how to use OleDB connections, or nHibernate, I&#8217;m still learning something useful. For now, I&#8217;ve decided that taking an extra week to figure out nHibernate really isn&#8217;t worth it. For v1.1 (or 2.0), I&#8217;ll take another look and start refactoring my design and my code, and that&#8217;ll also be good practice. I&#8217;m also planning on adding support for multiple database engines (SQL Server being the main target here), without losing the existing support for Jet/Access. It should be exciting, if most likely horribly frustrating at first.</p>
<p>I know this seems like a bad case of &#8220;if all you have is a hammer, everything looks like a nail,&#8221; but I&#8217;m thinking instead that if my hammer does a good enough job now, why not use it?</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.appscanadian.ca/archives/if-you-have-a-hammer-its-not-always-wrong-to-use-it/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Starting Off Right With Version Control</title>
		<link>http://www.appscanadian.ca/archives/starting-off-right-with-version-control/</link>
		<comments>http://www.appscanadian.ca/archives/starting-off-right-with-version-control/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 05:54:52 +0000</pubDate>
		<dc:creator>Jesse Hartwick</dc:creator>
				<category><![CDATA[Peer Review Project]]></category>
		<category><![CDATA[Teach Yourself Software Development]]></category>
		<category><![CDATA[review-manager]]></category>
		<category><![CDATA[structure]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[version-control]]></category>

		<guid isPermaLink="false">http://www.appscanadian.ca/?p=17</guid>
		<description><![CDATA[This past weekend, I made a mistake.
For the past couple of weeks, I&#8217;ve been experimenting with a few things in C#. I made a quick mockup of some Registry-accessing code, which turned out to be completely misguided as far as why I was writing it, but it was great for diving into unfamiliar parts of [...]]]></description>
			<content:encoded><![CDATA[<p>This past weekend, I made a mistake.</p>
<p>For the past couple of weeks, I&#8217;ve been experimenting with a few things in C#. I made a quick mockup of some Registry-accessing code, which turned out to be <a href="http://stackoverflow.com/questions/886411/is-it-worth-it-to-lookup-the-default-application-in-the-registry-when-opening-a-f">completely misguided</a> as far as <em>why</em> I was writing it, but it was great for diving into unfamiliar parts of C# and the .Net framework. The code takes a file extension and retrieves the default application for the &#8216;Open&#8217; command, then spits it out to the screen. It was nice to get back into &#8216;real&#8217; development after spending so much time in the terrifying depths of a legacy COBOL code base, and it also segued nicely into learning a bit about the <a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.openfiledialog.aspx">OpenFileDialog</a> class.</p>
<p>One of my adventures in C# accidentally turned into the user interface of my <a href="http://www.appscanadian.ca/archives/the-project/">&#8216;Review Manager&#8217; project</a>. I&#8217;ll talk about the drunken stumble to this design in a later post, but suffice it to say I really liked the way it was shaping up.</p>
<p>Somewhere along this journey, likely as a direct result of some <a href="http://stackoverflow.com/">StackOverflow</a>-related procrastination, I decided that to do this project right, what I really needed was some source control.</p>
<p>Although <a href="http://git-scm.com/">Git</a> is getting a lot of press these days, it seems good ol&#8217; <a href="http://subversion.tigris.org/">Subversion</a> is still the recommended choice for noobs like me. I downloaded the latest version of <a href="http://tortoisesvn.net/downloads">TortoiseSVN</a> (1.6.2) and was on my way:</p>
<ol>
<li>Create a new &#8216;Development Projects&#8217; directory for my serious work destined for an online portfolio&#8230; Check!</li>
<li>Move my ReviewManager folder out of my Visual Studio &#8216;Projects&#8217; directory (which will now be used for one-off projects and some prototyping) into the new &#8216;Development Projects&#8217; directory&#8230;Check!</li>
<li>Create a new root level directory to hold my SVN repositories&#8230;Check!</li>
<li>Create a new repository for the Review Manager project&#8230;Check!</li>
<li>Check in my existing work to the new repository&#8230;Che..Wait, where&#8217;s my.. Oh God..</li>
</ol>
<p>As I said, I made a mistake. I&#8217;m still not 100% sure what happened, but it seems my work never actually made the move out of the Visual Studio &#8216;Projects&#8217; folder. In a fit of irony, I managed to completely obliterate all my work while attempting to safely secure it in my version control system.</p>
<p>Thankfully, all that was really in the project was mostly just some basic GUI stuff that was partially contained in one of my prototyping projects, so it wasn&#8217;t a huge loss. What it was, however, was a giant wakeup call. Even on small projects, it pays to have a nice, secure, version controlled backup of your work.</p>
<p>This wasn&#8217;t a total loss. I decided to restart on the right foot and have organized my project directory a bit. This structure might not be optimal, and it sure as hell isn&#8217;t complete, but it&#8217;s a nice step in the right direction:</p>
<pre>Review Manager
├───doc
└───src
    ├───Database
    ├───DirectoryManagement
    ├───Estimation
    ├───PeerReview
    └───TimeTracking</pre>
<p>The Database directory is going to be used for db connectivity classes and the like, but the other four are the main goals of this project. I&#8217;ll talk about each of these in a later entry.</p>
<p>As always, all feedback (positive and negative) is encouraged in the comments. I&#8217;d love to hear what you all think of my progress!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.appscanadian.ca/archives/starting-off-right-with-version-control/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The Project</title>
		<link>http://www.appscanadian.ca/archives/the-project/</link>
		<comments>http://www.appscanadian.ca/archives/the-project/#comments</comments>
		<pubDate>Wed, 27 May 2009 02:21:08 +0000</pubDate>
		<dc:creator>Jesse Hartwick</dc:creator>
				<category><![CDATA[Peer Review Project]]></category>
		<category><![CDATA[Teach Yourself Software Development]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Project]]></category>

		<guid isPermaLink="false">http://www.appscanadian.ca/?p=16</guid>
		<description><![CDATA[It&#8217;s been a long time since I wrote anything here, especially since I ended my last post by stating I was getting back on track and would write more soon.
Not wanting to go into too much personal detail here, suffice it to say that I&#8217;ve gone through a few transitions at my day job, met [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a long time since I wrote anything here, especially since I ended my last post by stating I was getting back on track and would write more soon.</p>
<p>Not wanting to go into too much personal detail here, suffice it to say that I&#8217;ve gone through a few transitions at my day job, met an awesome girl that I&#8217;ve been with for nearly nine months now, and have dealt with some medical-related issues all since my last post way back in July.</p>
<p>Despite all of this, I have made progress with <a href="http://www.appscanadian.ca/archives/cs-101-introduction-to-computer-science/">my plan</a>, and there is much more happening now.</p>
<p>The biggest issue I&#8217;ve encountered so far, is that it&#8217;s hard to learn how to program without programming, and it&#8217;s hard to get programming a hobby project without having some sort of idea regarding what you would like to build. This issue has finally been resolved for me as I now have a project.</p>
<hr />Everything at my day job goes through a peer review process, every form I fill out and every piece of code I write has to be approved by another member of my team.</p>
<p>With so many people producing so much work, it can be a bit difficult at times to find someone to do a review for you in a timely fashion. Various ideas have been tried to manage this process (including scheduled review shifts and a spreadsheet for making public what reviews you need done, and by when), but for various reasons each of these ideas has met with only limited success.</p>
<p>I&#8217;ve decided, largely for selfish reasons relating to my desire to learn C#, that the next idea on the list should be a software solution. The application itself will be fairly small in scope, but should provide enough of a challenge that I&#8217;ll learn something useful since I&#8217;ve been told time and again that the best way to learn a new language is to &#8220;use it in anger.&#8221;</p>
<p>Since this project won&#8217;t have any corporate support (although my team lead is aware of the idea, and is looking forward to seeing a prototype), I won&#8217;t be able to use the company&#8217;s SQL Server installation. I worked for a year doing support for in house MS Access applications (different company), so I&#8217;ve decided to just use <a href="http://en.wikipedia.org/wiki/Microsoft_Jet_Database_Engine">Microsoft Jet</a>, in the form of an Access-generated MDB file, as the first supported database engine. This is actually nice since I can start barebones with what I know, but it will force me to design the application in a modular way so that I can add support for &#8220;<a href="http://en.wikipedia.org/wiki/Microsoft_SQL_Server">real</a>&#8221; database engines in the future.</p>
<p>The application itself will be written in C# using the free <a href="http://www.microsoft.com/express/vcsharp/">Visual Studio 2008 Express</a>, and will allow developers to identify peer reviews they need done. Users will be able to see all available peer reviews, optionally ordered by certain favorite items (i.e. reviews for developers they trust or could learn from, subsystems they&#8217;re particularly familiar with, etc), and assign themselves to the reviews.</p>
<p>There&#8217;s actually more to this than I&#8217;m writing here, but I think this is enough information for now.</p>
<p>More to come soon!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.appscanadian.ca/archives/the-project/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Life. Don’t Talk To Me About Life.</title>
		<link>http://www.appscanadian.ca/archives/life-dont-talk-to-me-about-life/</link>
		<comments>http://www.appscanadian.ca/archives/life-dont-talk-to-me-about-life/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 21:49:54 +0000</pubDate>
		<dc:creator>Jesse Hartwick</dc:creator>
				<category><![CDATA[Blogging About Blogging]]></category>

		<guid isPermaLink="false">http://www.appscanadian.ca/?p=15</guid>
		<description><![CDATA[Jeff Atwood recently wrote a post called &#8220;Don&#8217;t Go Dark&#8221; in which he discusses the problem of developers essentially disappearing from a project to work in isolation only to appear with massive, poorly understood (except by the developer) changes/updates.
Some of you have noticed that since my last post over a month ago, I&#8217;ve gone dark. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.codinghorror.com/blog/">Jeff</a> <a href="http://blog.stackoverflow.com/">Atwood</a> recently wrote a post called &#8220;<a href="http://www.codinghorror.com/blog/archives/001134.html">Don&#8217;t Go Dark</a>&#8221; in which he discusses the problem of developers essentially disappearing from a project to work in isolation only to appear with massive, poorly understood (except by the developer) changes/updates.</p>
<p>Some of you have noticed that since my <a href="http://www.appscanadian.ca/archives/a-man-with-a-plan/">last post</a> over a month ago, I&#8217;ve gone dark. I&#8217;d like to thank those of you who have <a href="http://www.reddit.com/message/compose/?to=AgentConundrum">messaged me</a> on <a href="http://www.reddit.com/">reddit</a> or <a href="mailto:jesse.hartwick@appscanadian.ca">emailed me</a> directly. It&#8217;s nice to know that my attempt to be held accountable to this project by making it public was successful.</p>
<p>Unfortunately, unlike the developers Jeff wrote about, I don&#8217;t have a large knowledge-bomb to explode on you. You see, the simple truth is that I&#8217;ve been too preoccupied with &#8220;real life&#8221; to really get any work done on the project, let alone blog about it.</p>
<p>It&#8217;s my own fault, really. I picked a bad time to start on this journey. I&#8217;ve been part of a project at work for the past year and a bit, and the project was deployed to production on Sunday afternoon. For the past month, I&#8217;ve been being completely wiped out by my last minute workload, as well as having been on call since deployment. The project was a &#8220;success&#8221; (i.e. it&#8217;s deployed and it works) but there was a minor problem with the transition to production that has cascaded into a major headache of support issues.</p>
<p>Beyond the tedium of everyday life, there has been movement on this pet project of mine. That movement has been largely related to planning and my inability to see the forest for the trees (more on that in my next post).</p>
<p>Regardless, for those of you concerned for the status of this project, let me assure you that I am alive, I&#8217;m getting back on track, and there will be more things to write about soon. Even if work swallows me whole, it&#8217;s only 16 days until I have a nice two week vacation. If I can&#8217;t find time for this project on vacation, then the project is likely doomed.</p>
<p>More soon!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.appscanadian.ca/archives/life-dont-talk-to-me-about-life/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss><!-- Dynamic page generated in 0.601 seconds. --><!-- Cached page generated by WP-Super-Cache on 2010-02-26 12:39:21 -->
