<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"> <channel><title>ProgramError</title> <link>http://programerror.com</link> <description>The Works of David Michael Bryson</description> <lastBuildDate>Mon, 23 Apr 2012 14:33:01 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.2</generator> <atom:link rel="next" href="http://programerror.com/feed/?page=2" /> <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/programerror" /><feedburner:info uri="programerror" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><title>Avida 3.0 development discussion heating up</title><link>http://feedproxy.google.com/~r/programerror/~3/oJUG6amm1FI/</link> <comments>http://programerror.com/2012/02/avida-3-0-development-discussion-heating-up/#comments</comments> <pubDate>Tue, 28 Feb 2012 01:58:59 +0000</pubDate> <dc:creator>David</dc:creator> <category><![CDATA[Avida]]></category> <guid isPermaLink="false">http://programerror.com/?p=397</guid> <description><![CDATA[It&#8217;s been quiet on the blog for a while. What personal blog doesn&#8217;t go silent once in a while? That doesn&#8217;t mean I&#8217;ve been bored, though. Quite the opposite, I have been hard at work on a number of projects, &#8230; <a
href="http://programerror.com/2012/02/avida-3-0-development-discussion-heating-up/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>It&#8217;s been quiet on the blog for a while. What personal blog doesn&#8217;t go silent once in a while?  That doesn&#8217;t mean I&#8217;ve been bored, though. Quite the opposite, I have been hard at work on a number of projects, including becoming a full PhD candidate. As the title hints, I have also been making strides in Avida 3.0 development. The new API is starting to come together nicely. In an effort to bring the changes to the light, I am discussing the changes on the <a
href="http://avida.devosoft.org/mailman/listinfo/avida-dev/">avida-dev</a> list. If you are interested in the future of Avida, please come on over and join in.</p> <img src="http://feeds.feedburner.com/~r/programerror/~4/oJUG6amm1FI" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://programerror.com/2012/02/avida-3-0-development-discussion-heating-up/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://programerror.com/2012/02/avida-3-0-development-discussion-heating-up/</feedburner:origLink></item> <item><title>The City Limits</title><link>http://feedproxy.google.com/~r/programerror/~3/Fo_gdgYT5wQ/</link> <comments>http://programerror.com/2011/05/the-city-limits/#comments</comments> <pubDate>Tue, 10 May 2011 19:36:17 +0000</pubDate> <dc:creator>David</dc:creator> <category><![CDATA[Photography]]></category> <guid isPermaLink="false">http://programerror.com/?p=391</guid> <description><![CDATA[Simply amazing timelapse photography by Dominic Boudeault. Timelapse &#8211; The City Limits from Dominic on Vimeo. Via Jonathan Woods at MSNBC.]]></description> <content:encoded><![CDATA[<p>Simply amazing timelapse photography by Dominic Boudeault.</p><p><iframe
src="http://player.vimeo.com/video/23237102?color=ffffff" width="610" height="344" frameborder="0"></iframe><p><a
href="http://vimeo.com/23237102">Timelapse &#8211; The City Limits</a> from <a
href="http://vimeo.com/dominicboudreault">Dominic</a> on <a
href="http://vimeo.com">Vimeo</a>.</p><p>Via <a
href="http://photoblog.msnbc.msn.com/_news/2011/05/10/6617741-time-lapse-video-contrasts-urban-and-rural-scenes">Jonathan Woods at MSNBC</a>.</p> <img src="http://feeds.feedburner.com/~r/programerror/~4/Fo_gdgYT5wQ" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://programerror.com/2011/05/the-city-limits/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://programerror.com/2011/05/the-city-limits/</feedburner:origLink></item> <item><title>TestRunner 2.0 now available</title><link>http://feedproxy.google.com/~r/programerror/~3/YhbwEZREVSk/</link> <comments>http://programerror.com/2011/05/testrunner-2-0-now-available/#comments</comments> <pubDate>Fri, 06 May 2011 16:37:58 +0000</pubDate> <dc:creator>David</dc:creator> <category><![CDATA[Computer Science]]></category> <category><![CDATA[TestRunner]]></category> <guid isPermaLink="false">http://programerror.com/?p=387</guid> <description><![CDATA[I have just posted TestRunner 2.0. New features include Git support and JUnit compatible XML report generation. See the TestRunner page for more details. TestRunner itself is now managed with Git as well. You may clone the master repository at &#8230; <a
href="http://programerror.com/2011/05/testrunner-2-0-now-available/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>I have just posted TestRunner 2.0.   New features include Git support and JUnit compatible XML report generation.  See the <a
href="http://programerror.com/software/testrunner">TestRunner</a> page for more details.</p><p>TestRunner itself is now managed with Git as well.  You may clone the master repository at <a
href="git://programerror.com/testrunner.git">git://programerror.com/testrunner.git</a>, or fork the mirror at <a
href="http://github.com/brysonda/testrunner">GitHub</a>.</p> <img src="http://feeds.feedburner.com/~r/programerror/~4/YhbwEZREVSk" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://programerror.com/2011/05/testrunner-2-0-now-available/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://programerror.com/2011/05/testrunner-2-0-now-available/</feedburner:origLink></item> <item><title>Centering custom views inside an NSScrollView</title><link>http://feedproxy.google.com/~r/programerror/~3/k5pI64SBMqs/</link> <comments>http://programerror.com/2011/04/centering-custom-views-inside-an-nsscrollview/#comments</comments> <pubDate>Mon, 25 Apr 2011 16:02:08 +0000</pubDate> <dc:creator>David</dc:creator> <category><![CDATA[Computer Science]]></category> <category><![CDATA[Avida]]></category> <category><![CDATA[Cocoa]]></category> <category><![CDATA[NSClipView]]></category> <category><![CDATA[NSScrollView]]></category> <guid isPermaLink="false">http://programerror.com/?p=370</guid> <description><![CDATA[In Cocoa, a NSScrollView provides basic functionality for encapsulating a view with a scrolling frame. It provides the appropriate plumbing and hooks it all together so that it &#8216;just works&#8217;. At least in theory. In practice, I encountered a few &#8230; <a
href="http://programerror.com/2011/04/centering-custom-views-inside-an-nsscrollview/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>In Cocoa, a NSScrollView provides basic functionality for encapsulating a view with a scrolling frame.   It provides the appropriate plumbing and hooks it all together so that it &#8216;just works&#8217;.  At least in theory.  In practice, I encountered a few gaps in functionality and documentation when enclosing my own custom view inside an NSScrollView.   These gaps may simply be due to my own limited experience with Cocoa so far, but nonetheless the following bits may be helpful to others with similar challenges.</p><h2>Setting View Size</h2><p>NSScrollViews will automatically adjust scroll bar positions and sizes to the accommodate the document view that they encapsulate.  This behavior is controlled by monitoring the <em>frame</em> size of the content NSView-subclass instance.  Whenever the desired size of the document changes, simply set the frame size appropriately:</p><pre class="subtopic">
NSSize desiredSize;
desiredSize.width = 500.0;
desiredSize.height = 500.0;
[theDocumentView setFrameSize:desiredSize];
</pre><h2>Centering the Document</h2><p>This bit is somewhat more complicated.  The default behavior of NSScrollView revolves around document views with layout that flows from the origin, bottom left by default.   Whenever the content view is smaller the scroll view, the position is locked to the origin.  In my case, however, I want the enclosed view to be centered whenever it is small enough to fit.  There is no means to do this out of the box, though.</p><p>The general consensus of forums and mailing lists seems to be that this is best accomplished by subclassing NSClipView and replacing the <em>content view</em> of the scroll view with this subclass.   The basic idea is to catch frame size changes and trigger the centering behavior under appropriate conditions.  The following interface comes from my implementation of such a clip view subclass in <a
href="http://avida.devosoft.org/viewer-macos">Avida : Mac OS Viewer</a> (BSD-style license):</p><pre class="subtopic">
@interface CenteringClipView : NSClipView {
  NSPoint viewPoint;
}
- (id) initWithFrame:(NSRect)frame;
- (void) centerView;
// NSClipView Method Overrides
- (NSPoint) constrainScrollPoint:(NSPoint)proposedNewOrigin;
- (void) viewBoundsChanged:(NSNotification*)notification;
- (void) viewFrameChanged:(NSNotification*)notification;
- (void) setFrame:(NSRect)frameRect;
- (void) setFrameOrigin:(NSPoint)newOrigin;
- (void) setFrameSize:(NSSize)newSize;
- (void) setFrameRotation:(CGFloat)angle;
@end
</pre><p>The implementation consists of two core methods that handle most of the work, <em>centerView</em> and <em>constrainScrollPoint:(NSPoint)</em>. The <em>centerView</em> method finds the appropriate origin point for the clipping rect given the size of the document.  When the document is small enough to fit, the origin will center the document.  When the document is larger than the scroll view, it will adjust the origin relative to the last scroll point of the view.  The <em>constrainScrollPoint:(NSPoint)</em> method is a core NSClipView method that may be used to constrain scrolling behavior in subclasses.   In CenteringClipView, the method keeps the scroll point fixed in any direction that is smaller than the scroll view size, otherwise bounding scrolling within the document.  It also stashes the current scroll point in <em>self.viewPoint</em> for use in <em>centerView</em>.</p><pre class="subtopic">
- (void) centerView {
  NSRect docRect = [[self documentView] frame];
  NSRect clipRect = [self bounds];
  // Center the clipping rect origin x
  if (docRect.size.width < clipRect.size.width) {
    clipRect.origin.x = roundf((docRect.size.width - clipRect.size.width) / 2.0);
  } else {
    clipRect.origin.x = roundf(viewPoint.x * docRect.size.width - (clipRect.size.width / 2.0));
  }
  // Center the clipping rect origin y
  if (docRect.size.height < clipRect.size.height) {
    clipRect.origin.y = roundf((docRect.size.height - clipRect.size.height) / 2.0);
  } else {
    clipRect.origin.y = roundf(viewPoint.y * docRect.size.width - (clipRect.size.height / 2.0));
  }
  // Scroll the document to the selected center point
  NSScrollView* scrollView = (NSScrollView*)[self superview];
  [self scrollToPoint:[self constrainScrollPoint:clipRect.origin]];
  [scrollView reflectScrolledClipView:self];
}
- (NSPoint) constrainScrollPoint:(NSPoint)proposedNewOrigin {
  NSRect docRect = [[self documentView] frame];
  NSRect clipRect = [self bounds];
  CGFloat maxX = docRect.size.width - clipRect.size.width;
  CGFloat maxY = docRect.size.height - clipRect.size.height;
  clipRect.origin = proposedNewOrigin;
  if (docRect.size.width < clipRect.size.width) {
    clipRect.origin.x = roundf(maxX / 2.0);
  } else {
    clipRect.origin.x = roundf(MAX(0, MIN(clipRect.origin.x, maxX)));
  }
  if (docRect.size.height < clipRect.size.height) {
    clipRect.origin.y = roundf(maxY / 2.0);
  } else {
    clipRect.origin.y = roundf(MAX(0, MIN(clipRect.origin.y, maxY)));
  }
  viewPoint.x = NSMidX(clipRect) / docRect.size.width;
  viewPoint.y = NSMidY(clipRect) / docRect.size.height;
  return clipRect.origin;
}
</pre><p>The last bits of the implementation simply catch frame size changes.  The methods are forwarded to the superclass (NSClipView), then followed by a call to <em>centerView</em> ensuring that the document stays centered as desired.</p><pre class="subtopic">
- (void) viewBoundsChanged:(NSNotification*)notification {
  [super viewBoundsChanged:notification];
  [self centerView];
}
- (void) viewFrameChanged:(NSNotification*)notification {
  [super viewBoundsChanged:notification];
  [self centerView];
}
- (void) setFrame:(NSRect)frameRect {
  [super setFrame:frameRect];
  [self centerView];
}
- (void) setFrameOrigin:(NSPoint)newOrigin {
  [super setFrameOrigin:newOrigin];
  [self centerView];
}
- (void) setFrameSize:(NSSize)newSize {
  [super setFrameSize:newSize];
  [self centerView];
}
- (void) setFrameRotation:(CGFloat)angle {
  [super setFrameRotation:angle];
  [self centerView];
}
</pre><p>Once you have a clip view that handles the behavior you want, you need to set it up for use in your scroll view.   Unfortunately, this cannot be done through Interface Builder.  Rather, you will need a few lines in your initialization code for the view.  In my case, I used the <em>windowDidLoad</em> method of my window controller, so that I can be sure that the view has been loaded fully.</p><pre class="subtopic">
- (void) windowDidLoad {
  ...
  // Replace NSClipView of scrollView with a CenteringClipView
  id docView = [scrollView documentView];
  NSClipView* clipView = [[CenteringClipView alloc] initWithFrame:[docView frame]];
  [scrollView setContentView:clipView];
  [scrollView setDocumentView:docView];
  ...
}
</pre><h2>Strange Document Frame Origin Behavior</h2><p>If you have implemented a custom clip view as described above, you may observe some strange behavior when resizing the enclosing scroll view.  My document view would shift away from to origin, occasionally snapping back to the correct position. It may have been an result of my set original set up in Interface Builder, but the root cause appears to have been artifacts in automatic subview resizing.  The solution was to explicitly disable subview resizing in CenteringClipView.</p><pre class="subtopic">
- (id) initWithFrame:(NSRect)frame {
  self = [super initWithFrame:frame];
  if (self) {
    viewPoint = NSMakePoint(0, 0);
    [self setAutoresizesSubviews:NO];
  }
  return self;
}
</pre><h2>Handling Scroller Visibility</h2><p>If you want the scrollers of the scroll view to disappear when not in use, you should be able to set automatic scroller hiding on the NSScrollView class.  However, in my experience, the automatic behavior was not triggered properly by my clip view.  The prevailing solution to this appears to entail taking scroll bar handling into your own hands.   I disabled automatic scroll bar hiding and wrote my own code to do it.   I won't go into details here, but rather refer you to my implementation in <a
href="http://avida.devosoft.org/viewer-macos/">Avida : Mac OS Viewer's</a> CenteringClipView class for details.</p><h2>Conclusion</h2><p>These tidbits are, of course, not intended to be a detailed tutorial for using NSScrollViews.   However, since it took quite a bit of search, debugging, and head scratching to solve them, I thought it be worth jotting them down.  Hopefully they will make it into Google and be useful for others new to Cocoa.   If you are more familiar with Cocoa, please let me know if there is a better way to do any of the above.</p> <img src="http://feeds.feedburner.com/~r/programerror/~4/k5pI64SBMqs" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://programerror.com/2011/04/centering-custom-views-inside-an-nsscrollview/feed/</wfw:commentRss> <slash:comments>1</slash:comments> <feedburner:origLink>http://programerror.com/2011/04/centering-custom-views-inside-an-nsscrollview/</feedburner:origLink></item> <item><title>Avida project gets a major upgrade</title><link>http://feedproxy.google.com/~r/programerror/~3/vB7L-CzOqk4/</link> <comments>http://programerror.com/2011/04/avida-project-gets-a-major-upgrade/#comments</comments> <pubDate>Fri, 01 Apr 2011 19:28:09 +0000</pubDate> <dc:creator>David</dc:creator> <category><![CDATA[Avida]]></category> <guid isPermaLink="false">http://programerror.com/?p=321</guid> <description><![CDATA[I have recently been doing some major updates to the public face of the Avida project. Although it has long been our intention to have Avida be a true open source project with a vibrant community of developers and users, &#8230; <a
href="http://programerror.com/2011/04/avida-project-gets-a-major-upgrade/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>I have recently been doing some major updates to the public face of the <a
href="http://avida.devosoft.org">Avida project</a>.   Although it has long been our intention to have Avida be a true open source project with a vibrant community of developers and users, we have lacked in execution of that goal.   I hope my renewed efforts to put out improved and more up to date information will correct that.  Of course, only time will tell.</p> <img src="http://feeds.feedburner.com/~r/programerror/~4/vB7L-CzOqk4" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://programerror.com/2011/04/avida-project-gets-a-major-upgrade/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://programerror.com/2011/04/avida-project-gets-a-major-upgrade/</feedburner:origLink></item> <item><title>Winter Nightfall at MSU</title><link>http://feedproxy.google.com/~r/programerror/~3/cdiTXUIQvvM/</link> <comments>http://programerror.com/2011/01/winter-nightfall-at-msu/#comments</comments> <pubDate>Sat, 29 Jan 2011 23:59:43 +0000</pubDate> <dc:creator>David</dc:creator> <category><![CDATA[Photography]]></category> <guid isPermaLink="false">http://programerror.com/?p=313</guid> <description><![CDATA[<a
href="http://programerror.com/2011/01/winter-nightfall-at-msu/" title="Winter Nightfall at MSU"><img
src="http://cdn.programerror.com/wp-content/uploads/yapb_cache/ipk52779.4aro72dfvm040wcc0ww8goc0c.a9sxxja1njksswcs400wcc4cg.th.jpeg" width="180" height="271" alt="Winter Nightfall at MSU" style="float:left;padding:0 10px 10px 0;" /></a>]]></description> <content:encoded><![CDATA[<a
href="http://programerror.com/2011/01/winter-nightfall-at-msu/" title="Winter Nightfall at MSU"><img
src="http://cdn.programerror.com/wp-content/uploads/yapb_cache/ipk52779.4aro72dfvm040wcc0ww8goc0c.a9sxxja1njksswcs400wcc4cg.th.jpeg" width="180" height="271" alt="Winter Nightfall at MSU" style="float:left;padding:0 10px 10px 0;" /></a><img src="http://feeds.feedburner.com/~r/programerror/~4/cdiTXUIQvvM" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://programerror.com/2011/01/winter-nightfall-at-msu/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://programerror.com/2011/01/winter-nightfall-at-msu/</feedburner:origLink></item> <item><title>"Why 3D Doesn’t Work and Never Will.  Case Closed."</title><link>http://feedproxy.google.com/~r/programerror/~3/Q8qpeaZyz6g/</link> <comments>http://programerror.com/2011/01/why-3d-doesnt-work-and-never-will-case-closed/#comments</comments> <pubDate>Tue, 25 Jan 2011 20:33:08 +0000</pubDate> <dc:creator>David</dc:creator> <category><![CDATA[Miscellaneous]]></category> <guid isPermaLink="false">http://programerror.com/?p=310</guid> <description><![CDATA[Walter Murch, in a letter to Roger Ebert, explains that the biggest problem with 3D is the &#34;convergence/focus&#34; issue. The audience must focus at the screen, a plane at a fixed distance away. However, to properly view the screen their &#8230; <a
href="http://programerror.com/2011/01/why-3d-doesnt-work-and-never-will-case-closed/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Walter Murch, in a <a
href="http://blogs.suntimes.com/ebert/2011/01/post_4.html">letter to Roger Ebert</a>, explains that the biggest problem with 3D is the &quot;convergence/focus&quot; issue.    The audience must focus at the screen, a plane at a fixed distance away.  However, to properly view the screen their eyes must converge at variable distances in front of and behind the screen.   We can do it, but it takes a lot of extra work, thus leading to fatigue and/or headaches.  (via <a
href="http://daringfireball.net/linked/2011/01/25/focus-convergence">John Gruber</a>)</p> <img src="http://feeds.feedburner.com/~r/programerror/~4/Q8qpeaZyz6g" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://programerror.com/2011/01/why-3d-doesnt-work-and-never-will-case-closed/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://programerror.com/2011/01/why-3d-doesnt-work-and-never-will-case-closed/</feedburner:origLink></item> <item><title>"They Were There"</title><link>http://feedproxy.google.com/~r/programerror/~3/geO38HZHyg8/</link> <comments>http://programerror.com/2011/01/they-were-there/#comments</comments> <pubDate>Sat, 22 Jan 2011 21:13:10 +0000</pubDate> <dc:creator>David</dc:creator> <category><![CDATA[Miscellaneous]]></category> <guid isPermaLink="false">http://programerror.com/?p=306</guid> <description><![CDATA[Great film by Errol Morris for IBM (via John Gruber).]]></description> <content:encoded><![CDATA[<p><iframe
title="YouTube video player" class="youtube-player"  width="600" height="367" src="http://www.youtube.com/embed/XrhDaAmn5Uw?rel=0&amp;hd=1"></iframe></p><p>Great film by Errol Morris for IBM (via <a
href="http://daringfireball.net/linked/2011/01/21/they-were-there">John Gruber</a>).</p> <img src="http://feeds.feedburner.com/~r/programerror/~4/geO38HZHyg8" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://programerror.com/2011/01/they-were-there/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://programerror.com/2011/01/they-were-there/</feedburner:origLink></item> <item><title>Starting at BEACON Thursday</title><link>http://feedproxy.google.com/~r/programerror/~3/gcconI9aDUw/</link> <comments>http://programerror.com/2010/08/starting-at-beacon-thursday/#comments</comments> <pubDate>Tue, 03 Aug 2010 00:43:25 +0000</pubDate> <dc:creator>David</dc:creator> <category><![CDATA[Miscellaneous]]></category> <guid isPermaLink="false">http://programerror.com/?p=235</guid> <description><![CDATA[Its OFFICIAL! I will starting work full-time for the new Bio-computational Evolution in Action Consortium (BEACON) at Michigan State University on Thursday this week. Half of my time will be spent developing and supporting computing resources for the center, including &#8230; <a
href="http://programerror.com/2010/08/starting-at-beacon-thursday/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Its <em>OFFICIAL</em>!  I will starting work full-time for the new Bio-computational Evolution in Action Consortium (BEACON) at Michigan State University on Thursday this week.  Half of my time will be spent developing and supporting computing resources for the center, including web applications and databases.  The other half will be focused on developing, extending, and improving the graphical user interface framework for Avida-ED.  I am looking forward to it.</p><p>As logically follows, Wednesday will be last day working for the MSU Libraries.  After six years I have accumulated quite a bit of experience and have appreciated the opportunities and support for my education that the Libraries afforded me.  I wish them well.</p> <img src="http://feeds.feedburner.com/~r/programerror/~4/gcconI9aDUw" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://programerror.com/2010/08/starting-at-beacon-thursday/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://programerror.com/2010/08/starting-at-beacon-thursday/</feedburner:origLink></item> <item><title>Elena ‘washing’ her bear</title><link>http://feedproxy.google.com/~r/programerror/~3/jD06dgMyy4E/</link> <comments>http://programerror.com/2010/05/elena-washing-her-bear/#comments</comments> <pubDate>Sat, 22 May 2010 04:44:00 +0000</pubDate> <dc:creator>David</dc:creator> <category><![CDATA[Elena]]></category> <guid isPermaLink="false">http://programerror.com/?p=195</guid> <description /> <content:encoded><![CDATA[
<a
href="http://cdn.programerror.com/wp-content/uploads/2010/05/IPK71694.jpg" rel="shadowbox[sbpost-195];player=img;" title="IPK71694"><img
width="150" height="150" src="http://cdn.programerror.com/wp-content/uploads/photojar/cache/IPK71694-150x150-1-img196.jpg" class="attachment-thumbnail" alt="Ah..." title="IPK71694" /></a>\n<a
href="http://cdn.programerror.com/wp-content/uploads/2010/05/IPK71695.jpg" rel="shadowbox[sbpost-195];player=img;" title="IPK71695"><img
width="150" height="150" src="http://cdn.programerror.com/wp-content/uploads/photojar/cache/IPK71695-150x150-1-img197.jpg" class="attachment-thumbnail" alt="my bear" title="IPK71695" /></a>\n<a
href="http://cdn.programerror.com/wp-content/uploads/2010/05/IPK71697.jpg" rel="shadowbox[sbpost-195];player=img;" title="IPK71697"><img
width="150" height="150" src="http://cdn.programerror.com/wp-content/uploads/photojar/cache/IPK71697-150x150-1-img198.jpg" class="attachment-thumbnail" alt="is clean!" title="IPK71697" /></a>\n
<img src="http://feeds.feedburner.com/~r/programerror/~4/jD06dgMyy4E" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://programerror.com/2010/05/elena-washing-her-bear/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://programerror.com/2010/05/elena-washing-her-bear/</feedburner:origLink></item> </channel> </rss><!-- Dynamic page generated in 0.440 seconds. --><!-- Cached page generated by WP-Super-Cache on 2012-05-16 09:56:03 --><!-- Compression = gzip -->

