<?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-8166852</id><updated>2011-12-17T10:53:07.411-07:00</updated><category term='religion'/><category term='xbox'/><category term='code'/><category term='bandwidth'/><category term='financial software'/><category term='wheel repair'/><category term='driving'/><category term='movies'/><category term='console repair'/><category term='politics'/><title type='text'>Yakko Warner</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default?start-index=101&amp;max-results=100'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>221</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8166852.post-4764683078233365424</id><published>2011-12-17T10:53:00.000-07:00</published><updated>2011-12-17T10:53:07.425-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='driving'/><title type='text'>Innocent by Law, Guilty by State Farm</title><content type='html'>&lt;p&gt;&lt;a href="http://www.yakkowarner.com/2011/05/maybe-treating-it-as-four-way-stop-is.html"&gt;Several months ago&lt;/a&gt;, I was involved in a traffic accident.  The police officer who arrived on the scene took statements from three witnesses and the other driver before approaching me with a ticket in his hand charging me with "careless driving".&lt;/p&gt;
&lt;p&gt;A few things annoyed me about the charge.  For one thing, the term "careless driving" is really broad.  It doesn't really tell you what you did wrong, just that you didn't do something right.  For another, I believed I was following the laws and acting not only according to what I believe was correct (especially with reference to what the Colorado Driver's Handbook says to do at a malfunctioning traffic light), but with how other cars present at the intersection at the time were behaving.  Also, the fact that the cop issued the ticket without getting my view, but only that of the other driver and some witnesses, made me feel like the decision was obnoxiously one-sided.  Finally, the fact that the officer's report stated the other driver was being cautious didn't fit the facts that, I felt, were obvious.&lt;/p&gt;
&lt;p&gt;I was determined to fight what I felt was an unfair assessment.  And after finding out how much it would cost to obtain a lawyer (from the one firm that found it worthwhile to actually return my call), I decided I could only afford to fight it if I fought it on my own.&lt;/p&gt;
&lt;p&gt;To make a very long story short, the judge agreed with me, that I did take into account the situation (the malfunctioning traffic light, the large number of cars stopped at this light in all directions).  One of the witnesses was key in this decision, as she happened to be behind me at the time of the accident, and she testified that I did in fact stop for plenty of time to analyze the situation before entering the intersection.  It also sounded like the was about to say the other driver was at fault for entering against a flashing yellow when there was a car already in the intersection (which I was able to prove I had first, by a large margin), before she interrupted herself and gave her ruling, that the prosecution failed to prove my guilt.  So, against the odds of representing myself in court, I prevailed.&lt;/p&gt;
&lt;p&gt;With that ruling, I thought it would be prudent to contact State Farm and let them know that not only was I found not at fault, but a competent lawyer could likely take this case and go after the other driver's insurance for the loss &amp;mdash; hey, if an incompetent fool like myself could win the case, imagine what someone with appropriate skill could do.  Boy, was I ever in for a surprise.  When I was connected to the agent in charge of processing my claim, and I explained the situation, she told me she didn't think they had a case. And then this State Farm agent proceeded to tell me why: because the other driver had the right of way, she had no obligation to watch for traffic in the intersection because I should not have been there; basically all the arguments the prosecution made at my trial, that were ultimately rejected by the judge.  When she mentioned details that were just wrong (like the other driver having a regular yellow light and I ran a red light) and I tried to correct her, she accused me of changing my story.  (I don't know if, in the heat of the moment when I first reported the accident, I got some details wrong; but the condition of the traffic light was a fact clearly spelled out in the police report for crying out loud.)  She even went so far as to claim that there was no difference between a flashing yellow light and a green light!  I was in shock.&lt;/p&gt;
&lt;p&gt;I suppose ultimately it's their decision to pursue the case or not, but to just dismiss the results of a trial and accuse me of guilt after I had been found not guilty, does not sit well with me.  I believe it is time for me to find a new insurance agent, one that does not stubbornly hold to an assumption of my guilt even &lt;i&gt;after&lt;/i&gt; being found not guilty in a court of law, like State Farm has done.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-4764683078233365424?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/4764683078233365424/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=4764683078233365424&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/4764683078233365424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/4764683078233365424'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2011/12/innocent-by-law-guilty-by-state-farm.html' title='Innocent by Law, Guilty by State Farm'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-6922543555059021517</id><published>2011-11-21T10:53:00.001-07:00</published><updated>2011-11-21T11:08:15.463-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bandwidth'/><title type='text'>Hitting the wall</title><content type='html'>&lt;p&gt;Looks like it might actually happen.  With my nephew staying with us while he goes to college, his additional gaming and Netflix bandwidth has pushed our internet usage up over 210MB this month, with still a third of a month to go.&lt;/p&gt;
&lt;p&gt;To get comparable internet speeds from Comcast Business (which is not, reportedly, subject to bandwidth caps), I would have to pay &lt;i&gt;triple&lt;/i&gt; my current monthly internet bill.  I was unable to get comparable numbers from CenturyLink Business (the only other viable internet service provider in my area) without providing my home address and phone number.&lt;/p&gt;
&lt;p&gt;My nephew is off spending the Thanksgiving holiday with his immediate family, and I've told my wife we need to use our shiny plastic (and completely unrestricted) discs for home entertainment, so we have a chance of making it through the month under the cap; but now, it's clear that the bandwidth cap is making a clear impact on our internet usage.&lt;/p&gt;
&lt;p&gt;It's interesting to note that Microsoft has announced that they are going to be bringing even more streaming video content to the Xbox in the coming months, including (but not limited to) YouTube, UFC shows, and various cable providers' on-demand content (which would be delivered over capped internet, rather than the limitless pipe that carries regular cable content).&lt;/p&gt;
&lt;p&gt;Internet use and services are going up (and Comcast even occasionally increases its speeds to deliver more of that content faster), but the cap doesn't move.  How many people are going to find themselves over the cap soon?  When will Comcast realize "generous" is becoming "too restrictive"?  And, most importantly, when will I see a viable option that gives me reliable connection and speed, and the ability to actually &lt;i&gt;use&lt;/i&gt; it to its potential?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-6922543555059021517?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/6922543555059021517/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=6922543555059021517&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/6922543555059021517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/6922543555059021517'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2011/11/hitting-wall.html' title='Hitting the wall'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-1928635837854935605</id><published>2011-09-27T10:39:00.000-06:00</published><updated>2011-09-27T10:39:41.339-06:00</updated><title type='text'>So soon, Firefox?</title><content type='html'>&lt;blockquote&gt;I stepped away for a cup of coffee, and when I came back, there's a new version of Firefox.&lt;/blockquote&gt;
&lt;p&gt;I thought my co-worker was kidding, but sure enough, when I started Firefox, it started downloading the installer for version 7.0.  Out of curiosity, I went to the options panel to look at the update history.  It showed Firefox 5, then Firefox 6, both listed as "security updates" &amp;mdash; version 6 installed only last month.&lt;/p&gt;
&lt;p&gt;Curiously, after installing version 7, the "update history" list was cleared out.  A little embarassing, perhaps?&lt;/p&gt;
&lt;p&gt;Seriously, Firefox; this is just silly.&lt;/p&gt;
&lt;p&gt;Besides, Chrome has you beat by miles (version 14 as of this post).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-1928635837854935605?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/1928635837854935605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=1928635837854935605&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/1928635837854935605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/1928635837854935605'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2011/09/so-soon-firefox.html' title='So soon, Firefox?'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-6202736475774280557</id><published>2011-08-16T12:55:00.000-06:00</published><updated>2011-08-16T12:55:15.173-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Firefox 6 - Major version, major pain</title><content type='html'>&lt;p&gt;I was testing out my web code in Firefox today, and I got a message saying that Firefox 6 had been released.  Wanting to make sure I was keeping up to date with our users, I installed the update.  After restarting the browser when prompted, I noticed that it looked exactly the same.  So I went online to check what's new.&lt;/p&gt;
&lt;p&gt;Apparently, not much.  Oh, there's a &lt;a href="http://hacks.mozilla.org/2011/08/firefox6/"&gt;small list&lt;/a&gt;, but &lt;a href="http://pinoytutorial.com/techtorial/firefox-6-new-features-and-changes-arent-visible-at-all/"&gt;nothing really visible&lt;/a&gt;, and it's &lt;a href="http://www.theatlanticwire.com/technology/2011/08/new-faster-firefox-6-isnt-much-faster/41316/"&gt;not really any faster&lt;/a&gt; than before.  It seems that Mozilla's &lt;a href="http://www.foxnews.com/scitech/2011/08/15/better-browser-firefox-6-is-out/"&gt;accelerated release schedule&lt;/a&gt; is nothing more than releasing what would normally be a "point release" as a major version instead.&lt;/p&gt;
&lt;p&gt;But to what end?  Chrome is on version 13; IE's current release is version 9 (with 10 available for preview); Opera is on version 11.  Could this be nothing more than a way to "catch up", so "Firefox 5" doesn't &lt;i&gt;sound like&lt;/i&gt; it's way behind the other browsers?  It was speculated that Microsoft named their second console the "Xbox 360" because "Xbox 2" would sound like it was behind "Playstation 3"; this could be another example of toying with customer mindshare.&lt;/p&gt;
&lt;p&gt;Or could it be a way to flush some of the old versions out of general support?  Many companies I worked at had a policy such as, "Support the current major browser versions minus two", which today would mean "IE 7 and above, Firefox 4 and above, Chrome 11 and above, etc." &amp;mdash; releasing a few major versions quickly would push older browsers that don't support up-and-coming standards like HTML5 out of the support window rather quickly.&lt;/p&gt;
&lt;p&gt;Whatever the reason, there is one rather large detrimental effect.  Extension authors have to certify that their code is compatible with major releases.  Because Firefox just got a new major version number, all of my extensions were marked as "incompatible" and disabled, and that way they will remain until their authors update their xpi packages to mark them as compatible with this new major version.  Essential debugging tools like FireQuery, HttpFox, even the Java console are among those that are off-limits until they are updated.  Even the extension for the corporate virus scanner is disabled, as is Skype's "click to call" extension (which wasn't marked compatible with Firefox 5 either; not that I use it myself, but I have to be able to confirm that, for customers who &lt;i&gt;do&lt;/i&gt; use it, its phone number reformatting doesn't make the page unusable).&lt;/p&gt;
&lt;p&gt;Firefox, you used to be cool.  I didn't mind inviting you over and letting you crash on my couch.  But now you've stolen the food from my cupboards, gotten fat and lazy, started leaving your dirty clothes lying all over the house; and you're wild parties broke my antique table lamp without so much as a "sorry" from you.  I grow tired of having to clean up after your mess.  IE used to be where you are now, but at least &lt;i&gt;he's&lt;/i&gt; been working on cleaning up his act.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-6202736475774280557?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/6202736475774280557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=6202736475774280557&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/6202736475774280557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/6202736475774280557'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2011/08/firefox-6-major-version-major-pain.html' title='Firefox 6 - Major version, major pain'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-80525080829149178</id><published>2011-08-12T09:52:00.000-06:00</published><updated>2011-08-12T09:52:17.495-06:00</updated><title type='text'>Does courtesy fade with age?</title><content type='html'>&lt;p&gt;I'm sitting on the train, headphones on, playing a game on my Windows Phone, as normal, when I hear a demanding voice from over my shoulder say, "Do you see that sign!?"&lt;/p&gt;
&lt;p&gt;My brain attempts to disengage from my virtual world and process this.  Usually, when a voice like that is heard, it's from the train police, asking to see passengers' tickets.  But wait, that's not what he asked for.  Do I see the sign?  There are a few posted signs asking for certain behavior.  I'm not playing loud music, I'm not eating or drinking, my feet aren't on the seat&amp;hellip; Ok, something's wrong, and I guess I need to turn to this mysterious voice and figure out what it is.&lt;/p&gt;
&lt;p&gt;I turn and see an elderly man, looking a bit angry, glaring at me, with his finger pointed at the sign that indicates priority seating for elderly or disabled passengers and asking to comply with all requests to vacate the seat for a disabled passenger.&lt;/p&gt;
&lt;p&gt;So, I figured I'd give him the opportunity to request my seat.  "Do you want to sit down?"&lt;/p&gt;
&lt;p&gt;"DO YOU SEE THAT SIGN?" he yells again.&lt;/p&gt;
&lt;p&gt;The people in the rear-facing seat across from me offer their seat and practically stumble over themselves to get up and move to one of the several other vacant seats on the train.  "No, I can't sit backwards," the old guy complains after them.&lt;/p&gt;
&lt;p&gt;"All right," I said, giving up on any chance of civility with this curmudgeon.  I stand up, turn around, and sit in the hastily-vacated rear-facing seat.&lt;/p&gt;
&lt;p&gt;The old fart then sits down, pulls out a 12oz Coke bottle, and starts drinking it, right under the sign that says "No Eating or Drinking".&lt;/p&gt;
&lt;p&gt;I guess he didn't see the sign.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-80525080829149178?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/80525080829149178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=80525080829149178&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/80525080829149178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/80525080829149178'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2011/08/does-courtesy-fade-with-age.html' title='Does courtesy fade with age?'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-6161859770684689092</id><published>2011-08-09T22:30:00.000-06:00</published><updated>2011-08-09T22:30:33.741-06:00</updated><title type='text'>RJ11 to RJ14 - easier than I thought</title><content type='html'>&lt;p&gt;I've just switched from Comcast's &lt;span title="Voice over IP - telephone service over the internet"&gt;VoIP&lt;/span&gt; to a third party VoIP provider (the company formerly known as &lt;a href="http://voip.com/"&gt;VoIP.com&lt;/a&gt;, now a part of &lt;a href="http://www.phonepower.com/"&gt;Phone Power&lt;/a&gt;).  When I got my box (slightly smaller than a 3"x5" card and just thick enough to have phone and ethernet jacks on its back), I noticed it had Phone Line 1 and Line 2 as two separate RJ11 jacks.  Why they didn't just use a single RJ14 jack is beyond me.  It's not like &lt;a href="http://1.bp.blogspot.com/-1VzIpqsAmGM/TkH-dG69WCI/AAAAAAAACSE/vaGez5R6dGE/s1600/phonelinesplitter.jpg" imageanchor="1" style="clear: right; float: right; margin: 1em 0 1em 1em; border:none;"&gt;&lt;img style="border:none;height:68px;width:100px;" src="http://1.bp.blogspot.com/-1VzIpqsAmGM/TkH-dG69WCI/AAAAAAAACSE/vaGez5R6dGE/s200/phonelinesplitter.jpg" alt="A splitter that takes an RJ14 two-line jack and converts it to two RJ11 one-line jacks" /&gt;&lt;/a&gt;line splitters are that expensive — they retail for a couple bucks and probably cost half that wholesale.  But where splitters are apparently plentiful, a &lt;i&gt;combiner&lt;/i&gt;, something that takes two separate single-line jacks and makes a single two-line jack out of it, is impossible to find in a store and even extremely rare online.  So, how was I supposed to take these two RJ11 outputs and plug them into the single RJ14 jack that serves as input for my house wiring?&lt;/p&gt;
&lt;p&gt;I found instructions for rewiring a CAT-5 ethernet cable to do the job, but I didn't want to have to buy a crimping tool to form the plugs, nor did I feel comfortable splicing it into existing phone cords (the last time I tried something like that, &lt;a href="http://www.yakkowarner.com/2009/09/how-i-brought-down-duke-campus-ethernet.html"&gt;it ended badly&lt;/a&gt;).  But then I had a sudden revelation.&lt;/p&gt;
&lt;p&gt;You see, there's really nothing special about telephone cord accessories.  A splitter just takes the pins in a given plug and wires them to the appropriate pins in the right jacks.  In the splitter pictured above, the first pair on the RJ14 plug is wired to both the first (and only) pair on the L1 jack and the first pair on the L1+L2 jack.  The second pair on the RJ14 plug is wired to the first (and only) pair on the L2 jack and the second pair on the L1+L2 jack.  All those associated pins are interconnected; there is no special circuitry that separates the connections (i.e., nothing keeping the L1 jack and the first pair on L1+L2 from talking to each other) &amp;mdash; that's why these things are so cheap.  Further, wires are bi-directional.  If you apply an input voltage to one end, it will carry it to the other end; conversely, if you apply an input voltage to the other end, it will carry it back to the first end.  Wires don't care which end is labeled "input" and "output".&lt;/p&gt;
&lt;p&gt;And neither does a splitter.  With all the pins interconnected by wires, you can just as easily send a signal &lt;i&gt;input&lt;/i&gt; into L1 and L2, and get the combined &lt;i&gt;output&lt;/i&gt; in both the L1+L2 and the RJ14 plug on the back side.&lt;/p&gt;
&lt;p&gt;So that's what I did.  I connected the VoIP adapter's Phone 1 and Phone 2 jacks to the L1 and L2 jacks of a splitter, and connected the L1+L2 jack to my house wiring input jack.  (I could've used the RJ14 plug on the splitter itself instead of another phone wire, but there wasn't enough room around the input jack on the patch panel for a splitter to fit.)&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-bQTiP6ueXg8/TkIHvQ48DGI/AAAAAAAACSM/r2DFfkENzCU/s1600/phonelinecombiner.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="82" width="320" src="http://2.bp.blogspot.com/-bQTiP6ueXg8/TkIHvQ48DGI/AAAAAAAACSM/r2DFfkENzCU/s320/phonelinecombiner.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;So why is this so important that I bothered writing a blog post about it?  Because, as I was searching out a solution to this problem (which apparently plagues users of Vonage equipment as well), I couldn't find this very simple solution.  Maybe someone else will stumble upon this blog post as they search for their own solution and discover just how easy it is.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-6161859770684689092?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/6161859770684689092/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=6161859770684689092&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/6161859770684689092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/6161859770684689092'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2011/08/rj11-to-rj14-easier-than-i-thought.html' title='RJ11 to RJ14 - easier than I thought'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-1VzIpqsAmGM/TkH-dG69WCI/AAAAAAAACSE/vaGez5R6dGE/s72-c/phonelinesplitter.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-652772099706676136</id><published>2011-08-02T15:58:00.000-06:00</published><updated>2011-08-02T15:58:27.603-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Firefox, jQuery, and event binding, revisited</title><content type='html'>&lt;p&gt;While I had decided for myself that I didn't want to support Firefox anymore, the company that signs my paychecks respectfully disagreed.  Because my project is an internal admin tool, we were able to tell our user base not to use Firefox for the time being and assign the bug a relatively low priority &amp;mdash; but, it was something that should be revisited and fixed.  Having completed my tasks well ahead of schedule, the time was at hand.&lt;/p&gt;&lt;p&gt;The bug had to do with &lt;a href="http://www.yakkowarner.com/2011/06/you-have-failed-me-for-last-time.html"&gt;Firefox failing to fire off a jQuery click event handler&lt;/a&gt;.  I had long since installed the &lt;a href="http://getfirebug.com/"&gt;Firebug&lt;/a&gt; extension, but all it could tell me for certain was that the event handler code was not being called.  I was fortunate, in my searching, to find another extension, &lt;a href="http://firequery.binaryage.com/"&gt;FireQuery&lt;/a&gt;, which extends Firebug by adding jQuery information to the debug panels.  Installing that and viewing the HTML, I could see that the jQuery click event handler &lt;i&gt;simply wasn't there&lt;/i&gt; on the switches that weren't working.&lt;/p&gt;&lt;p&gt;Using the development version of jQuery, I stepped through the code that attaches the event handler, and I could find no difference in code execution between the switches that worked and the ones that didn't (unsurprising, since I attached to all of them at once).&lt;/p&gt;&lt;p&gt;The solution, surprisingly, came about when I started mucking around with elements and styles, substituting &lt;code&gt;div&lt;/code&gt;s for &lt;code&gt;li&lt;/code&gt;s in a desperate attempt to find the cause.  To make a long story short, it was the fact that, later in the code, I called a jQuery plugin called "text-overflow" that emulated the &lt;code&gt;text-overflow: ellipsis&lt;/code&gt; stylesheet directive that &lt;a href="http://www.yakkowarner.com/2011/01/holding-back-features-on-web.html"&gt;every browser but Firefox supports&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The problem with the code is that, in order to emulate the feature, the plugin creates a cloned copy of the node to "ellipsify" and progressively removes characters until the width of the cloned node fits in the desired width of the original.  Then, it sets the contents to be the new text, and destroys the copy.  Unfortunately, there are a couple side effects:&lt;ol&gt;&lt;li&gt;If no truncation happens, the contained elements lose their event bindings, since they end up not being the original elements, but copies.&lt;/li&gt;
&lt;li&gt;If truncation does happen, when the contents are replaced with the new text, any other elements contained therein (i.e. hidden form fields holding data for a form post) are wiped out.&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;&lt;p&gt;The first problem might have been overcome by using jQuery's own &lt;code&gt;clone&lt;/code&gt; method which clones nodes and any events associated to them.  (This was added after the plugin was written, so I don't fault the author for oversight).  To be safe, though, I changed the class on the switches' containers and excluded them from my &lt;code&gt;.ellipsis()&lt;/code&gt; call.  That successfully kept the slider click event handlers from disappearing.&lt;/p&gt;&lt;p&gt;The second problem was the source of another bug, where a jQuery function attempting to look up values from hidden form fields was failing to find the data on elements that were truncated by the text-overflow plugin.  I moved the hidden form fields outside of the elements targeted by the function call, and that, too, was magically fixed.&lt;/p&gt;&lt;p&gt;Internet Explorer has a bad (and well-deserved) reputation for needing special development time to do the same thing that other browsers do (although, in my experience, a lot of this would be unnecessary if it weren't for a requirement, usually from an upper-level executive or, worse, marketing, mandating pixel-perfect replication across all browsers), but I've found lately that the pendulum has swung far the other way to deal with the quirks in Firefox.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-652772099706676136?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/652772099706676136/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=652772099706676136&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/652772099706676136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/652772099706676136'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2011/08/firefox-jquery-and-event-binding.html' title='Firefox, jQuery, and event binding, revisited'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-1657732349065195423</id><published>2011-07-24T18:12:00.000-06:00</published><updated>2011-07-24T18:12:09.076-06:00</updated><title type='text'>Problem with your phone? We'll call you...</title><content type='html'>&lt;p&gt;Years ago, I was somewhat amused when we had a problem with our internet, and when I called Comcast service, the automated message &lt;a href="http://www.yakkowarner.com/2007/09/to-report-problem-with-your-phone.html"&gt;suggested reporting the problem on their website&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Last week, when our internet went out and took the Comcast VOIP service with it, we had to call Comcast customer service from our cell phone and set up service.  The customer service rep asked if there was a phone number by which we could be contacted (since our home phone was out), and we gave them the cell number.&lt;/p&gt;&lt;p&gt;Today, I finally got around to checking the messages on Comcast voice mail that came in while our service was out.  The message left was from Comcast customer service, telling us we had an appointment set up.&lt;/p&gt;&lt;p&gt;&lt;i&gt;insert eye roll here&lt;/i&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-1657732349065195423?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/1657732349065195423/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=1657732349065195423&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/1657732349065195423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/1657732349065195423'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2011/07/problem-with-your-phone-well-call-you.html' title='Problem with your phone? We&apos;ll call you...'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-6550246715149014363</id><published>2011-07-19T11:34:00.000-06:00</published><updated>2011-07-19T11:34:47.843-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bandwidth'/><title type='text'>Why is the internet not a utility?</title><content type='html'>&lt;p&gt;I've been following the plight of Ozymandias and his issues with &lt;a href="http://www.ozymandias.com/the-day-comcast%e2%80%99s-data-cap-policy-killed-my-internet-for-1-year"&gt;Comcast cutting off his service&lt;/a&gt; with great interest, since I've been concerned with their bandwidth caps since they announced them about three years ago.  He has argued that, because of how important internet usage has become in this day and age, it should be considered a "utility" instead of a generic service.  I don't disagree, and my own recent experiences helped bring this point home.&lt;/p&gt;&lt;p&gt;Recently, my mother had issues with her Comcast phone service, where she had not had a dial tone for a few days.  Having a busy work schedule and some remodeling done on her house, she didn't get around to calling Comcast about it for some time.  When she finally called Comcast to get it resolved, the tech on the phone determined the cable modem was working correctly, but it was reporting a phone off the hook somewhere in the house.  Because she had no phone service, however, the tech said she would schedule a service call at the first opportunity &amp;mdash; which, due to severe storms in the area, would be the next day; notable since that next day was a Sunday.&lt;/p&gt;&lt;p style="font-size:smaller;"&gt;Note that this was not Comcast's fault.  I happened to be over to help with some other items, and as I was there, I noticed that one of her contractors had inexplicably taken a network cord from a hub in the office and plugged it into a phone jack.  Once I pulled that plug, dial tone was restored.&lt;/p&gt;&lt;p&gt;Over the past couple days, we've been having issues with our internet going up and down intermittently.  Yesterday, it was bad enough that our phone service went with it, too.  (It could easily have been going up and down all along as well, but this was the first we'd actually noticed it.)  My wife called Comcast, and they said that &lt;i&gt;because we weren't getting a dial tone&lt;/i&gt;, they would send a tech out that day &amp;mdash; which they did.&lt;/p&gt;&lt;p&gt;The reason I find this interesting is, in both cases, Comcast sounded like they were more motivated to act not because the internet service was down (in my mother's case, her internet service was fine), but because there was no phone service.  I did a very quick internet search, and although I couldn't find an official statement, I found several allusions to law that require a dial tone be available for everyone for 911 service at a minimum.  If this is true, it would certainly explain their motivation in getting service restored.&lt;/p&gt;&lt;p&gt;But it does bring up a few interesting questions.  First, if I had my VOIP phone service through some other provider, such that my phone service depended on my internet even though Comcast itself was not providing that phone service, would they be likewise motivated and/or obligated to get my internet service restored in the event of an outage?  Although my cynical side believes no simply on the grounds that they're not responsible for that service, I think the fact that any competing VOIP provider's traffic is subject to the bandwidth cap whose penalty is a disconnection of service, is evidence that they would not, in fact, take a loss of non-Comcast VOIP as reason to expedite internet service repair.&lt;/p&gt;&lt;p&gt;Second, if you get your VOIP through Comcast, does this mean they can't eliminate your service completely if you go over their bandwidth cap?  This one, I'm a little uncertain about.  I don't know if it's possible to get Comcast phone without Comcast internet.  Maybe you can, and maybe the 1 year ban on Comcast service only applies to the internet service and not phone (or TV for that matter).  I don't know about this one.&lt;/p&gt;&lt;p&gt;Third, and most important I think:  if telephone service is a utility, and its function is directly dependent on internet service (as is the case of VOIP), how is internet service &lt;i&gt;not&lt;/i&gt; a utility?  I suppose one could argue that service could still be provided by the copper wires still in place left by &lt;strike&gt;US West&lt;/strike&gt; &lt;strike&gt;Qwest&lt;/strike&gt; CenturyLink, but I'm not so sure; not only are those lines disconnected (as evidenced by my complete loss of dial tone when Comcast VOIP was down), but it wouldn't explain why Comcast seems so concerned when their dial tone is not being provided.  By failing or refusing to provide the service that telephone depends on (when the internet is down, or Comcast cuts you off for so-called "excessive use"), Comcast effectively cuts off your access to a utility.  It would seem that they should either be obligated to provide your service, or re-connect your copper lines to get at least emergency dial tone service restored as soon as possible.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;Now, a hype and gripe about Comcast service.  First, the gripe:  when the tech came out to fix our service, the modem was getting an inconsistent signal, so he decided to replace the (leased) modem with a newer model.  The new model, an SMC model SMCD3GNV, had some extra features, like a built-in router with four gigabit ethernet ports and a WiFi access point.  While this might be convenient for some, it was not for me.  I already had a Linux server acting as my home router, and I had my own WiFi access points configured for my home network.  I did not want an extra level of NAT or another WiFi network, even if I never used it.  Unfortunately, the ability to either disable NAT or turn off WiFi were not available in the modem's UI.  Doing a little internet searching, I found that this was a common complaint.  While I was able to set up a serviceable alternative by putting my server in the router's DMZ, I still was not happy with the double-NAT, and I definitely was not comfortable with the enabled WiFi.&lt;/p&gt;&lt;p&gt;Now, the hype.  The Comcast tech, Justin, promised he would ask his more experienced techs about this the next morning and find a solution for me.  In the meantime, my internet searches pointed to the fact that some of these "advanced" configurations could (only) be done by Comcast remotely, and contacting the Twitter account &lt;a href="http://www.twitter.com/comcastcares"&gt;@ComcastCares&lt;/a&gt; can get the WiFi turned off.  I also came across a recommendation to contact an admin on the &lt;a href="http://forums.comcast.com"&gt;Comcast forums&lt;/a&gt;.  I did both.  As I was composing my message to the forum admin, I got a reply from someone monitoring @ComcastCares, who, after getting my service phone number, promised to have a tech take care of it in the morning.&lt;p&gt;&lt;p&gt;The next morning, I saw a reply from @ComcastCares saying they had turned the WiFi off.  I then saw a slightly later reply from the forum admin, saying the WiFi had already been turned off, but he put the modem into bridging mode, and that I should be able to control everything from my own router again.  Since I was already at work, I had to call my wife and walk her through the steps to reset networking on the Linux server, and as soon as she did and networking came back up, everything was back to normal.&lt;/p&gt;&lt;p&gt;I called Justin (who had left me his cell number) to let him know we were ok, and he thanked me for the call, as he had talked with techs in his office about the issue (and their frustrations at not being able to change these settings themselves), and was preparing to make another trip out to simply replace that modem with one that didn't try to do everything for me.&lt;/p&gt;&lt;p&gt;Kind of a crappy situation brought on by Comcast's own choice in modems and firmware with inaccessible configuration settings, but the three people involved were willing and able to work through it to get me what I wanted.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-6550246715149014363?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/6550246715149014363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=6550246715149014363&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/6550246715149014363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/6550246715149014363'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2011/07/why-is-internet-not-utility.html' title='Why is the internet not a utility?'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-2861161227820194319</id><published>2011-07-16T16:45:00.000-06:00</published><updated>2011-07-16T16:46:19.597-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='driving'/><title type='text'>My $6000 mistake</title><content type='html'>&lt;p&gt;After my 2004 Prius was totaled, I had one prevaling thought when it came to transportation:  I needed to &lt;i&gt;replace&lt;/i&gt; the car.  As such, I went looking for another Prius, loaded, with the JBL sound system, bluetooth, and GPS navigation.  My wife strongly encouraged me to look for a later model, as it would be better covered by warranties and have less of a chance of something going wrong.  Because rising gas prices have been driving up the demand for hybrids, and because the recent tsunami in Japan was hindering supply, my choices were rather limited.  I found a couple dealers with Priuses, and it came down to a 2005 base model and a 2009 loaded touring edition.  The '05, without any options, felt too much like "just a car"; while the loaded '09 offered all the bells and whistles I was used to, plus had newer components which made for a better warranty and piece of mind.&lt;/p&gt;&lt;p&gt;The cost, however, was really tough to swallow.  After the check from my insurance company, I ended up owing over $13k, which I financed with the intention of pulling money from various accounts and paying off as soon as possible.&lt;/p&gt;&lt;p&gt;After a couple weeks of driving, however, I noticed the strong new car scent had given way to a strong cigarette smell.  Not a smoker myself, the smell was beyond irritating &amp;mdash; and the fact that I take my kids to school in the morning made me more concerned about the environment I was using for transportation.  This and the out-of-pocket expense weighed heavily on me for the following weeks.&lt;/p&gt;&lt;p&gt;When fabric cleaners and deodorizers failed to improve things, I came to the conclusion that I had made a terrible mistake.&lt;/p&gt;&lt;p&gt;I knew I would take a small bath on the cost of the car compared to its trade-in value, so I began the search for an inexpensive and economical car (and, to satisfy my wife's concerns about warranties, a relatively late-model with a good warranty).  My search led me to a used 2010 Chevy Cobalt previously used as a rental car, which I couldn't beat for the mileage/year/economy at that price.&lt;/p&gt;&lt;p&gt;It's a good car, drives well, is comfortable, and, very imporantly, does not have a cigarette smell.  It doesn't have the bells and whistles of the Prius, but those are features I didn't really need &amp;mdash; my phone can serve as a GPS well enough (and one that's continually up-to-date), and plugging the phone's headphone jack into the stereo's auxillary input (which I do out of habit anyway, as I listen to podcasts or audiobooks almost exclusively) is a more-than-acceptable substitute for a wireless handsfree bluetooth connection.  Plus, the Cobalt has features that even the 2009 Prius didn't:  a tire pressure and oil life monitor, daytime running lights, automatic headlights (seriously, for all the bells and whistles, how can the Prius &lt;i&gt;not&lt;/i&gt; have automatic headlights?), and doors that automatically lock when the car is in gear.  Plus, the Cobalt does not attempt to control everything through a single LCD touchscreen.  (It seems cool, but it ends up being far more distracting and annoying when you have to switch screen modes just to adjust the temperature or see what radio station is playing &amp;mdash; which might be why the 2010 model Prius went back to discrete radio and climate control panels.)&lt;/p&gt;&lt;p&gt;The car cost me just about the exact price of my late Prius, but after figuring in the loss on trade-in, taxes, and two dealer delivery charges, I estimate I lost somewhere in the ballpark of $6000 on the deal.  But it was a huge weight off of my mind to be able to pull that money together, write a single check, and buy the car outright without any financing whatsoever.&lt;/p&gt;&lt;p&gt;The cost all comes down to a simple mistake.  When I went to get a replacement car, I focused on &lt;i&gt;replacing&lt;/i&gt; my old car with a near-equal match.  If I had instead focused on what I &lt;i&gt;need&lt;/i&gt; instead of what I &lt;i&gt;want&lt;/i&gt;, I could have avoided the extra cost &amp;mdash; or taken that extra money and considered more expensive but more economical or featured cars.&lt;/p&gt;&lt;p&gt;Do I miss my old Prius?  Absolutely.  It was my fun car, and I enjoyed it for the nearly seven years I was privileged to drive it.  I'm glad I was able to get my fun car.  But what I didn't initially accept was, it was time to move on.  Now that I've accepted that, I feel much better about my old car's replacement, and I can move ahead.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-2861161227820194319?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/2861161227820194319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=2861161227820194319&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/2861161227820194319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/2861161227820194319'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2011/07/my-6000-mistake.html' title='My $6000 mistake'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-3649355906207239116</id><published>2011-07-11T20:33:00.000-06:00</published><updated>2011-07-11T20:33:12.372-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bandwidth'/><title type='text'>The Day Comcast's Data Cap Policy Killed My Internet for 1 Year</title><content type='html'>&lt;p&gt;I've long complained about internet data caps.  While I haven't yet exceeded Comcast's 250GB cap, I noticed a blog post retweeted across Twitter with a real-life anecdote of one person's experience getting cut off from Comcast internet service for doing just that.  &lt;a href="http://www.ozymandias.com/the-day-comcast’s-data-cap-policy-killed-my-internet-for-1-year"&gt;link&lt;/a&gt;&lt;/p&gt;&lt;p&gt;In his case, service was likely&lt;sup style="font-size:smaller;"&gt;*&lt;/sup&gt; due to an increase in uploading large files to cloud services that are becoming more and more popular.  My own usage is still primarily downloading data (above 95% of my monthly use is downloading); but as we have new Windows 7 smartphones that automatically upload pictures to the Skydrive service, and the upcoming Mango update promises to do the same with HD videos as well, I can see uploading rates increasing for me as well.&lt;/p&gt;&lt;p style="font-size:smaller;"&gt;&lt;sup&gt;*&lt;/sup&gt;"Likely", because Comcast does not provide details about data usage, even to show how much is up- vs. downloading.&lt;/p&gt;&lt;p&gt;I do find it odd that, instead of charging for overages and milking more money out of their customers, they are throwing customers away.  I imagine there are users who would much rather pay extra than being cut off completely.  And yet, they are effectively reducing their customer base, which will only shrink more as more people go over the cap by daring to use all these internet services other companies are so keen in innovating, which will only happen more often when Comcast refuses to increase the cap proportionally to how many services are available, the increase in bandwidth existing services use (i.e. more HD video available for streaming), and the increasing speed Comcast itself is providing to get to their arbitrary cap faster.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-3649355906207239116?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/3649355906207239116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=3649355906207239116&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/3649355906207239116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/3649355906207239116'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2011/07/day-comcasts-data-cap-policy-killed-my.html' title='The Day Comcast&apos;s Data Cap Policy Killed My Internet for 1 Year'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-8458745840488017721</id><published>2011-06-24T12:16:00.000-06:00</published><updated>2011-06-24T12:16:20.396-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>You have failed me for the last time, Firefox</title><content type='html'>&lt;p&gt;In my &lt;a href="http://www.yakkowarner.com/2011/06/firefox-jquery-and-registerstartupscrip.html"&gt;last post&lt;/a&gt;, I mentioned that Firefox was causing issues with my custom on/off control.  I solved that problem, but now I have a new one.&lt;/p&gt;
&lt;p&gt;When the on/off control renders, it renders with an &lt;code&gt;onclick&lt;/code&gt; attribute that calls the function that moves the slider and sets the value of the control in a hidden field.  If I want to add any more actions to the control (a common one is to change its color when the value is changed), I use the jQuery &lt;code&gt;.click()&lt;/code&gt; function to attach a JavaScript function to its click event.&lt;/p&gt;
&lt;p&gt;On a page with several on/off controls, I have bound click events to change their color and enable a save button on change.  It's worked every other time I've done this, and it works in this case as well &amp;mdash; except for Firefox.  For some reason, the last group of controls (which happen to be rendered in an ASP Repeater) do not fire the jQuery click event.  What's worse, even though clicking on them does in fact slide the button from one value to the other, it apparently is not setting the hidden form field to change the value &amp;mdash; and all that code is being run from JavaScript called in the &lt;code&gt;onclick&lt;/code&gt; attribute.&lt;/p&gt;
&lt;p&gt;I have found numerous references to jQuery click events not being fired in Firefox, but none of the solutions will help me here.  I can't move my code into the &lt;code&gt;onclick&lt;/code&gt; event, since I need to register the click handlers from different places; and nothing is apparently wrong with the code as it works as-is not only in other browsers, but in the &lt;i&gt;same&lt;/i&gt; browser elsewhere on the &lt;i&gt;same&lt;/i&gt; page.&lt;/p&gt;
&lt;p&gt;I have spent the better part of a day trying to find where this click event is being "swallowed", and why this code that works perfectly on IE, Opera, and Chrome is not functioning in Firefox.  I'm done.  It's an internal tool, and we have the luxury to mandate our users' browser choice to some degree.&lt;/p&gt;
&lt;p&gt;Firefox, I don't know what your problem is, but I am tired of wasting days of development time trying to find solutions for problems that &lt;i&gt;only exist in Firefox&lt;/i&gt;.  You &lt;u&gt;are&lt;/u&gt; the weakest link.  Goodbye.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-8458745840488017721?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/8458745840488017721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=8458745840488017721&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/8458745840488017721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/8458745840488017721'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2011/06/you-have-failed-me-for-last-time.html' title='You have failed me for the last time, Firefox'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-8918211071519380883</id><published>2011-06-17T16:55:00.000-06:00</published><updated>2011-06-17T16:55:57.231-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Firefox, jQuery, and RegisterStartupScript</title><content type='html'>&lt;p&gt;I have created a control for the web project I'm working on at work.  It's an On/Off slider control, very similar in appearance to the one used by iOS, that uses jQuery to animate the sliding switch on click.  Over time, I've added more features and support to it as requirements have come in &amp;mdash; its message text is configurable, it can raise its own postback events, and it even works in AJAX postbacks.  Someday, I might have to publish the code (maybe when I get rid of its dependence on images and make it size-adjustable as well).&lt;/p&gt;
&lt;p&gt;When the control is first rendered, the slider switch is centered halfway between "On" and "Off", and I call &lt;code&gt;Page.ClientScript.RegisterClientScriptBlock&lt;/code&gt; that calls that control's "set" function to slide the switch to the correct position.  (The control's client click event sets the control's value property and calls this same function to slide the switch back and forth on demand.)  It works great on IE, Opera, Chrome&amp;hellip; but not Firefox.  It would render the first few correctly, but somewhere halfway down the page (depending on how many switches were involved &amp;mdash; my particular example page had 10), the slider switches would remain in their centered, "unset" state.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.yakkowarner.com/2010/10/firefox-ajax-refresh-disaster.html"&gt;This&lt;/a&gt; is &lt;a href="http://www.yakkowarner.com/2011/01/holding-back-features-on-web.html"&gt;getting&lt;/a&gt; to be a &lt;a href="http://www.yakkowarner.com/2011/04/4096-bytes-is-more-than-enough-for.html"&gt;theme&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I found that, if I added an &lt;code&gt;alert()&lt;/code&gt; call before every &lt;code&gt;SetSlider&lt;/code&gt; call, then every switch would be set, except the last one.  If I reversed the calls so the &lt;code&gt;alert()&lt;/code&gt; came second, all the switches would be set.&lt;/p&gt;
&lt;p&gt;I was able to solve the problem by wrapping each &lt;code&gt;SetSlider&lt;/code&gt; call in a jQuery ready function (i.e., &lt;code&gt;$(function(){ &amp;hellip; });&lt;/code&gt;).  Because the control is self-contained and has no knowledge of other sliders on the page, that's a lot of ready functions; but jQuery seems to handle it without incident.  The only other thing I had to deal with was to ensure any startup functions I had to alter the switches' states &lt;i&gt;must&lt;/i&gt; come after those &lt;code&gt;SetSlider&lt;/code&gt; functions &amp;mdash; in my case, moving the code to the page's &lt;code&gt;PreRenderComplete&lt;/code&gt; event (because, according to &lt;a href="http://msdn.microsoft.com/en-us/library/ms178472.aspx"&gt;MSDN&lt;/a&gt;, the controls' &lt;code&gt;PreRender&lt;/code&gt; events, where I registered the &lt;code&gt;SetSlider&lt;/code&gt; methods, get called &lt;i&gt;after&lt;/i&gt; the page's).&lt;/p&gt;
&lt;p&gt;It works, but it still took a couple hours out of my day to find it and then fix it.  Thanks again, Firefox.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-8918211071519380883?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/8918211071519380883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=8918211071519380883&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/8918211071519380883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/8918211071519380883'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2011/06/firefox-jquery-and-registerstartupscrip.html' title='Firefox, jQuery, and RegisterStartupScript'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-4780975337553957268</id><published>2011-05-26T09:34:00.000-06:00</published><updated>2011-05-26T09:34:26.126-06:00</updated><title type='text'>When it rains, it pours</title><content type='html'>&lt;p&gt;You know, it would be nice if manure didn't hit the fan all at one time&amp;hellip; &lt;a href="http://www.yakkowarner.com/2009/06/hits-just-keep-on-coming.html"&gt;for once&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A week ago today, my car was hit in an &lt;a href="http://www.yakkowarner.com/2011/05/maybe-treating-it-as-four-way-stop-is.html"&gt;accident&lt;/a&gt;, which the cop blamed me for (still building my case against this for my court date in 2 months).  Sunday, I tried helping my wife cook by slicing carrots on the mandoline, when my thumb must've slipped, and I cut about a quarter inch into the end of my thumb.  Tuesday, I got a call from insurance telling me they're totaling the car, putting me in the difficult decision of fixing it and never expecting to resell it, or shelling out around ten grand on top of my car's value to replace it (since, with the earthquake in Japan and rising fuel costs, Priuses are getting hard to find).  Wednesday, my wife called me to tell me she got a ticket for making a right turn on red where allegedly there is a sign saying not to do that.  That night, at some point between picking my mother up from her house and going to a Toyota dealership to look for used Priuses before picking her truck up from the shop, my stereo bluetooth headset disappeared (a search of every place I had been since I last remember having it turned up nothing).&lt;/p&gt;
&lt;p&gt;At least, &lt;a href="http://www.yakkowarner.com/2009/05/name-them-one-by-one.html"&gt;as before&lt;/a&gt;, God gave me an umbrella.  I was uninjured in the accident.  I seem to be getting all the documentation I need to argue my case.  We actually &lt;i&gt;have&lt;/i&gt; money in savings (barely) to replace the car.  The amount they offered me for the car is actually quite fair.  The cut on my thumb was clean and somewhere between a quarter and a third through, shallow enough that it did not require any "reattachment".  My wife's traffic ticket, if paid promptly, will only result in a single point against her and not affect insurance.  I "get" to upgrade my car, not to mention change its color (I always hated the color of the one I've been driving for the past 6&amp;frac12; years), and I'm getting more for my car than the trade-in value the last dealer offered me.&lt;/p&gt;
&lt;p&gt;It still would be nice if all the bad stuff would stop now.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-4780975337553957268?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/4780975337553957268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=4780975337553957268&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/4780975337553957268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/4780975337553957268'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2011/05/when-it-rains-it-pours.html' title='When it rains, it pours'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-6289624098007597220</id><published>2011-05-19T09:34:00.002-06:00</published><updated>2011-05-20T16:32:18.859-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='driving'/><title type='text'>Maybe treating it as a four-way stop is best</title><content type='html'>&lt;p&gt;Long ago, I wrote about my annoyance at people who &lt;a href="http://www.yakkowarner.com/2008/10/how-dare-you-obey-rules-of-road.html"&gt;get the rules about malfunctioning lights backwards&lt;/a&gt;.  I rather wish I had one of those "ignorant" people on the road today.&lt;/p&gt;
&lt;p&gt;At the intersection leading into the train station, the lights were completely out.  Four-way stop.  I was going straight.  As I stopped, the car next to me turning left started to go, so I did as well.  Someone coming from the cross street in the far lane (on the other side of a full lane of traffic at a stop) plowed through the intersection and hit me.&lt;/p&gt;
&lt;p&gt;As I sat in my car (the door was jammed, so I couldn't get out right away), I looked up to verify the lights were in fact dark.  They were &amp;mdash; in my direction only.  The lights in the opposite direction, however, were flashing red, and the lights on the cross street, the one the other driver "plowed through", were flashing yellow.&lt;/p&gt;
&lt;p&gt;We both acted on information we had; the street light just gave two completely different sets of information.&lt;/p&gt;
&lt;p&gt;I made sure to point this fact out to the officer on the scene, who noted it.  I do have to appear in court in a couple months to answer a charge of "careless driving" because I failed to yield to her yellow light, so I can only hope the judge will acknowledge the screwed up lights and realize I acted appropriately.&lt;/p&gt;
&lt;p&gt;Of course, it wasn't until I was on the train in to work that I realized I should have taken pictures and video, especially of the lights in question.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-6289624098007597220?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/6289624098007597220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=6289624098007597220&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/6289624098007597220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/6289624098007597220'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2011/05/maybe-treating-it-as-four-way-stop-is.html' title='Maybe treating it as a four-way stop is best'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-767864964865211463</id><published>2011-05-15T13:26:00.000-06:00</published><updated>2011-05-15T13:26:47.445-06:00</updated><title type='text'>Want to fly? Change your plans.</title><content type='html'>&lt;p&gt;So, my mother was supposed to fly out on business today.  We called to see if she had made it and if there was anything she needed.  What did she say?&lt;/p&gt;
&lt;p&gt;They downsized her plane and bumped her because she did not check in &lt;i&gt;the day before the flight&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;The next flight available?  Tomorrow, 4pm.&lt;/p&gt;
&lt;p&gt;So any and all plans she had for today and tomorrow, including business meetings, have to be canceled or rescheduled.&lt;/p&gt;
&lt;p&gt;Add this to other horror stories we've heard first-hand &amp;mdash; including friends of ours who were bumped at the last minute and forced to delay their return home for a whole weekend with their two young children (did I mention that the airline had already put their luggage on the flight, so this family of four &lt;b&gt;had no clothes&lt;/b&gt; for that weekend?) &amp;mdash; and is it any wonder why I'd rather spend hours in a car driving to far away destinations than giving any money to this industry?&lt;/p&gt;
&lt;p&gt;And this is before factoring things in like insane surcharges for every little thing, and your choice of rape or pornography to get through security.&amp;hellip;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-767864964865211463?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/767864964865211463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=767864964865211463&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/767864964865211463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/767864964865211463'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2011/05/want-to-fly-change-your-plans.html' title='Want to fly? Change your plans.'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-5849231064287823373</id><published>2011-05-11T19:27:00.000-06:00</published><updated>2011-05-13T14:35:45.455-06:00</updated><title type='text'>My Jury Service</title><content type='html'>&lt;p&gt;A month or so ago, I received a summons in the mail to report for jury duty.  I let my employer know well ahead of time, and on the designated day (Friday), I reported to the county courthouse.&lt;/p&gt;
&lt;p&gt;I show up at 8am Friday morning.  I went through a security checkpoint that reminded me of the good old days of airport security, when it didn't include taking off your shoes and submitting to a physical search that would only be appropriate in an after-school special titled "Bad Touch".  In the jury room (a very large room with hundreds of chairs laid out in even rows), I picked up a questionnaire and started filling it out, while Fox News displayed on two TVs in the front.&lt;/p&gt;
&lt;p&gt;The questionnaire included a lot of personal questions, including things like "Have you or anyone in your family had an experience with a law enforcement officer recently?  Was it positive or negative?"  They also included the name of the person on trial and a long list of names of potential witnesses, asking if you knew or recognized anyone.  It also asked if there would be any difficulty serving the length of the trial, which was expected to last &lt;b&gt;eight days&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;When I was &lt;a href="http://www.yakkowarner.com/2005/11/now-i-get-it.html"&gt;last summoned&lt;/a&gt;, I was very upset that, as a contractor, I was only guaranteed the low legal limit of $50/day.  Now, as a full-time employee, I'd get my full pay, but only for the first three days, and then I'd be at that below-minimum-wage rate.  (&lt;a href="http://www.colorado.gov/cs/Satellite/CDLE-LaborLaws/CDLE/1248095305416"&gt;Colorado minimum wage&lt;/a&gt; is currently $7.36/hour, working out to not quite $60 per day.)  I'm not much happier about this.&lt;/p&gt;
&lt;p&gt;Time passed as more jurors reported in and started filling out their questionnaires.  After about an hour, the clerk addressed us, along with a judge, to thank us for our service and tell us how important jury service is.  We then watched a short video about jury service, in which people shared their thoughts about service.  I noticed that the testimonials included valid concerns (like "I had small children, and I worried about what I was going to do with them", "I was really busy at work and didn't know how I'd fit this in"), but then they said how good they felt doing their civic duty &amp;mdash; without addressing any of the concerns they initially expressed.  (So, what &lt;i&gt;did&lt;/i&gt; you do with your kids, ma'am?  How did you support your family making less than minimum wage, sir?)&lt;/p&gt;
&lt;p&gt;Our questionnaires were then gathered, at which point we were given a new randomized juror number.  We were then sent home, with instructions to call a certain number after 6pm to see if we were selected to return on Monday.&lt;/p&gt;
&lt;p&gt;This seemed like an unfair inconvenience.  I was unable to tell my employer if I would be at work on Monday or not until after office hours were closed.  I suppose my employer wouldn't know how long I would be out anyway, and the judge and attorneys need time to go through the 150-some questionnaires, but still, it doesn't seem like the needs of the citizens are taken into account at all.&lt;/p&gt;
&lt;p&gt;I called, and sure enough, I was selected to return on Monday.  I sent an email to my employer to give them what notice I could.&lt;/p&gt;
&lt;p&gt;On Monday, I reported at the designated 9am time (which at least gave me plenty of time to drop my kids off at school, as usual).  Reporting in were the hundred or so jurors from Friday selected to return, plus another group asked to report for the first time on Monday.  The Monday jurors were processed first.  The clerk announced that their trial was expected to take five days.  They filled out their own questionnaires, and again we watched the video, temporarily interrupting the CNN discussion of Osama Bin Laden that was playing on the TVs today.  I noticed that the video stated the average trial lasts 1-3 days, and I couldn't help but wonder how many trials must last less than a day to get that average down, considering our trial was 8 and theirs was 5.&lt;/p&gt;
&lt;p&gt;Finally, around 10:30am, we were sent up to the courtroom.  There was probably at least 20 minutes spent getting everyone seated, as we were supposed to sit in order of our juror numbers in a particular configuration around the courtroom.  (The judge and attorneys had seating charts, and this would ensure they knew to whom they were speaking.)  Some additional jurors had been dismissed, so there were some holes in the jury box.  The first of us on the benches were called up to fill in the holes.  As luck would have it, I was the first in line and ended up in the jury box to start.  When I was in jury selection 6 years ago, I noticed that those people in the jury box at the beginning were among the first to be dismissed, and those called to replace them rarely were; so I had good feelings about being dismissed before hitting a substantial drop in income for a few days.&lt;/p&gt;
&lt;p&gt;Questioning began (what is known in the court as &lt;i&gt;voir dire&lt;/i&gt; &amp;mdash; I guess I did learn something from that jury service video).  The judge started with basic questions, such as whether or not any of us knew or recognized anyone else in the courtroom &amp;mdash; including the defendant, whom I was honestly surprised to see present.  I don't remember the defendant being present the last time I went through this, and I have to wonder if any of the potential jurors felt uncomfortable answering questions in front of him.&lt;/p&gt;
&lt;p&gt;One of the questions the judge asked every juror was if there was any hardship in serving.  I mentioned that the drop in pay would make it very difficult to support my family.  He did say that, if it meant falling behind in bills, he would not keep anyone there.  I answered honestly that it would be difficult, but I would at least survive.  (It would take dipping into savings, but it would have been possible.  I could've lied and said it would've been worse, but I didn't think that would be prudent, especially since we had a lesson in church the day before that just happened to be all about honesty.)&lt;/p&gt;
&lt;p&gt;After the judge got through everyone, the prosecuting attorney began asking questions, probing for any biases that may make judging this particular case difficult.  I was asked one question directly, but then I noticed that he didn't seem that interested in me thereafter.  So, after our lunch break (during which I went to Walgreens to get some Excedrin for the headache that was building up all morning), I decided to remedy this situation.  Whenever the attorney asked a general question ("Does anyone else feel like this?"), I raised my hand.  Well, any time I could come up with something to say, anyway.  I answered honestly, but I tried to answer a lot, so when it came time for the attorneys to dismiss jurors, I was on their mind.&lt;/p&gt;
&lt;p&gt;When it came time for the dismissals (&lt;i&gt;peremptory challenges&lt;/i&gt; &amp;mdash; something I don't think was in the video but was explained at length by the judge), I ended up being dismissed by the defense attorney.  I think about five people were dismissed before me, sent downstairs to collect their certificates of service (among other things, used as proof to employers of time served).  They must have been discussing who they thought would remain on the jury, because when I showed up, there was a collective look of astonishment on their faces as one said, "You?  No way, I thought you were a shoe-in!"&lt;/p&gt;
&lt;p&gt;I'm not sure if I said anything in particular that got me dismissed.  There was a question asked by the defense attorney along the lines of, "Could someone have a legitimate reason to lie to the police?  If they do, does that mean they must be guilty of something?"  I answered (honestly) that I wouldn't think they were "guilty", but it would color my perception of their testimony &amp;mdash; if they lied to the police about one thing, what else might they lie about?  While I can't know the specifics of the case, he must've had a reason for asking; I would guess that either the defendant or one of his witnesses might've lied to the police during the course of the crime/investigation, and my opinion might lead me to discount their integrity.  Or maybe it was just my visibility in questioning, or a combination of both.  Whatever the case, I wasn't too upset to not have to worry about supporting my family for the next week and a half.&lt;/p&gt;
&lt;p&gt;In a way, I'm kind of disappointed I didn't get to hear the case.  The charges were read to us, so I know it had to do with domestic violence and second degree murder.  I would've been much more willing to serve in this very important process, too, if they didn't make it so blasted difficult to take care of your regular life in order to do this service.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-5849231064287823373?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/5849231064287823373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=5849231064287823373&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/5849231064287823373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/5849231064287823373'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2011/05/my-jury-service.html' title='My Jury Service'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-3798415745893398917</id><published>2011-04-28T11:52:00.000-06:00</published><updated>2011-04-28T11:52:00.226-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>4096 bytes is more than enough for everybody</title><content type='html'>&lt;p&gt;Ever try to make an AJAX call from JavaScript, only to find out that your data is truncated at around the 4k mark?  If so, you must be using Firefox 3.  Although there is a workaround described &lt;a href="http://www.coderholic.com/firefox-4k-xml-node-limit/"&gt;here&lt;/a&gt;, it means you have to write extra, special code to check for a custom property to really get all the data.&lt;/p&gt;
&lt;p&gt;You can test this problem using &lt;a href="http://www.quirksmode.org/dom/tests/textnodesize.html"&gt;this QuirksMode&lt;/a&gt; page.  The page notes other limits on Opera and the Macintosh version of IE, but on the current (v11) version of Opera, I was unable to duplicate it.  I also don't have a Mac, so I couldn't verify it there, either.  Only Firefox fails to copy the whole text block.&lt;/p&gt;
&lt;p&gt;Apparently, this has been fixed in Firefox 4, but that's small consolation when you're tasked with supporting &lt;a href="http://gs.statcounter.com/#browser_version-US-monthly-201101-201103"&gt;what people are actually using&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/8166852-3798415745893398917?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/3798415745893398917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=3798415745893398917&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/3798415745893398917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/3798415745893398917'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2011/04/4096-bytes-is-more-than-enough-for.html' title='4096 bytes is more than enough for everybody'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-4912157816250535529</id><published>2011-04-21T11:52:00.000-06:00</published><updated>2011-04-21T11:52:52.981-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Let me url that for you</title><content type='html'>&lt;p&gt;Today's programming annoyance is brought to you by the .Net Framework.&lt;/p&gt;
&lt;p&gt;If you add a style to an HtmlControl in code &amp;mdash; for example, the &lt;code&gt;list-style-image&lt;/code&gt; to a list item element &amp;mdash; you might use something like the following:&lt;/p&gt;
&lt;div style='max-height:250px;overflow:auto;border:1px solid #ccc;white-space:nowrap;'&gt;&lt;code&gt;&lt;pre&gt;control.Style.Add("list-style-image","none");&lt;/pre&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;You might expect that the &lt;code&gt;style&lt;/code&gt; element would contain &lt;code&gt;"list-style-image: none;"&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Apparently, you'd be wrong.  The tag generated looks like this:&lt;/p&gt;
&lt;div style='max-height:250px;overflow:auto;border:1px solid #ccc;white-space:nowrap;'&gt;&lt;code&gt;&lt;pre&gt;&amp;lt;li style="list-style-image: url(none);"&amp;gt;&lt;/pre&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;There is a workaround, but it depends on you being able to specify all &lt;code&gt;list-style&lt;/code&gt; properties at once.  Using the shortcut, this code:&lt;/p&gt; 
&lt;div style='max-height:250px;overflow:auto;border:1px solid #ccc;white-space:nowrap;'&gt;&lt;code&gt;&lt;pre&gt;control.Style.Add("list-style","none none");&lt;/pre&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;will generate the expected HTML, unmangled (and set both the &lt;code&gt;list-style-type&lt;/code&gt; and &lt;code&gt;list-style-image&lt;/code&gt; properties).&lt;/p&gt;
&lt;p&gt;Having &lt;code&gt;list-style-image: url(none)&lt;/code&gt; may not make your page look broken, but it will result in a browser request for the file "none" and result in some excessive 404 logs on your server.&lt;/p&gt;
&lt;p&gt;If you had an actual image and set it with &lt;code&gt;control.Style.Add("list-style-image","url(imageName.jpg)");&lt;/code&gt; the style would not suddenly get "double-wrapped" with the &lt;code&gt;url()&lt;/code&gt; function.  By wrapping your value with &lt;code&gt;url()&lt;/code&gt; "just in case" you forgot it, Microsoft tries to protect you from yourself, and ultimately causes more headaches by preventing you from setting the style to a perfectly valid value.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-4912157816250535529?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/4912157816250535529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=4912157816250535529&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/4912157816250535529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/4912157816250535529'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2011/04/let-me-url-that-for-you.html' title='Let me url that for you'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-7122599309448067939</id><published>2011-04-01T21:09:00.000-06:00</published><updated>2011-04-01T21:09:42.061-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='religion'/><title type='text'>Hollywood's War on Christianity Now Using Aliens</title><content type='html'>&lt;p&gt;I recently saw the movie &lt;i&gt;Paul&lt;/i&gt;.  It's a comedy about two young adult male British nerds who are realizing a longtime dream of coming to America to visit Comic-Con, followed by taking a tour of famous UFO sites in the US (like Roswell and Area 51).  As they're traveling, they witness a car suddenly veer off the desert highway and crash.  When they stop to investigate, they meet Paul, a rather foul-mouthed alien who has escaped government capture and is trying to get home.&lt;/p&gt;
&lt;p&gt;The movie is pretty funny, with lots of nerd references &amp;mdash; from &lt;i&gt;Star Wars &lt;/i&gt;(the cantina theme being played in a trucker bar, a guy shooting out his CB radio as he murmurs "Boring conversation anyway") to &lt;i&gt;Close Encounters &lt;/i&gt;(a spaceship landing at Devil's Tower, a large firework that plays the five-note theme) and &lt;i&gt;Aliens &lt;/i&gt;(a character quotes "Get away from her, you b---", a line spoken by Sigourney Weaver in &lt;i&gt;Aliens&lt;/i&gt;, &lt;i&gt;to&lt;/i&gt; Sigourney Weaver's character in &lt;i&gt;Paul&lt;/i&gt;).  It is also full of bathroom and locker room humor that's so popular with the kids these days.&lt;/p&gt;
&lt;p&gt;The part where it starts to dig at religion comes when, soon after meeting Paul, the Brits decide to pull their RV into an RV park.  They are greeted by a young blonde girl, Ruth, who comments on how she'd like to travel someday but has never gone anywhere in her life yet.  The conversation is interrupted by a gruff voice calling her back to the office/house for "PRAYERS!"&lt;/p&gt;
&lt;p&gt;The next day, Ruth visits the Brits' RV, and she starts to reveal herself as what I like to call a "Strict Creationist" &amp;mdash; someone who believes in the literal word of the Bible, that the Earth was created 4,000 years ago in a process that spanned six days, and that there is no possible way there could be "alien life" elsewhere, as we were all created in God's image.  Paul, somewhat put out by this, emerges from his hiding place in the bathroom.  After fainting (something of a running gag in the film), she awakens and tries to convince herself it was her imagination, until she sees Paul again.  She then goes into a fit of hysterics.&lt;/p&gt;
&lt;p&gt;Up to this point, it's not so bad.  Hollywood loves its stereotypes, especially taken to extremes.  An openly gay character will be extremely flamboyant; a character born in the Lone Star State will almost invariably be wearing a cowboy hat and calling every female "Darlin'".  It's almost a foregone conclusion that an openly Christian character will end up being extreme fundamentalist.&lt;/p&gt;
&lt;p&gt;To stop her fit and from denying his very existence, Paul does this "alien thing" where he gives Ruth all of his knowledge and experience, including memories of his galactic travels.&lt;/p&gt;
&lt;p&gt;Here's where it starts to turn south.&lt;/p&gt;
&lt;p&gt;Filled with this knowledge, Ruth decides that &lt;i&gt;all&lt;/i&gt; of what she believed is wrong, decides there is no God, and she is free to swear and fornicate.  She then spends the rest of the movie trying to swear (in a manner not completely unlike Captain Kirk trying to "fit in" to contemporary Earth in &lt;i&gt;Star Trek IV&lt;/i&gt;).  Paul does make a token effort at trying to settle her down and say his experience doesn't &lt;i&gt;necessarily&lt;/i&gt; preclude the existence of God, but his comment is ignored.&lt;/p&gt;
&lt;p&gt;Going from one extreme to another isn't completely out of place in a low-brow Hollywood comedy.  But the telling scene comes at the end, when, in a very sober moment, Paul says he's sorry for destroying Ruth's faith.  Her reply?  "You didn't destroy me; you &lt;u&gt;freed&lt;/u&gt; me."&lt;/p&gt;
&lt;p&gt;That actually made me a little angry.  This was not a comedic scene; it was said with all seriousness, like it was one of the morals of the story.  Faith is confining, and a foul mouth and spread legs is freedom.  The disdain for religion is reinforced when Ruth's father wishes him well by saying "God be with you", and Paul scoffs, "Yeah, whatever."&lt;/p&gt;
&lt;p&gt;I know it's just a story, and I should really just relax.  And, when it comes down to it, I do see fundamentalism to be rather confining.  I believe God has created this whole universe and there are many wonders and possibilities we have yet to even discover; and refusing to acknowledge wonders God has created because you cling to your narrow interpretation of what you know of Him today &lt;i&gt;is&lt;/i&gt; akin to wearing blinders.  I just object to this assertion that immorality and atheism is automatically superior to religion.  These things are never "free", whether you believe in God or not &amp;mdash; not believing does not release you from the consequences.  And I'm not just talking about "fire and damnation".  Promiscuity can lead to unwanted pregnancies, diseases, lack of trust in relationships; foul language can lead to loss of respect.&lt;/p&gt;
&lt;p&gt;But, I guess, if you really believe your existence is over and done in 80 years, even these "little" consequences don't mean much, either.&amp;hellip;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-7122599309448067939?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/7122599309448067939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=7122599309448067939&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/7122599309448067939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/7122599309448067939'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2011/04/hollywoods-war-on-christianity-now.html' title='Hollywood&apos;s War on Christianity Now Using Aliens'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-7418704037758585452</id><published>2011-03-06T16:35:00.000-07:00</published><updated>2011-03-06T16:35:37.944-07:00</updated><title type='text'>Bandwidth for February</title><content type='html'>&lt;p&gt;We're getting closer.  February's data usage clocked in at 213.98GB (196GB according to Comcast's meter).  In addition to more and more shows on Netflix being delivered in HD, I did rebuild my laptop because of issues related to attempting to install the Internet Explorer 9 beta.  Since I rebuilt and tried the IE9 beta again (to determine if my issues were in fact related to the new browser &amp;mdash; they were), I ended up rebuilding twice.  This meant downloading drivers twice.  In addition to the software I downloaded for installation, I also had to download the games I had purchased on Steam, Games for Windows Live, and Impulse.  (They were on a good enough sale for me to purchase them this way, but one of the reasons I dislike digital downloads is I am stuck with a long download process instead of just inserting a disc.)&lt;/p&gt;
&lt;p&gt;February's usage may have been a little high due to an unusual circumstance (rebuilding a laptop and re-downloading software), but according to the online meter, I've already used 50GB for the first six days of March.  (vnstat on my server is projecting a monthly usage of 244.46GB based on use so far.)&lt;/p&gt;
&lt;p&gt;So I burned through a lot of monthly bandwidth.  And I still haven't reinstalled everything.&lt;/p&gt;
&lt;p&gt;On Comcast's data usage page is the following text:&lt;blockquote&gt;Your Comcast High-Speed Internet service has a monthly data usage allowance of 250 gigabytes (GB). If you are wondering whether you are at risk of exceeding this 250GB threshold, you should know that the vast majority - around 99% - of Comcast customers use significantly less than 250GB per month.&lt;/blockquote&gt;&lt;/p&gt;
&lt;p&gt;I have to wonder if that is still true (since this was implemented back in 2008), and how long it will hold.  I also wonder how long it'll be before I hit that cap myself.  At least I know what to expect if and when that happens, from their FAQ:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;b&gt;What will happen if I exceed 250 GB of data usage in a month?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;The vast majority - more than 99% - of our customers will not be impacted by a 250 GB monthly data usage threshold. If you exceed more than 250 GB, you may receive a call from the Customer Security Assurance ("CSA") team to notify you of excessive use.  At that time, we will tell you exactly how much data you used.  When we call you, we try to help you identify the source of excessive use and ask you to moderate your usage, which the vast majority of our customers do voluntarily.  If you exceed 250GB again within six months of the first contact, your service will be subject to termination and you will not be eligible for either residential or commercial internet service for twelve (12) months.  We know from experience that most customers curb their usage after our first call.  If your account is terminated, after the twelve (12) month period expires, you may resume service by subscribing to a service plan appropriate to your needs.&lt;/p&gt;
&lt;p&gt;Our practice for the past several years has been to call only our heaviest data users, and this practice remains the same now that the 250GB data usage threshold is in effect. We may change our practice but will, of course, provide notice to you of any change.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Will Comcast change?  Well, there is this noncommittal statement in the FAQ:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;b&gt;Will Comcast ever revisit the 250 GB threshold and raise it in the future as bandwidth intensive activities become more and more popular?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;We recognize that the Internet is constantly changing and we are committed to continuous improvement. We will continue to evaluate our policies to ensure we provide the best online experience possible. It seems reasonable to assume that this will change over time, as the Internet and our service offerings evolve, though we have not committed to doing so.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Considering Comcast's actions against Level 3 that are &lt;a href="http://gigaom.com/video/netflix-comcast-hates-us-sort-of-maybe/"&gt;suspiciously harmful to Netflix&lt;/a&gt;, I would be surprised if they adjust their policy when most of my data usage does happen to be Netflix.&lt;/p&gt;
&lt;p&gt;As much as I am loathe to suggest it, it may be time to look at Qwest's offerings.&amp;hellip;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-7418704037758585452?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/7418704037758585452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=7418704037758585452&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/7418704037758585452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/7418704037758585452'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2011/03/bandwidth-for-february.html' title='Bandwidth for February'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-1297387746409766368</id><published>2011-01-18T21:26:00.000-07:00</published><updated>2011-01-18T21:26:21.496-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Holding back features on the web</title><content type='html'>&lt;p&gt;If I were to say there's a CSS 3 feature that all major browsers support except one, which browser would you guess is lacking?&lt;/p&gt;

&lt;p&gt;The answer for today is Mozilla Firefox.&lt;/p&gt;

&lt;p&gt;It has come up several times on my current project where we've needed to take a variable amount of information and stuff it into a limited space, where aesthetics demand we truncate the data instead of allowing an overflow or a word wrap.  The typical way to do this is with an ellipsis, but at what point one should truncate the message is usually the result of guesswork.  Checking to see if a string is over, say, 35 characters and cutting it off if it is may work in most cases; but because in a proportional font, the same number of characters can be different sizes depending on which actual characters are used, any fixed number will result in some data elements appearing too short, and a few appearing too long and wrapping or overflowing anyway.&lt;/p&gt;

&lt;p&gt;Enter the &lt;code&gt;text-overflow&lt;/code&gt; style.  In a fixed &lt;code&gt;div&lt;/code&gt; or &lt;code&gt;span&lt;/code&gt;, setting &lt;code&gt;style="text-overflow: ellipsis;"&lt;/code&gt; will cause the browser to truncate the contents with an ellipsis if, when, and where it is needed.&lt;/p&gt;

&lt;p&gt;Except for Firefox.  Since CSS 3 is still technically in "draft", the coders behind Firefox have decided not to implement &lt;code&gt;text-overflow&lt;/code&gt;, despite it being on the &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=312156"&gt;bug list&lt;/a&gt; since 2005.  Mozilla's own developer forum shows that Firefox is the &lt;a href="https://developer.mozilla.org/En/CSS/Text-overflow"&gt;only browser to &lt;i&gt;not&lt;/i&gt; implement this&lt;/a&gt; to date.&lt;/p&gt;

&lt;p&gt;Oddly enough, this is the second time Firefox has failed me recently (the first being a misbehaving &lt;a href="http://www.yakkowarner.com/2010/10/firefox-ajax-refresh-disaster.html"&gt;feature&lt;/a&gt; that plays havoc with AJAX queries).&lt;/p&gt;

&lt;p&gt;I found two solutions on the web.  One is to use something called XUL binding.  The procedure (described &lt;a href="http://www.rikkertkoppes.com/thoughts/2008/6/"&gt;here&lt;/a&gt;) involves creating an XML document that describes the requested behavior, and then using a Mozilla-specific CSS directive to bind it to the element.  Unfortunately, not only does this require another document, but it may conflict with the &lt;code&gt;text-overflow&lt;/code&gt; style such that only one or the other will work, but not both.  Also, following the comments in the &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=312156"&gt;bug&lt;/a&gt;, XUL appears to be going away with Firefox 4, and with &lt;code&gt;text-overflow&lt;/code&gt; still not implemented, this workaround will work no longer.&lt;/p&gt;

&lt;p&gt;The second solution uses the JavaScript library &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt;.  The function (which I found at &lt;a href="http://devongovett.wordpress.com/2009/04/06/text-overflow-ellipsis-for-firefox-via-jquery/"&gt;Devon Govett's blog&lt;/a&gt;), when applied to a web element, takes the text, recreates it in a clone of the element, starts truncating text as necessary until it finds text that fits in the element, and replaces the text in that element.  It's not terribly efficient as it iteratively tests the text on each element, and if the element can change size you either have to update it manually or tell the script to constantly check the element and recompute; but it does do the job that Mozilla won't.  Fortunately, we're already using jQuery, so adding an extension was a trivial task.&lt;/p&gt;

&lt;p&gt;I don't know if it's some higher ground they're trying to take by not implementing "draft" features, but the fact remains, as an end user of browsers, to me, they appear to be stubbornly behind the curve.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-1297387746409766368?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/1297387746409766368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=1297387746409766368&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/1297387746409766368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/1297387746409766368'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2011/01/holding-back-features-on-web.html' title='Holding back features on the web'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-8527948374443343995</id><published>2011-01-14T12:47:00.000-07:00</published><updated>2011-01-14T12:47:51.723-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>ASP.Net, Dynamic Controls, and ViewState, revisited</title><content type='html'>&lt;p&gt;At my current job, we are encouraged to share tips and ideas with other developers.  I thought it could be useful to demonstrate the problem of dynamic controls and ViewState and my solution (posted three years ago &lt;a href="http://www.yakkowarner.com/2008/01/aspnet-dynamic-controls-and-viewstate.html"&gt;here&lt;/a&gt;), since it not only is a problem that could come up in our web development, but it provides a useful opportunity to review the page life cycle.&lt;/p&gt;

&lt;p&gt;So I grabbed my sample code and opened it in Visual Studio 2010.  The good news is, it still works as advertised.  However, I wanted to demonstrate the problem along with the solution; so I removed all my "extra" code.  I was rather startled to find that the old problem didn't manifest itself.  When I typed in data to one control and clicked a button to add another, the first control retained all its data.&lt;/p&gt;

&lt;p&gt;It seems that the .Net Framework got some improvements over the years.  The first improvement is that it seems ASP.Net is far more consistent in naming controls that are added to the page at run-time.  (Part of the original problem was, when a control was loaded on page load vs. later in an event handler, the dynamically-assigned ID would be different.)  The second is, if a control is loaded later in the life cycle, it does actually go back to the ViewState and re-load any applicable data.  (It used to be very unreliable in this regard.)&lt;/p&gt;

&lt;p&gt;I did find that things were not all roses.  If you add a bunch of controls and start removing controls from the middle of the list, control data would get lost.  Also, if you delete controls in the middle of your list and re-add controls, the controls may get added in the middle of the list instead of the end.&lt;/p&gt;

&lt;p&gt;The solution is much easier than it used to be:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Create a member variable to hold the list of IDs (or whatever data is required to recreate the control &lt;i&gt;and its ID&lt;/i&gt;) &amp;mdash; in this example, I'm using &lt;code&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt; &lt;font color="#2B91AF"&gt;List&lt;/font&gt;&amp;lt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&amp;gt; _childControlIds&lt;/code&gt; to just store the IDs, since the control type and location is always the same constant.&lt;/li&gt;
&lt;li&gt;Create a Page Load event handler that looks like this:
&lt;div style='max-height:250px;overflow:auto;border:1px solid #ccc;white-space:nowrap;'&gt;&lt;code&gt;&lt;pre&gt;&lt;font color="#000000"&gt;&lt;font color="#0000ff"&gt;private void&lt;/font&gt; Page_Load(&lt;font color="#0000ff"&gt;object&lt;/font&gt; sender, &lt;font color="#2B91AF"&gt;EventArgs&lt;/font&gt; e) {
 &lt;font color="#0000ff"&gt;if&lt;/font&gt; (!IsPostBack) {
  _childControlIds = &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#2B91AF"&gt;List&lt;/font&gt;&amp;lt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&amp;gt;();
  addAField(&lt;font color="#0000ff"&gt;null&lt;/font&gt;).InitializeNewControl(); &lt;font color="#008000"&gt;//Optional - create a new control, and initialize its data&lt;/font&gt;
 } &lt;font color="#0000ff"&gt;else&lt;/font&gt; {
  &lt;font color="#0000ff"&gt;if&lt;/font&gt; (ViewState[&lt;font color="#A31515"&gt;"ControlCount"&lt;/font&gt;] &lt;font color="#0000ff"&gt;as string&lt;/font&gt;[] != &lt;font color="#0000ff"&gt;null&lt;/font&gt;) {
   _childControlIds.AddRange((ViewState[&lt;font color="#A31515"&gt;"ControlCount"&lt;/font&gt;]) &lt;font color="#0000ff"&gt;as string&lt;/font&gt;[]);
  }
  &lt;font color="#0000ff"&gt;foreach&lt;/font&gt; (&lt;font color="#0000ff"&gt;string&lt;/font&gt; controlId &lt;font color="#0000ff"&gt;in&lt;/font&gt; _childControlIds) {
   addAField(controlId); &lt;font color="#008000"&gt;//Create an existing control with its already-established ID&lt;/font&gt;
  }
 }
}&lt;/font&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;addAField&lt;/code&gt; method looks like this:
&lt;div style='max-height:250px;overflow:auto;border:1px solid #ccc;white-space:nowrap;'&gt;&lt;code&gt;&lt;pre&gt;&lt;font color="#000000"&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt; &lt;font color="#2B91AF"&gt;CustomChildControl&lt;/font&gt; addAField(&lt;font color="#0000ff"&gt;string&lt;/font&gt; fieldId) {
 &lt;font color="#2B91AF"&gt;CustomChildControl&lt;/font&gt; cc = (&lt;font color="#2B91AF"&gt;CustomChildControl&lt;/font&gt;)LoadControl(&lt;font color="#A31515"&gt;"CustomChildControl.ascx"&lt;/font&gt;);
 &lt;font color="#0000ff"&gt;if&lt;/font&gt; (&lt;font color="#2B91AF"&gt;String&lt;/font&gt;.IsNullOrEmpty(fieldId)) {
  cc.ID = &lt;font color="#2B91AF"&gt;String&lt;/font&gt;.Format(&lt;font color="#A31515"&gt;"CUST{0}"&lt;/font&gt;, &lt;font color="#2B91AF"&gt;DateTime&lt;/font&gt;.Now.Ticks); &lt;font color="#008000"&gt;//new control; create a unique ID&lt;/font&gt;
  _childControlIds.Add(cc.ID);
 } &lt;font color="#0000ff"&gt;else&lt;/font&gt; {
  cc.ID = fieldId; &lt;font color="#008000"&gt;//existing control; reuse ID&lt;/font&gt;
 } 
 &lt;font color="#0000ff"&gt;this&lt;/font&gt;.CustomControlsPlaceHolder.Controls.Add(cc);
 cc.DeleteControlClick += &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#2B91AF"&gt;EventHandler&lt;/font&gt;(DeleteCustomControl);
 &lt;font color="#0000ff"&gt;return&lt;/font&gt; cc;
}&lt;/font&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/div&gt;
Notes:&lt;ol&gt;&lt;li&gt;It no longer appears to be necessary to add the control before setting its ID &amp;mdash; the ViewState manager seems to pick it up just fine either way.&lt;/li&gt;
&lt;li&gt;The custom control in my example has its own delete control and fires an event, that this page subscribes to.  Your implementation may vary.&lt;/li&gt;&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;DeleteCustomControl&lt;/code&gt; method looks like this:
&lt;div style='max-height:250px;overflow:auto;border:1px solid #ccc;white-space:nowrap;'&gt;&lt;code&gt;&lt;pre&gt;&lt;font color="#000000"&gt;&lt;font color="#0000ff"&gt;private void&lt;/font&gt; DeleteCustomControl(&lt;font color="#0000ff"&gt;object&lt;/font&gt; sender, &lt;font color="#2B91AF"&gt;EventArgs&lt;/font&gt; e) {
 &lt;font color="#2B91AF"&gt;CustomChildControl&lt;/font&gt; cc = sender &lt;font color="#0000ff"&gt;as&lt;/font&gt; &lt;font color="#2B91AF"&gt;CustomChildControl&lt;/font&gt;;
 &lt;font color="#0000ff"&gt;if&lt;/font&gt; (cc != &lt;font color="#0000ff"&gt;null&lt;/font&gt;) {
  _childControlIds.Remove(cc.ID);
  &lt;font color="#0000ff"&gt;this&lt;/font&gt;.CustomControlsPlaceHolder.Controls.Remove(cc);
 }
}&lt;/font&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;The method to add a control (in my case, a button on the page) is simply:
&lt;div style='max-height:250px;overflow:auto;border:1px solid #ccc;white-space:nowrap;'&gt;&lt;code&gt;&lt;pre&gt;&lt;font color="#000000"&gt;&lt;font color="#0000ff"&gt;private void&lt;/font&gt; AddButton_Click(&lt;font color="#0000ff"&gt;object&lt;/font&gt; sender, &lt;font color="#2B91AF"&gt;EventArgs&lt;/font&gt; e) {
 addAField(&lt;font color="#0000ff"&gt;null&lt;/font&gt;).InitializeNewControl(); &lt;font color="#008000"&gt;//Create a new control, and initialize its data&lt;/font&gt;
}&lt;/font&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;And finally, a Page PreRenderComplete event handler (because it's late enough in the page lifecycle; PreRender itself may be sufficient for your needs) that sticks the control ID list in ViewState:
&lt;div style='max-height:250px;overflow:auto;border:1px solid #ccc;white-space:nowrap;'&gt;&lt;code&gt;&lt;pre&gt;&lt;font color="#000000"&gt;&lt;font color="#0000ff"&gt;private void&lt;/font&gt; Page_PreRenderComplete(&lt;font color="#0000ff"&gt;object&lt;/font&gt; sender, &lt;font color="#2B91AF"&gt;EventArgs&lt;/font&gt; e) {
 ViewState[&lt;font color="#A31515"&gt;"ControlCount"&lt;/font&gt;] = _childControlIds.ToArray();
}&lt;/font&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And that's it.  Surprisingly simple.&lt;/p&gt;
&lt;p&gt;I don't know at what point this changed (or if I even over-architected the original solution &amp;mdash; a distinct possibility).  This could be an improvement in .Net 3.5, or it could be something "fixed" in a service pack along the way.  The only thing I can say for certain is this much simpler method works quite well in my admittedly simple example.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-8527948374443343995?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/8527948374443343995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=8527948374443343995&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/8527948374443343995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/8527948374443343995'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2011/01/aspnet-dynamic-controls-and-viewstate.html' title='ASP.Net, Dynamic Controls, and ViewState, revisited'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-8027304791329569969</id><published>2011-01-01T13:20:00.000-07:00</published><updated>2011-01-01T13:20:45.945-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bandwidth'/><title type='text'>2010 Bandwidth</title><content type='html'>&lt;p&gt;I haven't been posting monthly bandwidth numbers, mostly to distract from the fact that the majority of my posts lately &lt;i&gt;were&lt;/i&gt; the monthly bandwidth numbers, and that's just boring.  But I haven't stopped keeping track.&lt;/p&gt;
&lt;p&gt;2010 proved out what I expected.  Since we got rid of paid TV, we have been relying on Netflix for the majority of our video entertainment.  The use of this has increased over the year, as we've not only become more comfortable using the service, but the number of offerings of the service has increased as well.  Add to this the fact that more videos are available in HD, and it's no wonder that my monthly data usage has only been going up.&lt;/p&gt;
&lt;p&gt;There are also other items that account for the increase.  A large number of file transfers to support our website design business accounts for some of this.  Also, we bought a Blu-ray player that has the capability to stream YouTube videos, of which the kids have taken advantage as a substitute for more traditional Saturday morning cartoons.&lt;/p&gt;
&lt;p&gt;The year-over-year view is rather dramatic:&lt;/p&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/_zS29HOwsh6M/TR96O7LmMKI/AAAAAAAACF8/J2WPOiNWyIk/s1600/2009Bandwidth.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="250" width="320" src="http://3.bp.blogspot.com/_zS29HOwsh6M/TR96O7LmMKI/AAAAAAAACF8/J2WPOiNWyIk/s320/2009Bandwidth.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/_zS29HOwsh6M/TR96O7gdGRI/AAAAAAAACGE/cA6M3nt9AR8/s1600/2010Bandwidth.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="235" width="320" src="http://2.bp.blogspot.com/_zS29HOwsh6M/TR96O7gdGRI/AAAAAAAACGE/cA6M3nt9AR8/s320/2010Bandwidth.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;The largest-use month in 2009 was surpassed by 75% of the months in 2010, and the second-highest month of 2009 was exceeded by all of them.  Comcast's measurement was consistently lower than mine, although they were only 8% off in December.  It was November when, finally, we reached the halfway point of a monthly cap.&lt;/p&gt;
&lt;p&gt;The numbers are likely to only go further up.  I don't see any change in this trend.  Content providers are continuing to innovate and use the bandwidth we have.  Netflix's increase in HD offerings is one example.  Microsoft recently updated the Xbox to use a higher quality encoding for voice communication, which, although only provides a modest increase in bandwidth, is just another example.&lt;/p&gt;
&lt;p&gt;All this still leaves me wondering, when will general use and content innovation use up this arbitrary data cap, and turn the number of "excessive" users from what was once claimed to be "a single percent" into the majority?  I also wonder if Comcast's policy of punishing those who go over their monthly number will change before or after that happens &amp;mdash; or, more cynically, how much revenue they'll collect from fines before they consider changing their policy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-8027304791329569969?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/8027304791329569969/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=8027304791329569969&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/8027304791329569969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/8027304791329569969'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2011/01/2010-bandwidth.html' title='2010 Bandwidth'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_zS29HOwsh6M/TR96O7LmMKI/AAAAAAAACF8/J2WPOiNWyIk/s72-c/2009Bandwidth.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-8901353914964784943</id><published>2010-10-28T21:52:00.001-06:00</published><updated>2010-10-28T21:52:00.188-06:00</updated><title type='text'>Thoughts on document reader software</title><content type='html'>&lt;p&gt;A document reader program should be unobtrusive.  When you get a document on your computer that it is supposed to handle, you should just have to double-click on the document, and your operating system should open the associated program.  It should do this quickly, without a lot of fanfare.  The document is the focus of the user's attention, not the program.  There should be nearly no need to open the reader program on its own, without a document; although, a link to the program in an appropriate folder on the Start Menu isn't uncalled for, should such a need arise (e.g., if the user wants to manually check for updates or change default settings for the program, he shouldn't have to find an irrelevant document to open first).&lt;/p&gt;
&lt;p&gt;To these points, I say:&lt;/p&gt;
&lt;p style="font-size: larger;"&gt;Adobe, quit installing an icon to Acrobat Reader on my desktop, without asking, every time you do an update; get rid of the bloat that causes Reader to take half a minute to open a document (running a service or pre-loading half your program into memory when I haven't even opened a document yet is &lt;u&gt;not&lt;/u&gt; an acceptable option); and when I say "disable the splash screen", do not ignore that setting or re-enable it and think I won't notice.&lt;/p&gt;
&lt;p style="font-size: smaller;"&gt;Yes, I'm aware of alternatives, such as Foxit Reader, that aren't nearly as bad; unfortunately, I have to keep Acrobat around for those forms and bills that alternatives aren't able to process.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-8901353914964784943?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/8901353914964784943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=8901353914964784943&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/8901353914964784943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/8901353914964784943'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2010/10/thoughts-on-document-reader-software.html' title='Thoughts on document reader software'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-8129649079097148375</id><published>2010-10-24T16:01:00.000-06:00</published><updated>2010-10-24T16:01:42.174-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>IntelliMouse Explorer 1.0 in Windows 7</title><content type='html'>&lt;p&gt;I have an old IntelliMouse Explorer.  It's the original version, wired, but still works great.  Alongside my Natural Keyboard Pro, it's an old, functional, comfortable piece of hardware that I refuse to get rid of.  The replacements that have come along since often fall short in various ways.  And, much like the Natural Keyboard Pro and other strong Microsoft hardware input devices from years gone by, Microsoft's software drivers have stopped supporting them.&lt;/p&gt;
&lt;p&gt;There's no real reason for them not to work today.  The keyboards haven't changed much, except to add or change the extra control keys sprinkled around the standard 121.  Mice, even less so; they have the same X-Y directional input, five buttons, and a scroll wheel they've had for over a decade.  But if you install the current version of IntelliType or IntelliPoint, they will refuse to detect your older keyboard and mouse; and even though the operating system will use them just fine for standard functions, all the fancy buttons and the ability to remap them (that used to work on older versions of the software) won't be available.&lt;/p&gt;
&lt;p&gt;I came across &lt;a href="http://www.blogfeld.com/2009/11/natural-keyboard-pro-windows-7-vista.html"&gt;this blog post&lt;/a&gt; on Blogfeld.com that describes in detail how to get a Natural Keyboard Pro to have full functionality in Vista and Windows 7.  I followed these instructions earlier this month, and I can verify that they work flawlessly with the current version of IntelliType software (currently version 8).  I thought maybe the same technique could be applied to get my old IntelliMouse Explorer to work with IntelliPoint 8 as well.&lt;/p&gt;
&lt;p&gt;I won't post the details here &amp;mdash; Blogfeld already does an excellent job at describing everything &amp;mdash; I'll just indicate what I did to apply his technique to IntelliPoint.&lt;/p&gt;
&lt;p&gt;I searched for an old version of IntelliPoint off of Microsoft's download site.  You can still download IntelliPoint 5.2 from their site (link as of the time of this post is &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=d3b2c863-2f8a-4339-9542-18f90b69128d"&gt;here&lt;/a&gt;, but you can search for "IntelliPoint 5" on &lt;a href="http://download.microsoft.com/"&gt;download.microsoft.com&lt;/a&gt; to find it) and installed it on a Windows XP workstation in order to get the old files.&lt;/p&gt;
&lt;p&gt;On the Windows 7 machine, I opened up the &lt;code&gt;point64.inf&lt;/code&gt; file (IntelliPoint's version of IntelliType's &lt;code&gt;type64.inf&lt;/code&gt; &amp;mdash; and yes, I'm using 64-bit; the 32-bit version would naturally be &lt;code&gt;point32.inf&lt;/code&gt;), and in the &lt;code&gt;[MsMfg&amp;hellip;]&lt;/code&gt; section, I added the following string to the block of IDs listed:&lt;/p&gt;

&lt;div style="border: 1px solid #ccc; max-height: 250px; overflow: auto; white-space: nowrap;"&gt;&lt;pre&gt;&lt;code style="color:#000;"&gt;%HID\Vid_045E&amp;Pid_001E.DeviceDesc%=HID_Filtr_Inst, HID\Vid_045E&amp;Pid_001E&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Further down in the &lt;code&gt;[Strings]&lt;/code&gt; section, I added:&lt;/p&gt;

&lt;div style="border: 1px solid #ccc; max-height: 250px; overflow: auto; white-space: nowrap;"&gt;&lt;pre&gt;&lt;code style="color:#000;"&gt;HID\VID_045E&amp;PID_001E.DeviceDesc="Microsoft USB IntelliMouse Explorer (IntelliPoint)"&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The next step was to modify the &lt;code&gt;IPointDevices.xml&lt;/code&gt; file.  This one required a little more thought, as IntelliPoint 5 did not have an &lt;code&gt;IPointDevices.xml&lt;/code&gt; file to copy from.  I noticed, however, that the IntelliMouse Explorer 3, which is supported in IntelliPoint 8, has the exact same configuration as the IntelliMouse Explorer 1.  So, I found the &lt;code&gt;&amp;lt;Device&amp;gt;&lt;/code&gt; section that describes the IntelliMouse 3, copied it, and pasted it to the end of &lt;code&gt;IPointDevices.xml&lt;/code&gt;.  I changed the &lt;code&gt;&amp;lt;Name&amp;gt;&lt;/code&gt; node to read, simply, "IntelliMouse Explorer", changed the &lt;code&gt;&amp;lt;OemAbbreviation&amp;gt;&lt;/code&gt; node to "IME", and changed the value under &lt;code&gt;&amp;lt;HWID Type='PID'&amp;gt;&lt;/code&gt; to read "0x001E" (the last four characters of the USB ID, used in the &lt;code&gt;point64.inf&lt;/code&gt; file above).  I also had to change the ID in the &lt;code&gt;&amp;lt;Device&amp;gt;&lt;/code&gt; node itself to something that was not used elsewhere in the file &amp;mdash; '10' was good enough.&lt;/p&gt;

&lt;p&gt;I followed the rest of the instructions from Blogfeld, and sure enough, it worked great.  The configuration screen in IntelliPoint uses the images of the IntelliMouse Explorer 3, and it allows configuration of all five buttons and the scroll wheel, including per-application settings, like any other mouse it "officially" supports.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-8129649079097148375?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/8129649079097148375/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=8129649079097148375&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/8129649079097148375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/8129649079097148375'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2010/10/intellimouse-explorer-10-in-windows-7.html' title='IntelliMouse Explorer 1.0 in Windows 7'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-4589623992747356075</id><published>2010-10-20T21:23:00.000-06:00</published><updated>2010-10-20T21:23:53.333-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Firefox + Ajax + Refresh = Disaster</title><content type='html'>&lt;p&gt;Usually, when coding a web page that's targeting users of IE and Firefox, the browser that's going to cause the lesser amount of problems is Firefox.  So I was genuinely surprised when I came across a bug reported for Firefox only that came down to what I consider the browser misbehaving.&lt;/p&gt;
&lt;p&gt;The requirements for our app included a series of dropdown boxes, where the selection a user makes in one dropdown drives the choices that appear in the next one (what's commonly referred to as a "cascading dropdown").  For a nicer user experience, this is typically done with AJAX, so that the request/response that generates the second dropdown upon selection of the first doesn't require an entire page refresh.  ASP.Net makes this really easy with the &lt;code&gt;UpdatePanel&lt;/code&gt; control.  Controls inside of an &lt;code&gt;UpdatePanel&lt;/code&gt; can be refreshed without reloading the entire page.  It's not as lean as a pure AJAX call could be, since the server reprocesses the whole page, but the coding time is greatly reduced.&lt;/p&gt;
&lt;p&gt;Our environment includes a standard master page that includes a &lt;code&gt;ScriptManager&lt;/code&gt; component (required for using &lt;code&gt;UpdatePanel&lt;/code&gt;s) and the following script:&lt;/p&gt;
&lt;div style="border: 1px solid #ccc; max-height: 250px; overflow: auto; white-space: nowrap;"&gt;&lt;pre&gt;&lt;code style="color:#000;"&gt;
&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#800000"&gt;script&lt;/FONT&gt; &lt;FONT COLOR="#ff0000"&gt;language&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&amp;quot;javascript&amp;quot;&lt;/FONT&gt; &lt;FONT COLOR="#ff0000"&gt;type&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;/FONT&gt; 
    &lt;FONT COLOR="#0000ff"&gt;function&lt;/FONT&gt; onEndRequest(sender, args) {  
        ajaxPostBackButton.disabled = &lt;FONT COLOR="#0000ff"&gt;false&lt;/FONT&gt;;  
        &lt;FONT COLOR="#0000ff"&gt;var&lt;/FONT&gt; error = args.get_error();  
        &lt;FONT COLOR="#0000ff"&gt;if&lt;/FONT&gt; (error != &lt;FONT COLOR="#0000ff"&gt;null&lt;/FONT&gt;) {  
            window.location = &lt;FONT COLOR="#800000"&gt;&amp;quot;../errorPage.aspx&amp;quot;&lt;/FONT&gt;;  
        }  
        &lt;FONT COLOR="#0000ff"&gt;var&lt;/FONT&gt; updateProgressPanel = $get(&lt;FONT COLOR="#800000"&gt;&amp;quot;&lt;/FONT&gt;&lt;SPAN STYLE="background: #ffff00"&gt;&amp;lt;%&lt;/SPAN&gt;=&lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;.UpdateProgressPanel.ClientID &lt;SPAN STYLE="background: #ffff00"&gt;%&amp;gt;&lt;/SPAN&gt;&lt;FONT COLOR="#800000"&gt;&amp;quot;&lt;/FONT&gt;);  
        updateProgressPanel.className = &lt;FONT COLOR="#800000"&gt;&amp;quot;HideObject&amp;quot;&lt;/FONT&gt;;  
    }  
    &lt;FONT COLOR="#0000ff"&gt;function&lt;/FONT&gt; onBeginRequest(sender, args) {  
        &lt;FONT COLOR="#0000ff"&gt;var&lt;/FONT&gt; ajaxPostBackButtonId = args.get_postBackElement().id;  
        ajaxPostBackButton = document.getElementById(ajaxPostBackButtonId);  
        ajaxPostBackButton.disabled = &lt;FONT COLOR="#0000ff"&gt;true&lt;/FONT&gt;;  
        &lt;FONT COLOR="#0000ff"&gt;var&lt;/FONT&gt; updateProgressPanel = $get(&lt;FONT COLOR="#800000"&gt;&amp;quot;&lt;/FONT&gt;&lt;SPAN STYLE="background: #ffff00"&gt;&amp;lt;%&lt;/SPAN&gt;=&lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;.UpdateProgressPanel.ClientID &lt;SPAN STYLE="background: #ffff00"&gt;%&amp;gt;&lt;/SPAN&gt;&lt;FONT COLOR="#800000"&gt;&amp;quot;&lt;/FONT&gt;);  
        updateProgressPanel.className = &lt;FONT COLOR="#800000"&gt;&amp;quot;DisplayProgressLayer&amp;quot;&lt;/FONT&gt;;  
    }  
    &lt;FONT COLOR="#0000ff"&gt;var&lt;/FONT&gt; ajaxPostBackButton;  
    Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(onBeginRequest);  
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(onEndRequest);  
&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#800000"&gt;script&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt; 
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The script, in essence, binds a couple of functions to the AJAX start and stop methods that do this:&lt;ul&gt;&lt;li&gt;On start:&lt;ul&gt;&lt;li&gt;Disable the control used to trigger the AJAX call (this helps guard against double-posting)&lt;/li&gt;&lt;li&gt;Show a div that contains a "loading" animated gif to let the user know something's happening&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;On end:&lt;ul&gt;&lt;li&gt;Enable the control used to trigger the AJAX call&lt;/li&gt;&lt;li&gt;Check for an error, and if found, redirect the browser to the standard error page&lt;/li&gt;&lt;li&gt;Hide the div with the "loading" gif&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;
&lt;p&gt;Now, if the user makes a selection in the first dropdown, everything runs normally, and the second dropdown appears.  If the user then presses F5 to refresh their browser, the browser reloads the page from its initial load state, i.e., with the first dropdown with the initial "Please select&amp;hellip;" option selected, and no second dropdown.&lt;/p&gt;
&lt;p&gt;At least, that's the way it works in IE.  In Firefox, what I was seeing was, the first dropdown was getting selected to the option I had selected before I hit refresh, it was disabled, and there was no second dropdown.&lt;/p&gt;
&lt;p&gt;Finding out why was no easy task.  With the help of Firebug, I was able to show that, on refresh, neither the &lt;code&gt;onBeginRequest&lt;/code&gt; nor the &lt;code&gt;onEndRequest&lt;/code&gt; methods were being called, and those were the only places the dropdown's enabled state was being tinkered with.  I could only conclude that Firefox itself was setting this state.  But why, and how do I stop it?&lt;/p&gt;
&lt;p&gt;A couple hours of internet searching on why a dropdown in an &lt;code&gt;UpdatePanel&lt;/code&gt; would be disabled failed to yield any useful information.  I did find one user complaining about Firefox repopulating form values with prior input on refresh; unfortunately, that user's request for how to get around it was met with a snarky response about how it was a useful &lt;i&gt;feature&lt;/i&gt; of Firefox and how the user was mentally deficient for not appreciating it.  Sorry, but when you're coding a web application that is trying to control the content of form values and states and react to changes, and the browser breaks all rules and changes those states without raising any events to react to, I'll have to go with the feature being deficient and buggy.&lt;/p&gt;
&lt;p&gt;Coming at the problem the next day with a fresh set of search terms, I came across this blog post:  &lt;a href="http://lachlankeown.blogspot.com/2008/04/firefox-refresh-viewstate-updatepanel.html"&gt;Firefox refresh viewstate updatepanel bug hell!!!&lt;/a&gt;  The post describes a more serious error that can occur with Firefox's mucking about with a form after refresh that got updated with AJAX.  The solution, renaming the form's ID on every refresh, seemed a little more of a brute-force hack than I wanted, and he mentions it doesn't work well in a master page scenario anyway (which we're in).&lt;/p&gt;
&lt;p&gt;The comments on that post, however, point to &lt;a href="https://developer.mozilla.org/en/How_to_Turn_Off_Form_Autocompletion"&gt;an article on developer.mozilla.org&lt;/a&gt; that describes the feature in more detail and, more importantly, how to turn it off.  By adding the nonstandard attribute &lt;code&gt;autocomplete="off"&lt;/code&gt; to the page's &lt;code&gt;&amp;lt;FORM&amp;gt;&lt;/code&gt; tag, it suppresses this bothersome behavior and lets the page work as expected.&lt;/p&gt;
&lt;p&gt;We're now determining if this action is something that should be done site-wide (add it in the master page's markup), as it could be an uncaught bug on other pages; or if it's something that should be done on a page-by-page basis, by adding &lt;code style="white-space:nowrap;"&gt;this.Page.Form.Attributes["autocomplete"] = "off";&lt;/code&gt; to the prerender event of any affected page.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-4589623992747356075?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/4589623992747356075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=4589623992747356075&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/4589623992747356075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/4589623992747356075'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2010/10/firefox-ajax-refresh-disaster.html' title='Firefox + Ajax + Refresh = Disaster'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-3861674239590118849</id><published>2010-08-31T21:41:00.000-06:00</published><updated>2010-08-31T21:41:02.753-06:00</updated><title type='text'>Raingutter Regatta racetrack</title><content type='html'>&lt;p&gt;&lt;a href="http://www.flickr.com/photos/7733072@N03/sets/72157624852226078" title="Click for Flickr image set"&gt;&lt;img src="http://farm5.static.flickr.com/4131/4946377233_d19382054d.jpg" width="240" height="196" alt="Regatta side view" style="float:left; margin-right:5px; margin-bottom:5px;" /&gt;&lt;/a&gt;Although I am not the Cubmaster anymore, I wanted to share this project.  In the past, the Raingutter Regatta was a troublesome event.  The kids enjoyed it well enough, but for raingutters, all we had were vinyl gutters.  It was always a trick to get them elevated, so that the kids could stand and walk beside them, but keep them supported enough so they wouldn't collapse when filled with water.  Also, the end caps just snapped onto the gutters, and they never formed a perfect seal; so someone had to be volunteered to keep a bucket filled so the gutters could be refilled as needed.  While the kids deal with it well enough, you definitely notice a drop in enthusiasm when they have to wait for the adults to figure out how to shore up a gutter and refill it with water every couple races.&lt;/p&gt;
&lt;p&gt;Last summer, I was the Cubmaster, and I got to the church early to start setting up the gutters.  I thought I had a bit of an advantage over years past in that we had a new building that had a pavilion with picnic tables.  The tables, I figured, would support the length of the gutters and keep them from folding.  All I needed to do was support the sides.&lt;/p&gt;
&lt;p&gt;As I was filling the gutters with water and trying to figure things out, however, I was blindsided by nothing short of a miracle.  Our newly-called Webelos den leader had taken it upon himself to build the project you see in the picture above.  (Click the picture to see a couple more images &amp;mdash; unfortunately taken from my outdated cell phone.)  He pulled up in his truck and asked me to help him unload this large boat from the back.  He said he didn't want to say anything before, because he wasn't sure he could finish it in time.  Indeed, he had just put some of the finishing touches on it that afternoon.&lt;/p&gt;
&lt;p&gt;It was, to say the least, amazing.  A length of PVC pipe, cut in half, formed the tracks, which were wide enough to accommodate the hulls of the boat kits we were using (which were simple styrofoam blocks &amp;mdash; much lower tech than the Pinewood Derby cars, but much easier for the boys to cut and form on their own).  The half-pipes were laid in the top of the wooden form of a large boat.  (Last year, the boat did not have the sail; that was something he added for this year.)  A drain hole was drilled in the bottom of one end of each track, with a standard rubber drain stopper plugging it up, so the tracks could be easily drained at the end of the night.&lt;/p&gt;
&lt;p&gt;We had some minor problems with leaks &amp;mdash; because he caulked it earlier that day, it didn't have time to completely dry and seal &amp;mdash; but it wasn't anything we weren't used to.  There was no worrying about gutters buckling or collapsing, and the legs were sturdy enough to keep it from going anywhere when it got bumped.&lt;/p&gt;
&lt;p&gt;It certainly made my day.  And the boys', too.  That event was easily one of the most successful we had all year.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-3861674239590118849?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/3861674239590118849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=3861674239590118849&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/3861674239590118849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/3861674239590118849'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2010/08/raingutter-regatta-racetrack.html' title='Raingutter Regatta racetrack'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm5.static.flickr.com/4131/4946377233_d19382054d_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-368859679757451561</id><published>2010-08-25T20:22:00.000-06:00</published><updated>2010-08-25T20:22:54.947-06:00</updated><title type='text'>I found Microsoft Phone!</title><content type='html'>&lt;p&gt;Following up to &lt;a href="http://www.yakkowarner.com/2008/03/whatever-happened-to-microsoft-phone.html"&gt;this post&lt;/a&gt;, where I ponder what happened to a certain Microsoft software product that seemed way ahead of its time hit the market and disappeared with almost no fanfare.&lt;/p&gt;

&lt;p&gt;At my new job, I just got my phone configured.  It's an IP phone that plugs into an ethernet jack (and apparently draws power from that jack as well, as there is no other power cord), and once it connected and downloaded all its necessary updates, the IT guy walked me through some of the features.&lt;/p&gt;

&lt;p&gt;He directed me to set up my voicemail account.  He pressed the voicemail button, and a friendly-sounding, female, synthesized voice announced, "Welcome to Microsoft Exchange."  He then gave me a quick overview of the features available, which included the ability to access my email from my phone.&lt;/p&gt;

&lt;p&gt;It would appear that Microsoft Phone grew up, moved out of the house, and got a job in the corporate world.&lt;/p&gt;

&lt;p&gt;It certainly has come a long way.  One of the "cool" features he demonstrated was the voice-activated directory.  He pushed "Directory", and the voice prompt asked for the name of the person to call.  In his moderate southeast Asian accent, and in a relatively soft voice, he spoke the name of the coworker in a neighboring cubicle.  Within a second, the computer repeated the name (which it got exactly right on the first try), asked for confirmation, and then proceeded to dial.&lt;/p&gt;

&lt;p&gt;Later, when I set up my voicemail account (setting my own PIN, greeting message, etc.), I experimented a bit.  One of the options presented to me was "Calendar".  I chose that option, specified "Today" (at which point the computer told me I could just say "Calendar for today" at the main menu to get straight to this point), and the computer proceeded to read to me my appointments for the day.&lt;/p&gt;

&lt;p&gt;The voice synthesis was very clear.  While it could never compare to seeing the information on the screen where you could glance at any piece of information at will instead of waiting for it to be read to you, it was no different than, say, the difference between reading a book and listening to an audiobook version of the same.  All of the commands were done by voice.  At no time did I have to repeat a command that the computer didn't hear, nor did it misinterpret any command I gave it; and I didn't speak any louder or exaggerate my pronounciation when I gave my commands.  Although, the whole interchange was a little slow, considering I had to wait at the end of each operation for the computer to give me a list of all the things I was "allowed" to say.  (I would imagine that accuracy goes way up when the number of possible inputs is constrained.)  It was still far easier than the laughable experience I had trying to use voice controls in Windows Vista.&lt;/p&gt;

&lt;p&gt;I am a little disappointed that this product does not appear to be available for the home anymore.  More than once, I've been away from home and wished I could have easy access to an email when all I had was my phone.  However, I think they're probaby dead on in their target market.  It seems like people are using their cell phones more than their home computers as their address books and calendars, so the need to "phone home" just isn't there.  Those who do access email on the road tend to pay for a data plan for their cell phones, so they can scan through email visually instead of having it read to them linearly &amp;mdash; a huge advantage on a home email account that may get email from hundreds of sources, most of it spam that gets through filters.  On the flip side, business email accounts tend to be more business-focused (in my experience; &lt;abbr title="your mileage may vary"&gt;YMMV&lt;/abbr&gt;), so hearing unread email can be less of an exercise in "sifting through junk".  Also, providing a phone access path to check information means that all employees can access their personal accounts without providing or provisioning VPN accounts, company cell phones, data plans, etc.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-368859679757451561?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/368859679757451561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=368859679757451561&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/368859679757451561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/368859679757451561'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2010/08/i-found-microsoft-phone.html' title='I found Microsoft Phone!'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-1648342763238225293</id><published>2010-08-16T23:02:00.000-06:00</published><updated>2010-08-16T23:02:03.751-06:00</updated><title type='text'>In B4 Unemployment</title><content type='html'>&lt;p&gt;When I was "downsized", I got some severance pay in addition to my unused vacation time.  Because of this, my unemployment benefits were due to not start until a few weeks after my actual termination date.&lt;/p&gt;
&lt;p&gt;Today, I started my new job.&lt;/p&gt;
&lt;p&gt;I had a few interviews that came down to a couple solid possibilities.  Both were very good jobs, and I thought it would come down to a choice between them.  While I was waiting to hear a final decision, I spent some time in prayer that I would be guided to the right job.  Sure enough, I only got an offer from one company; the other told me my qualifications were perfect, but they decided to go with another candidate who they just "felt was a better fit".&lt;/p&gt;
&lt;p&gt;I supposed I should be &lt;a href="http://www.yakkowarner.com/2008/02/theres-always-bigger-fish.html"&gt;used to this&lt;/a&gt; by now, but I'm still impressed, and thankful, with how Heavenly Father provides a very clear path to what He has provided for me.  The path may not always be the smoothest or the shortest, but it's always gotten me where I've needed to be.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-1648342763238225293?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/1648342763238225293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=1648342763238225293&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/1648342763238225293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/1648342763238225293'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2010/08/in-b4-unemployment.html' title='In B4 Unemployment'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-3446965544846423520</id><published>2010-08-13T17:32:00.000-06:00</published><updated>2010-08-13T17:32:02.387-06:00</updated><title type='text'>Friday the Thirteeneth Strikes Again</title><content type='html'>&lt;p&gt;I got a notice in the mail a while back about a recall Toyota is doing on vehicles, including my Prius, for a possibility of floor mats jamming accelerator pedals.  Now, I'm more inclined to believe this is more media hype than any actual problem, but as long as it's free, I have free time, and especially since they were promising a free floor vacuuming with the service, I might as well take the car in.  So I made an appointment.&lt;/p&gt;
&lt;p&gt;I left for the dealer this morning, and my wife promised to leave shortly thereafter in the minivan to pick me up.  On my way in, though, I got a call from an upset wife.  The van wouldn't start.  The battery didn't have enough of a charge to turn it over.  This was a new battery, one we bought earlier this year.  It should not be dead.  Unfortunately, it didn't agree.&lt;/p&gt;
&lt;p&gt;Now, fortunately, we have a plug-in battery charger that we got many years ago, so she began charging it while I dropped off my car.  Since she was going to be leaving a lot later, I walked over to our next stop, the FedEx center, to pick up a package from my former employer that had apparently already forgotten my correct address.  A healthy dose of exercise and still a ten minute wait, and my wife drove by to pick me up.&lt;/p&gt;
&lt;p&gt;We were going to get family pictures today, so we went to the shopping center.  My wife wanted to stop by the shoe store to get new shoes for a couple of the kids first, so we pulled up there.  The baby was still asleep, so I was going to wait in the van.  She rolled down the windows and shut off the minivan.  While we were unloading, though, the baby woke up.  I went to start the car to roll the windows up, but all I got in response was "click click click click click".  Despite the 40-minute round trip to pick me up from FedEx and come back to the shopping center, the battery had no charge.  And now, we were stranded on the wrong side of the shopping center.&lt;/p&gt;
&lt;p&gt;We hiked across the shopping center to get to our picture appointment.  Fortunately, it was still morning, so it was not too warm yet; but it was still a decent hike with four kids, slightly uphill, passing a distance that included a full-size Wal-Mart and a Sam's Club (these are not small stores).&lt;/p&gt;
&lt;p&gt;Once we got to our picture appointment (on time, even), we started trying to call the phone numbers of anyone we had in our cell phones to see who might be home and who might be able to shuttle one of us home to get jumper cables and to my mother's to pick up her truck.&lt;/p&gt;
&lt;p&gt;Getting pictures done, we then went to get lunch at one of the nearby restaurants.  While we were there, one of our church friends showed up to drive me to my house and my mother's.  At my house, I got my mother's house keys, and then we went to my mother's house.  Problem, the house key does not work on the storm door on her front door.  It would've let me in from the garage, but I didn't have her garage door opener.  We had one in the minivan, but she didn't pick me up from the minivan; she picked me up from the restaurant.  (I'm not sure I would've thought to grab the garage door opener anyway.)&lt;/p&gt;
&lt;p&gt;Fortunately, she was willing to let us try jump-starting off of her truck.  We just had to go back to my house to pick up the jumper cables I forgot to grab.  (I was going to pick them up after I got my mother's truck.)  And, fortunately more, we weren't inconveniencing her much; through all the driving around, her daughters in the car were lulled into a nap they don't usually get, so she was getting a nice bonus.&lt;/p&gt;
&lt;p&gt;Jump-starting the minivan was fairly uneventful, except for the usual problems of trying to get the clamps secured on the terminals and finding a good ground.  &lt;b&gt;Rant time:&lt;/b&gt;  Why don't they make battery terminals longer, so that jumper cables aren't constantly in danger of slipping off the things?  And, why don't they make an obvious grounding post for clamping the negative cable?  The first place I clamped it was secure, but obviously not a decent ground, as it completely failed to start the car; as soon as I clamped it to a less secure but more obviously metal bolt, the minivan started right up on the first try.  &lt;b&gt;Rant over.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;We thanked our friend profusely for the ride and vowed not to turn off the minivan for as long as we could.  My wife followed me to my mother's, so we could grab her truck.  (If we needed to leave the minivan behind while it got its battery replaced, we would need the extra vehicle to get home.)  With the garage door opener in the minivan, this was a much easier trip.&lt;/p&gt;
&lt;p&gt;We made a long drive to Sears, where we bought the battery, so they could check it out and replace it.  Long story short, they were able to replace it while we wandered the store, so we were able to take the minivan home.  They said it was in fact a bad battery, and everything else checked out ok.  Unfortunately, this not only made the truck unnecessary, having the extra vehicle meant we were unable to simply stop by and pick up my car, which was already done and will now require another extra trip out to go get.&lt;/p&gt;
&lt;p&gt;I'm not usually one to consider the 13&lt;sup style="font-size:smaller;"&gt;th&lt;/sup&gt; of a month falling on a Friday as being anything but a statistical curiosity, but it certainly seemed unlucky today.&lt;/p&gt;
&lt;p&gt;Still, it all worked out in the end, and the worst of it was just inconvenience.  Annoying, exhausting inconvenience, but just inconvenience.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-3446965544846423520?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/3446965544846423520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=3446965544846423520&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/3446965544846423520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/3446965544846423520'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2010/08/friday-thirteeneth-strikes-again.html' title='Friday the Thirteeneth Strikes Again'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-4486681107766777863</id><published>2010-08-07T01:21:00.000-06:00</published><updated>2010-08-07T01:21:15.134-06:00</updated><title type='text'>Land lines (and their owners) don't deserve to die</title><content type='html'>&lt;p&gt;Cell phone "elitists" bug me.  These are the people who insist that land lines or home phones are relics of a bygone era, and anyone who has a home phone are either simply wasting their money, or refusing to change with the times, or are somehow mentally deficient for not ridding themselves of a land line and going exclusively with cellular phones.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;We know a handful of families that have ditched the land line and gone entirely with cell phones.  (To their credit, they have been far from "elitist" about it.)  Unfortunately, we have encountered some common problems trying to call our cellphone-only friends.  These are based on actual, real-life experiences.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;You have to double (or more) the number of phone numbers you have to know to call the family.  You can't just call one number for the family, you have to know the number for the husband, and the one for the wife, and possibly the numbers for any children.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;Published phone directories will likely not be set up for this and list only one number, which at best will be a 50:50 chance of belonging to the specific family member you wanted to contact; so unless you make a point of getting down everyone's number, you'll consistenly call one family member just to ask for the number of another family member.  (While the first family member could simply hand their phone to the second, I've found it's more common they will request you call the second number, so the first phone is still free for calls that are actually &lt;i&gt;for&lt;/i&gt; the first person.)&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You don't know if they are home when you call, and you will end up reaching them at an otherwise inconvenient time (i.e., when they are out shopping, at work, running some other errand, away on vacation).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If you don't care whom you contact (i.e., you want to call the family to set up a visit, invite them to dinner, pass them some information about a community event, etc.), you end up having to decide whom you're going to contact.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;The person you decide to contact will end up being the least convenient person, as they will end up being the one who is out of the house (as above), greatly raising the chance any information you wanted to convey to the family will be long forgotten by the time said person returns home.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The cell coverage in the neighborhood isn't great, and the call will end up sounding like tin cans and string (when it's not dropped).  This seems to be especially true in our "outer suburbian" neighborhoods, and even more so near certain schools.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Even when the desired person is at home, and assuming their phone is getting enough reception, it is not uncommon for someone to misplace their pocket-sized device, or not hear the single ringing phone from elsewhere in the house; and they can easily miss the call for being unable to hear or find their phone in time.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;While I could possibly see this working more for singles or couples, it just doesn't make sense to me for families.  In order to allow your children to make or receive phone calls at all, you either have to yield "your" cell phone, or shell out the money for their own.&lt;/p&gt;
&lt;p&gt;I understand why some people do it.  The families we know that have gone to cell phones have done so to save money, and to get away from endless telemarketing calls.  Those are certainly appealing reasons &amp;mdash; we easily get three times as many unwanted calls on our land line as calls we actually want to take.  But in practice, it just makes calling a &lt;i&gt;family&lt;/i&gt; unnecessarily complicated, and they are just problems we'd rather avoid.  It's not a waste of money, and we're not stupid or living in the past.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-4486681107766777863?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/4486681107766777863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=4486681107766777863&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/4486681107766777863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/4486681107766777863'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2010/08/land-lines-and-their-owners-dont.html' title='Land lines (and their owners) don&apos;t deserve to die'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-7693258876254208719</id><published>2010-07-15T10:15:00.000-06:00</published><updated>2010-07-15T10:15:31.056-06:00</updated><title type='text'>On the Job Hunt</title><content type='html'>&lt;p&gt;At my place of employment, once a month, we had a "one-on-one" with our boss, a scheduled time where we could talk about how work was going and such.  In my most recent one this month, I expressed my concern that the work I was doing was not being recognized or appreciated.  The project I had originally been hired on to work on was basically shelved seven months ago (despite the new feature release I had built last year, the special on-site trip I made to a client's site on its behalf, and my work in getting it through Microsoft Certification), and all the work I had been doing on the company's flagship product since then was going unmentioned and undemonstrated at trade shows and in press releases.  My boss assured me that my work was important, that it was bringing the product and the company further than it had ever been in years.&lt;/p&gt;
&lt;p&gt;Turns out, I was right.  Yesterday, very suddenly, I was told I was being let go.  The Powers That Be had decided, as a cost-cutting measure, to completely eliminate the project I was hired on for, and, since I was tied to that project (despite the fact that I hadn't worked on it this entire year, except to get it the aforementioned Microsoft Certification, which was done as a cost-savings measure since it would get the company free OS/software licenses), my position was also being cut.&lt;/p&gt;
&lt;p&gt;There were so many things I wanted to say, so many arguments I wanted to make, but the decision had already been made without discussion.  My boss, who told me the decision was not his, had in his hands my final check and the termination agreement dated for that day.  I knew nothing I would say would make the least bit of difference one way or the other.  All I could think was that I have a wife and four kids at home, and attempting to say anything would only lead to a useless discussion that would delay my inevitable departure and keep me from finding my next job so I could make sure my family was provided for.&lt;/p&gt;
&lt;p&gt;I am tempted to write more, to rant about how I think it's unfair or how I think it was a bad decision (not just because of how it affects me personally); or I could pine for the things that have been taken away from me, the conveniences I had working there; but really, what would be the point?  Nothing changes the fact that I need to get my r&amp;eacute;sum&amp;eacute; up-to-date and off to recruiters so I can find my next job.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-7693258876254208719?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/7693258876254208719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=7693258876254208719&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/7693258876254208719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/7693258876254208719'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2010/07/on-job-hunt.html' title='On the Job Hunt'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-7425530813208069230</id><published>2010-06-24T20:37:00.001-06:00</published><updated>2010-06-24T20:37:00.798-06:00</updated><title type='text'>Installing software: Linux vs. Windows</title><content type='html'>&lt;p&gt;I wanted to install the MySql Workbench on my Linux development box.  My experience only reaffirmed my position that, despite the many advances made over the years, Linux still isn't quite ready for the masses.  I list these steps and problems here, not as a list of what &lt;i&gt;could&lt;/i&gt; happen, but as a list of things that &lt;i&gt;actually happened&lt;/i&gt; to me at least once during this process.&lt;/p&gt;
&lt;p&gt;Although MySql Workbench is the product in question here, this could really apply to any piece of software (and, as noted, did apply to more than one of the libraries I had to try to install in the process).
&lt;ul&gt;&lt;li&gt;First, I went to the download page for MySql Workbench.  They had several packages available, but none that corresponded to my particular version of Linux (CentOS 5.5, roughly equivalent to Red Hat Enterprise Linux 5.5).  So, it seemed I was bound to compile from source.&lt;/li&gt;
&lt;li&gt;I downloaded the source package, unzipped it, and ran &lt;code&gt;./configure&lt;/code&gt;.  It proceeded to run a bunch of checks on my system, ultimately stopping when it could not find a certain library it considered critical.  I checked the package repository (using whatever GUI front-end to "yum" that comes with CentOS), and found it.  Although I did have the library installed, I didn't have the library&lt;i&gt;-devel&lt;/i&gt; package installed, which I guess is required for compiling programs against it.&lt;/li&gt;
&lt;li&gt;Development package installed, I ran &lt;code&gt;./configure&lt;/code&gt; again.  And the check immediately after the previous library, it failed to find another critical library.  Ok, go back to the software installer and&amp;hellip; oh dear, it's not there.  Search the internet, find a package for RHEL5, and install it.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;./configure&lt;/code&gt; again.  Another library missing.  Not in the package installer.  Search the internet.  No pre-compiled package this time; download the source code.  Install library from source.  (n.b.:  This, and any other time I have to "install from source", means going through this &lt;i&gt;whole series of steps/possibilities&lt;/i&gt; for that library.  And yes, a library can have a dependency on yet another library [or series of libraries] that I have to go find and install, etc.)&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;./configure&lt;/code&gt;.  Wait, it says the library I just installed isn't installed.  &lt;code&gt;locate&lt;/code&gt; library; it's in &lt;code&gt;/usr/local/lib&lt;/code&gt; instead of &lt;code&gt;/usr/lib&lt;/code&gt;.  Figure out how to configure &lt;code&gt;pkg-config&lt;/code&gt; to include the other directory.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;./configure&lt;/code&gt; again.  Another library problem &amp;mdash; the version I have installed is too old.  Newer version not in the package installer.  Search the internet.  No pre-compiled package.  Download source.  Install library from source.  Run &lt;code&gt;./configure&lt;/code&gt; again.  Still reporting library is too old.  Attempt to remove old library from software manager; decide against it when software manager decides it wants to remove a host of other packages that depend on the existing one (as it is unaware of the newer version I just installed).  Find the files that tell &lt;code&gt;pkg-config&lt;/code&gt; what's installed, and remove the entries for the older version, so it won't see those before it sees the newer version.  (n.b.:  I discovered I could do this more easily by telling &lt;code&gt;pkg-config&lt;/code&gt; to look in &lt;code&gt;/usr/local/lib&lt;/code&gt; first, and &lt;code&gt;/usr/lib&lt;/code&gt; second.)&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;./configure&lt;/code&gt; again.  Another missing library.  Not in the package installer.  Search the internet.  No pre-compiled package.  Download source.  Attempt to compile library from source code, get an error.  Search the internet.  Find that someone has submitted a patch for that problem.  Apply patch.  Compile and install library.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;./configure&lt;/code&gt; again.  Configuration completes.  Attempt to compile.  Get errors about missing symbols.  Go online, find a reference to the problem and an invitation to join an irc chat room for support.&lt;/li&gt;
&lt;li&gt;Install irc client and join chat room.  Told that the version of Workbench is out of date, and given a link to the next version.&lt;/li&gt;
&lt;li&gt;Go to link.  Binary package is available &amp;mdash; for RHEL6, not 5.  Download the source.  Run &lt;code&gt;./configure&lt;/code&gt;.  Find another library that's too old.  Download updated library, and updates of the libraries it depends on.  Compile and install.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;./configure&lt;/code&gt;.  &lt;code&gt;pkg-config&lt;/code&gt; finds the updated version of the libraries, but the next check finds the old version, and demands that I uninstall the old version.  Decide against it when I see that attempting to uninstall it from the package manager will uninstall over half of the packages on my system.&lt;/li&gt;
&lt;li&gt;Decide to throw caution to the wind and download the RHEL6 binary package.  Software installer complains that it depends on libraries I don't have and/or have old versions of, and it can't automatically find (including an updated version of some of the MySql database files themselves, which I could not accept, as I have to develop against a specific version of the database to provide accurate support); and it refuses to install.&lt;/li&gt;
&lt;li&gt;Go to MySql download site.  Download Windows version of Workbench to Windows workstation.  Double-click installer.  Enter connection credentials to database running on Linux.  Connect successfully.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I like the &lt;i&gt;idea&lt;/i&gt; of Linux; I really do.  There are limitless possibilities with it.  And I am reasonably confident that, if I ever did get this software installed, I wouldn't need to worry about it again.  I have a Linux server at home that took me several days to set up, but once I got it running, I've rarely had to touch it.  And on the occasions when I do decide to update it, it works pretty &lt;a href="http://www.yakkowarner.com/2009/03/well-that-was-painless.html"&gt;magically&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;But when it takes two days of my time to attempt to install a utility &amp;mdash; and ultimately failing &amp;mdash; when I can do the same task (and &lt;i&gt;succeed&lt;/i&gt;) on Windows in less than ten minutes (with most of that time spent downloading the file I want), sometimes I wonder if it'll ever make a viable replacement for an OS that, despite all its problems, most of the time "just works".&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-7425530813208069230?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/7425530813208069230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=7425530813208069230&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/7425530813208069230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/7425530813208069230'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2010/06/installing-software-linux-vs-windows.html' title='Installing software: Linux vs. Windows'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-7218590478947564893</id><published>2010-06-15T20:43:00.001-06:00</published><updated>2010-06-15T20:43:00.223-06:00</updated><title type='text'>A 400-Pound Doorstop</title><content type='html'>&lt;p&gt;I woke up Sunday morning to my wife asking me for the password to my laptop, so she could put on a DVD for the toddler; and said toddler explaining in great detail how the TV doesn't turn on when you press the button.  The TV had served pretty well for 9 years, but lately it had been showing signs of decay &amp;mdash; the lower-left corner was perpetually out of focus, the image would very slightly and very occasionally "fuzz" for just a second), but it had finally given up the ghost.&lt;/p&gt;
&lt;p&gt;On the one hand, I had hoped it would survive long enough for 3D technology to mature and become the "standard".  On the other, if it's going to die, the week leading up to Father's Day, with the corresponding retail sales, isn't a bad time to do it.&lt;/p&gt;
&lt;p&gt;Yesterday, we went out to a certain big electronics store known for blue and yellow polo shirts and compared TVs.  Because of where we were putting the TV, we had a fixed size limit.  A 50" &lt;i&gt;might&lt;/i&gt; have &lt;i&gt;barely&lt;/i&gt; fit the space, with a fraction of an inch to spare, but we didn't really want to cut it that close &amp;mdash; the kids would be bumping it into the walls with reckless abandon.  LED screens did provide a sharper, higher-contrast picture than the plain LCDs, but the technology is still new enough that the price difference was pretty large.  In the end, our eyes were drawn to the Samsung models, especially since the quality of the LCD model was quite comparable to the LED (and both models seemed to outshine other brands, both LED and LCD).&lt;/p&gt;
&lt;p&gt;Long story short, we brought home the reasonably-on-sale TV and the not-on-sale mount, and paid for Best Buy to come and recycle the old TV.  I had figured we would wait for them to remove the old behemoth before we installed the new one, but my wife was insistent on installing it immediately.  (Excited for the new TV, or desperate to entertain the kids &amp;mdash; you make the call.)  We were less than gentle in rolling the old TV out of place (what are we going to do, break it?) and managed to get the new one set up with a minimum of finger-smashing incidents.&lt;/p&gt;
&lt;p&gt;We hooked it up to the DVD player and the Xbox, and I spent a little bit of time viewing the videos from E3 and playing the game that happened to be in the disc drive before going to bed.  I have to say, it was like getting a new pair of glasses.  Everything is much brighter, sharper, clearer, easier to see.  I used to complain about the Xbox dashboard and being unable to read the dark-grey-on-light-grey 6-point text (especially since it fell in the out-of-focus area on the old TV), but now, even though I still think it's a less-than-optimal color scheme, I have to say it's insanely easy to read when the letters actually have edges.  The game, too, was exceptionally clear and sharp.&lt;/p&gt;
&lt;p&gt;The only down side?  (Well, besides the knowledge that 3D is coming, and it probably won't be too long that I'll find myself a generation behind again.)  My wife wants a blu-ray player to go with it now.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-7218590478947564893?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/7218590478947564893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=7218590478947564893&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/7218590478947564893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/7218590478947564893'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2010/06/400-pound-doorstop.html' title='A 400-Pound Doorstop'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-3652890375229971614</id><published>2010-06-05T21:52:00.002-06:00</published><updated>2010-06-05T21:55:52.986-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bandwidth'/><title type='text'>AT&amp;T showing how data caps stifle services</title><content type='html'>&lt;p&gt;AT&amp;amp;T is making news for announcing the end of its unlimited 3G wireless data plan.  While those who are currently on such a plan can keep it, no one getting a new plan will have "unlimited" even as an option.  The reason this is such big news, of course, is because Apple has an exclusive contract with AT&amp;amp;T to provide service for all iPhones and iPads.&lt;/p&gt;
&lt;p&gt;I'm not going to debate the popularity of Apple's products, mainly because I don't understand it.  I've owned a Tablet PC, and the iPad does less, by design.  The iPhone doesn't do any more than a lot of other phones out there.  Both devices are locked into Apple's closed and tightly-controlled environment and its single, exclusive service provider.  Despite all that, the fact is, the devices are very popular and very hyped.  And because of that, people take notice.&lt;/p&gt;
&lt;p&gt;Because of the iPad's popularity, media companies are actively looking at streaming more data to these devices.  Major media companies have apps for the devices, Netflix can stream movies to them, and more are coming.&lt;/p&gt;
&lt;p&gt;And now, AT&amp;amp;T has essentially put a limit on these new services, saying you can only use 200MB or 2GB (depending on your plan) a month.&lt;/p&gt;
&lt;p&gt;That number seems extremely low, but how much is it really?  There's an article on Clicker.com, titled &lt;a href="http://www.clicker.com/blog/how-much-video-can-you-actually-stream-with-atts-new-data-plans/"&gt;How Much Video Can You Actually Stream With AT&amp;T’s New Data Plans?&lt;/a&gt; that calculates the numbers with real-world data.&lt;/p&gt;
&lt;p&gt;Unfortunately, I can't tell if it's high or low.  I don't have a data plan personally, as I find them too expensive to deal with and am usually close enough to a PC with a "real" internet connection throughout most of my day.  There have been times, though, that I've wished I've had it, but for the most part, it's been a convenience I've been happy enough to live without.  (As an aside, I have a Zune with me often, and it can use Wi-Fi when available.  However, I have almost never found a convenient open Wi-Fi access point when I need one.  So, I find the claims that these new limits won't affect anyone because "open Wi-Fi is everywhere" to be laughable at best, and downright insulting at worst.)&lt;/p&gt;
&lt;p&gt;If I were in a position where I had more roaming downtime, such as when I worked downtown and took the bus or train in to work every morning, I could see making a lot of use of 3G services.  However, because I drive myself to work, and I work on a computer all day, I think I might end up being one of the "unaffected" lot, finding that my actual usage was well below the cap.&lt;/p&gt;
&lt;p&gt;Interestingly enough, though, the measurements only take into account &lt;i&gt;active&lt;/i&gt; usage.  Sometime soon, the next iPhone OS will be released, and it will allow for multitasking, so that services can be running in the background.  What happens when people suddenly have the ability to stream music over 3G &lt;i&gt;in the background&lt;/i&gt; while they're doing other things?  Data usage will no longer be &lt;i&gt;active&lt;/i&gt;, but it'll be racking up &lt;i&gt;passively&lt;/i&gt; in the background.  Will 200MB be enough then?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-3652890375229971614?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/3652890375229971614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=3652890375229971614&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/3652890375229971614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/3652890375229971614'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2010/06/at-showing-how-data-caps-stifle.html' title='AT&amp;T showing how data caps stifle services'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-5803078958152039524</id><published>2010-06-01T20:47:00.000-06:00</published><updated>2010-06-01T20:47:26.497-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bandwidth'/><title type='text'>May Bandwidth</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/_zS29HOwsh6M/TAXAiS5nx1I/AAAAAAAAB54/QL72zvs1lkA/s1600/2010MayBandwidth.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="232" src="http://3.bp.blogspot.com/_zS29HOwsh6M/TAXAiS5nx1I/AAAAAAAAB54/QL72zvs1lkA/s320/2010MayBandwidth.png" tt="true" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;table style="border-bottom: #ccc 1px solid; border-collapse: collapse; border-left: #ccc 1px solid; border-right: #ccc 1px solid; border-top: #ccc 1px solid; margin: auto; width: 320px;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;In&lt;/td&gt;&lt;td style="text-align: center;"&gt;84.90 GB&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;Out&lt;/td&gt;&lt;td style="text-align: center;"&gt;6.38 GB&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th style="border-top: #000 1px solid; text-align: center;"&gt;Total&lt;/th&gt;&lt;th style="border-top: #000 1px solid; text-align: center;"&gt;91.29 GB&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align: center; color:ccc; font-size:smaller;"&gt;Comcast's measurement&lt;/td&gt;&lt;td style="text-align: center; color:ccc; font-size:smaller;"&gt;75 GB (-16.29)&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Another exciting post in my most consistent blog posting to date.  I've noticed that, although &lt;a href="http://speedtest.net"&gt;SpeedTest.net&lt;/a&gt; seems to still report a fairly consistent rate, things in general don't seem quite as fast as they used to be.  Netflix movies have a tendency to go "blocky" a little more frequently; YouTube videos don't always download faster than they play back; even Xbox Live updates, which used to download in a couple seconds, seem to take close to a minute to download now; and games don't always report my network status as "green".  Not sure what the problem is, or if it's just my perception &amp;mdash; from the accounts I've read, even though it took me a couple hours to download the &lt;i&gt;Halo Reach&lt;/i&gt; beta from overloaded servers, I still got a better connection than most.&lt;/p&gt;
&lt;p&gt;Not that I wouldn't welcome a little competition around here to help keep Comcast on their toes.  O FiOS, where art thou?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-5803078958152039524?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/5803078958152039524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=5803078958152039524&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/5803078958152039524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/5803078958152039524'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2010/06/may-bandwidth.html' title='May Bandwidth'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_zS29HOwsh6M/TAXAiS5nx1I/AAAAAAAAB54/QL72zvs1lkA/s72-c/2010MayBandwidth.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-4651943117137508428</id><published>2010-05-04T10:27:00.000-06:00</published><updated>2010-05-04T10:27:19.005-06:00</updated><title type='text'>Road Rage Murder in Aurora</title><content type='html'>&lt;p&gt;There's an urban legend that, if you see a car at night with their lights off and you flash your brights at them, you may be triggering a gang initiation where they will hunt you down and kill you.&lt;/p&gt;
&lt;p&gt;It's the first thing I thought of when I heard the story of what happened to a young man who lived in our town.  He was riding home with some friends, when an SUV came up behind them on the highway, tailgating them, and started flashing their brights.  The driver flashed his brake lights at the SUV, at which point the SUV moved over to the right, pulled alongside, and fired shots into their car, fatally wounding the man.&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;a href="http://www.9news.com/news/local/article.aspx?storyid=138127&amp;catid=222"&gt;NBC 9 News&lt;/a&gt; &amp;middot; &lt;a href="http://www.kdvr.com/news/kdvr-i225-050110,0,3327786.story"&gt;KDVR Fox 31&lt;/a&gt; &amp;middot; &lt;a href="http://www.thedenverchannel.com/news/23437754/detail.html"&gt;Denver Channel ABC 7&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I can't imagine what they must be going through.  To have such a random and senseless act of violence inflicted on them, and then to know that the murderer is still out there; I know it makes &lt;i&gt;me&lt;/i&gt; angry and scared just thinking about it, and I never met this young man.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-4651943117137508428?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/4651943117137508428/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=4651943117137508428&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/4651943117137508428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/4651943117137508428'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2010/05/road-rage-murder-in-aurora.html' title='Road Rage Murder in Aurora'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-4957697345145868928</id><published>2010-05-02T23:31:00.000-06:00</published><updated>2010-05-02T23:31:21.960-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bandwidth'/><title type='text'>April Bandwidth</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/_zS29HOwsh6M/S95T88t6wkI/AAAAAAAABwk/6RQW4qYD8k0/s1600/2010AprilBandwidth.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="221" src="http://3.bp.blogspot.com/_zS29HOwsh6M/S95T88t6wkI/AAAAAAAABwk/6RQW4qYD8k0/s320/2010AprilBandwidth.png" tt="true" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;table style="border-bottom: #ccc 1px solid; border-collapse: collapse; border-left: #ccc 1px solid; border-right: #ccc 1px solid; border-top: #ccc 1px solid; margin: auto; width: 320px;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;In&lt;/td&gt;&lt;td style="text-align: center;"&gt;70.19 GB&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;Out&lt;/td&gt;&lt;td style="text-align: center;"&gt;7.45 GB&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th style="border-top: #000 1px solid; text-align: center;"&gt;Total&lt;/th&gt;&lt;th style="border-top: #000 1px solid; text-align: center;"&gt;77.64 GB&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align: center; color:ccc; font-size:smaller;"&gt;Comcast's measurement&lt;/td&gt;&lt;td style="text-align: center; color:ccc; font-size:smaller;"&gt;67 GB (-10.64)&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;While not quite falling back to the "cable-era" numbers, it's still quite a drop from last month.  I have noticed the older kids seem to pick out a DVD off the shelf more often than hitting the Netflix queue lately, and even during the day at work I haven't seen my Xbox account signed in watching Netflix as often as it did last month.  Definitely not to say that it's not getting used, just that it's starting to balance out between our other entertainment options a bit.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-4957697345145868928?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/4957697345145868928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=4957697345145868928&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/4957697345145868928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/4957697345145868928'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2010/05/april-bandwidth.html' title='April Bandwidth'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_zS29HOwsh6M/S95T88t6wkI/AAAAAAAABwk/6RQW4qYD8k0/s72-c/2010AprilBandwidth.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-8829857323933914699</id><published>2010-04-26T19:36:00.000-06:00</published><updated>2010-04-26T19:36:50.748-06:00</updated><title type='text'>Provident Lending?  More like Provident Annoying</title><content type='html'>&lt;p&gt;So, we were closing on a house on behalf of my mother, who is moving nearby.  The terms of this are fairly amusing and will be the subject of another blog post, but this one is just a rant to say:&lt;/p&gt;
&lt;p style="font-weight:bold; font-size:175%;"&gt;Never, under any circumstances, use Provident Lending.&lt;/p&gt;
&lt;p&gt;Last week was the first scheduled closing date.  My wife had scheduled to do the closing at 5pm, so she could come by work and leave the kids with me and I'd only have to leave work a little early.  As I got home, I found a series of messages on the answering machine.  The messages were asking my wife to get to the office in ten minutes, because the lending company, Provident Lending, had decided they did not want to do the closing at 5pm and wanted to do it immediately, and if she did not get there in 10 minutes, it would be a few days before closing could happen again.  (Apparently, when a lender does a "funding", it is for a specific date and time, and if it does not happen, the funding must be reissued.)&lt;/p&gt;
&lt;p&gt;While it is true that the call should have gone to my wife's cell phone instead of just left at home (the realtor said she seemed to have lost my wife's cell phone at that moment), it wouldn't have helped.  The Denver area is quite large, and even if my wife had been home to receive the phone call, and even if she would've been able to instantly get in the car and start driving as soon as the call came in (an unrealistic expectation with a toddler and an infant), it would've been physically impossible for her to reach the office in 10 minutes or less.  Add this to the complication that, at the time the calls came in, she was on her way to pick the two older boys up from school, and it's hardly any surprise closing did not happen that day.&lt;/p&gt;
&lt;p&gt;The closing today ran a little long, because Provident Lending is extremely picky in what they accept for documents.  The power of attorney form had to be their own, because they require extra information that is not present on a "standard" form.  They rejected two signatures from my wife where she left out the word "by" between her name and my mother's.  And they rejected one signature from the representative from the title company because "it appeared to be crossed out" &amp;mdash; there was an extraneous horizontal mark on one of the letters that no one else could even see.  (According to those who have worked with Provident Lending before, they will also reject signatures if you write sevens with an extra horizontal line on the same grounds, that they "appear crossed out".)&lt;/p&gt;
&lt;p&gt;To quote my wife:&lt;blockquote&gt; They were completly ridiculous in their demands, delayed the closing a week due to them not getting documents ready (they had everything they needed), and wanted to reject closing documents because the notary's signature had a small mark inside a single letter and it "looked like a cross-out" We couldn't see this mark. And we were informed by the Title Company that this is their normal practice.&lt;/blockquote&gt;&lt;/p&gt;
&lt;p&gt;It's as if they didn't really want our business.  Which is fine.  The broker who set us up with the realtor has apologized for this (he is covering the $50/day cost their last-minute deadline and refunding delay would've cost us out of his own pocket) and swears he will never use them again; and the next time we do any financing, you'd better believe we will not be doing business with Provident Lending.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-8829857323933914699?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/8829857323933914699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=8829857323933914699&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/8829857323933914699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/8829857323933914699'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2010/04/provident-lending-more-like-provident.html' title='Provident Lending?  More like Provident Annoying'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-3174566964985265907</id><published>2010-04-19T09:12:00.000-06:00</published><updated>2010-04-19T09:12:46.524-06:00</updated><title type='text'>Last time, on General Highschool</title><content type='html'>&lt;p&gt;Remember the &lt;a href="http://www.yakkowarner.com/2010/02/welcome-to-george-orwell-high-school.html"&gt;story&lt;/a&gt; of the Lower Merion School District (just northwest of Philadelphia, PA) and the complaint that they busted a student while they were remotely using his camera to spy on him in his own home?  Naturally, an investigation was launched, at which time the Philadelphia Federal Court &lt;a href="http://arstechnica.com/tech-policy/news/2010/02/spying-school-agrees-to-preserve-evidence-in-laptopgate.ars"&gt;ordered the school&lt;/a&gt; not to remove or destroy any evidence, to which the school agreed.&lt;/p&gt;
&lt;p&gt;Remember, too, at the time, the school district insisted that it only activated those cameras when there was reason to believe the laptop was stolen (which they insist they had cause to believe in this case), and that they have only done this a total of 42 times.&lt;/p&gt;
&lt;p&gt;A new motion &lt;a href="http://arstechnica.com/tech-policy/news/2010/04/school-it-allegedly-took-thousands-of-pics-in-webcam-case.ars"&gt;filed last week&lt;/a&gt; alleges that, after investigating the evidence stored on the school district's computers, there were over 400 pictures taken alone of the student in his room, along with "thousands" of pictures of other students.  The investigation also turned up screenshots of IM conversations and &amp;mdash; perhaps the most damning evidence of all &amp;mdash; emails commenting on the pictures, with one of the staff saying it was "like a little soap opera", with an administrator's response, "I know.  I love it!"&lt;/p&gt;
&lt;p&gt;Whether the spokesman for the school district believed what he was saying about the laptops being activated only in cases of stolen laptops and only being activated less than four dozen times, I don't know.  But it's becoming increasingly obvious that this is not true.&lt;/p&gt;
&lt;p&gt;This should, at the very least, serve as a warning.  This kind of monitoring power is bad, mm'kay?  Honestly, I don't think I would trust myself to have that kind of power and be able to resist the temptation of turning it into my own personal little soap opera; and honestly, I wouldn't expect anyone to trust me with that power, even if I &lt;i&gt;were&lt;/i&gt; behaving responsibly.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-3174566964985265907?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/3174566964985265907/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=3174566964985265907&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/3174566964985265907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/3174566964985265907'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2010/04/last-time-on-general-highschool.html' title='Last time, on General Highschool'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-3057837773664084228</id><published>2010-04-02T22:45:00.000-06:00</published><updated>2010-04-02T22:45:06.228-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bandwidth'/><title type='text'>March Bandwidth</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/_zS29HOwsh6M/S7bDCjNZKaI/AAAAAAAABvs/KyGu7Qrtd64/s1600-h/2010MarchBandwidth.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="223" nt="true" src="http://4.bp.blogspot.com/_zS29HOwsh6M/S7bDCjNZKaI/AAAAAAAABvs/KyGu7Qrtd64/s320/2010MarchBandwidth.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;table style="border-bottom: #ccc 1px solid; border-collapse: collapse; border-left: #ccc 1px solid; border-right: #ccc 1px solid; border-top: #ccc 1px solid; margin: auto; width: 320px;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;In&lt;/td&gt;&lt;td style="text-align: center;"&gt;110.44 GB&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;Out&lt;/td&gt;&lt;td style="text-align: center;"&gt;7.91 GB&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th style="border-top: #000 1px solid; text-align: center;"&gt;Total&lt;/th&gt;&lt;th style="border-top: #000 1px solid; text-align: center;"&gt;118.35 GB&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align: center; color:ccc; font-size:smaller;"&gt;Comcast's measurement&lt;/td&gt;&lt;td style="text-align: center; color:ccc; font-size:smaller;"&gt;103 GB (-15.35)&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;If there was ever any question that switching from watching TV over broadcast cable to watching videos streamed over the internet for entertainment would have an effect on bandwidth, this should answer it.&lt;/p&gt;
&lt;p&gt;There are certain viewing habits I've noticed from my family that make for a rather "inefficient" use of data.  For instance, my kids like watching videos multiple times.  As my toddler is watching the same episode of &lt;i&gt;Kipper the Dog&lt;/i&gt; for the third time in a row on streaming Netflix, those video bits are being streamed over the internet from Netflix's servers anew each time.  I also noticed that videos that I know for certain that we already own on DVD were being watched via Netflix.  Why?  Because it was just easier to pull them up on an on-screen menu than to try and dig through the pile of kids' movies to find it.&lt;/p&gt;
&lt;p&gt;Still, while all these "wasted bits" did make for a few high-volume days, they were in enough of the minority that the entire month still managed to come in under half of the monthly cap.  There would've had to have been quite a few more high-volume days to even come close.&lt;/p&gt;
&lt;p&gt;Although I'll certainly admit to feeling nervous when this month started.  With what turned out to be the highest-volume day hitting so early in the month, vnstat was predicting a much larger monthly total for a while.&amp;hellip;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-3057837773664084228?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/3057837773664084228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=3057837773664084228&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/3057837773664084228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/3057837773664084228'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2010/04/march-bandwidth.html' title='March Bandwidth'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_zS29HOwsh6M/S7bDCjNZKaI/AAAAAAAABvs/KyGu7Qrtd64/s72-c/2010MarchBandwidth.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-4706570779068121770</id><published>2010-03-12T00:32:00.000-07:00</published><updated>2010-03-12T00:32:54.292-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bandwidth'/><title type='text'>The meter is here at last</title><content type='html'>&lt;p&gt;&lt;a href="http://1.bp.blogspot.com/_zS29HOwsh6M/S5nqk1-sYcI/AAAAAAAABtw/Wl3AFyFHT4Y/s1600-h/ComcastBandwidthMeter.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="253" src="http://1.bp.blogspot.com/_zS29HOwsh6M/S5nqk1-sYcI/AAAAAAAABtw/Wl3AFyFHT4Y/s320/ComcastBandwidthMeter.png" vt="true" width="320" style="float:right; padding-left:5px;" /&gt;&lt;/a&gt;After "only" 18 months from the time Comcast officially instituted the 250GB/month bandwidth cap on residential internet service, I received an email this morning announcing the roll-out of their bandwidth meter to Colorado. So now, I can finally get an official reading of what Comcast thinks my usage per month is (versus what my own measurement says).&lt;/p&gt;
&lt;p&gt;In addition to showing you your current month's use, it shows a graph of your previous three months; so I was able to compare my own measurement with the graph. Although the number they show for the current month is just about even with what I'm measuring so far, there's actually quite a difference between the numbers they show per month for the last three than what I came up with:&lt;/p&gt;&lt;br clear="all"/&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/_zS29HOwsh6M/S5nqaRZi12I/AAAAAAAABts/Bz1p08wSO0w/s1600-h/2010FebruaryBandwidthComparison.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="224" src="http://3.bp.blogspot.com/_zS29HOwsh6M/S5nqaRZi12I/AAAAAAAABts/Bz1p08wSO0w/s320/2010FebruaryBandwidthComparison.png" vt="true" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;I'm not sure if I should breathe more easily that they're measuring less than I am. What is the source of this mismatch? Will there be a month when they measure higher than I do, and will that measurement be high enough to cut me off?&lt;/p&gt;
&lt;p&gt;Incidentally, I thought it was with no small bit of irony that the email announcing the bandwidth meter came on the same day as an email announcing their "&lt;a href="http://security.comcast.net/backup/details/"&gt;Secure Backup &amp;amp; Share&lt;/a&gt;" offering.  2GB of online storage comes free with the internet service, but for $10/month (or $100/year), you can increase that storage to 200GB.  Of course, if you attempt to &lt;i&gt;use&lt;/i&gt; that 200GB of storage within a single month (e.g., you upload 200GB, your hard drive crashes, and you go to download that 200GB again), you'll exceed your bandwidth cap and get your internet service disconnected.&amp;hellip;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-4706570779068121770?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/4706570779068121770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=4706570779068121770&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/4706570779068121770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/4706570779068121770'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2010/03/meter-is-here-at-last.html' title='The meter is here at last'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_zS29HOwsh6M/S5nqk1-sYcI/AAAAAAAABtw/Wl3AFyFHT4Y/s72-c/ComcastBandwidthMeter.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-8801184880287848301</id><published>2010-03-07T16:45:00.000-07:00</published><updated>2010-03-07T16:45:05.332-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bandwidth'/><title type='text'>February Bandwidth</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/_zS29HOwsh6M/S5Q0riJSwWI/AAAAAAAABtQ/wpyG1zSrxt0/s1600-h/2010FebruaryBandwidth.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="222" kt="true" src="http://3.bp.blogspot.com/_zS29HOwsh6M/S5Q0riJSwWI/AAAAAAAABtQ/wpyG1zSrxt0/s320/2010FebruaryBandwidth.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;table style="border-bottom: #ccc 1px solid; border-collapse: collapse; border-left: #ccc 1px solid; border-right: #ccc 1px solid; border-top: #ccc 1px solid; margin: auto; width: 320px;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;In&lt;/td&gt;&lt;td style="text-align: center;"&gt;58.53 GB&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;Out&lt;/td&gt;&lt;td style="text-align: center;"&gt;5.08 GB&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th style="border-top: #000 1px solid; text-align: center;"&gt;Total&lt;/th&gt;&lt;th style="border-top: #000 1px solid; text-align: center;"&gt;63.61 GB&lt;/th&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;This should make for an interesting month.  What makes February so special is that it's the last month that we had cable TV.  We're becoming more used to the idea of streaming Netflix movies whenever we want, and the $60/month for mostly-unwatched TV just wasn't worth it.&lt;/p&gt;
&lt;p&gt;I almost regretted cancelling the cable bill when I realized the Duke/UNC game was on ESPN over the weekend (a mere two days &lt;i&gt;after&lt;/i&gt; losing cable, of course), but I quickly got over that when I found the game broadcast on ESPN's website.&lt;/p&gt;
&lt;p&gt;The question remains, of course, will the complete removal of cable and the complete dependence of the internet (and prepurchased DVDs) for video entertainment have an impact on bandwidth?  We'll find out just how big of an impact in next month's exciting episode!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-8801184880287848301?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/8801184880287848301/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=8801184880287848301&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/8801184880287848301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/8801184880287848301'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2010/03/february-bandwidth.html' title='February Bandwidth'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_zS29HOwsh6M/S5Q0riJSwWI/AAAAAAAABtQ/wpyG1zSrxt0/s72-c/2010FebruaryBandwidth.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-1860870967796085331</id><published>2010-02-24T20:51:00.000-07:00</published><updated>2010-02-24T20:51:20.779-07:00</updated><title type='text'>Cutting the Cord</title><content type='html'>&lt;p&gt;The price of our cable TV service has increased steadily over the years.  Right now, we pay close to $60 a month for "Expanded Basic", which is the lowest option that gives us Disney and Nickelodeon.  It's just plain old "analog" cable, which I prefer for a few major reasons:  first, there's no extra equipment, I can take a "cable-ready" TV to any room in the house, plug a coax cable between it and the wall, and get all the channels I need; second, there's no extra cost for that extra equipment; third, the service is just plain cheaper.  Comcast did let us try out digital cable for three months with no obligation once (with no change in price during our trial even), and although the digital box was neat, especially being able to pause and rewind live TV, it just wasn't going to be worth how little we'd use it.&lt;/p&gt;
&lt;p&gt;With more and more content available over the internet, and the fact that our kids seem to consistently opt for watching a DVD over the TV, the need for a pipeline of predetermined, commercial-laden programming just isn't there.  We can take that $60/month and put it to much more useful purposes.  That's two or three new DVDs a month (even more if they're the $5 discs with old cartoons that my boys have enjoyed lately); or a new release video game; or half way to a nice universal remote that runs the TV, DVD player, and the Xbox; or simply $60 that we just don't have to spend.&lt;/p&gt;
&lt;p&gt;Besides watching DVDs, we also have Netflix (whose basic sub-$10 service, with one-at-a-time disc by mail and unlimited internet streaming, is more than sufficient for our viewing habits).  When I hear a rumor of a TV episode I absolutely &lt;i&gt;have&lt;/i&gt; to see (such as South Park's "Dancing with Smurfs"), it's on the internet in one form or another.  Anything else, we just don't care about.  We've never seen Heroes, never rescheduled our week around Lost, never lamented missing an episode of American Idol.  And I don't feel bad about it at all.&lt;/p&gt;
&lt;p&gt;The only thing we might miss is the toddler shows &amp;mdash; no Mickey Mouse Clubhouse, Handy Manny, Dora the Explorer, Little Einsteins, or Backyardigans to throw on for the 3-year-old.  But then, his attention span never lasted a whole show, anyway, so it's hardly a big loss.&lt;/p&gt;
&lt;p&gt;The Comcast service rep that I talked to didn't give me a hard time at all when I called to cancel the TV service.  He did say there were less expensive TV options, but I told him that I'd rather just completely cancel it, and he didn't give me any more push back.  In fact, the process was a lot more smooth than I was expecting.  (Thank you, Comcast, for having a friendly and helpful representative on the other end of the line.  He suggested an option, then accepted my decision without complaint.)  In about a week, we will have officially cut the cord on cable TV.&lt;/p&gt;
&lt;p&gt;The next step will be shaving a few bucks off the phone bill by moving from Comcast's $45/month VOIP offering to something a little more affordable as well.  Ooma looks pretty appealing, although I do wonder about their business plan (can they really survive on "no monthly fees ever"?).  Vonage is a possibility as well.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-1860870967796085331?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/1860870967796085331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=1860870967796085331&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/1860870967796085331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/1860870967796085331'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2010/02/cutting-cord.html' title='Cutting the Cord'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-6483910888686598349</id><published>2010-02-23T09:18:00.000-07:00</published><updated>2010-02-23T09:18:40.614-07:00</updated><title type='text'>Welcome to George Orwell High School</title><content type='html'>&lt;p&gt;There's a story breaking about a boy in the Lower Merion School District of Ardmore, PA who was busted for "improper behavior".  What is making this story so exceptional (and frightening) is how, apparently, this behavior was discovered.  In this school district, students are issued Macintosh laptops, which, as one might expect, are installed with various lockdowns and security software in place.  However, it seems, part of this "security software" includes the ability for the school to remotely activate the laptops' built-in webcam; and the student's "improper behavior" was &lt;a href="http://www.boingboing.net/2010/02/17/school-used-student.html"&gt;caught on this camera in his own home&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The school has come out and said the camera is only activated in situations when the laptop is considered "stolen", except they have not indicated that this was one of those situations.  This seems clearly a case of a school violating students' privacy and grossly overreaching their bounds by policing kids in their own homes.  It already has the interest of the FBI, who are &lt;a href="http://arstechnica.com/tech-policy/news/2010/02/fbi-grand-jury-now-probing-high-school-webcam-spying.ars"&gt;investigating&lt;/a&gt; the school, which has already &lt;a href="http://arstechnica.com/tech-policy/news/2010/02/school-backs-off-on-laptop-spying-policy-in-lieu-of-lawsuit.ars"&gt;backed off&lt;/a&gt; on their supposedly-benign security policy.&lt;/p&gt;
&lt;p&gt;The more that comes out on the story, the worse the school sounds, too.  It seems that the "inappropriate behavior" that was "caught" by the webcam was the student &lt;a href="http://reason.com/blog/2010/02/20/lower-pervian-school-district"&gt;eating candy&lt;/a&gt;.  At home.  Busted because the candy "looks like" drugs when viewed over a shot over a surreptitiously-controlled webcam.&lt;/p&gt;
&lt;p&gt;The software itself, which is analyzed in this &lt;a href="http://strydehax.blogspot.com/2010/02/spy-at-harrington-high.html"&gt;Stryde Hax blog post&lt;/a&gt; plus a link to a hands-on with an actual Lower Marion laptop on the &lt;a href="http://www.saveardmorecoalition.org/blog/2"&gt;Save Ardmore Coalition blog&lt;/a&gt;, is pretty scary.  Besides its constant "phoning home" with location and pictures, there's apparently a lot of insecurities in the way it runs (rather ironic for a supposed "security" program).&lt;/p&gt;
&lt;p&gt;I can only say that any equipment that my children are issued by our schools (which aren't giving laptops away yet), I will be analyzing closely.  Not only will I be monitoring my network, but cameras and microphones will be covered with an adequate supply of electrical tape.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-6483910888686598349?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/6483910888686598349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=6483910888686598349&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/6483910888686598349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/6483910888686598349'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2010/02/welcome-to-george-orwell-high-school.html' title='Welcome to George Orwell High School'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-7598157611961845321</id><published>2010-02-02T20:43:00.000-07:00</published><updated>2010-02-02T20:43:32.842-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bandwidth'/><title type='text'>January Bandwidth</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/_zS29HOwsh6M/S2jsPgBGsmI/AAAAAAAABlk/9J2QyMPdvnw/s1600-h/2010JanuaryBandwidth.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="223" kt="true" src="http://4.bp.blogspot.com/_zS29HOwsh6M/S2jsPgBGsmI/AAAAAAAABlk/9J2QyMPdvnw/s320/2010JanuaryBandwidth.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;table style="border-bottom: #ccc 1px solid; border-collapse: collapse; border-left: #ccc 1px solid; border-right: #ccc 1px solid; border-top: #ccc 1px solid; margin: auto; width: 320px;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;In&lt;/td&gt;&lt;td style="text-align: center;"&gt;56.50 GB&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;Out&lt;/td&gt;&lt;td style="text-align: center;"&gt;6.46 GB&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th style="border-top: #000 1px solid; text-align: center;"&gt;Total&lt;/th&gt;&lt;th style="border-top: #000 1px solid; text-align: center;"&gt;62.97 GB&lt;/th&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Here we are, in Month 16 of capped internet usage (incidentally, Comcast's alleged bandwidth monitor is still absent from my account page).  January, apparently, was a heavier use month, although off the top of my head, I'm not sure why.  Aside from what looks like a couple of big movie days (although one on a Thursday is unusual &amp;mdash; did I download something that day?), the overall usage seems to have increased a bit.&lt;/p&gt;
&lt;p&gt;It could have something to do with my getting a new Zune media player and subscribing to several audio and video podcasts.  The added bandwidth might be enough to cause an uptick in general activity.&lt;/p&gt;
&lt;p&gt;It's interesting that I can't seem to identify a single definite cause, though, and yet data consumption has definitely increased.  It could be evidence that, as we become more dependent on the internet generally, usage will just keep going up without even realizing it, and what seems like a reasonable cap today may be restricting tomorrow.  Or it could be that there's a perfectly reasonable explanation that my geezerly brain just can't recall.  Or it could be just a fluke.  We'll see.&amp;hellip;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-7598157611961845321?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/7598157611961845321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=7598157611961845321&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/7598157611961845321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/7598157611961845321'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2010/02/january-bandwidth.html' title='January Bandwidth'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_zS29HOwsh6M/S2jsPgBGsmI/AAAAAAAABlk/9J2QyMPdvnw/s72-c/2010JanuaryBandwidth.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-478755204334850393</id><published>2010-01-02T10:45:00.000-07:00</published><updated>2010-01-02T10:45:47.047-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bandwidth'/><title type='text'>Total Bandwidth for 2009</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/_zS29HOwsh6M/Sz7CxBxg-lI/AAAAAAAABgI/HanoRFAgdS4/s1600-h/2009TotalBandwidth.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://2.bp.blogspot.com/_zS29HOwsh6M/Sz7CxBxg-lI/AAAAAAAABgI/HanoRFAgdS4/s320/2009TotalBandwidth.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&lt;table style="border-bottom: #ccc 1px solid; border-collapse: collapse; border-left: #ccc 1px solid; border-right: #ccc 1px solid; border-top: #ccc 1px solid; margin: auto; width: 320px;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;In&lt;br /&gt;
&lt;/td&gt;&lt;td style="text-align: center;"&gt;396.21 GB&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;Out&lt;br /&gt;
&lt;/td&gt;&lt;td style="text-align: center;"&gt;67.38 GB&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th style="border-top: #000 1px solid; text-align: center;"&gt;Total&lt;br /&gt;
&lt;/th&gt;&lt;th style="border-top: #000 1px solid; text-align: center;"&gt;463.57 GB&lt;br /&gt;
&lt;/th&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;I thought it'd be fun to get a yearly total for bandwidth, since I had the numbers available.  The total is less than two months' worth of data allowed by Comcast's 250GB/month cap.  It looks like all the HD video streaming in November definitely had a noticeable effect, though.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-478755204334850393?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/478755204334850393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=478755204334850393&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/478755204334850393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/478755204334850393'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2010/01/total-bandwidth-for-2009.html' title='Total Bandwidth for 2009'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_zS29HOwsh6M/Sz7CxBxg-lI/AAAAAAAABgI/HanoRFAgdS4/s72-c/2009TotalBandwidth.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-805071426340950878</id><published>2010-01-01T20:51:00.000-07:00</published><updated>2010-01-01T20:51:15.218-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bandwidth'/><title type='text'>Bandwidth for December</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/_zS29HOwsh6M/Sz621qhYLRI/AAAAAAAABgE/XbdL2XD_Gik/s1600-h/2009DecemberBandwidth.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ps="true" src="http://3.bp.blogspot.com/_zS29HOwsh6M/Sz621qhYLRI/AAAAAAAABgE/XbdL2XD_Gik/s320/2009DecemberBandwidth.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&lt;table style="border-bottom: #ccc 1px solid; border-collapse: collapse; border-left: #ccc 1px solid; border-right: #ccc 1px solid; border-top: #ccc 1px solid; margin: auto; width: 320px;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;In&lt;br /&gt;
&lt;/td&gt;&lt;td style="text-align: center;"&gt;34.09 GB&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;Out&lt;br /&gt;
&lt;/td&gt;&lt;td style="text-align: center;"&gt;5.93 GB&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th style="border-top: #000 1px solid; text-align: center;"&gt;Total&lt;br /&gt;
&lt;/th&gt;&lt;th style="border-top: #000 1px solid; text-align: center;"&gt;40.02 GB&lt;br /&gt;
&lt;/th&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Numbers dropped way down this month, in no small part due to the lack of streaming a lot of HD movies on Netflix.  In fact, one of the TV series I was watching had some episodes not available for streaming, and so I used my one-disc-at-a-time DVD plan to get the actual disc from Netflix.&lt;/p&gt;
&lt;p&gt;The end-of-year spike comes from something new.  I have been getting a "Zune newsletter" in my email, either as a result of playing with the Zune software a while back or the change of the Xbox 360 music and video marketplace to use the Zune marketplace.  In this newsletter, they mention the occasional free song or TV show episode to download, and I decided I'd go ahead and check it out.&lt;/p&gt;
&lt;p&gt;So, I installed the Zune software (which, while I've derided as a media player, is needed for marketplace browsing) and downloaded a few shows, like the Mythbusters holiday episode and a cartoon or two.&lt;/p&gt;
&lt;p&gt;I also checked out their podcast section, and I found not only the two podcasts from &lt;a href="http://www.geezergamers.com/"&gt;GeezerGamers.com&lt;/a&gt; (one of which &lt;a href="http://gamertagcyberknight.blogspot.com/2009/12/face-for-radio.html"&gt;I actually co-host&lt;/a&gt;) and a couple other gaming-related podcasts, but a handful of audio and video podcasts from my church!  So I subscribed to a bunch of feeds, which downloaded a few extra bytes.  I just hope I can find time to listen to them in addition to the audiobooks I get from my Audible.com subscription.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-805071426340950878?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/805071426340950878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=805071426340950878&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/805071426340950878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/805071426340950878'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2010/01/bandwidth-for-december.html' title='Bandwidth for December'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_zS29HOwsh6M/Sz621qhYLRI/AAAAAAAABgE/XbdL2XD_Gik/s72-c/2009DecemberBandwidth.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-600214953755642748</id><published>2010-01-01T19:53:00.000-07:00</published><updated>2010-01-01T19:53:05.542-07:00</updated><title type='text'>31 flavors of Windows</title><content type='html'>&lt;p&gt;I bought my wife an upgrade to Windows 7 for Christmas.  There was a deal on the upgrade package to Windows 7 Professional when I placed the order for the laptop she was getting me.  Now, according to what I've seen on the intertubes, and even according to the instructions that came with the upgrade, if you're upgrading from Windows XP, you have to do what amounts to a new installation, wiping out your existing XP software and creating a new Windows 7 system.  However, if you're upgrading from Vista, you can do a simple in-place upgrade.  Just click "Ok" a few times, and soon you'll have a working Windows 7 system, with all programs and software installed.&lt;/p&gt;
&lt;p&gt;Imagine our surprise, then, when the installation process moved forward a couple screens and then informed us that you cannot do an in-place upgrade from Vista Home Premium to Windows 7 Professional.&lt;/p&gt;
&lt;p&gt;Why do they confuse the whole issue?  As far as I can tell, there are no real differences between the OS versions, just later versions have some additional features.  Theoretically, they could sell just one OS and the extra features as separate products.  But then I guess they'd have to put their other features (like BitLocker, one of the features in Ultimate lacking in the "lesser" versions) out on the market to compete with other similar products (like the free and arugably superior TrueCrypt), instead of trying to hook people in by bundling it with the OS.  (Isn't this the same behavior that landed them in court in the 1900s over Internet Explorer?  Maybe it's not an issue now because it's only "bundled" if you pay extra for the extra software.)&lt;/p&gt;
&lt;p&gt;Choking on this particular upgrade path doesn't even make sense to me.  Isn't Professional supposed to be a superset of Home Premium?  Why couldn't the upgrade disc add features that weren't there before?&lt;/p&gt;
&lt;p&gt;But choke it did, and now my wife is in the process of collecting the installation files and a list of all software she will need to reinstall, because Windows does not work as advertised or documented; Windows 7 will not upgrade in-place over Vista, if it is "uncomfortable" with the mix of flavors.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-600214953755642748?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/600214953755642748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=600214953755642748&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/600214953755642748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/600214953755642748'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2010/01/31-flavors-of-windows.html' title='31 flavors of Windows'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-4144605451327143016</id><published>2009-12-03T18:48:00.000-07:00</published><updated>2009-12-03T18:48:00.097-07:00</updated><title type='text'>Indoor plumbing is not a new thing</title><content type='html'>&lt;p&gt;Sometimes, I'm in the bathroom at work for more than a fleeting moment (I'll spare you the details of why), long enough to hear a few people (presumably co-workers, and tenants and guests of other offices on our floor) come in to do their business.  It never ceases to amaze me how often I'll hear someone come in, relieve himself, and leave &amp;mdash; without either washing his hands or so much as flushing.&lt;/p&gt;
&lt;p&gt;I wonder what goes through their minds that causes them to not flush.  Are they so proud of what they've accomplished, that they want to leave their creation for the next person to appreciate?  Do they think they are just so important or in just so much of a hurry that the half-second it takes to push the little flusher handle is too much of a burden?  And worse, is this how they behave at home, too?  Are their home toilets full of their bodies' waste processes?  Do they only flush once a day, or weekly, or at all?&lt;/p&gt;
&lt;p&gt;And what of the lack of the washing of the hands?  I had hoped that with the whole "swine flu" hype (which I think is probably way overblown anyway), people might be a little more conscious of wanting to stay healthy and keeping clean; and yet, here are people throwing cleanliness to the wind.  This is even more annoying, considering that their lack of hand-washing is going to spread germs around, starting with the same door handle I'm going to be using soon to exit the bathroom myself, after I've already gone through the trouble of washing my own hands.&lt;/p&gt;
&lt;p&gt;Seriously.  Flush toilet, wash hands.  These are not new concepts.  These are not hard things to do.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-4144605451327143016?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/4144605451327143016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=4144605451327143016&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/4144605451327143016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/4144605451327143016'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/12/indoor-plumbing-is-not-new-thing.html' title='Indoor plumbing is not a new thing'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-6951623173876652014</id><published>2009-12-01T20:49:00.001-07:00</published><updated>2009-12-01T20:50:08.523-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bandwidth'/><title type='text'>Bandwidth for November</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/_zS29HOwsh6M/SxXd1pJJAbI/AAAAAAAABaM/tPsbcz9dGzU/s1600/Bandwidth200911.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="259" src="http://4.bp.blogspot.com/_zS29HOwsh6M/SxXd1pJJAbI/AAAAAAAABaM/tPsbcz9dGzU/s320/Bandwidth200911.png" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;table style="border:1px solid #ccc; border-collapse: collapse; width: 320px; margin: auto;"&gt;&lt;tr&gt;&lt;td style="text-align:center;"&gt;In&lt;/td&gt;&lt;td style="text-align:center;"&gt;75.58 GB&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:center;"&gt;Out&lt;/td&gt;&lt;td style="text-align:center;"&gt;5.70 GB&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th style="text-align:center; border-top:1px solid #000;"&gt;Total&lt;/th&gt;&lt;th style="text-align:center; border-top:1px solid #000;"&gt;81.27 GB&lt;/th&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;This was a big month.  Netflix had the Star Trek Original Series Season 1 collection available for streaming in HD.  At the start of the month, they said it would only be available until around the 24&lt;sup style="text-size:smaller;"&gt;th&lt;/sup&gt;, so I tried to make sure I watched all of it by then.  (It was only after I managed to finish the series that they removed the deadline, of course.)  So, November shows the effect of watching twenty-nine 50-minute episodes of streaming high-definition video (in addition to a handful of standard-def videos and movies here and there).&lt;/p&gt;
&lt;p&gt;Managed to hit about a third of the cap.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-6951623173876652014?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/6951623173876652014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=6951623173876652014&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/6951623173876652014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/6951623173876652014'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/12/bandwidth-for-november.html' title='Bandwidth for November'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_zS29HOwsh6M/SxXd1pJJAbI/AAAAAAAABaM/tPsbcz9dGzU/s72-c/Bandwidth200911.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-3424835506170586933</id><published>2009-11-07T11:59:00.000-07:00</published><updated>2009-11-07T11:59:58.466-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bandwidth'/><title type='text'>Bandwidth for October</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/_zS29HOwsh6M/SvW_WIyUYYI/AAAAAAAABVY/9TC-VcxfhYg/s1600-h/Bandwidth200910.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_zS29HOwsh6M/SvW_WIyUYYI/AAAAAAAABVY/9TC-VcxfhYg/s400/Bandwidth200910.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;table style="border:1px solid; width=auto;"&gt;&lt;tr&gt;&lt;td style="text-align:left;"&gt;Received:&lt;/td&gt;&lt;td style="text-align:right;"&gt;41.31 GB&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align:left;"&gt;Sent:&lt;/td&gt;&lt;td style="text-align:right;"&gt;5.87 GB&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th style="text-align:left;"&gt;Total:&lt;/th&gt;&lt;th style="text-align:right;"&gt;47.18 GB&lt;/th&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;The first weekend was another General Conference broadcast from our church.  We're making more use of Netflix as well.  Sundays, since I don't play video games, I usually spend the night catching a couple episodes of old TV shows or movies.  The kids like watching episodes of Mythbusters, too; and sometimes my wife will put on a Thomas the Tank Engine movie during the day for the toddler.&lt;/p&gt;
&lt;p&gt;Most of it so far has been standard-definition video, though.  As it happens, the first season of the original Star Trek is on Netflix streaming in HD video, but I noticed it is not going to be available after a date in late November.  (Why the limited time, I wonder?)  So I've been trying to watch as much as I can while it's available.  We'll see what effect close to 20 hours of HD video has on bandwidth next month, and how close that comes to the ever-looming cap.  Stay tuned!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-3424835506170586933?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/3424835506170586933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=3424835506170586933&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/3424835506170586933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/3424835506170586933'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/11/bandwidth-for-october.html' title='Bandwidth for October'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_zS29HOwsh6M/SvW_WIyUYYI/AAAAAAAABVY/9TC-VcxfhYg/s72-c/Bandwidth200910.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-2878288131443479197</id><published>2009-10-05T19:01:00.000-06:00</published><updated>2009-10-05T19:01:00.347-06:00</updated><title type='text'>Little of interest</title><content type='html'>&lt;p&gt;Interest rates are at an all-time low.  According to the little dancing ads that surround my Hotmail account, they are so low that President Obama is begging me to refinance my home mortgage.  (He's also begging me to get an education loan to go back to school, and to lose weight by OBEYING ONE RULE.)&lt;/p&gt;
&lt;p&gt;I actually find this annoying.  I've already refinanced my home, so it's about as low as it's going to get for a fixed-rate mortgage.  My vehicles are paid off (one, I paid cash for; the other was financed at 0% and was paid off last year).  I am currently not in a position where I am &lt;i&gt;borrowing&lt;/i&gt; money, but trying to &lt;i&gt;save&lt;/i&gt; it.  In addition to money withheld from my paycheck for my IRA, I have money automatically transferred each paycheck to savings accounts for myself (short- and long-term), and one for each of my kids.&lt;/p&gt;
&lt;p&gt;Each of those savings accounts earn &lt;i&gt;less than 1%&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;I do have a brokerage account, but I try not to do too much with it, because any time I fiddle with it, I end up losing more money.&lt;/p&gt;
&lt;p&gt;It is extremely frustrating when I'm trying to be financially responsible and saving money, yet the interest rates are so low, it's not worth saving any money.  I might as well line my mattress with the cash.&lt;/p&gt;
&lt;p&gt;Except, here's the funny part.  As I'm going through my mail, I notice letters from my credit card providers, saying that they are raising my interest rates.  These rates, that are allegedly tied to the federal prime interest rate, are already over 20%, and they're the only interest rates going &lt;i&gt;up&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;I suppose it's a good thing that I don't carry a balance and therefore don't pay interest (except for those rare occasions when they &lt;a href="http://www.yakkowarner.com/2009/05/why-didnt-you-do-what-we-wouldnt-let.html"&gt;don't let me pay my bill and penalize me for "my" failure&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Maybe what I need to do is start my own credit card.  Then &lt;i&gt;I&lt;/i&gt; can earn interest that's actually worth something.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-2878288131443479197?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/2878288131443479197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=2878288131443479197&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/2878288131443479197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/2878288131443479197'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/10/little-of-interest.html' title='Little of interest'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-429058788501953100</id><published>2009-10-04T17:42:00.001-06:00</published><updated>2009-10-04T17:42:59.280-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bandwidth'/><title type='text'>Bandwidth for September</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/_zS29HOwsh6M/SskvdTJxVYI/AAAAAAAABNs/XbEDdsQuh7k/s1600-h/Bandwidth200909.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://2.bp.blogspot.com/_zS29HOwsh6M/SskvdTJxVYI/AAAAAAAABNs/XbEDdsQuh7k/s320/Bandwidth200909.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p style="text-align:center;"&gt;Received: 44.60 GB&lt;br /&gt;
Transmitted:  6.16 GB&lt;br /&gt;
Total:  50.76 GB&lt;/p&gt;
&lt;p&gt;Not quite as high as August, but September puts on a decent show.  The spike on the 27&lt;sup style="font-size:smaller;"&gt;th&lt;/sup&gt; &amp;mdash; the second-highest day on record so far &amp;mdash; comes from keeping two kids with fevers home from church and trying to keep them entertained.&lt;/p&gt;
&lt;p&gt;Still, a back-of-the-napkin calculation shows that I'd still be (barely) under my bandwidth cap for the month if that day was &lt;i&gt;every&lt;/i&gt; day for a month.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-429058788501953100?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/429058788501953100/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=429058788501953100&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/429058788501953100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/429058788501953100'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/10/bandwidth-for-september.html' title='Bandwidth for September'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_zS29HOwsh6M/SskvdTJxVYI/AAAAAAAABNs/XbEDdsQuh7k/s72-c/Bandwidth200909.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-8643582335712970788</id><published>2009-09-25T11:11:00.000-06:00</published><updated>2009-09-25T11:11:05.338-06:00</updated><title type='text'>Rocky Mountain Bank - Our Mistake = No Gmail For You</title><content type='html'>&lt;p&gt;This is just beyond ridiculous and insulting.&lt;/p&gt;
&lt;p&gt;Wyoming-based Rocky Mountain Bank made a big error, sending a list of highly personal information (including names, social security numbers, and loan information) to the wrong Gmail account.  A rather big whoops, but there it is.&lt;/p&gt;
&lt;p&gt;When they discovered their mistake, they sent another message to that account to ask the owner not to view the previous message.  Probably not the most correct course of action &amp;mdash; could they trust the person to be honest, even if they said they deleted it without reading it?  It would've been wiser to consider the information already compromised, and to take steps to protect the compromised accounts and their owners' identities (e.g., one of my lenders paid for credit monitoring for me for a time when they had a security breach).&lt;/p&gt;
&lt;p&gt;When they didn't get a reply from the Gmail account owner, they asked Google for the owner's personal information (presumably so they find another way to contact them).  Google did the right thing and refused to turn over personal information about one of their customers without a court order.&lt;/p&gt;
&lt;p&gt;The bank then filed for that court order to not only disclose the Gmail account holder's information, but to &lt;i&gt;have that user's Gmail account shut down&lt;/i&gt; &amp;mdash; &lt;a href="http://www.mediapost.com/publications/?fa=Articles.showArticle&amp;art_aid=114264"&gt;and the court &lt;i&gt;&lt;u&gt;granted it&lt;/u&gt;&lt;/i&gt;.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is disgusting on a number of levels.&lt;/p&gt;
&lt;p&gt;First of all, it would be as if, if they mailed the wrong document to your house, they got the court to order the USPS to come and destroy your mailbox.&lt;/p&gt;
&lt;p&gt;Secondly, it's not unlikely the user in question never saw the email.  I get emails allegedly from banks all the time that I never do business with &amp;mdash; they're phishing scams looking for me to enter my password.  I delete them without a second thought.  If I got a random email from some "Rocky Mountain Bank", I'd delete that, too.  Assuming these emails even made it past Gmail's spam filters, it's not outside of possibility the account owner deleted them himself.&lt;/p&gt;
&lt;p&gt;Third, to deactivate the user's entire email account because of their screw-up goes way beyond their bounds.  I use my Gmail for a lot, including business-related correspondence (not to mention it's my credentials other services, including this blog).  What right does some third party have to shut off my business activities because &lt;i&gt;they&lt;/i&gt; sent &lt;i&gt;me&lt;/i&gt; something by mistake and that I probably never even looked at?&lt;/p&gt;
&lt;p&gt;They made a mistake.  Fine.  It happens.  Heck, I remember when I used to get emails detailing AOL's plans to expand dialup service in South America (it was entertaining, but not particularly useful &amp;mdash; the emails I mean, although the same could be said about AOL).  But suing to shut down an innocent person's email for their mistake is, at best, bullying and heavy-handed, and, at worst, a violation of Constitutional rights.  Shame on you, Rocky Mountain Bank.  If I ever have the opportunity to do business with you, it will only to be to tell you "No way."&lt;/p&gt;
&lt;p&gt;I hope this Gmail account is owned by someone who does use it and has a brain, because I really want to see a counter-suit filed on this.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-8643582335712970788?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/8643582335712970788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=8643582335712970788&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/8643582335712970788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/8643582335712970788'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/09/rocky-mountain-bank-our-mistake-no.html' title='Rocky Mountain Bank - Our Mistake = No Gmail For You'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-6869218445747874682</id><published>2009-09-16T16:10:00.000-06:00</published><updated>2009-09-16T16:10:45.702-06:00</updated><title type='text'>Our home away from home</title><content type='html'>&lt;p&gt;My wife is back at Children's Hospital, this time with the baby (and toddler in tow; I'll be picking him up later).  Although he was fine when we brought him home, he had been spitting up more and more, to the point where he was forcefully spewing not long after every feeding.  We had planned on waiting to take our little "fountain of youth" to the doctor at his regularly-scheduled appointment tomorrow, but it had gotten bad enough that we decided to go ahead and make a call today.&lt;/p&gt;
&lt;p&gt;My wife can't remember the exact name of the condition, but after a quick google, it looks like &lt;a href="http://www.pedisurg.com/PtEduc/Pyloric_Stenosis.htm"&gt;pyloric stenosis&lt;/a&gt;.  They have him hooked up to an IV already, and they are scheduling him for surgery sometime tomorrow.  According to the doctors, this is a very safe (and non-emergency) surgery.  If he gets a morning appointment, he could even come home as early as tomorrow night.&lt;/p&gt;
&lt;p&gt;Although I'd rather not have to go back to the hospital, at least it should be a pretty short and uneventful stay; and after this, my wife may not have to bring several changes of clothes (for the baby &lt;i&gt;and&lt;/i&gt; for herself) everywhere she goes.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-6869218445747874682?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/6869218445747874682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=6869218445747874682&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/6869218445747874682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/6869218445747874682'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/09/our-home-away-from-home.html' title='Our home away from home'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-3635407348530956497</id><published>2009-09-15T20:34:00.000-06:00</published><updated>2009-09-15T20:34:00.391-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='politics'/><title type='text'>Can only see black and white</title><content type='html'>&lt;p&gt;There's been a lot of hubbub made about Representative Joe Wilson's outburst the other day.  The short version is, during a speech Obama was giving to the House about healthcare, the Republican representative from South Carolina shouted out "You lie!"&lt;/p&gt;
&lt;p&gt;This has, of course, brought all kinds of reactions from all sides.  The most moderate have been that it was simply disrespectful and uncalled for, and that it violated a rule about Congressional behavior meant to keep things civil.&lt;/p&gt;
&lt;p&gt;Some (on the Right) excuse his behavior, saying he was just voicing what a lot of people were thinking, and wishing more people would speak out.&lt;/p&gt;
&lt;p&gt;Some (on the Left) call his outburst completely disruptive, calling out the "sour faces" and "rolling eyes" of other Republicans in attendance for not agreeing 100% with the president (either forgetting, forgiving, or applauding the same lack of respect Congressional Dems gave our previous president, &amp;mdash; a very famous eye-rolling from one Hillary Rodham Clinton "from" New York comes to mind).&lt;/p&gt;
&lt;p&gt;But then there are those who have to add fuel to the fire.  Apparently, they see a more sinister reason for Representative Wilson's outburst.  It's not because he disagrees with the legislation, or that he is frustrated with the process.  No, the only possible reason he would shout that to President Barack Hussein Obama is because of the color of the man's skin.  Period.&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;a href="http://hopenchangecartoons.blogspot.com/2009/09/pick-card.html"&gt;&lt;img style="cursor: pointer; width: 400px; height: 194px;" src="http://1.bp.blogspot.com/_CfxSWwq8cVo/Sq09rHdlw0I/AAAAAAAAApo/BuU_ufTttvs/s400/Pick+A+Card.jpg" alt="Hope n' Change blog" title="Hope n' Change: Pick A Card" id="BLOGGER_PHOTO_ID_5381024940724437826" border="0"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I am completely baffled as to where the racism is in the words "You lie."  Liberals are more than happy to &lt;a href="http://www.nytimes.com/2009/09/13/opinion/13dowd.html?_r=1&amp;bl&amp;ex=1252987200&amp;en=294d3085ac11979c&amp;ei=5087%0A"&gt;add words&lt;/a&gt; to his outburst to make it racist.  (Hey, that looks like fun; can I try?  What Obama meant to say before he was interrupted was, "And you honkeys are going to pay for it and like it!"  Wow, that was easy.)&lt;/p&gt;
&lt;p&gt;Democratic Representative David Scott asks (according to &lt;a href="http://www.washingtonpost.com/wp-dyn/content/story/2009/09/15/ST2009091501027.html"&gt;The Washington Post&lt;/a&gt;), "Would he have done that if the president were white?"  In my daily commute, I pass cars that still haven't removed their "BUSH LIES" bumper stickers.  Are they racist?  That same Washington Post article mentions concerns about the depictions of Obama as Hitler.  Was it racist to see "BusHitler" in online forums for eight years?&lt;/p&gt;
&lt;p&gt;I guess it wasn't altogether unexpected.  I've seen warnings &lt;a href="http://www.yakkowarner.com/2008/11/winds-of-change-stink.html"&gt;for a long time&lt;/a&gt; that any dissent against the president could be labeled as racism.&lt;/p&gt;
&lt;p&gt;Seems to me, though, that the so-called "elephant in the room" isn't the unsaid racism that people are inserting into other people's speech and actions, but the fact that people &lt;i&gt;actually disagree&lt;/i&gt; with what the president and his Democratic congress are trying to push through, and are frustrated and want to be heard.&lt;/p&gt;
&lt;p&gt;But I suppose talking about that is much more difficult than just saying "racist" and dismissing dissent.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-3635407348530956497?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/3635407348530956497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=3635407348530956497&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/3635407348530956497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/3635407348530956497'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/09/can-only-see-black-and-white.html' title='Can only see black and white'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_CfxSWwq8cVo/Sq09rHdlw0I/AAAAAAAAApo/BuU_ufTttvs/s72-c/Pick+A+Card.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-5469626747954268192</id><published>2009-09-14T12:57:00.000-06:00</published><updated>2009-09-14T12:57:25.646-06:00</updated><title type='text'>How I brought down Duke campus ethernet</title><content type='html'>&lt;p&gt;This is a fun story I like to recall from time to time.  This story is absolutely true.&lt;/p&gt;
&lt;p&gt;Between my sophomore and junior years at Duke, they wired the entire campus for ethernet.  (That's right, before then, it was all dial-up, baby.  14.4 blazing kilobits per second.)  Every dorm room on campus was installed with its own personal 10Mbps CAT-5 jack, along with an individual coaxial cable outlet (now they could sell cable to each student directly, instead of just to the common rooms from which students would splice and run their own coax to their dorms for free &amp;mdash; not that I would know anything about that, of course&amp;hellip;).  Duke was entering the digital age.&lt;/p&gt;
&lt;p&gt;In a marvel of civil engineering, they managed to install this new jack in the most inaccessible location of every dorm room.  So amazing was their work, that in my junior year room, which couldn't have been more than 20' wide, it required more than fifty feet of cable to go from the jack, around the edge of the room, to the desk on the opposite wall.  The exact length of cable isn't that important, so long as it's noted that the maximum length of cable sold at the campus computer store was, in fact, 50'.&lt;/p&gt;
&lt;p&gt;Now, in the mid-1990s, you didn't have a wide selection of networking equipment available at every local computer store.  "Home networking" didn't even exist &amp;mdash; it still took some work to get Windows 3.1 to even talk on a network.  Today, you'd probably just go to Best Buy or even Wal-Mart and pick up a CAT-5 coupler for 50&amp;cent; and join two shorter cables.  Back then, though, that wasn't feasible.&lt;/p&gt;
&lt;p&gt;So, I bought a copy of &lt;i&gt;Computer Shopper&lt;/i&gt; and found a deal on network cable, buying 100' at something a student could afford.  When it arrived, however, I found I made a slight miscalculation &amp;mdash; I bought bulk cable that did not, in fact, include any ends.  I therefore bought the shortest, cheapest network cable available at the campus computer store (who could possibly have use for a three foot cable anyway?) and snipped off the ends with about a half foot of wire.  I then proceeded to strip each of the eight individual wires from either end of my 100' cable (cut down to whatever length I actually needed for my room, probably something closer to 60'), twist them with the wires from my purchased cable ends, and wrap each connection with electrical tape.  A quick test with a hallmate's multimeter confirmed that I wired each connection correctly, such that each contact passed straight through from one end to the other with no crosstalk to other lines.  Everything seemed good.&lt;/p&gt;
&lt;p&gt;I plugged in my cable and attempted to configure my network card.  Unfortunately, every attempt I made seemed to get me nowhere.  After about an hour of fiddling with settings, I decided to give up and head downstairs for a break.&lt;/p&gt;
&lt;p&gt;On my way down, I heard a friend cussing up a blue streak, so I popped my head in to see what was going on.&lt;/p&gt;
&lt;p&gt;"I'm trying to get my project done, but the @$%!?! network is down!"&lt;/p&gt;
&lt;p&gt;"Really?  How long has it been out?" I asked.&lt;/p&gt;
&lt;p&gt;"About an hour now."&lt;/p&gt;
&lt;p&gt;&lt;i&gt;That's&amp;hellip; quite a coincidence,&lt;/i&gt; I thought.  Just to satisfy my own curiosity, I headed upstairs, where I left my network cable plugged in.&lt;/p&gt;
&lt;p&gt;I pulled the cable out of the wall, and I heard from downstairs, "AAHHHH!  FINALLY!"&lt;/p&gt;
&lt;p&gt;I thought about this for a moment, then I plugged my network cable back in.&lt;/p&gt;
&lt;p&gt;Came the cry from downstairs, "OH, F$*#!  NOT AGAIN!"&lt;/p&gt;
&lt;p&gt;I pulled the cable out.&lt;/p&gt;
&lt;p&gt;"Geez, THANK you."&lt;/p&gt;
&lt;p&gt;I pondered this for a few moments, debating the philosophical ramifications of great power and great responsibility.  I then spent the next few minutes doing my best Homer Simpson impersonation, plugging and unplugging the cable as I chanted, "Net go up, net go down.  Net go up, net go down."  I then left the cable unplugged before my friend burst a blood vessel.&lt;/p&gt;
&lt;p&gt;A short time later that evening, I began to wonder how widespread this effect was.  I decided to call a friend of mine who happened to work at the campus computing help desk.  The conversation went something like this:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Me:  Hey, have you guys been having any problems with the network tonight?&lt;/p&gt;
&lt;p&gt;Her (sounding very suspicious):  Why?
&lt;p&gt;Me:  Because I think I can bring the network down.&lt;/p&gt;
&lt;p&gt;Her:  That was &lt;i&gt;&lt;b&gt;you?!&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I told her about my cable and how my plugging it in seemed to be tied to my dormmate's inability to use the network.  She exhorted me not to plug the cable in again, and said she'd call me back.&lt;/p&gt;
&lt;p&gt;Later, I got a call from someone in the networking department.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;"Not that I believe this is possible, but could you plug your network cable in for me?" he said.&lt;/p&gt;
&lt;p&gt;"Sure."  &lt;i&gt;*click*&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;"Huh.  And could you unplug it for me?"&lt;/p&gt;
&lt;p&gt;"Yep."  &lt;i&gt;*click*&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;"You know, if I couldn't hear the click of the cable going in and out, I wouldn't believe it."&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;He then asked me about the cable, why I made it, etc.  I told him that I just needed a longer cable to get around my room.  He also asked me not to plug in the cable again and promised to be in touch.&lt;/p&gt;
&lt;p&gt;I didn't plug the cable in again.  I didn't &lt;i&gt;want&lt;/i&gt; to bring down the network, honestly.  I wanted to be able to &lt;i&gt;use&lt;/i&gt; the network.  The facts were, this cable didn't let me use the network, and it only prevented anyone else from using it.  My goal was not satisfied.  I had no problem not plugging it in again.&lt;/p&gt;
&lt;p&gt;The next day, a couple people from the networking department came by and offered to trade me a pre-made retail 100' network cable for my homebrew cable of death.  I was happy to do so.&lt;/p&gt;
&lt;p&gt;I got a call within a day or two.  Apparently, they tested my cable, and as far as they could tell, it was fine &amp;mdash; it was wired correctly, nothing funny was going on with it.  Near as they could figure, there must've been just enough resistance in my ghetto twist-and-tape connections to put just enough extra stress on their network to push it over a breaking point.&lt;/p&gt;
&lt;p&gt;This theory proved to be true a couple months later, when I was called again from the networking department and asked if I had made another cable.  It wasn't me this time; enough people had connected to the network that the tipping point had been hit again.  Unfortunately for them, this time it wasn't a single extra-resistive cable, but the mass of normal cables that did it.&lt;/p&gt;
&lt;p&gt;But I have to wonder if that cable isn't lying around in the Duke network lab somewhere, perhaps with a sign that says "evil network cable of death, do not use", as some kind of reminder about the importance of network infrastructure.  Or if it's not so labeled, and if it might actually get used again.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-5469626747954268192?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/5469626747954268192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=5469626747954268192&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/5469626747954268192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/5469626747954268192'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/09/how-i-brought-down-duke-campus-ethernet.html' title='How I brought down Duke campus ethernet'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-3686069818017377385</id><published>2009-09-09T16:11:00.000-06:00</published><updated>2009-09-09T16:11:35.692-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>A nullable DataGridView CalendarColumn</title><content type='html'>&lt;p&gt;A while back, I managed to &lt;a href="http://www.yakkowarner.com/2009/04/fixing-datagridviews-calendarcolumn.html"&gt;fix a couple bugs&lt;/a&gt; with the sample DataGridView CalendarColumn control that made it much more usable.  Today, I came across one more issue.  It's pretty well known that the DateTimePicker, despite having support for a checkbox that lets you turn a date on or off, does not directly support "null" as a valid value.  There are a bunch of ways to get around this, but what I came across was a need to support this inside of a DataGridView.&lt;/p&gt;
&lt;p&gt;I started with the task of making the CalendarColumn configurable in such a way as to be able to turn the checkbox on or off at will (well, at least, at the moment of construction).  That part's easy; I added a new constructor to CalendarColumn to take an "isNullable" flag:&lt;/p&gt;
&lt;div style='max-height:250px;overflow:auto;border:1px solid #ccc;white-space:nowrap;'&gt;&lt;code&gt;&lt;pre&gt;public CalendarColumn() : base(new CalendarCell()) { }
public CalendarColumn(bool isNullable) : base(new CalendarCell(bool isNullable)) { }&lt;/pre&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Then, I added a class-level variable to my CalendarCell class, and initialized it in the constructor:&lt;/p&gt;
&lt;div style='max-height:250px;overflow:auto;border:1px solid #ccc;white-space:nowrap;'&gt;&lt;code&gt;&lt;pre&gt;public class CalendarCell {
    private bool isNullable = false;

    public CalendarCell() : base() { 
        this.Style.Format = "d"; 
    }

    public CalendarCell(bool isNullable) : this() {
        this.isNullable = isNullable;
    }
[...]&lt;/pre&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;The next modification comes in InitializeEditingControl.  Immediately after getting the reference to CalendarEditingControl ctl is set:&lt;/p&gt;
&lt;div style='max-height:250px;overflow:auto;border:1px solid #ccc;white-space:nowrap;'&gt;&lt;code&gt;&lt;pre&gt;    ctl.ShowCheckBox = this.isNullable;
    if (this.Value != null &amp;&amp; this.Value != DBNull.Value) {
        if (this.Value is DateTime) {
            ctl.Value = (DateTime)this.Value;
        } else {
            DateTime dtVal;
            if (DateTime.TryParse(Convert.ToString(this.Value), out dtVal)) ctl.Value = dtVal;
        }
        if (this.isNullable) ctl.Checked = true;
    } else if (this.isNullable) {
        ctl.Checked = false;
    }&lt;/pre&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;(Note that I added a little checking around the value setting area, because I'm paranoid like that.)&lt;/p&gt;
&lt;p&gt;Next, DefaultNewRowValue:&lt;/p&gt;
&lt;div style='max-height:250px;overflow:auto;border:1px solid #ccc;white-space:nowrap;'&gt;&lt;code&gt;&lt;pre&gt;public override object DefaultNewRowValue { get { if (this.isNullable) return null; else return DateTime.Now; } }&lt;/pre&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Here's what I found out you &lt;i&gt;don't&lt;/i&gt; change.  The ValueType property always returns typeof(DateTime).  If you change this to typeof(DateTime?), what ends up happening is, if you bind to a DataTable, it attempts to insert an actual null into the table.  Because (for reasons I have yet to believe necessary) null and DBNull are two completely separate and incompatible things, this fails.  Apparently, by leaving the value type as non-nullable, a null value will get translated appropriately in the binding.&lt;/p&gt;
&lt;p&gt;We're not quite done yet.  In the CalendarEditingControl class, the EditingControlFormattedValue property needs to be updated:&lt;/p&gt;
&lt;div style='max-height:250px;overflow:auto;border:1px solid #ccc;white-space:nowrap;'&gt;&lt;code&gt;&lt;pre&gt;public object EditingControlFormattedValue {
    get {
        if (this.ShowCheckBox &amp;&amp; !this.Checked) {
            return String.Empty;
        } else {
            if (this.Format == DateTimePickerFormat.Custom) {
                return this.Value.ToString();
            } else {
                return this.Value.ToShortDateString();
            }
        }
    }
    set {
        string newValue = value as string;
        if (!String.IsNullOrEmpty(newValue)) {
            this.Value = DateTime.Parse(newValue);
        } else if (this.ShowCheckBox) {
            this.Checked = false;
        }
    }
}&lt;/pre&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;And presto, a checkable, nullable DateTimePicker column that works in a DataGridView bound to a DataTable.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-3686069818017377385?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/3686069818017377385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=3686069818017377385&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/3686069818017377385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/3686069818017377385'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/09/nullable-datagridview-calendarcolumn.html' title='A nullable DataGridView CalendarColumn'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-3823735430627996880</id><published>2009-09-06T20:36:00.000-06:00</published><updated>2009-09-06T20:36:35.211-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bandwidth'/><title type='text'>Bandwidth for August</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/_zS29HOwsh6M/SqRtMDvuhkI/AAAAAAAABIw/OTK81u6UovI/s1600-h/Bandwidth200908.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" lk="true" src="http://1.bp.blogspot.com/_zS29HOwsh6M/SqRtMDvuhkI/AAAAAAAABIw/OTK81u6UovI/s320/Bandwidth200908.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Totals are 55.07GB in, 6.50GB out, total 61.57GB.&lt;/p&gt;
&lt;p&gt;This month, numbers went way up, thanks to biting the bullet and activating my Netflix subscription and streaming movies to my Xbox 360.  On the 1&lt;sup style="font-size:smaller;"&gt;st&lt;/sup&gt;, we watched about four hours of video (one feature-length movie, a shorter cartoon movie, and a kid's video), and on the 2&lt;sup style="font-size:smaller;"&gt;nd&lt;/sup&gt;, we watched close to eight hours (four movies and two TV episodes), all standard-definition.  I don't recall all of what we watched on the 8&lt;sup style="font-size:smaller;"&gt;th&lt;/sup&gt;, but it resulted in even more bandwidth used.&lt;/p&gt;
&lt;p&gt;Just taking the numbers for the highest usage day, it does show an interesting point.  If I were to stream eight hours plus of standard-def video every day (resulting in 6.25GB of use, &lt;i&gt;including&lt;/i&gt; random web surfing and other internet activity that day) for the entire month (31 days max), that still leaves me with 56GB before I hit the 250GB cap.  Up to this point, my highest usage month was under 38GB, and the average was 26.85GB.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-3823735430627996880?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/3823735430627996880/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=3823735430627996880&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/3823735430627996880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/3823735430627996880'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/09/bandwidth-for-august.html' title='Bandwidth for August'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_zS29HOwsh6M/SqRtMDvuhkI/AAAAAAAABIw/OTK81u6UovI/s72-c/Bandwidth200908.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-8932618231882273915</id><published>2009-08-29T09:45:00.000-06:00</published><updated>2009-08-29T09:45:00.578-06:00</updated><title type='text'>ServiceMagic.com, or SpamMagic?</title><content type='html'>&lt;p&gt;This summer, we had a problem with water in the basement.  With our son in the hospital, it didn't exactly take a high priority, but eventually we had to get it taken care of, as it was bringing in a lot of sediment and mildew (and mold is one of my biggest allergy-triggers).  I realized, though, that for a problem like this, where I had what appeared to be water seeping into the basement from an unknown source (was it coming in from underground, a broken pipe, or a leaky vent to the outside?), I had no idea who to call.  That's when someone directed me to the web site, &lt;a href="http://servicemagic.com"&gt;ServiceMagic.com&lt;/a&gt;.  "Get Matched to Top-Rated Service Professionals", their site proclaims.&lt;/p&gt;
&lt;p&gt;So, I created an account and described my problem.  I thought this would be a good opportunity to use my brand new Google Voice phone number, too (720-23-YAKKO :D ), as I wouldn't have to provide my cell or home telephone number, just in case.  As you will see, this turned out to be quite a blessing.&lt;/p&gt;
&lt;p&gt;I got a call from a company to come out and take a look.  Unfortunately (or fortunately), they had one time available that week that didn't work for me, and the next available time was several weeks away.  I went ahead and scheduled that other time.  I then called my insurance agent, and from them I got a list of contractors they used.  (I also checked to see if my homeowner's policy would cover this water damage, which, alas, it didn't.)  I called one of their "preferred contractors", and they were able to schedule a time in the much more immediate future.&lt;/p&gt;
&lt;p&gt;In the meantime, I got another call from the contractor that ServiceMagic referred to me, asking again if I wanted the time that wouldn't work for me.  (Note that these calls were going to my Google Voice number, so they would leave a message and I would call them back.)  The contact number was very different, leading me to believe that I first was contacted by a scheduling service before and the local contractor later.  Whether the scheduler was a part of ServiceMagic, the contractor, or some third-party go-between, I'm not sure.  But in any case, I again verified my appointment for several weeks out.&lt;/p&gt;
&lt;p&gt;The contractor I contacted through my insurance agent came out and diagnosed the problem as a leaky drainage pan with the air conditioner.  We then scheduled an appointment with the HVAC company to come out and fix that (and reconsidered an annual maintenance contract with them), and the leak was taken care of.  (It actually cost us twice as much more for the contractor to diagnose the problem, than it did for the HVAC guys to fix it.)  Problem solved, I then called the other contractor &amp;mdash; the one referred to me by ServiceMagic &amp;mdash; and canceled my appointment.&lt;/p&gt;
&lt;p&gt;The contractor has since contacted me a couple more times (once by phone and once in a letter), and ServiceMagic once (e-mail), about that appointment directly.  Basically, the nature of the messages have been "if you reconsider, we can still help you".  Nothing outrageous, and nothing to get too upset about.&lt;/p&gt;
&lt;p&gt;What has been extremely annoying have been the completely unsolicited calls I've received, totally unrelated to this project.  I had three calls attempting to schedule a time to install carbon monoxide detectors in my basement (one claiming it was required to meet compliance for rental properties &amp;mdash; my home is not a rental; and anyway, I already have a CO alarm in my basement), and one was a plumber that was, as his message said, "calling to verify our appointment in a half an hour" (I of course had made no such appointment).&lt;/p&gt;
&lt;p&gt;Again, fortunately, this is all going to my Google Voice phone number, so I'm not bothered at work or at home by these phone calls for random services I did not order or do not want.  However, it still bothers me that ServiceMagic.com seems to be giving out my personal information to contractors that have nothing to do with me, without my authorization (I did actually click an OK before the first contractor called me).  So far, I only have to listen to and ignore their messages; heaven help them if someone comes to my doorstep claiming they have an appointment.&lt;/p&gt;
&lt;p&gt;And how do I know this is coming from ServiceMagic?  Well, not only are these contractor-type phone calls that came in after I requested some kind of home service, but they are coming to a phone number that I had never before used or published.  Could Google Voice (or, its former name, "Grand Central") have obtained this phone number from a pool of "recycled" numbers from someone who just happened to be a rental property owner who hired a plumber this month?  Maybe, but that's an awfully large coincidence.  Could my information have leaked out not from ServiceMagic, but from the contractor they worked with or some third party in between (such as the "scheduling agent" who first contacted me, whom I am not certain about)?  Again, possibly; but that would reveal a potential danger in the whole process of obtaining a contractor through ServiceMagic.com anyway.&lt;/p&gt;
&lt;p&gt;I have since changed my personal information on my ServiceMagic.com account to something more or less random.  I most certainly will not be using them again, and I would encourage everyone else to avoid them as well.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-8932618231882273915?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/8932618231882273915/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=8932618231882273915&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/8932618231882273915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/8932618231882273915'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/08/servicemagiccom-or-spammagic.html' title='ServiceMagic.com, or SpamMagic?'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-9141500285380149069</id><published>2009-08-28T23:24:00.002-06:00</published><updated>2009-08-28T23:24:00.282-06:00</updated><title type='text'>Yakko, Party of Six...</title><content type='html'>&lt;p&gt;Last week, we welcomed our fourth child into this world.  I certainly don't mean to belittle his arrival or how happy we are to have another healthy boy in our family, but compared to our &lt;a href="http://www.yakkowarner.com/2006/12/arrival-of-30.html"&gt;last experience&lt;/a&gt;, this one was rather uneventful.&lt;/p&gt;
&lt;p&gt;My wife, who had been having a lot of Braxton Hicks contractions this pregnancy, had just sat down to rest, and I had just sent the kids upstairs to get ready for bed while I finished up a couple rounds of a videogame I was playing.  After a bit, though, she said, "I think I'm in labor."  The contractions didn't go away with sitting down, and they were coming regularly.&lt;/p&gt;
&lt;p&gt;She made the required phone calls, and I turned the game off and went upstairs to hurry the kids into their sleepwear and grab the sleeping bags &amp;mdash; their overnight bags were already packed.  We loaded them up, dropped them off at a friend's for the night, and went to the hospital.&lt;/p&gt;
&lt;p&gt;Just as we were pulling into the parking lot, we finally got a call from the obstetrician.  He hadn't called yet, as he was in the middle of another baby delivery at the time at a hospital about 10 minutes away, and he had another delivery coming.  Knowing how fast my wife tends to deliver, he wasn't confident he could call another doctor and get them to our hospital in time, so he asked if we could come there.  The contractions hadn't gotten any faster or harder yet, so we turned the car around and drove down the highway to the next hospital.&lt;/p&gt;
&lt;p&gt;We got there and had to fill out paperwork (because we had preregistered only at the other hospital), then got checked into the room as her contractions finally started to get hard enough to hurt.  The doctor came in, broke her water, the contractions really started, and before long, we had another healthy baby boy, just about two hours from the time my wife told me "I think I'm in labor."&lt;/p&gt;
&lt;p&gt;Yeah, my wife tends to make a lot of women jealous in that respect.  Strangely, though, they're not too jealous of her having a baby on the couch.  Go figure.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-9141500285380149069?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/9141500285380149069/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=9141500285380149069&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/9141500285380149069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/9141500285380149069'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/08/yakko-party-of-six.html' title='Yakko, Party of Six...'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-4711393349780915813</id><published>2009-08-14T18:41:00.001-06:00</published><updated>2009-08-14T18:44:12.469-06:00</updated><title type='text'>Arrow of Light Ceremony Box</title><content type='html'>&lt;p&gt;&lt;a href="http://www.flickr.com/photos/7733072@N03/sets/72157621916728447/"&gt;&lt;img style="float:right;border:1px solid #ccc; padding-left:5px;" src="http://farm4.static.flickr.com/3469/3822061508_9bb28e1a61_m.jpg" /&gt;&lt;/a&gt;I was called as the Cubmaster for the Cub Scout pack sponsored by our Church, and last month, I had the opportunity to award the Arrow of Light to one of our boys.  I looked up some various ceremony ideas online, and I remembered seeing a couple where the Cubmaster would identify seven virtues with the seven rays coming from the sun on the award.  I figured that would be a decent idea to go with, and I found a ceremony that had those seven virtues.  But I needed something visual to go with it, something that would make it special and memorable for the Cub instead of just some old guy standing in front of him reading a speech.&lt;/p&gt;
&lt;p&gt;I had seen the ceremony before where there was a model of the Arrow of Light, and seven lightbulbs or some other electrical contraption wired up so that each of the rays could light up with each of the seven virtues.  The only problem was, I never saw one actually working.  Seems like there was always something wrong &amp;mdash; a loose wire, a lack of lightbulbs, no access to a power outlet &amp;mdash; that it ended up just being some old guy standing in front of the model reading a speech anyway.&lt;/p&gt;
&lt;p&gt;I decided to do the same concept, but simplify it quite a bit.  I have zero electrical engineering talent anyway, so I doubted I'd be able to wire anything up, but I figured something that &lt;i&gt;wasn't&lt;/i&gt; wired at all would stand a greater chance of actually &lt;i&gt;working&lt;/i&gt; when called for.  My concept was simple:  create a box large enough to hold a battery-powered lantern inside, cut out the Arrow of Light in one face, and cover the rays of the sun with something that could be revealed one at a time as the virtues are announced.&lt;/p&gt;
&lt;p&gt;I decided to start with a cardboard box, and a Pampers diaper box fit the bill nicely.  It was sturdy, had a nice rectangular shape, and was just tall enough to accommodate the Coleman battery-powered lantern I had handy.  I removed the top flaps completely, and pried open one of the bottom flaps as an access panel to inside the box.  I then covered most of the outside surfaces with black construction paper, using black electrical tape to attach it.  (I considered lining the inside of the box with aluminum foil to enhance the lighting effect, but I didn't think about that until the end and decided it wasn't worth the effort.)&lt;/p&gt;
&lt;p&gt;Making the Arrow of Light front panel was, naturally, the hard part.  I originally thought I would make it out of scrap wood, but my wife, who is far more craft-wise, suggested sheets of &amp;frac14;" foam core instead.  We found an outline picture of the Arrow of Light badge, enlarged it, and printed it out for a guide.  The proportions weren't exactly right, but it worked out with only minor adjustments.  The rays on the top of the sun obviously don't hit the border of the panel, either; rather, we made them all approximately the same size and shape.&lt;/p&gt;
&lt;p&gt;Foam core cuts fairly easily with an exacto-knife, although by the end of the cutting, my arm was good and tired.  I cut out the arrow and the sun, and the ray pieces I cut and kept, numbering them so I would know exactly which one went back where for a "perfect fit".  I also cut thin strips to create the border.&lt;/p&gt;
&lt;p&gt;Next came painting.  It took two or three coats of blue craft paint to turn the whole panel blue, but the hard part was painting the &amp;frac14;" seam inside the cuts (so as not to have a really ugly white border around every opening).  Foam core doesn't make a clean cut on the inside, and it involved a lot of jabbing the paint brush into bits of styrofoam to turn it all blue.  The border sticks, on the other hand, just took a quick brushing of yellow.&lt;/p&gt;
&lt;p&gt;To turn the inside yellow, I used yellow tissue paper and covered the interior side of the panel.  My wife suggested using a layer of clear vinyl first, to protect the tissue paper from being destroyed by curious fingers, but I was afraid it would be too shiny and would distract from the effect.  I thought it was a good idea, though, so I thought I'd mention it here.&lt;/p&gt;
&lt;p&gt;I then put the panel on the box.  It actually fit quite snugly on its own, but I secured it from the inside with duct tape.  (I don't know how well the tape will hold, though; because I lined the inside side with tissue paper, the duct tape is only holding on to tissue paper glued to the foam core, not the foam core itself.)&lt;/p&gt;
&lt;p&gt;I took the ray pieces and tried putting them in and taking them out, using the exacto-knife to shave around the edges until I could take them out easily.  I then took staples, stuck them into the top of the rays, and bent them out to create handles for removal.  (This turned out to be futile, however, as the staples came out of the ray before the ray came out of the sun.  Fortunately, the bottom of the ray is accessible to fingers and very easy to remove.)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/7733072@N03/sets/72157621916728447/"&gt;&lt;img style="float:left; border=1px solid #ccc; padding-right:5px; " src="http://farm3.static.flickr.com/2440/3822061452_6db4351dae_t.jpg" /&gt;&lt;/a&gt;I don't know if the kids were really in "awe" of it or not.  It didn't light up too much in the light of the gymnasium &amp;mdash; although I did leave it on for the rest of the evening.  Later, we had a "crossing over" ceremony for a Cub (the same scout, as it happens) who was graduating to the Boy Scouts, and part of that ceremony included turning off the lights; and the Arrow of Light was glowing very nicely during that time.  :)&lt;/p&gt;
&lt;p&gt;I posted some more pictures of the box from various angles over on Flickr; click either of the thumbnails or &lt;a href="http://www.flickr.com/photos/7733072@N03/sets/72157621916728447/"&gt;this link&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/8166852-4711393349780915813?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/4711393349780915813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=4711393349780915813&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/4711393349780915813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/4711393349780915813'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/08/arrow-of-light-ceremony-box.html' title='Arrow of Light Ceremony Box'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3469/3822061508_9bb28e1a61_t.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-7453539875337699450</id><published>2009-08-08T14:34:00.000-06:00</published><updated>2009-08-08T14:34:38.947-06:00</updated><title type='text'>Netflix Streaming - so *that's* the big deal</title><content type='html'>&lt;p&gt;As I mentioned in my &lt;a href="http://www.yakkowarner.com/2009/08/bandwidth-for-july.html"&gt;last bandwidth post&lt;/a&gt;, I finally subscribed to Netflix so I could play with the instant streaming option.  I've only had it for a week, but I've already collected a few thoughts.&lt;/p&gt;
&lt;p&gt;I'll save my bandwidth comments for the end of the month in my traditional bandwidth post (although the numbers so far are encouraging).&lt;/p&gt;
&lt;p&gt;I have already noticed that, as far as instant streaming is concerned, the selection is average.  If you search the entire Netflix database and start paging through selections (which, unfortunately, you can't do until you subscribe), you can find yourself flipping through pages of items where only 1 or 2 at best (and often 0) are available for instant streaming.  (My completely uneducated guess is about 4-5% are available for instant streaming.)&lt;/p&gt;
&lt;p&gt;However, even if the selection is limited, there's still some interesting movies worth watching.  And the nice thing is, they're available to watch at any time.  I've found movies I had been curious about seeing for a while, but just haven't wanted to invest the time in renting from the video store.&lt;/p&gt;
&lt;p&gt;There are also a few kids' videos.  Again, not everything is available, but it's nice to have a couple &lt;i&gt;Thomas the Tank Engine&lt;/i&gt; videos available on demand when the toddler needs some down-time.&lt;/p&gt;
&lt;p&gt;There are still some disadvantages to the service.  For instance, although having the aforementioned &lt;i&gt;Thomas&lt;/i&gt; videos on demand are nice, they're only available when my internet connection is stable, and they're only available on the Xbox 360 in the family room, not, say, on the DVD player upstairs or in the minivan.&lt;/p&gt;
&lt;p&gt;Also, Netflix Streaming does not support captions.  We've been in the habit of having closed-captioning turned on and the TV not so loud.  But when watching a movie on Netflix, we have to crank the volume higher than normal to make sure we don't miss anything.&lt;/p&gt;
&lt;p&gt;Another down side, the Netflix Streaming movies include only the movie.  There have been no (as far as I've seen) options for director's commentary tracks or any other bonus extras.&lt;/p&gt;
&lt;p&gt;My kids have watched &lt;i&gt;Who Framed Roger Rabbit?&lt;/i&gt; twice so far, but the second time they tried to watch it, it quit very near the ending as our internet connection hiccupped and knocked the 360 temporarily offline.  Every time we watch a movie, even if it's the same one over and over, it must be streamed across the internet anew, consuming bandwidth.&lt;/p&gt;
&lt;p&gt;We watched &lt;i&gt;National Treasure 2&lt;/i&gt; over the weekend, and although we enjoyed it, it's probably something we would only watch the one time.  The lack of bonus features was missed, but something we could live without.  (In fact, when we rented &lt;i&gt;National Treasure&lt;/i&gt; on DVD a while back, we almost felt &lt;u&gt;obligated&lt;/u&gt; to watch all the extras before returning it; so being reduced to just the movie was almost a relief.)&lt;/p&gt;
&lt;p&gt;In summary, I think Netflix Streaming is no &lt;i&gt;replacement&lt;/i&gt; for actual DVDs.  (In fact, replacing all physical media for all-digital downloads and/or streaming is, I think, a recipe for disaster for consumers; which is something I've ranted about on my gaming blog &lt;a href="http://gamertagcyberknight.blogspot.com/search/label/DLC"&gt;at length&lt;/a&gt;.)  But for a quick, no-commitment, no-frills, impulse rental (not to mention for no additional cost once you have a subscription to the service), it does the job well.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-7453539875337699450?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/7453539875337699450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=7453539875337699450&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/7453539875337699450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/7453539875337699450'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/08/netflix-streaming-so-thats-big-deal.html' title='Netflix Streaming - so *that&apos;s* the big deal'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-4690029669472215725</id><published>2009-08-01T10:53:00.000-06:00</published><updated>2009-08-01T10:53:40.291-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bandwidth'/><title type='text'>Bandwidth for July</title><content type='html'>&lt;p&gt;As I continue to monitor my own usage for my Comcast internet service, I note that, at some point, I was intending to compare my numbers to the numbers that Comcast itself reports that I am using. However, it appears, after having implemented this cap 10 months ago, Comcast &lt;a href="http://news.cnet.com/8301-17939_109-10292416-2.html?part=rss&amp;amp;subj=news&amp;amp;tag=2547-1_3-0-20"&gt;still has not released a bandwidth meter to their customers&lt;/a&gt;. How it is they can get away with limiting your usage without telling you your usage is beyond me, but there it is.&lt;/p&gt;
&lt;p&gt;And, as for the July totals, here it is:&lt;/p&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/_zS29HOwsh6M/SnRwBWNDyOI/AAAAAAAABGg/aQBg0edwz6k/s1600-h/Bandwidth200907.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_zS29HOwsh6M/SnRwBWNDyOI/AAAAAAAABGg/aQBg0edwz6k/s320/Bandwidth200907.png" vj="true" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Totals are 16.95GB down, 4.97GB up, for 21.92GB total.  There's a huge spike on the 31&lt;sup style="font-size:smaller;"&gt;st&lt;/sup&gt;, which might have to do with watching a lot of YouTube videos of "Literal Videos".&lt;/p&gt;
&lt;p&gt;Stay tuned, though; next month is about to get interesting.  Microsoft has released an update to the Xbox dashboard that allows you to watch Netflix movies in a virtual theater with friends.  Virtual MST3k, here we come!  :D&lt;/p&gt;
&lt;p&gt;I activated my Netflix free trial today, and seeing all the movies and shows available for my kids, I can already tell it's going to get a lot of use and be well worth it.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-4690029669472215725?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/4690029669472215725/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=4690029669472215725&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/4690029669472215725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/4690029669472215725'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/08/bandwidth-for-july.html' title='Bandwidth for July'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_zS29HOwsh6M/SnRwBWNDyOI/AAAAAAAABGg/aQBg0edwz6k/s72-c/Bandwidth200907.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-5155626569901003494</id><published>2009-07-29T13:56:00.001-06:00</published><updated>2009-07-29T13:56:41.317-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>This is not the SelectedValue you're looking for</title><content type='html'>&lt;p&gt;Oh, here's a fun one.&lt;/p&gt;
&lt;p&gt;I have a list of locations that I'm retrieving from a web service, and I want to display them in a ComboBox.  I also want to have a blank entry at the top of the list, so "nothing" can be selected.  While I'm sure there are ways to do this with less code, creating binding objects and such (especially since the retrieved object list is already pre-sorted in the order I want), I've resorted to just creating a DataTable with an ID and display column and copying the values I want into it.  It does make things easier when I have one combo box filter another, as DataTables already have code written for searching and filtering.&lt;/p&gt;
&lt;p&gt;Anyway, after I get my data, I have a DataTable that looks like this:&lt;/p&gt;
&lt;table style="border:1px solid #ccc"&gt;&lt;tr&gt;&lt;th&gt;LocationId&lt;/th&gt;&lt;th&gt;Location&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;&lt;i&gt;DBNull.Value&lt;/i&gt;&lt;code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;i&gt;String.Empty&lt;/i&gt;&lt;/code&gt;&lt;/td&gt;
&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;Aurora&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;Colorado Springs&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;Denver&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;Ft. Collins&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;Longmont&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;Parker&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;Now, I bind it to my ComboBox like this:&lt;/p&gt;
&lt;div style='max-height:250px;overflow:auto;border:1px solid #ccc;white-space:nowrap;'&gt;&lt;code&gt;&lt;pre&gt;combo1.DataSource = dataTable;
combo1.DisplayMember = "Location";
combo1.ValueMember = "LocationId";&lt;/pre&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Note that you have to set the DataSource first and the DisplayMember &amp;amp; ValueMember properties second, otherwise you get a ComboBox full of "System.Data.DataRow".  Nice.&lt;/p&gt;
&lt;p&gt;Now, on this form, when a value is selected, the selected value is used to filter another list; and, when the form is submitted, the selected value is passed off to a web service.  How do you find out when a value is selected, and what that value is?  Simple; bind to the &lt;code&gt;SelectedValueChanged&lt;/code&gt; event, and query the SelectedValue property, right?  In &lt;i&gt;theory&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;In &lt;i&gt;practice&lt;/i&gt;, no.  To make a long story short, I dropped a label onto the form so I could see what was going on in "real time".  First, the code:&lt;/p&gt;
&lt;div style='max-height:250px;overflow:auto;border:1px solid #ccc;white-space:nowrap;'&gt;&lt;code&gt;&lt;pre&gt;private void combo1_SelectedValueChanged(object sender, EventArgs e) {
     label1.Text = Convert.ToString(combo1.SelectedValue) + " - " + Convert.ToString(((System.Data.DataRowView)(combo1.SelectedItem))["LocationId"]);
}&lt;/pre&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;And the results:&lt;/p&gt;
&lt;table style="border:1px solid #ccc"&gt;&lt;tr&gt;&lt;th&gt;ComboBox selection&lt;/th&gt;&lt;th&gt;Label1.Text&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;i&gt;empty&lt;/i&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;-&amp;nbsp;&lt;/td&gt;
&lt;tr&gt;&lt;td&gt;Aurora&lt;/td&gt;&lt;td&gt;1 - 2&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Colorado Springs&lt;/td&gt;&lt;td&gt;2 - 7&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Denver&lt;/td&gt;&lt;td&gt;3 - 1&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Ft. Collins&lt;/td&gt;&lt;td&gt;4 - 3&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Longmont&lt;/td&gt;&lt;td&gt;6 - 4&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Parker&lt;/td&gt;&lt;td&gt;7 - 6&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Incidentally, the SelectedText property was always blank.&lt;/p&gt;
&lt;p&gt;On the up-side, as you can see, I found a way to get the real value (using the SelectedItem and casting appropriately).  On the down-side, it means I have to use that construction to get the selected value on this and every other similar ComboBox (there are actually four on this form alone), since SelectedValue, apparently, doesn't.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-5155626569901003494?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/5155626569901003494/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=5155626569901003494&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/5155626569901003494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/5155626569901003494'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/07/this-is-not-selectedvalue-youre-looking.html' title='This is not the SelectedValue you&apos;re looking for'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-4452669813020070267</id><published>2009-07-23T16:43:00.000-06:00</published><updated>2009-07-23T16:43:16.898-06:00</updated><title type='text'>You have... zero... messages.</title><content type='html'>&lt;p&gt;As I was attempting to pay my T-Mobile bill this past weekend (a futile endeavor, as their billing system was unavailable &amp;mdash; an unfortunately very common occurrence), I decided to look at their offered services.  It was mostly just morbid curiosity rather than actual interest, as I find cell phone rates for services obnoxious.&lt;/p&gt;
&lt;p&gt;I've ranted about the ridiculousness of text messaging prices &lt;a href="http://www.yakkowarner.com/2008/08/im-convenience-usps-prices.html"&gt;before&lt;/a&gt;.  (As a side note, I have noticed that it does seem that I am not charged for a text message receipt when one is sent to me, but only when I choose to read it.  It's still not terribly comforting, considering my phone has a tendency to double-tap the "OK" key, so my attempt to view my message list often inadvertently results in my reading a message, whether I wanted it or not.)&lt;/p&gt;
&lt;p&gt;One thing that annoyed me was the fact that text messaging plans were specific to phone lines, not to plans.  My wife and I have a phone plan where we share minutes; but we cannot get a plan that allows us to share messages.  Well, T-Mobile has added a family messaging plan that &amp;mdash; lo and behold &amp;mdash; allows you to pay &lt;i&gt;once&lt;/i&gt; for messaging on all lines on your account!  Unfortunately, the only plan available for an entire family is the "unlimited" plan, which is $25/month.  It's still way above and beyond expensive for our usage (which is more like 10 messages per month), but I'll bet for some families, this would be quite a deal.&lt;/p&gt;
&lt;p&gt;Another major annoyance I had was that there was no way to block text messages.  You couldn't stop someone from sending you messages to potentially run up your phone bill.  Well, that, too, is no longer a problem.  There are now options for blocking messages, either per-phone or for the entire plan.  There are various options for blocking, too, limiting outbound messages only, or limiting inbound messages to those from other phones (i.e. no automated spammers), or blocking all inbound and outbound messages completely.  And best of all, all of the options are free!&lt;/p&gt;
&lt;p&gt;Needless to say, I turned on all message blocking.  As long as they insist on charging per text-only, length-limited email message, I won't be using it.&lt;/p&gt;
&lt;p&gt;And while this may come as a disappointment to the two people who actually send me text messages from time to time (which I don't read, and either keep forgetting I don't read them or keep forgetting to remove me from whatever distribution lists they have that I'm in), I can only say:  just send me an email.  Or call.  That's what a phone is for.  :P&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-4452669813020070267?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/4452669813020070267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=4452669813020070267&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/4452669813020070267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/4452669813020070267'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/07/you-have-zero-messages.html' title='You have... zero... messages.'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-8573608844734555063</id><published>2009-07-13T18:16:00.002-06:00</published><updated>2009-07-13T18:16:00.922-06:00</updated><title type='text'>The $2 Electric Razor</title><content type='html'>&lt;p&gt;I've used an electric razor ever since I first started shaving.  They're quick, they're easy, and they're safe, especially compared to the standard blade.  But where I did use a rechargeable before, I've since gone to just using a plug-in.  The problem I had with rechargeables was, whether I left them plugged in all the time or ran them down and "deep cycled" them, it seemed like the batteries would consistently stop holding a charge before the blades would get dull.&lt;/p&gt;
&lt;p&gt;The interesting thing about replacing blades, though, is that I never actually do it.  I've found that the price for new blades is so expensive, and the price for a simple, plug-in electric razor is so cheap (because only the cheapest models are plug-in; the first feature that gets added as the price goes up is cordlessness), that it's just as cheap and twice as easy to buy a whole new razor than it is to find a set of blades that's compatible with the razor I already own.&lt;/p&gt;
&lt;p&gt;Case in point:  my last Norelco razor stopped cutting as well as it should.  I went down to Wal-Mart to look at razors.  Razor blade heads were $29 (and since I didn't know the model number of my razor off the top of my head, I wouldn't know which one to get, if a compatible set was there at all), and a new Panasonic razor was $31.  Which leads to the inescapable conclusion that the razor itself &amp;mdash; the housing, the motor, and even the flip-up trimmer and the blades contained therein &amp;mdash; are worth a grand total of two dollars.&lt;/p&gt;
&lt;p&gt;Which sounds about right, considering the flip-up trimmer on my old Norelco had also broken, being driven by a cheap piece of plastic.  Buying new heads wouldn't fix that.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-8573608844734555063?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/8573608844734555063/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=8573608844734555063&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/8573608844734555063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/8573608844734555063'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/07/2-electric-razor.html' title='The $2 Electric Razor'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-7630853114313881043</id><published>2009-07-05T20:42:00.000-06:00</published><updated>2009-07-05T20:42:25.806-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bandwidth'/><title type='text'>Bandwidth for June</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/_zS29HOwsh6M/SlFiAmDonYI/AAAAAAAABF8/EbJVfYKoP94/s1600-h/Bandwidth200906.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_zS29HOwsh6M/SlFiAmDonYI/AAAAAAAABF8/EbJVfYKoP94/s320/Bandwidth200906.png" xj="true" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;June was also a fairly light month.  Total downloaded was 18.49GB, total up was 6.28GB, for a grand total of 24.77GB.&lt;/p&gt;
&lt;p&gt;I got the Xbox 360 game &lt;i&gt;Ghostbusters&lt;/i&gt; for Father's Day, and I was very close to activating a Netflix trial so I could stream the original movie &amp;mdash; which would have been very educational as far as bandwidth consumption is concerned.  However, that very next day, my Xbox died and had to be sent in for repairs, so that killed those plans.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-7630853114313881043?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/7630853114313881043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=7630853114313881043&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/7630853114313881043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/7630853114313881043'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/07/bandwidth-for-june.html' title='Bandwidth for June'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_zS29HOwsh6M/SlFiAmDonYI/AAAAAAAABF8/EbJVfYKoP94/s72-c/Bandwidth200906.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-7567089718686973868</id><published>2009-06-26T22:29:00.000-06:00</published><updated>2009-06-26T22:29:22.644-06:00</updated><title type='text'>The importance of keeping good records</title><content type='html'>&lt;p&gt;I'm a bit of a pack rat.  Ok, I'm very much a pack rat.  I don't like to throw anything away on the off chance that someday, I might have a need for it.  It's especially bad when it comes to financial information.  I have receipts dating back to the 1900s &amp;mdash; which used to sound much more pathetic than it is, but considering they were 9&amp;frac12; years ago, I think we can safely upgrade that statement from "sounding pathetic" to "actually pathetic" now.&lt;/p&gt;
&lt;p&gt;Regardless, I finally am able to reap the rewards of not throwing papers relating to money away.  I got a letter from the IRS a couple weeks ago that I had been selected for an audit (What, I didn't mention that in my "pity party" post?  Hmm, probably should've; it definitely qualifies) and that I needed to gather information about my charitable donations for 2007 (what fellow Geezer Gamer "&lt;a href="http://slapshotsal.blogspot.com/"&gt;SlapShotSal&lt;/a&gt;", who does taxes for a living, tells me is a "substantiation audit").&lt;/p&gt;
&lt;p&gt;I knew the bulk of my donations for the year would be to my Church, so I got the statement I received from the Church for 2007, which had a list of all donation dates and amounts for the year.  Then I pulled a report in Quicken for that year and found the check numbers that corresponded to those dates and amounts.  With that list, I went to all my bank statements for the year and found the statements they appeared on and the dates they cleared.  I figured these dates would be important to get the images of the canceled checks from my bank, since to see old checks, I usually have to select the statement they were on.  This could've been a tedious process of having to download each statement from my bank, but I keep copies of my statements on my home network for easy reference.  (It worked, too; it was very easy to reference all those old statements.)  Yes, the pack rat trait applies to digital files as well &amp;mdash; probably even more so.&lt;/p&gt;
&lt;p&gt;Now that I had a list of check numbers and dates, I logged on to my bank for what I dreaded would be the most tedious part of this whole process &amp;mdash; having to find each check on the old statements and get the images, one by one.  Maybe I would take them into Paint.Net (my favorite free image editing program &lt;i&gt;du jour&lt;/i&gt;) and stack three or four of them on a page to save paper.&lt;/p&gt;
&lt;p&gt;I found the link to prior statements, but much to my disappointment, they only went back 18 months, the earliest one available being January 2008.  So that wouldn't work.  But there was another link for searching for transactions that indicated check images were available as far back as 2005.  (Glad I didn't get audited for any years prior.)  I entered a date range of the whole year, a check number range from the lowest to highest number I had, and selected "Check" for transaction type.&lt;/p&gt;
&lt;p&gt;I couldn't believe what I saw.  There was a list of all the checks, with a checkbox by each one.  At the bottom of the list were two options, one to select Large or Small images, and one to select Front only or Front and Back, and a button marked View Images.&lt;/p&gt;
&lt;p&gt;Actually, the search results were limited to 100, so I had to do the first half of the year and then the second half, but big whoop.  There it was, exactly what I needed.  Select the checks I needed to see, and hit View Images to see just those checks.&lt;/p&gt;
&lt;p&gt;When I viewed the images, it showed me two checks at a time, with front and back images &amp;mdash; so four images total &amp;mdash; with some simple navigation at the bottom to move to the next pair of checks.  Since the site's not in a frameset, I couldn't tell my browser to just print a single frame (i.e. the one with the images), and I didn't want to print the navigation links (or the rest of the webpage for that matter), so I figured I'd still be copying images from the screen.  Just for kicks, though, I called up the Print Preview to see what would happen if I tried to print.&lt;/p&gt;
&lt;p&gt;They thought of that, too.  Apparently there's a printing stylesheet in place that turns off everything but the content, because in the Print Preview, the only thing visible were the check images.  No navigation, no links, no tabs or corporate logos or anything extra.&lt;/p&gt;
&lt;p&gt;Here I thought I'd be at this for days, or at least hours, gathering images and printing them out one by one, and all I had to do was click "Next, Print, Next, Print, Next&amp;hellip;"&lt;/p&gt;
&lt;p&gt;I'd love to publicly praise this bank for their extremely useful website, but at the same time I don't necessarily want to advertise to the rest of the internet where I keep my money.  I did make a point of sending a message of thanks to their customer service inbox, though.&lt;/p&gt;
&lt;p&gt;So, with that out of the way, now I can go back to playing my Xbox.  Except that is currently on its way to a repair center in Texas and probably won't be back for a couple weeks.&lt;/p&gt;
&lt;p&gt;Yeah, I guess I forgot to mention that, too.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-7567089718686973868?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/7567089718686973868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=7567089718686973868&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/7567089718686973868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/7567089718686973868'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/06/importance-of-keeping-good-records.html' title='The importance of keeping good records'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-2447172733106552585</id><published>2009-06-18T09:55:00.001-06:00</published><updated>2009-06-18T09:59:24.311-06:00</updated><title type='text'>The hits just keep on coming</title><content type='html'>&lt;p&gt;It's a pity party, and you're all invited.&lt;/p&gt;
&lt;p&gt;When I picked up my son's medication as we got him out of the hospital, the total bill was close to $500 for a month's worth.  I figured they were just having issues with insurance and I'd just need to resubmit the claim later.  In any case, it wasn't something I could worry about or negotiate at that time — the treatment required keeping the level of medication in his blood stable, and we needed the pills then.  Well, I finally got around to calling my insurance carrier to see what was up.&lt;/p&gt;
&lt;p&gt;Here's what's up:  that medication isn't covered.  The price, unfortunately, is what it is.&lt;/p&gt;
&lt;p&gt;D'oh.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/7733072@N03/sets/72157619397905770/"&gt;&lt;img src="http://farm4.static.flickr.com/3364/3604229451_9165c57367_m.jpg" style="float:right; margin: 0 0 1em 1em;"/&gt;&lt;/a&gt;A couple weeks ago, a tornado passed really close to our house.  We didn't have any damage from the twister, thankfully (in fact, it did surprisingly little damage for touching down in the middle of a shopping mall, causing no injuries).  However, there was golfball-sized hail.  We have an insurance adjuster coming to look at our roof to inspect for hail damage on Monday.  If repair work needs to be done, it's covered, just with a $1000 deductible.  Which could be a lot worse, but it's an expense when I don't need any more expenses.&lt;/p&gt;
&lt;p&gt;And, my glasses broke this morning.  I got these frames that were supposed to be made of this indestructible flexible alloy, and the frames have in fact held up well.  The problem is, the screw on the hinge is held in place by this flimsy piece of wire that's barely soldered on to the indestructible frame.  This same hinge actually broke twice on me.  The first time, it happened so quickly as to still be under warranty that I could have the frames replaced.  Not so, this time.&lt;/p&gt;
&lt;p&gt;Fortunately, my older pair is still in great shape, and my previous prescription isn't that much different, so getting a new pair is something that doesn't need to happen immediately.&lt;/p&gt;
&lt;p&gt;And, I just got a call from my wife, who is right now taking my son (the one with the $500/month medication) to the doctor's office with sharp, stabbing pains in his stomach.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-2447172733106552585?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/2447172733106552585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=2447172733106552585&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/2447172733106552585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/2447172733106552585'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/06/hits-just-keep-on-coming.html' title='The hits just keep on coming'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3364/3604229451_9165c57367_t.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-167574342862192559</id><published>2009-06-15T19:25:00.000-06:00</published><updated>2009-06-15T19:25:00.875-06:00</updated><title type='text'>Wait, what about The Social?</title><content type='html'>&lt;p&gt;A year and a half ago, &lt;a href="http://www.yakkowarner.com/2008/01/come-join-social.html"&gt;I looked at&lt;/a&gt; this "Zune Social" thing, and I wondered if it would be possible to "jump in" with just my desktop PC.  Having a Zune Card that was just like my Xbox Live gamercard, with a running history of the music I listened to, sounded kind of cool.  Gimmicky, sure, but cool.  And the fact that I already &lt;i&gt;had&lt;/i&gt; a Zune Card simply by virtue of having a gamercard meant the cost of entry was eliminated.  (I suppose this is also related to me being &lt;a href="http://www.yakkowarner.com/2009/06/sucker-for-features.html"&gt;a sucker for features&lt;/a&gt;, as I had access to this feature that I wasn't using.)  But in order to use it, you had to use the Zune Media Player, which, compared to Windows Media Player, was pretty lacking.&lt;/p&gt;
&lt;p&gt;I posted a comment in the Zune forums, suggesting it might be nice just to have a WMP plug-in that updated my Zune Card with my stats from WMP.  The responses I got back were rather disparaging, saying they couldn't do &lt;i&gt;everything&lt;/i&gt; the Zune Media Player did in a mere plug-in.  It was also the prevailing opinion that the Zune Social was for Zunes, and it didn't really matter what I played on my PC.  (Ok, never mind the fact that I could play things in the ZMP and have it update my Zune Card.)&lt;/p&gt;
&lt;p&gt;Back in September, they released a software update, and I decided to give it &lt;a href="http://www.yakkowarner.com/2008/09/zune-software-revisited.html"&gt;another look&lt;/a&gt;.  In short, nothing had changed.  I came to the conclusion that the Zune Social was a Zune-only club, and I would just be anti-social until I somehow acquired a Zune of my own.&lt;/p&gt;
&lt;p&gt;Two weeks ago was E3, and Microsoft announced that Last.fm would be coming to the Xbox 360.  I hadn't really looked at Last.fm before, so I signed up.  Not only does it offer streaming music, but it (to quote its home page) "recommends music, videos and concerts based on what you listen to."  And how does it know what you listen to?  Well, obviously it can track the songs it streams to you and the ones you flag as tracks "loved" or "blocked".  But it can also &lt;i&gt;track songs played in Windows Media Player &lt;u&gt;using a plug-in&lt;/u&gt;.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;So here you have this third-party service that is doing &lt;i&gt;exactly&lt;/i&gt; what I was asking for from the Zune Card.  And Microsoft is integrating &lt;i&gt;that&lt;/i&gt; service into the Xbox 360.&lt;/p&gt;
&lt;p&gt;Oh yeah, they did also say that the Video Marketplace on the Xbox 360 would become the Zune Marketplace.  But so far, they've only announced that for videos.  Not music.&lt;/p&gt;
&lt;p&gt;I don't get it.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-167574342862192559?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/167574342862192559/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=167574342862192559&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/167574342862192559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/167574342862192559'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/06/wait-what-about-social.html' title='Wait, what about The Social?'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-3670808941036697609</id><published>2009-06-10T10:57:00.000-06:00</published><updated>2009-06-10T10:57:21.735-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>I'll handle any key you want... except that one</title><content type='html'>&lt;p&gt;Here's one of those that makes a little more sense when you think about it, but it still leaves you scratching your head until you figure out what's going on.  And then you think about it some more and realize, no, it doesn't make sense at all.&lt;/p&gt;
&lt;p&gt;When you want to capture keypresses in a control on a Windows form, the "best" place to do that is the KeyDown event.  It gives you the ability to capture keys, the state of the modifier keys (Control, Alt, Shift), and to mark that keypress as being "handled" so the key does not continue on as actually being typed.  It also provides access to capturing unprintable keys (like Escape or Insert).&lt;/p&gt;
&lt;p&gt;However, one thing it does not do is let you capture the Tab key.  This is because the control doesn't even get a KeyDown event when the Tab key is pressed.  (Indeed, Microsoft considers it a &lt;a href="http://support.microsoft.com/kb/80286"&gt;bug&lt;/a&gt; when it &lt;i&gt;does&lt;/i&gt; trigger a KeyDown.)&lt;/p&gt;
&lt;p&gt;You can sort of rationalize this behavior when you realize that the Tab key is "special".  The form uses that key to determine when to move from one control to the next.  So, in that way, it would make sense for the Tab key to not even get to the control.  However, you can easily debunk that rationalization with two controls:  a DataGridView and a TextBox.  A DataGridView, with its StandardTab property set to the default of False, will, when a Tab key is pressed, take it upon itself &lt;i&gt;first&lt;/i&gt; to move the active cell through the grid, and only when the last cell is reached &lt;i&gt;then&lt;/i&gt; let the form move focus to the next control.  Likewise, a TextBox that has both Multiline and AcceptsTab properties set to True will take any Tab keypresses and add a tab character to the input, &lt;i&gt;never&lt;/i&gt; passing that keypress to the form.&lt;/p&gt;
&lt;p&gt;In any case, it seems that, for whatever reason, the Tab key is handled by the form sometime after these possible control overrides, but before the KeyDown event could get fired.&lt;/p&gt;
&lt;p&gt;Solution?  Well, it turns out, there are two.&lt;/p&gt;
&lt;p&gt;The first one I found is to override the form's ProcessCmdKey method.  Start by calling the base ProcessCmdKey method, which returns a boolean that indicates whether the key was handled.  Then, check to see if this.ActiveControl is the control for which you want to trap the Tab key, and if the keyData parameter passed in to ProcessCmdKey contains the Tab key (&lt;code&gt;(keyData &amp; Keys.Tab) == Keys.Tab&lt;/code&gt;).  If so, do whatever it is you wanted to do, and set the boolean return value to true, indicating you've processed the key yourself.  At the end of the method, return the boolean.  (I found a simple example &lt;a href="http://www.blackwasp.co.uk/DetectTabKey.aspx"&gt;here&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;The annoying part is, if you were trapping for more than just the Tab key in the control's KeyDown event, you now have your logic split in two different methods (control_KeyDown and form override ProcessCmdKey).  Also, if you are doing this for multiple controls (as I was for, coincidentally, a DataGridView and a [single-line] TextBox), you have to copy and combine the logic from the other controls' separate KeyDown events into the ProcessCmdKey method, testing the ActiveControl to make sure you know which control you're in.&lt;/p&gt;
&lt;p&gt;The advantage, however, is that you only have to test the cases you're interested in.  If, for instance, you want to catch a Tab, but still allow a Shift+Tab to default to the standard form's handling, you just test for an un-shifted Tab and do your work, and let the Shift+Tab condition "fall through".&lt;/p&gt;
&lt;p&gt;The second solution is to bind to the controls' PreviewKeyDown event.  This one fires in that sweet spot before the form claims it as a "command key".  The event gets the parameter PreviewKeyDownEventArgs e.  If you want to handle the Tab key in the KeyDown event, just check to see if &lt;code&gt;e.KeyCode == Keys.Tab&lt;/code&gt;, and if so, set &lt;code&gt;e.IsInputKey = true&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The disadvantage to this method, however, is that now you are responsible for moving the focus as appropriate &amp;mdash; you can't just let the handling "fall through" to the form, because it won't handle it anymore.  Depending on how confident you are on the structure of your form, you can either call another control's Focus method or the form's SelectNextControl method (and don't forget to set the Handled property in KeyDown, otherwise the new control might receive the same Tab keypress as well, or it might try to type the Tab as input into the old control &amp;mdash; either way, the results might not be pleasant).&lt;/p&gt;
&lt;p&gt;Personally, I like the second solution better.  Although there is more logic required to do what should be standard Tab handling, it means the logic for my non-standard Tab handling is in one place per control, not split across two different events.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-3670808941036697609?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/3670808941036697609/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=3670808941036697609&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/3670808941036697609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/3670808941036697609'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/06/ill-handle-any-key-you-want-except-that.html' title='I&apos;ll handle any key you want... except that one'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-3903307310258452664</id><published>2009-06-05T18:32:00.003-06:00</published><updated>2009-06-15T10:24:43.745-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bandwidth'/><title type='text'>Bandwidth for May</title><content type='html'>&lt;p&gt;Whoops, forgot to grab the data for the beginning of May.  Daily numbers are missing, but the monthly totals are accurate.&lt;/p&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/_zS29HOwsh6M/SihnxhNgD3I/AAAAAAAABCg/ZBXHFUt8mhA/s1600-h/MayBandwidth.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" fj="true" src="http://1.bp.blogspot.com/_zS29HOwsh6M/SihnxhNgD3I/AAAAAAAABCg/ZBXHFUt8mhA/s400/MayBandwidth.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Total for May:  19.98GB down, 4.54GB up, 24.52GB total.  Not quite a tenth of the cap.  This month has the second lowest total since the cap, coming in just ahead of March.&lt;/p&gt;
&lt;p&gt;If it weren't for the impending medical bills, I'd sign up for Netflix, if only to see what it would do.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-3903307310258452664?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/3903307310258452664/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=3903307310258452664&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/3903307310258452664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/3903307310258452664'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/06/bandwidth-for-may.html' title='Bandwidth for May'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_zS29HOwsh6M/SihnxhNgD3I/AAAAAAAABCg/ZBXHFUt8mhA/s72-c/MayBandwidth.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-2836195957894196546</id><published>2009-06-04T13:16:00.000-06:00</published><updated>2009-06-04T13:16:17.191-06:00</updated><title type='text'>A sucker for features</title><content type='html'>&lt;p&gt;Yeah, so a few people have noticed that, despite my general disdain for "social networking" services as a whole, I finally got suckered in and signed up for both Twitter and Facebook.&lt;/p&gt;
&lt;p&gt;I was a long-time user of Microsoft's MSN Messenger service.  (I even had a "charter membership" to the Microsoft Network, for whatever that's worth.  Remember when we didn't have "internet service providers", but signed on explicitly to companies' dial-up networks?)  Anyway, eventually I got a job where their "standard" messenger client was AIM.  I didn't want to have to run two distinct messenger clients because of the combined resource usage, so I looked for a client that would connect to both services in a single client.  The one I selected was Trillian, which I installed and started to use.&lt;/p&gt;
&lt;p&gt;When I got it up and running, I noticed there were little icons that lit up with each service to which it connected, and only two of its four lights were lit.  I felt like I was missing something, because I was using a program but not all of its features.  So I entered my credentials for my almost-forgotten ICQ account, and on came another light.  What was the fourth one?  Yahoo Messenger?  I didn't know they had a client, and I certainly didn't know anyone on it.  But I wanted that last light to light up.  So I signed up for a Yahoo account, and finally my program was complete.&lt;/p&gt;
&lt;p&gt;Now you might understand a bit what feelings went through my head when I heard about Microsoft's E3 press conference this week.  Felicia Day (who has a very cute face, but dang that girl needs to eat before she blows away) announced that the Xbox 360 would be integrating with Facebook, Twitter, and Last.fm this year.&lt;/p&gt;
&lt;p&gt;New features?  On my 360?  And I don't have access to use them?  Well, I'd better sign up, then!&lt;/p&gt;
&lt;p&gt;Of course, I had to be a touch creative with my account names since I waited so long, but fortunately I was able to get away with just adding a "1" to my alias and calling it good.  (Except for Facebook, which demands a real name.  What do you mean, "Yakko" isn't a valid first name?)&lt;/p&gt;
&lt;p&gt;I don't know if my Facebook page will see much action (we all know how infrequently I update my own blog as it is), but I've already found that Twitter is fairly useful for those really quick thoughts I think might be nice to jot down but don't think are worth a whole blog post.  (So far, I've resisted the temptation to reply to the tweets of celebrities who will never know I exist, but we'll see if I can maintain that resolve.)&lt;/p&gt;
&lt;p&gt;And after listening to the &lt;a href="http://www.last.fm/listen/globaltags/80s"&gt;'80s Tag station&lt;/a&gt; on Last.fm most of the day yesterday, I already can't wait for this to be turned on in the 360.&lt;/p&gt;
&lt;p&gt;They hyped up Netflix again, and I started to feel tempted again.  That one, though, costs money, and signing up for another entertainment service right before medical bills start rolling in sounds like a really bad plan.&amp;hellip;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-2836195957894196546?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/2836195957894196546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=2836195957894196546&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/2836195957894196546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/2836195957894196546'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/06/sucker-for-features.html' title='A sucker for features'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-1038621113243801425</id><published>2009-05-27T08:22:00.000-06:00</published><updated>2009-05-27T08:22:32.256-06:00</updated><title type='text'>The fundamental interconnectedness of all things</title><content type='html'>&lt;p&gt;It seems when my son is admitted to the hospital, my laptop reveals a new problem.&lt;/p&gt;
&lt;p&gt;Now, my HP Pavilion tx1420us is failing to power on after any kind of software shutdown state.  This includes:  failing to resume from sleep, failing to power on after hibernate, and failing to power on after shutting down from the menu.&lt;/p&gt;
&lt;p&gt;Fortunately, I'm able to get around this by shutting it down with the hardware switch.  When I power up the computer and notice it's not starting (the audio and wireless lights both remain orange instead of turning blue, there is no disk activity, and the screen remains dark), I can press and hold the power switch in the "off" position for a few seconds until the system shuts off, and then power it back on.  Sometimes, though, I have to do this twice.&lt;/p&gt;
&lt;p&gt;Also fortunately, I'm using the Windows 7 RC, and Windows 7 includes a feature called "hybrid sleep".  The short of this is, when the system goes to sleep, it also writes the hibernation file; so even though I can't wake it up and have to force the power off and wipe out the sleep state in memory, when I power it up it is able to resume from hibernation.&lt;/p&gt;
&lt;p&gt;This could indicate that the &lt;a href="http://www.yakkowarner.com/2009/04/no-more-hp-laptops.html"&gt;wireless failure&lt;/a&gt; was not directly a fault between the system and the Wi-Fi card, but just a symptom of a general failure.&lt;/p&gt;
&lt;p&gt;More so, though, I see this as a failure on my part for trusting HP to produce a laptop that would last beyond its warranty period.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-1038621113243801425?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/1038621113243801425/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=1038621113243801425&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/1038621113243801425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/1038621113243801425'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/05/fundamental-interconnectedness-of-all.html' title='The fundamental interconnectedness of all things'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-7605653192360531563</id><published>2009-05-26T21:33:00.000-06:00</published><updated>2009-05-26T21:33:18.855-06:00</updated><title type='text'>Haven't we been here before?</title><content type='html'>&lt;p&gt;I got a call while I was in a meeting today, from my wife.  She's the only person I'll accept calls from when I'm in that situation, and I answer the phone in the same way, with a whispered, "Hi, I'm in a meeting, is everything ok?"  Almost always, she'll say everything's fine, and just call her back when I get out.&lt;/p&gt;
&lt;p&gt;Not today.&lt;/p&gt;
&lt;p&gt;My son was having a really bad day today, having emotional outbursts and not fully processing what was going on or where he was.  Since he's on a high-dose steroid, he's been fairly moody and irritable lately, but never to this extreme.  Still, it didn't seem like anything more than just a really bad case of frustration and mood swings.  My wife finally got him calmed down enough to take a nap, figuring that would do him some good (he has typically been taking a long nap in the afternoon anyway), but after maybe a half hour or so, she happened to look over at him and notice that he wasn't exactly napping &amp;mdash; his eyes were open and twitching.  She called the doctor, who then advised her to call 911.  When he was on the ambulance en route to the local hospital's ER, she called me.&lt;/p&gt;
&lt;p&gt;I excused myself from the meeting, grabbed my coat and backpack, and met her there.  He was having a mild seizure.  They gave him some medication to stop the seizure, and then they did a CAT scan to rule out the possibility of a stroke.  The scan came up normal.  Of course, I predicted as much &amp;mdash; the entire 5-week stay in the hospital, every lab test they could think of came up negative; he just wasn't well, had ferritin levels higher than they'd ever seen, daily fevers over 104&amp;deg;F&amp;hellip;&lt;/p&gt;
&lt;p&gt;Anyway, with the seizure under control, they transferred him back up to Children's Hospital.  I parked in the same parking lot and went to the front desk.  I couldn't just flash my wristband and walk in this time, though; I actually had to stop and find where they brought him in.  The desk clerk found that he was brought to the ER and offered to walk me there.  I was about to object, since I knew the way there, but then I remembered that there is a card-access lock door from the main hospital leading to the ER, and I'd need someone to let me in anyway.&lt;/p&gt;
&lt;p&gt;It's sad that I know this.&lt;/p&gt;
&lt;p&gt;The primary doctor here in charge of his case was aware of this possibility.  The medications he's on, the cyclosporine in combination with the steroid, can raise blood pressure, and the increase in blood pressure can trigger a seizure like this.  In fact, he noted this at my son's visit last week.  The day after he saw my son, my son had an appointment with the cardiologist, and the doctor said he saw today the blood pressure taken at that appointment and was very disappointed that the cardiologist didn't call him.  Although the blood pressure taken wasn't extremely high, it was high &lt;i&gt;enough&lt;/i&gt; that he could have prescribed some blood pressure medication to keep it down and prevent this seizure from being a possibility.&lt;/p&gt;
&lt;p&gt;It's the doctor's initial opinion that, once we get his blood pressure back to normal and he recovers from the seizure, that he'll be good to go home again, just with some blood pressure meds as well this time.  Unfortunately, he's also running a fever now (his first in over two weeks), so they're checking for infection (dollars to donuts they don't find one, again), and hopefully this fever is just a temporary thing that doesn't keep us from going back home tomorrow.&lt;/p&gt;
&lt;p&gt;It's really depressing to be back here.  On Sunday, we actually started to get close to normal.  The whole family was finally able to attend church together.  He slept through our sacrament meeting, but he attended his Sunday School classes and was smiling and laughing with his friends.  He's even started to get himself up and down the stairs at home.  And now&amp;hellip; here we are again.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-7605653192360531563?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/7605653192360531563/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=7605653192360531563&amp;isPopup=true' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/7605653192360531563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/7605653192360531563'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/05/havent-we-been-here-before.html' title='Haven&apos;t we been here before?'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-8453849394793325590</id><published>2009-05-24T20:05:00.000-06:00</published><updated>2009-05-24T20:05:37.330-06:00</updated><title type='text'>Why didn't you do what we wouldn't let you?</title><content type='html'>&lt;p&gt;So while I was in the hospital watching over my son, I signed on to CitiCards.com to pay my Master Card bill.  Imagine my surprise when I see a message, saying my account information has been compromised, and for my security web access to my account has been disabled, and a new card is being sent to me.&lt;/p&gt;
&lt;p&gt;In the meantime, fortunately, my card still worked for purchases (even online), so I wasn't completely without access to my credit.  I just couldn't sign on to my account online.&lt;/p&gt;
&lt;p&gt;Now, this did concern me a bit.  After all, the reason I was signing on was because I needed to pay my bill.  And this was how I paid my bill.  Since I signed up for "paperless billing" &amp;mdash; a service they provide and encourage &amp;mdash; it was also the only way I had to pay my bill.  And here they were, disabling access to my account and the means for paying my bill.  But surely they wouldn't hold me responsible for not being able to do something they were keeping me from doing, right?&lt;/p&gt;
&lt;p&gt;I finally got my replacement card.  I lost count, but it was a few weeks later.  So I was finally able to register my new card for online access, check my account&amp;hellip; and see that finance charges and a late fee had already been assessed to it.&lt;/p&gt;
&lt;p&gt;I guess CitiBank got tired of waiting for their bailout and decided to take it out on their customers.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-8453849394793325590?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/8453849394793325590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=8453849394793325590&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/8453849394793325590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/8453849394793325590'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/05/why-didnt-you-do-what-we-wouldnt-let.html' title='Why didn&apos;t you do what we wouldn&apos;t let you?'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-553968800777175480</id><published>2009-05-14T19:30:00.001-06:00</published><updated>2009-05-14T19:30:01.298-06:00</updated><title type='text'>It's good to be home</title><content type='html'>&lt;p&gt;After five weeks and a day, we finally took my son home from the hospital yesterday.  The doctors with all their tests were able to rule out enough of the major diseases to decide it was safe for him to be at home, and all the medications and treatment he was on could be safely given at home.&lt;/p&gt;
&lt;p&gt;Now, granted, he's still not 100% well.  He's on a few different medications, and his immune system is still recovering from being sick (and some of the treatments he was on).  And he still has a &lt;a href="http://picclinenursing.com/picc_why.html"&gt;PICC line&lt;/a&gt; in his arm, since we'll be making repeated trips back to the hospital for blood tests and checkups.  But just the fact that we're all home is a huge relief to all of us.&lt;/p&gt;
&lt;p&gt;He is definitely getting better, though.  As it so happens, for about the last week, he was no longer getting his daily fever spikes, and without the fevers to drag him down, his appetite and strength has been coming back.  If I had to make a guess, I'd say there was an infection (secondary to the Kawasaki disease they did manage to diagnose) they couldn't find, but when they happened to give him a final dose of antibiotics as a precautionary measure while they switched medications that affected his immune system, it probably finally wiped it out and let everything else fall into place.&lt;/p&gt;
&lt;p&gt;We did get our first taste of the medical bills, though, when we had to pick up the prescriptions.  We're hoping that insurance just didn't get billed properly, but three prescriptions ended up costing us close to $500 (and we had to make a trip back to the pharmacy in the hospital, as the drugs aren't carried at any branch close to home).  The cashier actually apologized as she rang it up.&lt;/p&gt;
&lt;p&gt;One thing at a time, though.  At least we're home, all under one roof, sleeping in our own beds.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-553968800777175480?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/553968800777175480/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=553968800777175480&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/553968800777175480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/553968800777175480'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/05/its-good-to-be-home.html' title='It&apos;s good to be home'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-5765971971174923131</id><published>2009-05-08T23:11:00.000-06:00</published><updated>2009-05-08T23:11:28.373-06:00</updated><title type='text'>Name them one by one</title><content type='html'>&lt;p&gt;So with all the crap hitting the fan over the past 4&amp;frac12; weeks, maybe it's time to stop and count my blessings.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;My son is alive, and is getting his symptoms cared for (even if they can't cure the disease).&lt;/li&gt;
&lt;li&gt;We live in the suburbs of the city that has one of the best children's hospitals available.  (We've met people from as far away as Hawaii, who are staying in the Ronald McDonald house while their child gets treatment here.  While we may not be spending much time at home, we can at least go home every day to get clothes, supplies, check on the pets, &amp;hellip;)&lt;/li&gt;
&lt;li&gt;I am employed full-time (not on hourly contract), at a small technology company that has been more than accommodating to my very unpredictable schedule, including my rather reduced hours (although I intend on working some this weekend to catch up on some work, they've accepted my 6- and 7-hour days without complaint).  (I'm sure it helps that I'm still meeting deadlines and getting work done.)&lt;/li&gt;
&lt;li&gt;My job is only a few blocks from where my kids go to school, and so it is very easy for me to pick my older son up and bring him here, where he can do his homework and play his Nintendo DSi until it's time to go.  Additionally:&lt;ul&gt;
&lt;li&gt;my workplace is ok with this arrangement&lt;/li&gt;
&lt;li&gt;I have an office, so I have space for him to be in&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;My church has been there to provide meals for us, and to take our toddler off the hands of my wife for the day, so he's not confined to the hospital room every single day.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.geezergamers.com/"&gt;GeezerGamers.com&lt;/a&gt; &amp;mdash; I've been a part of this community for a little over four years now, and the outpouring of support and prayers from these people have given me a huge morale boost I didn't realize I needed.  And on top of that, they've also sent me and my son some Amazon gift cards and a care package that included a new Xbox memory card (to replace the one that "mysteriously" &lt;a href="http://www.yakkowarner.com/2009/05/april-in-review.html?showComment=1241400540000#c4398750204035956449"&gt;disappeared&lt;/a&gt; from the hospital room this past weekend).  They've been an awesome group of friends, more than I ever expected or ever thought (or hoped, at least in this way) I'd need.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hopefully the hospital stay is coming to an end.  Although the doctors still haven't figured out The Problem for which they can prescribe The Cure, they have at least eliminated enough major issues that they're considering sending us home.  He'll still be on medication (they've started switching his IV-based medicines to pill form), and as long as he shows he can eat and drink enough to sustain himself without IV supplements, if his white blood cell count recovers from one of the medicines he was on, and if nothing else major comes up, we may be taking him home next week (a "mere" 5 weeks after he was admitted).&lt;/p&gt;
&lt;p&gt;Sure, we'd still need to bring him in for some tests rather regularly (and they may leave his &lt;a href="http://health.discovery.com/encyclopedias/illnesses.html?article=3017"&gt;PICC line&lt;/a&gt; in while he is coming back for tests), but even if we had to spend, say, 4 hours a day every day going back and forth to the hospital for tests, that's still 20 more hours a day he'd have at home than he has now.  And that's another blessing worth counting.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-5765971971174923131?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/5765971971174923131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=5765971971174923131&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/5765971971174923131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/5765971971174923131'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/05/name-them-one-by-one.html' title='Name them one by one'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-2857607974353487084</id><published>2009-05-01T09:00:00.001-06:00</published><updated>2009-05-01T09:00:00.648-06:00</updated><title type='text'>April in Review</title><content type='html'>&lt;p&gt;April sucked.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Middle son ends up in the hospital for an extended stay.  (Resolution:  none yet, still there.)&lt;/li&gt;
&lt;li&gt;Friend and client busted by SEC for running a Ponzi scheme.  (Resolution:  none.  Have had little time to process this myself, let alone follow the case; see above.)
&lt;li&gt;Youngest son splits head open at hospital.  (Resolution:  glued shut, healed fine.)&lt;/li&gt;
&lt;li&gt;Snow storm kept us at home away from hospital.  (Resolution:  worked out; my mother had flown in for the weekend and was already there with my son.)&lt;/li&gt;
&lt;li&gt;Master bathroom toilet seat split.  (Resolution:  none, haven't been home long enough to fix.)&lt;/li&gt;
&lt;li&gt;My wife was rear-ended on the way to the hospital one morning.  (Resolution:  n/a, occurred at such a low speed the only "damage" done was dust in the shape of the offender's license plate that wiped away clean.)&lt;/li&gt;
&lt;li&gt;My laptop's wireless card died, due to an extremely common problem with this model of HP laptop.  HP wants $100 just to look at it before they'll decide what to charge me to fix it, even though they repaired the identical problem on the identical laptop (my wife's) a few months ago.  (Resolution:  bought a $30 USB Wi-Fi adapter.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Yes, I know, everything worked out, and some of these are really minor things.  It just seemed like everything came crashing down all at once, and especially when you're dealing with something major like having a kid in the hospital and are spending better than 12 hours a day there, it all seems like a lot.&lt;/p&gt;
&lt;p&gt;Even when this is all over, it won't be; I have a feeling we'll be paying for this for months, if not years to come.  My hospital stay for my appendix cost thousands, and that was only for a couple days.&lt;/p&gt;
&lt;p&gt;But that's something to worry about later.  Right now, the most important thing I want resolved on the list is still there.  My son is still in the hospital, still not getting better to the point where he can come home.  My wife and I have spent the night in the same bed precisely three nights in the past 24 (when my mother showed up for the one weekend and sent us home).  And what sleep I do get during the week is definitely not quality, considering the inch and a half of foam on a sheet of flat plywood that qualifies as a fold-out bed here.&lt;/p&gt;
&lt;p&gt;I know, things could be worse.  I just want to know when they're going to get better.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-2857607974353487084?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/2857607974353487084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=2857607974353487084&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/2857607974353487084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/2857607974353487084'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/05/april-in-review.html' title='April in Review'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-5505047800613380849</id><published>2009-05-01T01:39:00.001-06:00</published><updated>2009-05-01T01:39:55.380-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bandwidth'/><title type='text'>Bandwidth for April</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/_zS29HOwsh6M/SfqgD-aerhI/AAAAAAAABA4/5XcmxzIXPps/s1600-h/April09.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_zS29HOwsh6M/SfqgD-aerhI/AAAAAAAABA4/5XcmxzIXPps/s400/April09.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;You can see the spike on the first weekend where, again, I watched the streaming video of my church's general conference broadcasts.  There are two 2-hour sessions, with two hours between them, during which church news is broadcast.  Although we didn't watch for six hours straight, I did let it keep streaming the video, partially because I didn't want to have to restart the stream (I put my laptop up on a high shelf when I connected it to the TV for output and didn't want to climb back up to get it), and partially to see what would happen to my bandwidth numbers.  (Sunday, I actually did stop and restart the stream when I found my bluetooth mouse worked as a suitable remote control.)&lt;/p&gt;
&lt;p&gt;Although I haven't been home to do a lot of Xbox gaming this month (spending most nights in the hospital with my son), I still use my home network connection quite a bit as my own personal proxy server.  I've used this from work for over a year now, mainly to prevent any misunderstandings that might occur if I were to happen to hit the wrong website at the wrong time.  I'm also using it from the hospital, since they have an unsecured wireless connection that is also a tad overzealous in filtering out websites that "might" be "unsafe".&lt;/p&gt;
&lt;p&gt;Anyway, the total numbers:  27.06GB down, 5.32GB up, 32.38GB total.  This month is the second highest, ranking behind the last general conference month (&lt;a href="http://www.yakkowarner.com/2008/11/bandwidth-for-october.html"&gt;October&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/8166852-5505047800613380849?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/5505047800613380849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=5505047800613380849&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/5505047800613380849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/5505047800613380849'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/05/bandwidth-for-april.html' title='Bandwidth for April'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_zS29HOwsh6M/SfqgD-aerhI/AAAAAAAABA4/5XcmxzIXPps/s72-c/April09.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-2082785377778797322</id><published>2009-04-30T21:45:00.000-06:00</published><updated>2009-04-30T21:45:40.819-06:00</updated><title type='text'>You uncultured flu bug!</title><content type='html'>&lt;p&gt;Well, this is highly inconvenient.&lt;/p&gt;
&lt;p&gt;I show up at the hospital with my oldest son, to trade places with my wife for the night.  I go to enter the hospital, and a security guard stops me.  "He can't go in," he says, indicating my son.  "The hospital is on lockdown.  Parents only, no siblings."&lt;/p&gt;
&lt;p&gt;"When did this start?"&lt;/p&gt;
&lt;p&gt;"About an hour ago."&lt;/p&gt;
&lt;p&gt;Apparently, because of the swine flu, they are closing down access to the hospital to necessary personnel only, and that means only parents, no siblings or other visitors.&lt;/p&gt;
&lt;p&gt;I call my wife, who is up there with my middle son (the patient) and our youngest son (the terror that flaps in the night).  She hadn't heard about the lockdown yet.  I told her she needs to meet us downstairs to do the swap.&lt;/p&gt;
&lt;p&gt;As I'm waiting, I realize just how inconvenient this is going to be.  When my wife comes to relieve me in the morning, she will be unable to bring the toddler with her.  And because I have to work, that means he'll need somewhere to stay pretty much all day.  So I talk to the security guard to ask about the nature of the lockdown and how long it'll last.  The security guard, after assuring me that there is no instance of flu at this hospital, says they don't know how long.  Could be a couple of days, could be a week, could be a month.&lt;/p&gt;
&lt;p&gt;My wife calls me soon after.  She of course had the same thought, and she was talking with the charge nurse to discuss our options.  (The security guard also suggested I could try talking to the charge nurse for the same reason.)  Apparently, in talking with the nurses inside the hospital, she learned there &lt;i&gt;was&lt;/i&gt; a case of swine flu detected in the hospital.  It wouldn't surprise me if the security guards at the entrance were told (or instructed to tell people) there wasn't, but it also wouldn't surprise me if the "fact" that there was wasn't just a rumor that was going around the nurses' stations.&lt;/p&gt;
&lt;p&gt;My son (the patient) had just been coming down with a cough and congestion.  Wouldn't it be just our luck if it was him who had come down with the swine flu, on top of whatever else had brought him there in the first place?  My mother had, after all, just come back from a trip to Mexico before she came to spend a weekend in the hospital with my son.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-2082785377778797322?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/2082785377778797322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=2082785377778797322&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/2082785377778797322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/2082785377778797322'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/04/you-uncultured-flu-bug.html' title='You uncultured flu bug!'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-7972602778300647526</id><published>2009-04-28T00:32:00.000-06:00</published><updated>2009-04-28T00:32:49.613-06:00</updated><title type='text'>WordPad: "Picture" = "End of File"?</title><content type='html'>&lt;p&gt;There's this annoying bug in WordPad in XP that I'm surprised I couldn't find very much about.  But it's hit me on more than one machine (and I never seem to remember it until after it happens, of course).&lt;/p&gt;
&lt;p&gt;Whenever I create a document and I paste a picture into it from the clipboard (usually copied out of Paint, as that's a convenient way for me to get an image on the clipboard in a hurry), the picture and any text after it is not saved with the document.&lt;/p&gt;
&lt;p&gt;This time, naturally, it happened to be on my set of release notes for a product release, where I happened to add a picture to the beginning of the document.  Entire document, gone.&lt;/p&gt;
&lt;p&gt;It seems to be a function of WordPad itself adding the picture to the document.  If I open a document that already has a picture (e.g. by creating a document with a picture in Word and saving it as RTF), I can do just about anything to the document, including cutting and pasting the picture to other locations.  It's just the act of initially adding that picture to the document that makes WordPad stop processing.&lt;/p&gt;
&lt;p&gt;Why use RTF at all?  Well, RTF is a very convenient format for creating simple text files that have a little bit of formatting.  They're also extremely portable &amp;mdash; whereas Word documents (or documents saved in "Word-compatible" formats) can sometimes display oddly in different versions of whatever you're using to view them, there's so little in an RTF that you're almost always guaranteed you'll see the text and its formatting as it was intended, without any attempt to dictate margins or other unimportant stuff.  It makes it very handy for distributing a simple document to clients that look decent, don't require any extra software to display (they will at least have WordPad, if not something bigger; I can't guarantee they'll even have a PDF viewer, or a DOC viewer for that matter), yet has just enough formatting to be "professional" (as opposed to plain text).  It can also be embedded in a Windows Installer, which is part of my goal here.&lt;/p&gt;
&lt;p&gt;Why use WordPad when I have Word installed?  Well, my goal is to have a very simple file, without extra garbage or formatting codes.  Creating a particular file in Word, which includes a single 24x24 picture, and saving it as RTF resulted in a 53kB document, which, if you look at in a plain text editor, you can see over 7k of format codes defining (among other things) fonts that aren't even used in the document, before the first line of actual text.  Merely opening that file in WordPad and saving it (which has the effect of stripping out all the garbage, taking it down to the bare necessities) results in an identically-formatted file that is 15kB.  (Unfortunately, it doesn't replace Word's "smart quotes" with standard ones.)&lt;/p&gt;
&lt;p&gt;I remember taking a Word 2.0 document, opening it up in Word 6.0, and saving it, with no changes, and noticing the file size balloon to four times its original.  So the inefficiency in Word's file formatting comes as no surprise.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Workaround:&lt;/i&gt; I played with this a bit before publishing this post, and I figured out the solution.  If you go to the Edit menu and select "Paste Special&amp;hellip;", you can paste the image as a Bitmap, a Picture (Metafile), or a Device Independent Bitmap.  It seems the default, Bitmap, is the one that causes the problem, as selecting either other option works fine.  Of course, the Edit menu is the only place this "Paste Special&amp;hellip;" option is available, as right-click only shows "Paste" and Ctrl-V/Shift-Ins use the default option.&lt;/p&gt;
&lt;p&gt;I tested this in Vista and the public beta of Windows 7.  Copying a picture out of Paint in Vista, the default Paste in WordPad worked just fine.  Paste Special showed "Unidentified", "Picture (Metafile)", and "Device Independent Bitmap", and all of these worked.  I was able to get "Bitmap" as an option in Paste Special by taking a screenshot, but that, too, worked without a problem.  Windows 7 had almost the exact same results, except that Paste Special with what was copied from Paint actually listed "Paint Picture" as the first option.  Everything else worked pretty much the same (except for having to deal with that annoying "ribbon" toolbar in both Paint and WordPad).&lt;/p&gt;
&lt;p&gt;So, I guess, the fix for being able to paste bitmaps in WordPad without losing the rest of the document, is to upgrade to the latest version of Windows.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-7972602778300647526?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/7972602778300647526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=7972602778300647526&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/7972602778300647526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/7972602778300647526'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/04/wordpad-picture-end-of-file.html' title='WordPad: &quot;Picture&quot; = &quot;End of File&quot;?'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-99281778795953399</id><published>2009-04-20T17:33:00.000-06:00</published><updated>2009-04-20T17:33:24.089-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Fixing the DataGridView's CalendarColumn sample</title><content type='html'>&lt;p&gt;In a DataGridView, it is sometimes convenient to have a column that is a DateTime that allows a user to use the standard DateTimePicker control for choosing dates.  Microsoft has a &lt;a href="http://msdn.microsoft.com/en-us/library/7tas5c80.aspx"&gt;code sample&lt;/a&gt; for a CalendarColumn class that does this, and it's more or less the standard.&lt;/p&gt;
&lt;p&gt;Except if you actually try to use it in a WinForms application, you'll find it has two rather glaring flaws:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;If you try to type in a date, and you don't type in a full two digits for the month or date or four digits for the year and then tab out of the control, your change won't be committed.&lt;/li&gt;
&lt;li&gt;If you type in a date or part of a date and tab through to the same column in the next row, and you start typing, the first field highlighted (month, date, year) will be the last field highlighted when you left the last row.  (Example:  you type in "04/04/2009", tab until the next row's date column, and start typing "04", you'll find you're editing that date's year.)&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;I found &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/winformsdatacontrols/thread/edb11c36-f1c0-4900-ac33-e3c994a554ab/"&gt;this forum thread&lt;/a&gt; that addresses the first concern.  ALight's answer involves adding an event handler to the DataGridView's CellValidating event.  Because we use grids all over the application, it would've been very inconvenient to alter every grid and add this code.  Instead, since our grids are built dynamically, I did it by adding this code to the CalendarColumn class (that inherits DataGridViewColumn):&lt;/p&gt;
&lt;div style='max-height:250px;overflow:auto;border:1px solid #ccc;white-space:nowrap;'&gt;&lt;code&gt;&lt;pre&gt;protected override void OnDataGridViewChanged() {
    base.OnDataGridViewChanged();
    if (this.DataGridView != null) {
        this.DataGridView.CellValidating += new DataGridViewCellValidatingEventHandler(CalendarDataGridView_CellValidating);
    }
}

protected void CalendarDataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) {
    if (sender is DataGridView) {
        DataGridView dgv = (DataGridView)sender;
        if (e.ColumnIndex &gt;= 0 &amp;&amp; e.ColumnIndex &lt; dgv.Columns.Count
            &amp;&amp; e.RowIndex &gt;= 0 &amp;&amp; e.RowIndex &lt; dgv.Rows.Count) {
            if (dgv.Columns[e.ColumnIndex] is CalendarColumn &amp;&amp; dgv.Columns[e.ColumnIndex] == this) {
                if (dgv.EditingPanel != null) dgv.EditingPanel.Select();
            }
        }
    }
}&lt;/pre&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;When the CalendarColumn is added to the grid's Columns collection, its DataGridView property is updated, and this routine fires to bind the method to the grid's CellValidating event.  Multiple columns will cause multiple event handlers to be bound, but the &lt;code&gt;dgv.Columns[e.ColumnIndex] == this&lt;/code&gt; part of the &lt;code&gt;if&lt;/code&gt; statement should ensure that only one instance will run the code for any given column.  (Note that I have not tested this in cases where columns may be removed from the grid.  It should &lt;i&gt;probably&lt;/i&gt; work fine, as the event will still be bound and still fire, but the column will never match.)&lt;/p&gt;
&lt;p&gt;To solve the second problem, I did some experimentation with the existing control methods.  In Microsoft's sample, there is a comment in the CalendarEditingControl's method PrepareEditingControlForEdit that reads "No preparation needs to be done."  I found this to be not quite correct.  The following change resets the control so, when you start typing, you start editing on the month, like you'd expect:&lt;/p&gt;
&lt;div style='max-height:250px;overflow:auto;border:1px solid #ccc;white-space:nowrap;'&gt;&lt;code&gt;&lt;pre&gt;public void PrepareEditingControlForEdit(bool selectAll) {
    if (selectAll) base.RecreateHandle();
}
&lt;/pre&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Seems to work so far, anyway.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-99281778795953399?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/99281778795953399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=99281778795953399&amp;isPopup=true' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/99281778795953399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/99281778795953399'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/04/fixing-datagridviews-calendarcolumn.html' title='Fixing the DataGridView&apos;s CalendarColumn sample'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-1085483448733534328</id><published>2009-04-19T11:33:00.000-06:00</published><updated>2009-04-19T11:33:44.904-06:00</updated><title type='text'>When ya gotta go, ya gotta pay</title><content type='html'>&lt;p&gt;Another old post I for some reason never got around to publishing.  I was talking to my mother about her experience flying out here (she was able to fly out for the weekend and give us a break from spending time at the hospital, where my son still is with an unknown diagnosis):&lt;/p&gt;
&lt;blockquote&gt;The idea that &lt;a href="http://www.forbes.com/2009/03/11/cheap-flights-airplane-bathroom-opinions-columnists-ryanair.html"&gt;this&lt;/a&gt; is even a question to be considered is reason enough to swear off flying.&lt;/blockquote&gt;
&lt;p&gt;Flying out here, my mother did of course have to pay extra for something extra she brought us that she had to check.  Compared to a flight down to Mexico she had not two weeks earlier, when they didn't charge for extra weight per person (one of her party did have an overweight bag, but they averaged the weight of all bags for all fliers in their party, and they didn't have to pay), meals on the plane, or even alcoholic beverages for the passengers.&lt;/p&gt;
&lt;p&gt;It reminded me of a comment I read on someone's blog a while ago.  They wondered when airlines started to charge extra for just about everything and hid behind rising fuel costs as the reason, that, if fuel costs were to go back down, would these extra costs go away?  Well, I know I'm back to paying under $2 per gallon of gas, and airlines are still charging for whatever they can get away with.&lt;/p&gt;
&lt;p&gt;I know I've said it before, but it's a large part of the reason why, even when gas prices were at their highest, my family and I drove out to California instead of flying.  If it's just me for a weekend trip, I might consider it.  For my family, no way.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-1085483448733534328?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/1085483448733534328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=1085483448733534328&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/1085483448733534328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/1085483448733534328'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/04/when-ya-gotta-go-ya-gotta-pay.html' title='When ya gotta go, ya gotta pay'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-5886035918409125981</id><published>2009-04-19T11:20:00.000-06:00</published><updated>2009-04-19T11:20:31.443-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>MAPI FAIL</title><content type='html'>&lt;p&gt;This was an old post I started to write a couple months ago.  Not sure why I didn't publish it, but considering the project in question has come to an end, I can pretty much call this issue "closed as unresolved".&lt;/p&gt;
&lt;p&gt;I thought I was close in finally being able to send an email with an attachment using the default email client in C#.  The code that I &lt;a href="http://www.yakkowarner.com/2009/01/sending-email-in-c-maybe-there-is-way.html"&gt;found&lt;/a&gt; worked great when I gave it a quick test on my work machine with XP Thunderbird.  It also worked on my development machine running Vista and Live Mail.  But when I set up a vanilla XP virtual machine for testing, Outlook Express failed with a message "One or more parts of this message could not be displayed".&lt;/p&gt;
&lt;p&gt;Well, at the very least, I could insert the code, and make it a configurable option so I could switch back to the old crap way of &lt;a href="http://www.yakkowarner.com/2008/03/it-so-hard-to-send-email.html"&gt;using a mailto: link&lt;/a&gt; if it doesn't work for the client.&lt;/p&gt;
&lt;p&gt;Just my luck, the client recently replaced his old desktop PC with a Mac, and he had his own vanilla XP virtual machine for running Windows software.  Sure enough, the mail code failed just as spectacularly in that version of Outlook Express as it did on mine.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-5886035918409125981?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/5886035918409125981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=5886035918409125981&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/5886035918409125981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/5886035918409125981'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/04/mapi-fail.html' title='MAPI FAIL'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-1767905023278411163</id><published>2009-04-19T11:16:00.000-06:00</published><updated>2009-04-19T11:16:42.174-06:00</updated><title type='text'>Your mouse has moved.  Reboot now?</title><content type='html'>&lt;p&gt;So, to "fix" the &lt;a href="http://www.yakkowarner.com/2009/04/no-more-hp-laptops.html"&gt;problem&lt;/a&gt; with my HP tx1420us laptop that sucks in that it no longer recognizes the fact that it has a wireless network card installed, I went out and bought a USB Wi-Fi adapter.  I found some online for about $20, so when I went to Best Buy, that was my target price.  Unfortunately, they didn't carry any that weren't under $50.  Wal-Mart, however, had a Belkin 802.11g for $30, and that was close enough for me.  (The one installed in my laptop is 802.11n, but my access point is only a "g" anyway.)&lt;/p&gt;
&lt;p&gt;I first installed it in my Windows 7 beta partition, and the installation went very smoothly.  Unfortunately, though, I still had to re-configure my wireless settings &amp;mdash; apparently, Windows 7 binds wireless configurations to the adapter, so my home WAP's configuration bound to my Broadcom card was not accessible.  Not a big deal, though.&lt;/p&gt;
&lt;p&gt;Then, I figured I'd better install the software on my Vista partition as well, before I put the CD away.  One of the things they tell you to do is to install the software from the CD first, and &lt;i&gt;then&lt;/i&gt; plug in the USB device.  So I pulled the adapter out, rebooted into Vista, installed the software, and plugged in the adapter again when it prompted me.  Again, I had to reconfigure my wireless settings &amp;mdash; the binding of settings to adapter must've been a Vista thing that Windows 7 inherited.&lt;/p&gt;
&lt;p&gt;That finished, I rebooted into Windows 7.  The network adapter was detected, but it did not automatically connect to my WAP.  When I pulled it up, I saw that "Belkin USB Wireless Adapter #2" did not have any wireless configurations assigned to it.  Apparently, what happened was, when I was installing it in Vista and re-attached the adapter into one of the two side-by-side USB ports on the back of my laptop, I plugged it into the one other than the one I had first used for Windows 7.  When Win7 booted, it found the adapter not in port #1, but in port #2, and therefore it assumed it was an entirely different adapter.  (Funny, these things are supposed to have unique hardware addresses; it couldn't detect it was the exact same adapter, just moved?)&lt;/p&gt;
&lt;p style="text-align:center"&gt;&lt;a href="http://4.bp.blogspot.com/_zS29HOwsh6M/SetW0nL0C0I/AAAAAAAABAY/ehyC1-QJvwA/s1600-h/your-mouse-has-moved.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img style="border:none" src="http://4.bp.blogspot.com/_zS29HOwsh6M/SetW0nL0C0I/AAAAAAAABAY/ehyC1-QJvwA/s400/your-mouse-has-moved.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So now, when I reboot into the other environment, I have to remember to switch the USB ports for my wireless stick.  Or just define the same profile for "Adapter #2".  Either way, it just seems obnoxious.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-1767905023278411163?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/1767905023278411163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=1767905023278411163&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/1767905023278411163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/1767905023278411163'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/04/your-mouse-has-moved-reboot-now.html' title='Your mouse has moved.  Reboot now?'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_zS29HOwsh6M/SetW0nL0C0I/AAAAAAAABAY/ehyC1-QJvwA/s72-c/your-mouse-has-moved.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-4407995691105936351</id><published>2009-04-15T12:31:00.002-06:00</published><updated>2009-04-15T12:31:00.494-06:00</updated><title type='text'>No more HP laptops</title><content type='html'>&lt;p&gt;My wife and I got matching HP tablet PCs a year ago.  (The HP Pavilion tx1420us, in case you were curious.)  They sure seemed like a good deal at the time, at half the price of most other tablets.  At first, I thought the only reason for the price difference was the screen &amp;mdash; these Pavilions used a "passive" touch screen instead of an "active", so they didn't track the stylus; you had to physically tap the screen for anything to register.  Unfortunately, it seems the cheaper cost has more to do with the quality of the components.&lt;/p&gt;
&lt;p&gt;Apparently, there are compatibility issues with the components used such that, after some time, the computer will simply refuse to detect the existence of the Broadcom wireless card.  Trying to find it in the device manager, it's completely gone.  My wife's was the first to go, and fortunately it happened quickly enough that it was covered by warranty.  Mine held on quite a while longer, until just after the warranty expired.&lt;/p&gt;
&lt;p&gt;Since I dual-boot between Windows Vista and the Windows 7 beta, I can pretty definitively confirm it is not a software issue &amp;mdash; the wireless card disappeared from both OSes at the same time.&lt;/p&gt;
&lt;p&gt;A quick trip through the HP support forums revealed that this problem is far from uncommon, with this and similar product lines, and HP is somewhat less than forthcoming with support, especially after the warranty period.&lt;/p&gt;
&lt;p&gt;I did find a support bulletin that seemed to address this problem and offer extended support, but of course it did not include my exact model.  They say there is a BIOS update that will help protect against it if you don't have the problem yet.  The speculation in the forums is, this will only postpone the problem until it is out of warranty, not fix it.  I take that with a large grain of salt, but my own experience does make me suspicious.  I tend to keep my hardware more up-to-date with drivers and patches (except for the video driver, which for some reason seems to make things worse on this machine when I try to update).  So, my laptop is already running the most current BIOS.  My wife's was not.  Her wireless NIC failed in-warranty, mine waited until it was out of warranty.  It's certainly a suspicious coincidence.&lt;/p&gt;
&lt;p&gt;I did give HP support a chance.  Two identical notebooks, purchased at exactly the same time.  One's wireless card failed after six months, one at 13.  The one that failed at 6 months was repaired under warranty, and the one that failed at 13, they want $99 to repair it.&lt;/p&gt;
&lt;p&gt;"No, I'm not going to pay to repair it," I told the US customer service rep with the thick southern Asian accent.  In fact, this will be the last purchase I make from HP.&lt;/p&gt;
&lt;p&gt;Incidentally, this post was made on a 5-year-old IBM ThinkPad T40p that was at one point dropped on a hard tile floor.  Had to replace the battery after that, but it still runs great.  :P&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-4407995691105936351?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/4407995691105936351/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=4407995691105936351&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/4407995691105936351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/4407995691105936351'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/04/no-more-hp-laptops.html' title='No more HP laptops'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-2929201405953712342</id><published>2009-04-14T10:46:00.000-06:00</published><updated>2009-04-14T10:46:07.197-06:00</updated><title type='text'>At least he didn't have to go far</title><content type='html'>&lt;p&gt;So while I'm in transit to the hospital to meet my wife, I get a call.  "We'll be in the ER."  Apparently, while they were waiting for our son to get prepped for another CAT scan (after one week in the ICU, they still have not been able to positively identify the source of his illness), our toddler slipped, hit his head on a counter, and cracked his head open.&lt;/p&gt;
&lt;p&gt;Considering he doesn't have a "slow" speed setting, I had always pretty much assumed it wouldn't be a matter of "if" for him, but "when".  I suppose there are worse places for something like that to happen than a hospital.&lt;/p&gt;
&lt;p&gt;And maybe it would teach him to slow down and behave?  Pfft, not by a long shot.  My wife reported that, while they were in the ER waiting room, with his bleeding head bandaged and waiting to be sealed up, he was still running around and climbing all over things.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-2929201405953712342?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/2929201405953712342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=2929201405953712342&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/2929201405953712342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/2929201405953712342'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/04/at-least-he-didnt-have-to-go-far.html' title='At least he didn&apos;t have to go far'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-125404261816363882</id><published>2009-04-09T13:28:00.000-06:00</published><updated>2009-04-09T13:28:29.236-06:00</updated><title type='text'>Looks like I picked the wrong week...</title><content type='html'>&lt;p&gt;Well, this week has certainly been&amp;hellip; "interesting."&lt;/p&gt;
&lt;p&gt;My second son came down with a fever last Thursday.  When he had a sore throat, we took him to his doctor, who checked for strep, but didn't find anything.  When he broke out in a rash over the weekend, we went to the doctor again, who diagnosed it as a rash that sometimes occurs when the fever breaks &amp;mdash; indeed, his temperature had dropped that day.  By Monday, though, he was still feverish (his temperature kept randomly spiking), and he had barely eaten or drunk anything since the fever first hit, so I called a friend to assist me in giving him a priesthood blessing.  On Tuesday morning, he started having severe stomach pains, and my wife took him to the doctor.  She then called me at work to say, "Can you meet us at the Children's Hospital ER?"&lt;/p&gt;
&lt;p&gt;We spent most of the day in the ER.  They did X-rays and a CAT scan to check for appendicitis and any other internal injuries that might have required surgery, but everything came up negative.  Eventually they decided to check him into a regular hospital room, but at some point before admission they changed their minds and checked him into the ICU instead so they could monitor him more closely.&lt;/p&gt;
&lt;p&gt;I spent the night at the hospital with him there, and the next morning my wife came to switch places with me while I went back to work.  His blood pressure was dropping, so they decided to operate to install a more direct blood pressure monitor.  In the meantime, we decided to get him a Nintendo DSi to try and help him get through his stay.  After the operation, the DSi lifted his spirits, but only temporarily.  He had such difficulty coming out of the anesthesia that he couldn't even hold the stylus.&lt;/p&gt;
&lt;p&gt;Later in the day, they ended up putting him in an incubator with a breathing tube and another IV, so they could administer antibiotics, blood pressure medication, nutrients, and sedatives (they say it's common to have to keep kids sedated, since being hooked up to all those tubes is very traumatic; considering how high-strung my son is, I don't doubt they're needed here).&lt;/p&gt;
&lt;p&gt;That's pretty much were he is as of now &amp;mdash; in the incubator, sedated, on medication, closely monitored.  They're pretty sure it's a bacterial infection, but they don't have an exact diagnosis yet.  His fever keeps spiking from time to time, but they do a culture every time and find no new growths.  At least they're able to gradually reduce his blood pressure medication as that stabilizes.&lt;/p&gt;
&lt;p&gt;In other news, I was supposed to help out an old friend tonight with some computer problems.  I called to ask if we could reschedule, since I'll probably be in the hospital tonight.  He of course said that would be fine.  Then he asked if I had heard about a mutual friend of ours.  "&amp;hellip;What about him?" I asked.  He said he was having some personal problems, and that I could google it.  I thought that was kind of odd, since I didn't expect to see someone's personal problems on Google.  I didn't think I knew anyone who would garner wide internet recognition.  Yet when I googled his name, there came up several stories about him being investigated by the SEC, pictures of his home and "assets being seized", etc.&lt;/p&gt;
&lt;p&gt;Not only was it a shock to hear this about him personally, but it was also a little unnerving to realize how close I was to the situation.  I do some freelance computer work, and I wrote for him an account management program which basically automated some of the tasks he was doing in spreadsheets.  As I'm reading these news stories, they mention account statements sent to clients with bad information, and I realize that it's my program that generated these very statements.&lt;/p&gt;
&lt;p&gt;I don't expect any harm will come my way.  The allegations against my friend have nothing to do with my program directly &amp;mdash; my code only took the information he fed it, made calculations based on his specifications, and showed the results; and the allegations are solely based on factors outside of that.  I never even received any money for my services &amp;mdash; being too much of a perfectionist, I guess, I didn't want to bill him until I felt the product was "finished", and it seemed there was always just one more thing I didn't feel was quite right.  So far, no one has contacted me to make any requests for information, but if they do, I can always provide the entire source code for the application and demonstrate that it only works to track the values it's told, not to independently audit or track investments.&lt;/p&gt;
&lt;p&gt;It's a good thing I don't smoke, drink, or do drugs, because if I did, this would be the wrong week to try to quit.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-125404261816363882?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/125404261816363882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=125404261816363882&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/125404261816363882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/125404261816363882'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/04/looks-like-i-picked-wrong-week.html' title='Looks like I picked the wrong week...'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-5437554897726282287</id><published>2009-04-05T17:59:00.000-06:00</published><updated>2009-04-05T17:59:09.086-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bandwidth'/><title type='text'>Bandwidth for March</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/_zS29HOwsh6M/Sdk-WikrDAI/AAAAAAAABAQ/iRZjOeVh680/s1600-h/MarchData.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_zS29HOwsh6M/Sdk-WikrDAI/AAAAAAAABAQ/iRZjOeVh680/s320/MarchData.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Nothing terribly exciting to report for March, so here are the stats:  15.78GB down, 4.07GB up, 19.84GB total. &lt;/p&gt;
&lt;p&gt;As of the writing for this blog post, which is just after another weekend of our church's general conference (probably about 10 hours of streaming video &amp;mdash; two 2-hour sessions on Saturday, two on Sunday, and we let it stream video for the two hours in between Sunday sessions as well instead of stopping and restarting), the "all-time total" stands at 221.05GB.  Over seven total months, and I still have not reached the limit for a single month.&lt;/p&gt;
&lt;p&gt;Of course, I don't do a lot of high-bandwidth activities.  Maybe I should torrent this "Bee Ess Gee" show that everyone's been talking about for the past couple years...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-5437554897726282287?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/5437554897726282287/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=5437554897726282287&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/5437554897726282287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/5437554897726282287'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/04/bandwidth-for-march.html' title='Bandwidth for March'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_zS29HOwsh6M/Sdk-WikrDAI/AAAAAAAABAQ/iRZjOeVh680/s72-c/MarchData.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-5401617621134995072</id><published>2009-03-26T20:48:00.000-06:00</published><updated>2009-03-26T20:48:21.208-06:00</updated><title type='text'>Heavenly Father, I thank Thee for this day...</title><content type='html'>&lt;p&gt;Got up, drove the kids to school (which happens to be very close to work).  The sky was overcast and there was a dusting of snow on the rooftops; nothing that would've even made me think to wonder if school was canceled today.  It was.  "There's a blizzard coming this afternoon, so they canceled school," the guy there told us.&lt;/p&gt;
&lt;p&gt;So I drove the kids all the way back home, and then all the way back to work.  (It's about 25 minutes each way, made more annoying by the fact that my work and the kids' school are nearly across the street from each other &amp;mdash; so it didn't just &lt;i&gt;feel&lt;/i&gt; like back-and-forth, it &lt;i&gt;was&lt;/i&gt;.)&lt;/p&gt;
&lt;p&gt;Got to work.  A big software upgrade that I was working on has been put on hold, but I need to get some new features and bug fixes out soon, so I had to copy off and roll back my changes.  Except I slipped and clicked the "check-in" button.  Fortunately, it was after I made a list of all the files I would be copying, so I spent all morning going file by file rolling back changes where needed.  (Some changes I wanted to keep anyway, since they were themselves bug fixes.  As it is, I'm not sure my mistake really set me back much.)&lt;/p&gt;
&lt;p&gt;In the process, the promised blizzard rolled in.  Our office decided to close at noon and send everyone who could work from home, home.  I'm fortunate that I can.  But I had to finish my check-out, check-in undo thing, since I wouldn't have access to the network from home.  Plus I had a support call that kept me tied up for part of the morning.  So I didn't get out until 12:30 &amp;mdash; which, all in all wasn't too bad.&lt;/p&gt;
&lt;p&gt;Got outside and decided to put chains on my car.  This turned out to be the smart move of the day.  Although it meant I didn't get started until 1, I didn't slip or slide at all on the entire drive home in my lightweight hybrid.  The same could not be said for the rear-wheel drive cars that ended up blocking traffic on the main road &amp;mdash; two of which I ended up helping push out of the way.  One of them was a rear-wheel drive SUV.  I didn't even know those existed.  I also saw a rear-wheel drive extended-cab pickup truck slide off to the side of the road at one point.&lt;/p&gt;
&lt;p&gt;It took me an hour to go the two blocks from my office's parking lot to the main road (the two cars I helped push happened to be blocking my turn onto that main road, which I'm sure was part of the delay &amp;mdash; although how long they were there and/or if they replaced other cars that were stuck there moments before, I couldn't say).  It was very slow going down that road.  (Interesting side note:  normally three lanes, there were four lanes of traffic heading in my direction.  Amazing what happens when no one can see the lines.)&lt;/p&gt;
&lt;p&gt;I finally got home at 3:30, took about a half hour fighting with my laptop before I gave up connecting it to my wireless network and took it upstairs to plug it in to my office network hub, when my oldest son came up to tell me that his younger brother had thrown up on the couch.  Since my wife and the toddler were down for a nap, I went downstairs and started cleaning.&lt;/p&gt;
&lt;p&gt;However, except for one kid who's a little sick (no fever), everyone's home and safe.  And for that, I thank The Lord for a good day.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-5401617621134995072?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/5401617621134995072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=5401617621134995072&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/5401617621134995072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/5401617621134995072'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/03/heavenly-father-i-thank-thee-for-this.html' title='Heavenly Father, I thank Thee for this day...'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-3850895696187454470</id><published>2009-03-14T18:25:00.000-06:00</published><updated>2009-03-14T18:24:36.189-06:00</updated><title type='text'>Well, that was painless... mostly...</title><content type='html'>&lt;p&gt;I noticed that Debian had released version 5.0 Lenny.  Considering I was still running my server on Debian 3.1 and had completely missed 4.0, I decided that it was probably time to upgrade.&lt;/p&gt;
&lt;p&gt;I went to &lt;a href="http://www.debian.org"&gt;Debian's site&lt;/a&gt;, followed the handy link to the release notes (that was in the sentence "If you are upgrading from a previous version"), went to the chapter about upgrading (chapter 4, if you were wondering), and followed the step-by-step instructions.&lt;/p&gt;
&lt;p&gt;When I rebooted my system, I did so directly from the machine itself, which was good, because installing the new kernel did not select it as the default in grub.  I also noticed that iptables did not load its rule set, and I quickly discovered it was because I had recompiled the previous kernel myself to include a "TARPIT" rule that didn't exist in a stock kernel image.  Updating the rules to just go to a "drop" rule seemed to work, except my wireless subnet was having difficulty connecting.  Long story short, I didn't need the extra drop rules (basic ones already existed), and once I removed them, all was right with the world.&lt;/p&gt;
&lt;p&gt;I was even able to upgrade PHP to version 5 and finally get the graphs working in the vnstat PHP front-end.  (They're still limited to the rolling 30 days that vnstat records, so I'll still be using my own graphs for my reports, though.)&lt;/p&gt;
&lt;p&gt;All in all, it was a pretty painless process, most of it I was able to do from the comfort of my laptop.&lt;/p&gt;
&lt;p&gt;[edit] Um, mostly.  It seems that about a third of my packets between the internet and my wireless subnet are just getting dropped.  Figures; it couldn't be &lt;i&gt;that&lt;/i&gt; smooth.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-3850895696187454470?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/3850895696187454470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=3850895696187454470&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/3850895696187454470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/3850895696187454470'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/03/well-that-was-painless.html' title='Well, that was painless... mostly...'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-3827151251171233363</id><published>2009-03-12T13:15:00.000-06:00</published><updated>2009-03-12T13:15:36.902-06:00</updated><title type='text'>Right-click for everything?</title><content type='html'>&lt;p&gt;I don't easily remember names.  I can meet someone, have an hour-long conversation with them, and completely forget who they are by the next day.  It's very embarrassing.  When I was younger, I used to daydream about a contact lens or something that would give you a sort of "on-screen display" so when you came up to someone, it would display that person's name.&lt;/p&gt;
&lt;p&gt;At the Technology, Entertainment, Design conference, MIT demoed a &lt;a href="http://www.escapistmagazine.com/news/view/90114-MIT-Demos-Wearable-Sixth-Sense-at-TED"&gt;wearable "sixth sense" computer&lt;/a&gt; that would do just about that.  And more.  Using a camera and a projector, it basically replicates some of the Microsoft Surface technology, except the "surface" isn't a fixed tabletop; it's the world.  It's as if you could right-click on anything you could see and be more or less instantly presented with information about it.&lt;/p&gt;
&lt;p&gt;Well, and then some.  You can also take pictures simply by framing the picture with your fingers, dial a phone by holding out your hand and pushing the buttons that are projected onto it, check the time by holding out your wrist and reading the clock projected there&amp;hellip;&lt;/p&gt;
&lt;p&gt;The demo video is at the link above, and it's well worth watching if nothing else then just because it's wicked cool.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-3827151251171233363?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/3827151251171233363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=3827151251171233363&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/3827151251171233363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/3827151251171233363'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/03/right-click-for-everything.html' title='Right-click for everything?'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-8241277606162001837</id><published>2009-03-02T18:58:00.000-07:00</published><updated>2009-03-02T18:58:08.566-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bandwidth'/><title type='text'>Bandwidth for February</title><content type='html'>&lt;p&gt;Here's February's stats:&lt;/p&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/_zS29HOwsh6M/SayM1q_xLrI/AAAAAAAAA9o/SporJYA8iaI/s1600-h/February09.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_zS29HOwsh6M/SayM1q_xLrI/AAAAAAAAA9o/SporJYA8iaI/s320/February09.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;22.66GB down, 6.60GB up, 29.26GB total.  For being a short month, it comes in barely behind January in total monthly usage.  11.7% of the cap.  Since September (6 months), 177.97GB used total, or 71.19% of the allotment for a single month.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-8241277606162001837?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/8241277606162001837/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=8241277606162001837&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/8241277606162001837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/8241277606162001837'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/03/bandwidth-for-february.html' title='Bandwidth for February'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_zS29HOwsh6M/SayM1q_xLrI/AAAAAAAAA9o/SporJYA8iaI/s72-c/February09.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-2537263904465322486</id><published>2009-02-22T11:07:00.000-07:00</published><updated>2009-02-22T11:07:11.425-07:00</updated><title type='text'>My Answering Machine has a Name -- and a Debt</title><content type='html'>&lt;p&gt;The random debt collection &lt;a href="http://www.yakkowarner.com/2008/07/guido-is-coming-to-break-your-kneecaps.html"&gt;continues&lt;/a&gt;.  Recently, I've been getting calls from a machine that go something like this [the names have been changed to protect the nonexistent]:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;i style="font-size:smaller"&gt;normal female voice&lt;/i&gt; This is an important call for&amp;hellip;&lt;br /&gt;
&lt;i style="font-size:smaller"&gt;deep, robotic voice&lt;/i&gt; JAMES WARNER&lt;br /&gt;
&lt;i style="font-size:smaller"&gt;normal female voice&lt;/i&gt; If you are&amp;hellip;&lt;br /&gt;
&lt;i style="font-size:smaller"&gt;deep, robotic voice&lt;/i&gt; JAMES WARNER&lt;br /&gt;
&lt;i style="font-size:smaller"&gt;normal female voice&lt;/i&gt; Please press 1 now.  If you are not&amp;hellip;&lt;br /&gt;
&lt;i style="font-size:smaller"&gt;deep, robotic voice&lt;/i&gt; JAMES WARNER&lt;br /&gt;
&lt;i style="font-size:smaller"&gt;normal female voice&lt;/i&gt; Please press 2 now.&lt;/p&gt;
&lt;p&gt;I press 2.&lt;/p&gt;
&lt;p&gt;&lt;i style="font-size:smaller"&gt;normal female voice&lt;/i&gt; If you need some time to get&amp;hellip;&lt;br /&gt;
&lt;i style="font-size:smaller"&gt;deep, robotic voice&lt;/i&gt; JAMES WARNER&lt;br /&gt;
&lt;i style="font-size:smaller"&gt;normal female voice&lt;/i&gt; Please press 1 now.  If&amp;hellip;&lt;br /&gt;
&lt;i style="font-size:smaller"&gt;deep, robotic voice&lt;/i&gt; JAMES WARNER&lt;br /&gt;
&lt;i style="font-size:smaller"&gt;normal female voice&lt;/i&gt; Is not available, please press 2 now.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I press 2, and the normal, female voice tells me how important this call is for (deep, robotic voice) JAMES WARNER, and the call ends.  Unfortunately (and, in retrospect, I guess I should've expected such), there was no way to specify that there &lt;i&gt;is no&lt;/i&gt; "James Warner" at this number, despite it being &lt;i&gt;a&lt;/i&gt; "Warner" residence.&lt;/p&gt;
&lt;p&gt;I've been getting a lot of these calls lately, but my answering machine picked up an interesting variant recently.  It went like this:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;i style="font-size:smaller"&gt;normal male voice&lt;/i&gt; This is an important call for&amp;hellip;&lt;br /&gt;
&lt;i style="font-size:smaller"&gt;deep, robotic voice&lt;/i&gt; JAMES WARNER&lt;br /&gt;
&lt;i style="font-size:smaller"&gt;normal male voice&lt;/i&gt; If you are not&amp;hellip;&lt;br /&gt;
&lt;i style="font-size:smaller"&gt;deep, robotic voice&lt;/i&gt; JAMES WARNER&lt;br /&gt;
&lt;i style="font-size:smaller"&gt;normal male voice&lt;/i&gt; Please hang up now.&lt;/p&gt;
&lt;p&gt;My answering machine fails to hang up.&lt;/p&gt;
&lt;i style="font-size:smaller"&gt;normal male voice&lt;/i&gt; By staying on the line, you confirm that you are&amp;hellip;&lt;br /&gt;
&lt;i style="font-size:smaller"&gt;deep, robotic voice&lt;/i&gt; JAMES WARNER&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;The message goes on to offer "James Warner" (the new name for my answering machine) time to get some privacy for this "very important call", and then to tell "James Warner" that this call is to obtain information to collect a debt (surprise), and please call some 1-800 number.&lt;/p&gt;
&lt;p&gt;So apparently, my answering machine has now accepted a new name and, by extension, responsibility for a debt.  Not that I believe for a second it would hold up in any legal venue.&lt;/p&gt;
&lt;p&gt;It'd be almost amusing if my phone wasn't ringing twice a day with these automated calls.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-2537263904465322486?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/2537263904465322486/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=2537263904465322486&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/2537263904465322486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/2537263904465322486'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/02/my-answering-machine-has-name-and-debt.html' title='My Answering Machine has a Name -- and a Debt'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-8270274748735792429</id><published>2009-02-12T09:16:00.001-07:00</published><updated>2009-02-12T09:16:01.038-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>I don't like all those decimals anymore</title><content type='html'>&lt;p&gt;So I'm working on a project, and I'm using the SQL Server CE engine as my database.  The database engine recently had an upgrade to 3.5.1, so when my client got a new computer and needed to install my program on it, the upgraded database engine was what was downloaded from Microsoft's web site.  I didn't think much of it, as I had downloaded it as well, and I hadn't had any issues.  However, when he started using the program with real-world data, he got an error:&lt;/p&gt;
&lt;blockquote&gt;&lt;code&gt;SqlCeException: 'A parameter is missing. [ Parameter ordinal = 1 ]'&lt;/code&gt;&lt;/blockquote&gt;
&lt;p&gt;Ok, maybe I goofed.  Perhaps in one of my updates, which added a column to one of the tables, I left off a parameter.  So I tested the code on my machine, and it of course performed flawlessly.&lt;/p&gt;
&lt;p&gt;I went to the client's site and tested it there.  Sure enough, there was the error.  I copied his database and ran my code against it, in debug mode, and&amp;hellip; yes, I finally duplicated the error.  Well, at least that told me the error was real.&lt;/p&gt;
&lt;p&gt;Then commenced the tedious task of analyzing the SQL command being constructed; ensuring that all parameters were accounted for, all columns were spelled correctly, and all parameter names in the statement matched the names of the parameter objects added to the command; comparing his database to mine to make sure all table columns were accounted for and of the correct types.  Everything matched.  There were no parameters missing, misspelled, or misplaced.&lt;/p&gt;
&lt;p&gt;After I fully convinced myself that everything was in order, I finally went to Google with the full text of the error, and I was fortunate to stumble across &lt;a href="https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=362812"&gt;a bug reported on Microsoft's Connect site&lt;/a&gt; that indicated a problem with decimal values in SQL CE 3.5.1 under "certain conditions".  Fortunately, the workaround listed helped me identify those conditions and what to do about them:  it has to do with the number of decimal places one attempts to pass to SQL CE.&lt;/p&gt;
&lt;p&gt;Fortunately, when building parameters, I pass every value through a function that checks for &lt;code&gt;null&lt;/code&gt; and converts to &lt;code&gt;DBNull&lt;/code&gt; (I have yet to hear a convincing reason why these must be different), and checks for &lt;code&gt;bool&lt;/code&gt; types and converts true/false to 1/0.  All I needed to do to fix this was to add code that checks for the &lt;code&gt;decimal&lt;/code&gt; type and return &lt;code&gt;Math.Round(value, 4)&lt;/code&gt; (although it took a little experimentation to determine that "4" was the correct number of decimals).&lt;/p&gt;
&lt;p&gt;All because Microsoft decided they didn't like seeing all those decimal places anymore; and instead of rounding or ignoring them like they did in a previous revision, suddenly they were going to throw a completely incorrect error message (no parameter was missing, and the one it suddenly found "questionable" was not in position 1).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-8270274748735792429?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/8270274748735792429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=8270274748735792429&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/8270274748735792429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/8270274748735792429'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/02/i-dont-like-all-those-decimals-anymore.html' title='I don&apos;t like all those decimals anymore'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8166852.post-8923594274198528143</id><published>2009-02-11T13:16:00.004-07:00</published><updated>2009-02-11T13:16:01.214-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>What are you, Picasso(.Net)?</title><content type='html'>&lt;p&gt;There is a form in our application that draws very, very slowly.  I'm trying to fix that.&lt;/p&gt;
&lt;p&gt;In .Net, you have very little control over a border.  In many cases (in particular, in this instance, with a Panel), you only get to set whether or not the control &lt;i&gt;has&lt;/i&gt; a border, and whether that border is solid or rendered with a 3D effect.  If you want more control over the border (such as setting its thickness or color), you have to draw one yourself.  Since WinForms.Net has no "Line" control, this means you have to draw the line on the form at runtime by subscribing to the form's Paint event and inserting your line-drawing code there.&lt;/p&gt;
&lt;p&gt;You have slightly more control over a background, being able to set the color in most cases; but if you want anything fancy like a gradient, it again requires custom paint code.&lt;/p&gt;
&lt;p&gt;It is, therefore, not surprising that we have quite a few Paint event handlers on this particular form.&lt;/p&gt;
&lt;p&gt;The layout of our form is as follows:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;There is data in a couple panels at the top of the form.&lt;/li&gt;
&lt;li&gt;There are submit and cancel buttons in a panel at the bottom of the form, along with an information panel.&lt;/li&gt;
&lt;li&gt;In the center of the form is a large area.  This area (which is itself a panel) contains one to many user controls.&lt;/li&gt;
&lt;li&gt;Each user control is designed first as a panel.&lt;/li&gt;
&lt;li&gt;The panel contains five "header-style" panels and three user controls.&lt;/li&gt;
&lt;li&gt;The top-most and bottom-most header panels contain summary information &amp;mdash; the top being the name of this whole grouping of data, and the bottom being a subtotal.&lt;/li&gt;
&lt;li&gt;The middle three header panels contain a summary of the data on each of the "sub-user controls", plus a button that hides or shows that user control.&lt;/li&gt;
&lt;li&gt;On load, the sub-user controls are hidden, so a "collapsed" view of all header panels is shown.&lt;/li&gt;
&lt;li&gt;The header panels are filled with a gradient fill.  This gradient creates a much more visually-appealing division between header rows than solid colors with lines between them would do.  (There are lines between them as well, but even with 3pt black dividing lines, solid colors just blend together across those lines in a way gradients don't.)&lt;/li&gt;
&lt;li&gt;There are drawn borders around each header panel, and around the entire user control itself.  There are also separator lines between most of the panels on the form elsewhere.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I thought maybe the gradient fill was just causing too much overhead, but when I replaced it with a solid fill, it had no effect on the overall speed of the form.  So, I put debug code in all the Paint event handlers, to see how often the paint events were firing, as I figured this might be the source of my problem.  The paint events for each of the panels on the main form fired 2-10 times each (the one panel containing the user controls firing the most often).  The paint events for the innermost user controls (the "sub-user controls") fired three times each, which made sense given there were three sets of them loading &amp;mdash; except for the first of the group, which fired six times (twice per control).&lt;/p&gt;
&lt;p&gt;The containing user control is where things go insane.  There are three of them, remember, containing five header panels and three (hidden, at startup) user controls inside.  The header panels' paint events fired 5 (for the header itself) to 25 (for each of the sub-controls' headers) times each (which, I suppose, you can divide by 3 to get approximate firings per control).  The user control's large panel containing all child controls (header panels and sub-user controls), its paint event fired 651 times, and the paint event for the user control itself fired 747 times!&lt;/p&gt;
&lt;p&gt;And that's just when the form is created.  I added a button that resizes the form by increasing the width by about 10 pixels, just to see the effect, and I got 153 panel paint events and 168 control paint events.&lt;/p&gt;
&lt;p&gt;The maddening thing is, the user control's paint event handler is empty.  It does nothing (except for the debug code that notes the firing).  Oh, it &lt;i&gt;did&lt;/i&gt; do something &amp;mdash; it &lt;i&gt;did&lt;/i&gt; draw a gradient pattern under the entire control &amp;mdash; but since the drawing it was doing was completely covered by all the controls that were placed on top of it, I removed it.&lt;/p&gt;
&lt;p&gt;The panel's paint method actually does something &amp;mdash; it draws a heavy border around all the subordinate controls.  And, aesthetically-speaking, it's really needed.  What I can't understand is why exactly it's needed over 200 times per control, especially when the containing and contained controls combined aren't getting painted as often (by a factor of about 7).&lt;/p&gt;
&lt;p&gt;So, what's my solution?  Well, aside from making sure the paint events did as little work as possible (why is &lt;code&gt;e.Graphics.SetClip(e.ClipRectangle)&lt;/code&gt; not automatic in a Paint event?), drawing gradients in &lt;code&gt;Rectangle rect&lt;/code&gt; only &lt;code&gt;if (e.ClipRectangle.Contains(rect) || e.ClipRectangle.IntersectsWith(rect))&lt;/code&gt;, and then only in the part &lt;code&gt;rect.Intersect(e.ClipRectangle)&lt;/code&gt;; but I also completely unbound the Paint event handlers in the user control, and instead of drawing a thick border on the panel, just used the default &lt;code&gt;BorderStyle.FixedSingle&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;It's still slow, although not &lt;i&gt;as&lt;/i&gt; slow as it was (I'm sure those events are still getting fired, just with no custom code to process); and it doesn't look the same with the change in border, but there's enough padding between user control instances that I think I can get away with it.&lt;/p&gt;
&lt;p&gt;In short, I didn't solve the problem; I still can't find the &lt;i&gt;cause&lt;/i&gt;, and I've only been marginally successful in treating the symptom.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8166852-8923594274198528143?l=www.yakkowarner.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yakkowarner.com/feeds/8923594274198528143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8166852&amp;postID=8923594274198528143&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/8923594274198528143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8166852/posts/default/8923594274198528143'/><link rel='alternate' type='text/html' href='http://www.yakkowarner.com/2009/02/what-are-you-picassonet.html' title='What are you, Picasso(.Net)?'/><author><name>Yakko Warner</name><uri>https://profiles.google.com/102705077104052556673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-n1ELqIITtXM/AAAAAAAAAAI/AAAAAAAACRo/qTx2DZFcbYg/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry></feed>
