<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.2.1" -->
<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/"
	>

<channel>
	<title>Big Dingus</title>
	<link>http://bigdingus.com</link>
	<description>A lot of the time I hear ducks</description>
	<pubDate>Wed, 02 Jul 2008 20:15:28 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.2.1</generator>
	<language>en</language>
			<item>
		<title>Finding primes with Erlang and Clojure</title>
		<link>http://bigdingus.com/2008/07/01/finding-primes-with-erlang-and-clojure/</link>
		<comments>http://bigdingus.com/2008/07/01/finding-primes-with-erlang-and-clojure/#comments</comments>
		<pubDate>Wed, 02 Jul 2008 01:17:28 +0000</pubDate>
		<dc:creator>The BigDingus Blogger</dc:creator>
		
		<category><![CDATA[Clojure]]></category>

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

		<guid isPermaLink="false">http://bigdingus.com/2008/07/01/finding-primes-with-erlang-and-clojure/</guid>
		<description><![CDATA[A couple of bogus prime sieves have shown up in the blogorama lately. After reading a very interesting paper about the authentic prime sieve algorithm, I became kind-of hooked on implementing it. The paper is great but the examples are all in Haskell, and I can&#8217;t really understand that too well. However I did manage [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of bogus prime sieves have shown up in the blogorama lately. After reading <a href=" http://tinyurl.com/3akl7t">a very interesting paper</a> about the authentic prime sieve algorithm, I became kind-of hooked on implementing it. The paper is great but the examples are all in Haskell, and I can&#8217;t really understand that too well. However I did manage to figure out the basic point.</p>
<p>The &#8220;wrong&#8221; prime sieve implementations all operate by accumulating a list of known primes, and then testing candidates by seeing whether they&#8217;re divisible by any of them. If not, then the candidate must be prime. It&#8217;s only necessary to test from 2 through sqrt(candidate) of course. Well maybe not &#8220;of course&#8221; but that&#8217;s the way it is anyway. Thus the time bound on that approach is O(n sqrt(n)), sort-of, since prime numbers are pretty uniformly distributed along the natural number line.</p>
<p>The &#8220;right&#8221; prime sieve is different (duhh). What it does is keep track of the composite numbers implied by each known prime. In other words, once (in the degenerate initial case) you decide that 2 is prime, you know that all multiples of 2 (starting with 4) must not be prime. As you work upwards through candidates, you know a candidate is prime if it is smaller than the smallest composite number you know about so far. This approach is the &#8220;right&#8221; approach because, if you do the &#8220;what&#8217;s the smallest composite?&#8221; part properly, you end up with an O(n log n) algorithm and that&#8217;s a lot better than the wrong way.</p>
<p>The way to do the &#8220;what&#8217;s the smallest composite&#8221; test is to keep the composite lists (that is, one list per known prime) in a priority queue. In this case, it&#8217;s possible to cheat a little with adding primes to the queue because it&#8217;s going to be the case that the first composite implied by a new known prime is always a bigger number than any other known composite. That&#8217;s probably provable but I don&#8217;t feel like doing that now.</p>
<p>Implementing the priority queue in a language like Erlang or Clojure (well one could cheat in Clojure but I didn&#8217;t want to) requires that it be done with some sort of functional data structure. In Java (and I did do a Java version but it&#8217;s ugly and boring) you can use an array list to store a &#8220;heap&#8221; for the queue, and inserts are super easy because you just drop your new composite stream in the next available slot of an ArrayList. In the trendy functional languages, however, you can&#8217;t do that.</p>
<p>What I came up with (probably after several billion other people did) was to use a functional (immutable) tree structure that I could rebuild when doing an &#8220;add&#8221; operation. The trick is to consider what&#8217;s going on with the ArrayList cheater approach. If you&#8217;re dropping something into the next available slot at the end of the heap, well what does that look like if you visualize the heap as a tree?  You can work your way up the tree by repeatedly dividing that slot index by 2 until you get to the root. Each time, you know that if the remainder is an odd number you&#8217;re moving up a right link, and if it&#8217;s an even number you&#8217;re moving up a lefft link. Thus by looking at the binary representation of the heap slot index (backwards), you have a little &#8220;path&#8221; descriptor that&#8217;ll guide you straight from the top of the heap down to the next empty slot.</p>
<p>So in Erlang I represent the priority queue as a tuple with the current queue size, and the heap. The heap is also a tuple, containing the top node and the left and right children - recursively, also tuples. Each node is a tuple containing the prime number, the current known composite, and a counter to generate the next composite.</p>
<pre><code>
-module(pq).
-export([add/2, primes/1]).

% Primes
np(Prime) -> {Prime, Prime * Prime}.
next({Prime, M}) -> {Prime, Prime + M}.
cur({_Prime, V}) -> V.
</code></pre>
<p>The queue utilities:</p>
<pre><code>
% The priority queue
newQ() -> empty.
leaf(P) -> {P, nil, nil}.
sz(empty) -> 0;
sz({Sz, _T}) -> Sz.

% Find where to put a new prime (end of the queue)
path(N) -> path(N, []).
path(1, L) -> L;
path(N, L) -> path(N bsr 1, [N band 1 | L]).

% Add a newly-discovered prime
add(empty, Prime) -> {1, leaf(np(Prime))};
add({Sz, T}, Prime) -> {Sz + 1, add(T, Prime, path(Sz + 1))}.

% ... follow the path to the nil!
add(nil, Prime, []) -> leaf(np(Prime));
add({P, L, R}, Prime, [0 | Path]) -> {P, add(L, Prime, Path), R};
add({P, L, R}, Prime, [1 | Path]) -> {P, L, add(R, Prime, Path)}.

val(empty) -> nothing;
val({P, _L, _R}) -> cur(P);
val({_Sz, {P, _L, _R}}) -> cur(P).
</code></pre>
<p>Now there are two things to do when cranking through candidate primes. If your candidate is in fact a prime, you need to add it to the queue (in the form of one of those tuples).  If it&#8217;s not a prime, you&#8217;ve &#8220;used up&#8221; the minimum known composite number so you need to get a new one.  Well it turns out that of course your primes will sometimes generate overlapping composite numbers - both 2 and 3 will give you 12, for example. Thus when you need to &#8220;bump&#8221; the prime queue up to the next useful value, you need to keep working until the new minimum composite number is bigger than the one you just threw away.</p>
<p>To &#8220;bump&#8221; the queue, then, we&#8217;ll roll to the next composite provided by the prime at the top of the queue. But now of course the heap may not be a heap, so we need to &#8220;fix&#8221; it.  The &#8220;bump-fix&#8221; needs to repeat until we&#8217;ve got a good new minimum.</p>
<p>Thus, the &#8220;bump&#8221; code:</p>
<pre><code>
% Gen next composite number from topmost prime, adjust heap
bump({Sz, T}, N) -> {Sz, bumpt(T, N)}.
bumpt({P, L, R} = T, V) ->
  case cur(P) of
    Vp when Vp =< V -> bumpt(fix({next(P), L, R}), V);
    _ -> T
  end.

% adjust heap by swapping primes down until it&#8217;s a heap again
fix({_P, nil, nil} = T) -> T;
fix({P, {Pl, nil, nil}, nil} = T) ->
  case {cur(P), cur(Pl)} of
    {V, Vl} when V < Vl -> T;
    _ -> {Pl, {P, nil, nil}, nil}
  end;
fix({P, {Pl, Ll, Rl} = L, {Pr, Lr, Rr} = R} = T) ->
  case {cur(P), cur(Pl), cur(Pr)} of
    {V, Vl, Vr} when V < Vl, V < Vr -> T;
    {_V, Vl, Vr} when Vl < Vr ->
      {Pl, fix({P, Ll, Rl}), R};
    _ ->
      {Pr, L, fix({P, Lr, Rr})}
  end.
</code></pre>
<p>The main &#8220;primes&#8221; routine (which just counts primes up to some limit) is therefore:</p>
<pre><code>

primes(Max) -> primes(newQ(), 2, Max).
primes(Q, N, Max) when N >= Max -> sz(Q);
primes(Q, N, Max) ->
  primes(case val(Q) of N -> bump(Q, N); _ -> add(Q, N) end, N + 1, Max).
</code></pre>
<p>I did this up in Scheme, and it was kind-of messy and gross. Of course I don&#8217;t really know much Scheme, but the hurdle was the representation of the prime tuples and stuff like that. It took a lot of ugly little &#8220;(caddr foo)&#8221; functions.</p>
<p>Then I moved on to <a href='http://clojure.org'>Clojure</a>. Clojure is a neat-o Lisp dialect that runs on the Java VM. Here I&#8217;m not really exploting any Java stuff. I did however exploit some of the useful built-in &#8220;lazy&#8221; features:</p>
<pre><code>
(def countprimes (fn [Max] (let
  [
    ; The representation of "composites from prime P" is a
    ; Clojure lazy sequence, made by mapping a function to
    ; multiply the prime by each of a lazy sequence, counting
    ; up from the prime.
    countFrom (fn [Start] (iterate #(+ 1 %) Start))
    composites (fn [Prime] (iterate #(+ Prime %) (* Prime Prime)))
    ; Tools for manipulating the queue
    newQ #^{:size 0} [nil nil nil]
    szQ (fn [Q] (get ^Q :size))
    curMin (fn [[Top Left Right]] (if (nil? Top) nil (first Top)))

    ; Add a newly-discovered prime to the queue. This entails making
    ; a new "composites" sequence and dropping into a new leaf node
    ; at the end of the queue.
    addPrime (let
      [
        ; Binary representation of N, backwards
        path (fn [N]
          (reduce #(list* %2 %1) ()
            (for [n (iterate #(quot % 2) N) :while (> n 1)] (rem n 2))
          ))
        ; Follow the path to the leaf
        addr (fn addr [Np [Top Left Right] [LR &#038; Rest]]
          (if (nil? LR)
            [Np nil nil]
            (if (== 0 LR)
              [Top (addr Np Left Rest) Right]
              [Top Left (addr Np Right Rest)]
          ))
        )
      ]
      (fn [Prime Q] (let [newSz (+ 1 (szQ Q))]
        (with-meta (addr (composites Prime) Q (path newSz)) {:size newSz})
      )
    ))

    ; Get a new minimum composite, after detecting a non-prime
    bumpUp (let
      [
        ; Make sure the heap really is a heap. Note that there'll
        ; never be a node with nil on the left and non-nil on the
        ; right.
        fix (fn fix [[Top Left Right :as Qfixed]]
          (let [[LTop LLeft LRight] Left [RTop RLeft RRight] Right]
            (if (and (nil? LTop) (nil? RTop))
              Qfixed
              (if (nil? RTop)
                (if (<= (first Top) (first LTop))
                  Qfixed
                  [LTop (fix [Top LLeft LRight]) Right]
                )
                (if (and (<= (first Top) (first LTop)) (<= (first Top) (first RTop)))
                  Qfixed
                  (if (<= (first LTop) (first RTop))
                    [LTop (fix [Top LLeft LRight]) Right]
                    [RTop Left (fix [Top RLeft RRight])]
                  ))))
        ))
      ]
      (fn [Comp Q] (let [sz (szQ Q)]
        (with-meta (loop [[Top Left Right :as Qbumped] Q]
          (if (< Comp (first Top))
            Qbumped
            (recur (fix [(rest Top) Left Right]))
          )
        ) {:size sz})
      )
    ))

    ; It's either a new prime, or it isn't.
    tryNumber (fn [Q Candidate] (let [min (curMin Q)]
      (if (nil? min)
        (addPrime Candidate Q)
        (if (< Candidate min)
          (addPrime Candidate Q)
          (bumpUp Candidate Q)
        ))
    ))
  ]
  (get ^(reduce tryNumber newQ (range 2 Max)) :size)
)))
</code></pre>
<p>Because Clojure supports some &#8220;decomposition&#8221; forms that make it easy to chop arguments up (though not quite as easy as in Erlang), it&#8217;s somewhat neater and less noisy than my amateur Scheme version. Also in Clojure I can carry the queue size around as a meta property of the queue heap, though there&#8217;s some weirdness about that which I don&#8217;t completely understand. (Note - I cleaned up the Clojure source a little bit just now, and added some comments.)</p>
<p>The Erlang version is faster than the Clojure version, if anybody cares. I strongly suspect that both are much faster than the &#8220;check for prime factors&#8221; wrong sieve implementations. Note that in these the operations are all adds, compares, and multiplies - there are no divisions or square roots to compute.</p>
<p><b>Update:</b> Thanks, qebab, for the hint, and I&#8217;ve now gotten rid of the useless multiplications in the composite iterations.</p>
]]></content:encoded>
			<wfw:commentRss>http://bigdingus.com/2008/07/01/finding-primes-with-erlang-and-clojure/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Median of 2 sorted arrays</title>
		<link>http://bigdingus.com/2008/05/04/median-of-2-sorted-arrays/</link>
		<comments>http://bigdingus.com/2008/05/04/median-of-2-sorted-arrays/#comments</comments>
		<pubDate>Sun, 04 May 2008 17:47:42 +0000</pubDate>
		<dc:creator>The BigDingus Blogger</dc:creator>
		
		<category><![CDATA[Stuff]]></category>

		<guid isPermaLink="false">http://bigdingus.com/2008/05/04/median-of-2-sorted-arrays/</guid>
		<description><![CDATA[sub { font-size: 70%; }
A nice young man wrote about working on an algorithm problem after being inspired to think thusly by his new copy of The Algorithm Design Manual. Coincidentally, I recently received my copy of  the book as well. I was less inspired than Mr. Torreborre, probably because I&#8217;m very lazy. I [...]]]></description>
			<content:encoded><![CDATA[<style>sub { font-size: 70%; }</style>
<p>A nice young man <a href='http://etorreborre.blogspot.com/2008/05/algorithmic-panic.html'>wrote about</a> working on an algorithm problem after being inspired to think thusly by his new copy of <a href='http://www.amazon.com/gp/product/0387948600'><i>The Algorithm Design Manual</i></a>. Coincidentally, I recently received my copy of  the book as well. I was less inspired than Mr. Torreborre, probably because I&#8217;m very lazy. I thank him for presenting his interview question, because that got me to thinking yesterday morning. How would I find the median element of the merger of two sorted lists without actually doing a (linear) merge?</p>
<p>I&#8217;m now typing in what&#8217;s been going through my head, mostly while cooking breakfast for my kids. I contemplated trying to explain it to them, but I decided against it. Over the course of the explanation they would certainly concoct a variety of theories about why I was trying to punish them in such a strange and tedious way. I haven&#8217;t gone to search for a result in the book or on the web; maybe that&#8217;ll be obvious after you read this. I&#8217;ll check later.</p>
<p>First, I&#8217;ll say the median element of a sorted list <i>a<sub>first</sub> &#8230; a<sub>last</sub></i> is <i>a<sub>floor((last-first+1)/2)</sub></i>. In other words, it&#8217;s the element right in the middle (rounding down - arbitrarily - if the list has an even number of elements). So for this problem, I&#8217;ve got two lists, <i>a</i> and <i>b</i>, and I want to know what element would be smack in the middle of the list resulting from their merger.</p>
<p>I went around in confused circles for a while before hitting upon (what I think to be) a good way to view the problem. I know what the size of the merged list would be - it&#8217;s the sum of the sizes of <i>a</i> and <i>b</i>.  Thus I know exactly where the median value will be in the result. However, all I know about the result list is that it&#8217;s a muddle of values from the two original lists. For any index <i>i</i> in the merged list, all I can say is that the value will be from either <i>a</i> or <i>b</i>.</p>
<p>Now, there are a few cheap things I can do to examine my lists. Looking at an element at a given position is cheap - well, at least, I&#8217;m going to declare it to be cheap. So, for example, I can look at the median of either source list, or at the first element, or the last. Another thing I can do, less cheaply, is to find where a number would go in one of the source lists. That&#8217;s an O(<i>log<sub>2</sub> n</i>) operation (with <i>n</i> being the list length).</p>
<p>If I think about a couple of ordered lists of numbers (with no known bounds on the values in the lists), it&#8217;s clear that one list may have values larger than any value in the other, or smaller than any value in the other.  If I take at the smaller of the two last values in my source lists (that is, <i>a<sub>last</sub></i> and <i>b<sub>last</sub></i>), and then find where it would go in the other list, I now know something really interesting: I know exactly what values occupy the positions at the end of the merged list! That is, if <i>a<sub>last</sub></i> is smaller than <i>b<sub>last</sub></i>, and I find that it would 100 numbers down from the last element of <i>b</i>, then I know that the last 100 elements of the merged array have to be the last 100 elements of <i>b</i>.  Of course I can make the same discovery at the bottom ends of the lists.</p>
<p>In the degenerate case, one list might contain nothing but values completely beyond the end of the other list. In that case, I can immediately find the median of the combined lists because the merge is easy. If it&#8217;s not, then with 2 <i>log n</i> operations I can snip off some of both lists.  Now, some portion of the low and high ends of my hypothetical merged lists are no longer muddled - I know that those portions contain values from one of the two lists. In fact, I can now see what my goal is: I need to get to the point where the median slot - the position smack in the middle of the hypothetical merged list - is not muddled.</p>
<p>So now I have two sublists of the original lists, which represent the &#8220;muddled middle&#8221; of the hypothetical merged result. Hmm. I&#8217;m not liking this approach, because I&#8217;m not lopping off sufficiently big chunks of the problem. Well, they <i>might</i> be big, but I&#8217;m not forcing any bigness; I&#8217;m just whittling the ends of the lists down, and the rapidity with which the lists get smaller is entirely dependent on the values in the lists. I need to get a little more radical. (I do still like checking to see whether one list lies completely beyond the other, however, at least for now. It&#8217;s cheap to do.)</p>
<p>Another thing I can do cheaply is look at the median of one of my lists, and then I can see where it&#8217;d go in the other list. If I do that, then I will definitely lop off half of one list. I&#8217;ll still have a muddled result, except now I know a little bit more: I now have four lists, not two, and by looking at the combined sizes I&#8217;ll know that two of those can be forgotten. Now that&#8217;s looking good, because on every iteration I&#8217;m throwing away half of one list and at least some of the other.  I&#8217;ll always pick the larger list to be the one I cut in half of course. Eventually, I&#8217;ll get to the point where one of the two lists lies completely beyond the other, and then I&#8217;m home free.</p>
<p>Coding up something like this makes me feel uncomfortable. I fear &#8220;off by one&#8221; errors the way some people fear spiders. Sitting here now I can conjure up a vision of working through the day on this stupid thing. I know that I really should try. One thing that&#8217;s clear is that it&#8217;d be silly to do it in a fun language like Erlang, because it all depends on it being O(1) to look at values in the lists. (Well I guess I could merge two Erlang binaries, treating them as arrays of integers, but compounding my off-by-one fears with the need to essentially code up my own array indexing routines <i>really</i> freaks me out.) I&#8217;ll try not to be lazy and do this in Java or something boring like that, at least.</p>
<p><b><i>Later&#8230;</i></b><br />
Well I just checked <a href='http://batiste.dosimple.ch/blog/2008-04-25-1/'>this blog by a smart person</a> and he does this a totally &#8216;nuther way. I don&#8217;t have enough glucose left in my blood right now to figure out which is better, but I bet his is because he doesn&#8217;t have to do any searches. He has a weird definition of the median though in the case of lists with an even number of elements. I&#8217;ve always thought that the median value has to actually be in the data set, because otherwise there can be an arbitrary number of median values. I&#8217;m no statistician however. It probably makes no difference at all for this problem.</p>
<p><b><i>Later still&#8230;</i></b><br />
I&#8217;ve been putting together a <a href='http://www.mantuamodel.com/mantuamodel1/cannoni/806.htm'>model cannon kit</a> whose instructions are basically &#8220;glue it together&#8221;.  My eyes are sore. Anyway, to the extent that I can get a lame approximation to the stuff I wrote above working, I think it&#8217;s still interesting. In the case of a significant disparity in list sizes, mine converges really quickly on the median because it chews up the shorter list very quickly. When the lists are pretty dense and about the same size, it takes about <i>log n</i> iterations. I&#8217;m not sure how to figure the bounding function - maybe it&#8217;s <i>log n</i> but maybe not (I suspect the later but I&#8217;m dumb).</p>
]]></content:encoded>
			<wfw:commentRss>http://bigdingus.com/2008/05/04/median-of-2-sorted-arrays/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Quote your angle brackets</title>
		<link>http://bigdingus.com/2008/04/29/quote-your-angle-brackets/</link>
		<comments>http://bigdingus.com/2008/04/29/quote-your-angle-brackets/#comments</comments>
		<pubDate>Tue, 29 Apr 2008 20:53:51 +0000</pubDate>
		<dc:creator>The BigDingus Blogger</dc:creator>
		
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://bigdingus.com/2008/04/29/quote-your-angle-brackets/</guid>
		<description><![CDATA[Here&#8217;s a neat fact: both IE and Firefox will find a &#60;/script&#62; tag in the middle of a Javascript string constant. Now that&#8217;s probably not too surprising; the browser sort-of has to do that, or else a missing quote in a script block would eat the whole page. This came up in my universe however [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a neat fact: both IE and Firefox will find a <code>&lt;/script&gt;</code> tag in the middle of a Javascript string constant. Now that&#8217;s probably not too surprising; the browser sort-of has to do that, or else a missing quote in a script block would eat the whole page. This came up in my universe however when I was doing some testing on a page I suspected wasn&#8217;t quoting stuff properly.</p>
<p>Any web-oriented templating mechanism (or, more generally, anything spewing out HTML programmatically) will have to worry about what to do with external data that needs to be dropped into the HTML.  When it&#8217;s going into HTML code, like this:</p>
<pre><code>
  &lt;label&gt;Name:&lt;/label&gt; ${whatever.name}
</code></pre>
<p>then you&#8217;ve got to translate angle brackets and ampersands to HTML entities &#8220;&amp;lt;&#8221;, &#8220;&amp;gt;&#8221;, and &#8220;&amp;amp;&#8221;. However, when you&#8217;re dropping stuff into portions of the HTML document that are actually Javascript blocks (for example, when populating a data structure), you don&#8217;t do that. Instead, you have to massage the value so that it works inside a Javascript string constant (well, that&#8217;s what you do if you want to put it in a string constant, at least).</p>
<p>Our library has an &#8220;escapeJS&#8221; routine that does that sort of quoting. What it worried about (up until about 30 minutes ago) was quote characters, backslashes, and characters outside the old 7-bit printable ASCII range. Of note, it did <i>not</i> worry about less-than characters (left angle bracket, that is). I stumbled over this because I was getting a weird complaint from Firefox:</p>
<pre><code>
  whatever = "${mylib:escapeJS(whatever)}";
</code></pre>
<p>The error seemed strange because it was about the string being unterminated. When I brought up the source, however, the whole thing was there (including an embedded &#8220;&lt;/script&gt;&#8221; in the string - remember, I was doing XSS testing). &#8220;Durrr,&#8221; I thought to myself. &#8220;What&#8217;s Firefox doing?&#8221;  Embarrassingly it took me some time to get it. I thought that maybe it was a Firefox 3 thing, but no. When I saw that IE did it too, the feeble 20-watt light bulb went on.</p>
<p>I updated the &#8220;escapeJS&#8221; routine so that it treats less-than characters the same as control characters, encoding them with the Javascript &#8220;\u&#8221; notation. Probably everybody else in the world is less dumb than me, but nevertheless I figured I&#8217;d write this up.</p>
<p>PS: Ha ha I just realized that this is another &#8220;spring bug.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://bigdingus.com/2008/04/29/quote-your-angle-brackets/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Spring Bugs</title>
		<link>http://bigdingus.com/2008/04/14/spring-bugs/</link>
		<comments>http://bigdingus.com/2008/04/14/spring-bugs/#comments</comments>
		<pubDate>Mon, 14 Apr 2008 17:53:26 +0000</pubDate>
		<dc:creator>The BigDingus Blogger</dc:creator>
		
		<category><![CDATA[Macro]]></category>

		<guid isPermaLink="false">http://bigdingus.com/2008/04/14/spring-bugs/</guid>
		<description><![CDATA[Yesterday was very pleasant, so I got out the Sigma macro lens and the &#8220;ring flash&#8221; and started looking for bugs. The first thing I found was a small spider on some big rosemary plants. He seemed to be repairing a web.



As usual I have no idea what sort of spider that is. The bright [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday was very pleasant, so I got out the Sigma macro lens and the &#8220;ring flash&#8221; and started looking for bugs. The first thing I found was a small spider on some big rosemary plants. He seemed to be repairing a web.<br />
<a href='http://gutfullofbeer.net/bigdingus/img/foo101/spider.jpg' title='Click for larger version'><br />
<img src='http://gutfullofbeer.net/bigdingus/img/foo101/spider_sm.jpg'><br />
</a></p>
<p>As usual I have no idea what sort of spider that is. The bright orange mark is what caught my eye. I think I&#8217;m going to send the photo in to <a href='http://www.whatsthatbug.com'>What&#8217;s That Bug</a> to see if they know. (<i>Well now I know: it&#8217;s a </i>Leucauge venusta<i>, an &#8220;orchard spider&#8221;. This morning the web is looking very nice and neat.</i>)</p>
<p>The Monarch Butterfly thing this year is weird. They&#8217;ve been all over the place, and in particular they found the newly-emerging milkweed in our back yard.<br />
<a href='http://gutfullofbeer.net/bigdingus/img/foo101/monarch.jpg' title='Click for larger version'><br />
<img src='http://gutfullofbeer.net/bigdingus/img/foo101/monarch_sm.jpg'><br />
</a></p>
<p>This one is getting started on a whole new milkweed plant, since he and his friends ate the leaves completely off the other plant. They and the black swallowtails are pigs.</p>
<p>Green beetle in a rose:<br />
<a href='http://gutfullofbeer.net/bigdingus/img/foo101/rosebug.jpg' title='Click for larger version'><br />
<img src='http://gutfullofbeer.net/bigdingus/img/foo101/rosebug_sm.jpg'><br />
</a></p>
<p>Bee on some marjoram:<br />
<a href='http://gutfullofbeer.net/bigdingus/img/foo101/bee.jpg' title='Click for larger version'><br />
<img src='http://gutfullofbeer.net/bigdingus/img/foo101/bee_sm.jpg'><br />
</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bigdingus.com/2008/04/14/spring-bugs/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Roadtrip Day 4: A Hike</title>
		<link>http://bigdingus.com/2008/03/30/roadtrip-day-4-a-hike/</link>
		<comments>http://bigdingus.com/2008/03/30/roadtrip-day-4-a-hike/#comments</comments>
		<pubDate>Mon, 31 Mar 2008 00:44:13 +0000</pubDate>
		<dc:creator>The BigDingus Blogger</dc:creator>
		
		<category><![CDATA[Stuff]]></category>

		<guid isPermaLink="false">http://bigdingus.com/2008/03/30/roadtrip-day-4-a-hike/</guid>
		<description><![CDATA[We got up moderately early, packed the kids up with breakfast junk from the hotel buffet, and headed out to the park. It was in the low 50&#8217;s but it didn&#8217;t feel cold; we&#8217;re at 3000+ feet up here, and that really seems to affect the perception of air temperature. I had running shorts and [...]]]></description>
			<content:encoded><![CDATA[<p>We got up moderately early, packed the kids up with breakfast junk from the hotel buffet, and headed out to the park. It was in the low 50&#8217;s but it didn&#8217;t feel cold; we&#8217;re at 3000+ feet up here, and that really seems to affect the perception of air temperature. I had running shorts and a running t-shirt, anticipating (correctly) that I&#8217;d be running back from a finished-up crew to the van.<br />
<a href='http://gutfullofbeer.net/bigdingus/img/roadtrip/morning.jpg' title='Click for bigger, hazier version'><br />
<img src='http://gutfullofbeer.net/bigdingus/img/roadtrip/morning_small.jpg'></a></p>
<p>We opted for the &#8220;Juniper Cliffside Trail.&#8221; The trails on the parks department map are not very clearly described or marked. In this case, we started on one side of the river (the Prairie Dog Fork of the Red), and found we needed to ford the washed-over road crossing to continue. Wet feet. The trail is a multi-use foot-bike-horse trail, and a few squads of bikers - and one of runners - passed us along the way.<br />
<a href='http://gutfullofbeer.net/bigdingus/img/roadtrip/quartermaster.jpg' title='Click for Permian-sized version'><br />
<img src='http://gutfullofbeer.net/bigdingus/img/roadtrip/quartermaster_small.jpg'></a></p>
<p>The lower reaches of the canyon are &#8220;Quartermaster&#8221; formation Permian sediments. The white bands are gypsum, in the form of selenite or alabaster (and something else I can&#8217;t remember). Up close the white bands look like masses of brilliant thin crystals all lined up vertically next to each other. The gypsum precipitated out over layers of sediment during dry periods of the late Permian, when the world climate was going bonkers due to the conglomeration of continents into Pangea. As the soil dried, got somewhat re-wetted, and dried again - a lot - the gypsum sort-of filtered out of the sediments and was left as those distinctive white stripes.<br />
<a href='http://gutfullofbeer.net/bigdingus/img/roadtrip/colors.jpg' title='Click for colorifically big version'><br />
<img src='http://gutfullofbeer.net/bigdingus/img/roadtrip/colors_small.jpg'></a></p>
<p>Above the Quartermaster layers are two groups of late Triassic sediments, the Tecovas group and the Trujillo group. Those consist of random shales, conglomerates, and sandstones in a weird variety of colors. In particular, a pale purple and a greenish-yellow layer can be seen all over the place. On the trail (which is almost completely in Quartermaster territory), occasional arroyos have washed down the grey-green, yellow-green, and purple-grey sands and pebbles to mix with the red and white Permian sediments. It&#8217;s really cool to see. The water erosion on the cliffsides give a thoroughly Georgia O&#8217;Keefe look.</p>
<p>I can&#8217;t resist cheap compositions with gnarly dead trees. The place was easy pickings for that sort of stuff today.<br />
<a href='http://gutfullofbeer.net/bigdingus/img/roadtrip/upvalley.jpg' title='Click for bigger version'><br />
<img src='http://gutfullofbeer.net/bigdingus/img/roadtrip/upvalley_small.jpg'></a></p>
<p><a href='http://gutfullofbeer.net/bigdingus/img/roadtrip/tree.jpg' title='Click for tawdry big version'><br />
<img src='http://gutfullofbeer.net/bigdingus/img/roadtrip/tree_small.jpg'></a></p>
<p>The kids were pretty good about the whole thing. When they&#8217;d exhausted their energy, I left the camera bag with Elaine and headed back down the road. About two or three hundred yards out, I heard a couple of panicked-sounding screams of &#8220;Mike! Mike!&#8221;. I stopped to verify, and then realized I had no choice but to run back. An annoying minivan showed up to mask any further sound as I ran back up the park road as fast as I could (not fast). When the fam came finally into view, they were just strolling along. Pat saw me and came back to tell me that Elaine wondered whether I had the car keys. I expressed dissatisfaction with that motive for a distress call in a way that apparently made Elaine a little upset. I felt bad about that after I found out the effects. It turned out we hadn&#8217;t gone that far, because even with my slow running pace it took no time at all to get back to the van, though it had taken two hours to get where we got via the trail.</p>
<p>I sat around the pool watching Allie and Pat &#8220;swim&#8221; in the pool while Elaine and Christopher returned to the museum. Christopher came back in a couple hours to construct a &#8220;replica&#8221; of a historic firearm he&#8217;d found at the museum. It&#8217;s good that he&#8217;s satisfied with the most vague topological similarity between his realizations and the actual originals.</p>
<p>We went back to the park in the late afternoon one more time, just to have a look. It&#8217;s a really nice park, and with the museum as icing I think it was a nice trip. It&#8217;s really far, true, but Canyon is a surprisingly nice little town (compared especially to Lubbock, which had us wondering whether things would keep getting worse as we went north).  We ate at a Thai-Laotian (yes, really) place last night, and at the little &#8220;Something Different&#8221; place today we had a good lunch and a flawless free wireless connection.</p>
]]></content:encoded>
			<wfw:commentRss>http://bigdingus.com/2008/03/30/roadtrip-day-4-a-hike/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Roadtrip Day 3: Cool Museum, Make-Believe Hikes</title>
		<link>http://bigdingus.com/2008/03/29/roadtrip-day-3-cool-museum-make-believe-hikes/</link>
		<comments>http://bigdingus.com/2008/03/29/roadtrip-day-3-cool-museum-make-believe-hikes/#comments</comments>
		<pubDate>Sun, 30 Mar 2008 02:20:55 +0000</pubDate>
		<dc:creator>The BigDingus Blogger</dc:creator>
		
		<category><![CDATA[Stuff]]></category>

		<guid isPermaLink="false">http://bigdingus.com/2008/03/29/roadtrip-day-3-cool-museum-make-believe-hikes/</guid>
		<description><![CDATA[Local temperature was 34 degrees this morning, and the plain outside the hotel was loosely fogged. Our day started relatively late, due to this enormous multi-room suite and its black-out curtains. We headed out to the Panhandle-Plains Historical Society Museum to make it in before the crowds. We were successful.

This museum is large. It&#8217;s billed, [...]]]></description>
			<content:encoded><![CDATA[<p>Local temperature was 34 degrees this morning, and the plain outside the hotel was loosely fogged. Our day started relatively late, due to this enormous multi-room suite and its black-out curtains. We headed out to the Panhandle-Plains Historical Society Museum to make it in before the crowds. We were successful.<br />
<img src='http://gutfullofbeer.net/bigdingus/img/roadtrip/pphm.jpg'></p>
<p>This museum is <b>large</b>. It&#8217;s billed, in fact, as the largest history museum in Texas. It&#8217;s reminiscent of the randomness of the Witte Museum in San Antonio or the Texas Memorial Museum on the UT campus (in the latter case, its former randomness - it&#8217;s been rationalized in the recent past). The collections include paleontology, geology, Plains Indian anthropology, petroleum production, sea shells, stuffed birds, stuffed plains animals, Indian art, Western art, firearms, cars, old gas pumps, WWII memorabilia, &#8220;pioneer&#8221; living, local ranching history, and the Texas Revolution. If you&#8217;re ever in Canyon TX, it&#8217;d be ridiculous not to visit.</p>
<p>After a diffuse lunch period we headed back to the canyon. With our fresh new annual pass we breezed in and drove down to the canyon floor. We had no explicit goals. The day had cleared up and gotten sunny and warm.<br />
<a href='http://gutfullofbeer.net/bigdingus/img/roadtrip/bluff.jpg' title='Click for bigger version'><br />
<img src='http://gutfullofbeer.net/bigdingus/img/roadtrip/bluff_small.jpg'></a></p>
<p>The lower reaches of the canyon are walled and floored with orange-red Permian sediments, highlighted by white bands of gypsum. Above that are multi-colored Triassic sandstones and shales. The top is capped by relatively recent &#8220;caprock&#8221; limestone and caliche. The scrubby vegetation was in various stages of dormancy, but the stark twiggy look was dramatic and &#8220;classic.&#8221;<br />
<a href='http://gutfullofbeer.net/bigdingus/img/roadtrip/vista.jpg' title='Click for bigger version'><br />
<img src='http://gutfullofbeer.net/bigdingus/img/roadtrip/vista_small.jpg'></a></p>
<p>The dark twisty trees in this image: <a href='http://gutfullofbeer.net/bigdingus/img/roadtrip/witches.jpg' title='By the clicking of your mouse, click for an image to fill your house'><br />
<img src='http://gutfullofbeer.net/bigdingus/img/roadtrip/witches_small.jpg'></a><br />
reminded me of the witches from <i>Macbeth</i>. What would Shakespeare have thought of landscapes like this? The harsh light beaming down on our baby hikes over forty or fifty yards of wild terrain wouldn&#8217;t have done for those witches, but the terror thorns, the twisted, scraggling shrubs, and the abrasive polychromed crags would possibly have seemed too fantastic to believe.  I have to wonder what it&#8217;s like on moonlit nights.</p>
<p><a href='http://gutfullofbeer.net/bigdingus/img/roadtrip/sandstone.jpg' title='Click for bigger, sandier version'><br />
<img src='http://gutfullofbeer.net/bigdingus/img/roadtrip/sandstone_small.jpg'></a><br />
The Triassic strata include (in the <i>Trujillo</i> group) layers of &#8220;banded&#8221; sandstone. Up close it has a shiny gray look, but from a distance it looks dull gray to blue-gray to an almost malachite green. These rocks are pieces that have tumbled down from an original altitude a hundred feet or more up the slope.</p>
<p>The plan is that we&#8217;ll head back in the morning for a <b>real</b> hike. We&#8217;ll see how that goes.</p>
]]></content:encoded>
			<wfw:commentRss>http://bigdingus.com/2008/03/29/roadtrip-day-3-cool-museum-make-believe-hikes/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Roadtrip Day 2: Gliders and a Canyon</title>
		<link>http://bigdingus.com/2008/03/28/roadtrip-day-2-gliders-and-a-canyon/</link>
		<comments>http://bigdingus.com/2008/03/28/roadtrip-day-2-gliders-and-a-canyon/#comments</comments>
		<pubDate>Sat, 29 Mar 2008 00:52:08 +0000</pubDate>
		<dc:creator>The BigDingus Blogger</dc:creator>
		
		<category><![CDATA[Stuff]]></category>

		<guid isPermaLink="false">http://bigdingus.com/2008/03/28/roadtrip-day-2-gliders-and-a-canyon/</guid>
		<description><![CDATA[After the long day on Thursday, we went to bed pretty early. Everybody woke up at about 5:30. By 6:00 nobody could maintain the charade of trying to sleep, so Elaine got the kids out the door for the dee-luxe breakfast buffet at the Days Inn. The breakfast area smelled strongly of petrochemicals, as it [...]]]></description>
			<content:encoded><![CDATA[<p>After the long day on Thursday, we went to bed pretty early. Everybody woke up at about 5:30. By 6:00 nobody could maintain the charade of trying to sleep, so Elaine got the kids out the door for the dee-luxe breakfast buffet at the Days Inn. The breakfast area smelled strongly of petrochemicals, as it was primarily inhabited by oilfield service workers. Several semi-toxic packaged sweet rolls and bowls of cereal later we were ready to head out. The sun wasn&#8217;t yet up.</p>
<p>The Caprock Escarpment comes into view a few miles south of Post, TX. After Post, highway 84 rises up onto the plateau that is the High Plains of North America. The top-level rock strata is the Ogallala Formation, a fairly recent deposit of more-or-less rocky sediments formed from the broad downwash from the rising Rocky Mountains, stretching south to north across much of the country. The topmost layer is a hard quasi-limestone caliche that&#8217;s what was originally called the &#8220;caprock&#8221;, as it sits atop the typical bluffs that appear up and down the edge of the High Plains.</p>
<p>An interesting thing about this day is that it began about 40 degrees colder than it was Thursday afternoon. Thus upon reaching Lubbock we stopped at a Starbucks (with idiotic for-pay wireless) and then sought out a WalMart so that we could pick up more clothes for the kids. Lubbock is - partisans, please pardon me - a horrid place. For some reason we attracted beggars consistently. After a trip to a cold, windblown Prairie Dog Town (pop. 1)<br />
<img src='http://gutfullofbeer.net/bigdingus/img/roadtrip/pdt.jpg'></p>
<p>we headed out, hoping to figure out a way to avoid the place altogether on the way back. However just outside the pale we notice a sign for a museum at the Lubbock airport. We spun around to go there after seeing a pretty good-condition C-47 parked in front. The museum is the &#8220;Silent Wings&#8221; museum, and it preserves the story of USAAF pilots who flew the various transport gliders employed in WW2 for airborne assaults. Inside the museum was, among other very well-done exhibits, a complete CG-4A WACO glider.<br />
<img src='http://gutfullofbeer.net/bigdingus/img/roadtrip/museum.jpg'></p>
<p>We soon found that the glider was set up such that we could climb inside and look around - somewhat astounding, given the fact that the things required delicate care when new.<br />
<a href='http://gutfullofbeer.net/bigdingus/img/roadtrip/glider1_big.jpg' title='Click for huge camera original'><br />
<img src='http://gutfullofbeer.net/bigdingus/img/roadtrip/glider1.jpg'><br />
</a></p>
<p><img src='http://gutfullofbeer.net/bigdingus/img/roadtrip/glider2.jpg'></p>
<p>The museum was a great find overall. We headed out and got to Canyon at lunchtime. After some pizza for the kids we drove out to the park. The van was low on gas so we didn&#8217;t want to drive down into the low part of the park, but we stopped at the point you can take this picture:<br />
<img src='http://gutfullofbeer.net/bigdingus/img/roadtrip/canyon.jpg'></p>
<p>Palo Duro Canyon looks to be a pretty spectacular place. It&#8217;s a hard thing to capture with photography. I hope to go back over the next couple days, and I want to try and capture small stuff that evokes the visual impression of the big stuff. We&#8217;ll see.</p>
<p>On the way out of the parking lot we saw this tricked-out extreme Land Cruiser, apparently ferried here from Switzerland.<br />
<img src='http://gutfullofbeer.net/bigdingus/img/roadtrip/landcruiser.jpg'></p>
]]></content:encoded>
			<wfw:commentRss>http://bigdingus.com/2008/03/28/roadtrip-day-2-gliders-and-a-canyon/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Roadtrip Day 1: Fossils, Bombers, Windmills</title>
		<link>http://bigdingus.com/2008/03/27/roadtrip-day-1-fossils-bombers-windmills/</link>
		<comments>http://bigdingus.com/2008/03/27/roadtrip-day-1-fossils-bombers-windmills/#comments</comments>
		<pubDate>Fri, 28 Mar 2008 00:53:35 +0000</pubDate>
		<dc:creator>The BigDingus Blogger</dc:creator>
		
		<category><![CDATA[Stuff]]></category>

		<guid isPermaLink="false">http://bigdingus.com/2008/03/27/roadtrip-day-1-fossils-bombers-windmills/</guid>
		<description><![CDATA[San Saba is a ways away from places that are a ways away from places whose locations you know. Specifically, it&#8217;s about 20 miles west of Lometa. It&#8217;s a nice town, the &#8220;Pecan Capital of the World.&#8221;  There&#8217;s a park there around a millpond. I saw no mill, but there was a bridge.
West of [...]]]></description>
			<content:encoded><![CDATA[<p>San Saba is a ways away from places that are a ways away from places whose locations you know. Specifically, it&#8217;s about 20 miles west of Lometa. It&#8217;s a nice town, the &#8220;Pecan Capital of the World.&#8221;  There&#8217;s a park there around a millpond. I saw no mill, but there was a bridge.</p>
<p>West of San Saba to Richland Springs, then north across Wilbarger Creek, then west about 12 miles, there&#8217;s a roadcut through some Pennsylvanian sediments. We stopped and looked around. Within about a minute Allie had found a slab of fossilized stuff about 8 inches square.<br />
<a href='http://gutfullofbeer.net/bigdingus/img/roadtrip/fossils.jpg' title='Click for bigger view'><br />
<img src='http://gutfullofbeer.net/bigdingus/img/roadtrip/fossils_small.jpg'><br />
</a></p>
<p>Little chunks of fossilized crinoids were all over the place, sometimes separately and sometimes in little concretions like that. About 3 vehicles passed us during the half hour we rooted around.<br />
<img src='http://gutfullofbeer.net/bigdingus/img/roadtrip/digging.jpg'></p>
<p>We headed out and onwards to Abilene, which we skirted on its southwest side. We stopped after joining I20 at an exit labeled &#8220;Tye&#8221;. The Conoco truck stop sported a gift shop filled with weird dolls. After gassing and washing up, and after the inevitable purchase of some Silly Putty, we walked out to the sound of something in the sky. There flew a B1B, back to its home at Dyess AFB. Three or four more flew in one after the other, while a C-130 flew over, a couple thousand feet higher, in the opposite direction. It was pretty cool.<br />
<img src='http://gutfullofbeer.net/bigdingus/img/roadtrip/B1B_small.jpg'></p>
<p>There are a lot of windmills - big ones - on hills southwest of Abiliene and out basically all over the place along highway 84 northwest out of Sweetwater. They looked a lot bigger than the ones I remember from northern California, but maybe I&#8217;ve shrunk since then.<br />
<img src='http://gutfullofbeer.net/bigdingus/img/roadtrip/windmill1.jpg'></p>
]]></content:encoded>
			<wfw:commentRss>http://bigdingus.com/2008/03/27/roadtrip-day-1-fossils-bombers-windmills/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Wasp</title>
		<link>http://bigdingus.com/2008/03/21/wasp/</link>
		<comments>http://bigdingus.com/2008/03/21/wasp/#comments</comments>
		<pubDate>Fri, 21 Mar 2008 23:35:43 +0000</pubDate>
		<dc:creator>The BigDingus Blogger</dc:creator>
		
		<category><![CDATA[Macro]]></category>

		<guid isPermaLink="false">http://bigdingus.com/2008/03/21/wasp/</guid>
		<description><![CDATA[
I hooked up my homemade &#8220;ring flash&#8221; Amazon box the other day and took some pictures of emerging flowers. I wasn&#8217;t happy with any of them in the on-camera preview, but I finally got around to uploading them. This wasp one looked terribly blurred and over-exposed on the LCD, but it looks fine to me [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://gutfullofbeer.net/bigdingus/img/wasp/wasp.jpg' alt='wasp photo' title='A wasp'></p>
<p>I hooked up my homemade &#8220;ring flash&#8221; Amazon box the other day and took some pictures of emerging flowers. I wasn&#8217;t happy with any of them in the on-camera preview, but I finally got around to uploading them. This wasp one looked terribly blurred and over-exposed on the LCD, but it looks fine to me now.</p>
<p>The pear blossoms in which this wasp was cavorting have since dropped off the tree; it only takes a couple days. It&#8217;s not our tree; it&#8217;s in the neighbor&#8217;s yard. It produces a tremendous number of pears. They don&#8217;t taste like anything at all when they&#8217;re ripe off the tree (July), but my brother-in-law told us to put them in the refrigerator for a couple weeks. After such treatment the pears get a lot sweeter.</p>
<p>This wasp was a little thing; the blossoms are at most an inch across when they&#8217;re open.</p>
<p>I got an OK picture of a mutabilis rose blossom too. The background is black because the ring flash doesn&#8217;t cast enough light to expose stuff not really close to the lens.<br />
<a href='http://gutfullofbeer.net/bigdingus/img/wasp/rose.jpg'><br />
<img src='http://gutfullofbeer.net/bigdingus/img/wasp/rose_t.jpg' alt='rose photo' title='Rose - click for uncropped camera original'><br />
</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bigdingus.com/2008/03/21/wasp/feed/</wfw:commentRss>
		</item>
		<item>
		<title>&#8220;We Are Not Shed People&#8221;</title>
		<link>http://bigdingus.com/2008/03/01/we-are-not-shed-people/</link>
		<comments>http://bigdingus.com/2008/03/01/we-are-not-shed-people/#comments</comments>
		<pubDate>Sat, 01 Mar 2008 16:36:48 +0000</pubDate>
		<dc:creator>The BigDingus Blogger</dc:creator>
		
		<category><![CDATA[Stuff]]></category>

		<guid isPermaLink="false">http://bigdingus.com/2008/03/01/we-are-not-shed-people/</guid>
		<description><![CDATA[Backyard sheds are an important part of suburban American life. With a shed comes obligation, however, and some are not up to the demands of shed ownership. In particular, I am not a worthy shed owner.

Our shed was, as sheds go, a pretty nice shed. It had been added to the home (we think) by [...]]]></description>
			<content:encoded><![CDATA[<p>Backyard sheds are an important part of suburban American life. With a shed comes obligation, however, and some are not up to the demands of shed ownership. In particular, I am not a worthy shed owner.</p>
<p><img src='http://gutfullofbeer.net/bigdingus/img/shed/shedthere.jpg' alt='Shed' title='Shed as it once was'></p>
<p>Our shed was, as sheds go, a pretty nice shed. It had been added to the home (we think) by its original owner, perhaps at the time the house was finished by the builder. The outside walls were finished with similar wood siding to that on the house; the inside was left without real walls. We used it to store a shedful of stuff that we didn&#8217;t want, didn&#8217;t know what else to do with.</p>
<p><img src='http://gutfullofbeer.net/bigdingus/img/shed/desctruction.jpg' alt='Shed' title='Siding coming off'></p>
<p>One thing our shed did for the local ecosystem was provide a home for small rodents. This I discovered surprisingly recently. As a grossly unqualified shed owner, I hadn&#8217;t been in the shed for at least two years. A large rose bush with gigantic, murderous thorns had grown completely over the shed door. Before that the last thing I&#8217;d done was replace the shed doorknob with a new one. Since that time, mice or rats, or both working as a team, had gnawed a classic cartoon-like access portal at the bottom of the bush-hidden side of the shed. Our dog - a &#8220;rat terrier&#8221; as unworthy of her title as we are of &#8220;shed people&#8221; - had been showing a lot of interest in those bushes and that area, but had never come anywhere close to actually getting a rat. One afternoon, as I walked out with Gypsy, she and I both heard a brief rustle, and I turned to see a rat on a low holly branch. Gypsy saw it too, and sprang to the attack by cleverly running the opposite direction towards the area where she <i>really</i> suspected the rats to be.</p>
<p><img src='http://gutfullofbeer.net/bigdingus/img/shed/almostgone.jpg' alt='No Shed' title='Almost completely gone'></p>
<p>At that point I wondered, &#8220;Where is that rat going?&#8221;  Only then did I think to check whether there was another way into the shed besides the inaccessible well-locked door. The next day we cut the rose bush back and checked inside. There amidst the unwanted detritus steaming away in the shed was what must have been some of the most valuable prime rat real estate in the area. We didn&#8217;t see any rats at that point, and the dog couldn&#8217;t find any either, but it was clear that they&#8217;d made much better use of the shed than we ever had. </p>
<p><img src='http://gutfullofbeer.net/bigdingus/img/shed/ratcheck.jpg' alt='Rat Check' title='Checking for lingering rats'></p>
<p>About $800 later, we&#8217;re shedless.  It was somewhat embarrassing taking the pictures. There I was, an affluent yuppie unable to maintain a shed in his own back yard, taking pictures of guys forced to wear breathing masks to protect themselves from the rodent filth I&#8217;d allowed to accumulate. It made me feel contemptible, but as I was depriving myself of a shed I contented myself that that was appropriate punishment. I don&#8217;t deserve a shed.</p>
<p>We&#8217;ll put flowerpots on the slab, or something. Flowers and herbs I can take care of, usually. The rose bush will be a lot happier anyway. I don&#8217;t know where the rats will go. They were of course seriously traumatized, and to some extent I feel kind-of bad about that too.</p>
]]></content:encoded>
			<wfw:commentRss>http://bigdingus.com/2008/03/01/we-are-not-shed-people/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
