<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5101251932239550972</id><updated>2011-12-19T16:18:59.139-08:00</updated><category term='C#'/><category term='walking'/><category term='beer'/><category term='android'/><category term='hiking'/><category term='P/Invoke'/><category term='trains'/><category term='debugging'/><category term='adventures'/><category term='languages'/><category term='COM'/><category term='review'/><category term='KioskCrash'/><category term='photos'/><category term='dutch'/><category term='c++'/><category term='IIS'/><category term='fitness'/><category term='Mercurial'/><category term='navel gazing'/><category term='windbg'/><title type='text'>Leber Hall</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.leberhall.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://www.leberhall.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Brendan Leber</name><uri>http://www.blogger.com/profile/07400779512672085014</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-tLLzIQPbpig/TsCugtiq2xI/AAAAAAAAAO4/zZwuuH495TU/s220/IMG_20111108_120800.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>20</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5101251932239550972.post-1361717347596128780</id><published>2011-12-19T16:18:00.001-08:00</published><updated>2011-12-19T16:18:59.191-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><title type='text'>The Demons of Cyclic Space Redux</title><content type='html'>&lt;p&gt;&lt;a href="http://lh4.ggpht.com/-lfVb9fdEHuU/Tu_UcMwst_I/AAAAAAAAAPw/KRFPIkifNiA/s1600-h/WinDemons%25255B2%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="WinDemons" border="0" alt="WinDemons" src="http://lh6.ggpht.com/-YUyX2_5Px5g/Tu_UceEF1gI/AAAAAAAAAP4/1O39PaRWcMs/WinDemons_thumb.jpg?imgmax=800" width="244" height="155" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;When I started learning how to write programs in C I wrote several as described in the book “&lt;a href="http://www.amazon.com/Magic-Machine-Handbook-Computer-Sorcery/dp/0716721449"&gt;The Magic Machine&lt;/a&gt;” by &lt;a href="http://www.csd.uwo.ca/faculty/akd/akd.html"&gt;A.K. Dewdney&lt;/a&gt;.&amp;#160; Chapter twelve is called “The Demons of Cyclic Space” and I’ve been intrigued by the &lt;a href="http://en.wikipedia.org/wiki/Cellular_automaton"&gt;cellular automata&lt;/a&gt; it described.&amp;#160; Over the years I’ve re-implemented the simulation on a variety of systems and languages.&amp;#160; Four years ago I posted a video saved from a run and really haven’t touched it since then.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:12a97dc0-4d8a-4e4a-851c-fbbfb930ee4a" class="wlWriterEditableSmartContent"&gt;&lt;div id="6ee58f44-8801-49fc-bcb2-04ff512050f1" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=Ue3L29HeD7E" target="_new"&gt;&lt;img src="http://lh6.ggpht.com/-Hp3i3s172cU/Tu_Ucu1Md2I/AAAAAAAAAQA/mKl7xMeG6XI/videoe20ff1f92220%25255B19%25255D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('6ee58f44-8801-49fc-bcb2-04ff512050f1'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;448\&amp;quot; height=\&amp;quot;252\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/Ue3L29HeD7E?hl=en&amp;amp;hd=1\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/Ue3L29HeD7E?hl=en&amp;amp;hd=1\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;448\&amp;quot; height=\&amp;quot;252\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="width:448px;clear:both;font-size:.8em"&gt;The Demons of Cyclic Space&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;Last week the video received a comment about the video and a question about my implementation.&amp;#160; So I decided to brush off the code and see about cleaning it up for release.&amp;#160; It was written using MFC in a version of Visual Studio I don’t have anymore.&amp;#160; As it wouldn’t build with Visual Studio 2010 I decided to re-implement it in C++ and ATL.&amp;#160; The screen shot at the start is the first pass which shows the initial world state that is generated.&amp;#160; The next step is to add updating the simulation and display the new state.&amp;#160; Finally I want to update the program to output the simulation run as a video file.&lt;/p&gt;  &lt;p&gt;Once the program runs I will publish the repository and some information about the code and what’s happening behind the scenes.&amp;#160; Also in the plan is to implement the rest of the programs described in the book and post videos of the simulation runs.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5101251932239550972-1361717347596128780?l=www.leberhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.leberhall.com/feeds/1361717347596128780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.leberhall.com/2011/12/demons-of-cyclic-space-redux.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/1361717347596128780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/1361717347596128780'/><link rel='alternate' type='text/html' href='http://www.leberhall.com/2011/12/demons-of-cyclic-space-redux.html' title='The Demons of Cyclic Space Redux'/><author><name>Brendan Leber</name><uri>http://www.blogger.com/profile/07400779512672085014</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-tLLzIQPbpig/TsCugtiq2xI/AAAAAAAAAO4/zZwuuH495TU/s220/IMG_20111108_120800.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/-YUyX2_5Px5g/Tu_UceEF1gI/AAAAAAAAAP4/1O39PaRWcMs/s72-c/WinDemons_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5101251932239550972.post-4008236413370564183</id><published>2011-09-20T09:15:00.000-07:00</published><updated>2011-09-20T09:15:30.889-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dutch'/><category scheme='http://www.blogger.com/atom/ns#' term='languages'/><title type='text'>Goedemorgen! Ik ben Brendan.</title><content type='html'>&lt;p&gt;Goedemorgen!  Ik ben Brendan.&lt;/p&gt;

&lt;p&gt;I have decided to learn &lt;a href="http://en.wikipedia.org/wiki/Dutch_language"&gt;Dutch&lt;/a&gt;.  Normally I spend my time playing
with German as I&amp;rsquo;ve wanted to learn that language for a long time.
That&amp;rsquo;s been the problem with German.  I&amp;rsquo;ve only been playing at it and
not really giving it the attention it needs.  I have a trip to
&lt;a href="http://www.iamsterdam.com/en/visiting"&gt;Amsterdam&lt;/a&gt; coming in a few months and another one planned for the
2013 &lt;a href="http://www.marillionweekend.com/"&gt;Marillion Weekend&lt;/a&gt;.  The first trip is only a few months
away so I have to focus to meet my goal in time.&lt;/p&gt;

&lt;p&gt;Speaking of goals here is mine: I want to be able to talk with the
locals in their language.  I want to be able to get around the city by
reading signs and information on my own.  In a concrete term I would
like to achieve the B1 level of the &lt;a href="http://en.wikipedia.org/wiki/Common_European_Framework_of_Reference_for_Languages"&gt;Common European Framework of
References for Languages (CEFR)&lt;/a&gt;.  My goal is to achieve level
A2 by the end of 2011 and use the first months of 2012 to work up to
B2 before the trip.  I don&amp;rsquo;t have a date for the trip yet so I&amp;rsquo;m going
to set the end of March 2012 for my deadline.&lt;/p&gt;

&lt;p&gt;I have purchased a phrase book and book to learn the language.  For
the rest of September I&amp;rsquo;m going to create a list of tasks with
deadlines breaking down the steps I&amp;rsquo;ll need to accomplish to meet my
goals.  Additionally I&amp;rsquo;ll search for free materials such as word
lists, blogs, podcasts and videos to assist with learning the
language.  Sadly the &lt;a href="http://www.state.gov/m/fsi/"&gt;Foreign Service Institute&lt;/a&gt; doesn&amp;rsquo;t provide Dutch
as part of their free &lt;a href="http://fsi-language-courses.org/Content.php"&gt;language courses&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Starting in October I&amp;rsquo;ll start by learning basic vocabulary and
studying the book and finishing it in the month of October.  In
November I&amp;rsquo;ll add watching movies, reading blogs and listening to
podcasts in the Dutch.  Finally in December I&amp;rsquo;ll find natives who want
to learn English and practice with them via VOIP.&lt;/p&gt;

