<?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/"
	>

<channel>
	<title>Evil Stick Blog</title>
	<atom:link href="http://evilstickman.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://evilstickman.com/blog</link>
	<description>Random blathering</description>
	<pubDate>Wed, 20 May 2009 13:04:47 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>DX9 Engine Design, part 1</title>
		<link>http://evilstickman.com/blog/2009/05/20/dx9-engine-design-part-1/</link>
		<comments>http://evilstickman.com/blog/2009/05/20/dx9-engine-design-part-1/#comments</comments>
		<pubDate>Wed, 20 May 2009 13:04:47 +0000</pubDate>
		<dc:creator>Evil Stick Man</dc:creator>
		
		<category><![CDATA[Game related]]></category>

		<category><![CDATA[Technology]]></category>

		<category><![CDATA[DirectX]]></category>

		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://evilstickman.com/blog/?p=132</guid>
		<description><![CDATA[Note: A lot of this is based on http://ati.amd.com/developer/gdc/D3DTutorial3_Pipeline_Performance.pdf, which was a presentation given at GDC several years ago (I don&#8217;t know the exact year). It is based on DirectX 9, and while most of the info is probably still valid, it wouldn&#8217;t surprise me if there are several items that were no longer valid [...]]]></description>
			<content:encoded><![CDATA[<p><em>Note: A lot of this is based on <a href="http://http://ati.amd.com/developer/gdc/D3DTutorial3_Pipeline_Performance.pdf">http://ati.amd.com/developer/gdc/D3DTutorial3_Pipeline_Performance.pdf</a>, which was a presentation given at GDC several years ago (I don&#8217;t know the exact year). It is based on DirectX 9, and while most of the info is probably still valid, it wouldn&#8217;t surprise me if there are several items that were no longer valid as of the advent of DirectX 10 and later. Most of what I say will be a basic thought exercise stemming from the presentation, coupled with my experiences working with a DX9 engine at my last position.</em></p>
<p>At the core of every 3D game is its graphics engine. The graphics engine determines what the player sees, which then determines how they react. It&#8217;s something that&#8217;s very easy to do wrong, and the specifics are often under heated debate both in a company and on the web. Below are some guidelines to use when designing a high-performance 3D engine, or when optimizing an existing engine. There won&#8217;t be any code here, as I currently don&#8217;t have an engine utilizing these principles (it&#8217;s currently under development), but more some tips I discovered on the job.</p>
<h1>Know thine enemy</h1>
<p>First, before we embark on any engine enhancement journey, we need to make sure we can actually pinpoint where our engine slowdown is originating from. There&#8217;s no point in streamlining your vertex information if what you perceive as slowdown is actually taking place in your AI or physics code. There are a number of ways to gauge overall engine performance, and determine at least the major causes of slowdown:</p>
<ul>
<li><strong>Keep ample statistics</strong> - the success of your optimization effort, as well as turnaround time on improvements, will hinge on your ability to accurately judge the results of your improvements quickly. One of the best ways to do this is to develop a set of metrics in your engine. Proper encapsulation coupled with judicious use of time keeping will go a long way towards identifying problem areas. Encase your code in #ifdef __DEBUG&#8221; blocks and you can&#8217;t go wrong. At my last position, we often relied on these statistics to detect major problems both in the engine and in the engine management structure - for instance, if we weren&#8217;t releasing an image and were leaking memory to the video card, we could tell pretty quickly by watching a list of loaded images, coupled with instance counts.</li>
<li><strong>Find some effective third-party tools</strong> - when I was tracking down engine speed blocks, both PIX for windows (included with the D3D SDK) and NVIDIA&#8217;s PerfHUD proved invaluable. PIX was great for tracking actual geometry issues - if something was coming out garbled, I could quickly use PIX to view the offending D3D call and the vertex/index buffers causing the trouble. PerfHUD, on the other hand, did a great job of providing metrics on the graphics pipeline itself. At a glance it&#8217;d give you load on your shader processors (vertex, pixel, and geometry), number of DIPs, memory usage, triangles in a scene, and so on. The instruction manual for this tool is in excess of 40 pages, and it is packed full of useful ways to utilize this tool.</li>
<li><strong>Profiling helps, but it depends on your profiler</strong> - I was able to obtain some info using Visual Studio&#8217;s profiler, but at a certain level of engine complexity it fails to be useful. Most of the discoveries I was able to make were largely due to our own engine metrics, as well as use of the aforementioned tools.</li>
</ul>
<p>Basically, you&#8217;ve got two bottlenecks in your engine: the CPU, and the GPU. Maxing one will impair the performance of the other. 95% of games are CPU limited, so start there in your quest for optimization. You can tell pretty quickly if you&#8217;re CPU limited by watching the graphs in PerfHUD - if you&#8217;re pinging only 25% GPU usage and only sending out 100k triangles and you&#8217;re still running slow, odds are you&#8217;re CPU bound and no amount of engine optimization will help you. In fact, contrary to popular wisdom, in these cases you want to do<em> more</em> work on the graphics card, not less, to take some load off your CPU.</p>
<h1>Watch your creations and deletions</h1>
<p>If you&#8217;re creating and deleting graphics objects during your game&#8217;s main loop, I highly recommend reorganizing your code structure. Creation and deletion are time-consuming operations, and can drastically impact performance. Your game should have, at least, a load and an unload phase that doesn&#8217;t impact play at all. There are exceptions to this (specifically when dealing with large, open worlds), but if your levels are small there should be no reason for you to constantly create and delete objects in your game loop. Store objects to be destroyed in a queue, and kill them when you have some extra time in your rendering (metrics in your engine help here).</p>
<h1>Use <em>all</em> of your time</h1>
<p>Set your D3DPRESENT settings to &#8220;IMMEDIATE,&#8221; and take control of engine rendering yourself. Letting DirectX do vsync for you is nice, but when you use this your present calls will block until their 1/60th of a second is complete (at least in my testing that would happen). In a highly dynamic environment, such as a game engine, this will mean that you&#8217;re going to start dropping frames once your non-rendering code takes more than its alloted time to run, and that for a brief segment of time you&#8217;ll be effectively running at 1/2 your refresh rate.</p>
<p>Basically all you need here is a method to call &#8220;present&#8221; at a regular time. You can either set a timer event to simply fire off a present call every 1/60th of a second (if you&#8217;re going for 60FPS), or at the least you can control the slowdown on a more granular level. By making some intelligent use of engine compartmentalization, you can also spread out your engine&#8217;s labor so that you minimize cyclic slowdown. Keep a queue of tasks that don&#8217;t necessarily need to be performed immediately, and then wait for some free time in your engine. Keep an overall frame time, and if you get to a draw call after having taken less time than expected, use that extra time to kill some objects, or load some objects, or do some poly sorting. How you end up specifically using this will depend on your engine architecture, but this&#8217;ll give you one more dial to play with when optimizing for performance.</p>
<h1>The graphics card is a pipeline</h1>
<p>One thing to keep in mind is that a graphics card, at its core, is largely just a big parallel-processing beast. It wants to do one thing, and do it repeatedly. Think of your graphics card as a water pipe - it takes the water it gets in a fixed path, and does it very well. However, if you want to change that path you need to completely drain the pipe before you reconfigure things, which reduces the amount of water you can push through. With that analogy in mind, here are some sorting criterion from your object that transcend the standard &#8220;Sort objects front to back, and back to front for transparency&#8221; logic.</p>
<h2>Avoid excessive shader changes</h2>
<p>After you&#8217;ve sorted your polys from front-back, try sorting your object by shader. The vital distinction here is to avoid excessive switches between the programmable pipeline and the fixed function pipeline. A previous engine I worked on had cars that were made up of multiple objects split pretty evenly among shaded and unshaded. By organizing the game to draw all the shaded parts first and then draw all the fixed function stuff, we were able to get about 5 extra frames per second.</p>
<h2>Avoid excessive state changes</h2>
<p>State changes (such as texture state changes) are processed by the CPU, and not the graphics card. After you&#8217;ve sorted your objects by z-val (which you might try doing in the shader when you&#8217;re CPU-bound) and vertex shader, try sorting by texture stage state.</p>
<h2>Avoid excessive texture changes</h2>
<p>Sort your objects by the texture they use, if possible.</p>
<h1>Divest your rendering code from your game</h1>
<p>At its core, the graphics card just wants to sit there and draw polys. It doesn&#8217;t care about your awesome physics, or your lifelike AI, it just wants to make pretty pictures. So try to divest your actual geometry data from your game logic as much as humanly possible. The ideal engine in my mind has the rendering code running on a separate thread, just spinnig in a loop, flinging polys at the graphics card. Consider storing all of your geometry objects in a geometry manager, which handles all of your sorting and communication with the card. Return a pointer to your parent object if you need it, and you&#8217;re good to go. More on this in later posts</p>
<p>There&#8217;ll be more to come here, but I figure that&#8217;s enough for now. Watch for part 2 in the near future.</p>
]]></content:encoded>
			<wfw:commentRss>http://evilstickman.com/blog/2009/05/20/dx9-engine-design-part-1/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The joys of a new job</title>
		<link>http://evilstickman.com/blog/2009/04/22/the-joys-of-a-new-job/</link>
		<comments>http://evilstickman.com/blog/2009/04/22/the-joys-of-a-new-job/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 02:27:16 +0000</pubDate>
		<dc:creator>Evil Stick Man</dc:creator>
		
		<category><![CDATA[Randomness]]></category>

		<category><![CDATA[Ravings]]></category>

		<category><![CDATA[Technology]]></category>

		<category><![CDATA[programming]]></category>

		<category><![CDATA[random]]></category>

		<guid isPermaLink="false">http://evilstickman.com/blog/?p=130</guid>
		<description><![CDATA[Somewhere along the line I read an article (I think it was on http://www.joelonsoftware.com, but I can&#8217;t be sure) that stated that it takes a new programmer anywhere from 6 months to a year to become fully productive and competent in a new environment. In my experience this has been pretty accurate. Mind you I&#8217;m [...]]]></description>
			<content:encoded><![CDATA[<p>Somewhere along the line I read an article (I think it was on http://www.joelonsoftware.com, but I can&#8217;t be sure) that stated that it takes a new programmer anywhere from 6 months to a year to become fully productive and competent in a new environment. In my experience this has been pretty accurate. Mind you I&#8217;m not saying that you can expect a new programmer to sit there with his thumb up his ass for 180 days - far from it! It&#8217;s just that there&#8217;s a certain amount of sluggishness in their work as they flounder in the unfamiliar code, finding their way around much as a new citizen would wander the town without a map. I typically take 4-6 months before I feel competent enough in a system to have strong opinions about its general function. Of course I&#8217;ll have made contributions by then - with my past jobs I&#8217;ve typically had functional code released within the first two weeks (depending on the company and the release cycle) - but inexperience with the system coupled with a need to discover the lay of the land tend to put a dampening effect on my desire to rock the boat.</p>
<p>My new position has been more of the same, so far, but with this being my fourth company over the past 5 or so years, I&#8217;m starting to notice some patterns:</p>
<p><strong>Whether or not you realize it, you are being unconsciously judged by your coworkers based on how long it takes you to pick things up. </strong></p>
<p>This is not something that will necessarily be set in stone for the duration of your employment, but it can color many of your early interactions. Of course you never exactly know how you measure up, not until it&#8217;s too late to change anything, but you can gauge your progress based on interactions with coworkers. Call it the &#8220;time to guru rapport&#8221; measurement - every company has its guru programmers, the guys that have been there since the beginning and know everything there is to know. The sooner you are on a comradely level with a majority of them, the better you are doing.</p>
<p><strong>A coherent, well-documented code architecture is invaluable to ramping up new programmers.</strong></p>
<p>80% of your development time should be spent in design. The architecture of a system is by far the best indicator of an organization&#8217;s dedication to code quality. It&#8217;s also the first evidence that a new developer will see of the type of coding environment at your company - will that neophyte see a culture that praises re-use and judicious application of patterns in a logical manner? Or will they see five solutions to the same problem written under a looming deadline?</p>
<p><strong>No matter how intuitive something looks, it is not as intuitive as you think it is.</strong></p>
<p>Everyone comes from different perspectives. Coworker A may have 5 years in .NET, coworker B 6 years in LISP, and you&#8217;re all writing in FORTRAN. What passes the &#8220;5 minute&#8221; test with you may not do so for someone used to a different idiom. What&#8217;s obvious in functional programming may be anathema in procedural programming (we&#8217;ll hold the &#8220;FP makes coders better&#8221; discussion at another time), and what seems like the simplest thing in the world may be a foreign concept to the most surprising of people.</p>
<p><strong>There&#8217;s no such thing as too many comments for a programmer stumbling his way through a new system.</strong></p>
<p>It doesn&#8217;t matter how ridiculous your current programmers think comments are. &#8220;Preposterous!&#8221; they say, &#8220;Good code comments itself! Anyone who can&#8217;t grasp this is a moron!&#8221; The question we need to ask ourselves is that if our organization is spending $50 an hour on a programmer, and one comment that takes thirty seconds to write can reduce their ramp-up time by an hour, how can you not write comments? I have yet to hear a decent argument that convinced me that there is any such thing as too many comments in the code - at the absolute worst, you lose nothing by having them (no matter how unnecessary they seem).</p>
<p><strong>You can tell about a company&#8217;s commitment to code by the discussions that take place around its architecture.</strong></p>
<p>If you kick off projects without an architecture meeting, you&#8217;re doing things wrong. It may seem like too corporate a model for your company, but keeping the knowledge of the overall program structure in the head of two or three people leads only to labor duplication. Conversely, multiple discussions for a simple service may point to a process that is too top-heavy.</p>
<p><strong>Process is good if it is well thought-out, but process for the sake of process is overkill.</strong></p>
<p>Having a clear sequence of steps from conception to realization is invaluable. On the flip side, though, one page of documentation per line of code is excessive. Similar to the previous item, balance is key in this area.</p>
<p><strong>One can tell if a development shop is a firehouse with the answer to one simple question</strong></p>
<p>&#8220;Was my workstation ready to go when I got to my desk?&#8221; An oversight such as this says more about the company than any two of these points combined. If your infrastructure group is not on the ball enough to have desks configured for new employees, or if there is not some process built up around onboarding, you&#8217;re sending a message that you like to fly by the seat of the pants and get things done quickly as opposed to getting things done well.</p>
<p><strong>Firehouse development, while edge-of-your-seat cool, doesn&#8217;t lead to good code.</strong></p>
<p>Every office has a hero - that guy who&#8217;s in until 4 AM, on his second pot of coffee working towards a release. Does your environment encourage this style of development? Many people have pointed out the negative correlation between hours worked per week and code quality, but organizations still persist in encouraging long hours in development with shortened schedules. The only time a programmer should be pulling 12 hour days is if something is metaphorically (or sometimes literally, depending on your job description) on fire. Any other time and it&#8217;s a failure of management, process, or both.</p>
<p>In any case, these are the things I tend to notice. What do you people look for in your first couple weeks on the job?</p>
]]></content:encoded>
			<wfw:commentRss>http://evilstickman.com/blog/2009/04/22/the-joys-of-a-new-job/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Coding problems, logic problems, and the joys of job hunting</title>
		<link>http://evilstickman.com/blog/2009/04/13/coding-problems-logic-problems-and-the-joys-of-job-hunting/</link>
		<comments>http://evilstickman.com/blog/2009/04/13/coding-problems-logic-problems-and-the-joys-of-job-hunting/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 00:28:30 +0000</pubDate>
		<dc:creator>Evil Stick Man</dc:creator>
		
		<category><![CDATA[Randomness]]></category>

		<category><![CDATA[Ravings]]></category>

		<category><![CDATA[Technology]]></category>

		<category><![CDATA[frustration]]></category>

		<category><![CDATA[job hunting]]></category>

		<category><![CDATA[problems]]></category>

		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://evilstickman.com/blog/?p=126</guid>
		<description><![CDATA[This morning I came up with an answer to a programming/logic question I was given during an interview back in early February. Before going into the rest of it, let me give the problem (and the solution I belatedly derived):
Problem: Given a dimension n, output an array that represents an n x n matrix of [...]]]></description>
			<content:encoded><![CDATA[<p>This morning I came up with an answer to a programming/logic question I was given during an interview back in early February. Before going into the rest of it, let me give the problem (and the solution I belatedly derived):</p>
<p><strong>Problem:</strong> Given a dimension n, output an array that represents an n x n matrix of numbers beginning at (n*n)-1 and decreasing to 0. The numbers must be output in such a manner as to &#8220;wrap around&#8221; the resulting matrix, and must be output as a single array. For example, if the function is given the number &#8216;3&#8242;, the output will be as follows:</p>
<pre>8, 7, 6, 1, 0, 5, 2, 3, 4</pre>
<p>Which is a linear, row-major representation of the matrix</p>
<pre>8, 7, 6</pre>
<pre>1, 0, 5</pre>
<pre>2, 3, 4</pre>
<p>You may not pre-calculate the matrix and index into it, nor may you store an array of results and index them based on the dimension. In other words, you need to develop a function that, when given a position (i, j) and a dimension n, outputs the appropriate value for (i, j).</p>
<p><strong>My solution:</strong></p>
<pre>int calc(int i, int j, int n)</pre>
<pre>{</pre>
<pre>  if(i == 0 || j == (n-1))</pre>
<pre>  {</pre>
<pre>    return ((n*n) - 1 - i - j)</pre>
<pre>  }</pre>
<pre>  if(i == (n-1) || j == 0)</pre>
<pre>  {</pre>
<pre>    return (((n-1)*(n-1)) - ((n-1) - j) - ((n-1) - i))</pre>
<pre>  }</pre>
<pre>  if(n &gt; 2)</pre>
<pre>  {</pre>
<pre>    return calc(i-1, j-1, n-2)</pre>
<pre>  }</pre>
<pre>  // should never get here</pre>
<pre>  return 0</pre>
<pre>}</pre>
<p><strong>Explaining the solution:</strong><br />
I don&#8217;t claim that this solution is optimal, or that this solution is the &#8220;right&#8221; solution. All I can say for it is that when I worked out the &#8220;wrapped&#8221; matrices for several dimensions and then ran those resulting matrices cell-by-cell through the above algorithm the results matched, meaning that if nothing else the function above successfully takes a coordinate input and returns the &#8220;wrapped&#8221; value. Indeed, if anyone has a better solution to the problem, please let me know!</p>
<p>One of the first things that should be obvious in this solution is the recursion (when n &gt; 2), and I figure that deserves some explanation. If you write out several examples, you start to notice a pattern. For example, take a look at the matrices for n = 3 and n = 5:</p>
<pre>            24, 23, 22, 21, 20</pre>
<pre>8, 7, 6,     9,  8,  7,  6, 19,</pre>
<pre>1, 0, 5,    10,  1,  0,  5, 18,</pre>
<pre>2, 3, 4     11,  2,  3,  4, 17,</pre>
<pre>            12, 13, 14, 15, 16</pre>
<p>The larger dimension, n = 5, actually contains the matrix for n = 3 verbatim. In fact, this is true of all odd and all even dimensions - the matrix for n = 6 contains n = 4, and the matrix for n = 7 contains both n = 5 and  n = 3 (I&#8217;ll leave it to you to work out these matrices to see that this is true). So the recursion needs to occur on n -2 in each case, to move to the next odd or even dimension as applicable. A dimension of 1 outputs 0 in a single location, and a dimension of 2 outputs the matrix 3, 2, 0, 1 as expected given the above conditions, meaning that the guard against n &gt; 2 is unnecessary, but I felt uncomfortable leaving it out.</p>
<p>Once you figure out the recursion, you then need a means to calculate the &#8220;border&#8221; values. The two equations you see above are the results of two or three hours of deliberations and testing by hand. There is a division between how you count each edge - the top and rightmost edge use one formula, while the bottom and leftmost edge use another. This is reflected in the two conditions above. (I originally wrote it out as four separate conditions, but condensed it into 2). The conditions check only for the edge cases - when i = 0 (top edge), when j = 0 (left edge), when i = n-1(right edge, or when j = n-1 (bottom edge).</p>
<p><strong>OK, so what&#8217;s the big deal?</strong><br />
This problem has been bothering me for almost two months now. It was something I should have been able to do (and, indeed, I was eventually able to do it), and I&#8217;m pretty sure that my inability to provide the complete answer during the interview resulted directly in me not getting the job (especially considering I nailed the technical portion of the interview). More than that, though, it exposed a worry that I had that I was actually losing intelligence as I age. I felt strongly that I should have been able to solve it sooner, and indeed some anxiety as a result of this internal assertion probably led to my inability to provide the complete solution during the interview. That and the general stress of interviewing with a company whose phone screen was so technically intense that anyone who could make it into their offices for the in-person pretty much officially Knows Their Stuff (or so I&#8217;m told).</p>
<p>This problem bugged me so much that I spent time solving it while on vacation, sitting around with graph paper and a pen while my family socialized around me. For some reason I let this one problem, this one failed interview get to me in a very primal way, and I&#8217;ve been wracking my brains trying to figure out why I just couldn&#8217;t get over it. I tied my ability to solve problems (which, as a programmer, is pretty much my bread and butter) to my self-worth, and became slightly obsessed as a result. Indeed the obsession is still fading - half the reason for this post is the hope that someone out there in internet-land has a better solution, or at the very least can confirm my efforts!</p>
<p>One of the biggest problems any coder looking for work has is in proving themselves. Companies are looking for programmers who know what they claim to know, who aren&#8217;t bullshitting the interviewer into a job they&#8217;ll be forced out of in 6 months due to incompetence. Furthermore, many companies ascribe to the philosophy that a great programmer is many times more productive than a mediocre programmer (a philosophy I don&#8217;t necessarily disagree with, but more on that later) and thus orient their screening process towards ferretting out these artisans of ascii. This basically boils out into one of three interview patterns:</p>
<p>1 - The candidate is subjected to several intense hours of technical interviews covering topics ranging from mathematics to algorithms to data design<br />
2 - The candidate is subjected to a programming or logic test designed to be unique enough so as not to be easily searchable on the web and to test the candidate&#8217;s ability to both work under pressure and produce excellent code<br />
3 - The candidate is subjected to both pattern 1 and pattern 2.</p>
<p>The problem faced by the companies, of course, is that there are a lot of people out there who would attempt to subvert the interview process by learning a few buzzwords and faking their way through the process. As a result, these charlatans have caused the rest of us decent people trouble and made companies highly selective.</p>
<p>The problem faced by the job candidate, though, is more insidious. First off, some people (I am not one of them, but I can understand the mindset) take offense at having to take coding tests, thinking that their years of experience and stellar references should be adequate proof of their ability. Second, these kinds of problems can have a profound effect on the job candidate, and can affect the course of the interview. Sure, throwing a curve ball at someone is a good opportunity to judge how they react to adverse situations, but with programmers (and problem-solvers in general), if they get this kind of thing wrong, or even worse if they can&#8217;t solve it at that time, this problem will work itself into their psyche, DEMANDING that it be solved, and will take a measurable toll on the individual as they obsess about the problem while trying to continue to answer the interviewer&#8217;s questions as they move on to other areas, and in the end this kind of problem colors the company&#8217;s perception of the candidate in a manner disproportionate to the applicability of the skills involved to the job being applied for. Third, these kinds of problems have yet to demonstrably select the &#8220;best&#8221; candidate for the job. The skills used to solve logic puzzles are not necessarily those used to solve programming problems, and 95% of any programmer&#8217;s job is not going to require thought of that order at all. Take Microsoft, for example - they are notorious for using these kinds of interviewing tactics and as a result they do write some very good code, but they also make some of the most horrific blunders in code and application design known to man.</p>
<p>Probably the biggest problem with this kind of interviewing pattern, though, is that every worthwhile company has their own problem or three, and every worthwhile company thinks that pushing their candidates through the technical interview/logic/coding problem wringer results in getting the best of the best. Each and every company prides themselves on having the best and the brightest, evidenced by how well these individuals did on their tests. This calls into view a white lie that recruiters tell themselves - that there are more bright people than there are job openings. Any person of moderate intelligence can do the math and realize that the number of positions governed by hiring managers employing these tactics exceeds the statistically probable numbers of &#8220;best and brightest&#8221;. Not everyone gets to be an astronaut, and there are a lot more fry cooks than there are rocket scientists. But most importantly of all, these managers and these companies ignore one of the brutal truths of programming in general: 95% of coding is performing the equivalent of menial labor, the kind of tasks that you could train a monkey to perform if you had the time. No matter how intelligent your programmers are, their intelligence is largely wasted if all they do is implement specs. For every person developing an algorithm for an autonomous combat drone, there are dozens squirreled away in a cube farm updating corporate software for the next big product switch, changing enumerations occasionally throughout the code, or hunting down an elusive typo.</p>
<p>As a job seeker, there&#8217;s not much we can do except rail against the system quietly after we&#8217;ve already gone through the wringer and found that next employer. The only means to change this process come when you have power that is typically granted to people that don&#8217;t have Computer Science anywhere in their credentials, and even then a significant portion of technical manners swear by the &#8220;beat down&#8221; method of interviewing. For myself, all I can do is know that I am competent, that given enough time I can perform 95% of coding tasks in the business world, and that no matter what my inability to solve a problem is much more easily explained by stress than by a phantom loss of intelligence.</p>
<p>Note that this is not an indictment of my current employer. Yes, I had to take a coding test when I was interviewing with them, but they also had one of the least BS-laden interview processes I&#8217;ve ever been through. I only wish the rest of the companies I interviewed with had been as straightforward. All I&#8217;m really doing here is releasing some pent-up aggression from my job hunt in the form of an internet rant. Not really effective, but it does help me feel better <img src='http://evilstickman.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Anyway, I&#8217;m done with the incoherent ramble.</p>
]]></content:encoded>
			<wfw:commentRss>http://evilstickman.com/blog/2009/04/13/coding-problems-logic-problems-and-the-joys-of-job-hunting/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Life takes precedence</title>
		<link>http://evilstickman.com/blog/2009/02/25/life-takes-precedence/</link>
		<comments>http://evilstickman.com/blog/2009/02/25/life-takes-precedence/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 04:54:40 +0000</pubDate>
		<dc:creator>Evil Stick Man</dc:creator>
		
		<category><![CDATA[Exercise]]></category>

		<category><![CDATA[Ravings]]></category>

		<category><![CDATA[fail]]></category>

		<category><![CDATA[walking]]></category>

		<category><![CDATA[weight frustration]]></category>

		<guid isPermaLink="false">http://evilstickman.com/blog/?p=123</guid>
		<description><![CDATA[After two months of silence, I have progress to report - I&#8217;ve lost about 8 pounds! From 228 at the start to right around 220 now (217 on a good day). However I&#8217;m not certain this is something to be proud of - I haven&#8217;t done a pushup in over two months. The loss of [...]]]></description>
			<content:encoded><![CDATA[<p>After two months of silence, I have progress to report - I&#8217;ve lost about 8 pounds! From 228 at the start to right around 220 now (217 on a good day). However I&#8217;m not certain this is something to be proud of - I haven&#8217;t done a pushup in over two months. The loss of my job back in January hit me pretty hard, and when I wasn&#8217;t applying to jobs or studying for interviews I just didn&#8217;t have the motivation to keep myself in shape. I think the 8 pounds above is some combination of eating less and digesting more due to stress, but I obviously can&#8217;t say anything for certain. I was also borderline ill for most of the period, and full-on ill for the last week, so that probably contributed to my lack of motivation.</p>
<p>On the plus side I walked 3.5 miles today. One of the benefits of losing my job is that my new position will require much more walking, which will mean much more exercise for a certain lazy ass I know. I&#8217;m not going to name names, but his initials are MYSELF. So hopefully what has resulted over the past two months continues into the future as I get more active. The 3.5 miles was round trip to and from the train station, which will be my primary means of commute going forward. I figure that at least during the warmer months I can walk it, then when it starts to get cold I can switch to a bike with cold weather gear. From tragedy arises opportunity.</p>
]]></content:encoded>
			<wfw:commentRss>http://evilstickman.com/blog/2009/02/25/life-takes-precedence/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Treading water</title>
		<link>http://evilstickman.com/blog/2009/01/05/treading-water/</link>
		<comments>http://evilstickman.com/blog/2009/01/05/treading-water/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 15:24:14 +0000</pubDate>
		<dc:creator>Evil Stick Man</dc:creator>
		
		<category><![CDATA[Ravings]]></category>

		<category><![CDATA[Exercise]]></category>

		<category><![CDATA[food]]></category>

		<category><![CDATA[pushups]]></category>

		<category><![CDATA[running]]></category>

		<category><![CDATA[situps]]></category>

		<guid isPermaLink="false">http://evilstickman.com/blog/archives/121</guid>
		<description><![CDATA[Still in &#8220;back-off&#8221; mode to ensure I don&#8217;t damage myself. I had wanted to start working out again this week, but due to some chaos in evil stick land I&#8217;m going to have to continue to take it slow. As it is, though, I&#8217;ll still be staying very active as we make improvements on the [...]]]></description>
			<content:encoded><![CDATA[<p>Still in &#8220;back-off&#8221; mode to ensure I don&#8217;t damage myself. I had wanted to start working out again this week, but due to some chaos in evil stick land I&#8217;m going to have to continue to take it slow. As it is, though, I&#8217;ll still be staying very active as we make improvements on the house this week and hit the still-packed stuff with a vengeance.</p>
<p>Starting next week, I&#8217;m going to start everything over. I&#8217;ll kick off the pushups from week 1 again, doing those on Monday, Wednesday, and Friday. I&#8217;ll then do the situps on Tuesday, Thursday, and Saturday. Part of the problem I think I ran in to is that I was doing the pushups and situps concurrently on Monday, Wednesday, and Friday, possibly overtaxing my system. I&#8217;ll give this approach a couple weeks, and see how it goes. If it all goes well, then full steam ahead.</p>
<p>I&#8217;m also still on my enforced absence from the treadmill. I figure once the weather starts to warm up in March I&#8217;ll begin actually walking outside. in the meantime I don&#8217;t feel comfortable using the treadmill as it&#8217;s the beast that caused my problems in the first place. I may use it to do some walking, but I definitely won&#8217;t be running indoors for a while (if at all).</p>
<p>On a side note, as I was eating breakfast this morning (corn flakes, woo!) I remembered a snack I used to enjoy back in high school - put corn flakes in a cup, add whipped cream, then mix and enjoy! Ahh the halcyon days of youth, when I could eat whatever I wanted without fear of reprisal. Back then I had a theory that I wouldn&#8217;t start to get fat until I started working out heavily, as if I didn&#8217;t have a lot of muscle I wouldn&#8217;t have any muscle to convert to fat due to inactivity. Naive, but it has a certain ring to it, I think.</p>
]]></content:encoded>
			<wfw:commentRss>http://evilstickman.com/blog/2009/01/05/treading-water/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Need to back off</title>
		<link>http://evilstickman.com/blog/2008/12/29/need-to-back-off/</link>
		<comments>http://evilstickman.com/blog/2008/12/29/need-to-back-off/#comments</comments>
		<pubDate>Mon, 29 Dec 2008 21:29:21 +0000</pubDate>
		<dc:creator>Evil Stick Man</dc:creator>
		
		<category><![CDATA[Ravings]]></category>

		<category><![CDATA[Exercise]]></category>

		<category><![CDATA[frustration]]></category>

		<category><![CDATA[illness]]></category>

		<category><![CDATA[pulled muscles]]></category>

		<guid isPermaLink="false">http://evilstickman.com/blog/archives/120</guid>
		<description><![CDATA[So I pushed a little harder than I should have at this whole pushup-situp thing, and I&#8217;m pretty sure I pulled a muscle. As a result I&#8217;m taking it easy for a bit to make sure I don&#8217;t do any more damage. On top of that, I&#8217;m getting sick for some reason. I blame it [...]]]></description>
			<content:encoded><![CDATA[<p>So I pushed a little harder than I should have at this whole pushup-situp thing, and I&#8217;m pretty sure I pulled a muscle. As a result I&#8217;m taking it easy for a bit to make sure I don&#8217;t do any more damage. On top of that, I&#8217;m getting sick for some reason. I blame it on the small children I was near over the holidays. I don&#8217;t have time to be sick, dammit. So things are a bit slower right now than they usually are. It&#8217;s both irritating, as that&#8217;s now twice that I&#8217;ve caused problems by trying so hard to do the right thing, and demoralizing, as due to the impending illness I have absolutely zero energy of any kind. argh.</p>
]]></content:encoded>
			<wfw:commentRss>http://evilstickman.com/blog/2008/12/29/need-to-back-off/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Still truckin&#8217;</title>
		<link>http://evilstickman.com/blog/2008/12/22/still-truckin/</link>
		<comments>http://evilstickman.com/blog/2008/12/22/still-truckin/#comments</comments>
		<pubDate>Mon, 22 Dec 2008 22:47:00 +0000</pubDate>
		<dc:creator>Evil Stick Man</dc:creator>
		
		<category><![CDATA[Ravings]]></category>

		<guid isPermaLink="false">http://evilstickman.com/blog/?p=118</guid>
		<description><![CDATA[So while I&#8217;ve been quiet, I&#8217;ve still been slowly working at improving myself. I&#8217;m still on the revamped 100 pushups program (now with less speed and better form!) and am currently on week 3. I actually finished week 3 last week, but I didn&#8217;t feel confident in my results. As such, I&#8217;ll be doing week [...]]]></description>
			<content:encoded><![CDATA[<p>So while I&#8217;ve been quiet, I&#8217;ve still been slowly working at improving myself. I&#8217;m still on the revamped 100 pushups program (now with less speed and better form!) and am currently on week 3. I actually finished week 3 last week, but I didn&#8217;t feel confident in my results. As such, I&#8217;ll be doing week 3 again during this holiday week to ensure I meet with success. This way around is definitely harder (especially due to my addition of crunches to the program, being done concurrently with the pushups), but I think I&#8217;m making some progress.</p>
<p>Wish the same could be said about my running. I haven&#8217;t hit a treadmill since the twinge in my knee made me step off for a bit, thinking i needed to rest. Now I notice that my knee starts to hurt after snowblowing the driveway for an hour or so. I&#8217;ve probably done some damage to something in my leg, so I should probably see a doctor at some point. At the moment, though, that requires both finding a clinic nearby and finding a reputable doctor at said clinic, as my last physician is no longer with the clinic I used to go to, and that&#8217;s a lot of effort I&#8217;m not too keen on putting out. As it is, I can now understand how people can go months with medical issues before seeking help, as if it&#8217;s something that just doesn&#8217;t affect one&#8217;s life too heavily they&#8217;re easy to ignore. My main concern, though, is insurance-based, as in &#8220;What is actually going to be covered if I need physical therapy?&#8221; Never mind where I&#8217;m going to find the time.</p>
<p>Anyway, I was watching Christmas with the Kranks the other day, and even getting past the &#8220;performance&#8221; of Tim Allen as one of the titular kranks, I was struck by just how hard the movie was pushing the &#8220;Saving money is for suckers, spend to show your love&#8221; dynamic. As one who does not necessarily take joy in this season because of the crass overcommercialization of what should be essentially a religious holiday, I may be a bit hypersensitive to these kinds of things, but they still strike me as doing a disservice to youth. Tell me that movies like Christmas with the Kranks, or How the Grinch Stole Christmas, don&#8217;t indoctrinate youth into thinking that attempts at thriftitude over the holidays represent something vile to be frowned upon! Seriously, in nearly ever tale of Christmas cheer, the central message of love and togetherness is replaced with love and retail. Scrooge from &#8220;A Christmas Carol&#8221; was noticeably thrifty, the Grinch lamented the propensity of the Whos to purchase needless things that they&#8217;d just throw away, and even the Martians demanded toys of the man in the red pimp suit.</p>
<p>Now I don&#8217;t have a problem with Christmas itself. If it was more like Thanksgiving, focused on a gathering of family and a meal, then I would have no complaint whatsoever. However, as it exists now all that Christmas stands for for most people is mindless spending. People buying people gifts not necessarily because it makes them happy, but almost out of a sense of obligation that&#8217;s been pounded into us from our innocent youths all the way up to yesterday&#8217;s jewelry commercial. Why can&#8217;t gathering as a family be enough? Why must we constantly be inundated with demands that we fork over our hard-earned cash to fulfill the wishes of someone else? Do we really serve their needs by perpetuating their desires for stuff that they may not actually need? Is the basis of capitalism so weak that it needs a yearly shine to continue honest function?</p>
<p>Christmas = woohoo! Gifts and the advertising and retail blitz = bah humbug.</p>
]]></content:encoded>
			<wfw:commentRss>http://evilstickman.com/blog/2008/12/22/still-truckin/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Seriously, WTF</title>
		<link>http://evilstickman.com/blog/2008/12/19/seriously-wtf/</link>
		<comments>http://evilstickman.com/blog/2008/12/19/seriously-wtf/#comments</comments>
		<pubDate>Fri, 19 Dec 2008 17:05:50 +0000</pubDate>
		<dc:creator>Evil Stick Man</dc:creator>
		
		<category><![CDATA[Ravings]]></category>

		<category><![CDATA[drivers]]></category>

		<category><![CDATA[idiots]]></category>

		<category><![CDATA[snow]]></category>

		<guid isPermaLink="false">http://evilstickman.com/blog/archives/117</guid>
		<description><![CDATA[Pop quiz: You see a car in a turn lane, spinning tires, with hazards on making little progress. Do you A) recognize that this person is stuck and go around, B ) attempt to assist them in moving the vehicle, or C) Start honking, gesturing wildly, and flipping people off?
Seriously, what the fuck possesses people [...]]]></description>
			<content:encoded><![CDATA[<p>Pop quiz: You see a car in a turn lane, spinning tires, with hazards on making little progress. Do you A) recognize that this person is stuck and go around, B ) attempt to assist them in moving the vehicle, or C) Start honking, gesturing wildly, and flipping people off?</p>
<p>Seriously, what the fuck possesses people around here? 95% of the population needs to be wiped off the fucking map for being such retarded fucking assholes that the mere threat of their procreation should be sufficient to have them executed for treason. To the idiot old man in the red minivan who thought that honking at me and flipping me off while gesturing wildly would somehow magically make my car obtain traction and move, I hope you die in a fire, after having watched all your friends and love ones get raped by an aids-carrying syphilitic midget hooker bear with barbed wire wrapped around its shaft like a barber pole.</p>
]]></content:encoded>
			<wfw:commentRss>http://evilstickman.com/blog/2008/12/19/seriously-wtf/feed/</wfw:commentRss>
		</item>
		<item>
		<title>First camp complete, first true test of improvement</title>
		<link>http://evilstickman.com/blog/2008/12/08/first-camp-complete-first-true-test-of-improvement/</link>
		<comments>http://evilstickman.com/blog/2008/12/08/first-camp-complete-first-true-test-of-improvement/#comments</comments>
		<pubDate>Mon, 08 Dec 2008 17:23:31 +0000</pubDate>
		<dc:creator>Evil Stick Man</dc:creator>
		
		<category><![CDATA[Exercise]]></category>

		<category><![CDATA[Music]]></category>

		<category><![CDATA[Randomness]]></category>

		<category><![CDATA[Ravings]]></category>

		<category><![CDATA[camp]]></category>

		<category><![CDATA[drum corps]]></category>

		<guid isPermaLink="false">http://evilstickman.com/blog/?p=113</guid>
		<description><![CDATA[Kilties 2009 Open house has come and gone. I&#8217;m not exactly sure how to feel about it. On the one hand, my physical preparation definitely paid off in spades - I was able to control the horn better, had better endurance, and didn&#8217;t have nearly as much arm pain this year as I have in [...]]]></description>
			<content:encoded><![CDATA[<p>Kilties 2009 Open house has come and gone. I&#8217;m not exactly sure how to feel about it. On the one hand, my physical preparation definitely paid off in spades - I was able to control the horn better, had better endurance, and didn&#8217;t have nearly as much arm pain this year as I have in years past. So if nothing else, I&#8217;m definitely more physically fit than I have been before.</p>
<p>The other side, though, is two new experiences that I went through this weekend. First, I moved up to 1st bari to give it a shot. It&#8217;s a bit outside my range now, but I&#8217;m hoping that if I work my ass off over the next couple months I&#8217;ll be able to manage the show range-wise come January. As it went yesterday, I did OK for about the first 15 minutes, but then repeated Ds above high C wore me out quickly. I&#8217;m kind of facing the same problem I had on trumpet - no problems at all with technical stuff or with rhythms, but lots of trouble with endurance and range. Of course I&#8217;m told by several people that the opener for this year is a lot tougher on the baritones than it was last year, so I suppose that should be taken into account. In any case I&#8217;ll definitely be busting my ass to improve my range and tone quality before January Camp.</p>
<p>The second experience was my first weekend as a staff member. After last season, Scott wanted to make some changes in how we handle staff. Mainly he felt that he wasn&#8217;t getting enough commitment from the staff he had at the time, and furthermore that some of the membership was doing a better job teaching things that he could see than the staff he had. So he&#8217;s trying something new this year - pulling most of the staff from within the corps itself. Horn and visual techs, percussion techs, and guard staff are all marching members (with one or two exceptions due to physical limitations). There are still non-marching staff members - coordination and big-picture tower stuff necessitates the person teaching that caption not be in  the line - but most of the winter program is being conducted by members themselves. I was fortunate enough to be chosen as a visual tech for the brass line. This basically means that I get to teach the entire visual program, and lead basics and visual sectionals.</p>
<p>So anyway, this weekend was my first camp as visual staff, really my first camp as any kind of staff member. We had spent several weeks discussing the finer points of the visual program among ourselves (things like &#8220;The arms shall form a 120 degree triangle, the weight shall be 60% forward, etc), which I then got the opportunity to present to the corps during basics blocks this weekend. The main problem we&#8217;ve had as a corps is that so far we&#8217;ve had a different visual program every year that I&#8217;ve marched. Unfortunately, that includes this year. As we had our staff meetings in October and November, we came to a consensus that there were some things in last year&#8217;s visual program that just weren&#8217;t working as well as they could. So we made a series of small changes that ended up amounting to some major-ish changes in how the hornline presents itself. The core philosophy presented last year by the visual staff is still essentially the same - movement initiates from the center of the body, emphasis is on moving the center about as opposed to reaching for positions - but some of the particulars are changed. In particular, what we&#8217;re emphasizing is almost an alternative way to think of marching in that instead of stepping with the left foot, we&#8217;re pushing off with the other foot. Some stuff we are changing - for example, we&#8217;re pulling the corps down off the platform some on the backwards march. This is to make the program more accessible, and to improve balance and maneuvering among those who may be having trouble in the first place. But the main concept of the movement is the same - the center of the body has always been the focus of the movement - it just may never have been adequately stated to the corps.</p>
<p>But I&#8217;ve digressed a bit, I think. As I mentioned, this was the first weekend, which means that I was essentially responsible for teaching the corps the new visual program. This also means that, from a certain perspective, the staff&#8217;s changes are MY changes. The new program is MY new program. Some of the stuff we&#8217;re doing with the upper body is quite different from what the corps has done in the past (but not that different from how most DCI corps do things today), and it showed as I tried to teach it. It was almost as if I could feel a &#8220;WTF is this?!&#8221; gravitating off everyone in the line.</p>
<p>It&#8217;s kind of weird, because from one perspective I know that I&#8217;m perpetuating a problem that the corps has had in the past - a visual program that changes from year to year - but from another perspective I&#8217;m really just doing what I can to push the program that pretty much the entire staff agreed upon. Yeah, it sucks to have to change every year, and for this to be just another year in the sequence, but we&#8217;ve got to be honest with ourselves - every visual person has a different idea of what&#8217;s &#8220;modern,&#8221; of what &#8220;looks good,&#8221; of what is &#8220;old school&#8221; much as most brass staff have differing ideas of a hornline&#8217;s characteristic sound. By virtue of having changed visual staff every year I was there (Chad Quamme in 2007, Andy Brady in 2008, Myself, Terry and Scooter in 2009) you&#8217;re going to see changes in the program. The trick then becomes one of staff retention. If the staff doesn&#8217;t change from year to year, the visual program won&#8217;t change from year to year either. It really isn&#8217;t change for change&#8217;s sake in that case, it&#8217;s more along the lines of &#8220;Look, you hired me to teach to the best of my ability, and this is what I know how to teach.&#8221; The best case for a group like the Kilties is to have a consistent staff year in and year out. If the staff doesn&#8217;t change, then the main program itself doesn&#8217;t change. My view is that staff retention leads to program stability, and I think that a lot of people can agree with that.</p>
<p>In any case, as a staff member this year, I feel two impulses. One, I have to overcome the frustration/reticence/irritation at yet another visual program change as I teach, and two, we as a staff need to settle on something that will change as little as possible. As a person who is new to teaching anything, I feel a little bit out of my depth taking this on. I know that what I&#8217;m presenting is well thought-out and well-reasoned (even if some people disagree with it), but because I&#8217;m inexperienced I have no way of knowing if I&#8217;m doing an effective job of getting this across. One of my biggest concerns is that the hornline comes away from visual sections thinging that I&#8217;m throwing this stuff at them completely at random. I think most of this is in my head, though. All I can really do is offer open communication on any issues the members have, and be confident in my own abilities in the end. Some people won&#8217;t like the things I&#8217;m presenting, and if I can change their mind that&#8217;s great. Some people don&#8217;t think the staff model is the right way to go, and they&#8217;re entitled to their opinion. I can only hope people keep an open mind and discuss their concerns before using them as a reason for leaving the organization.</p>
<p>My work is cut out for me. From what I&#8217;ve been told, we&#8217;re doing a lot more communication as a staff this year than has been done in years past. Being new to this I don&#8217;t have any basis for comparison, so all I can do is make sure I know everything I can ahead of time. Time to buckle down.</p>
]]></content:encoded>
			<wfw:commentRss>http://evilstickman.com/blog/2008/12/08/first-camp-complete-first-true-test-of-improvement/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The true story of Christmas</title>
		<link>http://evilstickman.com/blog/2008/12/05/the-true-story-of-christmas/</link>
		<comments>http://evilstickman.com/blog/2008/12/05/the-true-story-of-christmas/#comments</comments>
		<pubDate>Fri, 05 Dec 2008 15:59:43 +0000</pubDate>
		<dc:creator>Evil Stick Man</dc:creator>
		
		<category><![CDATA[Randomness]]></category>

		<category><![CDATA[Ravings]]></category>

		<category><![CDATA[christmas]]></category>

		<category><![CDATA[ELF]]></category>

		<category><![CDATA[random]]></category>

		<category><![CDATA[St. Nick]]></category>

		<guid isPermaLink="false">http://evilstickman.com/blog/?p=111</guid>
		<description><![CDATA[Surely you remember the French and Indian war. Even though that was technically a loss for the colonies, we were able to snag a small amount of territory in the extreme north of Canada, as they were distracted by a raid in Montreal (we were attempting a long-term pincer tactic - by the time they [...]]]></description>
			<content:encoded><![CDATA[<p>Surely you remember the French and Indian war. Even though that was technically a loss for the colonies, we were able to snag a small amount of territory in the extreme north of Canada, as they were distracted by a raid in Montreal (we were attempting a long-term pincer tactic - by the time they figured out our plan on coming from the north, it&#8217;d be too late). No bigger than 36 miles square, but it was enough for our purposes. At that time we didn&#8217;t have a flag of our own to plant, still being under british rule, so instead we put up a striped pole to indicate cooperation of the old (the red, Britain) and the new (the white, the pure, American colonies). In this territory we set up a small arms-manufacturing venture, as due to our sheer distance from standard supply lines the soldiers needed to re-arm and resupply themselves. They had a lot of help from the local population - a tribe of small, compact humanoids who scraped a living hunting reindeer and caribou - who proved to be a mighty boon to our productivity. They were actually a splinter tribe from the main Eskimo population of what is now Alaska, popularly known at the time as the Eskimo Liberation Front (ELF, for short).</p>
<p>Well the war ended in 1763, just as the northern production base was getting under full steam (back in those days, they took a long view of things). When the soldiers received the message, they promptly abandoned the facility at the &#8220;north pole&#8221; (as it came to be known) and began the long journey home. All, of course, with the exception of one redcoat Sergeant, a Christopher Nicholas Kringle, who had discovered a home among the Elves and the frigid north. He had also fallen in love with one of the Elves, and was married according to their custom (the exact ceremony is lost to time, but is thought to involve snow sculptures augmented with coal and carrots). With his new bride and tribe, he realized that a weapons production facility isn&#8217;t the best place to raise a family, so he had the entire facility converted into a toy shop and bakery. Within a few years he became renowned for both endeavors - for his high-quality wooden toys, and for his Danish Kringles (named after the cook who invented them - Dana, an ELF of great renown, and for the proprietor that gave him the means to create such delicacies - Sgt. Kringle).</p>
<p>After a while, though, the price of base foodstuffs became too much to justify the supply train the North Pole workshop regularly received, so he sold off his bakery to some Scandanavian merchants, who promptly went on to make a name for themseves in the pastry business. After this, the North Pole kind of fell off the map, so to speak, as due to their self-sufficiency they didn&#8217;t have much need of the standard traders, who after a while just stopped coming. Memory of the area slowly faded until one fateful Christmas, twenty years later, when Chris Kringle (or Sgt. Nick as he liked to be known) made a visit to the Colonies bearing the fruits of 20 years of ELF toy-making labor. Having had a hard journey, he was so overjoyed at his arrival that he gave away most of his toys for free to celebrate.</p>
<p>Thus we have the true origin of Christmas. Sgt. Nick, over time, has lost the &#8216;g&#8217; in his appelation, to become St. Nick, and the whole world knows the joy that Chris Kringle&#8217;s toys can bring to unsuspecting tots. Now you know, and knowing is half the battle.</p>
]]></content:encoded>
			<wfw:commentRss>http://evilstickman.com/blog/2008/12/05/the-true-story-of-christmas/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
