<?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:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7120499569834790849</id><updated>2010-04-22T13:59:56.598-07:00</updated><title type='text'>leobartnik.net</title><subtitle type='html'>General spoutage and some technical stuff too</subtitle><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default'/><link rel='alternate' type='text/html' href='http://leobartnik.net/blog/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default?start-index=26&amp;max-results=25'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://leobartnik.net/blog/feed/rss.xml'/><author><name>Leo</name><uri>http://www.blogger.com/profile/17787316106178792994</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>44</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7120499569834790849.post-6210905031401572556</id><published>2010-04-21T12:32:00.000-07:00</published><updated>2010-04-21T12:36:53.459-07:00</updated><title type='text'>Unintentional (I hope) humor in pithy church sign message 'o the day</title><content type='html'>There's a church I pass on the way to work each day that has one of those sliding-letter message boards with a trite saying on it that is meant to convey some humorous, God-related wisdom that always makes me smile.&lt;br /&gt;&lt;br /&gt;Today's sign reads:&lt;br /&gt;&lt;blockquote&gt;download your worries&lt;br /&gt;get online with god&lt;/blockquote&gt;&lt;br /&gt;Shouldn't that be &amp;quot;upload&amp;quot; your worries?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7120499569834790849-6210905031401572556?l=leobartnik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/6210905031401572556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7120499569834790849&amp;postID=6210905031401572556&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/6210905031401572556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/6210905031401572556'/><link rel='alternate' type='text/html' href='http://leobartnik.net/blog/2010/04/unintentional-i-hope-humor-in-pithy.html' title='Unintentional (I hope) humor in pithy church sign message &apos;o the day'/><author><name>Leo</name><uri>http://www.blogger.com/profile/17787316106178792994</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12974158663513259147'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7120499569834790849.post-8748829418115888633</id><published>2010-04-21T12:30:00.001-07:00</published><updated>2010-04-21T12:31:42.347-07:00</updated><title type='text'>Awesome circuit diagram at XKCD</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://imgs.xkcd.com/comics/circuit_diagram.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 370px; height: 476px;" src="http://imgs.xkcd.com/comics/circuit_diagram.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7120499569834790849-8748829418115888633?l=leobartnik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/8748829418115888633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7120499569834790849&amp;postID=8748829418115888633&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/8748829418115888633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/8748829418115888633'/><link rel='alternate' type='text/html' href='http://leobartnik.net/blog/2010/04/awesome-circuit-diagram-at-xkcd.html' title='Awesome circuit diagram at XKCD'/><author><name>Leo</name><uri>http://www.blogger.com/profile/17787316106178792994</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12974158663513259147'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7120499569834790849.post-4331769501606214803</id><published>2010-03-26T08:58:00.001-07:00</published><updated>2010-03-26T08:58:52.065-07:00</updated><title type='text'>Dogs eating police car</title><content type='html'>I find this hilarious for some reason:&lt;br /&gt;&lt;br /&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/f9D9f_ySvkA&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/f9D9f_ySvkA&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7120499569834790849-4331769501606214803?l=leobartnik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/4331769501606214803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7120499569834790849&amp;postID=4331769501606214803&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/4331769501606214803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/4331769501606214803'/><link rel='alternate' type='text/html' href='http://leobartnik.net/blog/2010/03/dogs-eating-police-car.html' title='Dogs eating police car'/><author><name>Leo</name><uri>http://www.blogger.com/profile/17787316106178792994</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12974158663513259147'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7120499569834790849.post-4019456248196166638</id><published>2010-03-10T13:00:00.000-08:00</published><updated>2010-03-10T13:05:49.311-08:00</updated><title type='text'>Cool Nissan 370Z video</title><content type='html'>Here's a cool video if you are into cars at all, or into the &lt;a href="http://www.nissanusa.com/zcoupe/"&gt;Nissan 370Z&lt;/a&gt; in particular: &lt;a href="http://www.youtube.com/watch?v=Qro3VLv4xOU"&gt;http://www.youtube.com/watch?v=Qro3VLv4xOU&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There are some cool see-through views of the engine and transmission and a neat little graphical simulation of the torsional forces on the car.  There's also a couple of interesting animations: one of the Variable Valve Event and Lift (VVEL) in action and one of the full engine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7120499569834790849-4019456248196166638?l=leobartnik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/4019456248196166638/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7120499569834790849&amp;postID=4019456248196166638&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/4019456248196166638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/4019456248196166638'/><link rel='alternate' type='text/html' href='http://leobartnik.net/blog/2010/03/cool-nissan-370z-video.html' title='Cool Nissan 370Z video'/><author><name>Leo</name><uri>http://www.blogger.com/profile/17787316106178792994</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12974158663513259147'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7120499569834790849.post-7228039497041755943</id><published>2010-02-22T10:28:00.001-08:00</published><updated>2010-03-08T09:00:23.543-08:00</updated><title type='text'>Replacement iPhone</title><content type='html'>Those Apple folks are pretty cool -- my iPhone 3G had developed a crack starting at the dock connector so I took it in to one of the Apple stores in town and they said it still was under warranty and replaced it with a brand new one (3G, no free upgrade to 3GS).  I had &lt;a href="http://www.macworld.com/article/141923/2009/07/iphonecasecrack.html"&gt;researched&lt;/a&gt; the problem a bit before making the appointment to take it in and found that my iPhone was not the only one with that problem, but I was a bit skeptical that it would be as easy as it sounded to get it swapped out for a new one.&lt;br /&gt;&lt;br /&gt;Sure, it shouldn't have cracked in the first place, but they definitely made good on it in my book.  I assume the warranty doesn't reset with the new hardware (although maybe that assumption is wrong) but it doesn't matter, really -- I now have a brand new device that should last well beyond the original warranty period.&lt;br /&gt;&lt;br /&gt;If you have an iPhone, go to the Apple &lt;a href="https://selfsolve.apple.com/GetWarranty.do"&gt;Service and Repair site&lt;/a&gt; and enter your hardware serial number to see if you are covered.  Don't assume that using a protective case prevents the crack from occurring; although I don't use a case, it doesn't seem to be related to anything a case could prevent from happening.  My guess is that the problem is related to repeated use of the dock connector, and everyone uses that.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;UPDATE 3/8/2010:&lt;/span&gt; The new iPhone had a dud battery -- it seemed like about 8 hours was all it was good for even with minimal active use (e.g. sitting on the night stand overnight).  I watched it one day during the day and noticed that after about 6 hours following a full charge it would be down to 25%, again with minimal use.&lt;br /&gt;&lt;br /&gt;Over the past weekend we were in the shopping center that has the Apple store where I got the replacement, so I stopped in to see if there was any chance of getting an appointment with the Genius Bar.  This was a busy Saturday at a busy location, and the concierge said she had one spot, which was an hour and ten minutes away.  That actually wasn't going to be a big problem because we had just gotten there, but then she looked in the Mac queue (she had looked previously in the iPhone queue) and saw that they had a slot coming up in 25 minutes, so she gave me that one instead, a nice touch.&lt;br /&gt;&lt;br /&gt;At the appointed time a tech ran a piece of diagnostic software on the phone that seemed like it was more for show than anything (e.g. the tech noticed it had a handful of dropped calls, which seemed significant to him, although I don't see how that has anything to do with anything relating to the battery, but hey, who am I to complain?) and deemed it a dud.  He grabbed out a new one from the back, swapped the SIM and did the paperwork, and we were out of there.&lt;br /&gt;&lt;br /&gt;I am happy to report that the battery in this latest handset is working extremely well, holding a charge for a couple of days under normal use, and once again I felt like they had done right by me, even with the hassle of having to take the replacement unit back.  That's good customer service.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7120499569834790849-7228039497041755943?l=leobartnik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/7228039497041755943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7120499569834790849&amp;postID=7228039497041755943&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/7228039497041755943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/7228039497041755943'/><link rel='alternate' type='text/html' href='http://leobartnik.net/blog/2010/02/replacement-iphone.html' title='Replacement iPhone'/><author><name>Leo</name><uri>http://www.blogger.com/profile/17787316106178792994</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12974158663513259147'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7120499569834790849.post-8834541410731829199</id><published>2010-02-12T13:50:00.000-08:00</published><updated>2010-02-12T16:04:19.078-08:00</updated><title type='text'>Aggregate extension method in LINQ</title><content type='html'>It seems that I never stop finding new reasons to love LINQ and today I've found another: the Aggregate extension method.  &lt;br /&gt;&lt;br /&gt;Here's the scenario: we have a Silverlight application with a UIElement that binds to an IEnumerable of type string where the contents of each item is an error or validation message.  There are times when instead of binding to the list I just want a concatenated string of all the items in the collection with a CRLF stuck on the end of each.  Just for kicks I asked my friend &lt;a href="http://useableconcepts.com/"&gt;Nick&lt;/a&gt; what at the time felt like a silly &amp;quot;how many convoluted ways can you think of to solve this simple programming problem, and how would you do it in LINQ?&amp;quot; question and, being the genius that he is, he suggested using the Aggregate extension method.&lt;br /&gt;&lt;br /&gt;I already had a passing awareness of .Aggregate() but to be honest it hadn't occurred to me that it would be useful for something other than aggregating numbers, and at any rate I found it a bit unintuitive to use initially.  It turns out, of course, that the accumulator can work on a series of strings just as easily as, say, ints, and it really couldn't be much simpler.&lt;br /&gt;&lt;br /&gt;Here's how it looks as a C# Statement in &lt;a href="http://www.linqpad.net/"&gt;LinqPad&lt;/a&gt;:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;string[] words = { "foo", "bar", "ski" };&lt;br /&gt;words.Aggregate(string.Empty, (seed, w) =&gt; seed + "\r\n" + w).Dump();&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;And in the Results pane:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;foo&lt;br /&gt;bar&lt;br /&gt;ski&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Pretty slick!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7120499569834790849-8834541410731829199?l=leobartnik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/8834541410731829199/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7120499569834790849&amp;postID=8834541410731829199&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/8834541410731829199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/8834541410731829199'/><link rel='alternate' type='text/html' href='http://leobartnik.net/blog/2010/02/aggregate-extension-method-in-linq.html' title='Aggregate extension method in LINQ'/><author><name>Leo</name><uri>http://www.blogger.com/profile/17787316106178792994</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12974158663513259147'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7120499569834790849.post-8014602520890434056</id><published>2010-01-20T14:13:00.000-08:00</published><updated>2010-01-20T14:49:07.754-08:00</updated><title type='text'>If It's Not Information It's Just Noise</title><content type='html'>If you write code for a living, you don't have to be around very long before the subject of coding standards comes up, and it is a subject about which people tend to have very strong opinions.  My own very strong opinion is that most so-called standards really are styles, and that they do not rise to the same level as standards.  How many spaces you use to indent a line of code is a style (or do you use tabs?); whether your code compiles when you don't have a trailing semicolon is a standard.  &lt;br /&gt;&lt;br /&gt;Call me pedantic (you wouldn't be the first) but I think the distinction is important.  When people are discussing the formatting of any given piece of code, it is easier for the proponent of a certain style (opening curly braces, for example) to get his way if he can appeal to the authority of the &amp;quot;standard&amp;quot; to support his position (reference to the &lt;a href="http://en.wikipedia.org/wiki/Argument_from_authority"&gt;logical fallacy&lt;/a&gt; fully intentional).  Just because that person was pushy enough to get his way codified doesn't make it right, though.&lt;br /&gt;&lt;br /&gt;Countless hours have been spent discussing, drafting, arguing about, and then conforming code to some standard or another, and that's a sad waste of time.  Worse, for me anyway, is that many coding standards make code harder to read, such as requiring comments on every method, requiring regions (collapsible blocks in which code lives in a code file) around every conceivable form of code in a file and in a certain order (sometimes even where there is nothing actually *in* the blocks, or when the block already has a collapsible region with a title!), and worst of all, requiring that something like a property getter or setter take up four lines of code when it could all fit on one.&lt;br /&gt;&lt;br /&gt;Standards that don't help your code convey something important or interesting about the code should be eliminated, at least as far as what a coder has to deal with on a day-to-day basis.  If stylized code makes it easier for the source control tool to diff and merge, well, require running it through a prettifier before committing changes.  Just make sure the prettifier can reverse-engineer the code back to *my* way before I have to see it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7120499569834790849-8014602520890434056?l=leobartnik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/8014602520890434056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7120499569834790849&amp;postID=8014602520890434056&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/8014602520890434056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/8014602520890434056'/><link rel='alternate' type='text/html' href='http://leobartnik.net/blog/2010/01/if-its-not-information-its-just-noise.html' title='If It&apos;s Not Information It&apos;s Just Noise'/><author><name>Leo</name><uri>http://www.blogger.com/profile/17787316106178792994</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12974158663513259147'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7120499569834790849.post-6750416699649211826</id><published>2010-01-11T14:34:00.000-08:00</published><updated>2010-01-11T15:32:36.038-08:00</updated><title type='text'>Silverlight UIAutomation Testing -- Using WatiN to navigate to a page and White to test a Silverlight app</title><content type='html'>I had the need recently to automate testing of a Silverlight app and ran into a problem using &lt;a href="http://www.codeplex.com/white"&gt;white&lt;/a&gt; (could anyone have come up with a more difficult name to search on?) where white does not provide functionality to get a reference to a hyperlink in the DOM and click it in the way that, for example, WatiN does.  The scenario where this came up is there is a web app with a landing page that has a link to the page hosting the Silverlight app and we need to click through the link into the Silverlight hosting page.&lt;br /&gt;&lt;br /&gt;I briefly thought about just cribbing the functionality from WatiN and extending white's capabilities but quickly discarded that idea as too complicated and out of concern that it would become a maintenance nightmare.&lt;br /&gt;&lt;br /&gt;The solution I came up with is to use WatiN and white together in a hybrid fashion, where WatiN spins up a browser instance and then white attaches to that browser instance using the ProcessID of the instance from WatiN.  White doesn't expose an Attach method up in the InternetExplorer class where Launch lives, but it does have it down in White.Core on the Application class, so it was a simple matter to create an extension method on the InternetExplorer class to expose one that can be used in unit tests.&lt;br /&gt;&lt;br /&gt;It goes a little like this (warning: horrible formatting):&lt;br /&gt;&lt;code&gt;&lt;br /&gt;public static class WhiteExtensions&lt;br /&gt;{&lt;br /&gt;    // the extension method to simplify usage&lt;br /&gt;    public static InternetExplorerWindow Attach(&lt;br /&gt;        this InternetExplorer val, int processId, string title)&lt;br /&gt;    {&lt;br /&gt;        InternetExplorerFactory.Plugin();&lt;br /&gt;&lt;br /&gt;        return (InternetExplorerWindow)Application&lt;br /&gt;            .Attach(processId)&lt;br /&gt;            .GetWindow(title);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// new up a browser with WatiN&lt;br /&gt;Watin.Core.IE watin = new Watin.Core.IE(url);&lt;br /&gt;watin.Link(Find.ByText("foo")).Click();&lt;br /&gt;&lt;br /&gt;// spin up white and attach to the browser that WatiN started&lt;br /&gt;White.WebBrowser.InternetExplorer white = new White.WebBrowser.InternetExplorer();&lt;br /&gt;white.Attach(watin.ProcessID, "browser window title");&lt;br /&gt;&lt;br /&gt;// get the Silverlight app reference from the white browser reference&lt;br /&gt;White.WebBrowser.Silverlight.SilverlightDocument sl = white.SilverlightDocument;&lt;br /&gt;&lt;br /&gt;// do stuff&lt;br /&gt;sl.Get&amp;lt;Button&amp;gt;(SearchCriteria.ByAutomationId("SomeButton")).Click();&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7120499569834790849-6750416699649211826?l=leobartnik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/6750416699649211826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7120499569834790849&amp;postID=6750416699649211826&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/6750416699649211826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/6750416699649211826'/><link rel='alternate' type='text/html' href='http://leobartnik.net/blog/2010/01/silverlight-uiautomation-testing-using.html' title='Silverlight UIAutomation Testing -- Using WatiN to navigate to a page and White to test a Silverlight app'/><author><name>Leo</name><uri>http://www.blogger.com/profile/17787316106178792994</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12974158663513259147'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7120499569834790849.post-2531170155907885429</id><published>2009-12-15T20:27:00.000-08:00</published><updated>2009-12-15T20:29:00.670-08:00</updated><title type='text'>787 First Flight</title><content type='html'>&lt;a href="http://www.youtube.com/watch?v=Fucq5BoEfEI"&gt;She flies!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7120499569834790849-2531170155907885429?l=leobartnik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/2531170155907885429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7120499569834790849&amp;postID=2531170155907885429&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/2531170155907885429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/2531170155907885429'/><link rel='alternate' type='text/html' href='http://leobartnik.net/blog/2009/12/787-first-flight.html' title='787 First Flight'/><author><name>Leo</name><uri>http://www.blogger.com/profile/17787316106178792994</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12974158663513259147'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7120499569834790849.post-8915829740865053901</id><published>2009-12-07T09:49:00.001-08:00</published><updated>2009-12-07T09:51:20.636-08:00</updated><title type='text'>Ender's Game come to life</title><content type='html'>&lt;a href="http://www.avweb.com/avwebflash/news/syracuse_reaper_uav_training_drone_201647-1.html?CMP=OTC-RSS"&gt;Remote Control Warfare Prompts Protest&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7120499569834790849-8915829740865053901?l=leobartnik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/8915829740865053901/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7120499569834790849&amp;postID=8915829740865053901&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/8915829740865053901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/8915829740865053901'/><link rel='alternate' type='text/html' href='http://leobartnik.net/blog/2009/12/enders-game-come-to-life_07.html' title='Ender&apos;s Game come to life'/><author><name>Leo</name><uri>http://www.blogger.com/profile/17787316106178792994</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12974158663513259147'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7120499569834790849.post-5880410191218655151</id><published>2009-11-30T09:14:00.000-08:00</published><updated>2009-11-30T09:34:51.954-08:00</updated><title type='text'>Unit Testing as an afterthought</title><content type='html'>Something you hear a lot in the development world is &amp;quot;We'll write unit tests if we have time,&amp;quot; which usually means &amp;quot;we'll go back and take a look at the huge stack of code we are about to toss over the wall to QA and try to write tests for all of it.&amp;quot;  Quite often it is the case that some tests are better than none, but as part of a mature development process, this is the wrong way to view unit tests.&lt;br /&gt;&lt;br /&gt;If your motivation for writing unit tests is that you do it so that you can put a check mark on a development process list, you are missing the point of writing the tests in the first place.  Writing the tests as you go (as mini test harnesses to help quickly test and guide development, or immediately along with development to test edge cases and cyclomatic complexity pathways) helps you to write more accurate code more quickly, which is what most people would say their goal is in the first place when they set out to commit acts of programming on their trusting clients' code bases.&lt;br /&gt;&lt;br /&gt;Very often it is the case that writing tests for a given piece of code leads to a much better understanding of the code under test, which helps to a) write the correct code and b) be able to explain and understand it later when you need to look at it again, or when a colleague or QA tester comes calling. &lt;br /&gt;&lt;br /&gt;Writing unit tests is like showing your work in elementary school -- the point is not to write down an answer, it is to work through the process so that you understand what you actually are doing.  And with unit tests we have an added bonus: the tests are repeatable and automatable, and they inform future developers (including the author of the code) of the intent and purpose of the code under test quickly and clearly, in a way that just reading the tested code alone cannot.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7120499569834790849-5880410191218655151?l=leobartnik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/5880410191218655151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7120499569834790849&amp;postID=5880410191218655151&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/5880410191218655151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/5880410191218655151'/><link rel='alternate' type='text/html' href='http://leobartnik.net/blog/2009/11/unit-testing-as-afterthought.html' title='Unit Testing as an afterthought'/><author><name>Leo</name><uri>http://www.blogger.com/profile/17787316106178792994</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12974158663513259147'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7120499569834790849.post-4827728918275137466</id><published>2009-09-13T16:35:00.000-07:00</published><updated>2009-09-13T16:44:53.765-07:00</updated><title type='text'>Safari performance problem fix</title><content type='html'>I found the fix for the horribly-slow performance of &lt;a href="http://www.apple.com/safari/"&gt;Safari&lt;/a&gt; on the Mac: &lt;a href="http://www.google.com/chrome/intl/en/eula_dev.html?dl=mac"&gt;google chrome&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I'm a relatively new Mac OSX user so I am still getting used to the feel of things, but after upgrading to Snow Leopard last weekend the Mac mini has been noticeably slower, especially when using Safari.  I check every now and then for Chrome on the mac and until today always hit a dead end.  But, there now is a pre-beta version available for public consumption (google calls the early-access release levels "Dev Channel" and "Beta Channel," where "Dev Channel" roughly equates to "alpha.")&lt;br /&gt;&lt;br /&gt;The difference is immediately noticeable: no more wait icon when trying to create a new tab, no more waiting while the tab contents are grayed out when choosing a previous page, etc., and switching tabs is snappy.  From google's description of the Dev Channel it sounds like what is reasonably stable today could at any time become unstable, but the build I am using right now is working great, so no complaints at all.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7120499569834790849-4827728918275137466?l=leobartnik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/4827728918275137466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7120499569834790849&amp;postID=4827728918275137466&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/4827728918275137466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/4827728918275137466'/><link rel='alternate' type='text/html' href='http://leobartnik.net/blog/2009/09/safari-performance-problem-fix.html' title='Safari performance problem fix'/><author><name>Leo</name><uri>http://www.blogger.com/profile/17787316106178792994</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12974158663513259147'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7120499569834790849.post-1089683393702344715</id><published>2009-06-23T17:40:00.001-07:00</published><updated>2009-06-23T17:41:52.253-07:00</updated><title type='text'>iPod Playlist Genius ain't so smart</title><content type='html'>If the iPod playlist genius is so smart, how come it's always repeating songs from playlist to playlist?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7120499569834790849-1089683393702344715?l=leobartnik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/1089683393702344715/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7120499569834790849&amp;postID=1089683393702344715&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/1089683393702344715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/1089683393702344715'/><link rel='alternate' type='text/html' href='http://leobartnik.net/blog/2009/06/ipod-playlist-genius-aint-so-smart.html' title='iPod Playlist Genius ain&apos;t so smart'/><author><name>Leo</name><uri>http://www.blogger.com/profile/17787316106178792994</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12974158663513259147'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7120499569834790849.post-1588076130757276224</id><published>2009-05-14T09:59:00.000-07:00</published><updated>2009-05-14T10:01:44.102-07:00</updated><title type='text'>xkcd software funny</title><content type='html'>This is pretty funny, if you are a software person:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://imgs.xkcd.com/comics/cnr.png" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7120499569834790849-1588076130757276224?l=leobartnik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/1588076130757276224/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7120499569834790849&amp;postID=1588076130757276224&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/1588076130757276224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/1588076130757276224'/><link rel='alternate' type='text/html' href='http://leobartnik.net/blog/2009/05/xkcd-software-funny.html' title='xkcd software funny'/><author><name>Leo</name><uri>http://www.blogger.com/profile/17787316106178792994</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12974158663513259147'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7120499569834790849.post-3463976438982207277</id><published>2009-04-09T12:08:00.000-07:00</published><updated>2009-04-09T12:13:10.806-07:00</updated><title type='text'>Momus Iratus</title><content type='html'>I discovered a new blog the other day in the same vein as &lt;a href="http://www.violentacres.com/"&gt;Violent Acres&lt;/a&gt;; if you like that, you'll love this one too.  It's written by a mom who has a few things to say, and she's not afraid to say them!&lt;br /&gt;&lt;br /&gt;I present to you: &lt;a href="http://momusiratus.blogspot.com/"&gt;Momus Iratus&lt;/a&gt;.  I recommend you give it a read, she has a great writing style and a natural talent for blog-post-sized story telling.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7120499569834790849-3463976438982207277?l=leobartnik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/3463976438982207277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7120499569834790849&amp;postID=3463976438982207277&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/3463976438982207277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/3463976438982207277'/><link rel='alternate' type='text/html' href='http://leobartnik.net/blog/2009/04/momus-iratus.html' title='Momus Iratus'/><author><name>Leo</name><uri>http://www.blogger.com/profile/17787316106178792994</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12974158663513259147'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7120499569834790849.post-4880281797228427589</id><published>2009-04-01T09:51:00.000-07:00</published><updated>2009-04-01T10:22:15.378-07:00</updated><title type='text'>FSX pushback bug?</title><content type='html'>I haven't had a lot of time for PC gaming this year but when I do it's all Microsoft Flight Simulator for me.  I got a copy of Flight Simulator X (FSX) for Christmas and it really is fantastic in terms of airports, scenery, and realism.  The developers even wrote a patch that allows the game to utilize multiple CPU cores if your PC has them, which really boosted performance from the original version.&lt;br /&gt;&lt;br /&gt;Anybody who has played the game or some previous version of it knows that even though it is fairly realistic, there is a certain level of suspension of disbelief at work that you need in order to have a good experience.  For example, if you play the Caribbean Landing mission you'll notice there is an airliner holding short for the runway while you land.  If you taxi clear of the runway rather than just ending the mission after a successful landing, ATC will clear the airliner for takeoff and you can watch him leave.  As he is climbing out and turns away from the runway heading, he magically flies right through the mountain in front of him rather than crashing into it and comes out just fine on the other side.  The same thing sometimes happens with floating runway lights, bouncing airport trucks, etc.  These kind of things obviously are collision-detection (in the pixel sense, not the aircraft sense) related and don't really detract from the game.&lt;br /&gt;&lt;br /&gt;The other day, though, I found something that felt like a bug in the gameplay: I was playing the African Relief mission (no spoilers here so don't worry if you haven't yet played it) and overshot the runway on my first landing on the dirt strip because I was carrying too much speed and couldn't brake in time before rolling a little way down the hill at the end of the strip.  Not one to give up easily I tried to turn the plane around and taxi back up the hill but it was no go -- I was stuck.  An alternative occurred to me: turn back around and try taking off down the hill and coming back around for another landing attempt.  But, I didn't have enough energy even to turn around and the plane wasn't rolling back on its own.  Just for grins I hit Shift+P, the keyboard command for "request pushback," normally used when you are parked at the gate and need a tug to back you up at an airport.  To my surprise it actually worked!  Out in the middle of nowhere Africa, on a hill past the end of the dirt strip I had skidded off of, an invisible tug started pushing me backwards and I was able to turn the plane around and attempt a takeoff.  I botched the takeoff with a nasty bounce/stall/crash combination but I managed to refly the entire mission successfully the second time around.&lt;br /&gt;&lt;br /&gt;So I wondered: was it really a bug, or is it plausible that when I requested pushback a bunch of the guys who were based at the strip ran over and started pushing us backwards for the takeoff attempt?  I guess that explanation is believable and not totally out of line with other events that happen where you can't see the actors, but it seemed a little fishy to me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7120499569834790849-4880281797228427589?l=leobartnik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/4880281797228427589/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7120499569834790849&amp;postID=4880281797228427589&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/4880281797228427589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/4880281797228427589'/><link rel='alternate' type='text/html' href='http://leobartnik.net/blog/2009/04/fsx-pushback-bug.html' title='FSX pushback bug?'/><author><name>Leo</name><uri>http://www.blogger.com/profile/17787316106178792994</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12974158663513259147'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7120499569834790849.post-2104092293308023583</id><published>2009-02-18T20:53:00.001-08:00</published><updated>2009-02-18T21:11:43.136-08:00</updated><title type='text'>Found key -- an ethical conundrum</title><content type='html'>Tonight after dinner I was talking on the phone with my daughters, pacing back and forth on the sidewalk near the restaurant where I had eaten, because it's agin' the law to talk on the phone without a hands-free setup while driving in California.  While pacing I happened upon a key, not a car key, but the kind that goes to a building door lock.  It had nothing no identifying information on it, and I felt like I couldn't just pocket it without someone stressing out big time if it was a lost key, so I had to come up with a plan.&lt;br /&gt;&lt;br /&gt;Being the kind of person who thinks way too much about this kind of thing, I analyzed the situation and my options for how to dispose of said key:&lt;br /&gt;&lt;br /&gt;1) Try all the business doors and loot, loot, loot!  This has obvious negative repercussions, and, lack of religious beliefs notwithstanding, I'm not the stealing kind.&lt;br /&gt;&lt;br /&gt;2) Truck on over to Ace Hardware, where the key evidently was duplicated, which I brilliantly deduced by reading "Ace" on it.  This would require either a) walking across the street, which I think also is against the law in California and at any rate would take longer than just driving over there (no joke -- I tried it once), or b) driving there -- but that felt like just a bit more than I was willing to do, even given my strong feelings that I needed to do *something*.  Plus, I doubt they would know to whom it belonged, so that seemed like a dead end.&lt;br /&gt;&lt;br /&gt;3) Keep the stupid thing and not worry about it.  I think I've already established that this was not an option I considered for very long.&lt;br /&gt;&lt;br /&gt;4) Toss it through the mail slot of the door in front of which I found it with the hope that it either belongs to that business, or that they would find the rightful owner.&lt;br /&gt;&lt;br /&gt;In the end I opted for number 4.  What would you have done?  Was it a copout and did I only succeed in making it someone else's problem?  Genny suggested I return during business hours to inquire about whether the key made it home, which I thought was a good idea.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7120499569834790849-2104092293308023583?l=leobartnik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/2104092293308023583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7120499569834790849&amp;postID=2104092293308023583&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/2104092293308023583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/2104092293308023583'/><link rel='alternate' type='text/html' href='http://leobartnik.net/blog/2009/02/found-key-ethical-conundrum.html' title='Found key -- an ethical conundrum'/><author><name>Leo</name><uri>http://www.blogger.com/profile/17787316106178792994</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12974158663513259147'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7120499569834790849.post-1773119436892824444</id><published>2009-02-18T17:22:00.000-08:00</published><updated>2009-02-18T20:51:23.042-08:00</updated><title type='text'>Only one room number has a locking cover on it</title><content type='html'>I'm staying at a hotel in the Bay Area this week and my room is on the fourth floor.  One of the rooms I walk past to get to my room has a locking cover on it, like so:&lt;br /&gt;&lt;a href="http://leobartnik.net/blog/uploaded_images/roomnumber-737644.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 160px; height: 120px;" src="http://leobartnik.net/blog/uploaded_images/roomnumber-737636.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;It struck me as funny, in an oxymoronic way, to think of an herbalizer who is motivated enough to steal a 420 sign.  It must be a problem, though, and it got me wondering how many other hotels have the same kind of problem.&lt;br /&gt;&lt;br /&gt;10 points if you got the drug reference (minus 5 points for getting the drug reference; shame on you!).&lt;br /&gt;&lt;br /&gt;100 bonus points if you get the nerd reference to my room number: 414.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7120499569834790849-1773119436892824444?l=leobartnik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/1773119436892824444/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7120499569834790849&amp;postID=1773119436892824444&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/1773119436892824444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/1773119436892824444'/><link rel='alternate' type='text/html' href='http://leobartnik.net/blog/2009/02/only-one-room-number-has-locking-cover.html' title='Only one room number has a locking cover on it'/><author><name>Leo</name><uri>http://www.blogger.com/profile/17787316106178792994</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12974158663513259147'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7120499569834790849.post-3525335097774033775</id><published>2008-12-06T10:01:00.001-08:00</published><updated>2009-04-15T14:02:11.568-07:00</updated><title type='text'>Airplane in google maps</title><content type='html'>I was looking around in google maps at the area near where we live to see if they have updated photos of a new road extension that recently was completed, and found a weirdish image of an airplane in one like you sometimes hear about:&lt;br /&gt;&lt;br /&gt;&lt;iframe width="640" height="480" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps?f=q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=sherwood+or&amp;amp;sll=45.416015,-122.896371&amp;amp;sspn=0.012426,0.027895&amp;amp;ie=UTF8&amp;amp;t=h&amp;amp;s=AARTsJosNZD07-EJsTOKRWzHvlaj5daO0g&amp;amp;ll=45.41603,-122.900984&amp;amp;spn=0.00723,0.013733&amp;amp;z=16&amp;amp;output=embed"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;small&gt;&lt;a href="http://maps.google.com/maps?f=q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=sherwood+or&amp;amp;sll=45.416015,-122.896371&amp;amp;sspn=0.012426,0.027895&amp;amp;ie=UTF8&amp;amp;t=h&amp;amp;ll=45.41603,-122.900984&amp;amp;spn=0.00723,0.013733&amp;amp;z=16&amp;amp;source=embed" style="color:#0000FF;text-align:left"&gt;View Larger Map&lt;/a&gt;&lt;/small&gt;&lt;br /&gt;&lt;br /&gt;A couple of things jumped out at me:&lt;br /&gt;1. The plane looks flat, which made me wonder why; was it high-altitude and got flattened out in appearance because of the telephoto effect?&lt;br /&gt;2. It doesn't have much in the way of markings except for American flags on the wings.&lt;br /&gt;3. It looks like it is on a pretty steep bank angle&lt;br /&gt;4. It looks like the front of the plane is on the left and the back is on the right, but when you look closely at the wings it looks like the flaps and ailerons are on the leading edge of the wing, which doesn't make sense&lt;br /&gt;5. If you zoom in a little more to see what is on the ground, there is a very small landing strip with a "don't use" X on it that may be a RC strip but I can't tell.  I don't know if that has anything to do with the airplane but perhaps it does -- maybe the plane is a remote controlled one being flown from the area immediately below&lt;br /&gt;&lt;br /&gt;So, I'm off to search a site that has weird objects in google maps photos to see if there is a better way to identify aircraft in the pics.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;UPDATE:&lt;/span&gt; &lt;a href="http://blogs.sftsrc.com/shaun/"&gt;Shaun&lt;/a&gt; was able to identify this as the &lt;a href="http://www.modelaircraft.org/clubdetails.aspx?club=532"&gt;Fly-A-Ways RC Club&lt;/a&gt; in Aloha, OR.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7120499569834790849-3525335097774033775?l=leobartnik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/3525335097774033775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7120499569834790849&amp;postID=3525335097774033775&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/3525335097774033775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/3525335097774033775'/><link rel='alternate' type='text/html' href='http://leobartnik.net/blog/2008/12/airplane-in-google-maps.html' title='Airplane in google maps'/><author><name>Leo</name><uri>http://www.blogger.com/profile/17787316106178792994</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12974158663513259147'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7120499569834790849.post-1907013961236396018</id><published>2008-10-01T15:38:00.000-07:00</published><updated>2008-10-01T15:51:03.355-07:00</updated><title type='text'>Sudoku</title><content type='html'>I recently (as in last weekend) became interested in Sudoku and in addition to thoroughly enjoying solving them I found that it is thoroughly annoying to have to manually track which answers remain as possible choices are ruled out when I commit answers to my answer grid.  Naturally I wrote a program to handle that tedium for me, which I present to you here: The &lt;a href="http://leobartnik.net/Sudoku.aspx"&gt;Sudoku Solver Helper&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here's what the instructions say:&lt;br /&gt;&lt;blockquote&gt;When solving Sudoku puzzles you need some way of keeping track of&lt;br /&gt;       what possible answer values remain as you work your way&lt;br /&gt;       through the answer grid.  The newspaper puzzles have squares that are too        small to write more than a couple of numbers in, and using scratch paper isn't very practical unless you go to the trouble of creating a grid to hold all of your markup.&lt;br /&gt;&lt;br /&gt;       This seemed like the perfect job for a web application, so I set out&lt;br /&gt;       to create a grid I could use to track my guesses and remaining choices        as I worked my way through a Sudoku, and what you see here is the result of that effort.  To use it you enter your answers in the top grid, and the lower grid        automatically removes those values from the row, column, and sub-grid region        that the answer is in in the top grid.&lt;br /&gt;&lt;br /&gt;       A couple of things to note:&lt;ul&gt;            &lt;li&gt;Puzzles that are easy and medium pretty much solve themselves.  As you enter values in the top grid, enough values are eliminated in the lower one to leave only one choice per square.  This gets boring fast, and if you don't want to see the answers, either try harder puzzles, or don't use this tool.&lt;/li&gt;&lt;br /&gt;           &lt;li&gt;There is no undo -- if you make a mistake and want to change your value in the top grid you can, but the lower-grid values that were removed already for the mistaken entry will not be restored.&lt;/li&gt;&lt;br /&gt;           &lt;li&gt;As I tested a few different puzzles I thought it would be handy to somehow lock the starter values in the top grid, or at least to be able to know what they were initially by giving them a different background color.  That way, if things go wrong and you start shifting things around to get a fit on a tough area you would know which ones should not be changed.  I ended up not adding that feature but may do so in the future.&lt;/li&gt;&lt;br /&gt;           &lt;li&gt;There is no code in place to enforce using only digits 1 through 9.  I went back and forth on this one and decided that it doesn't really matter what you use as answers in a Sudoku as long as you have only one of each in each row, column, and region.  So, use letters or symbols if you like; it doesn't matter (except that the lower grid always holds 1-9 -- sounds like another future feature to allow setting the answer types).&lt;/li&gt;&lt;/ul&gt;So, it takes the drudgery out of tracking answer choices and is pretty simple to use.  If you have any comments or questions, shoot me an e-mail at sudoku@leobartnik.net.&lt;br /&gt;&lt;br /&gt;       Enjoy!&lt;br /&gt;  &lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7120499569834790849-1907013961236396018?l=leobartnik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/1907013961236396018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7120499569834790849&amp;postID=1907013961236396018&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/1907013961236396018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/1907013961236396018'/><link rel='alternate' type='text/html' href='http://leobartnik.net/blog/2008/10/sudoku.html' title='Sudoku'/><author><name>Leo</name><uri>http://www.blogger.com/profile/17787316106178792994</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12974158663513259147'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7120499569834790849.post-4121838803243240851</id><published>2008-09-17T10:30:00.000-07:00</published><updated>2008-09-17T10:31:34.362-07:00</updated><title type='text'>WATIN</title><content type='html'>WATIN totally rocks!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7120499569834790849-4121838803243240851?l=leobartnik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/4121838803243240851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7120499569834790849&amp;postID=4121838803243240851&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/4121838803243240851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/4121838803243240851'/><link rel='alternate' type='text/html' href='http://leobartnik.net/blog/2008/09/watin.html' title='WATIN'/><author><name>Leo</name><uri>http://www.blogger.com/profile/17787316106178792994</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12974158663513259147'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7120499569834790849.post-8918313601051619668</id><published>2008-09-14T19:23:00.001-07:00</published><updated>2008-09-14T19:23:29.018-07:00</updated><title type='text'></title><content type='html'>&lt;!-- Start Brinkster Referral Link --&gt;&lt;br /&gt;&lt;a  onMouseOver="window.status='Host your site with Brinkster!'; return true" onMouseOut="window.status=''; " href="http://www.brinkster.com/redirect.aspx?rf=leobartnik&amp;ad=1019&amp;redirect=/hosting/hosting.aspx" target="_blank"&gt;&lt;img src="http://www.brinkster.com/images/ads/2007/ReferralBanner2v2.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;!-- End Brinkster Referral Link --&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7120499569834790849-8918313601051619668?l=leobartnik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/8918313601051619668/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7120499569834790849&amp;postID=8918313601051619668&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/8918313601051619668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/8918313601051619668'/><link rel='alternate' type='text/html' href='http://leobartnik.net/blog/2008/09/blog-post.html' title=''/><author><name>Leo</name><uri>http://www.blogger.com/profile/17787316106178792994</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12974158663513259147'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7120499569834790849.post-8288976563361958950</id><published>2008-06-04T10:03:00.001-07:00</published><updated>2008-06-04T10:05:40.207-07:00</updated><title type='text'>Download Nintendo DS demo games on the Wii</title><content type='html'>Not sure why it took so long but you now can &lt;a href="http://www.nintendo.com/wii/channels/nintendochannel"&gt;download demo games for the DS on the Wii&lt;/a&gt;.  You could download demos for the DS all along but you had to go to your local game seller that served up the demo.  Now you can do it through the Wii in the comfort of your own home.&lt;br /&gt;&lt;br /&gt;Let the synergisticism begin!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7120499569834790849-8288976563361958950?l=leobartnik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/8288976563361958950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7120499569834790849&amp;postID=8288976563361958950&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/8288976563361958950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/8288976563361958950'/><link rel='alternate' type='text/html' href='http://leobartnik.net/blog/2008/06/download-nintendo-ds-demo-games-on-wii.html' title='Download Nintendo DS demo games on the Wii'/><author><name>Leo</name><uri>http://www.blogger.com/profile/17787316106178792994</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12974158663513259147'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7120499569834790849.post-7702749374453972264</id><published>2008-06-03T22:54:00.000-07:00</published><updated>2008-06-03T22:56:49.421-07:00</updated><title type='text'>Self-reassembling robot</title><content type='html'>There's a &lt;a href="http://funvampires.com/2008/05/01/modular-robot-reassembles-when-kicked-apart/"&gt;robot that reassembles itself&lt;/a&gt; after being kicked apart; that's some freaky stuff right there.  It's all Terminator-like, crawling across the floor to find the other parts of itself.  I wish I could live to be 500 just to see what this kind of thing turns into (as long as it doesn't actually turn into Terminator!).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7120499569834790849-7702749374453972264?l=leobartnik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/7702749374453972264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7120499569834790849&amp;postID=7702749374453972264&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/7702749374453972264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/7702749374453972264'/><link rel='alternate' type='text/html' href='http://leobartnik.net/blog/2008/06/self-reassembling-robot.html' title='Self-reassembling robot'/><author><name>Leo</name><uri>http://www.blogger.com/profile/17787316106178792994</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12974158663513259147'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7120499569834790849.post-7776507499991785723</id><published>2008-05-25T21:06:00.001-07:00</published><updated>2008-10-01T15:54:22.784-07:00</updated><title type='text'>anonymous post</title><content type='html'>Worse than the "I'd hit it" McDonald's ad campaign?  You be the judge:&lt;br /&gt;&lt;br /&gt;Today's Target ad:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://leobartnik.net/blog/uploaded_images/targetnotporn-724769.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://leobartnik.net/blog/uploaded_images/targetnotporn-724764.JPG" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;and:&lt;br /&gt;&lt;br /&gt;UPDATE: I removed the actual image and replaced it with this link because it seemed a little crass; &lt;a href="http://www.encyclopediadramatica.com/Image:Porn-SFW.jpg"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://images.encyclopediadramatica.com/images/d/da/Porn-SFW.jpg"&gt; click here to see possibly NSFW image&lt;/a&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7120499569834790849-7776507499991785723?l=leobartnik.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/7776507499991785723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7120499569834790849&amp;postID=7776507499991785723&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/7776507499991785723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7120499569834790849/posts/default/7776507499991785723'/><link rel='alternate' type='text/html' href='http://leobartnik.net/blog/2008/05/anonymous-post.html' title='anonymous post'/><author><name>Leo</name><uri>http://www.blogger.com/profile/17787316106178792994</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12974158663513259147'/></author><thr:total>0</thr:total></entry></feed>