&lt;p&gt;That is enough of a plan for the moment.  Tot ziens!&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5101251932239550972-4008236413370564183?l=www.leberhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.leberhall.com/feeds/4008236413370564183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.leberhall.com/2011/09/goedemorgen-ik-ben-brendan.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/4008236413370564183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/4008236413370564183'/><link rel='alternate' type='text/html' href='http://www.leberhall.com/2011/09/goedemorgen-ik-ben-brendan.html' title='Goedemorgen! Ik ben Brendan.'/><author><name>Brendan Leber</name><uri>http://www.blogger.com/profile/07400779512672085014</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-tLLzIQPbpig/TsCugtiq2xI/AAAAAAAAAO4/zZwuuH495TU/s220/IMG_20111108_120800.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5101251932239550972.post-6278980847018921822</id><published>2011-08-31T11:57:00.000-07:00</published><updated>2011-08-31T12:22:31.924-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='walking'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><title type='text'>20110828 Alki Beach 5K Walk &amp; Run</title><content type='html'>&lt;table style="width:auto;"&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="https://picasaweb.google.com/lh/photo/aU32KeodaRAVuTO5vCTtww?feat=embedwebsite"&gt;&lt;img src="https://lh6.googleusercontent.com/-RwY9N5dj-10/Tl6DUiNtpwI/AAAAAAAAAMo/csL1GKMpgMA/s640/Foggy%252520Walk.jpg" height="436" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family:arial,sans-serif; font-size:11px; text-align:right"&gt;From &lt;a href="https://picasaweb.google.com/106344223467159804888/HikingWalking?authuser=0&amp;feat=embedwebsite"&gt;Hiking &amp;amp; Walking&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p&gt;A few weeks ago a friend asked me to join them in the &lt;a href="http://www.alkibeachrun.com/"&gt;Alki Beach 5K Run &amp;amp; Walk&lt;/a&gt; and I agreed to go.  Five kilometers isn't a difficult walk and I knew the route would be flat as it was along the shore of &lt;a href="http://www.seattletravel.com/alki-beach.html"&gt;Alki beach&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Due to spending the two previous days at &lt;a href="http://prime.paxsite.com/"&gt;PAX&lt;/a&gt; the alarm on Sunday morning went off way too early.  Yet I still made it up and over to meet my friends in time.  It was a very foggy morning and as you can see from the photo I didn't see the sun or a lot of water during the walk.  I finished the walk with an official time of 1:03:37.  I am going to work on lowering my time for future 5K walks, but am satisfied with my results.&lt;/p&gt;&lt;p&gt;This was the first walk on a new pair of &lt;a href="http://www.brooksrunning.com/Brooks-Beast-Best-Motion-Control-Running-Shoe/1100794E435.100,default,pd.html?start=2&amp;q=beast"&gt;Brooks Beast&lt;/a&gt; running shoes that I had bought the week before.  In the end the shoes were great as they didn't cause me any discomfort during the walk.  Having high arches I like that the Beast comes in wide versions.  I believe these are going to be a great pair of shoes for hiking on sidewalks and lighter trails.  I'm considering buying another pair to use in the gym.&lt;/p&gt;&lt;p&gt;Finally, I have to say I look damn good in that picture!  I don't feel like I've lost that much weight but looking at pictures like that compared to some a few years ago and I can see a positive difference.  I win!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5101251932239550972-6278980847018921822?l=www.leberhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.leberhall.com/feeds/6278980847018921822/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.leberhall.com/2011/08/20110828-alki-beach-5k-walk-run.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/6278980847018921822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/6278980847018921822'/><link rel='alternate' type='text/html' href='http://www.leberhall.com/2011/08/20110828-alki-beach-5k-walk-run.html' title='20110828 Alki Beach 5K Walk &amp; Run'/><author><name>Brendan Leber</name><uri>http://www.blogger.com/profile/07400779512672085014</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-tLLzIQPbpig/TsCugtiq2xI/AAAAAAAAAO4/zZwuuH495TU/s220/IMG_20111108_120800.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh6.googleusercontent.com/-RwY9N5dj-10/Tl6DUiNtpwI/AAAAAAAAAMo/csL1GKMpgMA/s72-c/Foggy%252520Walk.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5101251932239550972.post-1237503513234387214</id><published>2011-08-29T11:49:00.000-07:00</published><updated>2011-08-29T11:55:56.005-07:00</updated><title type='text'>Whoops!</title><content type='html'>&lt;p&gt;I've kept hiking and walking on a regular basis.  The problem is I haven't been good and keeping up on blogging about it.  Sorry folks.&lt;/p&gt;&lt;p&gt;This weekend while participating in the Alki Beach 5K I thought about the issues I have with gear while hiking and possibly blogging about how I find solutions and work arounds.  For example, where can you buy base layer clothing to fit my larger frame.  I figure that information could be useful to other big hikers.  So I will start to include that on my posts here along with the rest of my life.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5101251932239550972-1237503513234387214?l=www.leberhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.leberhall.com/feeds/1237503513234387214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.leberhall.com/2011/08/whoops.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/1237503513234387214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/1237503513234387214'/><link rel='alternate' type='text/html' href='http://www.leberhall.com/2011/08/whoops.html' title='Whoops!'/><author><name>Brendan Leber</name><uri>http://www.blogger.com/profile/07400779512672085014</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-tLLzIQPbpig/TsCugtiq2xI/AAAAAAAAAO4/zZwuuH495TU/s220/IMG_20111108_120800.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5101251932239550972.post-306503281013272679</id><published>2011-08-11T21:23:00.000-07:00</published><updated>2011-08-11T22:20:47.109-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='photos'/><category scheme='http://www.blogger.com/atom/ns#' term='hiking'/><title type='text'>20110811 - Lake To Lake Trail (Partial)</title><content type='html'>&lt;p&gt;Before I get too far I want to spend a moment to define a couple of words.  Those words are "hiking" and "walking," which are similar, but to me mean the following:&lt;/p&gt;&lt;dl&gt;&lt;dt&gt;walking&lt;/dt&gt;&lt;dd&gt;Moving on foot with the goal of going from one place to another.  Walking mostly involves paved sidewalks and roads.  For example, last night I walked from the restaurant to R.E.I. and back.&lt;/dd&gt; &lt;dt&gt;hiking&lt;/dt&gt;&lt;dd&gt;Moving on foot with the goal of viewing the scenery and enjoying nature. Hiking mostly involves trails whether they are gravel, bark dust or bare earth.  For example, tonight I hiked around Mercer Slough.&lt;/dd&gt;&lt;/dl&gt;&lt;p&gt;With that out of the way let's get on to tonight's adventure.  I had an appointment in &lt;a href="http://www.ci.bellevue.wa.us/"&gt;Bellevue&lt;/a&gt; tonight after work and instead of driving to &lt;a href="http://www.seattle.gov/"&gt;Seattle&lt;/a&gt; and back I decided to spend the time exploring the &lt;a href="http://www.myparksandrecreation.com/ParksTrails/Details.aspx?pid=468"&gt;Lake to Lake Trail&lt;/a&gt;, which is close to my office.  So I grabbed my camera, phone and headed out to find the trail.  Finding the trailhead wasn't difficult as it is located at the &lt;a href="http://www.bellevuewa.gov/winters_house.htm"&gt;Winters House&lt;/a&gt;.  The trail wanders through the &lt;a href="http://www.bellevuewa.gov/mercer_slough.htm"&gt;Mercer Slough&lt;/a&gt;.  Not far down the trail I found my "dream home," an old joke between me and my first wife, and had to snap a picture.&lt;/p&gt;&lt;table style="width:auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="https://picasaweb.google.com/lh/photo/q1B29h5I54B2Aa86D1eIkQ?feat=embedwebsite"&gt;&lt;img src="https://lh5.googleusercontent.com/-MVkkqWgDfbg/TkS07gvSMMI/AAAAAAAAAHU/1Jiao8py_dc/s400/My%252520Dream%252520Home%252520-%252520Mercer%252520Slough%25252C%252520Bellevue%25252C%252520Washington.jpg" height="305" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;I was making good progress thanks to the well maintained trails when I spied a pedestrian bridge ahead of me.  Picture time again!&lt;/p&gt; &lt;table style="width:auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="https://picasaweb.google.com/lh/photo/sV0ofZm89s2mO4zPnLmPUQ?feat=embedwebsite"&gt;&lt;img src="https://lh4.googleusercontent.com/-x_jILycl8cg/TkS079RknaI/AAAAAAAAAHY/ut6O7U9Jd5I/s400/Pedestrian%252520Bridge%252520-%252520Mercer%252520Slough%25252C%252520Bellevue%25252C%252520Washington.jpg" height="305" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;From the bridge I took two pictures of downtown Bellevue.  The first was a regular shot.  I used the optical zoom on my camera on the second time to give a better idea of the skyline from the bridge.&lt;/p&gt;&lt;table style="width:auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="https://picasaweb.google.com/lh/photo/a-7P1Xy2k7XD1rUqClVKvA?feat=embedwebsite"&gt;&lt;img src="https://lh4.googleusercontent.com/-l_e4XZ-r0ls/TkS06sMBd0I/AAAAAAAAAHE/lPOaCWbpeXk/s400/Downtown%252520Bellevue%252520%252528Distance%252529%252520-%252520Mercer%252520Slough%25252C%252520Bellevue%25252C%252520Washington.jpg" height="305" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table style="width:auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="https://picasaweb.google.com/lh/photo/5wLCo3mUmQDHxDIqKTuoEg?feat=embedwebsite"&gt;&lt;img src="https://lh4.googleusercontent.com/-81xG5I7Kw8s/TkS07TeSRoI/AAAAAAAAAHQ/m8yXUj1f1Pk/s400/Downtown%252520Bellevue%252520%252528Zoom%252529%252520-%252520Mercer%252520Slough%25252C%252520Bellevue%25252C%252520Washington.jpg" height="305" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;I was making good time but not knowing exactly how long it would take me I started to focus more on making progress than looking at the bushes around me.  It was a nice easy hike because the trails are well maintained in the slough.  The only hitch was when I came upon a split in the trail with no sign indicating which way I wanted to go.  I chose the sinister trail (Was that a surprise?) and continued along my merry way.&lt;/p&gt;&lt;table style="width:auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="https://picasaweb.google.com/lh/photo/GLi0YIK_3khwo5rOeMz29A?feat=embedwebsite"&gt;&lt;img src="https://lh6.googleusercontent.com/-LsbpYaNarZ8/TkS08Pi5GLI/AAAAAAAAAHc/5kzqqABo0WI/s400/Which%252520Way%252520-%252520Mercer%252520Slough%25252C%252520Bellevue%25252C%252520Washington.jpg" height="305" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;In the end I think both ways would have gotten me to my goal.  In the end I made it through and back to the main road.  I continued around the edge of the slough and made it back to the &lt;a href="http://www.bellefieldofficepark.com/"&gt;Bellefield Office Park&lt;/a&gt; with enough time to have some water and rest before my appointment.  On the way to my office I came across some painted stones.  They could be art or some sort of therapy.  Either way I took a picture for you.&lt;/p&gt;&lt;table style="width:auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="https://picasaweb.google.com/lh/photo/rIefx9tiWx9W7t7ZdqzTrA?feat=embedwebsite"&gt;&lt;img src="https://lh5.googleusercontent.com/-drJzhxJbmxY/TkS07MO4vmI/AAAAAAAAAHM/DmRkd1c9Ofk/s400/Art%252520or%252520Therapy%252520-%252520Bellefield%252520Office%252520Park%25252C%252520Belleview%252520Washington.jpg" height="305" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;I'll have to find a way to track some statistics about my hikes but for now you just get a lot of pictures and my short descriptions.  It was a good way to spend 90 minutes and I'll have to hike the slough again because there are many branches and other trails I didn't take.&lt;/p&gt;&lt;p&gt;Finally, I'll leave you with one last picture.  Working in a &lt;a href="http://dictionary.reference.com/browse/slough"&gt;slough&lt;/a&gt; has some disadvantages in a rainy area.  The parking lots sink into the soft soil and flood often.  In fact the parking lot at my office has been underwater most of the year.  I noticed today that they've mounted signs warning about the deep water.  After the floods have receeded and the aspalt is dry.  As a note all the asphalt you see was completely submerged not long ago.  I guess the signs will help next spring when the snow melts again.&lt;/p&gt;&lt;table style="width:auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="https://picasaweb.google.com/lh/photo/o1oDPp_0S1qZ4pYWPE2KbA?feat=embedwebsite"&gt;&lt;img src="https://lh4.googleusercontent.com/-YWimRwFKR7I/TkS064Pkx2I/AAAAAAAAAHI/v_N-JMQBvk8/s400/Deep%252520Water%252520-%252520Bellefield%252520Office%252520Park%25252C%252520Bellevue%25252C%252520Washington.jpg" height="305" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;The next hike I've planned is on the &lt;a href="http://www.irongoat.org/"&gt;Iron Goat Trail&lt;/a&gt; this Saturday.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5101251932239550972-306503281013272679?l=www.leberhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.leberhall.com/feeds/306503281013272679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.leberhall.com/2011/08/20110811-lake-to-lake-trail-partial.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/306503281013272679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/306503281013272679'/><link rel='alternate' type='text/html' href='http://www.leberhall.com/2011/08/20110811-lake-to-lake-trail-partial.html' title='20110811 - Lake To Lake Trail (Partial)'/><author><name>Brendan Leber</name><uri>http://www.blogger.com/profile/07400779512672085014</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-tLLzIQPbpig/TsCugtiq2xI/AAAAAAAAAO4/zZwuuH495TU/s220/IMG_20111108_120800.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh5.googleusercontent.com/-MVkkqWgDfbg/TkS07gvSMMI/AAAAAAAAAHU/1Jiao8py_dc/s72-c/My%252520Dream%252520Home%252520-%252520Mercer%252520Slough%25252C%252520Bellevue%25252C%252520Washington.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5101251932239550972.post-138369984096920623</id><published>2011-08-10T10:28:00.000-07:00</published><updated>2011-08-10T11:11:53.997-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adventures'/><category scheme='http://www.blogger.com/atom/ns#' term='fitness'/><title type='text'>Plans at Dinner</title><content type='html'>&lt;p&gt;Just had a very nice evening with my friends Jenn and Lacy talking
about hiking, backpacking, camping and life in general.  I'm very
excited about our plans for adventure.  The plan was for me to talk to
them about equipment and preparation for extended backpacking trips.
The problem was it has been so long since I went on more than a day
hike I'm not sure what is the current state of backpacking equipment.
Instead we talked about camping and hiking trips we would like to do.&lt;/p&gt;&lt;p&gt;Part of that is a plan to hike the &lt;a href="http://www.irongoat.org/"&gt;Iron Goat Trail&lt;/a&gt;.  I don't
know if they will be able to join me but I'm going to hike it this
weekend.  Maybe twice as my brother also wants to hike the trail but
he's booked on Saturday.  No matter what else happens I'm going to get
out on two hikes this weekend.  I can't always get out both days but
I'm going to take advantage of them when I can.&lt;/p&gt;&lt;p&gt;I am also going to try some urban hikes in the evenings when I don't
have other plans.  For example last night I didn't drive.  I walked
from home to the library, to dinner, to a coffee shop and then back
home.  I think it was about 4km and a nice stretch of the legs.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5101251932239550972-138369984096920623?l=www.leberhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.leberhall.com/feeds/138369984096920623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.leberhall.com/2011/08/plans-at-dinner.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/138369984096920623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/138369984096920623'/><link rel='alternate' type='text/html' href='http://www.leberhall.com/2011/08/plans-at-dinner.html' title='Plans at Dinner'/><author><name>Brendan Leber</name><uri>http://www.blogger.com/profile/07400779512672085014</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-tLLzIQPbpig/TsCugtiq2xI/AAAAAAAAAO4/zZwuuH495TU/s220/IMG_20111108_120800.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5101251932239550972.post-4096092068769312886</id><published>2011-08-02T13:07:00.000-07:00</published><updated>2011-08-02T13:07:43.040-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='beer'/><category scheme='http://www.blogger.com/atom/ns#' term='walking'/><title type='text'>Beer on Bainbridge</title><content type='html'>&lt;p&gt;My brother has a good write up of our adventure last weekend, so I'll let him tell the tale.&lt;/p&gt;&lt;p&gt;&lt;a href="http://flatlanderinseattle.blogspot.com/2011/08/beer-on-bainbridge_3950.html?spref=bl"&gt;Flatlander In Seattle: Beer on Bainbridge&lt;/a&gt;: &amp;ldquo;Last Saturday my brother and I took the ferry from downtown Seattle over to Bainbridge Island...&amp;rdquo;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5101251932239550972-4096092068769312886?l=www.leberhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://flatlanderinseattle.blogspot.com/2011/08/beer-on-bainbridge_3950.html?spref=bl' title='Beer on Bainbridge'/><link rel='replies' type='application/atom+xml' href='http://www.leberhall.com/feeds/4096092068769312886/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.leberhall.com/2011/08/beer-on-bainbridge.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/4096092068769312886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/4096092068769312886'/><link rel='alternate' type='text/html' href='http://www.leberhall.com/2011/08/beer-on-bainbridge.html' title='Beer on Bainbridge'/><author><name>Brendan Leber</name><uri>http://www.blogger.com/profile/07400779512672085014</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-tLLzIQPbpig/TsCugtiq2xI/AAAAAAAAAO4/zZwuuH495TU/s220/IMG_20111108_120800.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5101251932239550972.post-1915207831285412176</id><published>2011-07-28T14:09:00.000-07:00</published><updated>2011-07-28T14:29:38.583-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='navel gazing'/><category scheme='http://www.blogger.com/atom/ns#' term='walking'/><category scheme='http://www.blogger.com/atom/ns#' term='fitness'/><title type='text'>Walking</title><content type='html'>&lt;p&gt;Last night I walked from my home to &lt;a href="http://www.central-cinema.com/"&gt;Central Cinema&lt;/a&gt; and back.  Normally I would have driven but parking there has been a challenge in the past and it was a nice night.  I had a few twinges during the walk but no major pain and no lasting effect this morning. I wore different shoes than I normally do for walking and I'm going to take that as a sign that the shoes I have been wearing aren't good for my feet.  Arch supports and thick soles do not work for me.  The closer I can get to no shoe at all the less my ankles hurt.&lt;/p&gt;
&lt;p&gt;According to the &lt;a href="http://www.gmap-pedometer.com/?r=4678462"&gt;route&lt;/a&gt; I entered in &lt;a href="http://www.gmap-pedometer.com/"&gt;Gmaps Pedometer&lt;/a&gt; I walked 3.7649 miles and burned 469 calories.  Not a huge workout but it is a start and a step in the right direction.  I have learned that keeping track of numbers such as distance traveled and calories burned helps to keep me motivated.  Motivated I need to stay because I &lt;b&gt;know&lt;/b&gt; I will feel better if I am more active.&lt;/p&gt;
&lt;p&gt;Next time I shouldn't have dinner, three pints of beer, dessert and popcorn during my walk but I did go to a double feature of &lt;a href="http://www.imdb.com/title/tt0083791/"&gt;The Dark Crystal (1982)&lt;/a&gt; and &lt;a href="http://www.imdb.com/title/tt0091369/"&gt;Labyrinth (1886)&lt;/a&gt;.  :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5101251932239550972-1915207831285412176?l=www.leberhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.leberhall.com/feeds/1915207831285412176/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.leberhall.com/2011/07/walking.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/1915207831285412176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/1915207831285412176'/><link rel='alternate' type='text/html' href='http://www.leberhall.com/2011/07/walking.html' title='Walking'/><author><name>Brendan Leber</name><uri>http://www.blogger.com/profile/07400779512672085014</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-tLLzIQPbpig/TsCugtiq2xI/AAAAAAAAAO4/zZwuuH495TU/s220/IMG_20111108_120800.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5101251932239550972.post-9175964878025667685</id><published>2011-07-07T14:11:00.001-07:00</published><updated>2011-07-07T14:11:26.028-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adventures'/><category scheme='http://www.blogger.com/atom/ns#' term='photos'/><category scheme='http://www.blogger.com/atom/ns#' term='trains'/><title type='text'>Full Steam Ahead!</title><content type='html'>&lt;p&gt;On July 3rd my &lt;a title="A Seamstress&amp;#39; Notebook" href="http://seamstressnotebook.blogspot.com/"&gt;girlfriend&lt;/a&gt; and I drove down to &lt;a href="http://www.portlandonline.com/"&gt;Portland&lt;/a&gt; to ride on a train pulled by the &lt;a href="http://4449.com/"&gt;Southern Pacific #4449&lt;/a&gt;, a 4-8-4 steam locomotive built in 1941.&amp;#160; The trip was a round trip along the Columbia River Gorge out to &lt;a href="http://en.wikipedia.org/wiki/Wishram,_Washington"&gt;Wishram Washington&lt;/a&gt; and back.&amp;#160; The excursion was wonderfully relaxing and while the day started out cloudy the sun broke through and we were treated to beautiful views if the river as we made our way along.&amp;#160; In Wishram we were served a BBQ lunch and had a chance to take a few pictures before boarding the train for a ride back to Portland.&lt;/p&gt;  &lt;p&gt;It was a nice relaxing trip and reminded me again why I enjoy travel by train so much.&amp;#160; Enjoy the pictures I took on the trip:&lt;/p&gt;  &lt;table style="width: 194px"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td style="background: url(https://picasaweb.google.com/s/c/transparent_album_background.gif) no-repeat left 50%; height: 194px" align="center"&gt;&lt;a href="https://picasaweb.google.com/106344223467159804888/SP4449July2011?authuser=0&amp;amp;feat=embedwebsite"&gt;&lt;img style="margin: 1px 0px 0px 4px" src="https://lh3.googleusercontent.com/-aOQCIwtupcs/ThYSiFRlrgE/AAAAAAAAAGE/nRWvqug04uE/s160-c/SP4449July2011.jpg" width="160" height="160" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="text-align: center; font-family: arial,sans-serif; font-size: 11px"&gt;&lt;a style="color: #4d4d4d; font-weight: bold; text-decoration: none" href="https://picasaweb.google.com/106344223467159804888/SP4449July2011?authuser=0&amp;amp;feat=embedwebsite"&gt;SP #4449 (July 2011)&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5101251932239550972-9175964878025667685?l=www.leberhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.leberhall.com/feeds/9175964878025667685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.leberhall.com/2011/07/full-steam-ahead.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/9175964878025667685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/9175964878025667685'/><link rel='alternate' type='text/html' href='http://www.leberhall.com/2011/07/full-steam-ahead.html' title='Full Steam Ahead!'/><author><name>Brendan Leber</name><uri>http://www.blogger.com/profile/07400779512672085014</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-tLLzIQPbpig/TsCugtiq2xI/AAAAAAAAAO4/zZwuuH495TU/s220/IMG_20111108_120800.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh3.googleusercontent.com/-aOQCIwtupcs/ThYSiFRlrgE/AAAAAAAAAGE/nRWvqug04uE/s72-c/SP4449July2011.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5101251932239550972.post-1927879718326734439</id><published>2011-04-04T12:37:00.000-07:00</published><updated>2011-04-04T13:17:38.822-07:00</updated><title type='text'>Returning From Hiatus</title><content type='html'>&lt;p&gt;With all of my friends moving away from &lt;a href="http://www.livejournal.com/"&gt;LiveJournal&lt;/a&gt; and other changes in my life I’m going to be resurrecting this blog for my personal thoughts, notes and projects.&amp;#160; As such I’ll post about things like programming, baking, music, movies and books.&amp;#160; I’m probably speaking into the wind here but whatever.&amp;#160; Some people have found past posts of mine helpful and maybe they will again.&lt;/p&gt;  &lt;p&gt;I have three blogs used for different purposes.&amp;#160; They are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.leberhall.com/"&gt;Leber Hall&lt;/a&gt; – This very blog you are reading now. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://n0bml.blogspot.com"&gt;N0BML&lt;/a&gt; – Dedicated to my amateur radio, emergency communications and electronics projects. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://seattlewhistclub.blogspot.com/"&gt;Seattle Whist Club&lt;/a&gt; – Dedicated to teaching the game of &lt;a href="http://www.pagat.com/whist/whist.html"&gt;Whist&lt;/a&gt; and organizing players in the Seattle area. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;See you around…&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5101251932239550972-1927879718326734439?l=www.leberhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.leberhall.com/feeds/1927879718326734439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.leberhall.com/2011/04/returning-from-hiatus.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/1927879718326734439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/1927879718326734439'/><link rel='alternate' type='text/html' href='http://www.leberhall.com/2011/04/returning-from-hiatus.html' title='Returning From Hiatus'/><author><name>Brendan Leber</name><uri>http://www.blogger.com/profile/07400779512672085014</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-tLLzIQPbpig/TsCugtiq2xI/AAAAAAAAAO4/zZwuuH495TU/s220/IMG_20111108_120800.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5101251932239550972.post-7333444365287528672</id><published>2010-02-28T10:23:00.000-08:00</published><updated>2010-02-28T10:23:32.249-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IIS'/><category scheme='http://www.blogger.com/atom/ns#' term='Mercurial'/><title type='text'>History, Saved</title><content type='html'>&lt;p&gt;For far too long I&amp;rsquo;ve worked on personal projects without using any source control management tools. &amp;nbsp;As &lt;a href="http://en.wikipedia.org/wiki/George_Santayana"&gt;George Santayana&lt;/a&gt; said, &amp;ldquo;Those who cannot remember the past are condemned to repeat it,&amp;rdquo; or in my case rewrite it as I can&amp;rsquo;t find some code I&amp;rsquo;ve written before. &amp;nbsp;I know that&amp;rsquo;s not a good practice so I have fixed it.&lt;/p&gt;
&lt;p&gt;This morning I setup &lt;a href="http://www.iis.net/"&gt;IIS&lt;/a&gt; and &lt;a href="http://mercurial.selenic.com/"&gt;Mercurial&lt;/a&gt; on my local server. &amp;nbsp;While there are still a few kinks to work out with the setup, such as Chrome and IE warnings about self signed certificates, I&amp;rsquo;m able to push, pull and clone repositories. &amp;nbsp;For now I&amp;rsquo;m just hosting these on my local network. &amp;nbsp;I do plan on releasing some of my projects with an open source license but I&amp;rsquo;ll post those on &lt;a href="http://bitbucket.org/"&gt;bitbucket.org&lt;/a&gt;. &amp;nbsp;Long gone are the days when I spend time trying to host public facing websites from my network.&lt;/p&gt;
&lt;p&gt;Next I&amp;rsquo;m going to create a &lt;a href="http://en.wikipedia.org/wiki/Microsoft_Symbol_Server"&gt;symbol server&lt;/a&gt;. &amp;nbsp;I&amp;rsquo;ve found them to be invaluable when debugging crash reports. &amp;nbsp;As I&amp;rsquo;ve mentioned before.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5101251932239550972-7333444365287528672?l=www.leberhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.leberhall.com/feeds/7333444365287528672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.leberhall.com/2010/02/history-saved.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/7333444365287528672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/7333444365287528672'/><link rel='alternate' type='text/html' href='http://www.leberhall.com/2010/02/history-saved.html' title='History, Saved'/><author><name>Brendan Leber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_zeTPcjyslbI/SZBlb-K2STI/AAAAAAAAAME/_xEkG2zYm-Y/S220/lj_mirror_mirror.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5101251932239550972.post-1539516932805103231</id><published>2010-01-14T14:59:00.000-08:00</published><updated>2010-01-14T14:59:09.676-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>It Runs!  It Crashes!  It's Fixed!</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://picasaweb.google.com/brendan.leber/LeberHallSudoku?feat=embedwebsite" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://lh6.ggpht.com/_zeTPcjyslbI/S09Hag-8YGI/AAAAAAAAASA/HQhMHFz3C6A/s320/lhs-main.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
To the left is a screen shot of the&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Sudoku"&gt;Sudoku&lt;/a&gt;&amp;nbsp;application that is developed in the book&amp;nbsp;&lt;a href="http://pragprog.com/titles/eband2/hello-android"&gt;Hello, Android&lt;/a&gt;. &amp;nbsp;You can click on the screen shot to see more that I captured. &amp;nbsp;Unlike other screen shots I've posted before these are from my T-Mobile myTouch and not the Android emulator. &amp;nbsp;Aren't they pretty?&lt;br /&gt;
&lt;br /&gt;
At the end of chapter 4 I should have had a playable sudoku game. &amp;nbsp;What I had was a "nifty" error screen as my app crashed. &amp;nbsp;It turns out that I missed a few characters when typing in the long string that defines the starting position for a game. &amp;nbsp;It was an easy mistake and should have been easy to find. &amp;nbsp;I guess my inexperience using&amp;nbsp;&lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt;&amp;nbsp;slowed down finding the problem as I wasn't able to walk the stack backward from the crash to find the bug. &amp;nbsp;On the whole though getting the Android SDK and development environment setup and running was straightforward.&lt;br /&gt;
&lt;br /&gt;
While I've made a few minor changes, such as the app name, I have followed along with the book. &amp;nbsp;Though I have a list of things I want to implement for my own version. &amp;nbsp;Some of them are, in no particular order:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Enter puzzles to be solved.&lt;/li&gt;
&lt;li&gt;Load and save puzzles to local database.&lt;/li&gt;
&lt;li&gt;Protect the original numbers from modification.&lt;/li&gt;
&lt;li&gt;Highlight the original numbers when drawing the game board.&lt;/li&gt;
&lt;li&gt;Allow the user to change colors and fonts used to display the game.&lt;/li&gt;
&lt;li&gt;Check the board and alert the user when they've solved the game.&lt;/li&gt;
&lt;/ul&gt;
That will all have to wait until I finish the book though. &amp;nbsp;Some of these features might be covered in later chapters.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5101251932239550972-1539516932805103231?l=www.leberhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.leberhall.com/feeds/1539516932805103231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.leberhall.com/2010/01/it-runs-it-crashes-its-fixed.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/1539516932805103231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/1539516932805103231'/><link rel='alternate' type='text/html' href='http://www.leberhall.com/2010/01/it-runs-it-crashes-its-fixed.html' title='It Runs!  It Crashes!  It&apos;s Fixed!'/><author><name>Brendan Leber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_zeTPcjyslbI/SZBlb-K2STI/AAAAAAAAAME/_xEkG2zYm-Y/S220/lj_mirror_mirror.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_zeTPcjyslbI/S09Hag-8YGI/AAAAAAAAASA/HQhMHFz3C6A/s72-c/lhs-main.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5101251932239550972.post-6821038752421991121</id><published>2010-01-12T13:11:00.000-08:00</published><updated>2010-01-12T13:11:35.386-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>New Year, New Direction</title><content type='html'>&lt;p&gt;It's been a while since I've updated this blog.  Priorities at work changed and I haven't been focused on crash dump analysis.  Also I spread myself a bit thin with all my activities and hobbies.  Work and life has slowed down so now I have some time to dedicate to my coding activities.  So here we go again...&lt;/p&gt;

