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

<channel>
	<title>The Mothership</title>
	<atom:link href="http://www.planetcrushers.com/heide/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.planetcrushers.com/heide</link>
	<description>Just another useless personal blog</description>
	<lastBuildDate>Fri, 02 Sep 2011 18:27:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>The Settings Are A Bit Off</title>
		<link>http://www.planetcrushers.com/heide/archives/2011/09/02/the-settings-are-a-bit-off/</link>
		<comments>http://www.planetcrushers.com/heide/archives/2011/09/02/the-settings-are-a-bit-off/#comments</comments>
		<pubDate>Fri, 02 Sep 2011 18:27:28 +0000</pubDate>
		<dc:creator>heide</dc:creator>
				<category><![CDATA[Geek]]></category>

		<guid isPermaLink="false">http://www.planetcrushers.com/heide/?p=964</guid>
		<description><![CDATA[The offset sizes were another area I could experiment with a bit. Originally I had three different offset lengths, a short-range one, a medium-range one, and a long-range one, on the theory that shorter offsets might occur more often than longer offsets, and could be stored in fewer bits. If a buffer size of &#8216;n&#8217; [...]]]></description>
			<content:encoded><![CDATA[<p>The offset sizes were another area I could experiment with a bit.  Originally I had three different offset lengths, a short-range one, a medium-range one, and a long-range one, on the theory that shorter offsets might occur more often than longer offsets, and could be stored in fewer bits.  If a buffer size of &#8216;n&#8217; bits was specified, the long-range offset would be &#8216;n&#8217; bits, the medium range offset would be &#8216;n-1&#8242; bits, and the short-range offset would be &#8216;n-2&#8242; bits.</p>
<p>Some experimentation showed that having these different ranges was indeed more efficient than having just a single offset length, but it was hard to tell just what the optimal sizes were for each range.  I kept it to only three different ranges because initially I didn&#8217;t want the number of identifier symbols to be too large, but after merging the identifiers into the literals, I had a bit more leeway in how many more ranges I could add.</p>
<p>So&#8230;why not add a range for <i>every</i> bit length?  I set it up so that 256 would correspond to a 6-bit offset, 257 indicated a 7-bit offset, 258 is an 8-bit offset, etc., all the way up to 24-bit offsets.  This also had the property that, except for the bottom range, an &#8216;n&#8217;-bit offset could be stored in &#8216;n-1&#8242; bits, since the uppermost bit would always be &#8217;1&#8242; and could be thrown away (if it was &#8217;0&#8242;, it wouldn&#8217;t be considered an &#8216;n&#8217;-bit offset, since it fits in a smaller range).  Some testing against a set of data files showed that this did indeed improve the compression efficiency and produced smaller files.</p>
<p>With all of these possible bit values and lengths though, there was still the open question of what should be considered <i>reasonable</i> values for things like the default history buffer size and match length.  Unfortunately, the answer is that it&#8230;depends.  I used a shell script called &#8216;explode&#8217; to run files through the compressor with all possible combinations of a set of buffer sizes and match lengths to see which would produce the smallest files, and the results varied a lot depending on the type and size of input file.  Increasing the match length did not necessarily help, since it increased the average size of the length symbols and didn&#8217;t necessarily find enough long matches to cancel that out.  Increasing the buffer size generally improves compression, but greatly increases memory usage and slows down compression.  After some more experimentation with the &#8216;explode&#8217; script, I settled on defaults of 17 bits for the buffer size, and a match length of 130.</p>
<p>Another idea I&#8217;d remembered hearing about was how the best match at the current byte might not necessarily be the most efficient match.  It might be more efficient to emit the current byte as a literal instead if the next byte is the start of an even longer match.  It was only an intuitive feeling though, so I implemented this and tested it and it did indeed seem to give a consistent improvement in compression efficiency.  As an example, in one text document the phrase &#8216;edge of the dock&#8217; was compressed like so:</p>
<pre>Literal: 'e' (101) (4 bits)
Literal: 'd' (100) (6 bits)
Literal: 'g' (103) (8 bits)
10-bit offset: 544   Length: 3 'e o' (16 bits)
 8-bit offset: 170   Length: 6 'f the ' (17 bits)
10-bit offset: 592   Length: 3 ' do' (16 bits)
Literal: 'c' (99) (6 bits)
Literal: 'k' (107) (7 bits)</pre>
<p>but with the new test, it generated the following instead:</p>
<pre>Literal: 'e' (101) (4 bits)
Literal: 'd' (100) (6 bits)
Literal: 'g' (103) (8 bits)
Literal: 'e' (101) (4 bits) (forced, match len=3)
 8-bit offset: 170   Length: 8 ' of the ' (19 bits)
10-bit offset: 592   Length: 3 ' do' (16 bits)
Literal: 'c' (99) (6 bits)
Literal: 'k' (107) (7 bits)</pre>
<p>The &#8216;forced&#8217; literal normally would have been part of the first match, but by emitting it as a literal instead it was able to find a more efficient match and only two offset/length tokens were needed instead of three, for a difference of 80 bits for the original versus 70 bits for the improved match.  Doing these extra tests does slow down compression a fair bit though, so I made it an optional feature, enabled on the command line.</p>
<p>At this point though, it&#8217;s getting harder and harder to extract gains in compression efficiency, as it starts devolving into a whole bunch of special cases.  For example, increasing the buffer size sometimes makes compression <i>worse</i>, as in the following example:</p>
<pre>'diff' output between two runs:
 17-bit offset: 87005   Length: 10 'with the t' (26 bits)
 14-bit offset: 10812   Length: 3 'arp' (18 bits)
-13-bit offset: 7705   Length: 3 ', w' (17 bits)
-13-bit offset: 5544   Length: 8 'ould you' (19 bits)
+18-bit offset: 131750   Length: 4 ', wo' (41 bits)
+13-bit offset: 5544   Length: 7 'uld you' (19 bits)
 16-bit offset: 50860   Length: 7 '?  You ' (22 bits)
 17-bit offset: 73350   Length: 10 'take that ' (26 bits)</pre>
<p>The compressor looks for the longest matches, and in the &#8216;+&#8217; run it found a longer match, but at a larger offset than in the &#8216;-&#8217; run.  In this case, 18-bit offsets are rare enough that their symbol has been pushed low in the Huffman tree and the bitstring is very long, making it even less efficient to use a long offset, and in the end a whopping 24 bits are completely wasted.  Detecting these kinds of cases requires a bunch of extra tests though, and this is just one example.</p>
<p>So, I think that&#8217;s about all I&#8217;m going to do for attempting to improve the compression efficiency.  How does it do overall?  Well, that 195kB text file that originally compressed to 87.4kB and then made it down to 84.2kB can now be compressed down, with harder searching on and optimal buffer and match length sizes determined, to 77.9kB.  That&#8217;s even lower than &#8216;gzip -9&#8242; at 81.1kB!</p>
<p>It&#8217;s not all good news, though.  If I take the <a href="http://corpus.canterbury.ac.nz/">Canterbury Corpus</a> and test against it, the original total size is 2810784 bytes, &#8216;gzip -9&#8242; reduces them to a total of 730732 bytes (26.0%), and at the default settings, my compressor gets&#8230;785421 bytes (27.9%).  If I enable the extra searching and find optimal compression parameters for each file via &#8216;explode&#8217;, I can get it down to 719246 bytes (25.6%), but that takes a <b>lot</b> of effort.  Otherwise, at the default settings, some of the files are smaller than gzip and others are larger; typically I do worse on the smaller files where there hasn&#8217;t really been much of a chance for the Huffman trees to adapt yet, and the Excel spreadsheet in particular does really poorly with my compressor, for some reason I&#8217;d have to investigate further.</p>
<p>But I&#8217;m not going to.  No, the main remaining problem was one of speed&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.planetcrushers.com/heide/archives/2011/09/02/the-settings-are-a-bit-off/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>I Ain&#8217;t No Huffman</title>
		<link>http://www.planetcrushers.com/heide/archives/2011/08/29/i-aint-no-huffman/</link>
		<comments>http://www.planetcrushers.com/heide/archives/2011/08/29/i-aint-no-huffman/#comments</comments>
		<pubDate>Tue, 30 Aug 2011 05:38:11 +0000</pubDate>
		<dc:creator>heide</dc:creator>
				<category><![CDATA[Geek]]></category>

		<guid isPermaLink="false">http://www.planetcrushers.com/heide/?p=946</guid>
		<description><![CDATA[In terms of compression efficiency, I knew there were some obvious places that could use improvement. In particular, my Huffman trees&#8230;weren&#8217;t even really Huffman trees. The intent was for them to be Huffman-like in that the most frequently seen symbols would be closest to the top of the tree and thus have the shortest bitstrings, [...]]]></description>
			<content:encoded><![CDATA[<p>In terms of compression efficiency, I knew there were some obvious places that could use improvement.  In particular, my Huffman trees&#8230;weren&#8217;t even really <a href="http://en.wikipedia.org/wiki/Huffman_coding">Huffman trees</a>.  The intent was for them to be Huffman-like in that the most frequently seen symbols would be closest to the top of the tree and thus have the shortest bitstrings, but the construction and balancing method was completely different.  Whenever a symbol&#8217;s count increased, I compared it to the parent&#8217;s parent&#8217;s other child, and if the current symbol&#8217;s count was now greater, it swapped it with the current symbol, inserted a new branch where the updated node used to be, and pushed the other child down a level.</p>
<p>Unfortunately, that method led to horribly imbalanced trees, since it only considered nearby nodes when rebalancing, when changing the frequency of a symbol can actually affect the relationship of symbols on relatively distant parts of the tree as well.  As an example, here&#8217;s what a 4-bit length tree wound up looking like with my original adaptive method:</p>
<pre>Lengths tree:
    Leaf node 0: Count=2256 BitString=1
    Leaf node 1: Count=1731 BitString=001
    Leaf node 2: Count=1268 BitString=0001
    Leaf node 3: Count=853 BitString=00001
    Leaf node 4: Count=576 BitString=000001
    Leaf node 5: Count=405 BitString=0000001
    Leaf node 6: Count=313 BitString=00000001
    Leaf node 7: Count=215 BitString=000000000
    Leaf node 8: Count=108 BitString=0000000011
    Leaf node 9: Count=81 BitString=00000000101
    Leaf node 10: Count=47 BitString=000000001001
    Leaf node 11: Count=22 BitString=00000000100001
    Leaf node 12: Count=28 BitString=0000000010001
    Leaf node 13: Count=15 BitString=000000001000000
    Leaf node 14: Count=9 BitString=000000001000001
    Leaf node 15: Count=169 BitString=01
    Avg bits per symbol = 3.881052</pre>
<p>If you take the same data and manually construct a Huffman tree the proper way, you get a much more balanced tree without the ludicrously long strings:
<pre>    Leaf node 0: Count=2256 BitString=10
    Leaf node 1: Count=1731 BitString=01
    Leaf node 2: Count=1268 BitString=111
    Leaf node 3: Count=853 BitString=001
    Leaf node 4: Count=576 BitString=1100
    Leaf node 5: Count=405 BitString=0001
    Leaf node 6: Count=313 BitString=11011
    Leaf node 7: Count=215 BitString=00001
    Leaf node 8: Count=108 BitString=000001
    Leaf node 9: Count=81 BitString=000000
    Leaf node 10: Count=47 BitString=1101000
    Leaf node 11: Count=22 BitString=110100110
    Leaf node 12: Count=28 BitString=11010010
    Leaf node 13: Count=15 BitString=1101001111
    Leaf node 14: Count=9 BitString=1101001110
    Leaf node 15: Count=169 BitString=110101
    Avg bits per symbol = 2.969368</pre>
<p>That&#8217;s nearly a bit per symbol better, which may not sound like much but with the original method there was barely any compression happening at all, whereas a proper tree achieves just over 25% compression.</p>
<p>So, I simply dumped my original adaptive method and made it construct a Huffman tree in the more traditional way, pairing the highest count nodes in a sorted list.  To keep it adaptive, it still does the count check against the parent&#8217;s parent&#8217;s other child, and when it crosses the threshold it simply rebuilds the entire Huffman tree from scratch based on the current symbol counts.  This involves a lot more CPU work, but as we&#8217;ll see later, performance bottlenecks aren&#8217;t necessarily where you think they are&#8230;</p>
<p>My trees also differ from traditional ones in that they prepopulate the tree with all possible symbols with a count of zero, whereas usually you only insert nodes into a Huffman tree if they have a count greater than zero.  This is slightly suboptimal, but it avoids a chicken-and-egg problem with the decoder not knowing what symbol a bitstring corresponds to if it doesn&#8217;t exist in the tree yet because it&#8217;s the first time the symbol has been seen.</p>
<p>Knowing that, and with the improved Huffman trees, another thing became clear: using Huffman trees for the offsets wasn&#8217;t really doing much good at all.  With most files, the offset values are too evenly distributed, and many are never used at all, and all those zero-count entries would get pushed down the tree and become longer strings, so the first time an offset got used it would often have a string longer than its basic bit length, causing file growth instead of compression.  I instead just ripped those trees out and emitted plain old integer values for the offsets.</p>
<p>The way I was constructing my trees also had another limitation: the total number of symbols had to be a power of two.  With the proper construction method, an arbitrary number of symbols could be specified, and that allowed another potential optimization: merging the identifier tree and the literals tree.  The identifier token in the output stream guaranteed that there would always be at least 1 wasted non-data bit per token, and often two.  Merging it with the literals would increase the size of literal symbols, but the expectation is that the larger literal size would on average still be smaller than the sum of the identifier symbols and smaller literal symbols, on average, especially as more &#8216;special case&#8217; symbols are added.  Instead of reading an identifier symbol and deciding what to do based on that, the decoder would read a &#8216;literal&#8217; symbol, and if it was in the range 0-255, it was indeed a literal byte value and interpreted that way, but if it was 256 or above, it would be treated as having a following offset/length pair.</p>
<p>The range of offsets to handle would also have to change, but that&#8217;s for next time&#8230;  With the Huffman tree improvements, my 195kB test file that compressed to 87.4kB before now compressed to 84.2kB.  Still not as good as gzip, but getting there.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.planetcrushers.com/heide/archives/2011/08/29/i-aint-no-huffman/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Compressing History</title>
		<link>http://www.planetcrushers.com/heide/archives/2011/08/26/compressing-history/</link>
		<comments>http://www.planetcrushers.com/heide/archives/2011/08/26/compressing-history/#comments</comments>
		<pubDate>Sat, 27 Aug 2011 05:26:00 +0000</pubDate>
		<dc:creator>heide</dc:creator>
				<category><![CDATA[Geek]]></category>

		<guid isPermaLink="false">http://www.planetcrushers.com/heide/?p=933</guid>
		<description><![CDATA[While sorting through some old files of mine, I happened upon the source code to a compression engine I&#8217;d written 18 years ago. It was one of the first things I&#8217;d ever written in C++, aside from some university coursework, and I worked on it in the evenings during the summer I was in Cold [...]]]></description>
			<content:encoded><![CDATA[<p>While sorting through some old files of mine, I happened upon the source code to a compression engine I&#8217;d written <i>18 years ago</i>.  It was one of the first things I&#8217;d ever written in C++, aside from some university coursework, and I worked on it in the evenings during the summer I was in Cold Lake on a work term, just for fun.  Yes, I am truly a nerd, but there wasn&#8217;t really much else to do in a tiny town like that, especially when you only get 3 TV channels.</p>
<p>Looking at it now it&#8217;s kind of embarrassing, since of course it&#8217;s riddled with inexperience.  No comments at all, leaving me mystified at what some of the code was even doing in the first place, unnecessary global variables, little error checking, poor header/module separation, unnecessary exposure of class internals, poor const correctness, and so on.  It kind of irks my pride to leave something in such a poor state though, so I quickly resolved to at least clean it up a bit.</p>
<p>Of course, I have to understand it first, and I started to remember more about it as I looked over the code.  It&#8217;s a fairly basic combination of both LZ77 pattern matching and Huffman coding, like the ubiquitous Zip method, but the twist I wanted to explore was in making the Huffman trees adaptive, so that the symbols would shift around the tree to automatically adjust as their frequency changed within the input stream.  There were two parameters that controlled compression efficiency: history buffer size, and maximum pattern length.  The history size controls how far back it would look for matching patterns, and the length controlled the upper limit on the length of a match that could be found.</p>
<p>Compression proceeded by moving through the input file byte by byte, looking for the longest possible exact byte match between the data ahead of the current position and the data in the history buffer just behind the current position.  If a match could not be found, it would emit the current byte as a literal and move one byte ahead, and if a match was found, it would emit a token with the offset and length of the match in the history buffer.  To differentiate between these cases, it would first emit an &#8216;identifier&#8217; token with one of four possible values: one for a literal, which would then be followed by the 8-bit value of the literal, and three for offset and length values, with three different possible bit lengths for the offset so that closer matches took fewer bits.   Only matches of length 3 or longer are considered, since two-byte matches would likely have an identifier+offset+length string longer than just emitting the two bytes as literals. In summary, the four possible types of bit strings you&#8217;d see in the output were:</p>
<pre>
    | ident 0 | 8-bit literal |

    | ident 1 | 'x'-bit offset    | length |

    | ident 2 | 'y'-bit offset        | length |

    | ident 3 | 'z'-bit offset            | length |</pre>
<p>And then I used a lot of Huffman trees.  Each of these values were then run through a Huffman tree to generate the actual symbol emitted to the output stream, with separate trees for the identifier token, the literals, the lengths, and the three offset types.  HUFFMAN TREES EVERYWHERE!  The compression parameters were also written to a header in the file, so the decoder would know what history buffer size to use and maximum length allowed.</p>
<p>It worked&#8230;okay&#8230;  I&#8217;ve lost my original test files, but on one example text file of 195kB, my method compresses it down to 87.4kB, while &#8216;gzip -9&#8242; manages 81.1kB.  Not really competitive, but not too bad for a completely amateur attempt either.  There&#8217;s still plenty of room for improvement, which will come&#8230;next time.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.planetcrushers.com/heide/archives/2011/08/26/compressing-history/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Wait, It&#8217;s 2011 Already?</title>
		<link>http://www.planetcrushers.com/heide/archives/2011/05/12/wait-its-2011-already/</link>
		<comments>http://www.planetcrushers.com/heide/archives/2011/05/12/wait-its-2011-already/#comments</comments>
		<pubDate>Fri, 13 May 2011 04:21:29 +0000</pubDate>
		<dc:creator>heide</dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://www.planetcrushers.com/heide/?p=907</guid>
		<description><![CDATA[The stagnation of my sites kind of reflects the same kind of stagnation in my life; not an awful lot of interest has happened recently, really. There&#8217;s nothing terribly wrong in my life, but there&#8217;s not enough that&#8217;s right. I need to make a to-do list and focus, so in no particular order: Lose WeightYeah, [...]]]></description>
			<content:encoded><![CDATA[<p>The stagnation of my sites kind of reflects the same kind of stagnation in my life; not an awful lot of interest has happened recently, really.  There&#8217;s nothing terribly <i>wrong</i> in my life, but there&#8217;s not enough that&#8217;s <i>right</i>.  I need to make a to-do list and focus, so in no particular order:</p>
<ul>
<li><b>Lose Weight</b><br />Yeah, it&#8217;s not the first time I&#8217;ve said it, and might not be the last, but failing at it doesn&#8217;t make the need go away.  It&#8217;s worse than ever, and it&#8217;s undoubtedly tied to a lot of other health and esteem issues.</li>
<p></p>
<li><b>Clean Up The Apartment</b><br />It&#8217;s a mess, and I really need to sort through <b>all</b> of my stuff and decide what I really need to keep and what I can throw away.  Seriously, I haven&#8217;t seen the top of my dining table in months.  I have an ISA serial port card in one of these boxes.  It&#8217;s been over 20 years since I&#8217;ve seen a computer that would actually be useful in.</li>
<p></p>
<li><b>Get Presentable</b><br />I need new glasses, clothes that are at least semi-fashionable, to keep up with haircuts more often&#8230;  It&#8217;s not really a matter of giving up and conforming; my current &#8216;style&#8217; is more the result of sloth and apathy than anything else.  It doesn&#8217;t really make me feel any particular way, and I&#8217;m not gaining anything from it, but it does sometimes feel like people don&#8217;t take me as seriously as I&#8217;d like.  Gotta get that weight down first though&#8230;</li>
<p></p>
<li><b>Get A Car</b><br />Man, I don&#8217;t even have a driver&#8217;s license.  It&#8217;s never really felt like I&#8217;ve <i>had</i> to get one, but as time goes on it does feel like the lack of one is limiting my options more and more, whether it be in determining where I can live, just getting out to see people, traveling without having to tolerate the alternatives, etc.</li>
<p></p>
<li><b>Develop A New Hobby</b><br />Yeah, I&#8217;ve always loved computers and video games, but&#8230;I admittedly probably spend a bit too much time on them.  It&#8217;s kind of depressing when I look at another person and wonder what I might have in common with them and the answer winds up being &#8220;well, maybe they have a level 75 paladin&#8230;&#8221;  I&#8217;ve always kind of wanted to be able to draw at a level slightly beyond stick figures at least, so I need to crack open that art instruction book a friend got me and put some more time into it.</li>
<p></p>
<li><b>Make More Friends</b><br />Not that there&#8217;s anything wrong with you guys, of course (assuming anyone other than Google&#8217;s bots actually reads this), but without more local friends there&#8217;s just too many nights left alone, no reason to get out of the house, no face-to-face meetings to develop relationships further&#8230;</li>
<p></p>
<li><b>Focus On Work More</b><br />It feels like I&#8217;ve been slacking off a bit too much at the office.  Not taking enough initiative, not keeping up with the current trends and techniques, not coding as robustly as I should&#8230;  I don&#8217;t know if a new job is really the answer as the current one is still pretty good, so&#8230;I don&#8217;t know yet.</li>
<p>
</ul>
<p>I&#8217;m 37 years old.  I should have had this crap sorted out ages ago.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.planetcrushers.com/heide/archives/2011/05/12/wait-its-2011-already/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Spam Watch</title>
		<link>http://www.planetcrushers.com/heide/archives/2010/11/22/spam-watch/</link>
		<comments>http://www.planetcrushers.com/heide/archives/2010/11/22/spam-watch/#comments</comments>
		<pubDate>Mon, 22 Nov 2010 18:41:16 +0000</pubDate>
		<dc:creator>heide</dc:creator>
				<category><![CDATA[SpamSpamSpam]]></category>

		<guid isPermaLink="false">http://www.planetcrushers.com/heide/?p=775</guid>
		<description><![CDATA[Subject: Your elegant watch will keep you warm What, does it have a space heater built-in? Subject: You are old enough to have a designer watch Wait, there are age limits on these things? Is there a pamphlet or legal statute I can check for this? Subject: No watch will be able to compete with [...]]]></description>
			<content:encoded><![CDATA[<blockquote class="quote"><p><tt>Subject: Your elegant watch will keep you warm</tt></p>
<p>What, does it have a space heater built-in?</p></blockquote>
<blockquote class="quote"><p><tt>Subject: You are old enough to have a designer watch</tt></p>
<p>Wait, there are age limits on these things?  Is there a pamphlet or legal statute I can check for this?</p></blockquote>
<blockquote class="quote"><p><tt>Subject: No watch will be able to compete with yours</tt></p>
<p>No thanks, the last thing I need is the government trying to declare my wrist a monopoly.</p></blockquote>
<blockquote class="quote"><p><tt>Subject: An elegant watch will give you the wings.</tt></p>
<p>I didn&#8217;t know Red Bull made watches now.</p></blockquote>
<blockquote class="quote"><p><tt>Subject: Change your life for better ? get a decent watch.</tt></p>
<p>Just a &#8216;decent&#8217; one, though.  Wouldn&#8217;t want to be showy or anything.</p></blockquote>
<blockquote class="quote"><p><tt>Subject: Feel the wonder of having a tremendous instrument</tt></p>
<p>We&#8217;re still talking about watches here, right?</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.planetcrushers.com/heide/archives/2010/11/22/spam-watch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Once More Unto The Beach</title>
		<link>http://www.planetcrushers.com/heide/archives/2010/04/16/once-more-unto-the-beach/</link>
		<comments>http://www.planetcrushers.com/heide/archives/2010/04/16/once-more-unto-the-beach/#comments</comments>
		<pubDate>Fri, 16 Apr 2010 13:09:35 +0000</pubDate>
		<dc:creator>heide</dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://www.planetcrushers.com/heide/?p=881</guid>
		<description><![CDATA[Okay, it&#8217;s not the first time I&#8217;ve said this, but I need to get serious about my weight and so I&#8217;ve kicked off the status updates in the sidebar again. It&#8217;s not just so that the ladies will swoon over my magnificent abs, but I really need to start being more concerned about my general [...]]]></description>
			<content:encoded><![CDATA[<p>Okay, it&#8217;s not the first time I&#8217;ve said this, but I need to get serious about my weight and so I&#8217;ve kicked off the status updates in the sidebar again.</p>
<p>It&#8217;s not just so that the ladies will swoon over my magnificent abs, but I really need to start being more concerned about my general health.  I&#8217;ve been feeling terrible lately, it&#8217;s only going to get worse if I don&#8217;t do anything about it, and I remember how great I felt when I was actually close to a normal weight.</p>
<p>The plan is pretty much the same as before: a reasonable calorie budget (around 1600-1800 per day for now), and more exercise.  That means giving up things that had become bad habits like the morning brownie/rice krispie treat, mid-day snacks from the office vending machine, and stopping by the store every day and picking up more food for dinner than I really need.  If I have a light breakfast bar in the morning and some simple soup or stew for dinner, that still leaves me enough calories for a decent lunch, so I don&#8217;t have to give up all my old habits.</p>
<p>Exercise for now will be limited to walking to work when I can.  I hope to eventually get back to small workouts and walks around the neighbourhood again, but that&#8217;ll have to wait until&#8230;other problems have been fixed.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.planetcrushers.com/heide/archives/2010/04/16/once-more-unto-the-beach/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>But It Still Doesn&#8217;t Remember Where I Left My Keys</title>
		<link>http://www.planetcrushers.com/heide/archives/2010/01/22/but-it-still-doesnt-remember-where-i-left-my-keys/</link>
		<comments>http://www.planetcrushers.com/heide/archives/2010/01/22/but-it-still-doesnt-remember-where-i-left-my-keys/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 18:41:08 +0000</pubDate>
		<dc:creator>heide</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[Mac]]></category>

		<guid isPermaLink="false">http://www.planetcrushers.com/heide/?p=875</guid>
		<description><![CDATA[Yesterday the memory upgrade for my laptop arrived and I installed it as soon as I got home, taking it from 2GB to 4GB. Fortunately, upgrading the memory on an MBP is fairly easy, only requiring the removal of three standard screws underneath the battery. It was mainly meant for a (now postponed) trip so [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday the memory upgrade for my laptop arrived and I installed it as soon as I got home, taking it from 2GB to 4GB.  Fortunately, upgrading the memory on an MBP is fairly easy, only requiring the removal of three standard screws underneath the battery.</p>
<p>It was mainly meant for a (now postponed) trip so I could use VMware Fusion effectively, but the difference was immediately noticeable when I went to fire up WoW as well.  Normally, running WoW on my laptop grinds and chugs and stutters a lot, mainly because I always have Firefox open as well, and together the two just use up too much memory.  Now though, it&#8217;s smooth as silk, with WoW loading only a little bit slower than it does on my desktop machine.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.planetcrushers.com/heide/archives/2010/01/22/but-it-still-doesnt-remember-where-i-left-my-keys/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aw, I Don&#8217;t Get To Go To Court</title>
		<link>http://www.planetcrushers.com/heide/archives/2009/12/10/aw-i-dont-get-to-go-to-court/</link>
		<comments>http://www.planetcrushers.com/heide/archives/2009/12/10/aw-i-dont-get-to-go-to-court/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 00:14:56 +0000</pubDate>
		<dc:creator>heide</dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://www.planetcrushers.com/heide/?p=872</guid>
		<description><![CDATA[I received a jury summons a few weeks ago, to be held tomorrow, but I called in today as instructed and was informed that it had been canceled and I was no longer needed. It&#8217;s actually kind of a shame; I was a bit curious about the whole process. Maybe I&#8217;ll just go sit in [...]]]></description>
			<content:encoded><![CDATA[<p>I received a jury summons a few weeks ago, to be held tomorrow, but I called in today as instructed and was informed that it had been canceled and I was no longer needed.  It&#8217;s actually kind of a shame; I was a bit curious about the whole process.  Maybe I&#8217;ll just go sit in on some cases instead.</p>
<p>It was also a bit of a surprise that it had taken this long to get a summons (the first in my life), but I guess we just don&#8217;t have enough crime&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.planetcrushers.com/heide/archives/2009/12/10/aw-i-dont-get-to-go-to-court/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>About Time</title>
		<link>http://www.planetcrushers.com/heide/archives/2009/12/04/about-time/</link>
		<comments>http://www.planetcrushers.com/heide/archives/2009/12/04/about-time/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 18:49:55 +0000</pubDate>
		<dc:creator>heide</dc:creator>
				<category><![CDATA[Geek]]></category>

		<guid isPermaLink="false">http://www.planetcrushers.com/heide/?p=868</guid>
		<description><![CDATA[I recently upgraded my server to Ubuntu 9.10, and it finally fixed one thing that had been bugging me ever since I built this system: the audio drivers. The default drivers that came with Ubuntu wouldn&#8217;t properly set the line-in volume, so I had to go and get a newer version from Realtek&#8217;s site. But, [...]]]></description>
			<content:encoded><![CDATA[<p> I recently upgraded my server to Ubuntu 9.10, and it finally fixed one thing that had been bugging me ever since I built this system: the audio drivers.  The default drivers that came with Ubuntu wouldn&#8217;t properly set the line-in volume, so I had to go and get a newer version from Realtek&#8217;s site.  But, every time there was a system update that refreshed the driver modules, I&#8217;d have to reinstall the newer drivers and reboot again.  Fortunately, now the default drivers work perfectly fine as of this release, and I&#8217;ll hopefully never need to build them separately again.</p>
<p>It also updated MythTV, which was a bit of a surprise and I needed to go get a newer build of the OS X frontend.  That took a while to get working because it would just suddenly stop running immediately after launching it, until I figured out that I had to run the main executable directly with a &#8216;-r&#8217; option to reset which theme it wanted to use.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.planetcrushers.com/heide/archives/2009/12/04/about-time/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>You Got Your Mac In My Windows!</title>
		<link>http://www.planetcrushers.com/heide/archives/2009/08/09/you-got-your-mac-in-my-windows/</link>
		<comments>http://www.planetcrushers.com/heide/archives/2009/08/09/you-got-your-mac-in-my-windows/#comments</comments>
		<pubDate>Sun, 09 Aug 2009 15:51:22 +0000</pubDate>
		<dc:creator>heide</dc:creator>
				<category><![CDATA[Geek]]></category>

		<guid isPermaLink="false">http://www.planetcrushers.com/heide/?p=857</guid>
		<description><![CDATA[All of the upgrades and reinstallation are done, and I now have a zippy essentially-new machine running Windows 7. The most obvious change in 7 is in the taskbar. It uses large icons instead of a small icon and window title, all open windows of the same type are always consolidated into a single entry [...]]]></description>
			<content:encoded><![CDATA[<p>All of the upgrades and reinstallation are done, and I now have a zippy essentially-new machine running Windows 7.</p>
<p>The most obvious change in 7 is in the taskbar.  It uses large icons instead of a small icon and window title, all open windows of the same type are always consolidated into a single entry on the taskbar (previously it would only consolidate them once it started running out of room), and you can pin a running program to the taskbar in order to launch it again later.  It&#8217;s basically a lot more like OS X&#8217;s Dock now.</p>
<p>The Explorer has also changed a bit.  There&#8217;s no more &#8216;Explore&#8217; option off the computer icon&#8217;s context menu, which is kind of annoying.  And they&#8217;ve removed the tree view from the Explorer windows (but you can reenable it in the folder options), instead using the sidebar to emphasize a bunch of standard locations like your home directory, your music directory, network servers, etc.  Which is also a lot like how Finder works&#8230;</p>
<p>Otherwise, things have gone fairly smoothly, and I haven&#8217;t really had any problems that I can attribute directly to Windows 7 itself.  I still have to poke around and explore what else might be new, though.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.planetcrushers.com/heide/archives/2009/08/09/you-got-your-mac-in-my-windows/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>