&lt;p&gt;I have a shiny new &lt;a href="http://www.t-mobile.com/"&gt;T-Mobile&lt;/a&gt; &lt;a href="http://www.t-mobilemytouch.com/"&gt;myTouch&lt;/a&gt;.  So I'm going to spend some time learning how to write apps for the &lt;a href="http://www.android.com/"&gt;Android&lt;/a&gt; platform.  To start I'm working through &lt;a href="http://www.pragprog.com/titles/eband2/hello-android"&gt;Hello, Android&lt;/a&gt; by Ed Burnette.  Expect some updates about my progress soon.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5101251932239550972-6821038752421991121?l=www.leberhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.leberhall.com/feeds/6821038752421991121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.leberhall.com/2010/01/new-year-new-direction.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/6821038752421991121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/6821038752421991121'/><link rel='alternate' type='text/html' href='http://www.leberhall.com/2010/01/new-year-new-direction.html' title='New Year, New Direction'/><author><name>Brendan Leber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_zeTPcjyslbI/SZBlb-K2STI/AAAAAAAAAME/_xEkG2zYm-Y/S220/lj_mirror_mirror.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5101251932239550972.post-4419024428826871273</id><published>2009-07-31T08:32:00.000-07:00</published><updated>2009-07-31T09:42:09.003-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='P/Invoke'/><category scheme='http://www.blogger.com/atom/ns#' term='COM'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>DllRegisterServer w/o regsvr32</title><content type='html'>&lt;p&gt;I have a need to register some &lt;a href="http://www.microsoft.com/com/default.mspx"&gt;COM&lt;/a&gt; DLLs from a &lt;a href="http://msdn.microsoft.com/en-us/vcsharp/default.aspx"&gt;C#&lt;/a&gt; program.  Every example I found on the web used &lt;a href="http://technet.microsoft.com/en-us/library/bb490985.aspx"&gt;regsvr32&lt;/a&gt; to perform the registration.  This didn't make much sense to me as all &lt;em&gt;regsvr32&lt;/em&gt; does is call &lt;code&gt;DllRegisterServer()&lt;/code&gt; exported in the DLL.  So I worked out how to do the same from &lt;code&gt;C#&lt;/code&gt; using &lt;a href="http://msdn.microsoft.com/en-us/library/aa446536.aspx"&gt;P/Inovke&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/system.runtime.interopservices(VS.71).aspx"&gt;System.Runtime.InteropServices&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;And here it is for you to use.  This is a small sample but it compiles and registers the DLLs that are listed on the command line.  Be sure to compile with the &lt;code&gt;/unsafe&lt;/code&gt; switch.  Also, I have more error checking and reporting in my application which I removed from this sample.  Enjoy!&lt;/p&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
 font-size: small;
 color: black;
 font-family: Consolas, "Courier New", Courier, Monospace;
 background-color: #ffffff;
 /*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
 background-color: #f4f4f4;
 width: 100%;
 margin: 0em;
}

.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Runtime.InteropServices;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; RegisterDll&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;{&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="kwrd"&gt;unsafe&lt;/span&gt; &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;delegate&lt;/span&gt; UInt32 DllRegisterServer();&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; file &lt;span class="kwrd"&gt;in&lt;/span&gt; args)&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;            Console.WriteLine(&lt;span class="str"&gt;"Registering {0}"&lt;/span&gt;, file);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;            RegisterCOMDll(file);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        Console.WriteLine(&lt;span class="str"&gt;"Done!"&lt;/span&gt;);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; RegisterCOMDll(&lt;span class="kwrd"&gt;string&lt;/span&gt; file)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;        IntPtr library = LoadLibraryEx(file, IntPtr.Zero, 0);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (library == IntPtr.Zero)&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;        {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; msg = &lt;span class="str"&gt;"Unable to load '"&lt;/span&gt; + file + &lt;span class="str"&gt;"' error is "&lt;/span&gt; + Marshal.GetLastWin32Error().ToString();&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;            &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; ApplicationException(msg);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;        IntPtr proc = GetProcAddress(library, &lt;span class="str"&gt;"DllRegisterServer"&lt;/span&gt;);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (proc == IntPtr.Zero)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;        {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;            &lt;span class="kwrd"&gt;int&lt;/span&gt; err = Marshal.GetLastWin32Error();&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; msg = &lt;span class="str"&gt;"Unable to load 'DllRegisterServer' from '"&lt;/span&gt; + file + &lt;span class="str"&gt;"' error is "&lt;/span&gt; + err.ToString();&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;            &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; ApplicationException(msg);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;        DllRegisterServer drs = (DllRegisterServer)Marshal.GetDelegateForFunctionPointer(proc, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(DllRegisterServer));&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;        UInt32 result = drs();&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (result != 0)&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;        {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; msg = &lt;span class="str"&gt;"Error "&lt;/span&gt; + result.ToString() + &lt;span class="str"&gt;" returned from DllRegisterServer in "&lt;/span&gt; + file;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;            &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; ApplicationException(msg);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;        FreeLibrary(library);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;    [Flags]&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;enum&lt;/span&gt; LoadLibraryFlags : &lt;span class="kwrd"&gt;uint&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;    {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;        DONT_RESOLVE_DLL_REFERENCES = 0x00000001,&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  51:  &lt;/span&gt;        LOAD_IGNORE_CODE_AUTHZ_LEVEL = 0x00000010,&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  52:  &lt;/span&gt;        LOAD_LIBRARY_AS_DATAFILE = 0x00000002,&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  53:  &lt;/span&gt;        LOAD_WITH_ALTERED_SEARCH_PATH = 0x00000008,&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  54:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  55:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  56:  &lt;/span&gt;    [DllImport(&lt;span class="str"&gt;"kernel32.dll"&lt;/span&gt;, EntryPoint = &lt;span class="str"&gt;"FreeLibrary"&lt;/span&gt;, SetLastError = &lt;span class="kwrd"&gt;true&lt;/span&gt;)]&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  57:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;extern&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; FreeLibrary(IntPtr hModule);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  58:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  59:  &lt;/span&gt;    [DllImport(&lt;span class="str"&gt;"kernel32.dll"&lt;/span&gt;, EntryPoint = &lt;span class="str"&gt;"LoadLibraryExW"&lt;/span&gt;, CharSet = CharSet.Unicode, SetLastError = &lt;span class="kwrd"&gt;true&lt;/span&gt;)]&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  60:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;extern&lt;/span&gt; IntPtr LoadLibraryEx(&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  61:  &lt;/span&gt;        [MarshalAs(UnmanagedType.LPWStr)] &lt;span class="kwrd"&gt;string&lt;/span&gt; lpFileName,&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  62:  &lt;/span&gt;        IntPtr hFile,&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  63:  &lt;/span&gt;        [MarshalAs(UnmanagedType.U4)] LoadLibraryFlags dwFlags);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  64:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  65:  &lt;/span&gt;    [DllImport(&lt;span class="str"&gt;"kernel32.dll"&lt;/span&gt;, CharSet = CharSet.Ansi, EntryPoint = &lt;span class="str"&gt;"GetProcAddress"&lt;/span&gt;, ExactSpelling = &lt;span class="kwrd"&gt;true&lt;/span&gt;, SetLastError = &lt;span class="kwrd"&gt;true&lt;/span&gt;)]&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  66:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;extern&lt;/span&gt; IntPtr GetProcAddress(IntPtr hModule, &lt;span class="kwrd"&gt;string&lt;/span&gt; lpProcName);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  67:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5101251932239550972-4419024428826871273?l=www.leberhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.leberhall.com/feeds/4419024428826871273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.leberhall.com/2009/07/i-have-need-to-register-some-com-dlls.html#comment-form' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/4419024428826871273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/4419024428826871273'/><link rel='alternate' type='text/html' href='http://www.leberhall.com/2009/07/i-have-need-to-register-some-com-dlls.html' title='DllRegisterServer w/o regsvr32'/><author><name>Brendan Leber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_zeTPcjyslbI/SZBlb-K2STI/AAAAAAAAAME/_xEkG2zYm-Y/S220/lj_mirror_mirror.jpg'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5101251932239550972.post-4210759298909221679</id><published>2009-03-26T23:00:00.000-07:00</published><updated>2009-03-26T23:07:27.532-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='KioskCrash'/><category scheme='http://www.blogger.com/atom/ns#' term='debugging'/><category scheme='http://www.blogger.com/atom/ns#' term='windbg'/><title type='text'>KioskCrash: It goes *BOOM*!</title><content type='html'>&lt;p&gt;Today I'm going to cover what happens when the &lt;a href="http://hollyking.googlecode.com/files/KioskCrash-1.0.0.zip"&gt;KioskCrash&lt;/a&gt;  application crashes.  We'll cover what information the operating system provides to help diagnose the crash and what we can use to help diagnose the crash before we add any debugging support to our application.  So without further ado...&lt;/p&gt;

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_zeTPcjyslbI/Scxgt7QhUFI/AAAAAAAAAN4/GsczruBGYvQ/s1600-h/kc1.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 126px;" src="http://3.bp.blogspot.com/_zeTPcjyslbI/Scxgt7QhUFI/AAAAAAAAAN4/GsczruBGYvQ/s200/kc1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5317731602135076946" /&gt;&lt;/a&gt; When &lt;em&gt;KioskCrash&lt;/em&gt; crashes &lt;a href="http://www.microsoft.com/windows/windows-xp/"&gt;Windows XP&lt;/a&gt; will display a window similar to this.  There really isn't much information here, just a button to automatically send an error report to &lt;a href="http://www.microsoft.com/"&gt;Microsoft&lt;/a&gt; and another button to skip sending the report.  If you click the "Send Error Report" button the operating system will bundle up a bit of information about the crash and send it off to Microsoft for diagnosis.  This window also includes a link to see what data the error report contains.&lt;/p&gt;

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_zeTPcjyslbI/ScxidAdsTVI/AAAAAAAAAOA/2buO2efazKI/s1600-h/kc2.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 130px;" src="http://3.bp.blogspot.com/_zeTPcjyslbI/ScxidAdsTVI/AAAAAAAAAOA/2buO2efazKI/s200/kc2.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5317733510497979730" /&gt;&lt;/a&gt; This is an example of what you would see with if you clicked the link to see what data is contained in the error report.  The first section is the only interesting thing displayed in this window.  It contains the application name &amp;amp; version, the module name &amp;amp; version and the location where the crash occurred in our image.  This is why you should always add a version information resource in executables you create.  Since &lt;em&gt;KioskCrash&lt;/em&gt; is a simple application I only filled in basic information.  In a large application this information would be invaluable for locating the crash.  The location of the crash, called "Offset" in this window, can be used to get an idea where to find the problem in your code.  I will go into more detail about how to do that in a later post.  (Probably the next one.)  The only other interesting thing displayed in this window is a link at the bottom to see more technical information about the error report.&lt;/p&gt;

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_zeTPcjyslbI/Scxkh_IXFwI/AAAAAAAAAOI/9buhpjcG2xw/s1600-h/kc3.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 164px;" src="http://1.bp.blogspot.com/_zeTPcjyslbI/Scxkh_IXFwI/AAAAAAAAAOI/9buhpjcG2xw/s200/kc3.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5317735795062675202" /&gt;&lt;/a&gt; Now we get to the details of the exception.  The important things to note in this window is the type of exception (0xC0000005 Access Violation) and the address of the exception (0x401016).  Using the image base address we can calculate that the offending instruction was located at offset 0x1016 in our module.  This is about all the information we can extract from the error report windows that are displayed by the operating system.&lt;/p&gt;

&lt;p&gt;To recap the information we've been able to determine from the Windows XP error report is that version 1.0.0.1 of the KioskCrash application crashed because of an access violation at offset 0x1016.  This doesn't help us much because we don't have a way to match the source code to offset 0x1016.  If we had a "map" file we might be able to determine which function caused the crash.  With the symbols for this version of &lt;em&gt;KioskCrash&lt;/em&gt; we could determine which function and perhaps even which line in that function crashed.&lt;/p&gt;

&lt;p&gt;Next time I'll cover map files, how to create them as part of the build and how to use them with this information to locate the source of a crash.  Until then...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5101251932239550972-4210759298909221679?l=www.leberhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.leberhall.com/feeds/4210759298909221679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.leberhall.com/2009/03/kioskcrash-it-goes-boom.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/4210759298909221679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/4210759298909221679'/><link rel='alternate' type='text/html' href='http://www.leberhall.com/2009/03/kioskcrash-it-goes-boom.html' title='KioskCrash: It goes *BOOM*!'/><author><name>Brendan Leber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_zeTPcjyslbI/SZBlb-K2STI/AAAAAAAAAME/_xEkG2zYm-Y/S220/lj_mirror_mirror.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_zeTPcjyslbI/Scxgt7QhUFI/AAAAAAAAAN4/GsczruBGYvQ/s72-c/kc1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5101251932239550972.post-659402365884759497</id><published>2009-02-09T11:44:00.000-08:00</published><updated>2009-02-09T11:47:14.755-08:00</updated><title type='text'>Testing Google Code Prettyfier</title><content type='html'>&lt;p&gt;I'm testing using &lt;a href="http://google.com/"&gt;Google's&lt;/a&gt; &lt;a href="http://code.google.com/p/google-code-prettify"&gt;code syntax highlighter&lt;/a&gt;.  So here's a simple C++ function to see the results.&lt;/p&gt;&lt;pre class="prettyprint"&gt;int fact(int n)
{
    // quickly return the simple terminal case
    if (n &lt;= 1)
        return 1.0;

    return n * fact(n - 1);
}
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5101251932239550972-659402365884759497?l=www.leberhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.leberhall.com/feeds/659402365884759497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.leberhall.com/2009/02/testing-google-code-prettyfier.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/659402365884759497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/659402365884759497'/><link rel='alternate' type='text/html' href='http://www.leberhall.com/2009/02/testing-google-code-prettyfier.html' title='Testing Google Code Prettyfier'/><author><name>Brendan Leber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_zeTPcjyslbI/SZBlb-K2STI/AAAAAAAAAME/_xEkG2zYm-Y/S220/lj_mirror_mirror.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5101251932239550972.post-3203589339302467688</id><published>2009-02-09T09:19:00.000-08:00</published><updated>2009-02-09T09:25:33.934-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='KioskCrash'/><title type='text'>Microsoft Visual C++ 2008 Redistributable</title><content type='html'>&lt;p&gt;The KioskCrash executable in my last post was created using Microsoft Visual C++ 2008.  I forgot to include links to the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&amp;displaylang=en"&gt;redistributable&lt;/a&gt; which needs to be installed on systems without VC++ 2008.&lt;/p&gt;&lt;p&gt;Sorry about that folks.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5101251932239550972-3203589339302467688?l=www.leberhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.leberhall.com/feeds/3203589339302467688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.leberhall.com/2009/02/microsoft-visual-c-2008-redistributable.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/3203589339302467688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/3203589339302467688'/><link rel='alternate' type='text/html' href='http://www.leberhall.com/2009/02/microsoft-visual-c-2008-redistributable.html' title='Microsoft Visual C++ 2008 Redistributable'/><author><name>Brendan Leber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_zeTPcjyslbI/SZBlb-K2STI/AAAAAAAAAME/_xEkG2zYm-Y/S220/lj_mirror_mirror.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5101251932239550972.post-6387032415813771293</id><published>2009-02-04T23:21:00.000-08:00</published><updated>2009-02-26T17:29:36.525-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='KioskCrash'/><title type='text'>KioskCrash In the Wild!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_zeTPcjyslbI/SYvIBJ-OC6I/AAAAAAAAAL4/66HMfMUQsLg/s1600-h/KioskCrash-1.0-screen.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 270px; height: 130px;" src="http://4.bp.blogspot.com/_zeTPcjyslbI/SYvIBJ-OC6I/AAAAAAAAAL4/66HMfMUQsLg/s320/KioskCrash-1.0-screen.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5299549308713831330" /&gt;&lt;/a&gt;
&lt;p&gt;I'm pleased to announced the release of &lt;a href="http://hollyking.googlecode.com/files/KioskCrash-1.0.0.zip"&gt;KioskCrash v1.0.0&lt;/a&gt;.  This is the sample application that crashes in a variety of repeatable and predictable ways.  From this base I will be demonstrating how to capture diagnostic information from a crash and how to use that information to find and fix  problems.&lt;/p&gt;&lt;p&gt;You can download the &lt;a href="http://hollyking.googlecode.com/files/KioskCrash-1.0.0.zip"&gt;binary&lt;/a&gt; and &lt;a href="http://hollyking.googlecode.com/files/KioskCrash-src-1.0.0.zip"&gt;source code&lt;/a&gt; at my &lt;a href="http://code.google.com/p/hollyking/"&gt;Google Code project site&lt;/a&gt;.  There is also a Subversion repository if you would rather use that.  The most current source can be retrieved from: &lt;code&gt;http://hollyking.googlecode.com/svn/KioskCrash/trunk/&lt;/code&gt;&lt;/p&gt;&lt;p&gt;You can see a screenshot of KioskCrash running above.  Just type the number of the crash you wish to create and watch the fireworks.  Below is the function that generates a read access violation.  I create an invalid pointer to an integer and then try to read the value.  The last three lines just display a message in the event our crash doesn't occur.  It&amp;rsquo;s simple but my goal here isn&amp;rsquo;t to write pretty code to crash your system.&lt;/p&gt; &lt;pre class="prettyprint"&gt;void generate_read_access_violation()
{
   int *bad = 0;
   int value = *bad;

   TCHAR msg[1024];
   StringCbPrintf(msg, sizeof(msg),
                  _T("The integer at address 0 is %d"), value);
   MessageBox(GetDesktopWindow(), msg, _T(__FUNCTION__),
              MB_OK | MB_ICONINFORMATION);
}
&lt;/pre&gt;&lt;p&gt;That&amp;rsquo;s all I have for this post.  Next time I'll talk about what happens when an application crashes and what information we can gather to help with diagnosis.&lt;/p&gt;&lt;p&gt;Oh, tonight's beer is Bete Noel from &lt;a href="http://www.elysianbrewing.com/"&gt;Elysian Brewing&lt;/a&gt;.  A very tasty Belgian style ale.  The description from Elysian is:&lt;/p&gt;&lt;blockquote&gt;The dark side of the holidays, as treacherous as its paler sister. Brewed with Maris-Otter pale, Weyermann Munich, Castle Aromatic and roasted barley and black malts, with amber Belgian candi sugar added to the kettle. Bittered with German Northern Brewer, finished with Czech Saaz hops and fermented with Belgian Golden Ale yeast.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5101251932239550972-6387032415813771293?l=www.leberhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.leberhall.com/feeds/6387032415813771293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.leberhall.com/2009/02/kioskcrash-in-wild.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/6387032415813771293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/6387032415813771293'/><link rel='alternate' type='text/html' href='http://www.leberhall.com/2009/02/kioskcrash-in-wild.html' title='KioskCrash In the Wild!'/><author><name>Brendan Leber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_zeTPcjyslbI/SZBlb-K2STI/AAAAAAAAAME/_xEkG2zYm-Y/S220/lj_mirror_mirror.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_zeTPcjyslbI/SYvIBJ-OC6I/AAAAAAAAAL4/66HMfMUQsLg/s72-c/KioskCrash-1.0-screen.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5101251932239550972.post-8460160369936488118</id><published>2009-01-29T18:11:00.000-08:00</published><updated>2009-01-29T18:13:39.074-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='KioskCrash'/><title type='text'>KioskCrash: Introduction</title><content type='html'>&lt;p&gt;Welcome to &lt;em&gt;Leber Hall&lt;/em&gt;!  I want this blog to be interactive and a learning experience for us all.  So don&amp;rsquo;t feel shy and go ahead and ask questions and clarifications.  I am going to try and walk the line between skipping too many details and plodding along boring us all with too much information.  These posts will get quite technical at times, but I will try to keep the information accessible so neophyte programmers can get some benefit my writing.&lt;/p&gt;&lt;p&gt;The first series of posts I&amp;rsquo;m going to write will cover ways to find a crash in an unattended kiosk application.  My plan is to present a sample program that will crash.  Over time I will update the sample with the techniques being discussed.  We will explore various options for finding the crash and why particular choices were made.&lt;/p&gt;&lt;p&gt;In this series an &amp;ldquo;unattended application&amp;rdquo; is a program that runs on a kiosk that doesn&amp;rsquo;t have a keyboard, mouse or any other traditional user interface devices.  While there are &amp;ldquo;users&amp;rdquo; who use the kiosk they don&amp;rsquo;t have access to technical support, web browsers or email to report problems and work with someone to fix the problem.  At best when the application crashes the kiosk is able to recover and restart automatically.  The next best option is to display an &amp;ldquo;out of service&amp;rdquo; message to the user.  The worst option is to display error messages to the user and wait for their input.&lt;/p&gt;&lt;p&gt;I will be using &lt;a href="http://www.microsoft.com/"&gt;Microsoft&lt;/a&gt; &lt;a href="http://www.microsoft.com/windows/windows-xp/"&gt;Windows XP Pro SP3&lt;/a&gt; and &lt;a href="http://www.microsoft.com/visualstudio/en-us/products/professional/default.mspx"&gt;Visual C++ 2008 Professional Edition&lt;/a&gt; while writing these articles.  If you would like to follow along I believe that you could use other versions of &lt;a href="http://www.microsoft.com/windows/"&gt;Windows&lt;/a&gt; and the free &lt;a href="http://www.microsoft.com/express/vc/"&gt;Visual C++ 2008 Express Edition&lt;/a&gt;.  You will need the &lt;a href="http://www.microsoft.com/whdc/DevTools/Debugging/default.mspx"&gt;Debugging Tools for Windows&lt;/a&gt;, also free, when we start diagnosing the crash reports.&lt;/p&gt;&lt;p&gt;What is a crash?  In simple terms it is an invalid operation that causes the OS to stop a program from executing.  The most common types of crashes I&amp;rsquo;ve encountered are caused by attempting to read or write to invalid memory, overflowing the stack or dividing by zero.  The &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=F26B1AA4-741A-433A-9BE5-FA919850BDBF&amp;amp;displaylang=en"&gt;Platform SDK&lt;/a&gt; for Windows defines 23 codes that can be generated by a hardware exception.  I won&amp;rsquo;t explain them all.  Read the documentation for &lt;a href="http://msdn.microsoft.com/en-us/library/aa363082(VS.85).aspx"&gt;EXCEPTION_RECORD&lt;/a&gt; if you would like to know more.&lt;/p&gt;&lt;p&gt;What&amp;rsquo;s the difference between a crash and an exception?  Depending on what kind of exception you mean there isn&amp;rsquo;t any difference at all.  Windows uses a mechanism called &lt;a href="http://msdn.microsoft.com/en-us/library/ms680657(VS.85).aspx"&gt;Structured Exception Handling (SEH)&lt;/a&gt; to handle both hardware and software exceptions.  &lt;a href="http://www.research.att.com/~bs/C++.html"&gt;C++&lt;/a&gt; has exception handling as a language feature.  C++ exceptions are not the same as SEH exceptions and I&amp;rsquo;ll need to discuss both kinds as I go along.  To distinguish between the two different exception types I will call the event that causes the OS to kill a running program a crash.  I will use the Structured Exception Handling features provided by Windows to capture the state of the application.  C++ exception handling will also be used to provide a mechanism to recover from some types of crashes.&lt;/p&gt;&lt;p&gt;Ok, that&amp;rsquo;s enough rambling for now.  Next time I&amp;rsquo;ll present the sample application that I&amp;rsquo;ll use as a base for this series of articles.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5101251932239550972-8460160369936488118?l=www.leberhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.leberhall.com/feeds/8460160369936488118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.leberhall.com/2009/01/kioskcrash-introduction.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/8460160369936488118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/8460160369936488118'/><link rel='alternate' type='text/html' href='http://www.leberhall.com/2009/01/kioskcrash-introduction.html' title='KioskCrash: Introduction'/><author><name>Brendan Leber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_zeTPcjyslbI/SZBlb-K2STI/AAAAAAAAAME/_xEkG2zYm-Y/S220/lj_mirror_mirror.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5101251932239550972.post-8624540625223124461</id><published>2009-01-29T12:28:00.000-08:00</published><updated>2009-01-29T12:43:30.622-08:00</updated><title type='text'>Open the Doors and Tap the Keg!</title><content type='html'>&lt;p&gt;Welcome to &lt;a href="http://leberhall.blogspot.com/"&gt;Leber Hall&lt;/a&gt;.  Here I will write about programming topics that have been rolling around in my head for a while.  In my day job I work as a C++ programmer on an kiosk application that runs on an Windows XP Embedded system.  At night my interests range a lot farther afield and I play with languages like &lt;a href="http://msdn.microsoft.com/en-us/vcsharp/default.aspx"&gt;C#&lt;/a&gt;, &lt;a href="http://www.schemers.org/"&gt;scheme&lt;/a&gt;, and &lt;a href="http://www.perl.com/"&gt;Perl&lt;/a&gt;.  So I expect the topics to range over the map as it strikes my fancy.&lt;/p&gt;&lt;p&gt;The name &lt;em&gt;Leber Hall&lt;/em&gt; is a reference to my name and the first business my ancestors opened when the emigrated to the US from Germany.  Remig Leber did the world a great service by opening a pub in Pacific, Missouri.  I enjoy beer and pubs so why not follow the family tradition where we can sit around, enjoy good drink and talk about geeky subjects?&lt;/p&gt;&lt;p&gt;Welcome everyone!  First round's on the house!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5101251932239550972-8624540625223124461?l=www.leberhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.leberhall.com/feeds/8624540625223124461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.leberhall.com/2009/01/open-doors-and-tap-keg.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/8624540625223124461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5101251932239550972/posts/default/8624540625223124461'/><link rel='alternate' type='text/html' href='http://www.leberhall.com/2009/01/open-doors-and-tap-keg.html' title='Open the Doors and Tap the Keg!'/><author><name>Brendan Leber</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_zeTPcjyslbI/SZBlb-K2STI/AAAAAAAAAME/_xEkG2zYm-Y/S220/lj_mirror_mirror.jpg'/></author><thr:total>0</thr:total></entry></feed>
